[PATCH net 2/3] net: dsa: b53: stop reading ARL entries if search is done

Jonas Gorski posted 3 patches 3 months, 1 week ago
[PATCH net 2/3] net: dsa: b53: stop reading ARL entries if search is done
Posted by Jonas Gorski 3 months, 1 week ago
The switch clears the ARL_SRCH_STDN bit when the search is done, i.e. it
finished traversing the ARL table.

This means that there will be no valid result, so we should not attempt
to read and process any further entries.

We only ever check the validity of the entries for 4 ARL bin chips, and
only after having passed the first entry to the b53_fdb_copy().

This means that we always pass an invalid entry at the end to the
b53_fdb_copy(). b53_fdb_copy() does check the validity though before
passing on the entry, so it never gets passed on.

On < 4 ARL bin chips, we will even continue reading invalid entries
until we reach the result limit.

Fixes: 1da6df85c6fb ("net: dsa: b53: Implement ARL add/del/dump operations")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
---
 drivers/net/dsa/b53/b53_common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c
index 77571a46311e..82cce7b82da2 100644
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
@@ -2018,7 +2018,7 @@ static int b53_arl_search_wait(struct b53_device *dev)
 	do {
 		b53_read8(dev, B53_ARLIO_PAGE, offset, &reg);
 		if (!(reg & ARL_SRCH_STDN))
-			return 0;
+			return -ENOENT;
 
 		if (reg & ARL_SRCH_VLID)
 			return 0;
-- 
2.43.0
Re: [PATCH net 2/3] net: dsa: b53: stop reading ARL entries if search is done
Posted by Florian Fainelli 3 months, 1 week ago

On 11/2/2025 2:07 AM, Jonas Gorski wrote:
> The switch clears the ARL_SRCH_STDN bit when the search is done, i.e. it
> finished traversing the ARL table.
> 
> This means that there will be no valid result, so we should not attempt
> to read and process any further entries.
> 
> We only ever check the validity of the entries for 4 ARL bin chips, and
> only after having passed the first entry to the b53_fdb_copy().
> 
> This means that we always pass an invalid entry at the end to the
> b53_fdb_copy(). b53_fdb_copy() does check the validity though before
> passing on the entry, so it never gets passed on.
> 
> On < 4 ARL bin chips, we will even continue reading invalid entries
> until we reach the result limit.
> 
> Fixes: 1da6df85c6fb ("net: dsa: b53: Implement ARL add/del/dump operations")
> Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
-- 
Florian