* [PATCH] net: spider_net: Use non-atomic bitmap API when applicable
@ 2021-11-27 15:18 Christophe JAILLET
2021-12-04 15:47 ` Geoff Levand
0 siblings, 1 reply; 2+ messages in thread
From: Christophe JAILLET @ 2021-11-27 15:18 UTC (permalink / raw)
To: kou.ishizaki, geoff, davem, kuba
Cc: netdev, linuxppc-dev, linux-kernel, kernel-janitors, Christophe JAILLET
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>
---
This patch is *not* compile tested. I don't have the needed cross compiling
tool chain.
---
drivers/net/ethernet/toshiba/spider_net.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c
index f50f9a43d3ea..f47b8358669d 100644
--- a/drivers/net/ethernet/toshiba/spider_net.c
+++ b/drivers/net/ethernet/toshiba/spider_net.c
@@ -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:
--
2.30.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] net: spider_net: Use non-atomic bitmap API when applicable
2021-11-27 15:18 [PATCH] net: spider_net: Use non-atomic bitmap API when applicable Christophe JAILLET
@ 2021-12-04 15:47 ` Geoff Levand
0 siblings, 0 replies; 2+ messages in thread
From: Geoff Levand @ 2021-12-04 15:47 UTC (permalink / raw)
To: Christophe JAILLET, kou.ishizaki, davem, kuba
Cc: netdev, linuxppc-dev, linux-kernel, kernel-janitors
Hi Christophe,
On 11/27/21 7:18 AM, Christophe JAILLET wrote:
> 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>
> ---
> This patch is *not* compile tested. I don't have the needed cross compiling
> tool chain.
> ---
> drivers/net/ethernet/toshiba/spider_net.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
As I mentioned, my tdd-builder Docker image has a
gcc-powerpc-linux-gnu cross compiler that can be used to build
a ppc64 kernel:
https://hub.docker.com/r/glevand/tdd-builder
I also have a few helper scripts to run the container and cross
compile a kernel:
https://github.com/glevand/tdd--docker/blob/master/builder/run-builder.sh
https://github.com/glevand/tdd-project/blob/master/scripts/build-linux-kernel.sh
I applied your patch to v5.16-rc3 and no spider_net warnings
or errors were seen when building with ppc64_defconfig. Thanks
for your contribution.
Acked-by: Geoff Levand <geoff@infradead.org>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-12-04 15:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-27 15:18 [PATCH] net: spider_net: Use non-atomic bitmap API when applicable Christophe JAILLET
2021-12-04 15:47 ` Geoff Levand
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).