[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220519181204.7c6zjn6xqcgvyaup@skbuf>
Date: Thu, 19 May 2022 21:12:04 +0300
From: Vladimir Oltean <olteanv@...il.com>
To: Clément Léger <clement.leger@...tlin.com>
Cc: Andrew Lunn <andrew@...n.ch>,
Vivien Didelot <vivien.didelot@...il.com>,
Florian Fainelli <f.fainelli@...il.com>,
"David S . Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Rob Herring <robh+dt@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Geert Uytterhoeven <geert+renesas@...der.be>,
Magnus Damm <magnus.damm@...il.com>,
Heiner Kallweit <hkallweit1@...il.com>,
Russell King <linux@...linux.org.uk>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
Herve Codina <herve.codina@...tlin.com>,
Miquèl Raynal <miquel.raynal@...tlin.com>,
Milan Stevanovic <milan.stevanovic@...com>,
Jimmy Lalande <jimmy.lalande@...com>,
Pascal Eberhard <pascal.eberhard@...com>,
linux-kernel@...r.kernel.org, devicetree@...r.kernel.org,
linux-renesas-soc@...r.kernel.org, netdev@...r.kernel.org
Subject: Re: [PATCH net-next v5 09/13] net: dsa: rzn1-a5psw: add FDB support
On Thu, May 19, 2022 at 05:31:03PM +0200, Clément Léger wrote:
> +static int a5psw_port_fdb_dump(struct dsa_switch *ds, int port,
> + dsa_fdb_dump_cb_t *cb, void *data)
> +{
> + struct a5psw *a5psw = ds->priv;
> + union lk_data lk_data;
> + int i = 0, ret;
> + u32 reg;
> +
> + for (i = 0; i < A5PSW_TABLE_ENTRIES; i++) {
> + reg = A5PSW_LK_ADDR_CTRL_READ | A5PSW_LK_ADDR_CTRL_WAIT | i;
> + mutex_lock(&a5psw->lk_lock);
It might be more efficient to lock the lookup table only once, outside
the for loop, rather than 8192 times (plus the fact that when you run
plain "bridge fdb show", this gets repeated for each switch user port,
which is a nuisance of its own).
> +
> + ret = a5psw_lk_execute_ctrl(a5psw, ®);
> + if (ret) {
> + mutex_unlock(&a5psw->lk_lock);
> + return ret;
> + }
> +
> + lk_data.hi = a5psw_reg_readl(a5psw, A5PSW_LK_DATA_HI);
> + /* If entry is not valid or does not contain the port, skip */
> + if (!lk_data.entry.valid ||
> + !(lk_data.entry.port_mask & BIT(port))) {
> + mutex_unlock(&a5psw->lk_lock);
> + continue;
> + }
> +
> + lk_data.lo = a5psw_reg_readl(a5psw, A5PSW_LK_DATA_LO);
> + mutex_unlock(&a5psw->lk_lock);
> +
> + ret = cb(lk_data.entry.mac, 0, lk_data.entry.is_static, data);
> + if (ret)
> + return ret;
> + }
> +
> + return 0;
> +}
Powered by blists - more mailing lists