mirror of
https://github.com/torvalds/linux.git
synced 2024-12-13 22:53:20 +00:00
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 <david.vrabel@citrix.com> [re-based] Signed-off-by: Paul Durrant <paul.durrant@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
eb1723a29b
commit
7c0b1a23e6
@ -92,27 +92,21 @@ static struct sk_buff *xenvif_rx_dequeue(struct xenvif_queue *queue)
|
||||
spin_lock_irq(&queue->rx_queue.lock);
|
||||
|
||||
skb = __skb_dequeue(&queue->rx_queue);
|
||||
if (skb)
|
||||
if (skb) {
|
||||
queue->rx_queue_len -= skb->len;
|
||||
if (queue->rx_queue_len < queue->rx_queue_max) {
|
||||
struct netdev_queue *txq;
|
||||
|
||||
txq = netdev_get_tx_queue(queue->vif->dev, queue->id);
|
||||
netif_tx_wake_queue(txq);
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irq(&queue->rx_queue.lock);
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
||||
static void xenvif_rx_queue_maybe_wake(struct xenvif_queue *queue)
|
||||
{
|
||||
spin_lock_irq(&queue->rx_queue.lock);
|
||||
|
||||
if (queue->rx_queue_len < queue->rx_queue_max) {
|
||||
struct net_device *dev = queue->vif->dev;
|
||||
|
||||
netif_tx_wake_queue(netdev_get_tx_queue(dev, queue->id));
|
||||
}
|
||||
|
||||
spin_unlock_irq(&queue->rx_queue.lock);
|
||||
}
|
||||
|
||||
static void xenvif_rx_queue_purge(struct xenvif_queue *queue)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
@ -585,8 +579,6 @@ int xenvif_kthread_guest_rx(void *data)
|
||||
*/
|
||||
xenvif_rx_queue_drop_expired(queue);
|
||||
|
||||
xenvif_rx_queue_maybe_wake(queue);
|
||||
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user