mlxsw: minimal: Fix deadlock in ports creation
[linux-2.6-microblaze.git] / drivers / net / xen-netfront.c
index 2409007..27a11cc 100644 (file)
@@ -1043,16 +1043,6 @@ static int xennet_get_responses(struct netfront_queue *queue,
        }
 
        for (;;) {
-               if (unlikely(rx->status < 0 ||
-                            rx->offset + rx->status > XEN_PAGE_SIZE)) {
-                       if (net_ratelimit())
-                               dev_warn(dev, "rx->offset: %u, size: %d\n",
-                                        rx->offset, rx->status);
-                       xennet_move_rx_slot(queue, skb, ref);
-                       err = -EINVAL;
-                       goto next;
-               }
-
                /*
                 * This definitely indicates a bug, either in this driver or in
                 * the backend driver. In future this should flag the bad
@@ -1066,6 +1056,16 @@ static int xennet_get_responses(struct netfront_queue *queue,
                        goto next;
                }
 
+               if (unlikely(rx->status < 0 ||
+                            rx->offset + rx->status > XEN_PAGE_SIZE)) {
+                       if (net_ratelimit())
+                               dev_warn(dev, "rx->offset: %u, size: %d\n",
+                                        rx->offset, rx->status);
+                       xennet_move_rx_slot(queue, skb, ref);
+                       err = -EINVAL;
+                       goto next;
+               }
+
                if (!gnttab_end_foreign_access_ref(ref)) {
                        dev_alert(dev,
                                  "Grant still in use by backend domain\n");
@@ -2464,10 +2464,6 @@ static int xennet_connect(struct net_device *dev)
                if (queue->tx_irq != queue->rx_irq)
                        notify_remote_via_irq(queue->rx_irq);
 
-               spin_lock_irq(&queue->tx_lock);
-               xennet_tx_buf_gc(queue);
-               spin_unlock_irq(&queue->tx_lock);
-
                spin_lock_bh(&queue->rx_lock);
                xennet_alloc_rx_buffers(queue);
                spin_unlock_bh(&queue->rx_lock);