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.
> 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 <[email protected]>
> ---
> 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