* kernel/watchdog.c:162:1: warning: the frame size of 1248 bytes is larger than 1024 bytes
@ 2023-07-31 1:24 kernel test robot
2023-07-31 16:20 ` Doug Anderson
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2023-07-31 1:24 UTC (permalink / raw)
To: Douglas Anderson
Cc: oe-kbuild-all, linux-kernel, Andrew Morton,
Linux Memory Management List
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 5d0c230f1de8c7515b6567d9afba1f196fb4e2f4
commit: 77c12fc95980d100fdc49e88a5727c242d0dfedc watchdog/hardlockup: add a "cpu" param to watchdog_hardlockup_check()
date: 7 weeks ago
config: x86_64-intel-next-customedconfig-intel_next_rpm_defconfig (https://download.01.org/0day-ci/archive/20230731/202307310955.pLZDhpnl-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230731/202307310955.pLZDhpnl-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307310955.pLZDhpnl-lkp@intel.com/
All warnings (new ones prefixed by >>):
kernel/watchdog.c: In function 'watchdog_hardlockup_check':
>> kernel/watchdog.c:162:1: warning: the frame size of 1248 bytes is larger than 1024 bytes [-Wframe-larger-than=]
162 | }
| ^
vim +162 kernel/watchdog.c
81972551df9d16 Douglas Anderson 2023-05-19 116
77c12fc95980d1 Douglas Anderson 2023-05-19 117 void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
81972551df9d16 Douglas Anderson 2023-05-19 118 {
1610611aadc224 Douglas Anderson 2023-05-19 119 /*
1610611aadc224 Douglas Anderson 2023-05-19 120 * Check for a hardlockup by making sure the CPU's timer
1610611aadc224 Douglas Anderson 2023-05-19 121 * interrupt is incrementing. The timer interrupt should have
81972551df9d16 Douglas Anderson 2023-05-19 122 * fired multiple times before we overflow'd. If it hasn't
81972551df9d16 Douglas Anderson 2023-05-19 123 * then this is a good indication the cpu is stuck
81972551df9d16 Douglas Anderson 2023-05-19 124 */
77c12fc95980d1 Douglas Anderson 2023-05-19 125 if (is_hardlockup(cpu)) {
1610611aadc224 Douglas Anderson 2023-05-19 126 unsigned int this_cpu = smp_processor_id();
77c12fc95980d1 Douglas Anderson 2023-05-19 127 struct cpumask backtrace_mask = *cpu_online_mask;
81972551df9d16 Douglas Anderson 2023-05-19 128
1610611aadc224 Douglas Anderson 2023-05-19 129 /* Only print hardlockups once. */
77c12fc95980d1 Douglas Anderson 2023-05-19 130 if (per_cpu(watchdog_hardlockup_warned, cpu))
81972551df9d16 Douglas Anderson 2023-05-19 131 return;
81972551df9d16 Douglas Anderson 2023-05-19 132
77c12fc95980d1 Douglas Anderson 2023-05-19 133 pr_emerg("Watchdog detected hard LOCKUP on cpu %d\n", cpu);
81972551df9d16 Douglas Anderson 2023-05-19 134 print_modules();
81972551df9d16 Douglas Anderson 2023-05-19 135 print_irqtrace_events(current);
77c12fc95980d1 Douglas Anderson 2023-05-19 136 if (cpu == this_cpu) {
81972551df9d16 Douglas Anderson 2023-05-19 137 if (regs)
81972551df9d16 Douglas Anderson 2023-05-19 138 show_regs(regs);
81972551df9d16 Douglas Anderson 2023-05-19 139 else
81972551df9d16 Douglas Anderson 2023-05-19 140 dump_stack();
77c12fc95980d1 Douglas Anderson 2023-05-19 141 cpumask_clear_cpu(cpu, &backtrace_mask);
77c12fc95980d1 Douglas Anderson 2023-05-19 142 } else {
77c12fc95980d1 Douglas Anderson 2023-05-19 143 if (trigger_single_cpu_backtrace(cpu))
77c12fc95980d1 Douglas Anderson 2023-05-19 144 cpumask_clear_cpu(cpu, &backtrace_mask);
77c12fc95980d1 Douglas Anderson 2023-05-19 145 }
81972551df9d16 Douglas Anderson 2023-05-19 146
81972551df9d16 Douglas Anderson 2023-05-19 147 /*
77c12fc95980d1 Douglas Anderson 2023-05-19 148 * Perform multi-CPU dump only once to avoid multiple
77c12fc95980d1 Douglas Anderson 2023-05-19 149 * hardlockups generating interleaving traces
81972551df9d16 Douglas Anderson 2023-05-19 150 */
81972551df9d16 Douglas Anderson 2023-05-19 151 if (sysctl_hardlockup_all_cpu_backtrace &&
1610611aadc224 Douglas Anderson 2023-05-19 152 !test_and_set_bit(0, &watchdog_hardlockup_all_cpu_dumped))
77c12fc95980d1 Douglas Anderson 2023-05-19 153 trigger_cpumask_backtrace(&backtrace_mask);
81972551df9d16 Douglas Anderson 2023-05-19 154
81972551df9d16 Douglas Anderson 2023-05-19 155 if (hardlockup_panic)
81972551df9d16 Douglas Anderson 2023-05-19 156 nmi_panic(regs, "Hard LOCKUP");
81972551df9d16 Douglas Anderson 2023-05-19 157
77c12fc95980d1 Douglas Anderson 2023-05-19 158 per_cpu(watchdog_hardlockup_warned, cpu) = true;
1610611aadc224 Douglas Anderson 2023-05-19 159 } else {
77c12fc95980d1 Douglas Anderson 2023-05-19 160 per_cpu(watchdog_hardlockup_warned, cpu) = false;
81972551df9d16 Douglas Anderson 2023-05-19 161 }
81972551df9d16 Douglas Anderson 2023-05-19 @162 }
81972551df9d16 Douglas Anderson 2023-05-19 163
:::::: The code at line 162 was first introduced by commit
:::::: 81972551df9d168a8183b786ff4de06008469c2e watchdog/hardlockup: move perf hardlockup checking/panic to common watchdog.c
:::::: TO: Douglas Anderson <dianders@chromium.org>
:::::: CC: Andrew Morton <akpm@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: kernel/watchdog.c:162:1: warning: the frame size of 1248 bytes is larger than 1024 bytes
2023-07-31 1:24 kernel/watchdog.c:162:1: warning: the frame size of 1248 bytes is larger than 1024 bytes kernel test robot
@ 2023-07-31 16:20 ` Doug Anderson
0 siblings, 0 replies; 2+ messages in thread
From: Doug Anderson @ 2023-07-31 16:20 UTC (permalink / raw)
To: kernel test robot
Cc: oe-kbuild-all, linux-kernel, Andrew Morton,
Linux Memory Management List
Hi,
On Sun, Jul 30, 2023 at 6:24 PM kernel test robot <lkp@intel.com> wrote:
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 5d0c230f1de8c7515b6567d9afba1f196fb4e2f4
> commit: 77c12fc95980d100fdc49e88a5727c242d0dfedc watchdog/hardlockup: add a "cpu" param to watchdog_hardlockup_check()
> date: 7 weeks ago
> config: x86_64-intel-next-customedconfig-intel_next_rpm_defconfig (https://download.01.org/0day-ci/archive/20230731/202307310955.pLZDhpnl-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce: (https://download.01.org/0day-ci/archive/20230731/202307310955.pLZDhpnl-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202307310955.pLZDhpnl-lkp@intel.com/
>
> All warnings (new ones prefixed by >>):
>
> kernel/watchdog.c: In function 'watchdog_hardlockup_check':
> >> kernel/watchdog.c:162:1: warning: the frame size of 1248 bytes is larger than 1024 bytes [-Wframe-larger-than=]
> 162 | }
> | ^
>
>
> vim +162 kernel/watchdog.c
>
> 81972551df9d16 Douglas Anderson 2023-05-19 116
> 77c12fc95980d1 Douglas Anderson 2023-05-19 117 void watchdog_hardlockup_check(unsigned int cpu, struct pt_regs *regs)
> 81972551df9d16 Douglas Anderson 2023-05-19 118 {
> 1610611aadc224 Douglas Anderson 2023-05-19 119 /*
> 1610611aadc224 Douglas Anderson 2023-05-19 120 * Check for a hardlockup by making sure the CPU's timer
> 1610611aadc224 Douglas Anderson 2023-05-19 121 * interrupt is incrementing. The timer interrupt should have
> 81972551df9d16 Douglas Anderson 2023-05-19 122 * fired multiple times before we overflow'd. If it hasn't
> 81972551df9d16 Douglas Anderson 2023-05-19 123 * then this is a good indication the cpu is stuck
> 81972551df9d16 Douglas Anderson 2023-05-19 124 */
> 77c12fc95980d1 Douglas Anderson 2023-05-19 125 if (is_hardlockup(cpu)) {
> 1610611aadc224 Douglas Anderson 2023-05-19 126 unsigned int this_cpu = smp_processor_id();
> 77c12fc95980d1 Douglas Anderson 2023-05-19 127 struct cpumask backtrace_mask = *cpu_online_mask;
Ah, so I assume the problem is right here where I put a "struct
cpumask" on the stack. FWIW, the direct copy above changed to:
struct cpumask backtrace_mask;
cpumask_copy(&backtrace_mask, cpu_online_mask);
...in commit 7a71d8e650b0 ("watchdog/hardlockup: in
watchdog_hardlockup_check() use cpumask_copy()"), but that won't
change the stack usage...
The failing config says:
CONFIG_NR_CPUS=8192
That means that this structure is taking 8192 / 8 = 1024 bytes and so
just having this structure on the stack at all will cause the yell.
Indeed, grepping through the source code shows that putting `struct
cpumask` is not common presumably because of this exact issue.
OK, so this doesn't look too hard to solve. We only ever do the
backtrace on one CPU anyway (see the test and set of
`watchdog_hardlockup_all_cpu_dumped`) so I can just make the structure
`static` and only mess with it if we're actually dumping the stack.
It'll use up 1KB of "static" memory all the time if you've set max
CPUs to 8K, but that seems better than trying to do a malloc when we
know the system is hard locked.
Patch to fix this is posted at:
https://lore.kernel.org/r/20230731091754.1.I501ab68cb926ee33a7c87e063d207abf09b9943c@changeid
-Doug
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-07-31 16:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-31 1:24 kernel/watchdog.c:162:1: warning: the frame size of 1248 bytes is larger than 1024 bytes kernel test robot
2023-07-31 16:20 ` Doug Anderson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox