vhost_net: introduce vhost_exceeds_weight() [Linux 4.4.191]

This Linux kernel change "vhost_net: introduce vhost_exceeds_weight()" is included in the Linux 4.4.191 release. This change is authored by Jason Wang <jasowang [at] redhat.com> on Wed Aug 28 00:10:30 2019 +0100. The commit for this change in Linux stable tree is 9429104 (patch) which is from upstream commit 272f35c. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 272f35c.

vhost_net: introduce vhost_exceeds_weight()

commit 272f35cba53d088085e5952fd81d7a133ab90789 upstream.

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 4.4: adjust context]
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 12 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/vhost/net.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index c1b5bcc..38c3120f 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -293,6 +293,12 @@ static void vhost_zerocopy_callback(struct ubuf_info *ubuf, bool success)
    rcu_read_unlock_bh();
 }

+static bool vhost_exceeds_weight(int pkts, int total_len)
+{
+   return total_len >= VHOST_NET_WEIGHT ||
+          pkts >= VHOST_NET_PKT_WEIGHT;
+}
+
 /* Expects to be always run from workqueue - which acts as
  * read-size critical section for our kind of RCU. */
 static void handle_tx(struct vhost_net *net)
@@ -415,8 +421,7 @@ static void handle_tx(struct vhost_net *net)
            vhost_zerocopy_signal_used(net, vq);
        total_len += len;
        vhost_net_tx_packet(net);
-       if (unlikely(total_len >= VHOST_NET_WEIGHT) ||
-           unlikely(++sent_pkts >= VHOST_NET_PKT_WEIGHT)) {
+       if (unlikely(vhost_exceeds_weight(++sent_pkts, total_len))) {
            vhost_poll_queue(&vq->poll);
            break;
        }
@@ -640,8 +645,7 @@ static void handle_rx(struct vhost_net *net)
        if (unlikely(vq_log))
            vhost_log_write(vq, vq_log, log, vhost_len);
        total_len += vhost_len;
-       if (unlikely(total_len >= VHOST_NET_WEIGHT) ||
-           unlikely(++recv_pkts >= VHOST_NET_PKT_WEIGHT)) {
+       if (unlikely(vhost_exceeds_weight(++recv_pkts, total_len))) {
            vhost_poll_queue(&vq->poll);
            break;
        }

Leave a Reply

Your email address will not be published. Required fields are marked *