Skip to content

Commit 9e5d807

Browse files
josh8551021opsiff
authored andcommitted
gve: set xdp redirect target only when it is available
commit 415cadd upstream. Before this patch the NETDEV_XDP_ACT_NDO_XMIT XDP feature flag is set by default as part of driver initialization, and is never cleared. However, this flag differs from others in that it is used as an indicator for whether the driver is ready to perform the ndo_xdp_xmit operation as part of an XDP_REDIRECT. Kernel helpers xdp_features_(set|clear)_redirect_target exist to convey this meaning. This patch ensures that the netdev is only reported as a redirect target when XDP queues exist to forward traffic. Fixes: 39a7f4a ("gve: Add XDP REDIRECT support for GQI-QPL format") Cc: stable@vger.kernel.org Reviewed-by: Praveen Kaligineedi <pkaligineedi@google.com> Reviewed-by: Jeroen de Borst <jeroendb@google.com> Signed-off-by: Joshua Washington <joshwash@google.com> Link: https://patch.msgid.link/20250214224417.1237818-1-joshwash@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Joshua Washington <joshwash@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commit 9921e26)
1 parent 7be1587 commit 9e5d807

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

drivers/net/ethernet/google/gve/gve.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,16 @@ static inline u32 gve_xdp_tx_start_queue_id(struct gve_priv *priv)
10301030
return gve_xdp_tx_queue_id(priv, 0);
10311031
}
10321032

1033+
static inline bool gve_supports_xdp_xmit(struct gve_priv *priv)
1034+
{
1035+
switch (priv->queue_format) {
1036+
case GVE_GQI_QPL_FORMAT:
1037+
return true;
1038+
default:
1039+
return false;
1040+
}
1041+
}
1042+
10331043
/* buffers */
10341044
int gve_alloc_page(struct gve_priv *priv, struct device *dev,
10351045
struct page **page, dma_addr_t *dma,

drivers/net/ethernet/google/gve/gve_main.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1753,6 +1753,8 @@ static void gve_turndown(struct gve_priv *priv)
17531753
/* Stop tx queues */
17541754
netif_tx_disable(priv->dev);
17551755

1756+
xdp_features_clear_redirect_target(priv->dev);
1757+
17561758
gve_clear_napi_enabled(priv);
17571759
gve_clear_report_stats(priv);
17581760

@@ -1793,6 +1795,9 @@ static void gve_turnup(struct gve_priv *priv)
17931795
}
17941796
}
17951797

1798+
if (priv->num_xdp_queues && gve_supports_xdp_xmit(priv))
1799+
xdp_features_set_redirect_target(priv->dev, false);
1800+
17961801
gve_set_napi_enabled(priv);
17971802
}
17981803

@@ -2014,7 +2019,6 @@ static void gve_set_netdev_xdp_features(struct gve_priv *priv)
20142019
if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
20152020
xdp_features = NETDEV_XDP_ACT_BASIC;
20162021
xdp_features |= NETDEV_XDP_ACT_REDIRECT;
2017-
xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
20182022
xdp_features |= NETDEV_XDP_ACT_XSK_ZEROCOPY;
20192023
} else {
20202024
xdp_features = 0;

0 commit comments

Comments
 (0)