All of lore.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: "Will Deacon" <will@kernel.org>, "Keir Fraser" <keirf@google.com>,
	"Steven Moreland" <smoreland@google.com>,
	"Frederick Mayle" <fmayle@google.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Stefano Garzarella" <sgarzare@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Eugenio Pérez" <eperezma@redhat.com>,
	netdev@vger.kernel.org, virtualization@lists.linux.dev
Subject: [PATCH v4 3/9] vsock/virtio: Move length check to callers of virtio_vsock_skb_rx_put()
Date: Thu, 17 Jul 2025 10:01:10 +0100	[thread overview]
Message-ID: <20250717090116.11987-4-will@kernel.org> (raw)
In-Reply-To: <20250717090116.11987-1-will@kernel.org>

virtio_vsock_skb_rx_put() only calls skb_put() if the length in the
packet header is not zero even though skb_put() handles this case
gracefully.

Remove the functionally redundant check from virtio_vsock_skb_rx_put()
and, on the assumption that this is a worthwhile optimisation for
handling credit messages, augment the existing length checks in
virtio_transport_rx_work() to elide the call for zero-length payloads.
Since the callers all have the length, extend virtio_vsock_skb_rx_put()
to take it as an additional parameter rather than fish it back out of
the packet header.

Note that the vhost code already has similar logic in
vhost_vsock_alloc_skb().

Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Will Deacon <will@kernel.org>
---
 drivers/vhost/vsock.c            | 2 +-
 include/linux/virtio_vsock.h     | 9 ++-------
 net/vmw_vsock/virtio_transport.c | 4 +++-
 3 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
index 66a0f060770e..4c4a642945eb 100644
--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -375,7 +375,7 @@ vhost_vsock_alloc_skb(struct vhost_virtqueue *vq,
 		return NULL;
 	}
 
-	virtio_vsock_skb_rx_put(skb);
+	virtio_vsock_skb_rx_put(skb, payload_len);
 
 	nbytes = copy_from_iter(skb->data, payload_len, &iov_iter);
 	if (nbytes != payload_len) {
diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h
index 36fb3edfa403..97465f378ade 100644
--- a/include/linux/virtio_vsock.h
+++ b/include/linux/virtio_vsock.h
@@ -47,14 +47,9 @@ static inline void virtio_vsock_skb_clear_tap_delivered(struct sk_buff *skb)
 	VIRTIO_VSOCK_SKB_CB(skb)->tap_delivered = false;
 }
 
-static inline void virtio_vsock_skb_rx_put(struct sk_buff *skb)
+static inline void virtio_vsock_skb_rx_put(struct sk_buff *skb, u32 len)
 {
-	u32 len;
-
-	len = le32_to_cpu(virtio_vsock_hdr(skb)->len);
-
-	if (len > 0)
-		skb_put(skb, len);
+	skb_put(skb, len);
 }
 
 static inline struct sk_buff *virtio_vsock_alloc_skb(unsigned int size, gfp_t mask)
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index eb08a393413d..0166919f8705 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -656,7 +656,9 @@ static void virtio_transport_rx_work(struct work_struct *work)
 				continue;
 			}
 
-			virtio_vsock_skb_rx_put(skb);
+			if (payload_len)
+				virtio_vsock_skb_rx_put(skb, payload_len);
+
 			virtio_transport_deliver_tap_pkt(skb);
 			virtio_transport_recv_pkt(&virtio_transport, skb);
 		}
-- 
2.50.0.727.gbf7dc18ff4-goog


  parent reply	other threads:[~2025-07-17  9:01 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-17  9:01 [PATCH v4 0/9] vsock/virtio: SKB allocation improvements Will Deacon
2025-07-17  9:01 ` [PATCH v4 1/9] vhost/vsock: Avoid allocating arbitrarily-sized SKBs Will Deacon
2025-07-17  9:10   ` Jason Wang
2025-07-17  9:25     ` Stefano Garzarella
2025-07-17  9:01 ` [PATCH v4 2/9] vsock/virtio: Validate length in packet header before skb_put() Will Deacon
2025-07-17  9:39   ` Stefano Garzarella
2025-07-17  9:01 ` Will Deacon [this message]
2025-07-17  9:01 ` [PATCH v4 4/9] vsock/virtio: Resize receive buffers so that each SKB fits in a 4K page Will Deacon
2026-01-08 16:33   ` David Woodhouse
2026-01-12 14:48     ` Stefano Garzarella
2026-01-12 15:22       ` Will Deacon
2025-07-17  9:01 ` [PATCH v4 5/9] vsock/virtio: Rename virtio_vsock_alloc_skb() Will Deacon
2025-07-17  9:01 ` [PATCH v4 6/9] vsock/virtio: Move SKB allocation lower-bound check to callers Will Deacon
2025-07-17  9:01 ` [PATCH v4 7/9] vhost/vsock: Allocate nonlinear SKBs for handling large receive buffers Will Deacon
2025-07-17  9:01 ` [PATCH v4 8/9] vsock/virtio: Rename virtio_vsock_skb_rx_put() Will Deacon
2025-07-17  9:01 ` [PATCH v4 9/9] vsock/virtio: Allocate nonlinear SKBs for handling large transmit buffers Will Deacon
2025-08-13  8:41   ` Michael S. Tsirkin
2025-08-13 13:25     ` Hillf Danton
2025-08-15 10:22       ` Michael S. Tsirkin
2025-08-15 12:07         ` Hillf Danton
2025-08-16 10:38           ` Michael S. Tsirkin
2025-07-17 12:31 ` [PATCH v4 0/9] vsock/virtio: SKB allocation improvements Michael S. Tsirkin
2025-07-17 12:36   ` Stefano Garzarella
2025-07-17 12:35 ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250717090116.11987-4-will@kernel.org \
    --to=will@kernel.org \
    --cc=eperezma@redhat.com \
    --cc=fmayle@google.com \
    --cc=jasowang@redhat.com \
    --cc=keirf@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=sgarzare@redhat.com \
    --cc=smoreland@google.com \
    --cc=stefanha@redhat.com \
    --cc=virtualization@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.