diff options
author | Keir Fraser <keir@xensource.com> | 2007-04-06 15:07:34 +0100 |
---|---|---|
committer | Keir Fraser <keir@xensource.com> | 2007-04-06 15:07:34 +0100 |
commit | e620b631ab97fddf8ae51545903fec76a9a15379 (patch) | |
tree | 0d9eb8275f83ed1465abfeadd5d384450f09c9ba /xen/arch/x86/x86_64/entry.S | |
parent | fff07ef6152ccaf5767f02f4e65146b28a0620df (diff) | |
download | xen-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.S | 6 |
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. */ |