[Intel-wired-lan] [PATCH iwl-net] ice: Fix incorrect LLDP filter assumptions
Dave Ertman <[email protected]> Wed, 5 Aug 2026 12:49:35 -0400
| Newsgroups | org.osuosl.intel-wired-lan |
|---|---|
| Message-ID | <[email protected]> |
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.
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