aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/entry.S
diff options
context:
space:
mode:
authorKeir Fraser <keir@xensource.com>2007-04-06 15:07:34 +0100
committerKeir Fraser <keir@xensource.com>2007-04-06 15:07:34 +0100
commite620b631ab97fddf8ae51545903fec76a9a15379 (patch)
tree0d9eb8275f83ed1465abfeadd5d384450f09c9ba /xen/arch/x86/x86_64/entry.S
parentfff07ef6152ccaf5767f02f4e65146b28a0620df (diff)
downloadxen-e620b631ab97fddf8ae51545903fec76a9a15379.tar.gz
xen-e620b631ab97fddf8ae51545903fec76a9a15379.tar.bz2
xen-e620b631ab97fddf8ae51545903fec76a9a15379.zip
xen x86/64: Fix int80 direct trap. It must check for events and also
disable interrupts before exiting to guest context. Also sprinkle about some assertions about interrupt-enable status. Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/x86_64/entry.S')
-rw-r--r--xen/arch/x86/x86_64/entry.S6
1 files changed, 4 insertions, 2 deletions
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S
index c921579e3c..d5701588d7 100644
--- a/xen/arch/x86/x86_64/entry.S
+++ b/xen/arch/x86/x86_64/entry.S
@@ -38,6 +38,7 @@ switch_to_kernel:
/* %rbx: struct vcpu, interrupts disabled */
restore_all_guest:
+ ASSERT_INTERRUPTS_DISABLED
RESTORE_ALL
testw $TRAP_syscall,4(%rsp)
jz iret_exit_to_guest
@@ -230,7 +231,7 @@ ENTRY(int80_direct_trap)
/* Check that the callback is non-null. */
leaq VCPU_int80_bounce(%rbx),%rdx
- cmp $0, TRAPBOUNCE_flags(%rdx)
+ cmp $0,TRAPBOUNCE_flags(%rdx)
jz int80_slow_path
movq VCPU_domain(%rbx),%rax
@@ -238,7 +239,7 @@ ENTRY(int80_direct_trap)
jnz compat_int80_direct_trap
call create_bounce_frame
- jmp restore_all_guest
+ jmp test_all_events
int80_slow_path:
/*
@@ -256,6 +257,7 @@ int80_slow_path:
/* %rdx: trap_bounce, %rbx: struct vcpu */
/* On return only %rbx is guaranteed non-clobbered. */
create_bounce_frame:
+ ASSERT_INTERRUPTS_ENABLED
testb $TF_kernel_mode,VCPU_thread_flags(%rbx)
jnz 1f
/* Push new frame at registered guest-OS stack base. */