Re: [PATCH] virtio_net: Support RX hash XDP hint
From: Liang Chen <hidden>
Date: 2024-01-24 08:04:05
Also in:
lkml
On Wed, Jan 24, 2024 at 10:12 AM Jason Wang [off-list ref] wrote:
On Mon, Jan 22, 2024 at 6:23 PM Liang Chen [off-list ref] wrote:quoted
The RSS hash report is a feature that's part of the virtio specification. Currently, virtio backends like qemu, vdpa (mlx5), and potentially vhost (still a work in progress as per [1]) support this feature. While the capability to obtain the RSS hash has been enabled in the normal path, it's currently missing in the XDP path. Therefore, we are introducing XDP hints through kfuncs to allow XDP programs to access the RSS hash. Signed-off-by: Liang Chen <redacted> --- drivers/net/virtio_net.c | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index d7ce4a1011ea..1463a4709e3c 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c@@ -4579,6 +4579,60 @@ static void virtnet_set_big_packets(struct virtnet_info *vi, const int mtu) } } +static int virtnet_xdp_rx_hash(const struct xdp_md *_ctx, u32 *hash, + enum xdp_rss_hash_type *rss_type) +{ + const struct xdp_buff *xdp = (void *)_ctx; + struct virtio_net_hdr_v1_hash *hdr_hash; + struct virtnet_info *vi; + + if (!(xdp->rxq->dev->features & NETIF_F_RXHASH)) + return -ENODATA; + + vi = netdev_priv(xdp->rxq->dev); + hdr_hash = (struct virtio_net_hdr_v1_hash *)(xdp->data - vi->hdr_len);Is there a guarantee that the hdr is not modified?
We cannot guarantee the hdr is not modified by the XDP prog, So the idea is to save it in a wrapper structure before running the xdp prog. Patch is coming soon. Thanks, Liang
Thanks