]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Jan 2022 05:50:43 +0000 (06:50 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Jan 2022 05:50:43 +0000 (06:50 +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
staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.patch

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

diff --git a/queue-5.4/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch b/queue-5.4/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch
new file mode 100644 (file)
index 0000000..e77aa35
--- /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
+@@ -3017,9 +3017,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 dfbec745e8f63e4a1dae1bac443181402bc04f5f..d64567cfb8d35ce9bf14d8867d7342be58606684 100644 (file)
@@ -13,3 +13,6 @@ random-fix-data-race-on-crng_node_pool.patch
 random-fix-data-race-on-crng-init-time.patch
 random-fix-crash-on-multiple-early-calls-to-add_bootloader_randomness.patch
 media-revert-media-uvcvideo-set-unique-vdev-name-based-in-type.patch
+staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.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.4/staging-greybus-fix-stack-size-warning-with-ubsan.patch b/queue-5.4/staging-greybus-fix-stack-size-warning-with-ubsan.patch
new file mode 100644 (file)
index 0000000..7d41314
--- /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
+@@ -983,6 +983,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)
+@@ -1061,77 +1099,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);
diff --git a/queue-5.4/staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.patch b/queue-5.4/staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.patch
new file mode 100644 (file)
index 0000000..caed412
--- /dev/null
@@ -0,0 +1,68 @@
+From 502408a61f4b7eb4713f44bd77f4a48e6cb1b59a Mon Sep 17 00:00:00 2001
+From: Nathan Chancellor <nathan@kernel.org>
+Date: Thu, 14 Oct 2021 14:57:03 -0700
+Subject: staging: wlan-ng: Avoid bitwise vs logical OR warning in hfa384x_usb_throttlefn()
+
+From: Nathan Chancellor <nathan@kernel.org>
+
+commit 502408a61f4b7eb4713f44bd77f4a48e6cb1b59a upstream.
+
+A new warning in clang points out a place in this file where a bitwise
+OR is being used with boolean expressions:
+
+In file included from drivers/staging/wlan-ng/prism2usb.c:2:
+drivers/staging/wlan-ng/hfa384x_usb.c:3787:7: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
+            ((test_and_clear_bit(THROTTLE_RX, &hw->usb_flags) &&
+            ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/staging/wlan-ng/hfa384x_usb.c:3787:7: note: cast one or both operands to int to silence this warning
+1 warning generated.
+
+The comment explains that short circuiting here is undesirable, as the
+calls to test_and_{clear,set}_bit() need to happen for both sides of the
+expression.
+
+Clang's suggestion would work to silence the warning but the readability
+of the expression would suffer even more. To clean up the warning and
+make the block more readable, use a variable for each side of the
+bitwise expression.
+
+Link: https://github.com/ClangBuiltLinux/linux/issues/1478
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Link: https://lore.kernel.org/r/20211014215703.3705371-1-nathan@kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/staging/wlan-ng/hfa384x_usb.c |   22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+--- a/drivers/staging/wlan-ng/hfa384x_usb.c
++++ b/drivers/staging/wlan-ng/hfa384x_usb.c
+@@ -3779,18 +3779,18 @@ static void hfa384x_usb_throttlefn(struc
+       spin_lock_irqsave(&hw->ctlxq.lock, flags);
+-      /*
+-       * We need to check BOTH the RX and the TX throttle controls,
+-       * so we use the bitwise OR instead of the logical OR.
+-       */
+       pr_debug("flags=0x%lx\n", hw->usb_flags);
+-      if (!hw->wlandev->hwremoved &&
+-          ((test_and_clear_bit(THROTTLE_RX, &hw->usb_flags) &&
+-            !test_and_set_bit(WORK_RX_RESUME, &hw->usb_flags)) |
+-           (test_and_clear_bit(THROTTLE_TX, &hw->usb_flags) &&
+-            !test_and_set_bit(WORK_TX_RESUME, &hw->usb_flags))
+-          )) {
+-              schedule_work(&hw->usb_work);
++      if (!hw->wlandev->hwremoved) {
++              bool rx_throttle = test_and_clear_bit(THROTTLE_RX, &hw->usb_flags) &&
++                                 !test_and_set_bit(WORK_RX_RESUME, &hw->usb_flags);
++              bool tx_throttle = test_and_clear_bit(THROTTLE_TX, &hw->usb_flags) &&
++                                 !test_and_set_bit(WORK_TX_RESUME, &hw->usb_flags);
++              /*
++               * We need to check BOTH the RX and the TX throttle controls,
++               * so we use the bitwise OR instead of the logical OR.
++               */
++              if (rx_throttle | tx_throttle)
++                      schedule_work(&hw->usb_work);
+       }
+       spin_unlock_irqrestore(&hw->ctlxq.lock, flags);