]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.16-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Jan 2022 05:51:34 +0000 (06:51 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Jan 2022 05:51:34 +0000 (06:51 +0100)
added patches:
drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch
staging-greybus-fix-stack-size-warning-with-ubsan.patch

queue-5.16/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch [new file with mode: 0644]
queue-5.16/series
queue-5.16/staging-greybus-fix-stack-size-warning-with-ubsan.patch [new file with mode: 0644]

diff --git a/queue-5.16/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch b/queue-5.16/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch
new file mode 100644 (file)
index 0000000..8ec20e8
--- /dev/null
@@ -0,0 +1,55 @@
+From 2e70570656adfe1c5d9a29940faa348d5f132199 Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <nathan@kernel.org>
+Date: Thu, 14 Oct 2021 14:19:16 -0700
+Subject: drm/i915: Avoid bitwise vs logical OR warning in snb_wm_latency_quirk()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Nathan Chancellor <nathan@kernel.org>
+
+commit 2e70570656adfe1c5d9a29940faa348d5f132199 upstream.
+
+A new warning in clang points out a place in this file where a bitwise
+OR is being used with boolean types:
+
+drivers/gpu/drm/i915/intel_pm.c:3066:12: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
+        changed = ilk_increase_wm_latency(dev_priv, dev_priv->wm.pri_latency, 12) |
+                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This construct is intentional, as it allows every one of the calls to
+ilk_increase_wm_latency() to occur (instead of short circuiting with
+logical OR) while still caring about the result of each call.
+
+To make this clearer to the compiler, use the '|=' operator to assign
+the result of each ilk_increase_wm_latency() call to changed, which
+keeps the meaning of the code the same but makes it obvious that every
+one of these calls is expected to happen.
+
+Link: https://github.com/ClangBuiltLinux/linux/issues/1473
+Reported-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Suggested-by: Dávid Bolvanský <david.bolvansky@gmail.com>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20211014211916.3550122-1-nathan@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/i915/intel_pm.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_pm.c
++++ b/drivers/gpu/drm/i915/intel_pm.c
+@@ -3062,9 +3062,9 @@ static void snb_wm_latency_quirk(struct
+        * The BIOS provided WM memory latency values are often
+        * inadequate for high resolution displays. Adjust them.
+        */
+-      changed = ilk_increase_wm_latency(dev_priv, dev_priv->wm.pri_latency, 12) |
+-              ilk_increase_wm_latency(dev_priv, dev_priv->wm.spr_latency, 12) |
+-              ilk_increase_wm_latency(dev_priv, dev_priv->wm.cur_latency, 12);
++      changed = ilk_increase_wm_latency(dev_priv, dev_priv->wm.pri_latency, 12);
++      changed |= ilk_increase_wm_latency(dev_priv, dev_priv->wm.spr_latency, 12);
++      changed |= ilk_increase_wm_latency(dev_priv, dev_priv->wm.cur_latency, 12);
+       if (!changed)
+               return;
index a683f25382958de64dcee4a81d663d7d3a7eeb35..6a4de8426d1177c82da517e0b6d57e602ffb8b59 100644 (file)
@@ -32,3 +32,5 @@ random-fix-data-race-on-crng-init-time.patch
 random-fix-crash-on-multiple-early-calls-to-add_bootloader_randomness.patch
 platform-x86-intel-hid-add-quirk-to-support-surface-go-3.patch
 media-revert-media-uvcvideo-set-unique-vdev-name-based-in-type.patch
+drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch
+staging-greybus-fix-stack-size-warning-with-ubsan.patch
diff --git a/queue-5.16/staging-greybus-fix-stack-size-warning-with-ubsan.patch b/queue-5.16/staging-greybus-fix-stack-size-warning-with-ubsan.patch
new file mode 100644 (file)
index 0000000..a39d5eb
--- /dev/null
@@ -0,0 +1,164 @@
+From 144779edf598e0896302c35a0926ef0b68f17c4b Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Thu, 9 Dec 2021 12:51:42 -0700
+Subject: staging: greybus: fix stack size warning with UBSAN
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 144779edf598e0896302c35a0926ef0b68f17c4b upstream.
+
+clang warns about excessive stack usage in this driver when
+UBSAN is enabled:
+
+drivers/staging/greybus/audio_topology.c:977:12: error: stack frame size of 1836 bytes in function 'gbaudio_tplg_create_widget' [-Werror,-Wframe-larger-than=]
+
+Rework this code to no longer use compound literals for
+initializing the structure in each case, but instead keep
+the common bits in a preallocated constant array and copy
+them as needed.
+
+Link: https://github.com/ClangBuiltLinux/linux/issues/1535
+Link: https://lore.kernel.org/r/20210103223541.2790855-1-arnd@kernel.org/
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Reviewed-by: Alex Elder <elder@linaro.org>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+[nathan: Address review comments from v1]
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Link: https://lore.kernel.org/r/20211209195141.1165233-1-nathan@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/staging/greybus/audio_topology.c |   92 +++++++++++++++----------------
+ 1 file changed, 45 insertions(+), 47 deletions(-)
+
+--- a/drivers/staging/greybus/audio_topology.c
++++ b/drivers/staging/greybus/audio_topology.c
+@@ -974,6 +974,44 @@ static int gbaudio_widget_event(struct s
+       return ret;
+ }
++static const struct snd_soc_dapm_widget gbaudio_widgets[] = {
++      [snd_soc_dapm_spk]      = SND_SOC_DAPM_SPK(NULL, gbcodec_event_spk),
++      [snd_soc_dapm_hp]       = SND_SOC_DAPM_HP(NULL, gbcodec_event_hp),
++      [snd_soc_dapm_mic]      = SND_SOC_DAPM_MIC(NULL, gbcodec_event_int_mic),
++      [snd_soc_dapm_output]   = SND_SOC_DAPM_OUTPUT(NULL),
++      [snd_soc_dapm_input]    = SND_SOC_DAPM_INPUT(NULL),
++      [snd_soc_dapm_switch]   = SND_SOC_DAPM_SWITCH_E(NULL, SND_SOC_NOPM,
++                                      0, 0, NULL,
++                                      gbaudio_widget_event,
++                                      SND_SOC_DAPM_PRE_PMU |
++                                      SND_SOC_DAPM_POST_PMD),
++      [snd_soc_dapm_pga]      = SND_SOC_DAPM_PGA_E(NULL, SND_SOC_NOPM,
++                                      0, 0, NULL, 0,
++                                      gbaudio_widget_event,
++                                      SND_SOC_DAPM_PRE_PMU |
++                                      SND_SOC_DAPM_POST_PMD),
++      [snd_soc_dapm_mixer]    = SND_SOC_DAPM_MIXER_E(NULL, SND_SOC_NOPM,
++                                      0, 0, NULL, 0,
++                                      gbaudio_widget_event,
++                                      SND_SOC_DAPM_PRE_PMU |
++                                      SND_SOC_DAPM_POST_PMD),
++      [snd_soc_dapm_mux]      = SND_SOC_DAPM_MUX_E(NULL, SND_SOC_NOPM,
++                                      0, 0, NULL,
++                                      gbaudio_widget_event,
++                                      SND_SOC_DAPM_PRE_PMU |
++                                      SND_SOC_DAPM_POST_PMD),
++      [snd_soc_dapm_aif_in]   = SND_SOC_DAPM_AIF_IN_E(NULL, NULL, 0,
++                                      SND_SOC_NOPM, 0, 0,
++                                      gbaudio_widget_event,
++                                      SND_SOC_DAPM_PRE_PMU |
++                                      SND_SOC_DAPM_POST_PMD),
++      [snd_soc_dapm_aif_out]  = SND_SOC_DAPM_AIF_OUT_E(NULL, NULL, 0,
++                                      SND_SOC_NOPM, 0, 0,
++                                      gbaudio_widget_event,
++                                      SND_SOC_DAPM_PRE_PMU |
++                                      SND_SOC_DAPM_POST_PMD),
++};
++
+ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
+                                     struct snd_soc_dapm_widget *dw,
+                                     struct gb_audio_widget *w, int *w_size)
+@@ -1052,77 +1090,37 @@ static int gbaudio_tplg_create_widget(st
+       switch (w->type) {
+       case snd_soc_dapm_spk:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_SPK(w->name, gbcodec_event_spk);
++              *dw = gbaudio_widgets[w->type];
+               module->op_devices |= GBAUDIO_DEVICE_OUT_SPEAKER;
+               break;
+       case snd_soc_dapm_hp:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_HP(w->name, gbcodec_event_hp);
++              *dw = gbaudio_widgets[w->type];
+               module->op_devices |= (GBAUDIO_DEVICE_OUT_WIRED_HEADSET
+                                       | GBAUDIO_DEVICE_OUT_WIRED_HEADPHONE);
+               module->ip_devices |= GBAUDIO_DEVICE_IN_WIRED_HEADSET;
+               break;
+       case snd_soc_dapm_mic:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_MIC(w->name, gbcodec_event_int_mic);
++              *dw = gbaudio_widgets[w->type];
+               module->ip_devices |= GBAUDIO_DEVICE_IN_BUILTIN_MIC;
+               break;
+       case snd_soc_dapm_output:
+-              *dw = (struct snd_soc_dapm_widget)SND_SOC_DAPM_OUTPUT(w->name);
+-              break;
+       case snd_soc_dapm_input:
+-              *dw = (struct snd_soc_dapm_widget)SND_SOC_DAPM_INPUT(w->name);
+-              break;
+       case snd_soc_dapm_switch:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_SWITCH_E(w->name, SND_SOC_NOPM, 0, 0,
+-                                            widget_kctls,
+-                                            gbaudio_widget_event,
+-                                            SND_SOC_DAPM_PRE_PMU |
+-                                            SND_SOC_DAPM_POST_PMD);
+-              break;
+       case snd_soc_dapm_pga:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_PGA_E(w->name, SND_SOC_NOPM, 0, 0, NULL, 0,
+-                                         gbaudio_widget_event,
+-                                         SND_SOC_DAPM_PRE_PMU |
+-                                         SND_SOC_DAPM_POST_PMD);
+-              break;
+       case snd_soc_dapm_mixer:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_MIXER_E(w->name, SND_SOC_NOPM, 0, 0, NULL,
+-                                           0, gbaudio_widget_event,
+-                                           SND_SOC_DAPM_PRE_PMU |
+-                                           SND_SOC_DAPM_POST_PMD);
+-              break;
+       case snd_soc_dapm_mux:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_MUX_E(w->name, SND_SOC_NOPM, 0, 0,
+-                                         widget_kctls, gbaudio_widget_event,
+-                                         SND_SOC_DAPM_PRE_PMU |
+-                                         SND_SOC_DAPM_POST_PMD);
++              *dw = gbaudio_widgets[w->type];
+               break;
+       case snd_soc_dapm_aif_in:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_AIF_IN_E(w->name, w->sname, 0,
+-                                            SND_SOC_NOPM,
+-                                            0, 0, gbaudio_widget_event,
+-                                            SND_SOC_DAPM_PRE_PMU |
+-                                            SND_SOC_DAPM_POST_PMD);
+-              break;
+       case snd_soc_dapm_aif_out:
+-              *dw = (struct snd_soc_dapm_widget)
+-                      SND_SOC_DAPM_AIF_OUT_E(w->name, w->sname, 0,
+-                                             SND_SOC_NOPM,
+-                                             0, 0, gbaudio_widget_event,
+-                                             SND_SOC_DAPM_PRE_PMU |
+-                                             SND_SOC_DAPM_POST_PMD);
++              *dw = gbaudio_widgets[w->type];
++              dw->sname = w->sname;
+               break;
+       default:
+               ret = -EINVAL;
+               goto error;
+       }
++      dw->name = w->name;
+       dev_dbg(module->dev, "%s: widget of type %d created\n", dw->name,
+               dw->id);