handle_tx() will delay rx for a long time when busy tx polling udp packets with short length(ie: 1byte udp payload), because setting VHOST_NET_WEIGHT takes into account only sent-bytes but no time. It's not fair for handle_rx(), so needs to limit max time of tx polling. Signed-off-by: Haibin Zhang <haibinzhang@xxxxxxxxxxx> --- drivers/vhost/net.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 8139bc70ad7d..dc9218a3a75b 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -473,6 +473,7 @@ static void handle_tx(struct vhost_net *net) struct socket *sock; struct vhost_net_ubuf_ref *uninitialized_var(ubufs); bool zcopy, zcopy_used; + unsigned long start = jiffies; mutex_lock(&vq->mutex); sock = vq->private_data; @@ -580,7 +581,7 @@ static void handle_tx(struct vhost_net *net) else vhost_zerocopy_signal_used(net, vq); vhost_net_tx_packet(net); - if (unlikely(total_len >= VHOST_NET_WEIGHT)) { + if (unlikely(total_len >= VHOST_NET_WEIGHT) || unlikely(jiffies - start >= 1)) { vhost_poll_queue(&vq->poll); break; } -- 2.12.3