blob: 23e54afc5d6bbb050e5bec951c1319312d41c0ca (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include "proc/scheduler.h"
#include "arch/x86_64/hal/gdt.h"
#include "process.h"
#include "../hal/smp.h"
#include <string.h>
void
_scheduler_switch_pcb_arch(pcb_t *target)
{
processor_t *proc = processor_current();
proc->tss.rsp[0] = (uintptr_t)target->header.ksp;
if(target->iopb) {
proc->tss.iopb = sizeof(struct tss);
jove_owned_obj_t *iopb_obj = obj_take(target->iopb);
memcpy(proc->iopb, obj_deref(iopb_obj), sizeof(proc->iopb));
}else{
proc->tss.iopb = 0xff;
}
}
|