lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 056/340] xen/netback: fix spurious event detection for common event case
    Date
    From: Juergen Gross <jgross@suse.com>

    [ Upstream commit a3daf3d39132b405781be8d9ede0c449b244b64e ]

    In case of a common event for rx and tx queue the event should be
    regarded to be spurious if no rx and no tx requests are pending.

    Unfortunately the condition for testing that is wrong causing to
    decide a event being spurious if no rx OR no tx requests are
    pending.

    Fix that plus using local variables for rx/tx pending indicators in
    order to split function calls and if condition.

    Fixes: 23025393dbeb3b ("xen/netback: use lateeoi irq binding")
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Reviewed-by: Paul Durrant <paul@xen.org>
    Reviewed-by: Wei Liu <wl@xen.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/xen-netback/interface.c | 8 +++++---
    1 file changed, 5 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
    index e889488b84a03..8090895873011 100644
    --- a/drivers/net/xen-netback/interface.c
    +++ b/drivers/net/xen-netback/interface.c
    @@ -162,13 +162,15 @@ irqreturn_t xenvif_interrupt(int irq, void *dev_id)
    {
    struct xenvif_queue *queue = dev_id;
    int old;
    + bool has_rx, has_tx;

    old = atomic_fetch_or(NETBK_COMMON_EOI, &queue->eoi_pending);
    WARN(old, "Interrupt while EOI pending\n");

    - /* Use bitwise or as we need to call both functions. */
    - if ((!xenvif_handle_tx_interrupt(queue) |
    - !xenvif_handle_rx_interrupt(queue))) {
    + has_tx = xenvif_handle_tx_interrupt(queue);
    + has_rx = xenvif_handle_rx_interrupt(queue);
    +
    + if (!has_rx && !has_tx) {
    atomic_andnot(NETBK_COMMON_EOI, &queue->eoi_pending);
    xen_irq_lateeoi(irq, XEN_EOI_FLAG_SPURIOUS);
    }
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-01 22:55    [W:4.087 / U:0.392 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site