[PATCH net-next 2/5] dpaa2-switch: factor out the FDB in-use check into a helper

From: Ioana Ciornei

Date: Wed Jun 10 2026 - 11:18:12 EST


The dpaa2_switch_port_set_fdb() function is hard to follow and
open-coding the in-use check into it makes it even harder to read.
Factor out that code block into a new helper -
dpaa2_switch_fdb_in_use_by_others().

Signed-off-by: Ioana Ciornei <ioana.ciornei@xxxxxxx>
---
.../ethernet/freescale/dpaa2/dpaa2-switch.c | 31 +++++++++++--------
1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
index 6ac747b4264c..3052a1c63c2d 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
@@ -51,6 +51,22 @@ dpaa2_switch_filter_block_get_unused(struct ethsw_core *ethsw)
return NULL;
}

+static bool dpaa2_switch_fdb_in_use_by_others(struct ethsw_core *ethsw,
+ struct dpaa2_switch_fdb *fdb,
+ struct ethsw_port_priv *except)
+{
+ int i;
+
+ for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
+ if (!ethsw->ports[i] || ethsw->ports[i] == except)
+ continue;
+ if (ethsw->ports[i]->fdb == fdb)
+ return true;
+ }
+
+ return false;
+}
+
static void dpaa2_switch_port_set_fdb(struct ethsw_port_priv *port_priv,
struct net_device *upper_dev,
bool linking)
@@ -59,24 +75,13 @@ static void dpaa2_switch_port_set_fdb(struct ethsw_port_priv *port_priv,
struct ethsw_port_priv *other_port_priv = NULL;
struct dpaa2_switch_fdb *fdb;
struct net_device *other_dev;
- bool last_fdb_user = true;
struct list_head *iter;
- int i;

/* If we leave a bridge, find an unused FDB and use that. */
if (!linking) {
- /* First verify if this is the last port to leave this bridge */
- for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
- if (!ethsw->ports[i] || ethsw->ports[i] == port_priv)
- continue;
- if (ethsw->ports[i]->fdb == port_priv->fdb) {
- last_fdb_user = false;
- break;
- }
- }
-
/* If this is the last user of the FDB, just keep using it. */
- if (last_fdb_user) {
+ if (!dpaa2_switch_fdb_in_use_by_others(ethsw, port_priv->fdb,
+ port_priv)) {
port_priv->fdb->bridge_dev = NULL;
return;
}
--
2.25.1