Skip to content

Commit

Permalink
move jkstack to main.c
Browse files Browse the repository at this point in the history
replace jstack with asm()s
  • Loading branch information
Robert Morris committed Aug 5, 2010
1 parent eb18645 commit 2cf6b32
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 28 deletions.
2 changes: 0 additions & 2 deletions defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@ void yield(void);

// swtch.S
void swtch(struct context**, struct context*);
void jstack(uint);

// spinlock.c
void acquire(struct spinlock*);
Expand Down Expand Up @@ -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);
Expand Down
22 changes: 16 additions & 6 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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();
}

Expand Down
1 change: 1 addition & 0 deletions runoff.list
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ proc.h
proc.c
swtch.S
kalloc.c
vm.c

# system calls
traps.h
Expand Down
1 change: 0 additions & 1 deletion sh.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 0 additions & 8 deletions swtch.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
11 changes: 0 additions & 11 deletions vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 2cf6b32

Please sign in to comment.