Re: [PATCH RFC v4 7/9] tun: Introduce virtio-net RSS

Simon Horman
2024-09-24T13:05:56Z

On Tue, Sep 24, 2024 at 11:01:12AM +0200, Akihiko Odaki wrote:
> RSS is a receive steering algorithm that can be negotiated to use with
> virtio_net. Conventionally the hash calculation was done by the VMM.
> However, computing the hash after the queue was chosen defeats the
> purpose of RSS.
>
> Another approach is to use eBPF steering program. This approach has
> another downside: it cannot report the calculated hash due to the
> restrictive nature of eBPF steering program.
>
> Introduce the code to perform RSS to the kernel in order to overcome
> thse challenges. An alternative solution is to extend the eBPF steering
> program so that it will be able to report to the userspace, but I didn't
> opt for it because extending the current mechanism of eBPF steering
> program as is because it relies on legacy context rewriting, and
> introducing kfunc-based eBPF will result in non-UAPI dependency while
> the other relevant virtualization APIs such as KVM and vhost_net are
> UAPIs.
>
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>

...

> diff --git a/drivers/net/tun.c b/drivers/net/tun.c

...

> @@ -333,8 +336,10 @@ static long tun_set_vnet_be(struct tun_struct *tun, int __user *argp)
> return -EFAULT;
>
> if (be) {
> + struct tun_vnet_hash_container *vnet_hash = rtnl_dereference(tun->vnet_hash);
> +
> if (!(tun->flags & TUN_VNET_LE) &&
> - (tun->vnet_hash.flags & TUN_VNET_HASH_REPORT))
> + vnet_hash && (vnet_hash->flags & TUN_VNET_HASH_REPORT))

Hi Odaki-san,

I am wondering if the above should this be vnet_hash->common.flags?
I am seeing this:

../drivers/net/tun.c:342:44: error: ‘struct tun_vnet_hash_container’ has no member named ‘flags’
342 | vnet_hash && (vnet_hash->flags & TUN_VNET_HASH_REPORT))

...