be2net: Fix disabling multicast promiscous mode
authorPadmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Thu, 3 Nov 2011 01:49:27 +0000 (01:49 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Nov 2011 01:59:39 +0000 (21:59 -0400)
If user tries to disable multicast promiscous mode, the adapter remains
in this mode as resetting the multicast promiscous mode was missing
in RX filter command. Fixed this.

Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_cmds.c

index bd8332cbf61933960fe35f0fd2c674be1fb71bf5..03fe7cde2e6188628f7057e428b9d2fc78dec660 100644 (file)
@@ -1540,6 +1540,13 @@ int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
 
                req->if_flags_mask = req->if_flags =
                                cpu_to_le32(BE_IF_FLAGS_MULTICAST);
+
+               /* Reset mcast promisc mode if already set by setting mask
+                * and not setting flags field
+                */
+               req->if_flags_mask |=
+                               cpu_to_le32(BE_IF_FLAGS_MCAST_PROMISCUOUS);
+
                req->mcast_num = cpu_to_le32(netdev_mc_count(adapter->netdev));
                netdev_for_each_mc_addr(ha, adapter->netdev)
                        memcpy(req->mcast_mac[i++].byte, ha->addr, ETH_ALEN);