Re: drivers/acpi/processor_thermal.c:66:1: warning: the frame size of 2160 bytes is larger than 2048 bytes

From: Rafael J. Wysocki
Date: Mon Jan 20 2020 - 05:16:26 EST


On Fri, Jan 17, 2020 at 4:51 PM Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote:
>
> Hi Rafael, Viresh,
>
> On Fri, Nov 15, 2019 at 6:23 AM kbuild test robot <lkp@xxxxxxxxx> wrote:
> > tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> > head: 96b95eff4a591dbac582c2590d067e356a18aacb
> > commit: 3000ce3c52f8b8db093e4dc649cd172390f71137 cpufreq: Use per-policy frequency QoS
> > date: 4 weeks ago
> > config: ia64-randconfig-a001-20191115 (attached as .config)
> > compiler: ia64-linux-gcc (GCC) 7.4.0
> > reproduce:
> > wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > chmod +x ~/bin/make.cross
> > git checkout 3000ce3c52f8b8db093e4dc649cd172390f71137
> > # save the attached .config to linux build tree
> > GCC_VERSION=7.4.0 make.cross ARCH=ia64
> >
> > If you fix the issue, kindly add following tag
> > Reported-by: kbuild test robot <lkp@xxxxxxxxx>
>
> Seeing similar warnings on arm64, so this triggered my attention.
>
> > --
> > drivers/cpufreq/cpufreq.c: In function 'refresh_frequency_limits.part.33':
> > >> drivers/cpufreq/cpufreq.c:1116:1: warning: the frame size of 2160 bytes is larger than 2048 bytes [-Wframe-larger-than=]
>
> | struct cpufreq_policy new_policy;
>
> That's a large struct on the stack...
>
> | if (!policy_is_inactive(policy)) {
> | new_policy = *policy;
>
> Let's make a copy?
> How well does this work, given struct cpufreq_policy contains a
> work_struct, list_head, kobject, completion, semaphore, spinlock_t,
> wait_queue_head_t, and two notifier_blocks, which are all objects you
> cannot just copy and reuse?
>
> | pr_debug("updating policy for CPU %u\n", policy->cpu);
> |
> | cpufreq_set_policy(policy, &new_policy);
>
> If cpufreq_set_policy() uses only a few fields from new_policy,

That's really the case.

> it might be a good idea to extract those into its own structure.

Or organize the code differently.

This is old code that hasn't been change, but I'll look at it since it
is problematic.

Thanks!