#include #include #include #include #include #include #include #include #include void do_sched (struct proc* proc, spin_lock_t* cpu_lock) { spin_lock (&proc->lock); thiscpu->tss.rsp0 = proc->pdata.kernel_stack; thiscpu->syscall_kernel_stack = proc->pdata.kernel_stack; amd64_wrmsr (MSR_FS_BASE, proc->pdata.fs_base); void* cr3 = (void*)proc->procgroup->pd.cr3_paddr; struct saved_regs regs; memcpy (®s, &proc->pdata.regs, sizeof (regs)); spin_unlock (&proc->lock); spin_unlock (cpu_lock); amd64_do_sched ((void*)®s, cr3); }