lkml.org 
[lkml]   [2016]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] xen/x86: don't lose event interrupts
    From
    Date
    On 16/04/16 03:23, Stefano Stabellini wrote:
    > On slow platforms with unreliable TSC, such as QEMU emulated machines,
    > it is possible for the kernel to request the next event in the past. In
    > that case, in the current implementation of xen_vcpuop_clockevent, we
    > simply return -ETIME. To be precise the Xen returns -ETIME and we pass
    > it on. However the result of this is a missed event, which simply causes
    > the kernel to hang.
    >
    > Instead it is better to always ask the hypervisor for a timer event,
    > even if the timeout is in the past. That way there are no lost
    > interrupts and the kernel survives. To do that, remove the
    > VCPU_SSHOTTMR_future flag.
    >
    > Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>

    Acked-by: Juergen Gross <jgross@suse.com>

    >
    > diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
    > index a0a4e55..6deba5b 100644
    > --- a/arch/x86/xen/time.c
    > +++ b/arch/x86/xen/time.c
    > @@ -290,11 +290,11 @@ static int xen_vcpuop_set_next_event(unsigned long delta,
    > WARN_ON(!clockevent_state_oneshot(evt));
    >
    > single.timeout_abs_ns = get_abs_timeout(delta);
    > - single.flags = VCPU_SSHOTTMR_future;
    > + /* Get an event anyway, even if the timeout is already expired */
    > + single.flags = 0;
    >
    > ret = HYPERVISOR_vcpu_op(VCPUOP_set_singleshot_timer, cpu, &single);
    > -
    > - BUG_ON(ret != 0 && ret != -ETIME);
    > + BUG_ON(ret != 0);
    >
    > return ret;
    > }
    >

    \
     
     \ /
      Last update: 2016-04-21 11:21    [W:3.020 / U:0.216 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site