void xen_stack_switch(ulong_t ss, ulong_t esp) { long err; if ((err = HYPERVISOR_stack_switch(ss, esp)) != 0) { /* * X_EPERM: bad selector */ panic("xen_stack_switch(%lx, %lx): error %d", ss, esp, -(int)err); } }
/* note: pdb must already be pinned */ static void taskswitch(Page *pdb, ulong stack) { HYPERVISOR_stack_switch(KDSEL, stack); mmuflushtlb(pdb); }