From: Greg Kroah-Hartman Date: Fri, 14 Jan 2022 05:51:17 +0000 (+0100) Subject: 5.15-stable patches X-Git-Tag: v5.16.1~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4070b895c8822345dd6002c1dfb70d2ba4c66df9;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches 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 --- diff --git a/queue-5.15/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch b/queue-5.15/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch new file mode 100644 index 00000000000..3d09a3a7f15 --- /dev/null +++ b/queue-5.15/drm-i915-avoid-bitwise-vs-logical-or-warning-in-snb_wm_latency_quirk.patch @@ -0,0 +1,55 @@ +From 2e70570656adfe1c5d9a29940faa348d5f132199 Mon Sep 17 00:00:00 2001 +From: Nathan Chancellor +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 + +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 +Signed-off-by: Nathan Chancellor +Suggested-by: Dávid Bolvanský +Reviewed-by: Nick Desaulniers +Signed-off-by: Ville Syrjälä +Link: https://patchwork.freedesktop.org/patch/msgid/20211014211916.3550122-1-nathan@kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + 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 +@@ -3063,9 +3063,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; diff --git a/queue-5.15/series b/queue-5.15/series index e57d11119a6..a53bcbcb213 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -36,3 +36,6 @@ 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 +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.15/staging-greybus-fix-stack-size-warning-with-ubsan.patch b/queue-5.15/staging-greybus-fix-stack-size-warning-with-ubsan.patch new file mode 100644 index 00000000000..a39d5eb6f43 --- /dev/null +++ b/queue-5.15/staging-greybus-fix-stack-size-warning-with-ubsan.patch @@ -0,0 +1,164 @@ +From 144779edf598e0896302c35a0926ef0b68f17c4b Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Thu, 9 Dec 2021 12:51:42 -0700 +Subject: staging: greybus: fix stack size warning with UBSAN + +From: Arnd Bergmann + +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 +Reviewed-by: Alex Elder +Signed-off-by: Arnd Bergmann +[nathan: Address review comments from v1] +Signed-off-by: Nathan Chancellor +Link: https://lore.kernel.org/r/20211209195141.1165233-1-nathan@kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + 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); diff --git a/queue-5.15/staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.patch b/queue-5.15/staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.patch new file mode 100644 index 00000000000..329c934911f --- /dev/null +++ b/queue-5.15/staging-wlan-ng-avoid-bitwise-vs-logical-or-warning-in-hfa384x_usb_throttlefn.patch @@ -0,0 +1,68 @@ +From 502408a61f4b7eb4713f44bd77f4a48e6cb1b59a Mon Sep 17 00:00:00 2001 +From: Nathan Chancellor +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 + +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 +Link: https://lore.kernel.org/r/20211014215703.3705371-1-nathan@kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + 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 +@@ -3778,18 +3778,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);