summaryrefslogtreecommitdiffstats
path: root/drivers/net/b44.c
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-10-05 13:10:38 +0200
committerJeff Garzik <jeff@garzik.org>2006-10-05 13:10:38 +0200
commit2f614fe04f4463ff22234133319067d7361f54e5 (patch)
tree136b00e488510b16c3b2118d9a221f4103b10c27 /drivers/net/b44.c
parent[PATCH] bonding: fix deadlock on high loads in bond_alb_monitor() (diff)
downloadlinux-2f614fe04f4463ff22234133319067d7361f54e5.tar.xz
linux-2f614fe04f4463ff22234133319067d7361f54e5.zip
[netdrvr] b44: handle excessive multicast groups
If there are more than B44_MCAST_TABLE_SIZE groups in the dev->mc_list, it will only listen to the first B44_MCAST_TABLE_SIZE that it sees. This change makes the driver go into RXCONFIG_ALLMULTI mode if there are more than B44_MCAST_TABLE_SIZE groups being subscribed to, similar to other network drivers. Noticed by Bill Helfinstine <bhelf@flitterfly.whirpon.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net/b44.c')
-rw-r--r--drivers/net/b44.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c
index e891ea2ecc3c..973b8eb37dc2 100644
--- a/drivers/net/b44.c
+++ b/drivers/net/b44.c
@@ -1706,14 +1706,15 @@ static void __b44_set_rx_mode(struct net_device *dev)
__b44_set_mac_addr(bp);
- if (dev->flags & IFF_ALLMULTI)
+ if ((dev->flags & IFF_ALLMULTI) ||
+ (dev->mc_count > B44_MCAST_TABLE_SIZE))
val |= RXCONFIG_ALLMULTI;
else
i = __b44_load_mcast(bp, dev);
- for (; i < 64; i++) {
+ for (; i < 64; i++)
__b44_cam_write(bp, zero, i);
- }
+
bw32(bp, B44_RXCONFIG, val);
val = br32(bp, B44_CAM_CTRL);
bw32(bp, B44_CAM_CTRL, val | CAM_CTRL_ENABLE);