r8169: remove multicast filter limit
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 27 Nov 2023 20:16:10 +0000 (21:16 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 29 Nov 2023 04:09:36 +0000 (20:09 -0800)
Once upon a time, when r8169 was new, the multicast filter limit code
was copied from RTL8139 driver. There the filter limit is even
user-configurable.
The filtering is hash-based and we don't have perfect filtering.
Actually the mc filtering on RTL8125 still seems to be the same
as used on 8390/NE2000. So it's not clear to me which benefit it
should bring when switching to all-multi mode once a certain number
of filter bits is set. More the opposite: Filtering out at least
some unwanted mc traffic is better than no filtering.
Also the available chip documentation doesn't mention any restriction.
Therefore remove the filter limit.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://lore.kernel.org/r/57076c05-3730-40d1-ab9a-5334b263e41a@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/realtek/r8169_main.c

index dbc5c9d..0aed99a 100644 (file)
 #define FIRMWARE_8125A_3       "rtl_nic/rtl8125a-3.fw"
 #define FIRMWARE_8125B_2       "rtl_nic/rtl8125b-2.fw"
 
-/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
-   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
-#define        MC_FILTER_LIMIT 32
-
 #define TX_DMA_BURST   7       /* Maximum PCI burst, '7' is unlimited */
 #define InterFrameGap  0x03    /* 3 means InterFrameGap = the shortest one */
 
@@ -2597,8 +2593,7 @@ static void rtl_set_rx_mode(struct net_device *dev)
                rx_mode |= AcceptAllPhys;
        } else if (!(dev->flags & IFF_MULTICAST)) {
                rx_mode &= ~AcceptMulticast;
-       } else if (netdev_mc_count(dev) > MC_FILTER_LIMIT ||
-                  dev->flags & IFF_ALLMULTI ||
+       } else if (dev->flags & IFF_ALLMULTI ||
                   tp->mac_version == RTL_GIGA_MAC_VER_35) {
                /* accept all multicasts */
        } else if (netdev_mc_empty(dev)) {