提交 2cf6b32d 创建 作者: Robert Morris's avatar Robert Morris

move jkstack to main.c

replace jstack with asm()s
上级 eb18645f
......@@ -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();
}
......
......@@ -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
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论