Commit 0d9c3174 authored by Will Deacon's avatar Will Deacon Committed by Isaac Manjarres
Browse files

FROMGIT: vhost/vsock: Allocate nonlinear SKBs for handling large receive buffers



When receiving a packet from a guest, vhost_vsock_handle_tx_kick()
calls vhost_vsock_alloc_linear_skb() to allocate and fill an SKB with
the receive data. Unfortunately, these are always linear allocations and
can therefore result in significant pressure on kmalloc() considering
that the maximum packet size (VIRTIO_VSOCK_MAX_PKT_BUF_SIZE +
VIRTIO_VSOCK_SKB_HEADROOM) is a little over 64KiB, resulting in a 128KiB
allocation for each packet.

Rework the vsock SKB allocation so that, for sizes with page order
greater than PAGE_ALLOC_COSTLY_ORDER, a nonlinear SKB is allocated
instead with the packet header in the SKB and the receive data in the
fragments. Finally, add a debug warning if virtio_vsock_skb_rx_put() is
ever called on an SKB with a non-zero length, as this would be
destructive for the nonlinear case.

Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Signed-off-by: default avatarWill Deacon <will@kernel.org>
Message-Id: <20250717090116.11987-8-will@kernel.org>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
(cherry picked from commit 4243469b093ac35f54c3a0414812a5b97313e149
 git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git

 vhost)
Bug: 421244320
Signed-off-by: default avatarWill Deacon <willdeacon@google.com>
Change-Id: I4212a8daf9f19b5bbffc06ce93338c823de7bb19
parent e6c6f403
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment