patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: Anurag Mandal <anurag.mandal@intel.com>
Cc: <dev@dpdk.org>, <anatoly.burakov@intel.com>, <stable@dpdk.org>
Subject: Re: [PATCH v4] net/ice: add option to enable source prune
Date: Thu, 6 Nov 2025 14:22:11 +0000	[thread overview]
Message-ID: <aQyvE3RkKiTVy0Eu@bricha3-mobl1.ger.corp.intel.com> (raw)
In-Reply-To: <20251105183031.91709-1-anurag.mandal@intel.com>

On Wed, Nov 05, 2025 at 06:30:31PM +0000, Anurag Mandal wrote:
> Source prune is disabled by default to support
> VRRP advertisement packets in a vsi of ice PF.
> There is no way to enable source prune itself.
> 
> This patch introduces devarg "source-prune-enable" to allow
> user to enable source prune.
> 
> Enable Source Prune to automatically drop incoming packets when
> their source MAC address matches one of the MAC addresses assigned
> to that same NIC port.
> 
> Tested the following with VRRP advertisement packets in a
> vsi of ice PF:
> 1. Source prune default mode with no devarg option.
> 2. Enable source prune with devarg"source-prune-enable=1".
> 3. Disable source prune with devarg"source-prune-enable=0".
> 
> Fixes: 6f866eb93e79 ("net/ice: fix dropped packets when using VRRP")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Anurag Mandal <anurag.mandal@intel.com>
> ---
> V4: Adressed Bruce Richardson's comment
>  - changed from private API to devarg option.

This looks a better solution to me than a private API. However, it strikes
me as a new feature, rather than a fix, so I'm not sure backporting is
appropriate.

Couple of comments inline below.

Thanks,
/Bruce

> 
>  doc/guides/nics/ice.rst            | 11 +++++++++++
>  drivers/net/intel/ice/ice_ethdev.c | 25 +++++++++++++++++++++++--
>  drivers/net/intel/ice/ice_ethdev.h |  1 +
>  3 files changed, 35 insertions(+), 2 deletions(-)
> 
> diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst
> index 7e9ba23102..09561b08c5 100644
> --- a/doc/guides/nics/ice.rst
> +++ b/doc/guides/nics/ice.rst
> @@ -183,6 +183,17 @@ Runtime Configuration
>    If the value provided is greater than the number of levels provided by the HW,
>    SW will use the hardware maximum value.
>  
> +- ``Source Prune Enable`` (default ``0``)
> +
> +  Enable Source Prune to automatically drop incoming packets when
> +  their source MAC address matches one of the MAC addresses assigned
> +  to that same NIC port.
> +
> +  Source Prune can be enabled by setting the devargs parameter ``source-prune-enable``,
> +  for example::
> +
> +    -a 80:00.0,source-prune-enable=1
> +
I think the word "enable" is unnecessary. Just having the option be
"source-prune" is probably enough, since source-prune=1 is really the same
as source-prune-enable=1.

>  - ``Protocol extraction for per queue``
>  
>    Configure the RX queues to do protocol extraction into mbuf for protocol
> diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
> index 4669eba7c7..540d0bd977 100644
> --- a/drivers/net/intel/ice/ice_ethdev.c
> +++ b/drivers/net/intel/ice/ice_ethdev.c
> @@ -41,6 +41,7 @@
>  #define ICE_DDP_FILENAME_ARG      "ddp_pkg_file"
>  #define ICE_DDP_LOAD_SCHED_ARG    "ddp_load_sched_topo"
>  #define ICE_TM_LEVELS_ARG         "tm_sched_levels"
> +#define ICE_SRC_PRUNE_ENABLE_ARG  "source-prune-enable"
>  #define ICE_LINK_STATE_ON_CLOSE   "link_state_on_close"
>  
>  #define ICE_CYCLECOUNTER_MASK  0xffffffffffffffffULL
> @@ -58,6 +59,7 @@ static const char * const ice_valid_args[] = {
>  	ICE_DDP_FILENAME_ARG,
>  	ICE_DDP_LOAD_SCHED_ARG,
>  	ICE_TM_LEVELS_ARG,
> +	ICE_SRC_PRUNE_ENABLE_ARG,
Removing ENABLE also shortens the enum values, enhancing readability.

>  	ICE_LINK_STATE_ON_CLOSE,
>  	NULL
>  };
> @@ -1716,6 +1718,7 @@ ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type)
>  	uint16_t max_txqs[ICE_MAX_TRAFFIC_CLASS] = { 0 };
>  	uint8_t tc_bitmap = 0x1;
>  	uint16_t cfg;
> +	struct ice_adapter *ad = (struct ice_adapter *)hw->back;
>  
>  	/* hw->num_lports = 1 in NIC mode */
>  	vsi = rte_zmalloc(NULL, sizeof(struct ice_vsi), 0);
> @@ -1753,8 +1756,20 @@ ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type)
>  		 * by ice_init_hw
>  		 */
>  		vsi_ctx.info.sw_id = hw->port_info->sw_id;
> -		vsi_ctx.info.sw_flags = ICE_AQ_VSI_SW_FLAG_LOCAL_LB;
> -		vsi_ctx.info.sw_flags |= ICE_AQ_VSI_SW_FLAG_SRC_PRUNE;
> +		/* Source Prune */drivers/net/intel/ice/ice_ethdev.c:1707:ice_setup_vsi
> +		if (ad->devargs.source_prune_enable == 1) {
> +			/* Enable source prune */
> +			vsi_ctx.info.sw_flags &=
> +				~(ICE_AQ_VSI_SW_FLAG_LOCAL_LB);
> +			vsi_ctx.info.sw_flags &=
> +				~(ICE_AQ_VSI_SW_FLAG_SRC_PRUNE);

I don't believe we need this branch at all. The VSI context is cleared just
before entering this block, so the sw_flags should already be zero.
Notice how in the second block (existing code) we assign software flags
rather than or-ing in the values.

> +		} else {
> +			/* Disable source prune to support VRRP */
> +			vsi_ctx.info.sw_flags =
> +				ICE_AQ_VSI_SW_FLAG_LOCAL_LB;
> +			vsi_ctx.info.sw_flags |=
> +				ICE_AQ_VSI_SW_FLAG_SRC_PRUNE;
> +		}
>  		cfg = ICE_AQ_VSI_PROP_SW_VALID;
>  		vsi_ctx.info.valid_sections |= rte_cpu_to_le_16(cfg);
>  		vsi_ctx.info.sw_flags2 = ICE_AQ_VSI_SW_FLAG_LAN_ENA;
> @@ -2449,6 +2464,11 @@ static int ice_parse_devargs(struct rte_eth_dev *dev)
>  	if (ret)
>  		goto bail;
>  
> +	ret = rte_kvargs_process(kvlist, ICE_SRC_PRUNE_ENABLE_ARG,
> +				 &parse_bool, &ad->devargs.source_prune_enable);
> +	if (ret)
> +		goto bail;
> +
>  	ret = rte_kvargs_process(kvlist, ICE_LINK_STATE_ON_CLOSE,
>  				 &parse_link_state_on_close, &ad->devargs.link_state_on_close);
>  
> @@ -7659,6 +7679,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_ice,
>  			      ICE_DDP_FILENAME_ARG "=</path/to/file>"
>  			      ICE_DDP_LOAD_SCHED_ARG "=<0|1>"
>  			      ICE_TM_LEVELS_ARG "=<N>"
> +			      ICE_SRC_PRUNE_ENABLE_ARG "=<0|1>"
>  			      ICE_RX_LOW_LATENCY_ARG "=<0|1>"
>  			      ICE_LINK_STATE_ON_CLOSE "=<down|up|initial>");
>  
> diff --git a/drivers/net/intel/ice/ice_ethdev.h b/drivers/net/intel/ice/ice_ethdev.h
> index 6478d6dfbd..408cbe4a38 100644
> --- a/drivers/net/intel/ice/ice_ethdev.h
> +++ b/drivers/net/intel/ice/ice_ethdev.h
> @@ -614,6 +614,7 @@ struct ice_devargs {
>  	uint8_t pps_out_ena;
>  	uint8_t ddp_load_sched;
>  	uint8_t tm_exposed_levels;
> +	uint8_t source_prune_enable;
>  	int link_state_on_close;
>  	int xtr_field_offs;
>  	uint8_t xtr_flag_offs[PROTO_XTR_MAX];
> -- 
> 2.34.1
> 

      reply	other threads:[~2025-11-06 14:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-01 10:46 [PATCH] net/ice: add source prune configuration API Anurag Mandal
2025-11-01 18:29 ` [PATCH v2] " Anurag Mandal
2025-11-02  1:19   ` [PATCH v3] " Anurag Mandal
2025-11-05  9:13     ` Bruce Richardson
2025-11-05 18:30 ` [PATCH v4] net/ice: add option to enable source prune Anurag Mandal
2025-11-06 14:22   ` Bruce Richardson [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aQyvE3RkKiTVy0Eu@bricha3-mobl1.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=anatoly.burakov@intel.com \
    --cc=anurag.mandal@intel.com \
    --cc=dev@dpdk.org \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).