Commit 76541869 authored by David Vrabel's avatar David Vrabel Committed by David S. Miller

xen-netfront: fix oops when disconnected from backend

xennet_disconnect_backend() was not correctly iterating over all the
queues.
Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
Reviewed-by: default avatarWei Liu <wei.liu2@citrix.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a705a906
...@@ -1287,7 +1287,7 @@ static irqreturn_t xennet_rx_interrupt(int irq, void *dev_id) ...@@ -1287,7 +1287,7 @@ static irqreturn_t xennet_rx_interrupt(int irq, void *dev_id)
if (likely(netif_carrier_ok(dev) && if (likely(netif_carrier_ok(dev) &&
RING_HAS_UNCONSUMED_RESPONSES(&queue->rx))) RING_HAS_UNCONSUMED_RESPONSES(&queue->rx)))
napi_schedule(&queue->napi); napi_schedule(&queue->napi);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -1437,10 +1437,11 @@ static void xennet_end_access(int ref, void *page) ...@@ -1437,10 +1437,11 @@ static void xennet_end_access(int ref, void *page)
static void xennet_disconnect_backend(struct netfront_info *info) static void xennet_disconnect_backend(struct netfront_info *info)
{ {
unsigned int i = 0; unsigned int i = 0;
struct netfront_queue *queue = NULL;
unsigned int num_queues = info->netdev->real_num_tx_queues; unsigned int num_queues = info->netdev->real_num_tx_queues;
for (i = 0; i < num_queues; ++i) { for (i = 0; i < num_queues; ++i) {
struct netfront_queue *queue = &info->queues[i];
/* Stop old i/f to prevent errors whilst we rebuild the state. */ /* Stop old i/f to prevent errors whilst we rebuild the state. */
spin_lock_bh(&queue->rx_lock); spin_lock_bh(&queue->rx_lock);
spin_lock_irq(&queue->tx_lock); spin_lock_irq(&queue->tx_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment