Re: [PATCH] gve: set xdp redirect target only when it is available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

This patch is meant to be destined to the net tree, I forgot to add
the prefix when generating the patch. Please disregard this patch; I
will post a new version soon.

My apologies,
Josh Washington

On Fri, Feb 14, 2025 at 2:38 PM <joshwash@xxxxxxxxxx> wrote:
>
> From: Joshua Washington <joshwash@xxxxxxxxxx>
>
> 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: 39a7f4aa3e4a ("gve: Add XDP REDIRECT support for GQI-QPL format")
> Cc: stable@xxxxxxxxxxxxxxx
> Reviewed-by: Praveen Kaligineedi <pkaligineedi@xxxxxxxxxx>
> Reviewed-by: Jeroen de Borst <jeroendb@xxxxxxxxxx>
> Signed-off-by: Joshua Washington <joshwash@xxxxxxxxxx>
> ---
>  drivers/net/ethernet/google/gve/gve.h      | 10 ++++++++++
>  drivers/net/ethernet/google/gve/gve_main.c |  6 +++++-
>  2 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h
> index 8167cc5fb0df..78d2a19593d1 100644
> --- a/drivers/net/ethernet/google/gve/gve.h
> +++ b/drivers/net/ethernet/google/gve/gve.h
> @@ -1116,6 +1116,16 @@ static inline u32 gve_xdp_tx_start_queue_id(struct gve_priv *priv)
>         return gve_xdp_tx_queue_id(priv, 0);
>  }
>
> +static inline bool gve_supports_xdp_xmit(struct gve_priv *priv)
> +{
> +       switch (priv->queue_format) {
> +       case GVE_GQI_QPL_FORMAT:
> +               return true;
> +       default:
> +               return false;
> +       }
> +}
> +
>  /* gqi napi handler defined in gve_main.c */
>  int gve_napi_poll(struct napi_struct *napi, int budget);
>
> diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c
> index 533e659b15b3..92237fb0b60c 100644
> --- a/drivers/net/ethernet/google/gve/gve_main.c
> +++ b/drivers/net/ethernet/google/gve/gve_main.c
> @@ -1903,6 +1903,8 @@ static void gve_turndown(struct gve_priv *priv)
>         /* Stop tx queues */
>         netif_tx_disable(priv->dev);
>
> +       xdp_features_clear_redirect_target(priv->dev);
> +
>         gve_clear_napi_enabled(priv);
>         gve_clear_report_stats(priv);
>
> @@ -1972,6 +1974,9 @@ static void gve_turnup(struct gve_priv *priv)
>                 napi_schedule(&block->napi);
>         }
>
> +       if (priv->num_xdp_queues && gve_supports_xdp_xmit(priv))
> +               xdp_features_set_redirect_target(priv->dev, false);
> +
>         gve_set_napi_enabled(priv);
>  }
>
> @@ -2246,7 +2251,6 @@ static void gve_set_netdev_xdp_features(struct gve_priv *priv)
>         if (priv->queue_format == GVE_GQI_QPL_FORMAT) {
>                 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 {
>                 xdp_features = 0;
> --
> 2.48.1.601.g30ceb7b040-goog
>


-- 

Joshua Washington | Software Engineer | joshwash@xxxxxxxxxx | (414) 366-4423





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux