]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
eth: gve: use appropriate helper to set xdp_features
authorJakub Kicinski <kuba@kernel.org>
Mon, 6 Jan 2025 18:02:10 +0000 (10:02 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 8 Jan 2025 02:07:14 +0000 (18:07 -0800)
Commit f85949f98206 ("xdp: add xdp_set_features_flag utility routine")
added routines to inform the core about XDP flag changes.
GVE support was added around the same time and missed using them.

GVE only changes the flags on error recover or resume.
Presumably the flags may change during resume if VM migrated.
User would not get the notification and upper devices would
not get a chance to recalculate their flags.

Fixes: 75eaae158b1b ("gve: Add XDP DROP and TX support for GQI-QPL format")
Reviewed-By: Jeroen de Borst <jeroendb@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250106180210.1861784-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/google/gve/gve_main.c

index 8a8f6ab12a980293ceccd79f56668d6730074cf8..533e659b15b31c0a21205476676315c5c21d82cb 100644 (file)
@@ -2241,14 +2241,18 @@ static void gve_service_task(struct work_struct *work)
 
 static void gve_set_netdev_xdp_features(struct gve_priv *priv)
 {
+       xdp_features_t xdp_features;
+
        if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
-               priv->dev->xdp_features = NETDEV_XDP_ACT_BASIC;
-               priv->dev->xdp_features |= NETDEV_XDP_ACT_REDIRECT;
-               priv->dev->xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
-               priv->dev->xdp_features |= NETDEV_XDP_ACT_XSK_ZEROCOPY;
+               xdp_features = NETDEV_XDP_ACT_BASIC;
+               xdp_features |= NETDEV_XDP_ACT_REDIRECT;
+               xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
+               xdp_features |= NETDEV_XDP_ACT_XSK_ZEROCOPY;
        } else {
-               priv->dev->xdp_features = 0;
+               xdp_features = 0;
        }
+
+       xdp_set_features_flag(priv->dev, xdp_features);
 }
 
 static int gve_init_priv(struct gve_priv *priv, bool skip_describe_device)