Skip to content

Commit 415cadd

Browse files
josh8551021kuba-moo
authored andcommitted
gve: set xdp redirect target only when it is available
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: [email protected] Reviewed-by: Praveen Kaligineedi <[email protected]> Reviewed-by: Jeroen de Borst <[email protected]> Signed-off-by: Joshua Washington <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent f5da7c4 commit 415cadd

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

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

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

1119+
static inline bool gve_supports_xdp_xmit(struct gve_priv *priv)
1120+
{
1121+
switch (priv->queue_format) {
1122+
case GVE_GQI_QPL_FORMAT:
1123+
return true;
1124+
default:
1125+
return false;
1126+
}
1127+
}
1128+
11191129
/* gqi napi handler defined in gve_main.c */
11201130
int gve_napi_poll(struct napi_struct *napi, int budget);
11211131

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

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

1906+
xdp_features_clear_redirect_target(priv->dev);
1907+
19061908
gve_clear_napi_enabled(priv);
19071909
gve_clear_report_stats(priv);
19081910

@@ -1972,6 +1974,9 @@ static void gve_turnup(struct gve_priv *priv)
19721974
napi_schedule(&block->napi);
19731975
}
19741976

1977+
if (priv->num_xdp_queues && gve_supports_xdp_xmit(priv))
1978+
xdp_features_set_redirect_target(priv->dev, false);
1979+
19751980
gve_set_napi_enabled(priv);
19761981
}
19771982

@@ -2246,7 +2251,6 @@ static void gve_set_netdev_xdp_features(struct gve_priv *priv)
22462251
if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
22472252
xdp_features = NETDEV_XDP_ACT_BASIC;
22482253
xdp_features |= NETDEV_XDP_ACT_REDIRECT;
2249-
xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
22502254
xdp_features |= NETDEV_XDP_ACT_XSK_ZEROCOPY;
22512255
} else {
22522256
xdp_features = 0;

0 commit comments

Comments
 (0)