aboutsummaryrefslogtreecommitdiffstats
path: root/netbsd-2.0-xen-sparse
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2005-02-24 11:11:57 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2005-02-24 11:11:57 +0000
commit6a329a59de41a0b47b42d4db57b7ed9ec14811e5 (patch)
tree665b2774e2538bfd8d54a980e9306152f93f8b0b /netbsd-2.0-xen-sparse
parente61f0e7f910eaa81737a26b0a9e0709d34a63f9d (diff)
downloadxen-6a329a59de41a0b47b42d4db57b7ed9ec14811e5.tar.gz
xen-6a329a59de41a0b47b42d4db57b7ed9ec14811e5.tar.bz2
xen-6a329a59de41a0b47b42d4db57b7ed9ec14811e5.zip
bitkeeper revision 1.1236.1.16 (421db67dL0mXatHebAtt9KpMqkCIBQ)
More FPU fixes. Extend taskswitch hypercall to allow TS bit to be cleared as well as set.
Diffstat (limited to 'netbsd-2.0-xen-sparse')
-rw-r--r--netbsd-2.0-xen-sparse/sys/arch/xen/i386/machdep.c4
-rw-r--r--netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h8
2 files changed, 8 insertions, 4 deletions
diff --git a/netbsd-2.0-xen-sparse/sys/arch/xen/i386/machdep.c b/netbsd-2.0-xen-sparse/sys/arch/xen/i386/machdep.c
index 5ec2d45271..ded4538782 100644
--- a/netbsd-2.0-xen-sparse/sys/arch/xen/i386/machdep.c
+++ b/netbsd-2.0-xen-sparse/sys/arch/xen/i386/machdep.c
@@ -412,7 +412,7 @@ i386_proc0_tss_ldt_init()
ltr(lwp0.l_md.md_tss_sel);
lldt(pcb->pcb_ldt_sel);
#else
- HYPERVISOR_fpu_taskswitch();
+ HYPERVISOR_fpu_taskswitch(1);
XENPRINTF(("lwp tss sp %p ss %04x/%04x\n",
(void *)pcb->pcb_tss.tss_esp0,
pcb->pcb_tss.tss_ss0, IDXSEL(pcb->pcb_tss.tss_ss0)));
@@ -455,7 +455,7 @@ i386_switch_context(struct pcb *new)
ci = curcpu();
if (ci->ci_fpused) {
- HYPERVISOR_fpu_taskswitch();
+ HYPERVISOR_fpu_taskswitch(1);
ci->ci_fpused = 0;
}
diff --git a/netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h b/netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h
index eb91c2a980..2ac01b4d25 100644
--- a/netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h
+++ b/netbsd-2.0-xen-sparse/sys/arch/xen/include/hypervisor.h
@@ -180,12 +180,16 @@ HYPERVISOR_set_callbacks(
}
static inline int
-HYPERVISOR_fpu_taskswitch(void)
+HYPERVISOR_fpu_taskswitch(int set)
{
int ret;
+ unsigned long ign;
+
__asm__ __volatile__ (
TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) : "memory" );
+ : "=a" (ret), "=b" (ign)
+ : "0" (__HYPERVISOR_fpu_taskswitch), "1" (set)
+ : "memory" );
return ret;
}