diff options
author | Sucheta Chakraborty <sucheta.chakraborty@qlogic.com> | 2013-07-19 16:56:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-07-19 20:08:16 -0400 |
commit | 8dc394af2e6159d3799b1219625db47c42a1964f (patch) | |
tree | 2c8c191b7eb5fe6d9b62d281ef59ec38ddfa7957 /drivers/net | |
parent | e9a355a9b407da41b7cb22767f3898d4628411b2 (diff) |
qlcnic: Fix multicast packet handling for PF and VF.
o Multicast MAC was not getting programmed due to which multicast
packets were being dropped by FW.
This patch fixes commit 168e4fb54c11865668ad50eff81b5f2729e0e0f4
("qlcnic: Secondary unicast MAC address support.") which introduced
bug in handling multicast packets.
Signed-off-by: Sucheta Chakraborty <sucheta.chakraborty@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c index 5b5d2edf125d..4ed7e73d88d3 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | |||
@@ -516,20 +516,18 @@ void __qlcnic_set_multi(struct net_device *netdev, u16 vlan) | |||
516 | if (netdev->flags & IFF_PROMISC) { | 516 | if (netdev->flags & IFF_PROMISC) { |
517 | if (!(adapter->flags & QLCNIC_PROMISC_DISABLED)) | 517 | if (!(adapter->flags & QLCNIC_PROMISC_DISABLED)) |
518 | mode = VPORT_MISS_MODE_ACCEPT_ALL; | 518 | mode = VPORT_MISS_MODE_ACCEPT_ALL; |
519 | } else if (netdev->flags & IFF_ALLMULTI) { | 519 | } else if ((netdev->flags & IFF_ALLMULTI) || |
520 | if (netdev_mc_count(netdev) > ahw->max_mc_count) { | 520 | (netdev_mc_count(netdev) > ahw->max_mc_count)) { |
521 | mode = VPORT_MISS_MODE_ACCEPT_MULTI; | 521 | mode = VPORT_MISS_MODE_ACCEPT_MULTI; |
522 | } else if (!netdev_mc_empty(netdev) && | 522 | } else if (!netdev_mc_empty(netdev) && |
523 | !qlcnic_sriov_vf_check(adapter)) { | 523 | !qlcnic_sriov_vf_check(adapter)) { |
524 | netdev_for_each_mc_addr(ha, netdev) | 524 | netdev_for_each_mc_addr(ha, netdev) |
525 | qlcnic_nic_add_mac(adapter, ha->addr, | 525 | qlcnic_nic_add_mac(adapter, ha->addr, vlan); |
526 | vlan); | ||
527 | } | ||
528 | if (mode != VPORT_MISS_MODE_ACCEPT_MULTI && | ||
529 | qlcnic_sriov_vf_check(adapter)) | ||
530 | qlcnic_vf_add_mc_list(netdev, vlan); | ||
531 | } | 526 | } |
532 | 527 | ||
528 | if (qlcnic_sriov_vf_check(adapter)) | ||
529 | qlcnic_vf_add_mc_list(netdev, vlan); | ||
530 | |||
533 | /* configure unicast MAC address, if there is not sufficient space | 531 | /* configure unicast MAC address, if there is not sufficient space |
534 | * to store all the unicast addresses then enable promiscuous mode | 532 | * to store all the unicast addresses then enable promiscuous mode |
535 | */ | 533 | */ |