[Intel-wired-lan] [PATCH net-next v5 9/9] igc: Add support for XDP_REDIRECT action

Nguyen, Anthony L anthony.l.nguyen at intel.com
Wed Feb 10 01:47:25 UTC 2021


On Mon, 2021-02-08 at 18:41 -0800, Vedang Patel wrote:
> From: Andre Guedes <andre.guedes at intel.com>
> 
> This patch adds support for the XDP_REDIRECT action which enables XDP
> programs to redirect packets arriving at I225 NIC. It also implements
> the ndo_xdp_xmit ops, enabling the igc driver to transmit packets
> forwarded to it by xdp programs running on other interfaces.
> 
> The patch tweaks the driver's page counting scheme (as described in
> '8ce29c679a6e i40e: tweak page counting for XDP_REDIRECT' and
> implemented by other Intel drivers) in order to properly support
> XDP_REDIRECT action.
> 
> This patch has been tested with the sample apps "xdp_redirect_cpu"
> and
> "xdp_redirect_map" located in samples/bpf/.
> 
> Signed-off-by: Andre Guedes <andre.guedes at intel.com>
> Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski at intel.com>
> Signed-off-by: Vedang Patel <vedang.patel at intel.com>
> ---
>  drivers/net/ethernet/intel/igc/igc_main.c | 59
> +++++++++++++++++++++--
>  1 file changed, 56 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c
> b/drivers/net/ethernet/intel/igc/igc_main.c
> index d34d35789e2e..8bb1f8a54368 100644
> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> @@ -26,6 +26,7 @@
>  #define IGC_XDP_PASS		0
>  #define IGC_XDP_CONSUMED	BIT(0)
>  #define IGC_XDP_TX		BIT(1)
> +#define IGC_XDP_REDIRECT	BIT(2)
>  
>  static int debug = -1;
>  
> @@ -1708,8 +1709,8 @@ static bool igc_can_reuse_rx_page(struct
> igc_rx_buffer *rx_buffer)
>  	 * the pagecnt_bias and page count so that we fully restock the
>  	 * number of references the driver holds.
>  	 */
> -	if (unlikely(!pagecnt_bias)) {
> -		page_ref_add(page, USHRT_MAX);
> +	if (unlikely(pagecnt_bias == 1)) {
> +		page_ref_add(page, USHRT_MAX - 1);
>  		rx_buffer->pagecnt_bias = USHRT_MAX;
>  	}

All of our drivers have needed this fix[1]. I suspect this will need it
as well.

[1]https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-
next.git/commit/?id=75aab4e10ae6a4593a60f66d13de755d4e91f400


More information about the Intel-wired-lan mailing list