[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xen: Fix up use of trap_bounce structure.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Date 1177505420 -3600 # Node ID 33e22185002a37bfe1d4a23bbc20951372516a3b # Parent 550a795a3dbd281de78cc513e183576a554ae1b0 xen: Fix up use of trap_bounce structure. Fixes suggested by Jan Beulich. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- xen/arch/x86/x86_32/entry.S | 11 ++++++----- xen/arch/x86/x86_64/compat/entry.S | 16 +++++++--------- xen/arch/x86/x86_64/entry.S | 22 +++++++++++----------- xen/arch/x86/x86_64/traps.c | 3 --- xen/include/asm-x86/domain.h | 8 ++++---- 5 files changed, 28 insertions(+), 32 deletions(-) diff -r 550a795a3dbd -r 33e22185002a xen/arch/x86/x86_32/entry.S --- a/xen/arch/x86/x86_32/entry.S Wed Apr 25 12:04:55 2007 +0100 +++ b/xen/arch/x86/x86_32/entry.S Wed Apr 25 13:50:20 2007 +0100 @@ -75,6 +75,7 @@ ALIGN restore_all_guest: + ASSERT_INTERRUPTS_DISABLED testl $X86_EFLAGS_VM,UREGS_eflags(%esp) jnz restore_all_vm86 #ifdef CONFIG_X86_SUPERVISOR_MODE_KERNEL @@ -129,10 +130,10 @@ failsafe_callback: movl %eax,TRAPBOUNCE_eip(%edx) movl VCPU_failsafe_sel(%ebx),%eax movw %ax,TRAPBOUNCE_cs(%edx) - movw $TBF_FAILSAFE,TRAPBOUNCE_flags(%edx) + movb $TBF_FAILSAFE,TRAPBOUNCE_flags(%edx) bt $_VGCF_failsafe_disables_events,VCPU_guest_context_flags(%ebx) jnc 1f - orw $TBF_INTERRUPT,TRAPBOUNCE_flags(%edx) + orb $TBF_INTERRUPT,TRAPBOUNCE_flags(%edx) 1: call create_bounce_frame xorl %eax,%eax movl %eax,UREGS_ds(%esp) @@ -247,7 +248,7 @@ test_guest_events: movl %eax,TRAPBOUNCE_eip(%edx) movl VCPU_event_sel(%ebx),%eax movw %ax,TRAPBOUNCE_cs(%edx) - movw $TBF_INTERRUPT,TRAPBOUNCE_flags(%edx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%edx) call create_bounce_frame jmp test_all_events @@ -270,7 +271,7 @@ process_nmi: leal VCPU_trap_bounce(%ebx),%edx movl %eax,TRAPBOUNCE_eip(%edx) movw $FLAT_KERNEL_CS,TRAPBOUNCE_cs(%edx) - movw $TBF_INTERRUPT,TRAPBOUNCE_flags(%edx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%edx) call create_bounce_frame jmp test_all_events @@ -383,7 +384,6 @@ 2: testl $X86_EFLAGS_VM,UREGS_eflag movl %eax,UREGS_cs+4(%esp) movl TRAPBOUNCE_eip(%edx),%eax movl %eax,UREGS_eip+4(%esp) - movb $0,TRAPBOUNCE_flags(%edx) ret .section __ex_table,"a" .long .Lft6,domain_crash_synchronous , .Lft7,domain_crash_synchronous @@ -441,6 +441,7 @@ 1: xorl %eax,%eax testb $TBF_EXCEPTION,TRAPBOUNCE_flags(%edx) jz test_all_events call create_bounce_frame + movb $0,TRAPBOUNCE_flags(%edx) jmp test_all_events exception_with_ints_disabled: diff -r 550a795a3dbd -r 33e22185002a xen/arch/x86/x86_64/compat/entry.S --- a/xen/arch/x86/x86_64/compat/entry.S Wed Apr 25 12:04:55 2007 +0100 +++ b/xen/arch/x86/x86_64/compat/entry.S Wed Apr 25 13:50:20 2007 +0100 @@ -102,7 +102,7 @@ compat_test_guest_events: movl %eax,TRAPBOUNCE_eip(%rdx) movl VCPU_event_sel(%rbx),%eax movl %eax,TRAPBOUNCE_cs(%rdx) - movw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) call compat_create_bounce_frame jmp compat_test_all_events @@ -127,7 +127,7 @@ compat_process_nmi: leaq VCPU_trap_bounce(%rbx),%rdx movl %eax,TRAPBOUNCE_eip(%rdx) movl $FLAT_COMPAT_KERNEL_CS,TRAPBOUNCE_cs(%rdx) - movw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) call compat_create_bounce_frame jmp compat_test_all_events @@ -165,12 +165,11 @@ compat_failsafe_callback: movl %eax,TRAPBOUNCE_eip(%rdx) movl VCPU_failsafe_sel(%rbx),%eax movl %eax,TRAPBOUNCE_cs(%rdx) - movw $TBF_FAILSAFE,TRAPBOUNCE_flags(%rdx) + movb $TBF_FAILSAFE,TRAPBOUNCE_flags(%rdx) btq $_VGCF_failsafe_disables_events,VCPU_guest_context_flags(%rbx) jnc 1f - orw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) -1: - call compat_create_bounce_frame + orb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) +1: call compat_create_bounce_frame jmp compat_test_all_events .previous .section __pre_ex_table,"a" @@ -185,6 +184,7 @@ ENTRY(compat_post_handle_exception) testb $TBF_EXCEPTION,TRAPBOUNCE_flags(%rdx) jz compat_test_all_events call compat_create_bounce_frame + movb $0,TRAPBOUNCE_flags(%rdx) jmp compat_test_all_events ENTRY(compat_int80_direct_trap) @@ -194,7 +194,7 @@ ENTRY(compat_int80_direct_trap) /* CREATE A BASIC EXCEPTION FRAME ON GUEST OS (RING-1) STACK: */ /* {[ERRCODE,] EIP, CS, EFLAGS, [ESP, SS]} */ /* %rdx: trap_bounce, %rbx: struct vcpu */ -/* On return only %rbx is guaranteed non-clobbered. */ +/* On return only %rbx and %rdx are guaranteed non-clobbered. */ compat_create_bounce_frame: ASSERT_INTERRUPTS_ENABLED mov %fs,%edi @@ -253,7 +253,6 @@ 2: 2: /* Rewrite our stack frame and return to guest-OS mode. */ /* IA32 Ref. Vol. 3: TF, VM, RF and NT flags are cleared on trap. */ - movl $TRAP_syscall,UREGS_entry_vector+8(%rsp) andl $~(X86_EFLAGS_VM|X86_EFLAGS_RF|\ X86_EFLAGS_NT|X86_EFLAGS_TF),UREGS_eflags+8(%rsp) mov %fs,UREGS_ss+8(%rsp) @@ -266,7 +265,6 @@ 2: movl %eax,UREGS_cs+8(%rsp) movl TRAPBOUNCE_eip(%rdx),%eax movl %eax,UREGS_rip+8(%rsp) - movb $0,TRAPBOUNCE_flags(%rdx) ret .section .fixup,"ax" .Lfx13: diff -r 550a795a3dbd -r 33e22185002a xen/arch/x86/x86_64/entry.S --- a/xen/arch/x86/x86_64/entry.S Wed Apr 25 12:04:55 2007 +0100 +++ b/xen/arch/x86/x86_64/entry.S Wed Apr 25 13:50:20 2007 +0100 @@ -29,10 +29,10 @@ switch_to_kernel: leaq VCPU_trap_bounce(%rbx),%rdx movq VCPU_syscall_addr(%rbx),%rax movq %rax,TRAPBOUNCE_eip(%rdx) - movw $0,TRAPBOUNCE_flags(%rdx) + movb $0,TRAPBOUNCE_flags(%rdx) bt $_VGCF_syscall_disables_events,VCPU_guest_context_flags(%rbx) jnc 1f - orw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) 1: call create_bounce_frame jmp test_all_events @@ -80,10 +80,10 @@ failsafe_callback: leaq VCPU_trap_bounce(%rbx),%rdx movq VCPU_failsafe_addr(%rbx),%rax movq %rax,TRAPBOUNCE_eip(%rdx) - movw $TBF_FAILSAFE,TRAPBOUNCE_flags(%rdx) + movb $TBF_FAILSAFE,TRAPBOUNCE_flags(%rdx) bt $_VGCF_failsafe_disables_events,VCPU_guest_context_flags(%rbx) jnc 1f - orw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) + orb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) 1: call create_bounce_frame jmp test_all_events .previous @@ -191,7 +191,7 @@ test_guest_events: leaq VCPU_trap_bounce(%rbx),%rdx movq VCPU_event_addr(%rbx),%rax movq %rax,TRAPBOUNCE_eip(%rdx) - movw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) call create_bounce_frame jmp test_all_events @@ -215,7 +215,7 @@ process_nmi: sti leaq VCPU_trap_bounce(%rbx),%rdx movq %rax,TRAPBOUNCE_eip(%rdx) - movw $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) + movb $TBF_INTERRUPT,TRAPBOUNCE_flags(%rdx) call create_bounce_frame jmp test_all_events @@ -231,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) + cmpb $0,TRAPBOUNCE_flags(%rdx) jz int80_slow_path movq VCPU_domain(%rbx),%rax @@ -249,13 +249,13 @@ int80_slow_path: movl $((0x80 << 3) | 0x2),UREGS_error_code(%rsp) movl $TRAP_gp_fault,UREGS_entry_vector(%rsp) /* A GPF wouldn't have incremented the instruction pointer. */ - sub $2,UREGS_rip(%rsp) + subq $2,UREGS_rip(%rsp) jmp handle_exception_saved /* CREATE A BASIC EXCEPTION FRAME ON GUEST OS STACK: */ /* { RCX, R11, [DS-GS,] [CR2,] [ERRCODE,] RIP, CS, RFLAGS, RSP, SS } */ -/* %rdx: trap_bounce, %rbx: struct vcpu */ -/* On return only %rbx is guaranteed non-clobbered. */ +/* %rdx: trap_bounce, %rbx: struct vcpu */ +/* On return only %rbx and %rdx are guaranteed non-clobbered. */ create_bounce_frame: ASSERT_INTERRUPTS_ENABLED testb $TF_kernel_mode,VCPU_thread_flags(%rbx) @@ -336,7 +336,6 @@ 2: subq $16,%rsi testq %rax,%rax jz domain_crash_synchronous movq %rax,UREGS_rip+8(%rsp) - movb $0,TRAPBOUNCE_flags(%rdx) ret .section __ex_table,"a" .quad .Lft2,domain_crash_synchronous , .Lft3,domain_crash_synchronous @@ -401,6 +400,7 @@ 1: movq %rsp,%rdi testb $TBF_EXCEPTION,TRAPBOUNCE_flags(%rdx) jz test_all_events call create_bounce_frame + movb $0,TRAPBOUNCE_flags(%rdx) jmp test_all_events /* No special register assumptions. */ diff -r 550a795a3dbd -r 33e22185002a xen/arch/x86/x86_64/traps.c --- a/xen/arch/x86/x86_64/traps.c Wed Apr 25 12:04:55 2007 +0100 +++ b/xen/arch/x86/x86_64/traps.c Wed Apr 25 13:50:20 2007 +0100 @@ -357,9 +357,6 @@ void init_int80_direct_trap(struct vcpu struct trap_info *ti = &v->arch.guest_context.trap_ctxt[0x80]; struct trap_bounce *tb = &v->arch.int80_bounce; - if ( !guest_gate_selector_okay(v->domain, ti->cs) ) - return; - tb->flags = TBF_EXCEPTION; tb->cs = ti->cs; tb->eip = ti->address; diff -r 550a795a3dbd -r 33e22185002a xen/include/asm-x86/domain.h --- a/xen/include/asm-x86/domain.h Wed Apr 25 12:04:55 2007 +0100 +++ b/xen/include/asm-x86/domain.h Wed Apr 25 13:50:20 2007 +0100 @@ -8,10 +8,10 @@ #include <asm/e820.h> struct trap_bounce { - unsigned long error_code; - unsigned short flags; /* TBF_ */ - unsigned short cs; - unsigned long eip; + uint32_t error_code; + uint8_t flags; /* TBF_ */ + uint16_t cs; + unsigned long eip; }; #define MAPHASH_ENTRIES 8 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |