diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-10-05 13:10:38 +0200 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-10-05 13:10:38 +0200 |
commit | 2f614fe04f4463ff22234133319067d7361f54e5 (patch) | |
tree | 136b00e488510b16c3b2118d9a221f4103b10c27 /drivers/net/b44.c | |
parent | [PATCH] bonding: fix deadlock on high loads in bond_alb_monitor() (diff) | |
download | linux-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.c | 7 |
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); |