summaryrefslogtreecommitdiff
path: root/src/sys/arch/amd64/os
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/arch/amd64/os')
-rw-r--r--src/sys/arch/amd64/os/os_proc.c19
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;