diff options
Diffstat (limited to 'src/sys/arch/amd64/os/os_proc.c')
-rw-r--r-- | src/sys/arch/amd64/os/os_proc.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/sys/arch/amd64/os/os_proc.c b/src/sys/arch/amd64/os/os_proc.c index 93e5d73..23948ab 100644 --- a/src/sys/arch/amd64/os/os_proc.c +++ b/src/sys/arch/amd64/os/os_proc.c @@ -112,8 +112,14 @@ md_proc_init(struct proc *procp, int flags) return error; } - ds = USER_DS | 3; - cs = USER_CS | 3; + if (ISSET(flags, SPAWN_KTD)) { + ds = KERNEL_DS; + cs = KERNEL_CS; + procp->flags |= PROC_KTD; + } else { + ds = USER_DS | 3; + cs = USER_CS | 3; + } /* * Set up the mapping specifier, we'll use zero @@ -146,7 +152,7 @@ md_proc_init(struct proc *procp, int flags) * Process idle loop */ __dead void -md_proc_yield(void) +md_proc_idle(void) { struct proc *proc; struct pcore *core = this_core(); @@ -161,11 +167,6 @@ md_proc_yield(void) */ for (;;) { lapic_timer_oneshot_us(9000); - error = sched_deq(&core->scq, &proc); - if (error == 0) { - core->curproc = proc; - md_proc_kick(proc); - } __ASMV("sti; hlt"); } } @@ -288,7 +289,7 @@ md_proc_kill(struct proc *procp, int flags) /* If this is us, spin time */ if (self->pid == procp->pid) { core->curproc = NULL; - md_proc_yield(); + md_proc_idle(); } return 0; |