Re: [PATCH net-next] virtio_net: Increase RSS max key size to match NETDEV_RSS_KEY_LEN
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2026-01-22 10:15:51
Also in:
virtualization
On Thu, Jan 22, 2026 at 02:45:27PM +0530, Srujana Challa wrote:
Increase VIRTIO_NET_RSS_MAX_KEY_SIZE from 40 to 52 bytes to align with the kernel's standard RSS key length defined by NETDEV_RSS_KEY_LEN. The virtio specification requires devices to support at least 40 bytes for the RSS key size.
Indeed:
The device MUST set \field{rss_max_key_size} to at least 40, if it offers
VIRTIO_NET_F_RSS or VIRTIO_NET_F_HASH_REPORT.
However, devices may support larger key sizes up to 52 bytes (as reported by the device's rss_max_key_size config field). This change allows such devices to work properly. Previously, devices reporting rss_max_key_size > 40 would fail with an error during initialization.
This one, yes?
if (vi->rss_key_size > VIRTIO_NET_RSS_MAX_KEY_SIZE) {
dev_err(&vdev->dev, "rss_max_key_size=%u exceeds the limit %u.\n",
vi->rss_key_size, VIRTIO_NET_RSS_MAX_KEY_SIZE);
err = -EINVAL;
goto free;
}
Hmm but why do we do it like this? I suspect we just got confused with
the spec: > vs <.
Can't we just do:
min(vi->rss_key_size, VIRTIO_NET_RSS_MAX_KEY_SIZE)
If yes I'd like that fix in addition to the increase.
If we are validating rss_key_size against 40, I think we should clear the
feature rather than failing init completely.
quoted hunk ↗ jump to hunk
The driver already handles variable key sizes dynamically through vi->rss_key_size, so increasing the maximum limit is safe and maintains backward compatibility with devices that support smaller key sizes. Signed-off-by: Srujana Challa <schalla@marvell.com> --- drivers/net/virtio_net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index db88dcaefb20..5f06cbc058d7 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c@@ -381,7 +381,7 @@ struct receive_queue { struct xdp_buff **xsk_buffs; }; -#define VIRTIO_NET_RSS_MAX_KEY_SIZE 40 +#define VIRTIO_NET_RSS_MAX_KEY_SIZE 52 /* Control VQ buffers: protected by the rtnl lock */ struct control_buf {-- 2.25.1