Message ID | 20210314074434.164868-1-nick.desaulniers@gmail.com |
---|---|
State | Accepted |
Commit | bef2897d31b97852d80b38e9376ed5ef3a90b309 |
Headers | show |
Series | ASoC: Intel: Skylake: skl-topology: fix -frame-larger-than | expand |
On Sun, Mar 14, 2021 at 10:08 AM Nick Desaulniers <nick.desaulniers@gmail.com> wrote: > > Fixes: > sound/soc/intel/skylake/skl-topology.c:3613:13: warning: stack frame > size of 1304 bytes in function 'skl_tplg_complete' > [-Wframe-larger-than=] > > struct snd_ctl_elem_value is 1224 bytes in my configuration. > > Heap allocate it, then free it within the current frame. > > Signed-off-by: Nick Desaulniers <nick.desaulniers@gmail.com> > --- > Changes V1 -> V2: rebased on mainline. > > sound/soc/intel/skylake/skl-topology.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c > index b824086203b9..566d07b4b523 100644 > --- a/sound/soc/intel/skylake/skl-topology.c > +++ b/sound/soc/intel/skylake/skl-topology.c > @@ -3613,10 +3613,15 @@ static int skl_manifest_load(struct snd_soc_component *cmpnt, int index, > static void skl_tplg_complete(struct snd_soc_component *component) > { > struct snd_soc_dobj *dobj; > - struct snd_soc_acpi_mach *mach = > - dev_get_platdata(component->card->dev); > + struct snd_soc_acpi_mach *mach; > + struct snd_ctl_elem_value *val; > int i; > > + val = kzalloc(sizeof(*val), GFP_KERNEL); > + if (!val) > + return; > + > + mach = dev_get_platdata(component->card->dev); > list_for_each_entry(dobj, &component->dobj_list, list) { > struct snd_kcontrol *kcontrol = dobj->control.kcontrol; > struct soc_enum *se; > @@ -3632,14 +3637,13 @@ static void skl_tplg_complete(struct snd_soc_component *component) > sprintf(chan_text, "c%d", mach->mach_params.dmic_num); > > for (i = 0; i < se->items; i++) { > - struct snd_ctl_elem_value val = {}; Shouldn't you use rather kmalloc() + memset(). Otherwise I don't see how possible this won't be garbage on the second iteration of the outer loop. > - > if (strstr(texts[i], chan_text)) { > - val.value.enumerated.item[0] = i; > - kcontrol->put(kcontrol, &val); > + val->value.enumerated.item[0] = i; > + kcontrol->put(kcontrol, val); > } > } > } > + kfree(val); > } > > static struct snd_soc_tplg_ops skl_tplg_ops = { > > base-commit: 88fe49249c99de14e543c632a46248d85411ab9e > -- > 2.25.1 >
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index ae466cd59292..cdc916c91301 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -3613,10 +3613,15 @@ static int skl_manifest_load(struct snd_soc_component *cmpnt, int index, static void skl_tplg_complete(struct snd_soc_component *component) { struct snd_soc_dobj *dobj; - struct snd_soc_acpi_mach *mach = - dev_get_platdata(component->card->dev); + struct snd_soc_acpi_mach *mach; + struct snd_ctl_elem_value *val; int i; + val = kzalloc(sizeof(*val), GFP_KERNEL); + if (!val) + return; + + mach = dev_get_platdata(component->card->dev); list_for_each_entry(dobj, &component->dobj_list, list) { struct snd_kcontrol *kcontrol = dobj->control.kcontrol; struct soc_enum *se = @@ -3631,14 +3636,13 @@ static void skl_tplg_complete(struct snd_soc_component *component) sprintf(chan_text, "c%d", mach->mach_params.dmic_num); for (i = 0; i < se->items; i++) { - struct snd_ctl_elem_value val; - if (strstr(texts[i], chan_text)) { - val.value.enumerated.item[0] = i; - kcontrol->put(kcontrol, &val); + val->value.enumerated.item[0] = i; + kcontrol->put(kcontrol, val); } } } + kfree(val); } static struct snd_soc_tplg_ops skl_tplg_ops = {
Fixes: sound/soc/intel/skylake/skl-topology.c:3613:13: warning: stack frame size of 1304 bytes in function 'skl_tplg_complete' [-Wframe-larger-than=] struct snd_ctl_elem_value is 1224 bytes in my configuration. Heap allocate it, then free it within the current frame. Signed-off-by: Nick Desaulniers <nick.desaulniers@gmail.com> --- sound/soc/intel/skylake/skl-topology.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) base-commit: 65f0d2414b7079556fbbcc070b3d1c9f9587606d prerequisite-patch-id: 4d05aad8c2b50c0c3b4447dd842abe8b1b840927