xen-netback: use irqsave/irqrestore in xenvif_rx_dequeue()
xenvif_rx_action() acquires, releases queue->rx_lock via spin_lock_irq(),
spin_unlock_irq(). This in-turn calls xenvif_rx_dequeue(), which
acquires, releases a different spinlock, queue->rx_queue.lock, also via
spin_lock_irq(), spin_unlock_irq(). The second set of calls is
problematic because it leads to irqs being enabled early:
spin_lock_irq(&queue->rx_lock); /* xenvif_rx_action */
spin_lock_irq(&queue->rx_queue.lock); /* xenvif_rx_dequeue */
spin_unlock_irq(&queue->rx_queue.lock); /* xenvif_rx_dequeue */
>> /* irqs already enabled */
spin_unlock_irq(&queue->rx_lock); /* xenvif_rx_action */
In general spin_lock_irq(), spin_unlock_irq() calls cannot be composed.
Fixes: 60fb2abf8867 ("xen-netback: copy buffer on xenvif_start_xmit")
(cherry picked from commit
75a74bc16c1f378e035604dc0c730ef2ab061d09)
Orabug:
30223112
Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>