move jkstack to main.c
replace jstack with asm()s
This commit is contained in:
parent
eb18645f17
commit
2cf6b32d4d
2
defs.h
2
defs.h
|
@ -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);
|
||||
|
|
22
main.c
22
main.c
|
@ -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
|
||||
|
|
1
sh.c
1
sh.c
|
@ -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);
|
||||
|
|
8
swtch.S
8
swtch.S
|
@ -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
vm.c
11
vm.c
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue