mmu.h:
funny \ alignment in mmu.h
-main.c:
- should use static int bcpu to avoid having live
- stack variable across the asm volatile that
- changes %esp and %ebp.
-
- cpus[0] -> cpus[bcpu]
-
proc.c:
as a consequence of the implementation of proc_kill,
any loop calling sleep should check for p->killed
main0(void)
{
int i;
- int bcpu;
+ static int bcpu; // cannot be on stack
struct proc *p;
// clear BSS
bcpu = mp_bcpu();
// switch to bootstrap processor's stack
- asm volatile("movl %0, %%esp" : : "r" (cpus[0].mpstack + MPSTACK - 32));
- asm volatile("movl %0, %%ebp" : : "r" (cpus[0].mpstack + MPSTACK));
+ asm volatile("movl %0, %%esp" : : "r" (cpus[bcpu].mpstack + MPSTACK - 32));
+ asm volatile("movl %0, %%ebp" : : "r" (cpus[bcpu].mpstack + MPSTACK));
lapic_init(bcpu);