enic: minimize pkt filter updates to firmware
In set_multicast(), only push pkt filter changes down to firmware if pkt filter actually changes. Signed-off-by: Vasanthy Kolluri <vkolluri@cisco.com> Signed-off-by: Scott Feldman <scofeldm@cisco.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2d6ddced5c
commit
9959a18556
|
@ -89,6 +89,7 @@ struct enic {
|
|||
spinlock_t devcmd_lock;
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
u8 mc_addr[ENIC_MULTICAST_PERFECT_FILTERS][ETH_ALEN];
|
||||
unsigned int flags;
|
||||
unsigned int mc_count;
|
||||
int csum_rx_enabled;
|
||||
u32 port_mtu;
|
||||
|
|
|
@ -771,6 +771,7 @@ static void enic_set_multicast_list(struct net_device *netdev)
|
|||
int promisc = (netdev->flags & IFF_PROMISC) ? 1 : 0;
|
||||
int allmulti = (netdev->flags & IFF_ALLMULTI) ||
|
||||
(netdev->mc_count > ENIC_MULTICAST_PERFECT_FILTERS);
|
||||
unsigned int flags = netdev->flags | (allmulti ? IFF_ALLMULTI : 0);
|
||||
u8 mc_addr[ENIC_MULTICAST_PERFECT_FILTERS][ETH_ALEN];
|
||||
unsigned int mc_count = netdev->mc_count;
|
||||
unsigned int i, j;
|
||||
|
@ -780,8 +781,11 @@ static void enic_set_multicast_list(struct net_device *netdev)
|
|||
|
||||
spin_lock(&enic->devcmd_lock);
|
||||
|
||||
vnic_dev_packet_filter(enic->vdev, directed,
|
||||
multicast, broadcast, promisc, allmulti);
|
||||
if (enic->flags != flags) {
|
||||
enic->flags = flags;
|
||||
vnic_dev_packet_filter(enic->vdev, directed,
|
||||
multicast, broadcast, promisc, allmulti);
|
||||
}
|
||||
|
||||
/* Is there an easier way? Trying to minimize to
|
||||
* calls to add/del multicast addrs. We keep the
|
||||
|
|
Loading…
Reference in New Issue