mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 17:53:56 +08:00
net: spider_net: Use non-atomic bitmap API when applicable
No concurrent access is possible when a bitmap is local to a function. So prefer the non-atomic functions to save a few cycles. - replace a 'for' loop by an equivalent non-atomic 'bitmap_fill()' call - use '__set_bit()' While at it, clear the 'bitmask' bitmap only when needed. Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://lore.kernel.org/r/3de0792f5088f00d135c835df6c19e63ae95f5d2.1638026251.git.christophe.jaillet@wanadoo.fr Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
10184da916
commit
699e53e4fa
@ -595,24 +595,24 @@ spider_net_set_multi(struct net_device *netdev)
|
||||
int i;
|
||||
u32 reg;
|
||||
struct spider_net_card *card = netdev_priv(netdev);
|
||||
DECLARE_BITMAP(bitmask, SPIDER_NET_MULTICAST_HASHES) = {};
|
||||
DECLARE_BITMAP(bitmask, SPIDER_NET_MULTICAST_HASHES);
|
||||
|
||||
spider_net_set_promisc(card);
|
||||
|
||||
if (netdev->flags & IFF_ALLMULTI) {
|
||||
for (i = 0; i < SPIDER_NET_MULTICAST_HASHES; i++) {
|
||||
set_bit(i, bitmask);
|
||||
}
|
||||
bitmap_fill(bitmask, SPIDER_NET_MULTICAST_HASHES);
|
||||
goto write_hash;
|
||||
}
|
||||
|
||||
bitmap_zero(bitmask, SPIDER_NET_MULTICAST_HASHES);
|
||||
|
||||
/* well, we know, what the broadcast hash value is: it's xfd
|
||||
hash = spider_net_get_multicast_hash(netdev, netdev->broadcast); */
|
||||
set_bit(0xfd, bitmask);
|
||||
__set_bit(0xfd, bitmask);
|
||||
|
||||
netdev_for_each_mc_addr(ha, netdev) {
|
||||
hash = spider_net_get_multicast_hash(netdev, ha->addr);
|
||||
set_bit(hash, bitmask);
|
||||
__set_bit(hash, bitmask);
|
||||
}
|
||||
|
||||
write_hash:
|
||||
|
Loading…
Reference in New Issue
Block a user