lkml.org 
[lkml]   [2011]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] xen: x86_32: do not enable iterrupts when returning from exception in interrupt context
    Date
    If vmalloc page_fault happens inside of interrupt handler with interrupts
    disabled then on exit path from exception handler when there is no pending
    interrupts, the following code (arch/x86/xen/xen-asm_32.S:112):

    cmpw $0x0001, XEN_vcpu_info_pending(%eax)
    sete XEN_vcpu_info_mask(%eax)

    will enable interrupts even if they has been previously disabled according to
    eflags from the bounce frame (arch/x86/xen/xen-asm_32.S:99)

    testb $X86_EFLAGS_IF>>8, 8+1+ESP_OFFSET(%esp)
    setz XEN_vcpu_info_mask(%eax)

    Solution is in setting XEN_vcpu_info_mask only when it should be set
    according to
    cmpw $0x0001, XEN_vcpu_info_pending(%eax)
    but not clearing it if there isn't any pending events.

    Signed-off-by: Igor Mammedov <imammedo@redhat.com>
    ---
    arch/x86/xen/xen-asm_32.S | 6 +++++-
    1 files changed, 5 insertions(+), 1 deletions(-)

    diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S
    index 22a2093..313dca7 100644
    --- a/arch/x86/xen/xen-asm_32.S
    +++ b/arch/x86/xen/xen-asm_32.S
    @@ -113,10 +113,14 @@ xen_iret_start_crit:

    /*
    * If there's something pending, mask events again so we can
    - * jump back into xen_hypervisor_callback
    + * jump back into xen_hypervisor_callback. Otherwise do not
    + * touch XEN_vcpu_info_mask.
    */
    + jne ignore_vcpu_info_mask
    sete XEN_vcpu_info_mask(%eax)

    +ignore_vcpu_info_mask:
    +
    popl %eax

    /*
    --
    1.7.1


    \
     
     \ /
      Last update: 2011-08-31 23:51    [W:3.158 / U:2.776 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site