> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Dave Ertman
> Sent: Tuesday, August 11, 2026 8:11 PM
> To: [email protected]
> Cc: [email protected]; Kitszel, Przemyslaw
> <[email protected]>
> Subject: [Intel-wired-lan] [PATCH iwl-net v2] ice: Fix incorrect LLDP
> filter assumptions
>
> In commit 4d5a1c4e6d49 ("ice: do not add LLDP-specific filter if not
> necessary"), it was assumed that llpd_fltr_ctrl was a unique
> application of a filter instance and the other command in the flow was
> generic.
> This is an incorrect assumption, they are both meant to add a filter
> to handle LLDP packets and only varied in the actual AQ call made.
> The newer AQ call was created to handle a special case in some NVM
> images where a LLDP filter was already existent and the old AQ command
> would generate an error if a new filter was attempted to be added. The
> newer AQ command would detect this case and instead would add the
> current target to the existing filter rule.
>
> Fix the flow so that the newer command is always used if available and
> only fall back to the older command when that is the only solution.
>
> Also remove the obsolete state flag from the PF struct.
>
> Fixes: 4d5a1c4e6d49 ("ice: do not add LLDP-specific filter if not
> necessary")
> Signed-off-by: Dave Ertman <[email protected]>
> Reviewed-by: Przemek Kitszel <[email protected]>
> ---
> drivers/net/ethernet/intel/ice/ice.h | 1 -
> drivers/net/ethernet/intel/ice/ice_lib.c | 18 +++++-------------
> 2 files changed, 5 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice.h
> b/drivers/net/ethernet/intel/ice/ice.h
> index fc91b6665f90..7eaa3d1e78a5 100644
> --- a/drivers/net/ethernet/intel/ice/ice.h
> +++ b/drivers/net/ethernet/intel/ice/ice.h
> @@ -522,7 +522,6 @@ enum ice_pf_flags {
> ICE_FLAG_MTU_CHANGED,
> ICE_FLAG_GNSS, /* GNSS successfully
> initialized */
> ICE_FLAG_DPLL, /* SyncE/PTP dplls
> initialized */
> - ICE_FLAG_LLDP_AQ_FLTR,
> ICE_PF_FLAGS_NBITS /* must be last */
> };
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c
> b/drivers/net/ethernet/intel/ice/ice_lib.c
> index 8cdc4fda89e9..2fe91ff8119f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_lib.c
> +++ b/drivers/net/ethernet/intel/ice/ice_lib.c
> @@ -2090,24 +2090,16 @@ void ice_vsi_cfg_sw_lldp(struct ice_vsi *vsi,
> bool tx, bool create)
> status = eth_fltr(vsi, ETH_P_LLDP, ICE_FLTR_TX,
> ICE_DROP_PACKET);
> } else {
> - if (!test_bit(ICE_FLAG_LLDP_AQ_FLTR, pf->flags)) {
> + status = ice_lldp_fltr_add_remove(&pf->hw, vsi, create);
> + if (status == -EOPNOTSUPP) {
> + /* If fltr_ctrl not supported, use legacy
> + * add/remove command
> + */
> status = eth_fltr(vsi, ETH_P_LLDP, ICE_FLTR_RX,
> ICE_FWD_TO_VSI);
> - if (!status || !create)
> - goto report;
> -
> - dev_info(dev,
> - "Failed to add generic LLDP Rx filter on
> VSI %i error: %d, falling back to specialized AQ control\n",
> - vsi->vsi_num, status);
> }
> -
> - status = ice_lldp_fltr_add_remove(&pf->hw, vsi, create);
> - if (!status)
> - set_bit(ICE_FLAG_LLDP_AQ_FLTR, pf->flags);
> -
> }
>
> -report:
> if (status)
> dev_warn(dev, "Failed to %s %s LLDP rule on VSI %i
> error: %d\n",
> create ? "add" : "remove", tx ? "Tx" : "Rx",
> --
> 2.55.0
Reviewed-by: Aleksandr Loktionov <[email protected]>