Skip to content

Commit 7c0b1a2

Browse files
David Vrabeldavem330
authored andcommitted
xen-netback: immediately wake tx queue when guest rx queue has space
When an skb is removed from the guest rx queue, immediately wake the tx queue, instead of after processing them. Signed-off-by: David Vrabel <[email protected]> [re-based] Signed-off-by: Paul Durrant <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent eb1723a commit 7c0b1a2

File tree

1 file changed

+8
-16
lines changed
  • drivers/net/xen-netback

1 file changed

+8
-16
lines changed

drivers/net/xen-netback/rx.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -92,25 +92,19 @@ static struct sk_buff *xenvif_rx_dequeue(struct xenvif_queue *queue)
9292
spin_lock_irq(&queue->rx_queue.lock);
9393

9494
skb = __skb_dequeue(&queue->rx_queue);
95-
if (skb)
95+
if (skb) {
9696
queue->rx_queue_len -= skb->len;
97+
if (queue->rx_queue_len < queue->rx_queue_max) {
98+
struct netdev_queue *txq;
9799

98-
spin_unlock_irq(&queue->rx_queue.lock);
99-
100-
return skb;
101-
}
102-
103-
static void xenvif_rx_queue_maybe_wake(struct xenvif_queue *queue)
104-
{
105-
spin_lock_irq(&queue->rx_queue.lock);
106-
107-
if (queue->rx_queue_len < queue->rx_queue_max) {
108-
struct net_device *dev = queue->vif->dev;
109-
110-
netif_tx_wake_queue(netdev_get_tx_queue(dev, queue->id));
100+
txq = netdev_get_tx_queue(queue->vif->dev, queue->id);
101+
netif_tx_wake_queue(txq);
102+
}
111103
}
112104

113105
spin_unlock_irq(&queue->rx_queue.lock);
106+
107+
return skb;
114108
}
115109

116110
static void xenvif_rx_queue_purge(struct xenvif_queue *queue)
@@ -585,8 +579,6 @@ int xenvif_kthread_guest_rx(void *data)
585579
*/
586580
xenvif_rx_queue_drop_expired(queue);
587581

588-
xenvif_rx_queue_maybe_wake(queue);
589-
590582
cond_resched();
591583
}
592584

0 commit comments

Comments
 (0)