Arnd Bergmann
2020-May-27 13:51 UTC
[Bridge] [PATCH] bridge: multicast: work around clang bug
Clang-10 and clang-11 run into a corner case of the register allocator on 32-bit ARM, leading to excessive stack usage from register spilling: net/bridge/br_multicast.c:2422:6: error: stack frame size of 1472 bytes in function 'br_multicast_get_stats' [-Werror,-Wframe-larger-than=] Work around this by marking one of the internal functions as noinline_for_stack. Link: https://bugs.llvm.org/show_bug.cgi?id=45802#c9 Signed-off-by: Arnd Bergmann <arnd at arndb.de> --- net/bridge/br_multicast.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index ad12fe3fca8c..83490bf73a13 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -2413,7 +2413,8 @@ void br_multicast_uninit_stats(struct net_bridge *br) free_percpu(br->mcast_stats); } -static void mcast_stats_add_dir(u64 *dst, u64 *src) +/* noinline for https://bugs.llvm.org/show_bug.cgi?id=45802#c9 */ +static noinline_for_stack void mcast_stats_add_dir(u64 *dst, u64 *src) { dst[BR_MCAST_DIR_RX] += src[BR_MCAST_DIR_RX]; dst[BR_MCAST_DIR_TX] += src[BR_MCAST_DIR_TX]; -- 2.26.2
David Miller
2020-May-27 18:35 UTC
[Bridge] [PATCH] bridge: multicast: work around clang bug
From: Arnd Bergmann <arnd at arndb.de> Date: Wed, 27 May 2020 15:51:13 +0200> Clang-10 and clang-11 run into a corner case of the register > allocator on 32-bit ARM, leading to excessive stack usage from > register spilling: > > net/bridge/br_multicast.c:2422:6: error: stack frame size of 1472 bytes in function 'br_multicast_get_stats' [-Werror,-Wframe-larger-than=] > > Work around this by marking one of the internal functions as > noinline_for_stack. > > Link: https://bugs.llvm.org/show_bug.cgi?id=45802#c9 > Signed-off-by: Arnd Bergmann <arnd at arndb.de>Applied.