Re: ipv4/tcp.c:4234:1: error: the frame size of 1152 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
From: Wei Liu <wei.liu@kernel.org>
Date: 2021-09-08 10:03:42
Also in:
lkml, netdev
On Tue, Sep 07, 2021 at 04:14:24PM -0700, Linus Torvalds wrote:
[ Added maintainers for various bits and pieces, since I spent the time trying to look at why those bits and pieces wasted stack-space and caused problems ] On Tue, Sep 7, 2021 at 3:16 PM Linus Torvalds [off-list ref] wrote:
[...]
There are many more of these cases. I've seen Hyper-V allocate 'struct
cpumask' on the stack, which is once again an absolute no-no that
people have apparently just ignored the warning for. When you have
NR_CPUS being the maximum of 8k, those bits add up, and a single
cpumask is 1kB in size. Which is why you should never do that on
stack, and instead use '
cpumask_var_t mask;
alloc_cpumask_var(&mask,..)
which will do a much more reasonable job. But the reason I call out
hyperv is that as far as I know, hyperv itself doesn't actually
support 8192 CPU's. So all that apic noise with 'struct cpumask' that
uses 1kB of data when NR_CPUS is set to 8192 is just wasted. Maybe I'm
wrong. Adding hyperv people to the cc too.
A lot of the stack frame size warnings are hidden by the fact that our
default value for warning about stack usage is 2kB for 64-bit builds.
Probably exactly because people did things like that cpumask thing,
and have these arrays of structures that are often even bigger in the
64-bit world.Thanks for the heads-up. I found one instance of this bad practice in hv_apic.c. Presumably that's the one you were referring to. However calling into the allocator from that IPI path seems very heavy weight. I will discuss with fellow engineers on how to fix it properly. Wei.
Linus
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel