diff options
| author | Robert Morris <rtm@nephron.lcs.mit.edu> | 2010-08-05 14:15:03 -0400 | 
|---|---|---|
| committer | Robert Morris <rtm@nephron.lcs.mit.edu> | 2010-08-05 14:15:03 -0400 | 
| commit | 2cf6b32d4dbc915f5d3b2d7b0e382c0ad20299be (patch) | |
| tree | 07c8bb6c34e0cc22d44046acfa16ba29899842ee | |
| parent | eb18645f17877de4ced951eed5abac61bdfcd5c5 (diff) | |
| download | xv6-labs-2cf6b32d4dbc915f5d3b2d7b0e382c0ad20299be.tar.gz xv6-labs-2cf6b32d4dbc915f5d3b2d7b0e382c0ad20299be.tar.bz2 xv6-labs-2cf6b32d4dbc915f5d3b2d7b0e382c0ad20299be.zip | |
move jkstack to main.c
replace jstack with asm()s
| -rw-r--r-- | defs.h | 2 | ||||
| -rw-r--r-- | main.c | 22 | ||||
| -rw-r--r-- | runoff.list | 1 | ||||
| -rw-r--r-- | sh.c | 1 | ||||
| -rw-r--r-- | swtch.S | 8 | ||||
| -rw-r--r-- | vm.c | 11 | 
6 files changed, 17 insertions, 28 deletions
| @@ -110,7 +110,6 @@ void            yield(void);  // swtch.S  void            swtch(struct context**, struct context*); -void            jstack(uint);  // spinlock.c  void            acquire(struct spinlock*); @@ -157,7 +156,6 @@ void            pminit(void);  void            ksegment(void);  void            kvmalloc(void);  void            vminit(void); -void            jkstack();  void            printstack(void);  void            printpgdir(pde_t *);  pde_t*          setupkvm(void); @@ -7,7 +7,8 @@  static void bootothers(void);  static void mpmain(void); -void jkstack(void) __attribute__((noreturn)); +void jkstack(void)  __attribute__((noreturn)); +void mainc(void);  // Bootstrap processor starts running C code here.  int @@ -21,13 +22,24 @@ main(void)    consoleinit();   // I/O devices & their interrupts    uartinit();      // serial port    pminit();        // physical memory for kernel -  jkstack();       // Jump to mainc on a proper-allocated kernel stack  +  jkstack();       // Jump to mainc on a properly-allocated stack  +} + +void +jkstack(void) +{ +  char *kstack = kalloc(PGSIZE); +  if (!kstack) +    panic("jkstack\n"); +  char *top = kstack + PGSIZE; +  asm volatile("movl %0,%%esp" : : "r" (top)); +  asm volatile("call mainc"); +  panic("jkstack");  }  void  mainc(void)  { -  cprintf("cpus %p cpu %p\n", cpus, cpu);    cprintf("\ncpu%d: starting xv6\n\n", cpu->id);    kvmalloc();      // allocate the kernel page table    pinit();         // process table @@ -52,14 +64,12 @@ mpmain(void)  {    if(cpunum() != mpbcpu()) {      ksegment(); -    cprintf("other cpu\n");      lapicinit(cpunum());    }    vminit();        // Run with paging on each processor -  cprintf("cpu%d: mpmain\n", cpu->id); +  cprintf("cpu%d: starting\n", cpu->id);    idtinit();    xchg(&cpu->booted, 1); -  cprintf("cpu%d: scheduling\n", cpu->id);    scheduler();  } diff --git a/runoff.list b/runoff.list index 6bbd386..3258398 100644 --- a/runoff.list +++ b/runoff.list @@ -22,6 +22,7 @@ proc.h  proc.c  swtch.S  kalloc.c +vm.c  # system calls  traps.h @@ -420,7 +420,6 @@ parseexec(char **ps, char *es)    int tok, argc;    struct execcmd *cmd;    struct cmd *ret; -  int *x = (int *) peek;    if(peek(ps, es, "("))      return parseblock(ps, es); @@ -26,11 +26,3 @@ swtch:    popl %ebx    popl %ebp    ret - -# Jump on a new stack, fake C calling conventions -.globl jstack -jstack:	 -  movl 4(%esp), %esp -  subl $16, %esp	# space for arguments -  movl $0, %ebp	        # terminate functions that follow ebp's -  call mainc	        # continue at mainc @@ -324,17 +324,6 @@ pminit(void)    kinit((char *)kernend, freesz);  } -// Jump to mainc on a properly-allocated kernel stack -void -jkstack(void) -{ -  char *kstack = kalloc(PGSIZE); -  if (!kstack) -    panic("jkstack\n"); -  char *top = kstack + PGSIZE; -  jstack((uint) top); -} -  // Allocate one page table for the machine for the kernel address  // space for scheduler processes.  void | 
