From: Greg Kroah-Hartman Date: Sat, 5 Mar 2022 20:26:30 +0000 (+0100) Subject: 5.16-stable patches X-Git-Tag: v4.9.305~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5e0d1356834dfcc4aede906279c634d902d21696;p=thirdparty%2Fkernel%2Fstable-queue.git 5.16-stable patches added patches: arm-9182-1-mmu-fix-returns-from-early_param-and-__setup-functions.patch arm-fix-kgdb-breakpoint-for-thumb2.patch arm64-dts-rockchip-switch-rk3399-gru-dp-to-spdif-output.patch asoc-cs4265-fix-the-duplicated-control-name.patch auxdisplay-lcd2s-fix-lcd2s_redefine_char-feature.patch auxdisplay-lcd2s-fix-memory-leak-in-remove.patch auxdisplay-lcd2s-use-proper-api-to-free-the-instance-of-charlcd-object.patch can-gs_usb-change-active_channels-s-type-from-atomic_t-to-u8.patch efivars-respect-block-flag-in-efivar_entry_set_safe.patch firmware-arm_scmi-remove-space-in-module_alias-name.patch iavf-fix-deadlock-in-iavf_reset_task.patch iavf-fix-missing-check-for-running-netdev.patch ibmvnic-free-reset-work-item-when-flushing.patch ibmvnic-register-netdev-after-init-of-adapter.patch igc-igc_read_phy_reg_gpy-drop-premature-return.patch igc-igc_write_phy_reg_gpy-drop-premature-return.patch iommu-tegra-smmu-fix-missing-put_device-call-in-tegra_smmu_find.patch ixgbe-xsk-change-netif_carrier_ok-handling-in-ixgbe_xmit_zc.patch mac80211-fix-forwarded-mesh-frames-ac-queue-selection.patch mac80211-treat-some-sae-auth-steps-as-final.patch mips-setup-fix-setnocoherentio-boolean-setting.patch mptcp-correctly-set-data_fin-timeout-when-number-of-retransmits-is-large.patch net-arcnet-com20020-fix-null-ptr-deref-in-com20020pci_probe.patch net-stmmac-fix-return-value-of-__setup-handler.patch net-sxgbe-fix-return-value-of-__setup-handler.patch pinctrl-sunxi-use-unique-lockdep-classes-for-irqs.patch selftests-mlxsw-tc_police_scale-make-test-more-robust.patch --- diff --git a/queue-5.16/arm-9182-1-mmu-fix-returns-from-early_param-and-__setup-functions.patch b/queue-5.16/arm-9182-1-mmu-fix-returns-from-early_param-and-__setup-functions.patch new file mode 100644 index 00000000000..59f941f320a --- /dev/null +++ b/queue-5.16/arm-9182-1-mmu-fix-returns-from-early_param-and-__setup-functions.patch @@ -0,0 +1,51 @@ +From 7b83299e5b9385943a857d59e15cba270df20d7e Mon Sep 17 00:00:00 2001 +From: Randy Dunlap +Date: Wed, 23 Feb 2022 20:46:35 +0100 +Subject: ARM: 9182/1: mmu: fix returns from early_param() and __setup() functions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Randy Dunlap + +commit 7b83299e5b9385943a857d59e15cba270df20d7e upstream. + +early_param() handlers should return 0 on success. +__setup() handlers should return 1 on success, i.e., the parameter +has been handled. A return of 0 would cause the "option=value" string +to be added to init's environment strings, polluting it. + +../arch/arm/mm/mmu.c: In function 'test_early_cachepolicy': +../arch/arm/mm/mmu.c:215:1: error: no return statement in function returning non-void [-Werror=return-type] +../arch/arm/mm/mmu.c: In function 'test_noalign_setup': +../arch/arm/mm/mmu.c:221:1: error: no return statement in function returning non-void [-Werror=return-type] + +Fixes: b849a60e0903 ("ARM: make cr_alignment read-only #ifndef CONFIG_CPU_CP15") +Signed-off-by: Randy Dunlap +Reported-by: Igor Zhbanov +Cc: Uwe Kleine-König +Cc: linux-arm-kernel@lists.infradead.org +Cc: patches@armlinux.org.uk +Signed-off-by: Russell King (Oracle) +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/mm/mmu.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/arch/arm/mm/mmu.c ++++ b/arch/arm/mm/mmu.c +@@ -212,12 +212,14 @@ early_param("ecc", early_ecc); + static int __init early_cachepolicy(char *p) + { + pr_warn("cachepolicy kernel parameter not supported without cp15\n"); ++ return 0; + } + early_param("cachepolicy", early_cachepolicy); + + static int __init noalign_setup(char *__unused) + { + pr_warn("noalign kernel parameter not supported without cp15\n"); ++ return 1; + } + __setup("noalign", noalign_setup); + diff --git a/queue-5.16/arm-fix-kgdb-breakpoint-for-thumb2.patch b/queue-5.16/arm-fix-kgdb-breakpoint-for-thumb2.patch new file mode 100644 index 00000000000..00bd8e09bec --- /dev/null +++ b/queue-5.16/arm-fix-kgdb-breakpoint-for-thumb2.patch @@ -0,0 +1,93 @@ +From d920eaa4c4559f59be7b4c2d26fa0a2e1aaa3da9 Mon Sep 17 00:00:00 2001 +From: "Russell King (Oracle)" +Date: Wed, 16 Feb 2022 15:37:38 +0000 +Subject: ARM: Fix kgdb breakpoint for Thumb2 + +From: Russell King (Oracle) + +commit d920eaa4c4559f59be7b4c2d26fa0a2e1aaa3da9 upstream. + +The kgdb code needs to register an undef hook for the Thumb UDF +instruction that will fault in order to be functional on Thumb2 +platforms. + +Reported-by: Johannes Stezenbach +Tested-by: Johannes Stezenbach +Fixes: 5cbad0ebf45c ("kgdb: support for ARCH=arm") +Signed-off-by: Russell King (Oracle) +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/kernel/kgdb.c | 36 ++++++++++++++++++++++++++++-------- + 1 file changed, 28 insertions(+), 8 deletions(-) + +--- a/arch/arm/kernel/kgdb.c ++++ b/arch/arm/kernel/kgdb.c +@@ -154,22 +154,38 @@ static int kgdb_compiled_brk_fn(struct p + return 0; + } + +-static struct undef_hook kgdb_brkpt_hook = { ++static struct undef_hook kgdb_brkpt_arm_hook = { + .instr_mask = 0xffffffff, + .instr_val = KGDB_BREAKINST, +- .cpsr_mask = MODE_MASK, ++ .cpsr_mask = PSR_T_BIT | MODE_MASK, + .cpsr_val = SVC_MODE, + .fn = kgdb_brk_fn + }; + +-static struct undef_hook kgdb_compiled_brkpt_hook = { ++static struct undef_hook kgdb_brkpt_thumb_hook = { ++ .instr_mask = 0xffff, ++ .instr_val = KGDB_BREAKINST & 0xffff, ++ .cpsr_mask = PSR_T_BIT | MODE_MASK, ++ .cpsr_val = PSR_T_BIT | SVC_MODE, ++ .fn = kgdb_brk_fn ++}; ++ ++static struct undef_hook kgdb_compiled_brkpt_arm_hook = { + .instr_mask = 0xffffffff, + .instr_val = KGDB_COMPILED_BREAK, +- .cpsr_mask = MODE_MASK, ++ .cpsr_mask = PSR_T_BIT | MODE_MASK, + .cpsr_val = SVC_MODE, + .fn = kgdb_compiled_brk_fn + }; + ++static struct undef_hook kgdb_compiled_brkpt_thumb_hook = { ++ .instr_mask = 0xffff, ++ .instr_val = KGDB_COMPILED_BREAK & 0xffff, ++ .cpsr_mask = PSR_T_BIT | MODE_MASK, ++ .cpsr_val = PSR_T_BIT | SVC_MODE, ++ .fn = kgdb_compiled_brk_fn ++}; ++ + static int __kgdb_notify(struct die_args *args, unsigned long cmd) + { + struct pt_regs *regs = args->regs; +@@ -210,8 +226,10 @@ int kgdb_arch_init(void) + if (ret != 0) + return ret; + +- register_undef_hook(&kgdb_brkpt_hook); +- register_undef_hook(&kgdb_compiled_brkpt_hook); ++ register_undef_hook(&kgdb_brkpt_arm_hook); ++ register_undef_hook(&kgdb_brkpt_thumb_hook); ++ register_undef_hook(&kgdb_compiled_brkpt_arm_hook); ++ register_undef_hook(&kgdb_compiled_brkpt_thumb_hook); + + return 0; + } +@@ -224,8 +242,10 @@ int kgdb_arch_init(void) + */ + void kgdb_arch_exit(void) + { +- unregister_undef_hook(&kgdb_brkpt_hook); +- unregister_undef_hook(&kgdb_compiled_brkpt_hook); ++ unregister_undef_hook(&kgdb_brkpt_arm_hook); ++ unregister_undef_hook(&kgdb_brkpt_thumb_hook); ++ unregister_undef_hook(&kgdb_compiled_brkpt_arm_hook); ++ unregister_undef_hook(&kgdb_compiled_brkpt_thumb_hook); + unregister_die_notifier(&kgdb_notifier); + } + diff --git a/queue-5.16/arm64-dts-rockchip-switch-rk3399-gru-dp-to-spdif-output.patch b/queue-5.16/arm64-dts-rockchip-switch-rk3399-gru-dp-to-spdif-output.patch new file mode 100644 index 00000000000..be7e767c028 --- /dev/null +++ b/queue-5.16/arm64-dts-rockchip-switch-rk3399-gru-dp-to-spdif-output.patch @@ -0,0 +1,67 @@ +From b5fbaf7d779f5f02b7f75b080e7707222573be2a Mon Sep 17 00:00:00 2001 +From: Brian Norris +Date: Fri, 14 Jan 2022 15:02:07 -0800 +Subject: arm64: dts: rockchip: Switch RK3399-Gru DP to SPDIF output + +From: Brian Norris + +commit b5fbaf7d779f5f02b7f75b080e7707222573be2a upstream. + +Commit b18c6c3c7768 ("ASoC: rockchip: cdn-dp sound output use spdif") +switched the platform to SPDIF, but we didn't fix up the device tree. + +Drop the pinctrl settings, because the 'spdif_bus' pins are either: + * unused (on kevin, bob), so the settings is ~harmless + * used by a different function (on scarlet), which causes probe + failures (!!) + +Fixes: b18c6c3c7768 ("ASoC: rockchip: cdn-dp sound output use spdif") +Signed-off-by: Brian Norris +Reviewed-by: Chen-Yu Tsai +Link: https://lore.kernel.org/r/20220114150129.v2.1.I46f64b00508d9dff34abe1c3e8d2defdab4ea1e5@changeid +Signed-off-by: Heiko Stuebner +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +--- a/arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi +@@ -286,7 +286,7 @@ + + sound: sound { + compatible = "rockchip,rk3399-gru-sound"; +- rockchip,cpu = <&i2s0 &i2s2>; ++ rockchip,cpu = <&i2s0 &spdif>; + }; + }; + +@@ -437,10 +437,6 @@ ap_i2c_audio: &i2c8 { + status = "okay"; + }; + +-&i2s2 { +- status = "okay"; +-}; +- + &io_domains { + status = "okay"; + +@@ -537,6 +533,17 @@ ap_i2c_audio: &i2c8 { + vqmmc-supply = <&ppvar_sd_card_io>; + }; + ++&spdif { ++ status = "okay"; ++ ++ /* ++ * SPDIF is routed internally to DP; we either don't use these pins, or ++ * mux them to something else. ++ */ ++ /delete-property/ pinctrl-0; ++ /delete-property/ pinctrl-names; ++}; ++ + &spi1 { + status = "okay"; + diff --git a/queue-5.16/asoc-cs4265-fix-the-duplicated-control-name.patch b/queue-5.16/asoc-cs4265-fix-the-duplicated-control-name.patch new file mode 100644 index 00000000000..500fa9a17cd --- /dev/null +++ b/queue-5.16/asoc-cs4265-fix-the-duplicated-control-name.patch @@ -0,0 +1,54 @@ +From c5487b9cdea5c1ede38a7ec94db0fc59963c8e86 Mon Sep 17 00:00:00 2001 +From: Fabio Estevam +Date: Tue, 15 Feb 2022 09:05:14 -0300 +Subject: ASoC: cs4265: Fix the duplicated control name + +From: Fabio Estevam + +commit c5487b9cdea5c1ede38a7ec94db0fc59963c8e86 upstream. + +Currently, the following error messages are seen during boot: + +asoc-simple-card sound: control 2:0:0:SPDIF Switch:0 is already present +cs4265 1-004f: ASoC: failed to add widget SPDIF dapm kcontrol SPDIF Switch: -16 + +Quoting Mark Brown: + +"The driver is just plain buggy, it defines both a regular SPIDF Switch +control and a SND_SOC_DAPM_SWITCH() called SPDIF both of which will +create an identically named control, it can never have loaded without +error. One or both of those has to be renamed or they need to be +merged into one thing." + +Fix the duplicated control name by combining the two SPDIF controls here +and move the register bits onto the DAPM widget and have DAPM control them. + +Fixes: f853d6b3ba34 ("ASoC: cs4265: Add a S/PDIF enable switch") +Signed-off-by: Fabio Estevam +Acked-by: Charles Keepax +Link: https://lore.kernel.org/r/20220215120514.1760628-1-festevam@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/codecs/cs4265.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/sound/soc/codecs/cs4265.c ++++ b/sound/soc/codecs/cs4265.c +@@ -150,7 +150,6 @@ static const struct snd_kcontrol_new cs4 + SOC_SINGLE("E to F Buffer Disable Switch", CS4265_SPDIF_CTL1, + 6, 1, 0), + SOC_ENUM("C Data Access", cam_mode_enum), +- SOC_SINGLE("SPDIF Switch", CS4265_SPDIF_CTL2, 5, 1, 1), + SOC_SINGLE("Validity Bit Control Switch", CS4265_SPDIF_CTL2, + 3, 1, 0), + SOC_ENUM("SPDIF Mono/Stereo", spdif_mono_stereo_enum), +@@ -186,7 +185,7 @@ static const struct snd_soc_dapm_widget + + SND_SOC_DAPM_SWITCH("Loopback", SND_SOC_NOPM, 0, 0, + &loopback_ctl), +- SND_SOC_DAPM_SWITCH("SPDIF", SND_SOC_NOPM, 0, 0, ++ SND_SOC_DAPM_SWITCH("SPDIF", CS4265_SPDIF_CTL2, 5, 1, + &spdif_switch), + SND_SOC_DAPM_SWITCH("DAC", CS4265_PWRCTL, 1, 1, + &dac_switch), diff --git a/queue-5.16/auxdisplay-lcd2s-fix-lcd2s_redefine_char-feature.patch b/queue-5.16/auxdisplay-lcd2s-fix-lcd2s_redefine_char-feature.patch new file mode 100644 index 00000000000..05e4e050203 --- /dev/null +++ b/queue-5.16/auxdisplay-lcd2s-fix-lcd2s_redefine_char-feature.patch @@ -0,0 +1,38 @@ +From 4424c35ead667ba2e8de7ab8206da66453e6f728 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Wed, 23 Feb 2022 17:47:16 +0200 +Subject: auxdisplay: lcd2s: Fix lcd2s_redefine_char() feature + +From: Andy Shevchenko + +commit 4424c35ead667ba2e8de7ab8206da66453e6f728 upstream. + +It seems that the lcd2s_redefine_char() has never been properly +tested. The buffer is filled by DEF_CUSTOM_CHAR command followed +by the character number (from 0 to 7), but immediately after that +these bytes are rewritten by the decoded hex stream. + +Fix the index to fill the buffer after the command and number. + +Fixes: 8c9108d014c5 ("auxdisplay: add a driver for lcd2s character display") +Cc: Lars Poeschel +Signed-off-by: Andy Shevchenko +Reviewed-by: Geert Uytterhoeven +[fixed typo in commit message] +Signed-off-by: Miguel Ojeda +Signed-off-by: Greg Kroah-Hartman +--- + drivers/auxdisplay/lcd2s.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/auxdisplay/lcd2s.c ++++ b/drivers/auxdisplay/lcd2s.c +@@ -238,7 +238,7 @@ static int lcd2s_redefine_char(struct ch + if (buf[1] > 7) + return 1; + +- i = 0; ++ i = 2; + shift = 0; + value = 0; + while (*esc && i < LCD2S_CHARACTER_SIZE + 2) { diff --git a/queue-5.16/auxdisplay-lcd2s-fix-memory-leak-in-remove.patch b/queue-5.16/auxdisplay-lcd2s-fix-memory-leak-in-remove.patch new file mode 100644 index 00000000000..3561fc0f512 --- /dev/null +++ b/queue-5.16/auxdisplay-lcd2s-fix-memory-leak-in-remove.patch @@ -0,0 +1,75 @@ +From 898c0a15425a5bcaa8d44bd436eae5afd2483796 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Wed, 23 Feb 2022 17:47:17 +0200 +Subject: auxdisplay: lcd2s: Fix memory leak in ->remove() + +From: Andy Shevchenko + +commit 898c0a15425a5bcaa8d44bd436eae5afd2483796 upstream. + +Once allocated the struct lcd2s_data is never freed. +Fix the memory leak by switching to devm_kzalloc(). + +Fixes: 8c9108d014c5 ("auxdisplay: add a driver for lcd2s character display") +Cc: Lars Poeschel +Signed-off-by: Andy Shevchenko +Signed-off-by: Miguel Ojeda +Signed-off-by: Greg Kroah-Hartman +--- + drivers/auxdisplay/lcd2s.c | 18 +++++++----------- + 1 file changed, 7 insertions(+), 11 deletions(-) + +--- a/drivers/auxdisplay/lcd2s.c ++++ b/drivers/auxdisplay/lcd2s.c +@@ -298,6 +298,10 @@ static int lcd2s_i2c_probe(struct i2c_cl + I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)) + return -EIO; + ++ lcd2s = devm_kzalloc(&i2c->dev, sizeof(*lcd2s), GFP_KERNEL); ++ if (!lcd2s) ++ return -ENOMEM; ++ + /* Test, if the display is responding */ + err = lcd2s_i2c_smbus_write_byte(i2c, LCD2S_CMD_DISPLAY_OFF); + if (err < 0) +@@ -307,12 +311,6 @@ static int lcd2s_i2c_probe(struct i2c_cl + if (!lcd) + return -ENOMEM; + +- lcd2s = kzalloc(sizeof(struct lcd2s_data), GFP_KERNEL); +- if (!lcd2s) { +- err = -ENOMEM; +- goto fail1; +- } +- + lcd->drvdata = lcd2s; + lcd2s->i2c = i2c; + lcd2s->charlcd = lcd; +@@ -321,24 +319,22 @@ static int lcd2s_i2c_probe(struct i2c_cl + err = device_property_read_u32(&i2c->dev, "display-height-chars", + &lcd->height); + if (err) +- goto fail2; ++ goto fail1; + + err = device_property_read_u32(&i2c->dev, "display-width-chars", + &lcd->width); + if (err) +- goto fail2; ++ goto fail1; + + lcd->ops = &lcd2s_ops; + + err = charlcd_register(lcd2s->charlcd); + if (err) +- goto fail2; ++ goto fail1; + + i2c_set_clientdata(i2c, lcd2s); + return 0; + +-fail2: +- kfree(lcd2s); + fail1: + kfree(lcd); + return err; diff --git a/queue-5.16/auxdisplay-lcd2s-use-proper-api-to-free-the-instance-of-charlcd-object.patch b/queue-5.16/auxdisplay-lcd2s-use-proper-api-to-free-the-instance-of-charlcd-object.patch new file mode 100644 index 00000000000..447835842e9 --- /dev/null +++ b/queue-5.16/auxdisplay-lcd2s-use-proper-api-to-free-the-instance-of-charlcd-object.patch @@ -0,0 +1,44 @@ +From 9ed331f8a0fb674f4f06edf05a1687bf755af27b Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Wed, 23 Feb 2022 17:47:18 +0200 +Subject: auxdisplay: lcd2s: Use proper API to free the instance of charlcd object + +From: Andy Shevchenko + +commit 9ed331f8a0fb674f4f06edf05a1687bf755af27b upstream. + +While it might work, the current approach is fragile in a few ways: +- whenever members in the structure are shuffled, the pointer will be wrong +- the resource freeing may include more than covered by kfree() + +Fix this by using charlcd_free() call instead of kfree(). + +Fixes: 8c9108d014c5 ("auxdisplay: add a driver for lcd2s character display") +Cc: Lars Poeschel +Signed-off-by: Andy Shevchenko +Signed-off-by: Miguel Ojeda +Signed-off-by: Greg Kroah-Hartman +--- + drivers/auxdisplay/lcd2s.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/auxdisplay/lcd2s.c ++++ b/drivers/auxdisplay/lcd2s.c +@@ -336,7 +336,7 @@ static int lcd2s_i2c_probe(struct i2c_cl + return 0; + + fail1: +- kfree(lcd); ++ charlcd_free(lcd2s->charlcd); + return err; + } + +@@ -345,7 +345,7 @@ static int lcd2s_i2c_remove(struct i2c_c + struct lcd2s_data *lcd2s = i2c_get_clientdata(i2c); + + charlcd_unregister(lcd2s->charlcd); +- kfree(lcd2s->charlcd); ++ charlcd_free(lcd2s->charlcd); + return 0; + } + diff --git a/queue-5.16/can-gs_usb-change-active_channels-s-type-from-atomic_t-to-u8.patch b/queue-5.16/can-gs_usb-change-active_channels-s-type-from-atomic_t-to-u8.patch new file mode 100644 index 00000000000..ae082e48005 --- /dev/null +++ b/queue-5.16/can-gs_usb-change-active_channels-s-type-from-atomic_t-to-u8.patch @@ -0,0 +1,79 @@ +From 035b0fcf02707d3c9c2890dc1484b11aa5335eb1 Mon Sep 17 00:00:00 2001 +From: Vincent Mailhol +Date: Tue, 15 Feb 2022 08:48:14 +0900 +Subject: can: gs_usb: change active_channels's type from atomic_t to u8 + +From: Vincent Mailhol + +commit 035b0fcf02707d3c9c2890dc1484b11aa5335eb1 upstream. + +The driver uses an atomic_t variable: gs_usb:active_channels to keep +track of the number of opened channels in order to only allocate +memory for the URBs when this count changes from zero to one. + +However, the driver does not decrement the counter when an error +occurs in gs_can_open(). This issue is fixed by changing the type from +atomic_t to u8 and by simplifying the logic accordingly. + +It is safe to use an u8 here because the network stack big kernel lock +(a.k.a. rtnl_mutex) is being hold. For details, please refer to [1]. + +[1] https://lore.kernel.org/linux-can/CAMZ6Rq+sHpiw34ijPsmp7vbUpDtJwvVtdV7CvRZJsLixjAFfrg@mail.gmail.com/T/#t + +Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices") +Link: https://lore.kernel.org/all/20220214234814.1321599-1-mailhol.vincent@wanadoo.fr +Signed-off-by: Vincent Mailhol +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/can/usb/gs_usb.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +--- a/drivers/net/can/usb/gs_usb.c ++++ b/drivers/net/can/usb/gs_usb.c +@@ -191,8 +191,8 @@ struct gs_can { + struct gs_usb { + struct gs_can *canch[GS_MAX_INTF]; + struct usb_anchor rx_submitted; +- atomic_t active_channels; + struct usb_device *udev; ++ u8 active_channels; + }; + + /* 'allocate' a tx context. +@@ -590,7 +590,7 @@ static int gs_can_open(struct net_device + if (rc) + return rc; + +- if (atomic_add_return(1, &parent->active_channels) == 1) { ++ if (!parent->active_channels) { + for (i = 0; i < GS_MAX_RX_URBS; i++) { + struct urb *urb; + u8 *buf; +@@ -691,6 +691,7 @@ static int gs_can_open(struct net_device + + dev->can.state = CAN_STATE_ERROR_ACTIVE; + ++ parent->active_channels++; + if (!(dev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)) + netif_start_queue(netdev); + +@@ -706,7 +707,8 @@ static int gs_can_close(struct net_devic + netif_stop_queue(netdev); + + /* Stop polling */ +- if (atomic_dec_and_test(&parent->active_channels)) ++ parent->active_channels--; ++ if (!parent->active_channels) + usb_kill_anchored_urbs(&parent->rx_submitted); + + /* Stop sending URBs */ +@@ -985,8 +987,6 @@ static int gs_usb_probe(struct usb_inter + + init_usb_anchor(&dev->rx_submitted); + +- atomic_set(&dev->active_channels, 0); +- + usb_set_intfdata(intf, dev); + dev->udev = interface_to_usbdev(intf); + diff --git a/queue-5.16/efivars-respect-block-flag-in-efivar_entry_set_safe.patch b/queue-5.16/efivars-respect-block-flag-in-efivar_entry_set_safe.patch new file mode 100644 index 00000000000..cc81aa2e73a --- /dev/null +++ b/queue-5.16/efivars-respect-block-flag-in-efivar_entry_set_safe.patch @@ -0,0 +1,56 @@ +From 258dd902022cb10c83671176688074879517fd21 Mon Sep 17 00:00:00 2001 +From: Jann Horn +Date: Fri, 18 Feb 2022 19:05:59 +0100 +Subject: efivars: Respect "block" flag in efivar_entry_set_safe() + +From: Jann Horn + +commit 258dd902022cb10c83671176688074879517fd21 upstream. + +When the "block" flag is false, the old code would sometimes still call +check_var_size(), which wrongly tells ->query_variable_store() that it can +block. + +As far as I can tell, this can't really materialize as a bug at the moment, +because ->query_variable_store only does something on X86 with generic EFI, +and in that configuration we always take the efivar_entry_set_nonblocking() +path. + +Fixes: ca0e30dcaa53 ("efi: Add nonblocking option to efi_query_variable_store()") +Signed-off-by: Jann Horn +Signed-off-by: Ard Biesheuvel +Link: https://lore.kernel.org/r/20220218180559.1432559-1-jannh@google.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/firmware/efi/vars.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/firmware/efi/vars.c ++++ b/drivers/firmware/efi/vars.c +@@ -742,6 +742,7 @@ int efivar_entry_set_safe(efi_char16_t * + { + const struct efivar_operations *ops; + efi_status_t status; ++ unsigned long varsize; + + if (!__efivars) + return -EINVAL; +@@ -764,15 +765,17 @@ int efivar_entry_set_safe(efi_char16_t * + return efivar_entry_set_nonblocking(name, vendor, attributes, + size, data); + ++ varsize = size + ucs2_strsize(name, 1024); + if (!block) { + if (down_trylock(&efivars_lock)) + return -EBUSY; ++ status = check_var_size_nonblocking(attributes, varsize); + } else { + if (down_interruptible(&efivars_lock)) + return -EINTR; ++ status = check_var_size(attributes, varsize); + } + +- status = check_var_size(attributes, size + ucs2_strsize(name, 1024)); + if (status != EFI_SUCCESS) { + up(&efivars_lock); + return -ENOSPC; diff --git a/queue-5.16/firmware-arm_scmi-remove-space-in-module_alias-name.patch b/queue-5.16/firmware-arm_scmi-remove-space-in-module_alias-name.patch new file mode 100644 index 00000000000..3eb70a11efd --- /dev/null +++ b/queue-5.16/firmware-arm_scmi-remove-space-in-module_alias-name.patch @@ -0,0 +1,32 @@ +From 1ba603f56568c3b4c2542dfba07afa25f21dcff3 Mon Sep 17 00:00:00 2001 +From: Alyssa Ross +Date: Fri, 11 Feb 2022 10:27:04 +0000 +Subject: firmware: arm_scmi: Remove space in MODULE_ALIAS name + +From: Alyssa Ross + +commit 1ba603f56568c3b4c2542dfba07afa25f21dcff3 upstream. + +modprobe can't handle spaces in aliases. Get rid of it to fix the issue. + +Link: https://lore.kernel.org/r/20220211102704.128354-1-sudeep.holla@arm.com +Fixes: aa4f886f3893 ("firmware: arm_scmi: add basic driver infrastructure for SCMI") +Reviewed-by: Cristian Marussi +Signed-off-by: Alyssa Ross +Signed-off-by: Sudeep Holla +Signed-off-by: Greg Kroah-Hartman +--- + drivers/firmware/arm_scmi/driver.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/firmware/arm_scmi/driver.c ++++ b/drivers/firmware/arm_scmi/driver.c +@@ -2112,7 +2112,7 @@ static void __exit scmi_driver_exit(void + } + module_exit(scmi_driver_exit); + +-MODULE_ALIAS("platform: arm-scmi"); ++MODULE_ALIAS("platform:arm-scmi"); + MODULE_AUTHOR("Sudeep Holla "); + MODULE_DESCRIPTION("ARM SCMI protocol driver"); + MODULE_LICENSE("GPL v2"); diff --git a/queue-5.16/iavf-fix-deadlock-in-iavf_reset_task.patch b/queue-5.16/iavf-fix-deadlock-in-iavf_reset_task.patch new file mode 100644 index 00000000000..f15d4a67710 --- /dev/null +++ b/queue-5.16/iavf-fix-deadlock-in-iavf_reset_task.patch @@ -0,0 +1,36 @@ +From e85ff9c631e1bf109ce8428848dfc8e8b0041f48 Mon Sep 17 00:00:00 2001 +From: Slawomir Laba +Date: Wed, 23 Feb 2022 13:38:31 +0100 +Subject: iavf: Fix deadlock in iavf_reset_task + +From: Slawomir Laba + +commit e85ff9c631e1bf109ce8428848dfc8e8b0041f48 upstream. + +There exists a missing mutex_unlock call on crit_lock in +iavf_reset_task call path. + +Unlock the crit_lock before returning from reset task. + +Fixes: 5ac49f3c2702 ("iavf: use mutexes for locking of critical sections") +Signed-off-by: Slawomir Laba +Signed-off-by: Phani Burra +Signed-off-by: Jacob Keller +Signed-off-by: Mateusz Palczewski +Tested-by: Konrad Jankowski +Signed-off-by: Tony Nguyen +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/iavf/iavf_main.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/ethernet/intel/iavf/iavf_main.c ++++ b/drivers/net/ethernet/intel/iavf/iavf_main.c +@@ -2254,6 +2254,7 @@ static void iavf_reset_task(struct work_ + reg_val); + iavf_disable_vf(adapter); + mutex_unlock(&adapter->client_lock); ++ mutex_unlock(&adapter->crit_lock); + return; /* Do not attempt to reinit. It's dead, Jim. */ + } + diff --git a/queue-5.16/iavf-fix-missing-check-for-running-netdev.patch b/queue-5.16/iavf-fix-missing-check-for-running-netdev.patch new file mode 100644 index 00000000000..13693eb93ec --- /dev/null +++ b/queue-5.16/iavf-fix-missing-check-for-running-netdev.patch @@ -0,0 +1,43 @@ +From d2c0f45fcceb0995f208c441d9c9a453623f9ccf Mon Sep 17 00:00:00 2001 +From: Slawomir Laba +Date: Wed, 23 Feb 2022 13:38:43 +0100 +Subject: iavf: Fix missing check for running netdev + +From: Slawomir Laba + +commit d2c0f45fcceb0995f208c441d9c9a453623f9ccf upstream. + +The driver was queueing reset_task regardless of the netdev +state. + +Do not queue the reset task in iavf_change_mtu if netdev +is not running. + +Fixes: fdd4044ffdc8 ("iavf: Remove timer for work triggering, use delaying work instead") +Signed-off-by: Slawomir Laba +Signed-off-by: Phani Burra +Signed-off-by: Jacob Keller +Signed-off-by: Mateusz Palczewski +Tested-by: Konrad Jankowski +Signed-off-by: Tony Nguyen +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/iavf/iavf_main.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/net/ethernet/intel/iavf/iavf_main.c ++++ b/drivers/net/ethernet/intel/iavf/iavf_main.c +@@ -3436,8 +3436,11 @@ static int iavf_change_mtu(struct net_de + iavf_notify_client_l2_params(&adapter->vsi); + adapter->flags |= IAVF_FLAG_SERVICE_CLIENT_REQUESTED; + } +- adapter->flags |= IAVF_FLAG_RESET_NEEDED; +- queue_work(iavf_wq, &adapter->reset_task); ++ ++ if (netif_running(netdev)) { ++ adapter->flags |= IAVF_FLAG_RESET_NEEDED; ++ queue_work(iavf_wq, &adapter->reset_task); ++ } + + return 0; + } diff --git a/queue-5.16/ibmvnic-free-reset-work-item-when-flushing.patch b/queue-5.16/ibmvnic-free-reset-work-item-when-flushing.patch new file mode 100644 index 00000000000..fe7f7a74b92 --- /dev/null +++ b/queue-5.16/ibmvnic-free-reset-work-item-when-flushing.patch @@ -0,0 +1,33 @@ +From 8d0657f39f487d904fca713e0bc39c2707382553 Mon Sep 17 00:00:00 2001 +From: Sukadev Bhattiprolu +Date: Thu, 24 Feb 2022 22:23:51 -0800 +Subject: ibmvnic: free reset-work-item when flushing + +From: Sukadev Bhattiprolu + +commit 8d0657f39f487d904fca713e0bc39c2707382553 upstream. + +Fix a tiny memory leak when flushing the reset work queue. + +Fixes: 2770a7984db5 ("ibmvnic: Introduce hard reset recovery") +Signed-off-by: Sukadev Bhattiprolu +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/ibm/ibmvnic.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/net/ethernet/ibm/ibmvnic.c ++++ b/drivers/net/ethernet/ibm/ibmvnic.c +@@ -2780,8 +2780,10 @@ static int ibmvnic_reset(struct ibmvnic_ + * flush reset queue and process this reset + */ + if (adapter->force_reset_recovery && !list_empty(&adapter->rwi_list)) { +- list_for_each_safe(entry, tmp_entry, &adapter->rwi_list) ++ list_for_each_safe(entry, tmp_entry, &adapter->rwi_list) { + list_del(entry); ++ kfree(list_entry(entry, struct ibmvnic_rwi, list)); ++ } + } + rwi->reset_reason = reason; + list_add_tail(&rwi->list, &adapter->rwi_list); diff --git a/queue-5.16/ibmvnic-register-netdev-after-init-of-adapter.patch b/queue-5.16/ibmvnic-register-netdev-after-init-of-adapter.patch new file mode 100644 index 00000000000..aa3b3fd5fab --- /dev/null +++ b/queue-5.16/ibmvnic-register-netdev-after-init-of-adapter.patch @@ -0,0 +1,50 @@ +From 570425f8c7c18b14fa8a2a58a0adb431968ad118 Mon Sep 17 00:00:00 2001 +From: Sukadev Bhattiprolu +Date: Thu, 24 Feb 2022 22:23:55 -0800 +Subject: ibmvnic: register netdev after init of adapter + +From: Sukadev Bhattiprolu + +commit 570425f8c7c18b14fa8a2a58a0adb431968ad118 upstream. + +Finish initializing the adapter before registering netdev so state +is consistent. + +Fixes: c26eba03e407 ("ibmvnic: Update reset infrastructure to support tunable parameters") +Signed-off-by: Sukadev Bhattiprolu +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/ibm/ibmvnic.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- a/drivers/net/ethernet/ibm/ibmvnic.c ++++ b/drivers/net/ethernet/ibm/ibmvnic.c +@@ -5811,12 +5811,6 @@ static int ibmvnic_probe(struct vio_dev + goto ibmvnic_dev_file_err; + + netif_carrier_off(netdev); +- rc = register_netdev(netdev); +- if (rc) { +- dev_err(&dev->dev, "failed to register netdev rc=%d\n", rc); +- goto ibmvnic_register_fail; +- } +- dev_info(&dev->dev, "ibmvnic registered\n"); + + if (init_success) { + adapter->state = VNIC_PROBED; +@@ -5829,6 +5823,14 @@ static int ibmvnic_probe(struct vio_dev + + adapter->wait_for_reset = false; + adapter->last_reset_time = jiffies; ++ ++ rc = register_netdev(netdev); ++ if (rc) { ++ dev_err(&dev->dev, "failed to register netdev rc=%d\n", rc); ++ goto ibmvnic_register_fail; ++ } ++ dev_info(&dev->dev, "ibmvnic registered\n"); ++ + return 0; + + ibmvnic_register_fail: diff --git a/queue-5.16/igc-igc_read_phy_reg_gpy-drop-premature-return.patch b/queue-5.16/igc-igc_read_phy_reg_gpy-drop-premature-return.patch new file mode 100644 index 00000000000..c8c12ab35b4 --- /dev/null +++ b/queue-5.16/igc-igc_read_phy_reg_gpy-drop-premature-return.patch @@ -0,0 +1,37 @@ +From fda2635466cd26ad237e1bc5d3f6a60f97ad09b6 Mon Sep 17 00:00:00 2001 +From: Corinna Vinschen +Date: Wed, 16 Feb 2022 14:31:35 +0100 +Subject: igc: igc_read_phy_reg_gpy: drop premature return + +From: Corinna Vinschen + +commit fda2635466cd26ad237e1bc5d3f6a60f97ad09b6 upstream. + +igc_read_phy_reg_gpy checks the return value from igc_read_phy_reg_mdic +and if it's not 0, returns immediately. By doing this, it leaves the HW +semaphore in the acquired state. + +Drop this premature return statement, the function returns after +releasing the semaphore immediately anyway. + +Fixes: 5586838fe9ce ("igc: Add code for PHY support") +Signed-off-by: Corinna Vinschen +Acked-by: Sasha Neftin +Tested-by: Naama Meir +Signed-off-by: Tony Nguyen +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/igc/igc_phy.c | 2 -- + 1 file changed, 2 deletions(-) + +--- a/drivers/net/ethernet/intel/igc/igc_phy.c ++++ b/drivers/net/ethernet/intel/igc/igc_phy.c +@@ -779,8 +779,6 @@ s32 igc_read_phy_reg_gpy(struct igc_hw * + if (ret_val) + return ret_val; + ret_val = igc_read_phy_reg_mdic(hw, offset, data); +- if (ret_val) +- return ret_val; + hw->phy.ops.release(hw); + } else { + ret_val = igc_read_xmdio_reg(hw, (u16)offset, dev_addr, diff --git a/queue-5.16/igc-igc_write_phy_reg_gpy-drop-premature-return.patch b/queue-5.16/igc-igc_write_phy_reg_gpy-drop-premature-return.patch new file mode 100644 index 00000000000..c8c86e9283c --- /dev/null +++ b/queue-5.16/igc-igc_write_phy_reg_gpy-drop-premature-return.patch @@ -0,0 +1,39 @@ +From c4208653a327a09da1e9e7b10299709b6d9b17bf Mon Sep 17 00:00:00 2001 +From: Sasha Neftin +Date: Sun, 20 Feb 2022 09:29:15 +0200 +Subject: igc: igc_write_phy_reg_gpy: drop premature return + +From: Sasha Neftin + +commit c4208653a327a09da1e9e7b10299709b6d9b17bf upstream. + +Similar to "igc_read_phy_reg_gpy: drop premature return" patch. +igc_write_phy_reg_gpy checks the return value from igc_write_phy_reg_mdic +and if it's not 0, returns immediately. By doing this, it leaves the HW +semaphore in the acquired state. + +Drop this premature return statement, the function returns after +releasing the semaphore immediately anyway. + +Fixes: 5586838fe9ce ("igc: Add code for PHY support") +Suggested-by: Dima Ruinskiy +Reported-by: Corinna Vinschen +Signed-off-by: Sasha Neftin +Tested-by: Naama Meir +Signed-off-by: Tony Nguyen +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/igc/igc_phy.c | 2 -- + 1 file changed, 2 deletions(-) + +--- a/drivers/net/ethernet/intel/igc/igc_phy.c ++++ b/drivers/net/ethernet/intel/igc/igc_phy.c +@@ -746,8 +746,6 @@ s32 igc_write_phy_reg_gpy(struct igc_hw + if (ret_val) + return ret_val; + ret_val = igc_write_phy_reg_mdic(hw, offset, data); +- if (ret_val) +- return ret_val; + hw->phy.ops.release(hw); + } else { + ret_val = igc_write_xmdio_reg(hw, (u16)offset, dev_addr, diff --git a/queue-5.16/iommu-tegra-smmu-fix-missing-put_device-call-in-tegra_smmu_find.patch b/queue-5.16/iommu-tegra-smmu-fix-missing-put_device-call-in-tegra_smmu_find.patch new file mode 100644 index 00000000000..81c651f47ff --- /dev/null +++ b/queue-5.16/iommu-tegra-smmu-fix-missing-put_device-call-in-tegra_smmu_find.patch @@ -0,0 +1,37 @@ +From 9826e393e4a8c3df474e7f9eacd3087266f74005 Mon Sep 17 00:00:00 2001 +From: Miaoqian Lin +Date: Fri, 7 Jan 2022 08:09:11 +0000 +Subject: iommu/tegra-smmu: Fix missing put_device() call in tegra_smmu_find + +From: Miaoqian Lin + +commit 9826e393e4a8c3df474e7f9eacd3087266f74005 upstream. + +The reference taken by 'of_find_device_by_node()' must be released when +not needed anymore. +Add the corresponding 'put_device()' in the error handling path. + +Fixes: 765a9d1d02b2 ("iommu/tegra-smmu: Fix mc errors on tegra124-nyan") +Signed-off-by: Miaoqian Lin +Acked-by: Thierry Reding +Link: https://lore.kernel.org/r/20220107080915.12686-1-linmq006@gmail.com +Signed-off-by: Joerg Roedel +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iommu/tegra-smmu.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/iommu/tegra-smmu.c ++++ b/drivers/iommu/tegra-smmu.c +@@ -808,8 +808,10 @@ static struct tegra_smmu *tegra_smmu_fin + return NULL; + + mc = platform_get_drvdata(pdev); +- if (!mc) ++ if (!mc) { ++ put_device(&pdev->dev); + return NULL; ++ } + + return mc->smmu; + } diff --git a/queue-5.16/ixgbe-xsk-change-netif_carrier_ok-handling-in-ixgbe_xmit_zc.patch b/queue-5.16/ixgbe-xsk-change-netif_carrier_ok-handling-in-ixgbe_xmit_zc.patch new file mode 100644 index 00000000000..4c27c60576e --- /dev/null +++ b/queue-5.16/ixgbe-xsk-change-netif_carrier_ok-handling-in-ixgbe_xmit_zc.patch @@ -0,0 +1,50 @@ +From 6c7273a266759d9d36f7c862149f248bcdeddc0f Mon Sep 17 00:00:00 2001 +From: Maciej Fijalkowski +Date: Wed, 2 Mar 2022 09:59:27 -0800 +Subject: ixgbe: xsk: change !netif_carrier_ok() handling in ixgbe_xmit_zc() + +From: Maciej Fijalkowski + +commit 6c7273a266759d9d36f7c862149f248bcdeddc0f upstream. + +Commit c685c69fba71 ("ixgbe: don't do any AF_XDP zero-copy transmit if +netif is not OK") addressed the ring transient state when +MEM_TYPE_XSK_BUFF_POOL was being configured which in turn caused the +interface to through down/up. Maurice reported that when carrier is not +ok and xsk_pool is present on ring pair, ksoftirqd will consume 100% CPU +cycles due to the constant NAPI rescheduling as ixgbe_poll() states that +there is still some work to be done. + +To fix this, do not set work_done to false for a !netif_carrier_ok(). + +Fixes: c685c69fba71 ("ixgbe: don't do any AF_XDP zero-copy transmit if netif is not OK") +Reported-by: Maurice Baijens +Tested-by: Maurice Baijens +Signed-off-by: Maciej Fijalkowski +Tested-by: Sandeep Penigalapati +Signed-off-by: Tony Nguyen +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +@@ -390,12 +390,14 @@ static bool ixgbe_xmit_zc(struct ixgbe_r + u32 cmd_type; + + while (budget-- > 0) { +- if (unlikely(!ixgbe_desc_unused(xdp_ring)) || +- !netif_carrier_ok(xdp_ring->netdev)) { ++ if (unlikely(!ixgbe_desc_unused(xdp_ring))) { + work_done = false; + break; + } + ++ if (!netif_carrier_ok(xdp_ring->netdev)) ++ break; ++ + if (!xsk_tx_peek_desc(pool, &desc)) + break; + diff --git a/queue-5.16/mac80211-fix-forwarded-mesh-frames-ac-queue-selection.patch b/queue-5.16/mac80211-fix-forwarded-mesh-frames-ac-queue-selection.patch new file mode 100644 index 00000000000..72a9af66174 --- /dev/null +++ b/queue-5.16/mac80211-fix-forwarded-mesh-frames-ac-queue-selection.patch @@ -0,0 +1,60 @@ +From 859ae7018316daa4adbc496012dcbbb458d7e510 Mon Sep 17 00:00:00 2001 +From: Nicolas Escande +Date: Mon, 14 Feb 2022 18:32:14 +0100 +Subject: mac80211: fix forwarded mesh frames AC & queue selection + +From: Nicolas Escande + +commit 859ae7018316daa4adbc496012dcbbb458d7e510 upstream. + +There are two problems with the current code that have been highlighted +with the AQL feature that is now enbaled by default. + +First problem is in ieee80211_rx_h_mesh_fwding(), +ieee80211_select_queue_80211() is used on received packets to choose +the sending AC queue of the forwarding packet although this function +should only be called on TX packet (it uses ieee80211_tx_info). +This ends with forwarded mesh packets been sent on unrelated random AC +queue. To fix that, AC queue can directly be infered from skb->priority +which has been extracted from QOS info (see ieee80211_parse_qos()). + +Second problem is the value of queue_mapping set on forwarded mesh +frames via skb_set_queue_mapping() is not the AC of the packet but a +hardware queue index. This may or may not work depending on AC to HW +queue mapping which is driver specific. + +Both of these issues lead to improper AC selection while forwarding +mesh packets but more importantly due to improper airtime accounting +(which is done on a per STA, per AC basis) caused traffic stall with +the introduction of AQL. + +Fixes: cf44012810cc ("mac80211: fix unnecessary frame drops in mesh fwding") +Fixes: d3c1597b8d1b ("mac80211: fix forwarded mesh frame queue mapping") +Co-developed-by: Remi Pommarel +Signed-off-by: Remi Pommarel +Signed-off-by: Nicolas Escande +Link: https://lore.kernel.org/r/20220214173214.368862-1-nico.escande@gmail.com +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman +--- + net/mac80211/rx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/net/mac80211/rx.c ++++ b/net/mac80211/rx.c +@@ -2918,13 +2918,13 @@ ieee80211_rx_h_mesh_fwding(struct ieee80 + ether_addr_equal(sdata->vif.addr, hdr->addr3)) + return RX_CONTINUE; + +- ac = ieee80211_select_queue_80211(sdata, skb, hdr); ++ ac = ieee802_1d_to_ac[skb->priority]; + q = sdata->vif.hw_queue[ac]; + if (ieee80211_queue_stopped(&local->hw, q)) { + IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion); + return RX_DROP_MONITOR; + } +- skb_set_queue_mapping(skb, q); ++ skb_set_queue_mapping(skb, ac); + + if (!--mesh_hdr->ttl) { + if (!is_multicast_ether_addr(hdr->addr1)) diff --git a/queue-5.16/mac80211-treat-some-sae-auth-steps-as-final.patch b/queue-5.16/mac80211-treat-some-sae-auth-steps-as-final.patch new file mode 100644 index 00000000000..af3a3789a53 --- /dev/null +++ b/queue-5.16/mac80211-treat-some-sae-auth-steps-as-final.patch @@ -0,0 +1,89 @@ +From 94d9864cc86f572f881db9b842a78e9d075493ae Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Thu, 24 Feb 2022 10:39:34 +0100 +Subject: mac80211: treat some SAE auth steps as final + +From: Johannes Berg + +commit 94d9864cc86f572f881db9b842a78e9d075493ae upstream. + +When we get anti-clogging token required (added by the commit +mentioned below), or the other status codes added by the later +commit 4e56cde15f7d ("mac80211: Handle special status codes in +SAE commit") we currently just pretend (towards the internal +state machine of authentication) that we didn't receive anything. + +This has the undesirable consequence of retransmitting the prior +frame, which is not expected, because the timer is still armed. + +If we just disarm the timer at that point, it would result in +the undesirable side effect of being in this state indefinitely +if userspace crashes, or so. + +So to fix this, reset the timer and set a new auth_data->waiting +in order to have no more retransmissions, but to have the data +destroyed when the timer actually fires, which will only happen +if userspace didn't continue (i.e. crashed or abandoned it.) + +Fixes: a4055e74a2ff ("mac80211: Don't destroy auth data in case of anti-clogging") +Reported-by: Jouni Malinen +Link: https://lore.kernel.org/r/20220224103932.75964e1d7932.Ia487f91556f29daae734bf61f8181404642e1eec@changeid +Signed-off-by: Johannes Berg +Signed-off-by: Greg Kroah-Hartman +--- + net/mac80211/ieee80211_i.h | 2 +- + net/mac80211/mlme.c | 16 ++++++++++++---- + 2 files changed, 13 insertions(+), 5 deletions(-) + +--- a/net/mac80211/ieee80211_i.h ++++ b/net/mac80211/ieee80211_i.h +@@ -376,7 +376,7 @@ struct ieee80211_mgd_auth_data { + + u8 key[WLAN_KEY_LEN_WEP104]; + u8 key_len, key_idx; +- bool done; ++ bool done, waiting; + bool peer_confirmed; + bool timeout_started; + +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -37,6 +37,7 @@ + #define IEEE80211_AUTH_TIMEOUT_SAE (HZ * 2) + #define IEEE80211_AUTH_MAX_TRIES 3 + #define IEEE80211_AUTH_WAIT_ASSOC (HZ * 5) ++#define IEEE80211_AUTH_WAIT_SAE_RETRY (HZ * 2) + #define IEEE80211_ASSOC_TIMEOUT (HZ / 5) + #define IEEE80211_ASSOC_TIMEOUT_LONG (HZ / 2) + #define IEEE80211_ASSOC_TIMEOUT_SHORT (HZ / 10) +@@ -3009,8 +3010,15 @@ static void ieee80211_rx_mgmt_auth(struc + (status_code == WLAN_STATUS_ANTI_CLOG_REQUIRED || + (auth_transaction == 1 && + (status_code == WLAN_STATUS_SAE_HASH_TO_ELEMENT || +- status_code == WLAN_STATUS_SAE_PK)))) ++ status_code == WLAN_STATUS_SAE_PK)))) { ++ /* waiting for userspace now */ ++ ifmgd->auth_data->waiting = true; ++ ifmgd->auth_data->timeout = ++ jiffies + IEEE80211_AUTH_WAIT_SAE_RETRY; ++ ifmgd->auth_data->timeout_started = true; ++ run_again(sdata, ifmgd->auth_data->timeout); + goto notify_driver; ++ } + + sdata_info(sdata, "%pM denied authentication (status %d)\n", + mgmt->sa, status_code); +@@ -4597,10 +4605,10 @@ void ieee80211_sta_work(struct ieee80211 + + if (ifmgd->auth_data && ifmgd->auth_data->timeout_started && + time_after(jiffies, ifmgd->auth_data->timeout)) { +- if (ifmgd->auth_data->done) { ++ if (ifmgd->auth_data->done || ifmgd->auth_data->waiting) { + /* +- * ok ... we waited for assoc but userspace didn't, +- * so let's just kill the auth data ++ * ok ... we waited for assoc or continuation but ++ * userspace didn't do it, so kill the auth data + */ + ieee80211_destroy_auth_data(sdata, false); + } else if (ieee80211_auth(sdata)) { diff --git a/queue-5.16/mips-setup-fix-setnocoherentio-boolean-setting.patch b/queue-5.16/mips-setup-fix-setnocoherentio-boolean-setting.patch new file mode 100644 index 00000000000..c9337d92586 --- /dev/null +++ b/queue-5.16/mips-setup-fix-setnocoherentio-boolean-setting.patch @@ -0,0 +1,35 @@ +From 1e6ae0e46e32749b130f1823da30cea9aa2a59a0 Mon Sep 17 00:00:00 2001 +From: Randy Dunlap +Date: Mon, 21 Feb 2022 09:50:29 -0800 +Subject: mips: setup: fix setnocoherentio() boolean setting + +From: Randy Dunlap + +commit 1e6ae0e46e32749b130f1823da30cea9aa2a59a0 upstream. + +Correct a typo/pasto: setnocoherentio() should set +dma_default_coherent to false, not true. + +Fixes: 14ac09a65e19 ("MIPS: refactor the runtime coherent vs noncoherent DMA indicators") +Signed-off-by: Randy Dunlap +Cc: Christoph Hellwig +Cc: Thomas Bogendoerfer +Cc: linux-mips@vger.kernel.org +Reviewed-by: Christoph Hellwig +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/kernel/setup.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/mips/kernel/setup.c ++++ b/arch/mips/kernel/setup.c +@@ -803,7 +803,7 @@ early_param("coherentio", setcoherentio) + + static int __init setnocoherentio(char *str) + { +- dma_default_coherent = true; ++ dma_default_coherent = false; + pr_info("Software DMA cache coherency (command line)\n"); + return 0; + } diff --git a/queue-5.16/mptcp-correctly-set-data_fin-timeout-when-number-of-retransmits-is-large.patch b/queue-5.16/mptcp-correctly-set-data_fin-timeout-when-number-of-retransmits-is-large.patch new file mode 100644 index 00000000000..7ab78a3d4ae --- /dev/null +++ b/queue-5.16/mptcp-correctly-set-data_fin-timeout-when-number-of-retransmits-is-large.patch @@ -0,0 +1,65 @@ +From 877d11f0332cd2160e19e3313e262754c321fa36 Mon Sep 17 00:00:00 2001 +From: Mat Martineau +Date: Thu, 24 Feb 2022 16:52:59 -0800 +Subject: mptcp: Correctly set DATA_FIN timeout when number of retransmits is large + +From: Mat Martineau + +commit 877d11f0332cd2160e19e3313e262754c321fa36 upstream. + +Syzkaller with UBSAN uncovered a scenario where a large number of +DATA_FIN retransmits caused a shift-out-of-bounds in the DATA_FIN +timeout calculation: + +================================================================================ +UBSAN: shift-out-of-bounds in net/mptcp/protocol.c:470:29 +shift exponent 32 is too large for 32-bit type 'unsigned int' +CPU: 1 PID: 13059 Comm: kworker/1:0 Not tainted 5.17.0-rc2-00630-g5fbf21c90c60 #1 +Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014 +Workqueue: events mptcp_worker +Call Trace: + + __dump_stack lib/dump_stack.c:88 [inline] + dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106 + ubsan_epilogue+0xb/0x5a lib/ubsan.c:151 + __ubsan_handle_shift_out_of_bounds.cold+0xb2/0x20e lib/ubsan.c:330 + mptcp_set_datafin_timeout net/mptcp/protocol.c:470 [inline] + __mptcp_retrans.cold+0x72/0x77 net/mptcp/protocol.c:2445 + mptcp_worker+0x58a/0xa70 net/mptcp/protocol.c:2528 + process_one_work+0x9df/0x16d0 kernel/workqueue.c:2307 + worker_thread+0x95/0xe10 kernel/workqueue.c:2454 + kthread+0x2f4/0x3b0 kernel/kthread.c:377 + ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295 + +================================================================================ + +This change limits the maximum timeout by limiting the size of the +shift, which keeps all intermediate values in-bounds. + +Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/259 +Fixes: 6477dd39e62c ("mptcp: Retransmit DATA_FIN") +Acked-by: Paolo Abeni +Signed-off-by: Mat Martineau +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/protocol.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/net/mptcp/protocol.c ++++ b/net/mptcp/protocol.c +@@ -464,9 +464,12 @@ static bool mptcp_pending_data_fin(struc + static void mptcp_set_datafin_timeout(const struct sock *sk) + { + struct inet_connection_sock *icsk = inet_csk(sk); ++ u32 retransmits; + +- mptcp_sk(sk)->timer_ival = min(TCP_RTO_MAX, +- TCP_RTO_MIN << icsk->icsk_retransmits); ++ retransmits = min_t(u32, icsk->icsk_retransmits, ++ ilog2(TCP_RTO_MAX / TCP_RTO_MIN)); ++ ++ mptcp_sk(sk)->timer_ival = TCP_RTO_MIN << retransmits; + } + + static void __mptcp_set_timeout(struct sock *sk, long tout) diff --git a/queue-5.16/net-arcnet-com20020-fix-null-ptr-deref-in-com20020pci_probe.patch b/queue-5.16/net-arcnet-com20020-fix-null-ptr-deref-in-com20020pci_probe.patch new file mode 100644 index 00000000000..88a6d177fe2 --- /dev/null +++ b/queue-5.16/net-arcnet-com20020-fix-null-ptr-deref-in-com20020pci_probe.patch @@ -0,0 +1,49 @@ +From bd6f1fd5d33dfe5d1b4f2502d3694a7cc13f166d Mon Sep 17 00:00:00 2001 +From: Zheyu Ma +Date: Wed, 2 Mar 2022 20:24:23 +0800 +Subject: net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe() + +From: Zheyu Ma + +commit bd6f1fd5d33dfe5d1b4f2502d3694a7cc13f166d upstream. + +During driver initialization, the pointer of card info, i.e. the +variable 'ci' is required. However, the definition of +'com20020pci_id_table' reveals that this field is empty for some +devices, which will cause null pointer dereference when initializing +these devices. + +The following log reveals it: + +[ 3.973806] KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f] +[ 3.973819] RIP: 0010:com20020pci_probe+0x18d/0x13e0 [com20020_pci] +[ 3.975181] Call Trace: +[ 3.976208] local_pci_probe+0x13f/0x210 +[ 3.977248] pci_device_probe+0x34c/0x6d0 +[ 3.977255] ? pci_uevent+0x470/0x470 +[ 3.978265] really_probe+0x24c/0x8d0 +[ 3.978273] __driver_probe_device+0x1b3/0x280 +[ 3.979288] driver_probe_device+0x50/0x370 + +Fix this by checking whether the 'ci' is a null pointer first. + +Fixes: 8c14f9c70327 ("ARCNET: add com20020 PCI IDs with metadata") +Signed-off-by: Zheyu Ma +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/arcnet/com20020-pci.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/net/arcnet/com20020-pci.c ++++ b/drivers/net/arcnet/com20020-pci.c +@@ -138,6 +138,9 @@ static int com20020pci_probe(struct pci_ + return -ENOMEM; + + ci = (struct com20020_pci_card_info *)id->driver_data; ++ if (!ci) ++ return -EINVAL; ++ + priv->ci = ci; + mm = &ci->misc_map; + diff --git a/queue-5.16/net-stmmac-fix-return-value-of-__setup-handler.patch b/queue-5.16/net-stmmac-fix-return-value-of-__setup-handler.patch new file mode 100644 index 00000000000..395730598cc --- /dev/null +++ b/queue-5.16/net-stmmac-fix-return-value-of-__setup-handler.patch @@ -0,0 +1,53 @@ +From e01b042e580f1fbf4fd8da467442451da00c7a90 Mon Sep 17 00:00:00 2001 +From: Randy Dunlap +Date: Wed, 23 Feb 2022 19:35:36 -0800 +Subject: net: stmmac: fix return value of __setup handler + +From: Randy Dunlap + +commit e01b042e580f1fbf4fd8da467442451da00c7a90 upstream. + +__setup() handlers should return 1 on success, i.e., the parameter +has been handled. A return of 0 causes the "option=value" string to be +added to init's environment strings, polluting it. + +Fixes: 47dd7a540b8a ("net: add support for STMicroelectronics Ethernet controllers.") +Fixes: f3240e2811f0 ("stmmac: remove warning when compile as built-in (V2)") +Signed-off-by: Randy Dunlap +Reported-by: Igor Zhbanov +Link: lore.kernel.org/r/64644a2f-4a20-bab3-1e15-3b2cdd0defe3@omprussia.ru +Cc: Giuseppe Cavallaro +Cc: Alexandre Torgue +Cc: Jose Abreu +Link: https://lore.kernel.org/r/20220224033536.25056-1-rdunlap@infradead.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +@@ -7353,7 +7353,7 @@ static int __init stmmac_cmdline_opt(cha + char *opt; + + if (!str || !*str) +- return -EINVAL; ++ return 1; + while ((opt = strsep(&str, ",")) != NULL) { + if (!strncmp(opt, "debug:", 6)) { + if (kstrtoint(opt + 6, 0, &debug)) +@@ -7384,11 +7384,11 @@ static int __init stmmac_cmdline_opt(cha + goto err; + } + } +- return 0; ++ return 1; + + err: + pr_err("%s: ERROR broken module parameter conversion", __func__); +- return -EINVAL; ++ return 1; + } + + __setup("stmmaceth=", stmmac_cmdline_opt); diff --git a/queue-5.16/net-sxgbe-fix-return-value-of-__setup-handler.patch b/queue-5.16/net-sxgbe-fix-return-value-of-__setup-handler.patch new file mode 100644 index 00000000000..bb87cb2dbe3 --- /dev/null +++ b/queue-5.16/net-sxgbe-fix-return-value-of-__setup-handler.patch @@ -0,0 +1,52 @@ +From 50e06ddceeea263f57fe92baa677c638ecd65bb6 Mon Sep 17 00:00:00 2001 +From: Randy Dunlap +Date: Wed, 23 Feb 2022 19:35:28 -0800 +Subject: net: sxgbe: fix return value of __setup handler + +From: Randy Dunlap + +commit 50e06ddceeea263f57fe92baa677c638ecd65bb6 upstream. + +__setup() handlers should return 1 on success, i.e., the parameter +has been handled. A return of 0 causes the "option=value" string to be +added to init's environment strings, polluting it. + +Fixes: acc18c147b22 ("net: sxgbe: add EEE(Energy Efficient Ethernet) for Samsung sxgbe") +Fixes: 1edb9ca69e8a ("net: sxgbe: add basic framework for Samsung 10Gb ethernet driver") +Signed-off-by: Randy Dunlap +Reported-by: Igor Zhbanov +Link: lore.kernel.org/r/64644a2f-4a20-bab3-1e15-3b2cdd0defe3@omprussia.ru +Cc: Siva Reddy +Cc: Girish K S +Cc: Byungho An +Link: https://lore.kernel.org/r/20220224033528.24640-1-rdunlap@infradead.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c ++++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +@@ -2285,18 +2285,18 @@ static int __init sxgbe_cmdline_opt(char + char *opt; + + if (!str || !*str) +- return -EINVAL; ++ return 1; + while ((opt = strsep(&str, ",")) != NULL) { + if (!strncmp(opt, "eee_timer:", 10)) { + if (kstrtoint(opt + 10, 0, &eee_timer)) + goto err; + } + } +- return 0; ++ return 1; + + err: + pr_err("%s: ERROR broken module parameter conversion\n", __func__); +- return -EINVAL; ++ return 1; + } + + __setup("sxgbeeth=", sxgbe_cmdline_opt); diff --git a/queue-5.16/pinctrl-sunxi-use-unique-lockdep-classes-for-irqs.patch b/queue-5.16/pinctrl-sunxi-use-unique-lockdep-classes-for-irqs.patch new file mode 100644 index 00000000000..8670696ce92 --- /dev/null +++ b/queue-5.16/pinctrl-sunxi-use-unique-lockdep-classes-for-irqs.patch @@ -0,0 +1,104 @@ +From bac129dbc6560dfeb634c03f0c08b78024e71915 Mon Sep 17 00:00:00 2001 +From: Samuel Holland +Date: Tue, 15 Feb 2022 22:00:36 -0600 +Subject: pinctrl: sunxi: Use unique lockdep classes for IRQs + +From: Samuel Holland + +commit bac129dbc6560dfeb634c03f0c08b78024e71915 upstream. + +This driver, like several others, uses a chained IRQ for each GPIO bank, +and forwards .irq_set_wake to the GPIO bank's upstream IRQ. As a result, +a call to irq_set_irq_wake() needs to lock both the upstream and +downstream irq_desc's. Lockdep considers this to be a possible deadlock +when the irq_desc's share lockdep classes, which they do by default: + + ============================================ + WARNING: possible recursive locking detected + 5.17.0-rc3-00394-gc849047c2473 #1 Not tainted + -------------------------------------------- + init/307 is trying to acquire lock: + c2dfe27c (&irq_desc_lock_class){-.-.}-{2:2}, at: __irq_get_desc_lock+0x58/0xa0 + + but task is already holding lock: + c3c0ac7c (&irq_desc_lock_class){-.-.}-{2:2}, at: __irq_get_desc_lock+0x58/0xa0 + + other info that might help us debug this: + Possible unsafe locking scenario: + + CPU0 + ---- + lock(&irq_desc_lock_class); + lock(&irq_desc_lock_class); + + *** DEADLOCK *** + + May be due to missing lock nesting notation + + 4 locks held by init/307: + #0: c1f29f18 (system_transition_mutex){+.+.}-{3:3}, at: __do_sys_reboot+0x90/0x23c + #1: c20f7760 (&dev->mutex){....}-{3:3}, at: device_shutdown+0xf4/0x224 + #2: c2e804d8 (&dev->mutex){....}-{3:3}, at: device_shutdown+0x104/0x224 + #3: c3c0ac7c (&irq_desc_lock_class){-.-.}-{2:2}, at: __irq_get_desc_lock+0x58/0xa0 + + stack backtrace: + CPU: 0 PID: 307 Comm: init Not tainted 5.17.0-rc3-00394-gc849047c2473 #1 + Hardware name: Allwinner sun8i Family + unwind_backtrace from show_stack+0x10/0x14 + show_stack from dump_stack_lvl+0x68/0x90 + dump_stack_lvl from __lock_acquire+0x1680/0x31a0 + __lock_acquire from lock_acquire+0x148/0x3dc + lock_acquire from _raw_spin_lock_irqsave+0x50/0x6c + _raw_spin_lock_irqsave from __irq_get_desc_lock+0x58/0xa0 + __irq_get_desc_lock from irq_set_irq_wake+0x2c/0x19c + irq_set_irq_wake from irq_set_irq_wake+0x13c/0x19c + [tail call from sunxi_pinctrl_irq_set_wake] + irq_set_irq_wake from gpio_keys_suspend+0x80/0x1a4 + gpio_keys_suspend from gpio_keys_shutdown+0x10/0x2c + gpio_keys_shutdown from device_shutdown+0x180/0x224 + device_shutdown from __do_sys_reboot+0x134/0x23c + __do_sys_reboot from ret_fast_syscall+0x0/0x1c + +However, this can never deadlock because the upstream and downstream +IRQs are never the same (nor do they even involve the same irqchip). + +Silence this erroneous lockdep splat by applying what appears to be the +usual fix of moving the GPIO IRQs to separate lockdep classes. + +Fixes: a59c99d9eaf9 ("pinctrl: sunxi: Forward calls to irq_set_irq_wake") +Reported-by: Guenter Roeck +Signed-off-by: Samuel Holland +Reviewed-by: Jernej Skrabec +Tested-by: Guenter Roeck +Link: https://lore.kernel.org/r/20220216040037.22730-1-samuel@sholland.org +Signed-off-by: Linus Walleij +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pinctrl/sunxi/pinctrl-sunxi.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c ++++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c +@@ -36,6 +36,13 @@ + #include "../core.h" + #include "pinctrl-sunxi.h" + ++/* ++ * These lock classes tell lockdep that GPIO IRQs are in a different ++ * category than their parents, so it won't report false recursion. ++ */ ++static struct lock_class_key sunxi_pinctrl_irq_lock_class; ++static struct lock_class_key sunxi_pinctrl_irq_request_class; ++ + static struct irq_chip sunxi_pinctrl_edge_irq_chip; + static struct irq_chip sunxi_pinctrl_level_irq_chip; + +@@ -1551,6 +1558,8 @@ int sunxi_pinctrl_init_with_variant(stru + for (i = 0; i < (pctl->desc->irq_banks * IRQ_PER_BANK); i++) { + int irqno = irq_create_mapping(pctl->domain, i); + ++ irq_set_lockdep_class(irqno, &sunxi_pinctrl_irq_lock_class, ++ &sunxi_pinctrl_irq_request_class); + irq_set_chip_and_handler(irqno, &sunxi_pinctrl_edge_irq_chip, + handle_edge_irq); + irq_set_chip_data(irqno, pctl); diff --git a/queue-5.16/selftests-mlxsw-tc_police_scale-make-test-more-robust.patch b/queue-5.16/selftests-mlxsw-tc_police_scale-make-test-more-robust.patch new file mode 100644 index 00000000000..b4d1e84d95e --- /dev/null +++ b/queue-5.16/selftests-mlxsw-tc_police_scale-make-test-more-robust.patch @@ -0,0 +1,55 @@ +From dc9752075341e7beb653e37c6f4a3723074dc8bc Mon Sep 17 00:00:00 2001 +From: Amit Cohen +Date: Wed, 2 Mar 2022 18:14:46 +0200 +Subject: selftests: mlxsw: tc_police_scale: Make test more robust + +From: Amit Cohen + +commit dc9752075341e7beb653e37c6f4a3723074dc8bc upstream. + +The test adds tc filters and checks how many of them were offloaded by +grepping for 'in_hw'. + +iproute2 commit f4cd4f127047 ("tc: add skip_hw and skip_sw to control +action offload") added offload indication to tc actions, producing the +following output: + + $ tc filter show dev swp2 ingress + ... + filter protocol ipv6 pref 1000 flower chain 0 handle 0x7c0 + eth_type ipv6 + dst_ip 2001:db8:1::7bf + skip_sw + in_hw in_hw_count 1 + action order 1: police 0x7c0 rate 10Mbit burst 100Kb mtu 2Kb action drop overhead 0b + ref 1 bind 1 + not_in_hw + used_hw_stats immediate + +The current grep expression matches on both 'in_hw' and 'not_in_hw', +resulting in incorrect results. + +Fix that by using JSON output instead. + +Fixes: 5061e773264b ("selftests: mlxsw: Add scale test for tc-police") +Signed-off-by: Amit Cohen +Reviewed-by: Petr Machata +Signed-off-by: Ido Schimmel +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/drivers/net/mlxsw/tc_police_scale.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/tools/testing/selftests/drivers/net/mlxsw/tc_police_scale.sh ++++ b/tools/testing/selftests/drivers/net/mlxsw/tc_police_scale.sh +@@ -60,7 +60,8 @@ __tc_police_test() + + tc_police_rules_create $count $should_fail + +- offload_count=$(tc filter show dev $swp1 ingress | grep in_hw | wc -l) ++ offload_count=$(tc -j filter show dev $swp1 ingress | ++ jq "[.[] | select(.options.in_hw == true)] | length") + ((offload_count == count)) + check_err_fail $should_fail $? "tc police offload count" + } diff --git a/queue-5.16/series b/queue-5.16/series index 86b575af4d8..6090787dc08 100644 --- a/queue-5.16/series +++ b/queue-5.16/series @@ -86,3 +86,30 @@ net-smc-fix-unexpected-smc_clc_decl_err_regrmb-error-cause-by-server.patch btrfs-fix-enospc-failure-when-attempting-direct-io-write-into-nocow-range.patch platform-x86-amd-pmc-set-qos-during-suspend-on-czn-w-timer-wakeup.patch net-dsa-microchip-fix-bridging-with-more-than-two-member-ports.patch +mac80211-fix-forwarded-mesh-frames-ac-queue-selection.patch +net-stmmac-fix-return-value-of-__setup-handler.patch +mac80211-treat-some-sae-auth-steps-as-final.patch +iavf-fix-missing-check-for-running-netdev.patch +net-sxgbe-fix-return-value-of-__setup-handler.patch +ibmvnic-register-netdev-after-init-of-adapter.patch +net-arcnet-com20020-fix-null-ptr-deref-in-com20020pci_probe.patch +ixgbe-xsk-change-netif_carrier_ok-handling-in-ixgbe_xmit_zc.patch +iavf-fix-deadlock-in-iavf_reset_task.patch +efivars-respect-block-flag-in-efivar_entry_set_safe.patch +auxdisplay-lcd2s-fix-lcd2s_redefine_char-feature.patch +firmware-arm_scmi-remove-space-in-module_alias-name.patch +asoc-cs4265-fix-the-duplicated-control-name.patch +auxdisplay-lcd2s-fix-memory-leak-in-remove.patch +auxdisplay-lcd2s-use-proper-api-to-free-the-instance-of-charlcd-object.patch +can-gs_usb-change-active_channels-s-type-from-atomic_t-to-u8.patch +iommu-tegra-smmu-fix-missing-put_device-call-in-tegra_smmu_find.patch +arm64-dts-rockchip-switch-rk3399-gru-dp-to-spdif-output.patch +igc-igc_read_phy_reg_gpy-drop-premature-return.patch +arm-fix-kgdb-breakpoint-for-thumb2.patch +mips-setup-fix-setnocoherentio-boolean-setting.patch +arm-9182-1-mmu-fix-returns-from-early_param-and-__setup-functions.patch +mptcp-correctly-set-data_fin-timeout-when-number-of-retransmits-is-large.patch +selftests-mlxsw-tc_police_scale-make-test-more-robust.patch +pinctrl-sunxi-use-unique-lockdep-classes-for-irqs.patch +igc-igc_write_phy_reg_gpy-drop-premature-return.patch +ibmvnic-free-reset-work-item-when-flushing.patch