• Ram Amrani's avatar
    qed: Fix interrupt flags on Rx LL2 · 1df2aded
    Ram Amrani authored
    Before iterating over the the LL2 Rx ring, the ring's
    spinlock is taken via spin_lock_irqsave().
    The actual processing of the packet [including handling
    by the protocol driver] is done without said lock,
    so qed releases the spinlock and re-claims it afterwards.
    
    Problem is that the final spin_lock_irqrestore() at the end
    of the iteration uses the original flags saved from the
    initial irqsave() instead of the flags from the most recent
    irqsave(). So it's possible that the interrupt status would
    be incorrect at the end of the processing.
    
    Fixes: 0a7fb11c ("qed: Add Light L2 support");
    CC: Ram Amrani <Ram.Amrani@cavium.com>
    Signed-off-by: default avatarYuval Mintz <Yuval.Mintz@cavium.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1df2aded
qed_ll2.c 64.2 KB