diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2015-04-02 07:05:47 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-04-06 16:44:24 -0400 |
commit | 60302ff631f0f3eac0ec592e128b776f0676b397 (patch) | |
tree | 2dabf60760cf7e12d0d40bce8e332f375de22ba5 | |
parent | 91bc4822c3d61b9bb7ef66d3b77948a4f9177954 (diff) |
virtio: document queue state logic
commit d631b94e7a15277858ec5f88d674d93080506999
virtio: change comment in transmit
started clarifying the logic behind queue state management,
but introduced an inaccuracy: TX_BUSY does not cause
a BUG message.
Clean this up some more, explaining the tradeoffs in detail.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/virtio_net.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index a829930dac15..63c7810e1545 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -939,11 +939,15 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
939 | skb_orphan(skb); | 939 | skb_orphan(skb); |
940 | nf_reset(skb); | 940 | nf_reset(skb); |
941 | 941 | ||
942 | /* It is better to stop queue if running out of space | 942 | /* If running out of space, stop queue to avoid getting packets that we |
943 | * instead of forcing queuing layer to requeue the skb | 943 | * are then unable to transmit. |
944 | * by returning TX_BUSY (and cause a BUG message). | 944 | * An alternative would be to force queuing layer to requeue the skb by |
945 | * Since most packets only take 1 or 2 ring slots | 945 | * returning NETDEV_TX_BUSY. However, NETDEV_TX_BUSY should not be |
946 | * this means 16 slots are typically wasted. | 946 | * returned in a normal path of operation: it means that driver is not |
947 | * maintaining the TX queue stop/start state properly, and causes | ||
948 | * the stack to do a non-trivial amount of useless work. | ||
949 | * Since most packets only take 1 or 2 ring slots, stopping the queue | ||
950 | * early means 16 slots are typically wasted. | ||
947 | */ | 951 | */ |
948 | if (sq->vq->num_free < 2+MAX_SKB_FRAGS) { | 952 | if (sq->vq->num_free < 2+MAX_SKB_FRAGS) { |
949 | netif_stop_subqueue(dev, qnum); | 953 | netif_stop_subqueue(dev, qnum); |