realtek: don't treat first multicast portmask entry as reserved
authorJan Hoffmann <jan@3e8.eu>
Sat, 6 May 2023 23:05:31 +0000 (01:05 +0200)
committerSander Vanheule <sander@svanheule.net>
Sun, 7 May 2023 17:09:00 +0000 (19:09 +0200)
There doesn't appear to be a reason to do this, as only the last entry
is actually reserved for unknown multicast.

This also fixes two issues:
 - As the increment happened after the bounds check, the value of the
   actually reserved last entry could be overwritten.
 - On deletion of entries, a corresponding decrement was missing,
   causing the wrong entry to be marked as free.

Fixes: cde31976e375 ("realtek: Add support for Layer 2 Multicast")
Signed-off-by: Jan Hoffmann <jan@3e8.eu>
target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/dsa.c
target/linux/realtek/files-5.15/drivers/net/dsa/rtl83xx/dsa.c

index 672675e884d6b12c765a794e7c362551c354cf87..e45919d8b505f7f521fe7a5bd4c09e973e521ae4 100644 (file)
@@ -994,7 +994,6 @@ static int rtl83xx_mc_group_alloc(struct rtl838x_switch_priv *priv, int port)
        }
 
        set_bit(mc_group, priv->mc_group_bm);
-       mc_group++;  // We cannot use group 0, as this is used for lookup miss flooding
        portmask = BIT_ULL(port) | BIT_ULL(priv->cpu_port); 
        priv->r->write_mcast_pmask(mc_group, portmask);
 
index dbf87a60728037f9b6e2e9b4adbff4115e00a3f5..43b6d502f7037f547b52fbbe83559810492f5a44 100644 (file)
@@ -981,7 +981,6 @@ static int rtl83xx_mc_group_alloc(struct rtl838x_switch_priv *priv, int port)
        }
 
        set_bit(mc_group, priv->mc_group_bm);
-       mc_group++;  /* We cannot use group 0, as this is used for lookup miss flooding */
        portmask = BIT_ULL(port) | BIT_ULL(priv->cpu_port);
        priv->r->write_mcast_pmask(mc_group, portmask);