]> www.infradead.org Git - users/jedix/linux-maple.git/commit
xen-netback: use irqsave/irqrestore in xenvif_rx_dequeue()
authorAnkur Arora <ankur.a.arora@oracle.com>
Wed, 14 Aug 2019 22:05:20 +0000 (18:05 -0400)
committerBrian Maly <brian.maly@oracle.com>
Tue, 27 Aug 2019 19:12:08 +0000 (15:12 -0400)
commit79b4de0430b9f62c2aa6c95c73fd09b7fbabe018
treec0ed010a86840d4b0f8850b88cadedd82bdbff97
parent6b538844f05a7d4182ec742b35760f94f9bd95bf
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>
drivers/net/xen-netback/rx.c