]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Mon, 2 May 2022 04:06:24 +0000 (00:06 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 2 May 2022 04:06:24 +0000 (00:06 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
69 files changed:
queue-5.10/arm-dts-am3517-evm-fix-misc-pinmuxing.patch [new file with mode: 0644]
queue-5.10/arm-dts-at91-map-mclk-for-wm8731-on-at91sam9g20ek.patch [new file with mode: 0644]
queue-5.10/arm-dts-at91-sama5d4_xplained-fix-pinctrl-phandle-na.patch [new file with mode: 0644]
queue-5.10/arm-dts-fix-mmc-order-for-omap3-gta04.patch [new file with mode: 0644]
queue-5.10/arm-dts-imx6qdl-apalis-fix-sgtl5000-detection-issue.patch [new file with mode: 0644]
queue-5.10/arm-dts-imx6ull-colibri-fix-vqmmc-regulator.patch [new file with mode: 0644]
queue-5.10/arm-dts-logicpd-som-lv-fix-wrong-pinmuxing-on-omap35.patch [new file with mode: 0644]
queue-5.10/arm-omap2-fix-refcount-leak-in-omap_gic_of_init.patch [new file with mode: 0644]
queue-5.10/arm64-dts-imx8mn-ddr4-evk-describe-the-32.768-khz-pm.patch [new file with mode: 0644]
queue-5.10/arm64-dts-meson-remove-cpu-opps-below-1ghz-for-g12b-.patch [new file with mode: 0644]
queue-5.10/arm64-dts-meson-remove-cpu-opps-below-1ghz-for-sm1-b.patch [new file with mode: 0644]
queue-5.10/asoc-intel-soc-acpi-correct-device-endpoints-for-max.patch [new file with mode: 0644]
queue-5.10/asoc-wm8731-disable-the-regulator-when-probing-fails.patch [new file with mode: 0644]
queue-5.10/bnx2x-fix-napi-api-usage-sequence.patch [new file with mode: 0644]
queue-5.10/bpf-lwt-fix-crash-when-using-bpf_skb_set_tunnel_key-.patch [new file with mode: 0644]
queue-5.10/bus-sunxi-rsb-fix-the-return-value-of-sunxi_rsb_devi.patch [new file with mode: 0644]
queue-5.10/bus-ti-sysc-make-omap3-gpt12-quirk-handling-soc-spec.patch [new file with mode: 0644]
queue-5.10/cifs-destage-any-unwritten-data-to-the-server-before.patch [new file with mode: 0644]
queue-5.10/clk-sunxi-sun9i-mmc-check-return-value-after-calling.patch [new file with mode: 0644]
queue-5.10/cpufreq-fix-memory-leak-in-sun50i_cpufreq_nvmem_prob.patch [new file with mode: 0644]
queue-5.10/drivers-net-hippi-fix-deadlock-in-rr_close.patch [new file with mode: 0644]
queue-5.10/drm-amd-display-fix-memory-leak-in-dcn21_clock_sourc.patch [new file with mode: 0644]
queue-5.10/drm-amdkfd-fix-gws-queue-count.patch [new file with mode: 0644]
queue-5.10/ext4-fix-bug_on-in-start_this_handle-during-umount-f.patch [new file with mode: 0644]
queue-5.10/ibmvnic-fix-miscellaneous-checks.patch [new file with mode: 0644]
queue-5.10/iio-imu-bmi160-disable-regulator-in-error-path.patch [new file with mode: 0644]
queue-5.10/ip6_gre-make-o_seqno-start-from-0-in-native-mode.patch [new file with mode: 0644]
queue-5.10/ip_gre-ip6_gre-fix-race-condition-on-o_seqno-in-coll.patch [new file with mode: 0644]
queue-5.10/ip_gre-make-o_seqno-start-from-0-in-native-mode.patch [new file with mode: 0644]
queue-5.10/ipvs-correctly-print-the-memory-size-of-ip_vs_conn_t.patch [new file with mode: 0644]
queue-5.10/ixgbe-ensure-ipsec-vf-pf-compatibility.patch [new file with mode: 0644]
queue-5.10/memory-renesas-rpc-if-fix-hf-ospi-data-transfer-in-m.patch [new file with mode: 0644]
queue-5.10/mtd-fix-part-field-data-corruption-in-mtd_info.patch [new file with mode: 0644]
queue-5.10/mtd-rawnand-fix-ecc-parameters-for-mt7622.patch [new file with mode: 0644]
queue-5.10/mtd-rawnand-fix-return-value-check-of-wait_for_compl.patch [new file with mode: 0644]
queue-5.10/net-bcmgenet-hide-status-block-before-tx-timestampin.patch [new file with mode: 0644]
queue-5.10/net-dsa-add-missing-of_node_put-in-dsa_port_link_reg.patch [new file with mode: 0644]
queue-5.10/net-dsa-lantiq_gswip-don-t-set-gswip_mii_cfg_rmii_cl.patch [new file with mode: 0644]
queue-5.10/net-fec-add-missing-of_node_put-in-fec_enet_init_sto.patch [new file with mode: 0644]
queue-5.10/net-hns3-add-return-value-for-mailbox-handling-in-pf.patch [new file with mode: 0644]
queue-5.10/net-hns3-add-validity-check-for-message-data-length.patch [new file with mode: 0644]
queue-5.10/net-hns3-modify-the-return-code-of-hclge_get_ring_ch.patch [new file with mode: 0644]
queue-5.10/net-phy-marvell10g-fix-return-value-on-error.patch [new file with mode: 0644]
queue-5.10/net-smc-sync-err-code-when-tcp-connection-was-refuse.patch [new file with mode: 0644]
queue-5.10/netfilter-nft_set_rbtree-overlap-detection-with-elem.patch [new file with mode: 0644]
queue-5.10/phy-mapphone-mdm6600-fix-pm-error-handling-in-phy_md.patch [new file with mode: 0644]
queue-5.10/phy-samsung-exynos5250-sata-fix-missing-device-put-i.patch [new file with mode: 0644]
queue-5.10/phy-samsung-fix-missing-of_node_put-in-exynos_sata_p.patch [new file with mode: 0644]
queue-5.10/phy-ti-add-missing-pm_runtime_disable-in-serdes_am65.patch [new file with mode: 0644]
queue-5.10/phy-ti-omap-usb2-fix-error-handling-in-omap_usb2_ena.patch [new file with mode: 0644]
queue-5.10/pinctrl-mediatek-moore-fix-build-error.patch [new file with mode: 0644]
queue-5.10/pinctrl-pistachio-fix-use-of-irq_of_parse_and_map.patch [new file with mode: 0644]
queue-5.10/pinctrl-rockchip-fix-rk3308-pinmux-bits.patch [new file with mode: 0644]
queue-5.10/pinctrl-stm32-do-not-call-stm32_gpio_get-for-edge-tr.patch [new file with mode: 0644]
queue-5.10/pinctrl-stm32-keep-pinctrl-block-clock-enabled-when-.patch [new file with mode: 0644]
queue-5.10/powerpc-perf-fix-32bit-compile.patch [new file with mode: 0644]
queue-5.10/revert-ibmvnic-add-ethtool-private-flag-for-driver-d.patch [new file with mode: 0644]
queue-5.10/sctp-check-asoc-strreset_chunk-in-sctp_generate_reco.patch [new file with mode: 0644]
queue-5.10/series
queue-5.10/tcp-ensure-to-use-the-most-recently-sent-skb-when-fi.patch [new file with mode: 0644]
queue-5.10/tcp-fix-f-rto-may-not-work-correctly-when-receiving-.patch [new file with mode: 0644]
queue-5.10/tcp-fix-potential-xmit-stalls-caused-by-tcp_notsent_.patch [new file with mode: 0644]
queue-5.10/tcp-make-sure-treq-af_specific-is-initialized.patch [new file with mode: 0644]
queue-5.10/tcp-md5-incorrect-tcp_header_len-for-incoming-connec.patch [new file with mode: 0644]
queue-5.10/tls-skip-tls_append_frag-on-zero-copy-size.patch [new file with mode: 0644]
queue-5.10/usb-fix-xhci-event-ring-dequeue-pointer-erdp-update-.patch [new file with mode: 0644]
queue-5.10/video-fbdev-udlfb-properly-check-endpoint-type.patch [new file with mode: 0644]
queue-5.10/wireguard-device-check-for-metadata_dst-with-skb_val.patch [new file with mode: 0644]
queue-5.10/x86-__memcpy_flushcache-fix-wrong-alignment-if-size-.patch [new file with mode: 0644]

diff --git a/queue-5.10/arm-dts-am3517-evm-fix-misc-pinmuxing.patch b/queue-5.10/arm-dts-am3517-evm-fix-misc-pinmuxing.patch
new file mode 100644 (file)
index 0000000..c45250d
--- /dev/null
@@ -0,0 +1,153 @@
+From cc71c690a5219c0de510ea2de266fded106c4a7a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 26 Feb 2022 15:48:19 -0600
+Subject: ARM: dts: am3517-evm: Fix misc pinmuxing
+
+From: Adam Ford <aford173@gmail.com>
+
+[ Upstream commit 942da3af32b2288e674736eb159d1fc676261691 ]
+
+The bootloader for the AM3517 has previously done much of the pin
+muxing, but as the bootloader is moving more and more to a model
+based on the device tree, it may no longer automatically mux the
+pins, so it is necessary to add the pinmuxing to the Linux device
+trees so the respective peripherals can remain functional.
+
+Fixes: 6ed1d7997561 ("ARM: dts: am3517-evm: Add support for UI board and Audio")
+Signed-off-by: Adam Ford <aford173@gmail.com>
+Message-Id: <20220226214820.747847-1-aford173@gmail.com>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/am3517-evm.dts  | 45 +++++++++++++++++++++++++++----
+ arch/arm/boot/dts/am3517-som.dtsi |  9 +++++++
+ 2 files changed, 49 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/boot/dts/am3517-evm.dts b/arch/arm/boot/dts/am3517-evm.dts
+index 0d2fac98ce7d..c8b80f156ec9 100644
+--- a/arch/arm/boot/dts/am3517-evm.dts
++++ b/arch/arm/boot/dts/am3517-evm.dts
+@@ -161,6 +161,8 @@ pwm11: dmtimer-pwm@11 {
+       /* HS USB Host PHY on PORT 1 */
+       hsusb1_phy: hsusb1_phy {
++              pinctrl-names = "default";
++              pinctrl-0 = <&hsusb1_rst_pins>;
+               compatible = "usb-nop-xceiv";
+               reset-gpios = <&gpio2 25 GPIO_ACTIVE_LOW>; /* gpio_57 */
+               #phy-cells = <0>;
+@@ -168,7 +170,9 @@ hsusb1_phy: hsusb1_phy {
+ };
+ &davinci_emac {
+-           status = "okay";
++      pinctrl-names = "default";
++      pinctrl-0 = <&ethernet_pins>;
++      status = "okay";
+ };
+ &davinci_mdio {
+@@ -193,6 +197,8 @@ dpi_out: endpoint {
+ };
+ &i2c2 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&i2c2_pins>;
+       clock-frequency = <400000>;
+       /* User DIP swithes [1:8] / User LEDS [1:2] */
+       tca6416: gpio@21 {
+@@ -205,6 +211,8 @@ tca6416: gpio@21 {
+ };
+ &i2c3 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&i2c3_pins>;
+       clock-frequency = <400000>;
+ };
+@@ -223,6 +231,8 @@ &mmc3 {
+ };
+ &usbhshost {
++      pinctrl-names = "default";
++      pinctrl-0 = <&hsusb1_pins>;
+       port1-mode = "ehci-phy";
+ };
+@@ -231,8 +241,35 @@ &usbhsehci {
+ };
+ &omap3_pmx_core {
+-      pinctrl-names = "default";
+-      pinctrl-0 = <&hsusb1_rst_pins>;
++
++      ethernet_pins: pinmux_ethernet_pins {
++              pinctrl-single,pins = <
++                      OMAP3_CORE1_IOPAD(0x21fe, PIN_INPUT | MUX_MODE0) /* rmii_mdio_data */
++                      OMAP3_CORE1_IOPAD(0x2200, MUX_MODE0) /* rmii_mdio_clk */
++                      OMAP3_CORE1_IOPAD(0x2202, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_rxd0 */
++                      OMAP3_CORE1_IOPAD(0x2204, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_rxd1 */
++                      OMAP3_CORE1_IOPAD(0x2206, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_crs_dv */
++                      OMAP3_CORE1_IOPAD(0x2208, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* rmii_rxer */
++                      OMAP3_CORE1_IOPAD(0x220a, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* rmii_txd0 */
++                      OMAP3_CORE1_IOPAD(0x220c, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* rmii_txd1 */
++                      OMAP3_CORE1_IOPAD(0x220e, PIN_OUTPUT_PULLDOWN |MUX_MODE0) /* rmii_txen */
++                      OMAP3_CORE1_IOPAD(0x2210, PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii_50mhz_clk */
++              >;
++      };
++
++      i2c2_pins: pinmux_i2c2_pins {
++              pinctrl-single,pins = <
++                      OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c2_scl */
++                      OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c2_sda */
++              >;
++      };
++
++      i2c3_pins: pinmux_i2c3_pins {
++              pinctrl-single,pins = <
++                      OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c3_scl */
++                      OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c3_sda */
++              >;
++      };
+       leds_pins: pinmux_leds_pins {
+               pinctrl-single,pins = <
+@@ -300,8 +337,6 @@ OMAP3_CORE1_IOPAD(0x20ba, PIN_OUTPUT | MUX_MODE4)  /* gpmc_ncs6.gpio_57 */
+ };
+ &omap3_pmx_core2 {
+-      pinctrl-names = "default";
+-      pinctrl-0 = <&hsusb1_pins>;
+       hsusb1_pins: pinmux_hsusb1_pins {
+               pinctrl-single,pins = <
+diff --git a/arch/arm/boot/dts/am3517-som.dtsi b/arch/arm/boot/dts/am3517-som.dtsi
+index 8b669e2eafec..f7b680f6c48a 100644
+--- a/arch/arm/boot/dts/am3517-som.dtsi
++++ b/arch/arm/boot/dts/am3517-som.dtsi
+@@ -69,6 +69,8 @@ nand@0,0 {
+ };
+ &i2c1 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&i2c1_pins>;
+       clock-frequency = <400000>;
+       s35390a: s35390a@30 {
+@@ -179,6 +181,13 @@ bluetooth {
+ &omap3_pmx_core {
++      i2c1_pins: pinmux_i2c1_pins {
++              pinctrl-single,pins = <
++                      OMAP3_CORE1_IOPAD(0x21ba, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c1_scl */
++                      OMAP3_CORE1_IOPAD(0x21bc, PIN_INPUT_PULLUP | MUX_MODE0)  /* i2c1_sda */
++              >;
++      };
++
+       wl12xx_buffer_pins: pinmux_wl12xx_buffer_pins {
+               pinctrl-single,pins = <
+                       OMAP3_CORE1_IOPAD(0x2156, PIN_OUTPUT | MUX_MODE4)  /* mmc1_dat7.gpio_129 */
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-dts-at91-map-mclk-for-wm8731-on-at91sam9g20ek.patch b/queue-5.10/arm-dts-at91-map-mclk-for-wm8731-on-at91sam9g20ek.patch
new file mode 100644 (file)
index 0000000..261e1fc
--- /dev/null
@@ -0,0 +1,45 @@
+From e2e7a5b421059e42c44bc4a95a38cd7d6074cb4b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Apr 2022 11:28:05 +0100
+Subject: ARM: dts: at91: Map MCLK for wm8731 on at91sam9g20ek
+
+From: Mark Brown <broonie@kernel.org>
+
+[ Upstream commit 0e486fe341fabd8e583f3d601a874cd394979c45 ]
+
+The MCLK of the WM8731 on the AT91SAM9G20-EK board is connected to the
+PCK0 output of the SoC and is expected to be set to 12MHz. Previously
+this was mapped using pre-common clock API calls in the audio machine
+driver but the conversion to the common clock framework broke that so
+describe things in the DT instead.
+
+Fixes: ff78a189b0ae55f ("ARM: at91: remove old at91-specific clock driver")
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
+Signed-off-by: Nicolas Ferre <nicolas.ferre@microchip.com>
+Link: https://lore.kernel.org/r/20220404102806.581374-2-broonie@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/at91sam9g20ek_common.dtsi | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi
+index 87bb39060e8b..ca03685f0f08 100644
+--- a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi
++++ b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi
+@@ -219,6 +219,12 @@ i2c-gpio-0 {
+               wm8731: wm8731@1b {
+                       compatible = "wm8731";
+                       reg = <0x1b>;
++
++                      /* PCK0 at 12MHz */
++                      clocks = <&pmc PMC_TYPE_SYSTEM 8>;
++                      clock-names = "mclk";
++                      assigned-clocks = <&pmc PMC_TYPE_SYSTEM 8>;
++                      assigned-clock-rates = <12000000>;
+               };
+       };
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-dts-at91-sama5d4_xplained-fix-pinctrl-phandle-na.patch b/queue-5.10/arm-dts-at91-sama5d4_xplained-fix-pinctrl-phandle-na.patch
new file mode 100644 (file)
index 0000000..d5dbb92
--- /dev/null
@@ -0,0 +1,44 @@
+From d678bf3ea084a45fb81a68f6ce372f304ea09cb7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 31 Mar 2022 17:13:22 +0300
+Subject: ARM: dts: at91: sama5d4_xplained: fix pinctrl phandle name
+
+From: Claudiu Beznea <claudiu.beznea@microchip.com>
+
+[ Upstream commit 5c8b49852910caffeebb1ce541fdd264ffc691b8 ]
+
+Pinctrl phandle is for spi1 so rename it to reflect this.
+
+Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
+Signed-off-by: Nicolas Ferre <nicolas.ferre@microchip.com>
+Link: https://lore.kernel.org/r/20220331141323.194355-1-claudiu.beznea@microchip.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/at91-sama5d4_xplained.dts | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/at91-sama5d4_xplained.dts b/arch/arm/boot/dts/at91-sama5d4_xplained.dts
+index e42dae06b582..73cb157c4ef5 100644
+--- a/arch/arm/boot/dts/at91-sama5d4_xplained.dts
++++ b/arch/arm/boot/dts/at91-sama5d4_xplained.dts
+@@ -91,7 +91,7 @@ usart4: serial@fc010000 {
+                       spi1: spi@fc018000 {
+                               pinctrl-names = "default";
+-                              pinctrl-0 = <&pinctrl_spi0_cs>;
++                              pinctrl-0 = <&pinctrl_spi1_cs>;
+                               cs-gpios = <&pioB 21 0>;
+                               status = "okay";
+                       };
+@@ -149,7 +149,7 @@ pinctrl_macb0_phy_irq: macb0_phy_irq_0 {
+                                               atmel,pins =
+                                                       <AT91_PIOE 1 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
+                                       };
+-                                      pinctrl_spi0_cs: spi0_cs_default {
++                                      pinctrl_spi1_cs: spi1_cs_default {
+                                               atmel,pins =
+                                                       <AT91_PIOB 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
+                                       };
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-dts-fix-mmc-order-for-omap3-gta04.patch b/queue-5.10/arm-dts-fix-mmc-order-for-omap3-gta04.patch
new file mode 100644 (file)
index 0000000..8c2239d
--- /dev/null
@@ -0,0 +1,38 @@
+From 24c9fc25b3905253a47f11b9491d150cae573033 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Mar 2022 14:00:20 +0100
+Subject: ARM: dts: Fix mmc order for omap3-gta04
+
+From: H. Nikolaus Schaller <hns@goldelico.com>
+
+[ Upstream commit 09269dd050094593fc747f2a5853d189fefcb6b5 ]
+
+Commit a1ebdb374199 ("ARM: dts: Fix swapped mmc order for omap3")
+introduces general mmc aliases. Let's tailor them to the need
+of the GTA04 board which does not make use of mmc2 and mmc3 interfaces.
+
+Fixes: a1ebdb374199 ("ARM: dts: Fix swapped mmc order for omap3")
+Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
+Message-Id: <dc9173ee3d391d9e92b7ab8ed4f84b29f0a21c83.1646744420.git.hns@goldelico.com>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/omap3-gta04.dtsi | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi
+index 80c9e5e34136..cc8a378dd076 100644
+--- a/arch/arm/boot/dts/omap3-gta04.dtsi
++++ b/arch/arm/boot/dts/omap3-gta04.dtsi
+@@ -31,6 +31,8 @@ chosen {
+       aliases {
+               display0 = &lcd;
+               display1 = &tv0;
++              /delete-property/ mmc2;
++              /delete-property/ mmc3;
+       };
+       ldo_3v3: fixedregulator {
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-dts-imx6qdl-apalis-fix-sgtl5000-detection-issue.patch b/queue-5.10/arm-dts-imx6qdl-apalis-fix-sgtl5000-detection-issue.patch
new file mode 100644 (file)
index 0000000..3e9e4c3
--- /dev/null
@@ -0,0 +1,71 @@
+From 661461d1a5713470e2bb7c14b07f678797cfecaf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 26 Mar 2022 12:14:55 -0300
+Subject: ARM: dts: imx6qdl-apalis: Fix sgtl5000 detection issue
+
+From: Fabio Estevam <festevam@gmail.com>
+
+[ Upstream commit fa51e1dc4b91375bc18349663a52395ad585bd3c ]
+
+On a custom carrier board with a i.MX6Q Apalis SoM, the sgtl5000 codec
+on the SoM is often not detected and the following error message is
+seen when the sgtl5000 driver tries to read the ID register:
+
+sgtl5000 1-000a: Error reading chip id -6
+
+The reason for the error is that the MCLK clock is not provided
+early enough.
+
+Fix the problem by describing the MCLK pinctrl inside the codec
+node instead of placing it inside the audmux pinctrl group.
+
+With this change applied the sgtl5000 is always detected on every boot.
+
+Fixes: 693e3ffaae5a ("ARM: dts: imx6: Add support for Toradex Apalis iMX6Q/D SoM")
+Signed-off-by: Fabio Estevam <festevam@gmail.com>
+Reviewed-by: Tim Harvey <tharvey@gateworks.com>
+Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx6qdl-apalis.dtsi | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-apalis.dtsi b/arch/arm/boot/dts/imx6qdl-apalis.dtsi
+index 30fa349f9d05..a696873dc1ab 100644
+--- a/arch/arm/boot/dts/imx6qdl-apalis.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-apalis.dtsi
+@@ -286,6 +286,8 @@ vgen6_reg: vgen6 {
+       codec: sgtl5000@a {
+               compatible = "fsl,sgtl5000";
+               reg = <0x0a>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&pinctrl_sgtl5000>;
+               clocks = <&clks IMX6QDL_CLK_CKO>;
+               VDDA-supply = <&reg_module_3v3_audio>;
+               VDDIO-supply = <&reg_module_3v3>;
+@@ -516,8 +518,6 @@ MX6QDL_PAD_DISP0_DAT20__AUD4_TXC   0x130b0
+                       MX6QDL_PAD_DISP0_DAT21__AUD4_TXD        0x130b0
+                       MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS       0x130b0
+                       MX6QDL_PAD_DISP0_DAT23__AUD4_RXD        0x130b0
+-                      /* SGTL5000 sys_mclk */
+-                      MX6QDL_PAD_GPIO_5__CCM_CLKO1            0x130b0
+               >;
+       };
+@@ -810,6 +810,12 @@ MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x000b0
+               >;
+       };
++      pinctrl_sgtl5000: sgtl5000grp {
++              fsl,pins = <
++                      MX6QDL_PAD_GPIO_5__CCM_CLKO1    0x130b0
++              >;
++      };
++
+       pinctrl_spdif: spdifgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_GPIO_16__SPDIF_IN  0x1b0b0
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-dts-imx6ull-colibri-fix-vqmmc-regulator.patch b/queue-5.10/arm-dts-imx6ull-colibri-fix-vqmmc-regulator.patch
new file mode 100644 (file)
index 0000000..8e4fe6e
--- /dev/null
@@ -0,0 +1,39 @@
+From df70a69433128d787f9e3bf097311bdfaa1f47c9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 Apr 2022 10:50:54 +0200
+Subject: ARM: dts: imx6ull-colibri: fix vqmmc regulator
+
+From: Max Krummenacher <max.krummenacher@toradex.com>
+
+[ Upstream commit 45974e4276a8d6653394f66666fc57d8ffa6de9a ]
+
+The correct spelling for the property is gpios. Otherwise, the regulator
+will neither reserve nor control any GPIOs. Thus, any SD/MMC card which
+can use UHS-I modes will fail.
+
+Fixes: c2e4987e0e02 ("ARM: dts: imx6ull: add Toradex Colibri iMX6ULL support")
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+Signed-off-by: Denys Drozdov <denys.drozdov@toradex.com>
+Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx6ull-colibri.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi b/arch/arm/boot/dts/imx6ull-colibri.dtsi
+index 4436556624d6..548cfcc7a01d 100644
+--- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
++++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
+@@ -37,7 +37,7 @@ reg_module_3v3_avdd: regulator-module-3v3-avdd {
+       reg_sd1_vmmc: regulator-sd1-vmmc {
+               compatible = "regulator-gpio";
+-              gpio = <&gpio5 9 GPIO_ACTIVE_HIGH>;
++              gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_snvs_reg_sd>;
+               regulator-always-on;
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-dts-logicpd-som-lv-fix-wrong-pinmuxing-on-omap35.patch b/queue-5.10/arm-dts-logicpd-som-lv-fix-wrong-pinmuxing-on-omap35.patch
new file mode 100644 (file)
index 0000000..f993478
--- /dev/null
@@ -0,0 +1,104 @@
+From e7cb79f113849801b2d249a7cf9e2bd93d0faffa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 3 Mar 2022 11:18:17 -0600
+Subject: ARM: dts: logicpd-som-lv: Fix wrong pinmuxing on OMAP35
+
+From: Adam Ford <aford173@gmail.com>
+
+[ Upstream commit 46ff3df87215ff42c0cd2c4bdb7d74540384a69c ]
+
+The pinout of the OMAP35 and DM37 variants of the SOM-LV are the
+same, but the macros which define the pinmuxing are different
+between OMAP3530 and DM3730.  The pinmuxing was correct for
+for the DM3730, but wrong for the OMAP3530.  Since the boot loader
+was correctly pin-muxing the pins, this was not obvious. As the
+bootloader not guaranteed to pinmux all the pins any more, this
+causes an issue, so the pinmux needs to be moved from a common
+file to their respective board files.
+
+Fixes: f8a2e3ff7103 ("ARM: dts: Add minimal support for LogicPD OMAP35xx SOM-LV devkit")
+Signed-off-by: Adam Ford <aford173@gmail.com>
+Message-Id: <20220303171818.11060-1-aford173@gmail.com>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/logicpd-som-lv-35xx-devkit.dts | 15 +++++++++++++++
+ arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts | 15 +++++++++++++++
+ arch/arm/boot/dts/logicpd-som-lv.dtsi            | 15 ---------------
+ 3 files changed, 30 insertions(+), 15 deletions(-)
+
+diff --git a/arch/arm/boot/dts/logicpd-som-lv-35xx-devkit.dts b/arch/arm/boot/dts/logicpd-som-lv-35xx-devkit.dts
+index 2a0a98fe67f0..3240c67e0c39 100644
+--- a/arch/arm/boot/dts/logicpd-som-lv-35xx-devkit.dts
++++ b/arch/arm/boot/dts/logicpd-som-lv-35xx-devkit.dts
+@@ -11,3 +11,18 @@ / {
+       model = "LogicPD Zoom OMAP35xx SOM-LV Development Kit";
+       compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3430", "ti,omap3";
+ };
++
++&omap3_pmx_core2 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&hsusb2_2_pins>;
++      hsusb2_2_pins: pinmux_hsusb2_2_pins {
++              pinctrl-single,pins = <
++                      OMAP3430_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)            /* etk_d10.hsusb2_clk */
++                      OMAP3430_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)            /* etk_d11.hsusb2_stp */
++                      OMAP3430_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d12.hsusb2_dir */
++                      OMAP3430_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d13.hsusb2_nxt */
++                      OMAP3430_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d14.hsusb2_data0 */
++                      OMAP3430_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d15.hsusb2_data1 */
++              >;
++      };
++};
+diff --git a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts
+index a604d92221a4..c757f0d7781c 100644
+--- a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts
++++ b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts
+@@ -11,3 +11,18 @@ / {
+       model = "LogicPD Zoom DM3730 SOM-LV Development Kit";
+       compatible = "logicpd,dm3730-som-lv-devkit", "ti,omap3630", "ti,omap3";
+ };
++
++&omap3_pmx_core2 {
++      pinctrl-names = "default";
++      pinctrl-0 = <&hsusb2_2_pins>;
++      hsusb2_2_pins: pinmux_hsusb2_2_pins {
++              pinctrl-single,pins = <
++                      OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)            /* etk_d10.hsusb2_clk */
++                      OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)            /* etk_d11.hsusb2_stp */
++                      OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d12.hsusb2_dir */
++                      OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d13.hsusb2_nxt */
++                      OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d14.hsusb2_data0 */
++                      OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d15.hsusb2_data1 */
++              >;
++      };
++};
+diff --git a/arch/arm/boot/dts/logicpd-som-lv.dtsi b/arch/arm/boot/dts/logicpd-som-lv.dtsi
+index b56524cc7fe2..55b619c99e24 100644
+--- a/arch/arm/boot/dts/logicpd-som-lv.dtsi
++++ b/arch/arm/boot/dts/logicpd-som-lv.dtsi
+@@ -265,21 +265,6 @@ OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4)  /* sys_boot1.gpio_3 */
+       };
+ };
+-&omap3_pmx_core2 {
+-      pinctrl-names = "default";
+-      pinctrl-0 = <&hsusb2_2_pins>;
+-      hsusb2_2_pins: pinmux_hsusb2_2_pins {
+-              pinctrl-single,pins = <
+-                      OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)            /* etk_d10.hsusb2_clk */
+-                      OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)            /* etk_d11.hsusb2_stp */
+-                      OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d12.hsusb2_dir */
+-                      OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d13.hsusb2_nxt */
+-                      OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d14.hsusb2_data0 */
+-                      OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)    /* etk_d15.hsusb2_data1 */
+-              >;
+-      };
+-};
+-
+ &uart2 {
+       interrupts-extended = <&intc 73 &omap3_pmx_core OMAP3_UART2_RX>;
+       pinctrl-names = "default";
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-omap2-fix-refcount-leak-in-omap_gic_of_init.patch b/queue-5.10/arm-omap2-fix-refcount-leak-in-omap_gic_of_init.patch
new file mode 100644 (file)
index 0000000..df35b72
--- /dev/null
@@ -0,0 +1,42 @@
+From 0abd8a8e0c12d75c9150f70fe11942863390e880 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Mar 2022 10:43:01 +0000
+Subject: ARM: OMAP2+: Fix refcount leak in omap_gic_of_init
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 0f83e6b4161617014017a694888dd8743f46f071 ]
+
+The of_find_compatible_node() function returns a node pointer with
+refcount incremented, We should use of_node_put() on it when done
+Add the missing of_node_put() to release the refcount.
+
+Fixes: fd1c07861491 ("ARM: OMAP4: Fix the init code to have OMAP4460 errata available in DT build")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Message-Id: <20220309104302.18398-1-linmq006@gmail.com>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-omap2/omap4-common.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c
+index 5c3845730dbf..0b80f8bcd304 100644
+--- a/arch/arm/mach-omap2/omap4-common.c
++++ b/arch/arm/mach-omap2/omap4-common.c
+@@ -314,10 +314,12 @@ void __init omap_gic_of_init(void)
+       np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-gic");
+       gic_dist_base_addr = of_iomap(np, 0);
++      of_node_put(np);
+       WARN_ON(!gic_dist_base_addr);
+       np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-twd-timer");
+       twd_base = of_iomap(np, 0);
++      of_node_put(np);
+       WARN_ON(!twd_base);
+ skip_errata_init:
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm64-dts-imx8mn-ddr4-evk-describe-the-32.768-khz-pm.patch b/queue-5.10/arm64-dts-imx8mn-ddr4-evk-describe-the-32.768-khz-pm.patch
new file mode 100644 (file)
index 0000000..0d748c9
--- /dev/null
@@ -0,0 +1,45 @@
+From edfa9151a29066e66a8143e02a1789fdd26d9e04 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Apr 2022 14:47:31 -0300
+Subject: arm64: dts: imx8mn-ddr4-evk: Describe the 32.768 kHz PMIC clock
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit 0310b5aa0656a94102344f1e9ae2892e342a665d ]
+
+The ROHM BD71847 PMIC has a 32.768 kHz clock.
+
+Describe the PMIC clock to fix the following boot errors:
+
+bd718xx-clk bd71847-clk.1.auto: No parent clk found
+bd718xx-clk: probe of bd71847-clk.1.auto failed with error -22
+
+Based on the same fix done for imx8mm-evk as per commit
+a6a355ede574 ("arm64: dts: imx8mm-evk: Add 32.768 kHz clock to PMIC")
+
+Fixes: 3e44dd09736d ("arm64: dts: imx8mn-ddr4-evk: Add rohm,bd71847 PMIC support")
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts b/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
+index 7dfee715a2c4..d8ce217c6016 100644
+--- a/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
++++ b/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
+@@ -59,6 +59,10 @@ pmic@4b {
+               interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+               rohm,reset-snvs-powered;
++              #clock-cells = <0>;
++              clocks = <&osc_32k 0>;
++              clock-output-names = "clk-32k-out";
++
+               regulators {
+                       buck1_reg: BUCK1 {
+                               regulator-name = "buck1";
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm64-dts-meson-remove-cpu-opps-below-1ghz-for-g12b-.patch b/queue-5.10/arm64-dts-meson-remove-cpu-opps-below-1ghz-for-g12b-.patch
new file mode 100644 (file)
index 0000000..a6e2fe1
--- /dev/null
@@ -0,0 +1,146 @@
+From 5b93d41ae7e79c0dce7fed87e2bf116bcee7abb2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Feb 2022 10:06:37 +0000
+Subject: arm64: dts: meson: remove CPU opps below 1GHz for G12B boards
+
+From: Christian Hewitt <christianshewitt@gmail.com>
+
+[ Upstream commit 6c4d636bc00dc17c63ffb2a73a0da850240e26e3 ]
+
+Amlogic G12B devices experience CPU stalls and random board wedges when
+the system idles and CPU cores clock down to lower opp points. Recent
+vendor kernels include a change to remove 100-250MHz and other distro
+sources also remove the 500/667MHz points. Unless all 100-667Mhz opps
+are removed or the CPU governor forced to performance stalls are still
+observed, so let's remove them to improve stability and uptime.
+
+Fixes: b96d4e92709b ("arm64: dts: meson-g12b: support a311d and s922x cpu operating points")
+Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
+Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
+Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
+Link: https://lore.kernel.org/r/20220210100638.19130-2-christianshewitt@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../boot/dts/amlogic/meson-g12b-a311d.dtsi    | 40 -------------------
+ .../boot/dts/amlogic/meson-g12b-s922x.dtsi    | 40 -------------------
+ 2 files changed, 80 deletions(-)
+
+diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi
+index d61f43052a34..8e9ad1e51d66 100644
+--- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi
++++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d.dtsi
+@@ -11,26 +11,6 @@ cpu_opp_table_0: opp-table-0 {
+               compatible = "operating-points-v2";
+               opp-shared;
+-              opp-100000000 {
+-                      opp-hz = /bits/ 64 <100000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-250000000 {
+-                      opp-hz = /bits/ 64 <250000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-500000000 {
+-                      opp-hz = /bits/ 64 <500000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-667000000 {
+-                      opp-hz = /bits/ 64 <667000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <761000>;
+@@ -71,26 +51,6 @@ cpub_opp_table_1: opp-table-1 {
+               compatible = "operating-points-v2";
+               opp-shared;
+-              opp-100000000 {
+-                      opp-hz = /bits/ 64 <100000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-250000000 {
+-                      opp-hz = /bits/ 64 <250000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-500000000 {
+-                      opp-hz = /bits/ 64 <500000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-667000000 {
+-                      opp-hz = /bits/ 64 <667000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <731000>;
+diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi
+index 1e5d0ee5d541..44c23c984034 100644
+--- a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi
++++ b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x.dtsi
+@@ -11,26 +11,6 @@ cpu_opp_table_0: opp-table-0 {
+               compatible = "operating-points-v2";
+               opp-shared;
+-              opp-100000000 {
+-                      opp-hz = /bits/ 64 <100000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-250000000 {
+-                      opp-hz = /bits/ 64 <250000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-500000000 {
+-                      opp-hz = /bits/ 64 <500000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+-              opp-667000000 {
+-                      opp-hz = /bits/ 64 <667000000>;
+-                      opp-microvolt = <731000>;
+-              };
+-
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <731000>;
+@@ -76,26 +56,6 @@ cpub_opp_table_1: opp-table-1 {
+               compatible = "operating-points-v2";
+               opp-shared;
+-              opp-100000000 {
+-                      opp-hz = /bits/ 64 <100000000>;
+-                      opp-microvolt = <751000>;
+-              };
+-
+-              opp-250000000 {
+-                      opp-hz = /bits/ 64 <250000000>;
+-                      opp-microvolt = <751000>;
+-              };
+-
+-              opp-500000000 {
+-                      opp-hz = /bits/ 64 <500000000>;
+-                      opp-microvolt = <751000>;
+-              };
+-
+-              opp-667000000 {
+-                      opp-hz = /bits/ 64 <667000000>;
+-                      opp-microvolt = <751000>;
+-              };
+-
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <771000>;
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm64-dts-meson-remove-cpu-opps-below-1ghz-for-sm1-b.patch b/queue-5.10/arm64-dts-meson-remove-cpu-opps-below-1ghz-for-sm1-b.patch
new file mode 100644 (file)
index 0000000..65ee52c
--- /dev/null
@@ -0,0 +1,60 @@
+From aec9cf08eac0c0bb9d781072f391f0db1749694b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Feb 2022 10:06:38 +0000
+Subject: arm64: dts: meson: remove CPU opps below 1GHz for SM1 boards
+
+From: Christian Hewitt <christianshewitt@gmail.com>
+
+[ Upstream commit fd86d85401c2049f652293877c0f7e6e5afc3bbc ]
+
+Amlogic SM1 devices experience CPU stalls and random board wedges when
+the system idles and CPU cores clock down to lower opp points. Recent
+vendor kernels include a change to remove 100-250MHz and other distro
+sources also remove the 500/667MHz points. Unless all 100-667Mhz opps
+are removed or the CPU governor forced to performance stalls are still
+observed, so let's remove them to improve stability and uptime.
+
+Fixes: 3d9e76483049 ("arm64: dts: meson-sm1-sei610: enable DVFS")
+Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
+Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
+Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
+Link: https://lore.kernel.org/r/20220210100638.19130-3-christianshewitt@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 20 --------------------
+ 1 file changed, 20 deletions(-)
+
+diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
+index c309517abae3..defe0b8d4d27 100644
+--- a/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
++++ b/arch/arm64/boot/dts/amlogic/meson-sm1.dtsi
+@@ -95,26 +95,6 @@ cpu_opp_table: opp-table {
+               compatible = "operating-points-v2";
+               opp-shared;
+-              opp-100000000 {
+-                      opp-hz = /bits/ 64 <100000000>;
+-                      opp-microvolt = <730000>;
+-              };
+-
+-              opp-250000000 {
+-                      opp-hz = /bits/ 64 <250000000>;
+-                      opp-microvolt = <730000>;
+-              };
+-
+-              opp-500000000 {
+-                      opp-hz = /bits/ 64 <500000000>;
+-                      opp-microvolt = <730000>;
+-              };
+-
+-              opp-667000000 {
+-                      opp-hz = /bits/ 64 <666666666>;
+-                      opp-microvolt = <750000>;
+-              };
+-
+               opp-1000000000 {
+                       opp-hz = /bits/ 64 <1000000000>;
+                       opp-microvolt = <770000>;
+-- 
+2.35.1
+
diff --git a/queue-5.10/asoc-intel-soc-acpi-correct-device-endpoints-for-max.patch b/queue-5.10/asoc-intel-soc-acpi-correct-device-endpoints-for-max.patch
new file mode 100644 (file)
index 0000000..d5421b3
--- /dev/null
@@ -0,0 +1,46 @@
+From f8323f0161abf8c841f46b632d34e206c3ef883c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Apr 2022 14:23:41 -0500
+Subject: ASoC: Intel: soc-acpi: correct device endpoints for max98373
+
+From: Chao Song <chao.song@linux.intel.com>
+
+[ Upstream commit 97326be14df7bacc6ba5c62c0556298c27ea0432 ]
+
+The left speaker of max98373 uses spk_r_endpoint, and right
+speaker uses spk_l_endpoint, this is obviously wrong.
+
+This patch corrects the endpoints for max98373 codec.
+
+Signed-off-by: Chao Song <chao.song@linux.intel.com>
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Link: https://lore.kernel.org/r/20220406192341.271465-1-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/intel/common/soc-acpi-intel-tgl-match.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/intel/common/soc-acpi-intel-tgl-match.c b/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
+index 9f243e60b95c..15d862cdcd2f 100644
+--- a/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
++++ b/sound/soc/intel/common/soc-acpi-intel-tgl-match.c
+@@ -126,13 +126,13 @@ static const struct snd_soc_acpi_adr_device mx8373_1_adr[] = {
+       {
+               .adr = 0x000123019F837300,
+               .num_endpoints = 1,
+-              .endpoints = &spk_l_endpoint,
++              .endpoints = &spk_r_endpoint,
+               .name_prefix = "Right"
+       },
+       {
+               .adr = 0x000127019F837300,
+               .num_endpoints = 1,
+-              .endpoints = &spk_r_endpoint,
++              .endpoints = &spk_l_endpoint,
+               .name_prefix = "Left"
+       }
+ };
+-- 
+2.35.1
+
diff --git a/queue-5.10/asoc-wm8731-disable-the-regulator-when-probing-fails.patch b/queue-5.10/asoc-wm8731-disable-the-regulator-when-probing-fails.patch
new file mode 100644 (file)
index 0000000..c18d436
--- /dev/null
@@ -0,0 +1,90 @@
+From 4a37293a13fbb2e2b87d5f232bc35dbbdeebf4ed Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Apr 2022 20:10:38 +0800
+Subject: ASoC: wm8731: Disable the regulator when probing fails
+
+From: Zheyu Ma <zheyuma97@gmail.com>
+
+[ Upstream commit 92ccbf17eeacf510cf1eed9c252d9332ca24f02d ]
+
+When the driver fails during probing, the driver should disable the
+regulator, not just handle it in wm8731_hw_init().
+
+The following log reveals it:
+
+[   17.812483] WARNING: CPU: 1 PID: 364 at drivers/regulator/core.c:2257 _regulator_put+0x3ec/0x4e0
+[   17.815958] RIP: 0010:_regulator_put+0x3ec/0x4e0
+[   17.824467] Call Trace:
+[   17.824774]  <TASK>
+[   17.825040]  regulator_bulk_free+0x82/0xe0
+[   17.825514]  devres_release_group+0x319/0x3d0
+[   17.825882]  i2c_device_probe+0x766/0x940
+[   17.829198]  i2c_register_driver+0xb5/0x130
+
+Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
+Link: https://lore.kernel.org/r/20220405121038.4094051-1-zheyuma97@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/wm8731.c | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
+index 304bf725a613..24a009d73f1e 100644
+--- a/sound/soc/codecs/wm8731.c
++++ b/sound/soc/codecs/wm8731.c
+@@ -602,7 +602,7 @@ static int wm8731_hw_init(struct device *dev, struct wm8731_priv *wm8731)
+       ret = wm8731_reset(wm8731->regmap);
+       if (ret < 0) {
+               dev_err(dev, "Failed to issue reset: %d\n", ret);
+-              goto err_regulator_enable;
++              goto err;
+       }
+       /* Clear POWEROFF, keep everything else disabled */
+@@ -619,10 +619,7 @@ static int wm8731_hw_init(struct device *dev, struct wm8731_priv *wm8731)
+       regcache_mark_dirty(wm8731->regmap);
+-err_regulator_enable:
+-      /* Regulators will be enabled by bias management */
+-      regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
+-
++err:
+       return ret;
+ }
+@@ -766,21 +763,27 @@ static int wm8731_i2c_probe(struct i2c_client *i2c,
+               ret = PTR_ERR(wm8731->regmap);
+               dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
+                       ret);
+-              return ret;
++              goto err_regulator_enable;
+       }
+       ret = wm8731_hw_init(&i2c->dev, wm8731);
+       if (ret != 0)
+-              return ret;
++              goto err_regulator_enable;
+       ret = devm_snd_soc_register_component(&i2c->dev,
+                       &soc_component_dev_wm8731, &wm8731_dai, 1);
+       if (ret != 0) {
+               dev_err(&i2c->dev, "Failed to register CODEC: %d\n", ret);
+-              return ret;
++              goto err_regulator_enable;
+       }
+       return 0;
++
++err_regulator_enable:
++      /* Regulators will be enabled by bias management */
++      regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
++
++      return ret;
+ }
+ static int wm8731_i2c_remove(struct i2c_client *client)
+-- 
+2.35.1
+
diff --git a/queue-5.10/bnx2x-fix-napi-api-usage-sequence.patch b/queue-5.10/bnx2x-fix-napi-api-usage-sequence.patch
new file mode 100644 (file)
index 0000000..838df23
--- /dev/null
@@ -0,0 +1,152 @@
+From f04469691d208d67588716f686d3d0c80e25648d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 08:39:13 -0700
+Subject: bnx2x: fix napi API usage sequence
+
+From: Manish Chopra <manishc@marvell.com>
+
+[ Upstream commit af68656d66eda219b7f55ce8313a1da0312c79e1 ]
+
+While handling PCI errors (AER flow) driver tries to
+disable NAPI [napi_disable()] after NAPI is deleted
+[__netif_napi_del()] which causes unexpected system
+hang/crash.
+
+System message log shows the following:
+=======================================
+[ 3222.537510] EEH: Detected PCI bus error on PHB#384-PE#800000 [ 3222.537511] EEH: This PCI device has failed 2 times in the last hour and will be permanently disabled after 5 failures.
+[ 3222.537512] EEH: Notify device drivers to shutdown [ 3222.537513] EEH: Beginning: 'error_detected(IO frozen)'
+[ 3222.537514] EEH: PE#800000 (PCI 0384:80:00.0): Invoking
+bnx2x->error_detected(IO frozen)
+[ 3222.537516] bnx2x: [bnx2x_io_error_detected:14236(eth14)]IO error detected [ 3222.537650] EEH: PE#800000 (PCI 0384:80:00.0): bnx2x driver reports:
+'need reset'
+[ 3222.537651] EEH: PE#800000 (PCI 0384:80:00.1): Invoking
+bnx2x->error_detected(IO frozen)
+[ 3222.537651] bnx2x: [bnx2x_io_error_detected:14236(eth13)]IO error detected [ 3222.537729] EEH: PE#800000 (PCI 0384:80:00.1): bnx2x driver reports:
+'need reset'
+[ 3222.537729] EEH: Finished:'error_detected(IO frozen)' with aggregate recovery state:'need reset'
+[ 3222.537890] EEH: Collect temporary log [ 3222.583481] EEH: of node=0384:80:00.0 [ 3222.583519] EEH: PCI device/vendor: 168e14e4 [ 3222.583557] EEH: PCI cmd/status register: 00100140 [ 3222.583557] EEH: PCI-E capabilities and status follow:
+[ 3222.583744] EEH: PCI-E 00: 00020010 012c8da2 00095d5e 00455c82 [ 3222.583892] EEH: PCI-E 10: 10820000 00000000 00000000 00000000 [ 3222.583893] EEH: PCI-E 20: 00000000 [ 3222.583893] EEH: PCI-E AER capability register set follows:
+[ 3222.584079] EEH: PCI-E AER 00: 13c10001 00000000 00000000 00062030 [ 3222.584230] EEH: PCI-E AER 10: 00002000 000031c0 000001e0 00000000 [ 3222.584378] EEH: PCI-E AER 20: 00000000 00000000 00000000 00000000 [ 3222.584416] EEH: PCI-E AER 30: 00000000 00000000 [ 3222.584416] EEH: of node=0384:80:00.1 [ 3222.584454] EEH: PCI device/vendor: 168e14e4 [ 3222.584491] EEH: PCI cmd/status register: 00100140 [ 3222.584492] EEH: PCI-E capabilities and status follow:
+[ 3222.584677] EEH: PCI-E 00: 00020010 012c8da2 00095d5e 00455c82 [ 3222.584825] EEH: PCI-E 10: 10820000 00000000 00000000 00000000 [ 3222.584826] EEH: PCI-E 20: 00000000 [ 3222.584826] EEH: PCI-E AER capability register set follows:
+[ 3222.585011] EEH: PCI-E AER 00: 13c10001 00000000 00000000 00062030 [ 3222.585160] EEH: PCI-E AER 10: 00002000 000031c0 000001e0 00000000 [ 3222.585309] EEH: PCI-E AER 20: 00000000 00000000 00000000 00000000 [ 3222.585347] EEH: PCI-E AER 30: 00000000 00000000 [ 3222.586872] RTAS: event: 5, Type: Platform Error (224), Severity: 2 [ 3222.586873] EEH: Reset without hotplug activity [ 3224.762767] EEH: Beginning: 'slot_reset'
+[ 3224.762770] EEH: PE#800000 (PCI 0384:80:00.0): Invoking
+bnx2x->slot_reset()
+[ 3224.762771] bnx2x: [bnx2x_io_slot_reset:14271(eth14)]IO slot reset initializing...
+[ 3224.762887] bnx2x 0384:80:00.0: enabling device (0140 -> 0142) [ 3224.768157] bnx2x: [bnx2x_io_slot_reset:14287(eth14)]IO slot reset
+--> driver unload
+
+Uninterruptible tasks
+=====================
+crash> ps | grep UN
+     213      2  11  c000000004c89e00  UN   0.0       0      0  [eehd]
+     215      2   0  c000000004c80000  UN   0.0       0      0
+[kworker/0:2]
+    2196      1  28  c000000004504f00  UN   0.1   15936  11136  wickedd
+    4287      1   9  c00000020d076800  UN   0.0    4032   3008  agetty
+    4289      1  20  c00000020d056680  UN   0.0    7232   3840  agetty
+   32423      2  26  c00000020038c580  UN   0.0       0      0
+[kworker/26:3]
+   32871   4241  27  c0000002609ddd00  UN   0.1   18624  11648  sshd
+   32920  10130  16  c00000027284a100  UN   0.1   48512  12608  sendmail
+   33092  32987   0  c000000205218b00  UN   0.1   48512  12608  sendmail
+   33154   4567  16  c000000260e51780  UN   0.1   48832  12864  pickup
+   33209   4241  36  c000000270cb6500  UN   0.1   18624  11712  sshd
+   33473  33283   0  c000000205211480  UN   0.1   48512  12672  sendmail
+   33531   4241  37  c00000023c902780  UN   0.1   18624  11648  sshd
+
+EEH handler hung while bnx2x sleeping and holding RTNL lock
+===========================================================
+crash> bt 213
+PID: 213    TASK: c000000004c89e00  CPU: 11  COMMAND: "eehd"
+  #0 [c000000004d477e0] __schedule at c000000000c70808
+  #1 [c000000004d478b0] schedule at c000000000c70ee0
+  #2 [c000000004d478e0] schedule_timeout at c000000000c76dec
+  #3 [c000000004d479c0] msleep at c0000000002120cc
+  #4 [c000000004d479f0] napi_disable at c000000000a06448
+                                        ^^^^^^^^^^^^^^^^
+  #5 [c000000004d47a30] bnx2x_netif_stop at c0080000018dba94 [bnx2x]
+  #6 [c000000004d47a60] bnx2x_io_slot_reset at c0080000018a551c [bnx2x]
+  #7 [c000000004d47b20] eeh_report_reset at c00000000004c9bc
+  #8 [c000000004d47b90] eeh_pe_report at c00000000004d1a8
+  #9 [c000000004d47c40] eeh_handle_normal_event at c00000000004da64
+
+And the sleeping source code
+============================
+crash> dis -ls c000000000a06448
+FILE: ../net/core/dev.c
+LINE: 6702
+
+   6697  {
+   6698          might_sleep();
+   6699          set_bit(NAPI_STATE_DISABLE, &n->state);
+   6700
+   6701          while (test_and_set_bit(NAPI_STATE_SCHED, &n->state))
+* 6702                  msleep(1);
+   6703          while (test_and_set_bit(NAPI_STATE_NPSVC, &n->state))
+   6704                  msleep(1);
+   6705
+   6706          hrtimer_cancel(&n->timer);
+   6707
+   6708          clear_bit(NAPI_STATE_DISABLE, &n->state);
+   6709  }
+
+EEH calls into bnx2x twice based on the system log above, first through
+bnx2x_io_error_detected() and then bnx2x_io_slot_reset(), and executes
+the following call chains:
+
+bnx2x_io_error_detected()
+  +-> bnx2x_eeh_nic_unload()
+       +-> bnx2x_del_all_napi()
+            +-> __netif_napi_del()
+
+bnx2x_io_slot_reset()
+  +-> bnx2x_netif_stop()
+       +-> bnx2x_napi_disable()
+            +->napi_disable()
+
+Fix this by correcting the sequence of NAPI APIs usage,
+that is delete the NAPI after disabling it.
+
+Fixes: 7fa6f34081f1 ("bnx2x: AER revised")
+Reported-by: David Christensen <drc@linux.vnet.ibm.com>
+Tested-by: David Christensen <drc@linux.vnet.ibm.com>
+Signed-off-by: Manish Chopra <manishc@marvell.com>
+Signed-off-by: Ariel Elior <aelior@marvell.com>
+Link: https://lore.kernel.org/r/20220426153913.6966-1-manishc@marvell.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+index 6333471916be..afb6d3ee1f56 100644
+--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+@@ -14213,10 +14213,6 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
+       /* Stop Tx */
+       bnx2x_tx_disable(bp);
+-      /* Delete all NAPI objects */
+-      bnx2x_del_all_napi(bp);
+-      if (CNIC_LOADED(bp))
+-              bnx2x_del_all_napi_cnic(bp);
+       netdev_reset_tc(bp->dev);
+       del_timer_sync(&bp->timer);
+@@ -14321,6 +14317,11 @@ static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev)
+               bnx2x_drain_tx_queues(bp);
+               bnx2x_send_unload_req(bp, UNLOAD_RECOVERY);
+               bnx2x_netif_stop(bp, 1);
++              bnx2x_del_all_napi(bp);
++
++              if (CNIC_LOADED(bp))
++                      bnx2x_del_all_napi_cnic(bp);
++
+               bnx2x_free_irq(bp);
+               /* Report UNLOAD_DONE to MCP */
+-- 
+2.35.1
+
diff --git a/queue-5.10/bpf-lwt-fix-crash-when-using-bpf_skb_set_tunnel_key-.patch b/queue-5.10/bpf-lwt-fix-crash-when-using-bpf_skb_set_tunnel_key-.patch
new file mode 100644 (file)
index 0000000..bc172fc
--- /dev/null
@@ -0,0 +1,88 @@
+From 41780c0296605546f60a69087bcd14b8f4908e6c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 19:52:19 +0300
+Subject: bpf, lwt: Fix crash when using bpf_skb_set_tunnel_key() from bpf_xmit
+ lwt hook
+
+From: Eyal Birger <eyal.birger@gmail.com>
+
+[ Upstream commit b02d196c44ead1a5949729be9ff08fe781c3e48a ]
+
+xmit_check_hhlen() observes the dst for getting the device hard header
+length to make sure a modified packet can fit. When a helper which changes
+the dst - such as bpf_skb_set_tunnel_key() - is called as part of the
+xmit program the accessed dst is no longer valid.
+
+This leads to the following splat:
+
+ BUG: kernel NULL pointer dereference, address: 00000000000000de
+ #PF: supervisor read access in kernel mode
+ #PF: error_code(0x0000) - not-present page
+ PGD 0 P4D 0
+ Oops: 0000 [#1] PREEMPT SMP PTI
+ CPU: 0 PID: 798 Comm: ping Not tainted 5.18.0-rc2+ #103
+ Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
+ RIP: 0010:bpf_xmit+0xfb/0x17f
+ Code: c6 c0 4d cd 8e 48 c7 c7 7d 33 f0 8e e8 42 09 fb ff 48 8b 45 58 48 8b 95 c8 00 00 00 48 2b 95 c0 00 00 00 48 83 e0 fe 48 8b 00 <0f> b7 80 de 00 00 00 39 c2 73 22 29 d0 b9 20 0a 00 00 31 d2 48 89
+ RSP: 0018:ffffb148c0bc7b98 EFLAGS: 00010282
+ RAX: 0000000000000000 RBX: 0000000000240008 RCX: 0000000000000000
+ RDX: 0000000000000010 RSI: 00000000ffffffea RDI: 00000000ffffffff
+ RBP: ffff922a828a4e00 R08: ffffffff8f1350e8 R09: 00000000ffffdfff
+ R10: ffffffff8f055100 R11: ffffffff8f105100 R12: 0000000000000000
+ R13: ffff922a828a4e00 R14: 0000000000000040 R15: 0000000000000000
+ FS:  00007f414e8f0080(0000) GS:ffff922afdc00000(0000) knlGS:0000000000000000
+ CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+ CR2: 00000000000000de CR3: 0000000002d80006 CR4: 0000000000370ef0
+ Call Trace:
+  <TASK>
+  lwtunnel_xmit.cold+0x71/0xc8
+  ip_finish_output2+0x279/0x520
+  ? __ip_finish_output.part.0+0x21/0x130
+
+Fix by fetching the device hard header length before running the BPF code.
+
+Fixes: 3a0af8fd61f9 ("bpf: BPF for lightweight tunnel infrastructure")
+Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
+Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
+Link: https://lore.kernel.org/bpf/20220420165219.1755407-1-eyal.birger@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/core/lwt_bpf.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/net/core/lwt_bpf.c b/net/core/lwt_bpf.c
+index 2f7940bcf715..3fd207fe1284 100644
+--- a/net/core/lwt_bpf.c
++++ b/net/core/lwt_bpf.c
+@@ -158,10 +158,8 @@ static int bpf_output(struct net *net, struct sock *sk, struct sk_buff *skb)
+       return dst->lwtstate->orig_output(net, sk, skb);
+ }
+-static int xmit_check_hhlen(struct sk_buff *skb)
++static int xmit_check_hhlen(struct sk_buff *skb, int hh_len)
+ {
+-      int hh_len = skb_dst(skb)->dev->hard_header_len;
+-
+       if (skb_headroom(skb) < hh_len) {
+               int nhead = HH_DATA_ALIGN(hh_len - skb_headroom(skb));
+@@ -273,6 +271,7 @@ static int bpf_xmit(struct sk_buff *skb)
+       bpf = bpf_lwt_lwtunnel(dst->lwtstate);
+       if (bpf->xmit.prog) {
++              int hh_len = dst->dev->hard_header_len;
+               __be16 proto = skb->protocol;
+               int ret;
+@@ -290,7 +289,7 @@ static int bpf_xmit(struct sk_buff *skb)
+                       /* If the header was expanded, headroom might be too
+                        * small for L2 header to come, expand as needed.
+                        */
+-                      ret = xmit_check_hhlen(skb);
++                      ret = xmit_check_hhlen(skb, hh_len);
+                       if (unlikely(ret))
+                               return ret;
+-- 
+2.35.1
+
diff --git a/queue-5.10/bus-sunxi-rsb-fix-the-return-value-of-sunxi_rsb_devi.patch b/queue-5.10/bus-sunxi-rsb-fix-the-return-value-of-sunxi_rsb_devi.patch
new file mode 100644 (file)
index 0000000..2a79945
--- /dev/null
@@ -0,0 +1,43 @@
+From b154a79a8065d8f7310c5b602170d942141d12d5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 16:35:49 +0200
+Subject: bus: sunxi-rsb: Fix the return value of sunxi_rsb_device_create()
+
+From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+
+[ Upstream commit fff8c10368e64e7f8960f149375c12ca5f3b30af ]
+
+This code is really spurious.
+It always returns an ERR_PTR, even when err is known to be 0 and calls
+put_device() after a successful device_register() call.
+
+It is likely that the return statement in the normal path is missing.
+Add 'return rdev;' to fix it.
+
+Fixes: d787dcdb9c8f ("bus: sunxi-rsb: Add driver for Allwinner Reduced Serial Bus")
+Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
+Reviewed-by: Samuel Holland <samuel@sholland.org>
+Tested-by: Samuel Holland <samuel@sholland.org>
+Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Link: https://lore.kernel.org/r/ef2b9576350bba4c8e05e669e9535e9e2a415763.1650551719.git.christophe.jaillet@wanadoo.fr
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/bus/sunxi-rsb.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c
+index 1bb00a959c67..9b1a5e62417c 100644
+--- a/drivers/bus/sunxi-rsb.c
++++ b/drivers/bus/sunxi-rsb.c
+@@ -224,6 +224,8 @@ static struct sunxi_rsb_device *sunxi_rsb_device_create(struct sunxi_rsb *rsb,
+       dev_dbg(&rdev->dev, "device %s registered\n", dev_name(&rdev->dev));
++      return rdev;
++
+ err_device_add:
+       put_device(&rdev->dev);
+-- 
+2.35.1
+
diff --git a/queue-5.10/bus-ti-sysc-make-omap3-gpt12-quirk-handling-soc-spec.patch b/queue-5.10/bus-ti-sysc-make-omap3-gpt12-quirk-handling-soc-spec.patch
new file mode 100644 (file)
index 0000000..8655c73
--- /dev/null
@@ -0,0 +1,65 @@
+From 25464436c8e13e1853715d70edf7edea9883f1b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 12:26:51 +0300
+Subject: bus: ti-sysc: Make omap3 gpt12 quirk handling SoC specific
+
+From: Tony Lindgren <tony@atomide.com>
+
+[ Upstream commit a12315d6d27093392b6c634e1d35a59f1d1f7a59 ]
+
+On beagleboard revisions A to B4 we need to use gpt12 as the system timer.
+However, the quirk handling added for gpt12 caused a regression for system
+suspend for am335x as the PM coprocessor needs the timers idled for
+suspend.
+
+Let's make the gpt12 quirk specific to omap34xx, other SoCs don't need
+it. Beagleboard revisions C and later no longer need to use the gpt12
+related quirk. Then at some point, if we decide to drop support for the old
+beagleboard revisions A to B4, we can also drop the gpt12 related quirks
+completely.
+
+Fixes: 3ff340e24c9d ("bus: ti-sysc: Fix gpt12 system timer issue with reserved status")
+Reported-by: Kevin Hilman <khilman@baylibre.com>
+Suggested-by: Kevin Hilman <khilman@baylibre.com>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/bus/ti-sysc.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
+index 18f0650c5d40..ac559c262033 100644
+--- a/drivers/bus/ti-sysc.c
++++ b/drivers/bus/ti-sysc.c
+@@ -3130,13 +3130,27 @@ static int sysc_check_disabled_devices(struct sysc *ddata)
+  */
+ static int sysc_check_active_timer(struct sysc *ddata)
+ {
++      int error;
++
+       if (ddata->cap->type != TI_SYSC_OMAP2_TIMER &&
+           ddata->cap->type != TI_SYSC_OMAP4_TIMER)
+               return 0;
++      /*
++       * Quirk for omap3 beagleboard revision A to B4 to use gpt12.
++       * Revision C and later are fixed with commit 23885389dbbb ("ARM:
++       * dts: Fix timer regression for beagleboard revision c"). This all
++       * can be dropped if we stop supporting old beagleboard revisions
++       * A to B4 at some point.
++       */
++      if (sysc_soc->soc == SOC_3430)
++              error = -ENXIO;
++      else
++              error = -EBUSY;
++
+       if ((ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT) &&
+           (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE))
+-              return -ENXIO;
++              return error;
+       return 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/cifs-destage-any-unwritten-data-to-the-server-before.patch b/queue-5.10/cifs-destage-any-unwritten-data-to-the-server-before.patch
new file mode 100644 (file)
index 0000000..ac0a936
--- /dev/null
@@ -0,0 +1,59 @@
+From 8d4194f56cd3a0e1aeb83ed5c22c4141e3dff399 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 11:15:36 +1000
+Subject: cifs: destage any unwritten data to the server before calling
+ copychunk_write
+
+From: Ronnie Sahlberg <lsahlber@redhat.com>
+
+[ Upstream commit f5d0f921ea362636e4a2efb7c38d1ead373a8700 ]
+
+because the copychunk_write might cover a region of the file that has not yet
+been sent to the server and thus fail.
+
+A simple way to reproduce this is:
+truncate -s 0 /mnt/testfile; strace -f -o x -ttT xfs_io -i -f -c 'pwrite 0k 128k' -c 'fcollapse 16k 24k' /mnt/testfile
+
+the issue is that the 'pwrite 0k 128k' becomes rearranged on the wire with
+the 'fcollapse 16k 24k' due to write-back caching.
+
+fcollapse is implemented in cifs.ko as a SMB2 IOCTL(COPYCHUNK_WRITE) call
+and it will fail serverside since the file is still 0b in size serverside
+until the writes have been destaged.
+To avoid this we must ensure that we destage any unwritten data to the
+server before calling COPYCHUNK_WRITE.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1997373
+Reported-by: Xiaoli Feng <xifeng@redhat.com>
+Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/cifs/smb2ops.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
+index 0e8f484031da..c758ff41b638 100644
+--- a/fs/cifs/smb2ops.c
++++ b/fs/cifs/smb2ops.c
+@@ -1744,9 +1744,17 @@ smb2_copychunk_range(const unsigned int xid,
+       int chunks_copied = 0;
+       bool chunk_sizes_updated = false;
+       ssize_t bytes_written, total_bytes_written = 0;
++      struct inode *inode;
+       pcchunk = kmalloc(sizeof(struct copychunk_ioctl), GFP_KERNEL);
++      /*
++       * We need to flush all unwritten data before we can send the
++       * copychunk ioctl to the server.
++       */
++      inode = d_inode(trgtfile->dentry);
++      filemap_write_and_wait(inode->i_mapping);
++
+       if (pcchunk == NULL)
+               return -ENOMEM;
+-- 
+2.35.1
+
diff --git a/queue-5.10/clk-sunxi-sun9i-mmc-check-return-value-after-calling.patch b/queue-5.10/clk-sunxi-sun9i-mmc-check-return-value-after-calling.patch
new file mode 100644 (file)
index 0000000..2cf544f
--- /dev/null
@@ -0,0 +1,39 @@
+From 68d936017ab809e64b541fd881e3adb70da627a3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 21:43:08 +0800
+Subject: clk: sunxi: sun9i-mmc: check return value after calling
+ platform_get_resource()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit f58ca215cda1975f77b2b762903684a3c101bec9 ]
+
+It will cause null-ptr-deref if platform_get_resource() returns NULL,
+we need check the return value.
+
+Fixes: 7a6fca879f59 ("clk: sunxi: Add driver for A80 MMC config clocks/resets")
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Reviewed-by: Samuel Holland <samuel@sholland.org>
+Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
+Link: https://lore.kernel.org/r/20220421134308.2885094-1-yangyingliang@huawei.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/sunxi/clk-sun9i-mmc.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/clk/sunxi/clk-sun9i-mmc.c b/drivers/clk/sunxi/clk-sun9i-mmc.c
+index 542b31d6e96d..636bcf2439ef 100644
+--- a/drivers/clk/sunxi/clk-sun9i-mmc.c
++++ b/drivers/clk/sunxi/clk-sun9i-mmc.c
+@@ -109,6 +109,8 @@ static int sun9i_a80_mmc_config_clk_probe(struct platform_device *pdev)
+       spin_lock_init(&data->lock);
+       r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!r)
++              return -EINVAL;
+       /* one clock/reset pair per word */
+       count = DIV_ROUND_UP((resource_size(r)), SUN9I_MMC_WIDTH);
+       data->membase = devm_ioremap_resource(&pdev->dev, r);
+-- 
+2.35.1
+
diff --git a/queue-5.10/cpufreq-fix-memory-leak-in-sun50i_cpufreq_nvmem_prob.patch b/queue-5.10/cpufreq-fix-memory-leak-in-sun50i_cpufreq_nvmem_prob.patch
new file mode 100644 (file)
index 0000000..7179ae1
--- /dev/null
@@ -0,0 +1,64 @@
+From 366a777abc991f61e17833741d5cdbf26ec55f5f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 23 Apr 2022 15:12:04 +0000
+Subject: cpufreq: fix memory leak in sun50i_cpufreq_nvmem_probe
+
+From: Xiaobing Luo <luoxiaobing0926@gmail.com>
+
+[ Upstream commit 1aa24a8f3b5133dae4bc1e57427e345445f3e902 ]
+
+--------------------------------------------
+unreferenced object 0xffff000010742a00 (size 128):
+  comm "swapper/0", pid 1, jiffies 4294902015 (age 1187.652s)
+  hex dump (first 32 bytes):
+    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
+    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
+  backtrace:
+    [<00000000b4dfebaa>] __kmalloc+0x338/0x474
+    [<00000000d6e716db>] sun50i_cpufreq_nvmem_probe+0xc4/0x36c
+    [<000000007d6082a0>] platform_probe+0x98/0x11c
+    [<00000000c990f549>] really_probe+0x234/0x5a0
+    [<000000002d9fecc6>] __driver_probe_device+0x194/0x224
+    [<00000000cf0b94fa>] driver_probe_device+0x64/0x13c
+    [<00000000f238e4cf>] __device_attach_driver+0xf8/0x180
+    [<000000006720e418>] bus_for_each_drv+0xf8/0x160
+    [<00000000df4f14f6>] __device_attach+0x174/0x29c
+    [<00000000782002fb>] device_initial_probe+0x20/0x30
+    [<00000000c2681b06>] bus_probe_device+0xfc/0x110
+    [<00000000964cf3bd>] device_add+0x5f0/0xcd0
+    [<000000004b9264e3>] platform_device_add+0x198/0x390
+    [<00000000fa82a9d0>] platform_device_register_full+0x178/0x210
+    [<000000009a5daf13>] sun50i_cpufreq_init+0xf8/0x168
+    [<000000000377cc7c>] do_one_initcall+0xe4/0x570
+--------------------------------------------
+
+if sun50i_cpufreq_get_efuse failed, then opp_tables leak.
+
+Fixes: f328584f7bff ("cpufreq: Add sun50i nvmem based CPU scaling driver")
+Signed-off-by: Xiaobing Luo <luoxiaobing0926@gmail.com>
+Reviewed-by: Samuel Holland <samuel@sholland.org>
+Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/sun50i-cpufreq-nvmem.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/cpufreq/sun50i-cpufreq-nvmem.c b/drivers/cpufreq/sun50i-cpufreq-nvmem.c
+index 2deed8d8773f..75e1bf3a08f7 100644
+--- a/drivers/cpufreq/sun50i-cpufreq-nvmem.c
++++ b/drivers/cpufreq/sun50i-cpufreq-nvmem.c
+@@ -98,8 +98,10 @@ static int sun50i_cpufreq_nvmem_probe(struct platform_device *pdev)
+               return -ENOMEM;
+       ret = sun50i_cpufreq_get_efuse(&speed);
+-      if (ret)
++      if (ret) {
++              kfree(opp_tables);
+               return ret;
++      }
+       snprintf(name, MAX_NAME_LEN, "speed%d", speed);
+-- 
+2.35.1
+
diff --git a/queue-5.10/drivers-net-hippi-fix-deadlock-in-rr_close.patch b/queue-5.10/drivers-net-hippi-fix-deadlock-in-rr_close.patch
new file mode 100644 (file)
index 0000000..dbbfe80
--- /dev/null
@@ -0,0 +1,53 @@
+From 146111b7597d317368afe5efaa8773fb709072a9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 Apr 2022 20:55:19 +0800
+Subject: drivers: net: hippi: Fix deadlock in rr_close()
+
+From: Duoming Zhou <duoming@zju.edu.cn>
+
+[ Upstream commit bc6de2878429e85c1f1afaa566f7b5abb2243eef ]
+
+There is a deadlock in rr_close(), which is shown below:
+
+   (Thread 1)                |      (Thread 2)
+                             | rr_open()
+rr_close()                   |  add_timer()
+ spin_lock_irqsave() //(1)   |  (wait a time)
+ ...                         | rr_timer()
+ del_timer_sync()            |  spin_lock_irqsave() //(2)
+ (wait timer to stop)        |  ...
+
+We hold rrpriv->lock in position (1) of thread 1 and
+use del_timer_sync() to wait timer to stop, but timer handler
+also need rrpriv->lock in position (2) of thread 2.
+As a result, rr_close() will block forever.
+
+This patch extracts del_timer_sync() from the protection of
+spin_lock_irqsave(), which could let timer handler to obtain
+the needed lock.
+
+Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
+Link: https://lore.kernel.org/r/20220417125519.82618-1-duoming@zju.edu.cn
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/hippi/rrunner.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
+index 22010384c4a3..b9646b369f8e 100644
+--- a/drivers/net/hippi/rrunner.c
++++ b/drivers/net/hippi/rrunner.c
+@@ -1353,7 +1353,9 @@ static int rr_close(struct net_device *dev)
+       rrpriv->fw_running = 0;
++      spin_unlock_irqrestore(&rrpriv->lock, flags);
+       del_timer_sync(&rrpriv->timer);
++      spin_lock_irqsave(&rrpriv->lock, flags);
+       writel(0, &regs->TxPi);
+       writel(0, &regs->IpRxPi);
+-- 
+2.35.1
+
diff --git a/queue-5.10/drm-amd-display-fix-memory-leak-in-dcn21_clock_sourc.patch b/queue-5.10/drm-amd-display-fix-memory-leak-in-dcn21_clock_sourc.patch
new file mode 100644 (file)
index 0000000..505c8d4
--- /dev/null
@@ -0,0 +1,34 @@
+From 74331d39c4f7e2bcf1410d37985bd5cb6d06ba9a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 17:03:09 +0800
+Subject: drm/amd/display: Fix memory leak in dcn21_clock_source_create
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 65e54987508b6f0771f56bdfa3ee1926d52785ae ]
+
+When dcn20_clk_src_construct() fails, we need to release clk_src.
+
+Fixes: 6f4e6361c3ff ("drm/amd/display: Add Renoir resource (v2)")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
+index 7ed4d7c8734f..01c4e8753294 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
+@@ -1267,6 +1267,7 @@ static struct clock_source *dcn21_clock_source_create(
+               return &clk_src->base;
+       }
++      kfree(clk_src);
+       BREAK_TO_DEBUGGER();
+       return NULL;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/drm-amdkfd-fix-gws-queue-count.patch b/queue-5.10/drm-amdkfd-fix-gws-queue-count.patch
new file mode 100644 (file)
index 0000000..de9a16f
--- /dev/null
@@ -0,0 +1,222 @@
+From 40c1ff0ab3c017f96d17a5b342edf3ba9f65e221 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Apr 2022 11:55:58 -0400
+Subject: drm/amdkfd: Fix GWS queue count
+
+From: David Yat Sin <david.yatsin@amd.com>
+
+[ Upstream commit 7c6b6e18c890f30965b0589b0a57645e1dbccfde ]
+
+dqm->gws_queue_count and pdd->qpd.mapped_gws_queue need to be updated
+each time the queue gets evicted.
+
+Fixes: b8020b0304c8 ("drm/amdkfd: Enable over-subscription with >1 GWS queue")
+Signed-off-by: David Yat Sin <david.yatsin@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../drm/amd/amdkfd/kfd_device_queue_manager.c | 83 +++++++++----------
+ 1 file changed, 37 insertions(+), 46 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+index 2645ebc63a14..195b7e02dc4b 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -138,19 +138,33 @@ void program_sh_mem_settings(struct device_queue_manager *dqm,
+ }
+ static void increment_queue_count(struct device_queue_manager *dqm,
+-                      enum kfd_queue_type type)
++                                struct qcm_process_device *qpd,
++                                struct queue *q)
+ {
+       dqm->active_queue_count++;
+-      if (type == KFD_QUEUE_TYPE_COMPUTE || type == KFD_QUEUE_TYPE_DIQ)
++      if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE ||
++          q->properties.type == KFD_QUEUE_TYPE_DIQ)
+               dqm->active_cp_queue_count++;
++
++      if (q->properties.is_gws) {
++              dqm->gws_queue_count++;
++              qpd->mapped_gws_queue = true;
++      }
+ }
+ static void decrement_queue_count(struct device_queue_manager *dqm,
+-                      enum kfd_queue_type type)
++                                struct qcm_process_device *qpd,
++                                struct queue *q)
+ {
+       dqm->active_queue_count--;
+-      if (type == KFD_QUEUE_TYPE_COMPUTE || type == KFD_QUEUE_TYPE_DIQ)
++      if (q->properties.type == KFD_QUEUE_TYPE_COMPUTE ||
++          q->properties.type == KFD_QUEUE_TYPE_DIQ)
+               dqm->active_cp_queue_count--;
++
++      if (q->properties.is_gws) {
++              dqm->gws_queue_count--;
++              qpd->mapped_gws_queue = false;
++      }
+ }
+ static int allocate_doorbell(struct qcm_process_device *qpd, struct queue *q)
+@@ -377,7 +391,7 @@ static int create_queue_nocpsch(struct device_queue_manager *dqm,
+       list_add(&q->list, &qpd->queues_list);
+       qpd->queue_count++;
+       if (q->properties.is_active)
+-              increment_queue_count(dqm, q->properties.type);
++              increment_queue_count(dqm, qpd, q);
+       /*
+        * Unconditionally increment this counter, regardless of the queue's
+@@ -502,13 +516,8 @@ static int destroy_queue_nocpsch_locked(struct device_queue_manager *dqm,
+               deallocate_vmid(dqm, qpd, q);
+       }
+       qpd->queue_count--;
+-      if (q->properties.is_active) {
+-              decrement_queue_count(dqm, q->properties.type);
+-              if (q->properties.is_gws) {
+-                      dqm->gws_queue_count--;
+-                      qpd->mapped_gws_queue = false;
+-              }
+-      }
++      if (q->properties.is_active)
++              decrement_queue_count(dqm, qpd, q);
+       return retval;
+ }
+@@ -598,12 +607,11 @@ static int update_queue(struct device_queue_manager *dqm, struct queue *q)
+        * dqm->active_queue_count to determine whether a new runlist must be
+        * uploaded.
+        */
+-      if (q->properties.is_active && !prev_active)
+-              increment_queue_count(dqm, q->properties.type);
+-      else if (!q->properties.is_active && prev_active)
+-              decrement_queue_count(dqm, q->properties.type);
+-
+-      if (q->gws && !q->properties.is_gws) {
++      if (q->properties.is_active && !prev_active) {
++              increment_queue_count(dqm, &pdd->qpd, q);
++      } else if (!q->properties.is_active && prev_active) {
++              decrement_queue_count(dqm, &pdd->qpd, q);
++      } else if (q->gws && !q->properties.is_gws) {
+               if (q->properties.is_active) {
+                       dqm->gws_queue_count++;
+                       pdd->qpd.mapped_gws_queue = true;
+@@ -665,11 +673,7 @@ static int evict_process_queues_nocpsch(struct device_queue_manager *dqm,
+               mqd_mgr = dqm->mqd_mgrs[get_mqd_type_from_queue_type(
+                               q->properties.type)];
+               q->properties.is_active = false;
+-              decrement_queue_count(dqm, q->properties.type);
+-              if (q->properties.is_gws) {
+-                      dqm->gws_queue_count--;
+-                      qpd->mapped_gws_queue = false;
+-              }
++              decrement_queue_count(dqm, qpd, q);
+               if (WARN_ONCE(!dqm->sched_running, "Evict when stopped\n"))
+                       continue;
+@@ -713,7 +717,7 @@ static int evict_process_queues_cpsch(struct device_queue_manager *dqm,
+                       continue;
+               q->properties.is_active = false;
+-              decrement_queue_count(dqm, q->properties.type);
++              decrement_queue_count(dqm, qpd, q);
+       }
+       pdd->last_evict_timestamp = get_jiffies_64();
+       retval = execute_queues_cpsch(dqm,
+@@ -784,11 +788,7 @@ static int restore_process_queues_nocpsch(struct device_queue_manager *dqm,
+               mqd_mgr = dqm->mqd_mgrs[get_mqd_type_from_queue_type(
+                               q->properties.type)];
+               q->properties.is_active = true;
+-              increment_queue_count(dqm, q->properties.type);
+-              if (q->properties.is_gws) {
+-                      dqm->gws_queue_count++;
+-                      qpd->mapped_gws_queue = true;
+-              }
++              increment_queue_count(dqm, qpd, q);
+               if (WARN_ONCE(!dqm->sched_running, "Restore when stopped\n"))
+                       continue;
+@@ -846,7 +846,7 @@ static int restore_process_queues_cpsch(struct device_queue_manager *dqm,
+                       continue;
+               q->properties.is_active = true;
+-              increment_queue_count(dqm, q->properties.type);
++              increment_queue_count(dqm, &pdd->qpd, q);
+       }
+       retval = execute_queues_cpsch(dqm,
+                               KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
+@@ -1247,7 +1247,7 @@ static int create_kernel_queue_cpsch(struct device_queue_manager *dqm,
+                       dqm->total_queue_count);
+       list_add(&kq->list, &qpd->priv_queue_list);
+-      increment_queue_count(dqm, kq->queue->properties.type);
++      increment_queue_count(dqm, qpd, kq->queue);
+       qpd->is_debug = true;
+       execute_queues_cpsch(dqm, KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
+       dqm_unlock(dqm);
+@@ -1261,7 +1261,7 @@ static void destroy_kernel_queue_cpsch(struct device_queue_manager *dqm,
+ {
+       dqm_lock(dqm);
+       list_del(&kq->list);
+-      decrement_queue_count(dqm, kq->queue->properties.type);
++      decrement_queue_count(dqm, qpd, kq->queue);
+       qpd->is_debug = false;
+       execute_queues_cpsch(dqm, KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES, 0);
+       /*
+@@ -1328,7 +1328,7 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q,
+       qpd->queue_count++;
+       if (q->properties.is_active) {
+-              increment_queue_count(dqm, q->properties.type);
++              increment_queue_count(dqm, qpd, q);
+               execute_queues_cpsch(dqm,
+                               KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
+@@ -1513,15 +1513,11 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm,
+       list_del(&q->list);
+       qpd->queue_count--;
+       if (q->properties.is_active) {
+-              decrement_queue_count(dqm, q->properties.type);
++              decrement_queue_count(dqm, qpd, q);
+               retval = execute_queues_cpsch(dqm,
+                               KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0);
+               if (retval == -ETIME)
+                       qpd->reset_wavefronts = true;
+-              if (q->properties.is_gws) {
+-                      dqm->gws_queue_count--;
+-                      qpd->mapped_gws_queue = false;
+-              }
+       }
+       /*
+@@ -1732,7 +1728,7 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
+       /* Clean all kernel queues */
+       list_for_each_entry_safe(kq, kq_next, &qpd->priv_queue_list, list) {
+               list_del(&kq->list);
+-              decrement_queue_count(dqm, kq->queue->properties.type);
++              decrement_queue_count(dqm, qpd, kq->queue);
+               qpd->is_debug = false;
+               dqm->total_queue_count--;
+               filter = KFD_UNMAP_QUEUES_FILTER_ALL_QUEUES;
+@@ -1745,13 +1741,8 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
+               else if (q->properties.type == KFD_QUEUE_TYPE_SDMA_XGMI)
+                       deallocate_sdma_queue(dqm, q);
+-              if (q->properties.is_active) {
+-                      decrement_queue_count(dqm, q->properties.type);
+-                      if (q->properties.is_gws) {
+-                              dqm->gws_queue_count--;
+-                              qpd->mapped_gws_queue = false;
+-                      }
+-              }
++              if (q->properties.is_active)
++                      decrement_queue_count(dqm, qpd, q);
+               dqm->total_queue_count--;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.10/ext4-fix-bug_on-in-start_this_handle-during-umount-f.patch b/queue-5.10/ext4-fix-bug_on-in-start_this_handle-during-umount-f.patch
new file mode 100644 (file)
index 0000000..09bd757
--- /dev/null
@@ -0,0 +1,114 @@
+From d406fd2db62294f9e5b0d576049388bd499b215e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Mar 2022 09:24:19 +0800
+Subject: ext4: fix bug_on in start_this_handle during umount filesystem
+
+From: Ye Bin <yebin10@huawei.com>
+
+[ Upstream commit b98535d091795a79336f520b0708457aacf55c67 ]
+
+We got issue as follows:
+------------[ cut here ]------------
+kernel BUG at fs/jbd2/transaction.c:389!
+invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
+CPU: 9 PID: 131 Comm: kworker/9:1 Not tainted 5.17.0-862.14.0.6.x86_64-00001-g23f87daf7d74-dirty #197
+Workqueue: events flush_stashed_error_work
+RIP: 0010:start_this_handle+0x41c/0x1160
+RSP: 0018:ffff888106b47c20 EFLAGS: 00010202
+RAX: ffffed10251b8400 RBX: ffff888128dc204c RCX: ffffffffb52972ac
+RDX: 0000000000000200 RSI: 0000000000000004 RDI: ffff888128dc2050
+RBP: 0000000000000039 R08: 0000000000000001 R09: ffffed10251b840a
+R10: ffff888128dc204f R11: ffffed10251b8409 R12: ffff888116d78000
+R13: 0000000000000000 R14: dffffc0000000000 R15: ffff888128dc2000
+FS:  0000000000000000(0000) GS:ffff88839d680000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 0000000001620068 CR3: 0000000376c0e000 CR4: 00000000000006e0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+Call Trace:
+ <TASK>
+ jbd2__journal_start+0x38a/0x790
+ jbd2_journal_start+0x19/0x20
+ flush_stashed_error_work+0x110/0x2b3
+ process_one_work+0x688/0x1080
+ worker_thread+0x8b/0xc50
+ kthread+0x26f/0x310
+ ret_from_fork+0x22/0x30
+ </TASK>
+Modules linked in:
+---[ end trace 0000000000000000 ]---
+
+Above issue may happen as follows:
+      umount            read procfs            error_work
+ext4_put_super
+  flush_work(&sbi->s_error_work);
+
+                      ext4_mb_seq_groups_show
+                       ext4_mb_load_buddy_gfp
+                         ext4_mb_init_group
+                           ext4_mb_init_cache
+                             ext4_read_block_bitmap_nowait
+                               ext4_validate_block_bitmap
+                                 ext4_error
+                                   ext4_handle_error
+                                     schedule_work(&EXT4_SB(sb)->s_error_work);
+
+  ext4_unregister_sysfs(sb);
+  jbd2_journal_destroy(sbi->s_journal);
+    journal_kill_thread
+      journal->j_flags |= JBD2_UNMOUNT;
+
+                                          flush_stashed_error_work
+                                           jbd2_journal_start
+                                             start_this_handle
+                                               BUG_ON(journal->j_flags & JBD2_UNMOUNT);
+
+To solve this issue, we call 'ext4_unregister_sysfs() before flushing
+s_error_work in ext4_put_super().
+
+Signed-off-by: Ye Bin <yebin10@huawei.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Reviewed-by: Ritesh Harjani <riteshh@linux.ibm.com>
+Link: https://lore.kernel.org/r/20220322012419.725457-1-yebin10@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/super.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 5e6c03458317..3e26edeca8c7 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -1176,18 +1176,23 @@ static void ext4_put_super(struct super_block *sb)
+       int aborted = 0;
+       int i, err;
+-      ext4_unregister_li_request(sb);
+-      ext4_quota_off_umount(sb);
+-
+-      destroy_workqueue(sbi->rsv_conversion_wq);
+-
+       /*
+        * Unregister sysfs before destroying jbd2 journal.
+        * Since we could still access attr_journal_task attribute via sysfs
+        * path which could have sbi->s_journal->j_task as NULL
++       * Unregister sysfs before flush sbi->s_error_work.
++       * Since user may read /proc/fs/ext4/xx/mb_groups during umount, If
++       * read metadata verify failed then will queue error work.
++       * flush_stashed_error_work will call start_this_handle may trigger
++       * BUG_ON.
+        */
+       ext4_unregister_sysfs(sb);
++      ext4_unregister_li_request(sb);
++      ext4_quota_off_umount(sb);
++
++      destroy_workqueue(sbi->rsv_conversion_wq);
++
+       if (sbi->s_journal) {
+               aborted = is_journal_aborted(sbi->s_journal);
+               err = jbd2_journal_destroy(sbi->s_journal);
+-- 
+2.35.1
+
diff --git a/queue-5.10/ibmvnic-fix-miscellaneous-checks.patch b/queue-5.10/ibmvnic-fix-miscellaneous-checks.patch
new file mode 100644 (file)
index 0000000..84f2b27
--- /dev/null
@@ -0,0 +1,106 @@
+From 0e8548af6425374969e99ff65184865ca8898462 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 11 Feb 2021 00:43:22 -0600
+Subject: ibmvnic: fix miscellaneous checks
+
+From: Lijun Pan <lijunp213@gmail.com>
+
+[ Upstream commit 91dc5d2553fbf20e2e8384ac997f278a50c70561 ]
+
+Fix the following checkpatch checks:
+CHECK: Macro argument 'off' may be better as '(off)' to
+avoid precedence issues
+CHECK: Alignment should match open parenthesis
+CHECK: multiple assignments should be avoided
+CHECK: Blank lines aren't necessary before a close brace '}'
+CHECK: Please use a blank line after function/struct/union/enum
+declarations
+CHECK: Unnecessary parentheses around 'rc != H_FUNCTION'
+
+Signed-off-by: Lijun Pan <lijunp213@gmail.com>
+Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/ibm/ibmvnic.c | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
+index 95bee3d91593..2cd849215913 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.c
++++ b/drivers/net/ethernet/ibm/ibmvnic.c
+@@ -117,7 +117,7 @@ struct ibmvnic_stat {
+ #define IBMVNIC_STAT_OFF(stat) (offsetof(struct ibmvnic_adapter, stats) + \
+                            offsetof(struct ibmvnic_statistics, stat))
+-#define IBMVNIC_GET_STAT(a, off) (*((u64 *)(((unsigned long)(a)) + off)))
++#define IBMVNIC_GET_STAT(a, off) (*((u64 *)(((unsigned long)(a)) + (off))))
+ static const struct ibmvnic_stat ibmvnic_stats[] = {
+       {"rx_packets", IBMVNIC_STAT_OFF(rx_packets)},
+@@ -2063,14 +2063,14 @@ static int do_reset(struct ibmvnic_adapter *adapter,
+                       rc = reset_tx_pools(adapter);
+                       if (rc) {
+                               netdev_dbg(adapter->netdev, "reset tx pools failed (%d)\n",
+-                                              rc);
++                                         rc);
+                               goto out;
+                       }
+                       rc = reset_rx_pools(adapter);
+                       if (rc) {
+                               netdev_dbg(adapter->netdev, "reset rx pools failed (%d)\n",
+-                                              rc);
++                                         rc);
+                               goto out;
+                       }
+               }
+@@ -2331,7 +2331,8 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
+       if (adapter->state == VNIC_PROBING) {
+               netdev_warn(netdev, "Adapter reset during probe\n");
+-              ret = adapter->init_done_rc = EAGAIN;
++              adapter->init_done_rc = EAGAIN;
++              ret = EAGAIN;
+               goto err;
+       }
+@@ -2744,7 +2745,6 @@ static int ibmvnic_set_channels(struct net_device *netdev,
+                           channels->rx_count, channels->tx_count,
+                           adapter->req_rx_queues, adapter->req_tx_queues);
+       return ret;
+-
+ }
+ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
+@@ -2833,8 +2833,8 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
+               return;
+       for (i = 0; i < ARRAY_SIZE(ibmvnic_stats); i++)
+-              data[i] = be64_to_cpu(IBMVNIC_GET_STAT(adapter,
+-                                              ibmvnic_stats[i].offset));
++              data[i] = be64_to_cpu(IBMVNIC_GET_STAT
++                                    (adapter, ibmvnic_stats[i].offset));
+       for (j = 0; j < adapter->req_tx_queues; j++) {
+               data[i] = adapter->tx_stats_buffers[j].packets;
+@@ -2874,6 +2874,7 @@ static int ibmvnic_set_priv_flags(struct net_device *netdev, u32 flags)
+       return 0;
+ }
++
+ static const struct ethtool_ops ibmvnic_ethtool_ops = {
+       .get_drvinfo            = ibmvnic_get_drvinfo,
+       .get_msglevel           = ibmvnic_get_msglevel,
+@@ -3119,7 +3120,7 @@ static int enable_scrq_irq(struct ibmvnic_adapter *adapter,
+               /* H_EOI would fail with rc = H_FUNCTION when running
+                * in XIVE mode which is expected, but not an error.
+                */
+-              if (rc && (rc != H_FUNCTION))
++              if (rc && rc != H_FUNCTION)
+                       dev_err(dev, "H_EOI FAILED irq 0x%llx. rc=%ld\n",
+                               val, rc);
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.10/iio-imu-bmi160-disable-regulator-in-error-path.patch b/queue-5.10/iio-imu-bmi160-disable-regulator-in-error-path.patch
new file mode 100644 (file)
index 0000000..1b1e06f
--- /dev/null
@@ -0,0 +1,90 @@
+From d3ab14cdfe975bab298e8b5556fc9bc080f431f4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 27 Mar 2022 08:40:05 -0700
+Subject: iio:imu:bmi160: disable regulator in error path
+
+From: Tong Zhang <ztong0001@gmail.com>
+
+[ Upstream commit d926054d5565d3cfa2c7c3f7a48e79bcc10453ed ]
+
+Regulator should be disabled in error path as mentioned in _regulator_put().
+Also disable accel if gyro cannot be enabled.
+
+[   16.233604] WARNING: CPU: 0 PID: 2177 at drivers/regulator/core.c:2257 _regulator_put
+[   16.240453] Call Trace:
+[   16.240572]  <TASK>
+[   16.240676]  regulator_put+0x26/0x40
+[   16.240853]  regulator_bulk_free+0x26/0x50
+[   16.241050]  release_nodes+0x3f/0x70
+[   16.241225]  devres_release_group+0x147/0x1c0
+[   16.241441]  ? bmi160_core_probe+0x175/0x3a0 [bmi160_core]
+
+Fixes: 5dea3fb066f0 ("iio: imu: bmi160: added regulator support")
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Signed-off-by: Tong Zhang <ztong0001@gmail.com>
+Link: https://lore.kernel.org/r/20220327154005.806049-1-ztong0001@gmail.com
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/iio/imu/bmi160/bmi160_core.c | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/iio/imu/bmi160/bmi160_core.c b/drivers/iio/imu/bmi160/bmi160_core.c
+index 82f03a4dc47a..5fd61889f593 100644
+--- a/drivers/iio/imu/bmi160/bmi160_core.c
++++ b/drivers/iio/imu/bmi160/bmi160_core.c
+@@ -731,7 +731,7 @@ static int bmi160_chip_init(struct bmi160_data *data, bool use_spi)
+       ret = regmap_write(data->regmap, BMI160_REG_CMD, BMI160_CMD_SOFTRESET);
+       if (ret)
+-              return ret;
++              goto disable_regulator;
+       usleep_range(BMI160_SOFTRESET_USLEEP, BMI160_SOFTRESET_USLEEP + 1);
+@@ -742,29 +742,37 @@ static int bmi160_chip_init(struct bmi160_data *data, bool use_spi)
+       if (use_spi) {
+               ret = regmap_read(data->regmap, BMI160_REG_DUMMY, &val);
+               if (ret)
+-                      return ret;
++                      goto disable_regulator;
+       }
+       ret = regmap_read(data->regmap, BMI160_REG_CHIP_ID, &val);
+       if (ret) {
+               dev_err(dev, "Error reading chip id\n");
+-              return ret;
++              goto disable_regulator;
+       }
+       if (val != BMI160_CHIP_ID_VAL) {
+               dev_err(dev, "Wrong chip id, got %x expected %x\n",
+                       val, BMI160_CHIP_ID_VAL);
+-              return -ENODEV;
++              ret = -ENODEV;
++              goto disable_regulator;
+       }
+       ret = bmi160_set_mode(data, BMI160_ACCEL, true);
+       if (ret)
+-              return ret;
++              goto disable_regulator;
+       ret = bmi160_set_mode(data, BMI160_GYRO, true);
+       if (ret)
+-              return ret;
++              goto disable_accel;
+       return 0;
++
++disable_accel:
++      bmi160_set_mode(data, BMI160_ACCEL, false);
++
++disable_regulator:
++      regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies);
++      return ret;
+ }
+ static int bmi160_data_rdy_trigger_set_state(struct iio_trigger *trig,
+-- 
+2.35.1
+
diff --git a/queue-5.10/ip6_gre-make-o_seqno-start-from-0-in-native-mode.patch b/queue-5.10/ip6_gre-make-o_seqno-start-from-0-in-native-mode.patch
new file mode 100644 (file)
index 0000000..4811371
--- /dev/null
@@ -0,0 +1,70 @@
+From f5c39ad96bd0bb667f228325421be4f9e5562eaf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 15:08:38 -0700
+Subject: ip6_gre: Make o_seqno start from 0 in native mode
+
+From: Peilin Ye <peilin.ye@bytedance.com>
+
+[ Upstream commit fde98ae91f79cab4e020f40c35ed23cbdc59661c ]
+
+For IP6GRE and IP6GRETAP devices, currently o_seqno starts from 1 in
+native mode.  According to RFC 2890 2.2., "The first datagram is sent
+with a sequence number of 0."  Fix it.
+
+It is worth mentioning that o_seqno already starts from 0 in collect_md
+mode, see the "if (tunnel->parms.collect_md)" clause in __gre6_xmit(),
+where tunnel->o_seqno is passed to gre_build_header() before getting
+incremented.
+
+Fixes: c12b395a4664 ("gre: Support GRE over IPv6")
+Signed-off-by: Peilin Ye <peilin.ye@bytedance.com>
+Acked-by: William Tu <u9012063@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/ip6_gre.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
+index 1f6c752f13b4..09262adf004e 100644
+--- a/net/ipv6/ip6_gre.c
++++ b/net/ipv6/ip6_gre.c
+@@ -724,6 +724,7 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+ {
+       struct ip6_tnl *tunnel = netdev_priv(dev);
+       __be16 protocol;
++      __be16 flags;
+       if (dev->type == ARPHRD_ETHER)
+               IPCB(skb)->flags = 0;
+@@ -739,7 +740,6 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+       if (tunnel->parms.collect_md) {
+               struct ip_tunnel_info *tun_info;
+               const struct ip_tunnel_key *key;
+-              __be16 flags;
+               int tun_hlen;
+               tun_info = skb_tunnel_info_txcheck(skb);
+@@ -770,15 +770,14 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+                                                     : 0);
+       } else {
+-              if (tunnel->parms.o_flags & TUNNEL_SEQ)
+-                      tunnel->o_seqno++;
+-
+               if (skb_cow_head(skb, dev->needed_headroom ?: tunnel->hlen))
+                       return -ENOMEM;
+-              gre_build_header(skb, tunnel->tun_hlen, tunnel->parms.o_flags,
++              flags = tunnel->parms.o_flags;
++
++              gre_build_header(skb, tunnel->tun_hlen, flags,
+                                protocol, tunnel->parms.o_key,
+-                               htonl(tunnel->o_seqno));
++                               (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) : 0);
+       }
+       return ip6_tnl_xmit(skb, dev, dsfield, fl6, encap_limit, pmtu,
+-- 
+2.35.1
+
diff --git a/queue-5.10/ip_gre-ip6_gre-fix-race-condition-on-o_seqno-in-coll.patch b/queue-5.10/ip_gre-ip6_gre-fix-race-condition-on-o_seqno-in-coll.patch
new file mode 100644 (file)
index 0000000..625e3c0
--- /dev/null
@@ -0,0 +1,152 @@
+From 08897d9afd7af65128178575841de663987388fa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 15:09:02 -0700
+Subject: ip_gre, ip6_gre: Fix race condition on o_seqno in collect_md mode
+
+From: Peilin Ye <peilin.ye@bytedance.com>
+
+[ Upstream commit 31c417c948d7f6909cb63f0ac3298f3c38f8ce20 ]
+
+As pointed out by Jakub Kicinski, currently using TUNNEL_SEQ in
+collect_md mode is racy for [IP6]GRE[TAP] devices.  Consider the
+following sequence of events:
+
+1. An [IP6]GRE[TAP] device is created in collect_md mode using "ip link
+   add ... external".  "ip" ignores "[o]seq" if "external" is specified,
+   so TUNNEL_SEQ is off, and the device is marked as NETIF_F_LLTX (i.e.
+   it uses lockless TX);
+2. Someone sets TUNNEL_SEQ on outgoing skb's, using e.g.
+   bpf_skb_set_tunnel_key() in an eBPF program attached to this device;
+3. gre_fb_xmit() or __gre6_xmit() processes these skb's:
+
+       gre_build_header(skb, tun_hlen,
+                        flags, protocol,
+                        tunnel_id_to_key32(tun_info->key.tun_id),
+                        (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++)
+                                             : 0);   ^^^^^^^^^^^^^^^^^
+
+Since we are not using the TX lock (&txq->_xmit_lock), multiple CPUs may
+try to do this tunnel->o_seqno++ in parallel, which is racy.  Fix it by
+making o_seqno atomic_t.
+
+As mentioned by Eric Dumazet in commit b790e01aee74 ("ip_gre: lockless
+xmit"), making o_seqno atomic_t increases "chance for packets being out
+of order at receiver" when NETIF_F_LLTX is on.
+
+Maybe a better fix would be:
+
+1. Do not ignore "oseq" in external mode.  Users MUST specify "oseq" if
+   they want the kernel to allow sequencing of outgoing packets;
+2. Reject all outgoing TUNNEL_SEQ packets if the device was not created
+   with "oseq".
+
+Unfortunately, that would break userspace.
+
+We could now make [IP6]GRE[TAP] devices always NETIF_F_LLTX, but let us
+do it in separate patches to keep this fix minimal.
+
+Suggested-by: Jakub Kicinski <kuba@kernel.org>
+Fixes: 77a5196a804e ("gre: add sequence number for collect md mode.")
+Signed-off-by: Peilin Ye <peilin.ye@bytedance.com>
+Acked-by: William Tu <u9012063@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/ip6_tunnel.h | 2 +-
+ include/net/ip_tunnels.h | 2 +-
+ net/ipv4/ip_gre.c        | 6 +++---
+ net/ipv6/ip6_gre.c       | 7 ++++---
+ 4 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h
+index 028eaea1c854..42d50856fcf2 100644
+--- a/include/net/ip6_tunnel.h
++++ b/include/net/ip6_tunnel.h
+@@ -57,7 +57,7 @@ struct ip6_tnl {
+       /* These fields used only by GRE */
+       __u32 i_seqno;  /* The last seen seqno  */
+-      __u32 o_seqno;  /* The last output seqno */
++      atomic_t o_seqno;       /* The last output seqno */
+       int hlen;       /* tun_hlen + encap_hlen */
+       int tun_hlen;   /* Precalculated header length */
+       int encap_hlen; /* Encap header length (FOU,GUE) */
+diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
+index 61620677b034..c3e55a9ae585 100644
+--- a/include/net/ip_tunnels.h
++++ b/include/net/ip_tunnels.h
+@@ -113,7 +113,7 @@ struct ip_tunnel {
+       /* These four fields used only by GRE */
+       u32             i_seqno;        /* The last seen seqno  */
+-      u32             o_seqno;        /* The last output seqno */
++      atomic_t        o_seqno;        /* The last output seqno */
+       int             tun_hlen;       /* Precalculated header length */
+       /* These four fields used only by ERSPAN */
+diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
+index 801c540db33e..2a80038575d2 100644
+--- a/net/ipv4/ip_gre.c
++++ b/net/ipv4/ip_gre.c
+@@ -459,7 +459,7 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
+       /* Push GRE header. */
+       gre_build_header(skb, tunnel->tun_hlen,
+                        flags, proto, tunnel->parms.o_key,
+-                       (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) : 0);
++                       (flags & TUNNEL_SEQ) ? htonl(atomic_fetch_inc(&tunnel->o_seqno)) : 0);
+       ip_tunnel_xmit(skb, dev, tnl_params, tnl_params->protocol);
+ }
+@@ -497,7 +497,7 @@ static void gre_fb_xmit(struct sk_buff *skb, struct net_device *dev,
+               (TUNNEL_CSUM | TUNNEL_KEY | TUNNEL_SEQ);
+       gre_build_header(skb, tunnel_hlen, flags, proto,
+                        tunnel_id_to_key32(tun_info->key.tun_id),
+-                       (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) : 0);
++                       (flags & TUNNEL_SEQ) ? htonl(atomic_fetch_inc(&tunnel->o_seqno)) : 0);
+       ip_md_tunnel_xmit(skb, dev, IPPROTO_GRE, tunnel_hlen);
+@@ -574,7 +574,7 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev)
+       }
+       gre_build_header(skb, 8, TUNNEL_SEQ,
+-                       proto, 0, htonl(tunnel->o_seqno++));
++                       proto, 0, htonl(atomic_fetch_inc(&tunnel->o_seqno)));
+       ip_md_tunnel_xmit(skb, dev, IPPROTO_GRE, tunnel_hlen);
+diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
+index 09262adf004e..3f88ba6555ab 100644
+--- a/net/ipv6/ip6_gre.c
++++ b/net/ipv6/ip6_gre.c
+@@ -766,7 +766,7 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+               gre_build_header(skb, tun_hlen,
+                                flags, protocol,
+                                tunnel_id_to_key32(tun_info->key.tun_id),
+-                               (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++)
++                               (flags & TUNNEL_SEQ) ? htonl(atomic_fetch_inc(&tunnel->o_seqno))
+                                                     : 0);
+       } else {
+@@ -777,7 +777,8 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+               gre_build_header(skb, tunnel->tun_hlen, flags,
+                                protocol, tunnel->parms.o_key,
+-                               (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) : 0);
++                               (flags & TUNNEL_SEQ) ? htonl(atomic_fetch_inc(&tunnel->o_seqno))
++                                                    : 0);
+       }
+       return ip6_tnl_xmit(skb, dev, dsfield, fl6, encap_limit, pmtu,
+@@ -1055,7 +1056,7 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb,
+       /* Push GRE header. */
+       proto = (t->parms.erspan_ver == 1) ? htons(ETH_P_ERSPAN)
+                                          : htons(ETH_P_ERSPAN2);
+-      gre_build_header(skb, 8, TUNNEL_SEQ, proto, 0, htonl(t->o_seqno++));
++      gre_build_header(skb, 8, TUNNEL_SEQ, proto, 0, htonl(atomic_fetch_inc(&t->o_seqno)));
+       /* TooBig packet may have updated dst->dev's mtu */
+       if (!t->parms.collect_md && dst && dst_mtu(dst) > dst->dev->mtu)
+-- 
+2.35.1
+
diff --git a/queue-5.10/ip_gre-make-o_seqno-start-from-0-in-native-mode.patch b/queue-5.10/ip_gre-make-o_seqno-start-from-0-in-native-mode.patch
new file mode 100644 (file)
index 0000000..b41e8f1
--- /dev/null
@@ -0,0 +1,51 @@
+From 160f9cad45b171ef04ef825bc68abf415173815d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 15:07:57 -0700
+Subject: ip_gre: Make o_seqno start from 0 in native mode
+
+From: Peilin Ye <peilin.ye@bytedance.com>
+
+[ Upstream commit ff827beb706ed719c766acf36449801ded0c17fc ]
+
+For GRE and GRETAP devices, currently o_seqno starts from 1 in native
+mode.  According to RFC 2890 2.2., "The first datagram is sent with a
+sequence number of 0."  Fix it.
+
+It is worth mentioning that o_seqno already starts from 0 in collect_md
+mode, see gre_fb_xmit(), where tunnel->o_seqno is passed to
+gre_build_header() before getting incremented.
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Peilin Ye <peilin.ye@bytedance.com>
+Acked-by: William Tu <u9012063@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/ip_gre.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
+index e4504dd510c6..801c540db33e 100644
+--- a/net/ipv4/ip_gre.c
++++ b/net/ipv4/ip_gre.c
+@@ -454,14 +454,12 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
+                      __be16 proto)
+ {
+       struct ip_tunnel *tunnel = netdev_priv(dev);
+-
+-      if (tunnel->parms.o_flags & TUNNEL_SEQ)
+-              tunnel->o_seqno++;
++      __be16 flags = tunnel->parms.o_flags;
+       /* Push GRE header. */
+       gre_build_header(skb, tunnel->tun_hlen,
+-                       tunnel->parms.o_flags, proto, tunnel->parms.o_key,
+-                       htonl(tunnel->o_seqno));
++                       flags, proto, tunnel->parms.o_key,
++                       (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++) : 0);
+       ip_tunnel_xmit(skb, dev, tnl_params, tnl_params->protocol);
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/ipvs-correctly-print-the-memory-size-of-ip_vs_conn_t.patch b/queue-5.10/ipvs-correctly-print-the-memory-size-of-ip_vs_conn_t.patch
new file mode 100644 (file)
index 0000000..b31f364
--- /dev/null
@@ -0,0 +1,38 @@
+From c37a09357a76086336b1b97b62d0d87097b37f4e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 19:05:45 +0800
+Subject: ipvs: correctly print the memory size of ip_vs_conn_tab
+
+From: Pengcheng Yang <yangpc@wangsu.com>
+
+[ Upstream commit eba1a872cb73314280d5448d934935b23e30b7ca ]
+
+The memory size of ip_vs_conn_tab changed after we use hlist
+instead of list.
+
+Fixes: 731109e78415 ("ipvs: use hlist instead of list")
+Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
+Acked-by: Julian Anastasov <ja@ssi.bg>
+Acked-by: Simon Horman <horms@verge.net.au>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netfilter/ipvs/ip_vs_conn.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
+index 2c467c422dc6..fb67f1ca2495 100644
+--- a/net/netfilter/ipvs/ip_vs_conn.c
++++ b/net/netfilter/ipvs/ip_vs_conn.c
+@@ -1495,7 +1495,7 @@ int __init ip_vs_conn_init(void)
+       pr_info("Connection hash table configured "
+               "(size=%d, memory=%ldKbytes)\n",
+               ip_vs_conn_tab_size,
+-              (long)(ip_vs_conn_tab_size*sizeof(struct list_head))/1024);
++              (long)(ip_vs_conn_tab_size*sizeof(*ip_vs_conn_tab))/1024);
+       IP_VS_DBG(0, "Each connection entry needs %zd bytes at least\n",
+                 sizeof(struct ip_vs_conn));
+-- 
+2.35.1
+
diff --git a/queue-5.10/ixgbe-ensure-ipsec-vf-pf-compatibility.patch b/queue-5.10/ixgbe-ensure-ipsec-vf-pf-compatibility.patch
new file mode 100644 (file)
index 0000000..b6e36f2
--- /dev/null
@@ -0,0 +1,45 @@
+From bda3ed77b3d9791552309cabfe4e821759ff97cd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Apr 2022 10:31:52 -0700
+Subject: ixgbe: ensure IPsec VF<->PF compatibility
+
+From: Leon Romanovsky <leonro@nvidia.com>
+
+[ Upstream commit f049efc7f7cd2f3c419f55040928eaefb13b3636 ]
+
+The VF driver can forward any IPsec flags and such makes the function
+is not extendable and prone to backward/forward incompatibility.
+
+If new software runs on VF, it won't know that PF configured something
+completely different as it "knows" only XFRM_OFFLOAD_INBOUND flag.
+
+Fixes: eda0333ac293 ("ixgbe: add VF IPsec management")
+Reviewed-by: Raed Salem <raeds@nvidia.com>
+Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
+Reviewed-by: Shannon Nelson <snelson@pensando.io>
+Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
+Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
+Link: https://lore.kernel.org/r/20220427173152.443102-1-anthony.l.nguyen@intel.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
+index 54d47265a7ac..319620856cba 100644
+--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
+@@ -903,7 +903,8 @@ int ixgbe_ipsec_vf_add_sa(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
+       /* Tx IPsec offload doesn't seem to work on this
+        * device, so block these requests for now.
+        */
+-      if (!(sam->flags & XFRM_OFFLOAD_INBOUND)) {
++      sam->flags = sam->flags & ~XFRM_OFFLOAD_IPV6;
++      if (sam->flags != XFRM_OFFLOAD_INBOUND) {
+               err = -EOPNOTSUPP;
+               goto err_out;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.10/memory-renesas-rpc-if-fix-hf-ospi-data-transfer-in-m.patch b/queue-5.10/memory-renesas-rpc-if-fix-hf-ospi-data-transfer-in-m.patch
new file mode 100644 (file)
index 0000000..05ba3d2
--- /dev/null
@@ -0,0 +1,169 @@
+From 86418f96c1ddd2c5fd6c89757d2d65747f7c6f5a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 09:05:26 +0200
+Subject: memory: renesas-rpc-if: Fix HF/OSPI data transfer in Manual Mode
+
+From: Geert Uytterhoeven <geert+renesas@glider.be>
+
+[ Upstream commit 7e842d70fe599bc13594b650b2144c4b6e6d6bf1 ]
+
+HyperFlash devices fail to probe:
+
+    rpc-if-hyperflash rpc-if-hyperflash: probing of hyperbus device failed
+
+In HyperFlash or Octal-SPI Flash mode, the Transfer Data Enable bits
+(SPIDE) in the Manual Mode Enable Setting Register (SMENR) are derived
+from half of the transfer size, cfr. the rpcif_bits_set() helper
+function.  However, rpcif_reg_{read,write}() does not take the bus size
+into account, and does not double all Manual Mode Data Register access
+sizes when communicating with a HyperFlash or Octal-SPI Flash device.
+
+Fix this, and avoid the back-and-forth conversion between transfer size
+and Transfer Data Enable bits, by explicitly storing the transfer size
+in struct rpcif, and using that value to determine access size in
+rpcif_reg_{read,write}().
+
+Enforce that the "high" Manual Mode Read/Write Data Registers
+(SM[RW]DR1) are only used for 8-byte data accesses.
+While at it, forbid writing to the Manual Mode Read Data Registers,
+as they are read-only.
+
+Fixes: fff53a551db50f5e ("memory: renesas-rpc-if: Correct QSPI data transfer in Manual mode")
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
+Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Link: https://lore.kernel.org/r/cde9bfacf704c81865f57b15d1b48a4793da4286.1649681476.git.geert+renesas@glider.be
+Link: https://lore.kernel.org/r/20220420070526.9367-1-krzysztof.kozlowski@linaro.org'
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/memory/renesas-rpc-if.c | 60 +++++++++++++++++++++++++--------
+ include/memory/renesas-rpc-if.h |  1 +
+ 2 files changed, 47 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/memory/renesas-rpc-if.c b/drivers/memory/renesas-rpc-if.c
+index 781af51e3f79..1dfb81dea961 100644
+--- a/drivers/memory/renesas-rpc-if.c
++++ b/drivers/memory/renesas-rpc-if.c
+@@ -163,25 +163,39 @@ static const struct regmap_access_table rpcif_volatile_table = {
+ /*
+- * Custom accessor functions to ensure SMRDR0 and SMWDR0 are always accessed
+- * with proper width. Requires SMENR_SPIDE to be correctly set before!
++ * Custom accessor functions to ensure SM[RW]DR[01] are always accessed with
++ * proper width.  Requires rpcif.xfer_size to be correctly set before!
+  */
+ static int rpcif_reg_read(void *context, unsigned int reg, unsigned int *val)
+ {
+       struct rpcif *rpc = context;
+-      if (reg == RPCIF_SMRDR0 || reg == RPCIF_SMWDR0) {
+-              u32 spide = readl(rpc->base + RPCIF_SMENR) & RPCIF_SMENR_SPIDE(0xF);
+-
+-              if (spide == 0x8) {
++      switch (reg) {
++      case RPCIF_SMRDR0:
++      case RPCIF_SMWDR0:
++              switch (rpc->xfer_size) {
++              case 1:
+                       *val = readb(rpc->base + reg);
+                       return 0;
+-              } else if (spide == 0xC) {
++
++              case 2:
+                       *val = readw(rpc->base + reg);
+                       return 0;
+-              } else if (spide != 0xF) {
++
++              case 4:
++              case 8:
++                      *val = readl(rpc->base + reg);
++                      return 0;
++
++              default:
+                       return -EILSEQ;
+               }
++
++      case RPCIF_SMRDR1:
++      case RPCIF_SMWDR1:
++              if (rpc->xfer_size != 8)
++                      return -EILSEQ;
++              break;
+       }
+       *val = readl(rpc->base + reg);
+@@ -193,18 +207,34 @@ static int rpcif_reg_write(void *context, unsigned int reg, unsigned int val)
+ {
+       struct rpcif *rpc = context;
+-      if (reg == RPCIF_SMRDR0 || reg == RPCIF_SMWDR0) {
+-              u32 spide = readl(rpc->base + RPCIF_SMENR) & RPCIF_SMENR_SPIDE(0xF);
+-
+-              if (spide == 0x8) {
++      switch (reg) {
++      case RPCIF_SMWDR0:
++              switch (rpc->xfer_size) {
++              case 1:
+                       writeb(val, rpc->base + reg);
+                       return 0;
+-              } else if (spide == 0xC) {
++
++              case 2:
+                       writew(val, rpc->base + reg);
+                       return 0;
+-              } else if (spide != 0xF) {
++
++              case 4:
++              case 8:
++                      writel(val, rpc->base + reg);
++                      return 0;
++
++              default:
+                       return -EILSEQ;
+               }
++
++      case RPCIF_SMWDR1:
++              if (rpc->xfer_size != 8)
++                      return -EILSEQ;
++              break;
++
++      case RPCIF_SMRDR0:
++      case RPCIF_SMRDR1:
++              return -EPERM;
+       }
+       writel(val, rpc->base + reg);
+@@ -455,6 +485,7 @@ int rpcif_manual_xfer(struct rpcif *rpc)
+                       smenr |= RPCIF_SMENR_SPIDE(rpcif_bits_set(rpc, nbytes));
+                       regmap_write(rpc->regmap, RPCIF_SMENR, smenr);
++                      rpc->xfer_size = nbytes;
+                       memcpy(data, rpc->buffer + pos, nbytes);
+                       if (nbytes == 8) {
+@@ -519,6 +550,7 @@ int rpcif_manual_xfer(struct rpcif *rpc)
+                       regmap_write(rpc->regmap, RPCIF_SMENR, smenr);
+                       regmap_write(rpc->regmap, RPCIF_SMCR,
+                                    rpc->smcr | RPCIF_SMCR_SPIE);
++                      rpc->xfer_size = nbytes;
+                       ret = wait_msg_xfer_end(rpc);
+                       if (ret)
+                               goto err_out;
+diff --git a/include/memory/renesas-rpc-if.h b/include/memory/renesas-rpc-if.h
+index aceb2c360d3f..0e3dac030219 100644
+--- a/include/memory/renesas-rpc-if.h
++++ b/include/memory/renesas-rpc-if.h
+@@ -65,6 +65,7 @@ struct       rpcif {
+       size_t size;
+       enum rpcif_data_dir dir;
+       u8 bus_size;
++      u8 xfer_size;
+       void *buffer;
+       u32 xferlen;
+       u32 smcr;
+-- 
+2.35.1
+
diff --git a/queue-5.10/mtd-fix-part-field-data-corruption-in-mtd_info.patch b/queue-5.10/mtd-fix-part-field-data-corruption-in-mtd_info.patch
new file mode 100644 (file)
index 0000000..52e0a16
--- /dev/null
@@ -0,0 +1,48 @@
+From 5bda0749a8701f1b9a6a4c699f5e6a44c84bd16b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 Apr 2022 11:46:47 -0700
+Subject: mtd: fix 'part' field data corruption in mtd_info
+
+From: Oleksandr Ocheretnyi <oocheret@cisco.com>
+
+[ Upstream commit 37c5f9e80e015d0df17d0c377c18523002986851 ]
+
+Commit 46b5889cc2c5 ("mtd: implement proper partition handling")
+started using "mtd_get_master_ofs()" in mtd callbacks to determine
+memory offsets by means of 'part' field from mtd_info, what previously
+was smashed accessing 'master' field in the mtd_set_dev_defaults() method.
+That provides wrong offset what causes hardware access errors.
+
+Just make 'part', 'master' as separate fields, rather than using
+union type to avoid 'part' data corruption when mtd_set_dev_defaults()
+is called.
+
+Fixes: 46b5889cc2c5 ("mtd: implement proper partition handling")
+Signed-off-by: Oleksandr Ocheretnyi <oocheret@cisco.com>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20220417184649.449289-1-oocheret@cisco.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/mtd/mtd.h | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
+index 157357ec1441..fc41fecfe44f 100644
+--- a/include/linux/mtd/mtd.h
++++ b/include/linux/mtd/mtd.h
+@@ -388,10 +388,8 @@ struct mtd_info {
+       /* List of partitions attached to this MTD device */
+       struct list_head partitions;
+-      union {
+-              struct mtd_part part;
+-              struct mtd_master master;
+-      };
++      struct mtd_part part;
++      struct mtd_master master;
+ };
+ static inline struct mtd_info *mtd_get_master(struct mtd_info *mtd)
+-- 
+2.35.1
+
diff --git a/queue-5.10/mtd-rawnand-fix-ecc-parameters-for-mt7622.patch b/queue-5.10/mtd-rawnand-fix-ecc-parameters-for-mt7622.patch
new file mode 100644 (file)
index 0000000..e406ece
--- /dev/null
@@ -0,0 +1,99 @@
+From f451a2bfc585b370f2fee809fa33d3a1937edb7f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 3 Apr 2022 00:03:13 +0800
+Subject: mtd: rawnand: fix ecc parameters for mt7622
+
+From: Chuanhong Guo <gch981213@gmail.com>
+
+[ Upstream commit 9fe4e0d3cbfe90152137963cc024ecb63db6e8e6 ]
+
+According to the datasheet, mt7622 only has 5 ECC capabilities instead
+of 7, and the decoding error register is arranged  as follows:
++------+---------+---------+---------+---------+
+| Bits |  19:15  |  14:10  |   9:5   |   4:0   |
++------+---------+---------+---------+---------+
+| Name | ERRNUM3 | ERRNUM2 | ERRNUM1 | ERRNUM0 |
++------+---------+---------+---------+---------+
+This means err_mask should be 0x1f instead of 0x3f and the number of
+bits shifted in mtk_ecc_get_stats should be 5 instead of 8.
+
+This commit introduces err_shift for the difference in this register
+and fix other existing parameters.
+
+Public MT7622 reference manual can be found on [0] and the info this
+commit is based on is from page 656 and page 660.
+
+[0]: https://wiki.banana-pi.org/Banana_Pi_BPI-R64#Documents
+
+Fixes: 98dea8d71931 ("mtd: nand: mtk: Support MT7622 NAND flash controller.")
+Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20220402160315.919094-1-gch981213@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mtd/nand/raw/mtk_ecc.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/mtd/nand/raw/mtk_ecc.c b/drivers/mtd/nand/raw/mtk_ecc.c
+index 75f1fa3d4d35..c115e03ede88 100644
+--- a/drivers/mtd/nand/raw/mtk_ecc.c
++++ b/drivers/mtd/nand/raw/mtk_ecc.c
+@@ -43,6 +43,7 @@
+ struct mtk_ecc_caps {
+       u32 err_mask;
++      u32 err_shift;
+       const u8 *ecc_strength;
+       const u32 *ecc_regs;
+       u8 num_ecc_strength;
+@@ -76,7 +77,7 @@ static const u8 ecc_strength_mt2712[] = {
+ };
+ static const u8 ecc_strength_mt7622[] = {
+-      4, 6, 8, 10, 12, 14, 16
++      4, 6, 8, 10, 12
+ };
+ enum mtk_ecc_regs {
+@@ -221,7 +222,7 @@ void mtk_ecc_get_stats(struct mtk_ecc *ecc, struct mtk_ecc_stats *stats,
+       for (i = 0; i < sectors; i++) {
+               offset = (i >> 2) << 2;
+               err = readl(ecc->regs + ECC_DECENUM0 + offset);
+-              err = err >> ((i % 4) * 8);
++              err = err >> ((i % 4) * ecc->caps->err_shift);
+               err &= ecc->caps->err_mask;
+               if (err == ecc->caps->err_mask) {
+                       /* uncorrectable errors */
+@@ -449,6 +450,7 @@ EXPORT_SYMBOL(mtk_ecc_get_parity_bits);
+ static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
+       .err_mask = 0x3f,
++      .err_shift = 8,
+       .ecc_strength = ecc_strength_mt2701,
+       .ecc_regs = mt2701_ecc_regs,
+       .num_ecc_strength = 20,
+@@ -459,6 +461,7 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2701 = {
+ static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
+       .err_mask = 0x7f,
++      .err_shift = 8,
+       .ecc_strength = ecc_strength_mt2712,
+       .ecc_regs = mt2712_ecc_regs,
+       .num_ecc_strength = 23,
+@@ -468,10 +471,11 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
+ };
+ static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
+-      .err_mask = 0x3f,
++      .err_mask = 0x1f,
++      .err_shift = 5,
+       .ecc_strength = ecc_strength_mt7622,
+       .ecc_regs = mt7622_ecc_regs,
+-      .num_ecc_strength = 7,
++      .num_ecc_strength = 5,
+       .ecc_mode_shift = 4,
+       .parity_bits = 13,
+       .pg_irq_sel = 0,
+-- 
+2.35.1
+
diff --git a/queue-5.10/mtd-rawnand-fix-return-value-check-of-wait_for_compl.patch b/queue-5.10/mtd-rawnand-fix-return-value-check-of-wait_for_compl.patch
new file mode 100644 (file)
index 0000000..3ba8865
--- /dev/null
@@ -0,0 +1,84 @@
+From 7cf5b8cf66673bad47f9a666115f8c5b03ab61ae Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 08:34:31 +0000
+Subject: mtd: rawnand: Fix return value check of wait_for_completion_timeout
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 084c16ab423a8890121b902b405823bfec5b4365 ]
+
+wait_for_completion_timeout() returns unsigned long not int.
+It returns 0 if timed out, and positive if completed.
+The check for <= 0 is ambiguous and should be == 0 here
+indicating timeout which is the only error case.
+
+Fixes: 83738d87e3a0 ("mtd: sh_flctl: Add DMA capabilty")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20220412083435.29254-1-linmq006@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mtd/nand/raw/sh_flctl.c | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/mtd/nand/raw/sh_flctl.c b/drivers/mtd/nand/raw/sh_flctl.c
+index 13df4bdf792a..8f89e2d3d817 100644
+--- a/drivers/mtd/nand/raw/sh_flctl.c
++++ b/drivers/mtd/nand/raw/sh_flctl.c
+@@ -384,7 +384,8 @@ static int flctl_dma_fifo0_transfer(struct sh_flctl *flctl, unsigned long *buf,
+       dma_addr_t dma_addr;
+       dma_cookie_t cookie;
+       uint32_t reg;
+-      int ret;
++      int ret = 0;
++      unsigned long time_left;
+       if (dir == DMA_FROM_DEVICE) {
+               chan = flctl->chan_fifo0_rx;
+@@ -425,13 +426,14 @@ static int flctl_dma_fifo0_transfer(struct sh_flctl *flctl, unsigned long *buf,
+               goto out;
+       }
+-      ret =
++      time_left =
+       wait_for_completion_timeout(&flctl->dma_complete,
+                               msecs_to_jiffies(3000));
+-      if (ret <= 0) {
++      if (time_left == 0) {
+               dmaengine_terminate_all(chan);
+               dev_err(&flctl->pdev->dev, "wait_for_completion_timeout\n");
++              ret = -ETIMEDOUT;
+       }
+ out:
+@@ -441,7 +443,7 @@ static int flctl_dma_fifo0_transfer(struct sh_flctl *flctl, unsigned long *buf,
+       dma_unmap_single(chan->device->dev, dma_addr, len, dir);
+-      /* ret > 0 is success */
++      /* ret == 0 is success */
+       return ret;
+ }
+@@ -465,7 +467,7 @@ static void read_fiforeg(struct sh_flctl *flctl, int rlen, int offset)
+       /* initiate DMA transfer */
+       if (flctl->chan_fifo0_rx && rlen >= 32 &&
+-              flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_FROM_DEVICE) > 0)
++              !flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_FROM_DEVICE))
+                       goto convert;   /* DMA success */
+       /* do polling transfer */
+@@ -524,7 +526,7 @@ static void write_ec_fiforeg(struct sh_flctl *flctl, int rlen,
+       /* initiate DMA transfer */
+       if (flctl->chan_fifo0_tx && rlen >= 32 &&
+-              flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_TO_DEVICE) > 0)
++              !flctl_dma_fifo0_transfer(flctl, buf, rlen, DMA_TO_DEVICE))
+                       return; /* DMA success */
+       /* do polling transfer */
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-bcmgenet-hide-status-block-before-tx-timestampin.patch b/queue-5.10/net-bcmgenet-hide-status-block-before-tx-timestampin.patch
new file mode 100644 (file)
index 0000000..1ce185f
--- /dev/null
@@ -0,0 +1,61 @@
+From 7d01eb39caaffcf11989a240337a704da40c4544 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 09:53:07 -0700
+Subject: net: bcmgenet: hide status block before TX timestamping
+
+From: Jonathan Lemon <jonathan.lemon@gmail.com>
+
+[ Upstream commit acac0541d1d65e81e599ec399d34d184d2424401 ]
+
+The hardware checksum offloading requires use of a transmit
+status block inserted before the outgoing frame data, this was
+updated in '9a9ba2a4aaaa ("net: bcmgenet: always enable status blocks")'
+
+However, skb_tx_timestamp() assumes that it is passed a raw frame
+and PTP parsing chokes on this status block.
+
+Fix this by calling __skb_pull(), which hides the TSB before calling
+skb_tx_timestamp(), so an outgoing PTP packet is parsed correctly.
+
+As the data in the skb has already been set up for DMA, and the
+dma_unmap_* calls use a separately stored address, there is no
+no effective change in the data transmission.
+
+Signed-off-by: Jonathan Lemon <jonathan.lemon@gmail.com>
+Acked-by: Florian Fainelli <f.fainelli@gmail.com>
+Link: https://lore.kernel.org/r/20220424165307.591145-1-jonathan.lemon@gmail.com
+Fixes: d03825fba459 ("net: bcmgenet: add skb_tx_timestamp call")
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/broadcom/genet/bcmgenet.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+index a2062144d7ca..9ffdaa84ba12 100644
+--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
++++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+@@ -1987,6 +1987,11 @@ static struct sk_buff *bcmgenet_add_tsb(struct net_device *dev,
+       return skb;
+ }
++static void bcmgenet_hide_tsb(struct sk_buff *skb)
++{
++      __skb_pull(skb, sizeof(struct status_64));
++}
++
+ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+       struct bcmgenet_priv *priv = netdev_priv(dev);
+@@ -2093,6 +2098,8 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
+       }
+       GENET_CB(skb)->last_cb = tx_cb_ptr;
++
++      bcmgenet_hide_tsb(skb);
+       skb_tx_timestamp(skb);
+       /* Decrement total BD count and advance our write pointer */
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-dsa-add-missing-of_node_put-in-dsa_port_link_reg.patch b/queue-5.10/net-dsa-add-missing-of_node_put-in-dsa_port_link_reg.patch
new file mode 100644 (file)
index 0000000..1e917bf
--- /dev/null
@@ -0,0 +1,39 @@
+From 9413238894ec5b2183301ba772dcd40bbdd2da3f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 19:04:08 +0800
+Subject: net: dsa: Add missing of_node_put() in dsa_port_link_register_of
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit fc06b2867f4cea543505acfb194c2be4ebf0c7d3 ]
+
+The device_node pointer is returned by of_parse_phandle()  with refcount
+incremented. We should use of_node_put() on it when done.
+of_node_put() will check for NULL value.
+
+Fixes: a20f997010c4 ("net: dsa: Don't instantiate phylink for CPU/DSA ports unless needed")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/dsa/port.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/dsa/port.c b/net/dsa/port.c
+index 73569c9af3cc..c9d552c4c358 100644
+--- a/net/dsa/port.c
++++ b/net/dsa/port.c
+@@ -721,8 +721,10 @@ int dsa_port_link_register_of(struct dsa_port *dp)
+                       if (ds->ops->phylink_mac_link_down)
+                               ds->ops->phylink_mac_link_down(ds, port,
+                                       MLO_AN_FIXED, PHY_INTERFACE_MODE_NA);
++                      of_node_put(phy_np);
+                       return dsa_port_phylink_register(dp);
+               }
++              of_node_put(phy_np);
+               return 0;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-dsa-lantiq_gswip-don-t-set-gswip_mii_cfg_rmii_cl.patch b/queue-5.10/net-dsa-lantiq_gswip-don-t-set-gswip_mii_cfg_rmii_cl.patch
new file mode 100644 (file)
index 0000000..c842827
--- /dev/null
@@ -0,0 +1,60 @@
+From ca682883f0f741dc644a1831ed2f9c5990f2fb61 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 17:20:27 +0200
+Subject: net: dsa: lantiq_gswip: Don't set GSWIP_MII_CFG_RMII_CLK
+
+From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+
+[ Upstream commit 71cffebf6358a7f5031f5b208bbdc1cb4db6e539 ]
+
+Commit 4b5923249b8fa4 ("net: dsa: lantiq_gswip: Configure all remaining
+GSWIP_MII_CFG bits") added all known bits in the GSWIP_MII_CFGp
+register. It helped bring this register into a well-defined state so the
+driver has to rely less on the bootloader to do things right.
+Unfortunately it also sets the GSWIP_MII_CFG_RMII_CLK bit without any
+possibility to configure it. Upon further testing it turns out that all
+boards which are supported by the GSWIP driver in OpenWrt which use an
+RMII PHY have a dedicated oscillator on the board which provides the
+50MHz RMII reference clock.
+
+Don't set the GSWIP_MII_CFG_RMII_CLK bit (but keep the code which always
+clears it) to fix support for the Fritz!Box 7362 SL in OpenWrt. This is
+a board with two Atheros AR8030 RMII PHYs. With the "RMII clock" bit set
+the MAC also generates the RMII reference clock whose signal then
+conflicts with the signal from the oscillator on the board. This results
+in a constant cycle of the PHY detecting link up/down (and as a result
+of that: the two ports using the AR8030 PHYs are not working).
+
+At the time of writing this patch there's no known board where the MAC
+(GSWIP) has to generate the RMII reference clock. If needed this can be
+implemented in future by providing a device-tree flag so the
+GSWIP_MII_CFG_RMII_CLK bit can be toggled per port.
+
+Fixes: 4b5923249b8fa4 ("net: dsa: lantiq_gswip: Configure all remaining GSWIP_MII_CFG bits")
+Tested-by: Jan Hoffmann <jan@3e8.eu>
+Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
+Link: https://lore.kernel.org/r/20220425152027.2220750-1-martin.blumenstingl@googlemail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/dsa/lantiq_gswip.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
+index 80ef7ea77954..4abae06499a9 100644
+--- a/drivers/net/dsa/lantiq_gswip.c
++++ b/drivers/net/dsa/lantiq_gswip.c
+@@ -1629,9 +1629,6 @@ static void gswip_phylink_mac_config(struct dsa_switch *ds, int port,
+               break;
+       case PHY_INTERFACE_MODE_RMII:
+               miicfg |= GSWIP_MII_CFG_MODE_RMIIM;
+-
+-              /* Configure the RMII clock as output: */
+-              miicfg |= GSWIP_MII_CFG_RMII_CLK;
+               break;
+       case PHY_INTERFACE_MODE_RGMII:
+       case PHY_INTERFACE_MODE_RGMII_ID:
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-fec-add-missing-of_node_put-in-fec_enet_init_sto.patch b/queue-5.10/net-fec-add-missing-of_node_put-in-fec_enet_init_sto.patch
new file mode 100644 (file)
index 0000000..06f6dc0
--- /dev/null
@@ -0,0 +1,36 @@
+From ba63117626b46bbb49b5a5ff8b9f13b65efadd78 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 20:52:31 +0800
+Subject: net: fec: add missing of_node_put() in fec_enet_init_stop_mode()
+
+From: Yang Yingliang <yangyingliang@huawei.com>
+
+[ Upstream commit d2b52ec056d5bddb055c8f21d7489a23548d0838 ]
+
+Put device node in error path in fec_enet_init_stop_mode().
+
+Fixes: 8a448bf832af ("net: ethernet: fec: move GPR register offset and bit into DT")
+Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
+Link: https://lore.kernel.org/r/20220426125231.375688-1-yangyingliang@huawei.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/freescale/fec_main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
+index 166bc3f3b34c..d8bdaf2e5365 100644
+--- a/drivers/net/ethernet/freescale/fec_main.c
++++ b/drivers/net/ethernet/freescale/fec_main.c
+@@ -3529,7 +3529,7 @@ static int fec_enet_init_stop_mode(struct fec_enet_private *fep,
+                                        ARRAY_SIZE(out_val));
+       if (ret) {
+               dev_dbg(&fep->pdev->dev, "no stop mode property\n");
+-              return ret;
++              goto out;
+       }
+       fep->stop_gpr.gpr = syscon_node_to_regmap(gpr_np);
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-hns3-add-return-value-for-mailbox-handling-in-pf.patch b/queue-5.10/net-hns3-add-return-value-for-mailbox-handling-in-pf.patch
new file mode 100644 (file)
index 0000000..91c92da
--- /dev/null
@@ -0,0 +1,100 @@
+From dd8db19c730cdd62f422818b5703eb1e47d3e46b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 20:57:25 +0800
+Subject: net: hns3: add return value for mailbox handling in PF
+
+From: Jian Shen <shenjian15@huawei.com>
+
+[ Upstream commit c59d606296842409a6e5a4828235b0bd46b12bc4 ]
+
+Currently, there are some querying mailboxes sent from VF to PF,
+and VF will wait the PF's handling result. For mailbox
+HCLGE_MBX_GET_QID_IN_PF and HCLGE_MBX_GET_RSS_KEY, it may fail
+when the input parameter is invalid, but the prototype of their
+handler function is void. In this case, PF always return success
+to VF, which may cause the VF get incorrect result.
+
+Fixes it by adding return value for these function.
+
+Fixes: 63b1279d9905 ("net: hns3: check queue id range before using")
+Fixes: 532cfc0df1e4 ("net: hns3: add a check for index in hclge_get_rss_key()")
+Signed-off-by: Jian Shen <shenjian15@huawei.com>
+Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../hisilicon/hns3/hns3pf/hclge_mbx.c         | 22 ++++++++++---------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+index b948fe3ac56b..51b7b46f2f30 100644
+--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+@@ -584,9 +584,9 @@ static int hclge_set_vf_mtu(struct hclge_vport *vport,
+       return hclge_set_vport_mtu(vport, mtu);
+ }
+-static void hclge_get_queue_id_in_pf(struct hclge_vport *vport,
+-                                   struct hclge_mbx_vf_to_pf_cmd *mbx_req,
+-                                   struct hclge_respond_to_vf_msg *resp_msg)
++static int hclge_get_queue_id_in_pf(struct hclge_vport *vport,
++                                  struct hclge_mbx_vf_to_pf_cmd *mbx_req,
++                                  struct hclge_respond_to_vf_msg *resp_msg)
+ {
+       struct hnae3_handle *handle = &vport->nic;
+       struct hclge_dev *hdev = vport->back;
+@@ -596,17 +596,18 @@ static void hclge_get_queue_id_in_pf(struct hclge_vport *vport,
+       if (queue_id >= handle->kinfo.num_tqps) {
+               dev_err(&hdev->pdev->dev, "Invalid queue id(%u) from VF %u\n",
+                       queue_id, mbx_req->mbx_src_vfid);
+-              return;
++              return -EINVAL;
+       }
+       qid_in_pf = hclge_covert_handle_qid_global(&vport->nic, queue_id);
+       memcpy(resp_msg->data, &qid_in_pf, sizeof(qid_in_pf));
+       resp_msg->len = sizeof(qid_in_pf);
++      return 0;
+ }
+-static void hclge_get_rss_key(struct hclge_vport *vport,
+-                            struct hclge_mbx_vf_to_pf_cmd *mbx_req,
+-                            struct hclge_respond_to_vf_msg *resp_msg)
++static int hclge_get_rss_key(struct hclge_vport *vport,
++                           struct hclge_mbx_vf_to_pf_cmd *mbx_req,
++                           struct hclge_respond_to_vf_msg *resp_msg)
+ {
+ #define HCLGE_RSS_MBX_RESP_LEN        8
+       struct hclge_dev *hdev = vport->back;
+@@ -622,13 +623,14 @@ static void hclge_get_rss_key(struct hclge_vport *vport,
+               dev_warn(&hdev->pdev->dev,
+                        "failed to get the rss hash key, the index(%u) invalid !\n",
+                        index);
+-              return;
++              return -EINVAL;
+       }
+       memcpy(resp_msg->data,
+              &hdev->vport[0].rss_hash_key[index * HCLGE_RSS_MBX_RESP_LEN],
+              HCLGE_RSS_MBX_RESP_LEN);
+       resp_msg->len = HCLGE_RSS_MBX_RESP_LEN;
++      return 0;
+ }
+ static void hclge_link_fail_parse(struct hclge_dev *hdev, u8 link_fail_code)
+@@ -807,10 +809,10 @@ void hclge_mbx_handler(struct hclge_dev *hdev)
+                                       "VF fail(%d) to set mtu\n", ret);
+                       break;
+               case HCLGE_MBX_GET_QID_IN_PF:
+-                      hclge_get_queue_id_in_pf(vport, req, &resp_msg);
++                      ret = hclge_get_queue_id_in_pf(vport, req, &resp_msg);
+                       break;
+               case HCLGE_MBX_GET_RSS_KEY:
+-                      hclge_get_rss_key(vport, req, &resp_msg);
++                      ret = hclge_get_rss_key(vport, req, &resp_msg);
+                       break;
+               case HCLGE_MBX_GET_LINK_MODE:
+                       hclge_get_link_mode(vport, req);
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-hns3-add-validity-check-for-message-data-length.patch b/queue-5.10/net-hns3-add-validity-check-for-message-data-length.patch
new file mode 100644 (file)
index 0000000..8bcd590
--- /dev/null
@@ -0,0 +1,42 @@
+From 6babdcfcb8b925d4761ad53103d12fe9e4d50086 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 20:57:24 +0800
+Subject: net: hns3: add validity check for message data length
+
+From: Jian Shen <shenjian15@huawei.com>
+
+[ Upstream commit 7d413735cb18ff73aaba3457b16b08332e8d3cc4 ]
+
+Add validity check for message data length in function
+hclge_send_mbx_msg(), avoid unexpected overflow.
+
+Fixes: dde1a86e93ca ("net: hns3: Add mailbox support to PF driver")
+Signed-off-by: Jian Shen <shenjian15@huawei.com>
+Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+index 2ea347b822db..b948fe3ac56b 100644
+--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+@@ -91,6 +91,13 @@ static int hclge_send_mbx_msg(struct hclge_vport *vport, u8 *msg, u16 msg_len,
+       enum hclge_cmd_status status;
+       struct hclge_desc desc;
++      if (msg_len > HCLGE_MBX_MAX_MSG_SIZE) {
++              dev_err(&hdev->pdev->dev,
++                      "msg data length(=%u) exceeds maximum(=%u)\n",
++                      msg_len, HCLGE_MBX_MAX_MSG_SIZE);
++              return -EMSGSIZE;
++      }
++
+       resp_pf_to_vf = (struct hclge_mbx_pf_to_vf_cmd *)desc.data;
+       hclge_cmd_setup_basic_desc(&desc, HCLGEVF_OPC_MBX_PF_TO_VF, false);
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-hns3-modify-the-return-code-of-hclge_get_ring_ch.patch b/queue-5.10/net-hns3-modify-the-return-code-of-hclge_get_ring_ch.patch
new file mode 100644 (file)
index 0000000..df94627
--- /dev/null
@@ -0,0 +1,40 @@
+From 25c53d321431a5c983a55703b72b95601756ccf8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 20:57:23 +0800
+Subject: net: hns3: modify the return code of hclge_get_ring_chain_from_mbx
+
+From: Jie Wang <wangjie125@huawei.com>
+
+[ Upstream commit 48009e9972974c52a5f649f761862dd67bce3d13 ]
+
+Currently, function hclge_get_ring_chain_from_mbx will return -ENOMEM if
+ring_num is bigger than HCLGE_MBX_MAX_RING_CHAIN_PARAM_NUM. It is better to
+return -EINVAL for the invalid parameter case.
+
+So this patch fixes it by return -EINVAL in this abnormal branch.
+
+Fixes: 5d02a58dae60 ("net: hns3: fix for buffer overflow smatch warning")
+Signed-off-by: Jie Wang <wangjie125@huawei.com>
+Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+index 5d3996767256..2ea347b822db 100644
+--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_mbx.c
+@@ -173,7 +173,7 @@ static int hclge_get_ring_chain_from_mbx(
+       ring_num = req->msg.ring_num;
+       if (ring_num > HCLGE_MBX_MAX_RING_CHAIN_PARAM_NUM)
+-              return -ENOMEM;
++              return -EINVAL;
+       for (i = 0; i < ring_num; i++) {
+               if (req->msg.param[i].tqp_index >= vport->nic.kinfo.rss_size) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-phy-marvell10g-fix-return-value-on-error.patch b/queue-5.10/net-phy-marvell10g-fix-return-value-on-error.patch
new file mode 100644 (file)
index 0000000..69e692d
--- /dev/null
@@ -0,0 +1,41 @@
+From c59910dd83bd24e20ceacdc5e48a1e19e20293ac Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Apr 2022 09:27:38 +0300
+Subject: net: phy: marvell10g: fix return value on error
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Baruch Siach <baruch.siach@siklu.com>
+
+[ Upstream commit 0ed9704b660b259b54743cad8a84a11148f60f0a ]
+
+Return back the error value that we get from phy_read_mmd().
+
+Fixes: c84786fa8f91 ("net: phy: marvell10g: read copper results from CSSR1")
+Signed-off-by: Baruch Siach <baruch.siach@siklu.com>
+Reviewed-by: Marek Behún <kabel@kernel.org>
+Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
+Link: https://lore.kernel.org/r/f47cb031aeae873bb008ba35001607304a171a20.1650868058.git.baruch@tkos.co.il
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/phy/marvell10g.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
+index b1bb9b8e1e4e..2b64318efdba 100644
+--- a/drivers/net/phy/marvell10g.c
++++ b/drivers/net/phy/marvell10g.c
+@@ -650,7 +650,7 @@ static int mv3310_read_status_copper(struct phy_device *phydev)
+       cssr1 = phy_read_mmd(phydev, MDIO_MMD_PCS, MV_PCS_CSSR1);
+       if (cssr1 < 0)
+-              return val;
++              return cssr1;
+       /* If the link settings are not resolved, mark the link down */
+       if (!(cssr1 & MV_PCS_CSSR1_RESOLVED)) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-smc-sync-err-code-when-tcp-connection-was-refuse.patch b/queue-5.10/net-smc-sync-err-code-when-tcp-connection-was-refuse.patch
new file mode 100644 (file)
index 0000000..ee33e60
--- /dev/null
@@ -0,0 +1,41 @@
+From 76d790760ae80234e7e08e561a2a2f7b40afbddb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 17:40:27 +0800
+Subject: net/smc: sync err code when tcp connection was refused
+
+From: liuyacan <liuyacan@corp.netease.com>
+
+[ Upstream commit 4e2e65e2e56c6ceb4ea1719360080c0af083229e ]
+
+In the current implementation, when TCP initiates a connection
+to an unavailable [ip,port], ECONNREFUSED will be stored in the
+TCP socket, but SMC will not. However, some apps (like curl) use
+getsockopt(,,SO_ERROR,,) to get the error information, which makes
+them miss the error message and behave strangely.
+
+Fixes: 50717a37db03 ("net/smc: nonblocking connect rework")
+Signed-off-by: liuyacan <liuyacan@corp.netease.com>
+Reviewed-by: Tony Lu <tonylu@linux.alibaba.com>
+Acked-by: Karsten Graul <kgraul@linux.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/smc/af_smc.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
+index 1b98f3241150..35db3260e8d5 100644
+--- a/net/smc/af_smc.c
++++ b/net/smc/af_smc.c
+@@ -1057,6 +1057,8 @@ static void smc_connect_work(struct work_struct *work)
+               smc->sk.sk_state = SMC_CLOSED;
+               if (rc == -EPIPE || rc == -EAGAIN)
+                       smc->sk.sk_err = EPIPE;
++              else if (rc == -ECONNREFUSED)
++                      smc->sk.sk_err = ECONNREFUSED;
+               else if (signal_pending(current))
+                       smc->sk.sk_err = -sock_intr_errno(timeo);
+               sock_put(&smc->sk); /* passive closing */
+-- 
+2.35.1
+
diff --git a/queue-5.10/netfilter-nft_set_rbtree-overlap-detection-with-elem.patch b/queue-5.10/netfilter-nft_set_rbtree-overlap-detection-with-elem.patch
new file mode 100644 (file)
index 0000000..cc5a8a7
--- /dev/null
@@ -0,0 +1,49 @@
+From d16e3c03adfbf0787879e5614aab5ae2c6d91c5e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Apr 2022 12:21:05 +0200
+Subject: netfilter: nft_set_rbtree: overlap detection with element re-addition
+ after deletion
+
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+
+[ Upstream commit babc3dc9524f0bcb5a0ec61f3c3639b11508fad6 ]
+
+This patch fixes spurious EEXIST errors.
+
+Extend d2df92e98a34 ("netfilter: nft_set_rbtree: handle element
+re-addition after deletion") to deal with elements with same end flags
+in the same transation.
+
+Reset the overlap flag as described by 7c84d41416d8 ("netfilter:
+nft_set_rbtree: Detect partial overlaps on insertion").
+
+Fixes: 7c84d41416d8 ("netfilter: nft_set_rbtree: Detect partial overlaps on insertion")
+Fixes: d2df92e98a34 ("netfilter: nft_set_rbtree: handle element re-addition after deletion")
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netfilter/nft_set_rbtree.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/net/netfilter/nft_set_rbtree.c b/net/netfilter/nft_set_rbtree.c
+index 217ab3644c25..94a5446c5eae 100644
+--- a/net/netfilter/nft_set_rbtree.c
++++ b/net/netfilter/nft_set_rbtree.c
+@@ -348,7 +348,11 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
+                               *ext = &rbe->ext;
+                               return -EEXIST;
+                       } else {
+-                              p = &parent->rb_left;
++                              overlap = false;
++                              if (nft_rbtree_interval_end(rbe))
++                                      p = &parent->rb_left;
++                              else
++                                      p = &parent->rb_right;
+                       }
+               }
+-- 
+2.35.1
+
diff --git a/queue-5.10/phy-mapphone-mdm6600-fix-pm-error-handling-in-phy_md.patch b/queue-5.10/phy-mapphone-mdm6600-fix-pm-error-handling-in-phy_md.patch
new file mode 100644 (file)
index 0000000..c12a221
--- /dev/null
@@ -0,0 +1,46 @@
+From 56314e713df471ad185ec17a24a45986e19879a0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 1 Mar 2022 02:46:11 +0000
+Subject: phy: mapphone-mdm6600: Fix PM error handling in phy_mdm6600_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit d644e0d79829b1b9a14beedbdb0dc1256fc3677d ]
+
+The pm_runtime_enable will increase power disable depth.
+If the probe fails, we should use pm_runtime_disable() to balance
+pm_runtime_enable(). And use pm_runtime_dont_use_autosuspend() to
+undo pm_runtime_use_autosuspend()
+In the PM Runtime docs:
+    Drivers in ->remove() callback should undo the runtime PM changes done
+    in ->probe(). Usually this means calling pm_runtime_disable(),
+    pm_runtime_dont_use_autosuspend() etc.
+
+We should do this in error handling.
+
+Fixes: f7f50b2a7b05 ("phy: mapphone-mdm6600: Add runtime PM support for n_gsm on USB suspend")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220301024615.31899-1-linmq006@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/motorola/phy-mapphone-mdm6600.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/phy/motorola/phy-mapphone-mdm6600.c b/drivers/phy/motorola/phy-mapphone-mdm6600.c
+index 5172971f4c36..3cd4d51c247c 100644
+--- a/drivers/phy/motorola/phy-mapphone-mdm6600.c
++++ b/drivers/phy/motorola/phy-mapphone-mdm6600.c
+@@ -629,7 +629,8 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
+ cleanup:
+       if (error < 0)
+               phy_mdm6600_device_power_off(ddata);
+-
++      pm_runtime_disable(ddata->dev);
++      pm_runtime_dont_use_autosuspend(ddata->dev);
+       return error;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/phy-samsung-exynos5250-sata-fix-missing-device-put-i.patch b/queue-5.10/phy-samsung-exynos5250-sata-fix-missing-device-put-i.patch
new file mode 100644 (file)
index 0000000..b93a553
--- /dev/null
@@ -0,0 +1,77 @@
+From 38c2f10a65a6a49bcb847bff22e7bdd28cbf124e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 11:18:57 +0200
+Subject: phy: samsung: exynos5250-sata: fix missing device put in probe error
+ paths
+
+From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+
+[ Upstream commit 5c8402c4db45dd55c2c93c8d730f5dfa7c78a702 ]
+
+The actions of of_find_i2c_device_by_node() in probe function should be
+reversed in error paths by putting the reference to obtained device.
+
+Fixes: bcff4cba41bc ("PHY: Exynos: Add Exynos5250 SATA PHY driver")
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
+Link: https://lore.kernel.org/r/20220407091857.230386-2-krzysztof.kozlowski@linaro.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/samsung/phy-exynos5250-sata.c | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/phy/samsung/phy-exynos5250-sata.c b/drivers/phy/samsung/phy-exynos5250-sata.c
+index 5077987570fd..ea46576404b8 100644
+--- a/drivers/phy/samsung/phy-exynos5250-sata.c
++++ b/drivers/phy/samsung/phy-exynos5250-sata.c
+@@ -199,20 +199,21 @@ static int exynos_sata_phy_probe(struct platform_device *pdev)
+       sata_phy->phyclk = devm_clk_get(dev, "sata_phyctrl");
+       if (IS_ERR(sata_phy->phyclk)) {
+               dev_err(dev, "failed to get clk for PHY\n");
+-              return PTR_ERR(sata_phy->phyclk);
++              ret = PTR_ERR(sata_phy->phyclk);
++              goto put_dev;
+       }
+       ret = clk_prepare_enable(sata_phy->phyclk);
+       if (ret < 0) {
+               dev_err(dev, "failed to enable source clk\n");
+-              return ret;
++              goto put_dev;
+       }
+       sata_phy->phy = devm_phy_create(dev, NULL, &exynos_sata_phy_ops);
+       if (IS_ERR(sata_phy->phy)) {
+-              clk_disable_unprepare(sata_phy->phyclk);
+               dev_err(dev, "failed to create PHY\n");
+-              return PTR_ERR(sata_phy->phy);
++              ret = PTR_ERR(sata_phy->phy);
++              goto clk_disable;
+       }
+       phy_set_drvdata(sata_phy->phy, sata_phy);
+@@ -220,11 +221,18 @@ static int exynos_sata_phy_probe(struct platform_device *pdev)
+       phy_provider = devm_of_phy_provider_register(dev,
+                                       of_phy_simple_xlate);
+       if (IS_ERR(phy_provider)) {
+-              clk_disable_unprepare(sata_phy->phyclk);
+-              return PTR_ERR(phy_provider);
++              ret = PTR_ERR(phy_provider);
++              goto clk_disable;
+       }
+       return 0;
++
++clk_disable:
++      clk_disable_unprepare(sata_phy->phyclk);
++put_dev:
++      put_device(&sata_phy->client->dev);
++
++      return ret;
+ }
+ static const struct of_device_id exynos_sata_phy_of_match[] = {
+-- 
+2.35.1
+
diff --git a/queue-5.10/phy-samsung-fix-missing-of_node_put-in-exynos_sata_p.patch b/queue-5.10/phy-samsung-fix-missing-of_node_put-in-exynos_sata_p.patch
new file mode 100644 (file)
index 0000000..59188cd
--- /dev/null
@@ -0,0 +1,38 @@
+From 20e0e947ba3d013c9d0cd0c044e55ba02c82c3e2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 11:18:56 +0200
+Subject: phy: samsung: Fix missing of_node_put() in exynos_sata_phy_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 388ec8f079f2f20d5cd183c3bc6f33cbc3ffd3ef ]
+
+The device_node pointer is returned by of_parse_phandle() with refcount
+incremented. We should use of_node_put() on it when done.
+
+Fixes: bcff4cba41bc ("PHY: Exynos: Add Exynos5250 SATA PHY driver")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20220407091857.230386-1-krzysztof.kozlowski@linaro.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/samsung/phy-exynos5250-sata.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/phy/samsung/phy-exynos5250-sata.c b/drivers/phy/samsung/phy-exynos5250-sata.c
+index 4dd7324d91b2..5077987570fd 100644
+--- a/drivers/phy/samsung/phy-exynos5250-sata.c
++++ b/drivers/phy/samsung/phy-exynos5250-sata.c
+@@ -190,6 +190,7 @@ static int exynos_sata_phy_probe(struct platform_device *pdev)
+               return -EINVAL;
+       sata_phy->client = of_find_i2c_device_by_node(node);
++      of_node_put(node);
+       if (!sata_phy->client)
+               return -EPROBE_DEFER;
+-- 
+2.35.1
+
diff --git a/queue-5.10/phy-ti-add-missing-pm_runtime_disable-in-serdes_am65.patch b/queue-5.10/phy-ti-add-missing-pm_runtime_disable-in-serdes_am65.patch
new file mode 100644 (file)
index 0000000..d8a09e0
--- /dev/null
@@ -0,0 +1,39 @@
+From 5a116b56e73780f62bbbebc546c66d6c291d28ec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 1 Mar 2022 02:58:49 +0000
+Subject: phy: ti: Add missing pm_runtime_disable() in serdes_am654_probe
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit ce88613e5bd579478653a028291098143f2a5bdf ]
+
+The pm_runtime_enable() will increase power disable depth.
+If the probe fails, we should use pm_runtime_disable() to balance
+pm_runtime_enable().
+Add missing pm_runtime_disable() for serdes_am654_probe().
+
+Fixes: 71e2f5c5c224 ("phy: ti: Add a new SERDES driver for TI's AM654x SoC")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220301025853.1911-1-linmq006@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/ti/phy-am654-serdes.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/phy/ti/phy-am654-serdes.c b/drivers/phy/ti/phy-am654-serdes.c
+index 2ff56ce77b30..21c0088f5ca9 100644
+--- a/drivers/phy/ti/phy-am654-serdes.c
++++ b/drivers/phy/ti/phy-am654-serdes.c
+@@ -838,7 +838,7 @@ static int serdes_am654_probe(struct platform_device *pdev)
+ clk_err:
+       of_clk_del_provider(node);
+-
++      pm_runtime_disable(dev);
+       return ret;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/phy-ti-omap-usb2-fix-error-handling-in-omap_usb2_ena.patch b/queue-5.10/phy-ti-omap-usb2-fix-error-handling-in-omap_usb2_ena.patch
new file mode 100644 (file)
index 0000000..207b273
--- /dev/null
@@ -0,0 +1,38 @@
+From 3feb7f0a3110e4a8e3f72a55a76a67c1d17ef29b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 18 Mar 2022 10:57:46 +0000
+Subject: phy: ti: omap-usb2: Fix error handling in omap_usb2_enable_clocks
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 3588060befff75ff39fab7122b94c6fb3148fcda ]
+
+The corresponding API for clk_prepare_enable is clk_disable_unprepare.
+Make sure that the clock is unprepared on exit by changing clk_disable
+to clk_disable_unprepare.
+
+Fixes: ed31ee7cf1fe ("phy: ti: usb2: Fix logic on -EPROBE_DEFER")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220318105748.19532-1-linmq006@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/phy/ti/phy-omap-usb2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/phy/ti/phy-omap-usb2.c b/drivers/phy/ti/phy-omap-usb2.c
+index 4fec90d2624f..f77ac041d836 100644
+--- a/drivers/phy/ti/phy-omap-usb2.c
++++ b/drivers/phy/ti/phy-omap-usb2.c
+@@ -215,7 +215,7 @@ static int omap_usb2_enable_clocks(struct omap_usb *phy)
+       return 0;
+ err1:
+-      clk_disable(phy->wkupclk);
++      clk_disable_unprepare(phy->wkupclk);
+ err0:
+       return ret;
+-- 
+2.35.1
+
diff --git a/queue-5.10/pinctrl-mediatek-moore-fix-build-error.patch b/queue-5.10/pinctrl-mediatek-moore-fix-build-error.patch
new file mode 100644 (file)
index 0000000..72b1805
--- /dev/null
@@ -0,0 +1,42 @@
+From f7b601a15c6258356bf2857f41d07300b0d004dd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 9 Apr 2022 18:59:58 +0800
+Subject: pinctrl: mediatek: moore: Fix build error
+
+From: YueHaibing <yuehaibing@huawei.com>
+
+[ Upstream commit 87950929e2ff2236207bdbe14bff8230558b541b ]
+
+If EINT_MTK is m and PINCTRL_MTK_V2 is y, build fails:
+
+drivers/pinctrl/mediatek/pinctrl-moore.o: In function `mtk_gpio_set_config':
+pinctrl-moore.c:(.text+0xa6c): undefined reference to `mtk_eint_set_debounce'
+drivers/pinctrl/mediatek/pinctrl-moore.o: In function `mtk_gpio_to_irq':
+pinctrl-moore.c:(.text+0xacc): undefined reference to `mtk_eint_find_irq'
+
+Select EINT_MTK for PINCTRL_MTK_V2 to fix this.
+
+Fixes: 8174a8512e3e ("pinctrl: mediatek: make MediaTek pinctrl v2 driver ready for buidling loadable module")
+Signed-off-by: YueHaibing <yuehaibing@huawei.com>
+Link: https://lore.kernel.org/r/20220409105958.37412-1-yuehaibing@huawei.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/mediatek/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/pinctrl/mediatek/Kconfig b/drivers/pinctrl/mediatek/Kconfig
+index eef17f228669..4ed41d361589 100644
+--- a/drivers/pinctrl/mediatek/Kconfig
++++ b/drivers/pinctrl/mediatek/Kconfig
+@@ -30,6 +30,7 @@ config PINCTRL_MTK_MOORE
+       select GENERIC_PINMUX_FUNCTIONS
+       select GPIOLIB
+       select OF_GPIO
++      select EINT_MTK
+       select PINCTRL_MTK_V2
+ config PINCTRL_MTK_PARIS
+-- 
+2.35.1
+
diff --git a/queue-5.10/pinctrl-pistachio-fix-use-of-irq_of_parse_and_map.patch b/queue-5.10/pinctrl-pistachio-fix-use-of-irq_of_parse_and_map.patch
new file mode 100644 (file)
index 0000000..30028f9
--- /dev/null
@@ -0,0 +1,43 @@
+From 0dab5fbd5387153b6ece97112357b21243d4bb6b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 03:14:30 +0000
+Subject: pinctrl: pistachio: fix use of irq_of_parse_and_map()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit 0c9843a74a85224a89daa81fa66891dae2f930e1 ]
+
+The irq_of_parse_and_map() function returns 0 on failure, and does not
+return an negative value.
+
+Fixes: cefc03e5995e ("pinctrl: Add Pistachio SoC pin control driver")
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Link: https://lore.kernel.org/r/20220424031430.3170759-1-lv.ruyi@zte.com.cn
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/pinctrl-pistachio.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/pinctrl/pinctrl-pistachio.c b/drivers/pinctrl/pinctrl-pistachio.c
+index ec761ba2a2da..989a37fb402d 100644
+--- a/drivers/pinctrl/pinctrl-pistachio.c
++++ b/drivers/pinctrl/pinctrl-pistachio.c
+@@ -1374,10 +1374,10 @@ static int pistachio_gpio_register(struct pistachio_pinctrl *pctl)
+               }
+               irq = irq_of_parse_and_map(child, 0);
+-              if (irq < 0) {
+-                      dev_err(pctl->dev, "No IRQ for bank %u: %d\n", i, irq);
++              if (!irq) {
++                      dev_err(pctl->dev, "No IRQ for bank %u\n", i);
+                       of_node_put(child);
+-                      ret = irq;
++                      ret = -EINVAL;
+                       goto err;
+               }
+-- 
+2.35.1
+
diff --git a/queue-5.10/pinctrl-rockchip-fix-rk3308-pinmux-bits.patch b/queue-5.10/pinctrl-rockchip-fix-rk3308-pinmux-bits.patch
new file mode 100644 (file)
index 0000000..1bb6ba5
--- /dev/null
@@ -0,0 +1,162 @@
+From c0d78c1b8b014cbdfeeaabc0cfa8d6a0e271e036 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 16:24:31 +0200
+Subject: pinctrl: rockchip: fix RK3308 pinmux bits
+
+From: Luca Ceresoli <luca.ceresoli@bootlin.com>
+
+[ Upstream commit 1f3e25a068832f8892a5ff71467622d012f5bc9f ]
+
+Some of the pinmuxing bits described in rk3308_mux_recalced_data are wrong,
+pointing to non-existing registers.
+
+Fix the entire table.
+
+Also add a comment in front of each entry with the same string that appears
+in the datasheet to make the table easier to compare with the docs.
+
+This fix has been tested on real hardware for the gpio3b3_sel entry.
+
+Fixes: 7825aeb7b208 ("pinctrl: rockchip: add rk3308 SoC support")
+Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Reviewed-by: Heiko Stuebner <heiko@sntech.de>
+Link: https://lore.kernel.org/r/20220420142432.248565-1-luca.ceresoli@bootlin.com
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/pinctrl-rockchip.c | 45 ++++++++++++++++++++----------
+ 1 file changed, 30 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
+index 9df48e0cf4cb..07b1204174bf 100644
+--- a/drivers/pinctrl/pinctrl-rockchip.c
++++ b/drivers/pinctrl/pinctrl-rockchip.c
+@@ -663,95 +663,110 @@ static  struct rockchip_mux_recalced_data rk3128_mux_recalced_data[] = {
+ static struct rockchip_mux_recalced_data rk3308_mux_recalced_data[] = {
+       {
++              /* gpio1b6_sel */
+               .num = 1,
+               .pin = 14,
+               .reg = 0x28,
+               .bit = 12,
+               .mask = 0xf
+       }, {
++              /* gpio1b7_sel */
+               .num = 1,
+               .pin = 15,
+               .reg = 0x2c,
+               .bit = 0,
+               .mask = 0x3
+       }, {
++              /* gpio1c2_sel */
+               .num = 1,
+               .pin = 18,
+               .reg = 0x30,
+               .bit = 4,
+               .mask = 0xf
+       }, {
++              /* gpio1c3_sel */
+               .num = 1,
+               .pin = 19,
+               .reg = 0x30,
+               .bit = 8,
+               .mask = 0xf
+       }, {
++              /* gpio1c4_sel */
+               .num = 1,
+               .pin = 20,
+               .reg = 0x30,
+               .bit = 12,
+               .mask = 0xf
+       }, {
++              /* gpio1c5_sel */
+               .num = 1,
+               .pin = 21,
+               .reg = 0x34,
+               .bit = 0,
+               .mask = 0xf
+       }, {
++              /* gpio1c6_sel */
+               .num = 1,
+               .pin = 22,
+               .reg = 0x34,
+               .bit = 4,
+               .mask = 0xf
+       }, {
++              /* gpio1c7_sel */
+               .num = 1,
+               .pin = 23,
+               .reg = 0x34,
+               .bit = 8,
+               .mask = 0xf
+       }, {
++              /* gpio3b4_sel */
+               .num = 3,
+               .pin = 12,
+               .reg = 0x68,
+               .bit = 8,
+               .mask = 0xf
+       }, {
++              /* gpio3b5_sel */
+               .num = 3,
+               .pin = 13,
+               .reg = 0x68,
+               .bit = 12,
+               .mask = 0xf
+       }, {
++              /* gpio2a2_sel */
+               .num = 2,
+               .pin = 2,
+-              .reg = 0x608,
+-              .bit = 0,
+-              .mask = 0x7
++              .reg = 0x40,
++              .bit = 4,
++              .mask = 0x3
+       }, {
++              /* gpio2a3_sel */
+               .num = 2,
+               .pin = 3,
+-              .reg = 0x608,
+-              .bit = 4,
+-              .mask = 0x7
++              .reg = 0x40,
++              .bit = 6,
++              .mask = 0x3
+       }, {
++              /* gpio2c0_sel */
+               .num = 2,
+               .pin = 16,
+-              .reg = 0x610,
+-              .bit = 8,
+-              .mask = 0x7
++              .reg = 0x50,
++              .bit = 0,
++              .mask = 0x3
+       }, {
++              /* gpio3b2_sel */
+               .num = 3,
+               .pin = 10,
+-              .reg = 0x610,
+-              .bit = 0,
+-              .mask = 0x7
++              .reg = 0x68,
++              .bit = 4,
++              .mask = 0x3
+       }, {
++              /* gpio3b3_sel */
+               .num = 3,
+               .pin = 11,
+-              .reg = 0x610,
+-              .bit = 4,
+-              .mask = 0x7
++              .reg = 0x68,
++              .bit = 6,
++              .mask = 0x3
+       },
+ };
+-- 
+2.35.1
+
diff --git a/queue-5.10/pinctrl-stm32-do-not-call-stm32_gpio_get-for-edge-tr.patch b/queue-5.10/pinctrl-stm32-do-not-call-stm32_gpio_get-for-edge-tr.patch
new file mode 100644 (file)
index 0000000..8cb31b7
--- /dev/null
@@ -0,0 +1,50 @@
+From 2ad9c49cdef34816f2ae544d045d7e2c5cc72a87 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 15 Apr 2022 23:54:10 +0200
+Subject: pinctrl: stm32: Do not call stm32_gpio_get() for edge triggered IRQs
+ in EOI
+
+From: Marek Vasut <marex@denx.de>
+
+[ Upstream commit e74200ebf7c4f6a7a7d1be9f63833ddba251effa ]
+
+The stm32_gpio_get() should only be called for LEVEL triggered interrupts,
+skip calling it for EDGE triggered interrupts altogether to avoid wasting
+CPU cycles in EOI handler. On this platform, EDGE triggered interrupts are
+the majority and LEVEL triggered interrupts are the exception no less, and
+the CPU cycles are not abundant.
+
+Fixes: 47beed513a85b ("pinctrl: stm32: Add level interrupt support to gpio irq chip")
+Signed-off-by: Marek Vasut <marex@denx.de>
+Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
+Cc: Fabien Dessenne <fabien.dessenne@foss.st.com>
+Cc: Linus Walleij <linus.walleij@linaro.org>
+Cc: Marc Zyngier <maz@kernel.org>
+Cc: linux-stm32@st-md-mailman.stormreply.com
+Cc: linux-arm-kernel@lists.infradead.org
+To: linux-gpio@vger.kernel.org
+Link: https://lore.kernel.org/r/20220415215410.498349-1-marex@denx.de
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/stm32/pinctrl-stm32.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
+index e13723bb2be4..12d4d92c4a17 100644
+--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
++++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
+@@ -311,6 +311,10 @@ static void stm32_gpio_irq_trigger(struct irq_data *d)
+       struct stm32_gpio_bank *bank = d->domain->host_data;
+       int level;
++      /* Do not access the GPIO if this is not LEVEL triggered IRQ. */
++      if (!(bank->irq_type[d->hwirq] & IRQ_TYPE_LEVEL_MASK))
++              return;
++
+       /* If level interrupt type then retrig */
+       level = stm32_gpio_get(&bank->gpio_chip, d->hwirq);
+       if ((level == 0 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_LOW) ||
+-- 
+2.35.1
+
diff --git a/queue-5.10/pinctrl-stm32-keep-pinctrl-block-clock-enabled-when-.patch b/queue-5.10/pinctrl-stm32-keep-pinctrl-block-clock-enabled-when-.patch
new file mode 100644 (file)
index 0000000..5e57c9e
--- /dev/null
@@ -0,0 +1,140 @@
+From 484c3fb2e0e4e6572799a0d036f718ec91e41a42 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 16:08:27 +0200
+Subject: pinctrl: stm32: Keep pinctrl block clock enabled when LEVEL IRQ
+ requested
+
+From: Marek Vasut <marex@denx.de>
+
+[ Upstream commit 05d8af449d93e04547b4c6b328e39c890bc803f4 ]
+
+The current EOI handler for LEVEL triggered interrupts calls clk_enable(),
+register IO, clk_disable(). The clock manipulation requires locking which
+happens with IRQs disabled in clk_enable_lock(). Instead of turning the
+clock on and off all the time, enable the clock in case LEVEL interrupt is
+requested and keep the clock enabled until all LEVEL interrupts are freed.
+The LEVEL interrupts are an exception on this platform and seldom used, so
+this does not affect the common case.
+
+This simplifies the LEVEL interrupt handling considerably and also fixes
+the following splat found when using preempt-rt:
+ ------------[ cut here ]------------
+ WARNING: CPU: 0 PID: 0 at kernel/locking/rtmutex.c:2040 __rt_mutex_trylock+0x37/0x62
+ Modules linked in:
+ CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.10.109-rt65-stable-standard-00068-g6a5afc4b1217 #85
+ Hardware name: STM32 (Device Tree Support)
+ [<c010a45d>] (unwind_backtrace) from [<c010766f>] (show_stack+0xb/0xc)
+ [<c010766f>] (show_stack) from [<c06353ab>] (dump_stack+0x6f/0x84)
+ [<c06353ab>] (dump_stack) from [<c01145e3>] (__warn+0x7f/0xa4)
+ [<c01145e3>] (__warn) from [<c063386f>] (warn_slowpath_fmt+0x3b/0x74)
+ [<c063386f>] (warn_slowpath_fmt) from [<c063b43d>] (__rt_mutex_trylock+0x37/0x62)
+ [<c063b43d>] (__rt_mutex_trylock) from [<c063c053>] (rt_spin_trylock+0x7/0x16)
+ [<c063c053>] (rt_spin_trylock) from [<c036a2f3>] (clk_enable_lock+0xb/0x80)
+ [<c036a2f3>] (clk_enable_lock) from [<c036ba69>] (clk_core_enable_lock+0x9/0x18)
+ [<c036ba69>] (clk_core_enable_lock) from [<c034e9f3>] (stm32_gpio_get+0x11/0x24)
+ [<c034e9f3>] (stm32_gpio_get) from [<c034ef43>] (stm32_gpio_irq_trigger+0x1f/0x48)
+ [<c034ef43>] (stm32_gpio_irq_trigger) from [<c014aa53>] (handle_fasteoi_irq+0x71/0xa8)
+ [<c014aa53>] (handle_fasteoi_irq) from [<c0147111>] (generic_handle_irq+0x19/0x22)
+ [<c0147111>] (generic_handle_irq) from [<c014752d>] (__handle_domain_irq+0x55/0x64)
+ [<c014752d>] (__handle_domain_irq) from [<c0346f13>] (gic_handle_irq+0x53/0x64)
+ [<c0346f13>] (gic_handle_irq) from [<c0100ba5>] (__irq_svc+0x65/0xc0)
+ Exception stack(0xc0e01f18 to 0xc0e01f60)
+ 1f00:                                                       0000300c 00000000
+ 1f20: 0000300c c010ff01 00000000 00000000 c0e00000 c0e07714 00000001 c0e01f78
+ 1f40: c0e07758 00000000 ef7cd0ff c0e01f68 c010554b c0105542 40000033 ffffffff
+ [<c0100ba5>] (__irq_svc) from [<c0105542>] (arch_cpu_idle+0xc/0x1e)
+ [<c0105542>] (arch_cpu_idle) from [<c063be95>] (default_idle_call+0x21/0x3c)
+ [<c063be95>] (default_idle_call) from [<c01324f7>] (do_idle+0xe3/0x1e4)
+ [<c01324f7>] (do_idle) from [<c01327b3>] (cpu_startup_entry+0x13/0x14)
+ [<c01327b3>] (cpu_startup_entry) from [<c0a00c13>] (start_kernel+0x397/0x3d4)
+ [<c0a00c13>] (start_kernel) from [<00000000>] (0x0)
+ ---[ end trace 0000000000000002 ]---
+
+Power consumption measured on STM32MP157C DHCOM SoM is not increased or
+is below noise threshold.
+
+Fixes: 47beed513a85b ("pinctrl: stm32: Add level interrupt support to gpio irq chip")
+Signed-off-by: Marek Vasut <marex@denx.de>
+Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
+Cc: Fabien Dessenne <fabien.dessenne@foss.st.com>
+Cc: Linus Walleij <linus.walleij@linaro.org>
+Cc: Marc Zyngier <maz@kernel.org>
+Cc: linux-stm32@st-md-mailman.stormreply.com
+Cc: linux-arm-kernel@lists.infradead.org
+To: linux-gpio@vger.kernel.org
+Reviewed-by: Fabien Dessenne <fabien.dessenne@foss.st.com>
+Link: https://lore.kernel.org/r/20220421140827.214088-1-marex@denx.de
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pinctrl/stm32/pinctrl-stm32.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
+index 12d4d92c4a17..b017dd400c46 100644
+--- a/drivers/pinctrl/stm32/pinctrl-stm32.c
++++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
+@@ -225,6 +225,13 @@ static void stm32_gpio_free(struct gpio_chip *chip, unsigned offset)
+       pinctrl_gpio_free(chip->base + offset);
+ }
++static int stm32_gpio_get_noclk(struct gpio_chip *chip, unsigned int offset)
++{
++      struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
++
++      return !!(readl_relaxed(bank->base + STM32_GPIO_IDR) & BIT(offset));
++}
++
+ static int stm32_gpio_get(struct gpio_chip *chip, unsigned offset)
+ {
+       struct stm32_gpio_bank *bank = gpiochip_get_data(chip);
+@@ -232,7 +239,7 @@ static int stm32_gpio_get(struct gpio_chip *chip, unsigned offset)
+       clk_enable(bank->clk);
+-      ret = !!(readl_relaxed(bank->base + STM32_GPIO_IDR) & BIT(offset));
++      ret = stm32_gpio_get_noclk(chip, offset);
+       clk_disable(bank->clk);
+@@ -316,7 +323,7 @@ static void stm32_gpio_irq_trigger(struct irq_data *d)
+               return;
+       /* If level interrupt type then retrig */
+-      level = stm32_gpio_get(&bank->gpio_chip, d->hwirq);
++      level = stm32_gpio_get_noclk(&bank->gpio_chip, d->hwirq);
+       if ((level == 0 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_LOW) ||
+           (level == 1 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_HIGH))
+               irq_chip_retrigger_hierarchy(d);
+@@ -358,6 +365,7 @@ static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
+ {
+       struct stm32_gpio_bank *bank = irq_data->domain->host_data;
+       struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
++      unsigned long flags;
+       int ret;
+       ret = stm32_gpio_direction_input(&bank->gpio_chip, irq_data->hwirq);
+@@ -371,6 +379,10 @@ static int stm32_gpio_irq_request_resources(struct irq_data *irq_data)
+               return ret;
+       }
++      flags = irqd_get_trigger_type(irq_data);
++      if (flags & IRQ_TYPE_LEVEL_MASK)
++              clk_enable(bank->clk);
++
+       return 0;
+ }
+@@ -378,6 +390,9 @@ static void stm32_gpio_irq_release_resources(struct irq_data *irq_data)
+ {
+       struct stm32_gpio_bank *bank = irq_data->domain->host_data;
++      if (bank->irq_type[irq_data->hwirq] & IRQ_TYPE_LEVEL_MASK)
++              clk_disable(bank->clk);
++
+       gpiochip_unlock_as_irq(&bank->gpio_chip, irq_data->hwirq);
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/powerpc-perf-fix-32bit-compile.patch b/queue-5.10/powerpc-perf-fix-32bit-compile.patch
new file mode 100644 (file)
index 0000000..8175cdc
--- /dev/null
@@ -0,0 +1,44 @@
+From 9044eeaee74efadddb55fa23236a8df08045b0b9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 12:57:56 +1000
+Subject: powerpc/perf: Fix 32bit compile
+
+From: Alexey Kardashevskiy <aik@ozlabs.ru>
+
+[ Upstream commit bb82c574691daf8f7fa9a160264d15c5804cb769 ]
+
+The "read_bhrb" global symbol is only called under CONFIG_PPC64 of
+arch/powerpc/perf/core-book3s.c but it is compiled for both 32 and 64 bit
+anyway (and LLVM fails to link this on 32bit).
+
+This fixes it by moving bhrb.o to obj64 targets.
+
+Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20220421025756.571995-1-aik@ozlabs.ru
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/perf/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/perf/Makefile b/arch/powerpc/perf/Makefile
+index c02854dea2b2..da9f60ede97b 100644
+--- a/arch/powerpc/perf/Makefile
++++ b/arch/powerpc/perf/Makefile
+@@ -5,11 +5,11 @@ ifdef CONFIG_COMPAT
+ obj-$(CONFIG_PERF_EVENTS)     += callchain_32.o
+ endif
+-obj-$(CONFIG_PPC_PERF_CTRS)   += core-book3s.o bhrb.o
++obj-$(CONFIG_PPC_PERF_CTRS)   += core-book3s.o
+ obj64-$(CONFIG_PPC_PERF_CTRS) += ppc970-pmu.o power5-pmu.o \
+                                  power5+-pmu.o power6-pmu.o power7-pmu.o \
+                                  isa207-common.o power8-pmu.o power9-pmu.o \
+-                                 generic-compat-pmu.o power10-pmu.o
++                                 generic-compat-pmu.o power10-pmu.o bhrb.o
+ obj32-$(CONFIG_PPC_PERF_CTRS) += mpc7450-pmu.o
+ obj-$(CONFIG_PPC_POWERNV)     += imc-pmu.o
+-- 
+2.35.1
+
diff --git a/queue-5.10/revert-ibmvnic-add-ethtool-private-flag-for-driver-d.patch b/queue-5.10/revert-ibmvnic-add-ethtool-private-flag-for-driver-d.patch
new file mode 100644 (file)
index 0000000..e5f592c
--- /dev/null
@@ -0,0 +1,258 @@
+From 18c661bc950c544aaf37c5689f96eb7cb287b171 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Apr 2022 18:51:46 -0500
+Subject: Revert "ibmvnic: Add ethtool private flag for driver-defined queue
+ limits"
+
+From: Dany Madden <drt@linux.ibm.com>
+
+[ Upstream commit aeaf59b78712c7a1827c76f086acff4f586e072f ]
+
+This reverts commit 723ad916134784b317b72f3f6cf0f7ba774e5dae
+
+When client requests channel or ring size larger than what the server
+can support the server will cap the request to the supported max. So,
+the client would not be able to successfully request resources that
+exceed the server limit.
+
+Fixes: 723ad9161347 ("ibmvnic: Add ethtool private flag for driver-defined queue limits")
+Signed-off-by: Dany Madden <drt@linux.ibm.com>
+Link: https://lore.kernel.org/r/20220427235146.23189-1-drt@linux.ibm.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/ibm/ibmvnic.c | 129 ++++++++---------------------
+ drivers/net/ethernet/ibm/ibmvnic.h |   6 --
+ 2 files changed, 35 insertions(+), 100 deletions(-)
+
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
+index 2cd849215913..61fb2a092451 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.c
++++ b/drivers/net/ethernet/ibm/ibmvnic.c
+@@ -2666,13 +2666,8 @@ static void ibmvnic_get_ringparam(struct net_device *netdev,
+ {
+       struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+-      if (adapter->priv_flags & IBMVNIC_USE_SERVER_MAXES) {
+-              ring->rx_max_pending = adapter->max_rx_add_entries_per_subcrq;
+-              ring->tx_max_pending = adapter->max_tx_entries_per_subcrq;
+-      } else {
+-              ring->rx_max_pending = IBMVNIC_MAX_QUEUE_SZ;
+-              ring->tx_max_pending = IBMVNIC_MAX_QUEUE_SZ;
+-      }
++      ring->rx_max_pending = adapter->max_rx_add_entries_per_subcrq;
++      ring->tx_max_pending = adapter->max_tx_entries_per_subcrq;
+       ring->rx_mini_max_pending = 0;
+       ring->rx_jumbo_max_pending = 0;
+       ring->rx_pending = adapter->req_rx_add_entries_per_subcrq;
+@@ -2685,23 +2680,21 @@ static int ibmvnic_set_ringparam(struct net_device *netdev,
+                                struct ethtool_ringparam *ring)
+ {
+       struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+-      int ret;
+-      ret = 0;
++      if (ring->rx_pending > adapter->max_rx_add_entries_per_subcrq  ||
++          ring->tx_pending > adapter->max_tx_entries_per_subcrq) {
++              netdev_err(netdev, "Invalid request.\n");
++              netdev_err(netdev, "Max tx buffers = %llu\n",
++                         adapter->max_rx_add_entries_per_subcrq);
++              netdev_err(netdev, "Max rx buffers = %llu\n",
++                         adapter->max_tx_entries_per_subcrq);
++              return -EINVAL;
++      }
++
+       adapter->desired.rx_entries = ring->rx_pending;
+       adapter->desired.tx_entries = ring->tx_pending;
+-      ret = wait_for_reset(adapter);
+-
+-      if (!ret &&
+-          (adapter->req_rx_add_entries_per_subcrq != ring->rx_pending ||
+-           adapter->req_tx_entries_per_subcrq != ring->tx_pending))
+-              netdev_info(netdev,
+-                          "Could not match full ringsize request. Requested: RX %d, TX %d; Allowed: RX %llu, TX %llu\n",
+-                          ring->rx_pending, ring->tx_pending,
+-                          adapter->req_rx_add_entries_per_subcrq,
+-                          adapter->req_tx_entries_per_subcrq);
+-      return ret;
++      return wait_for_reset(adapter);
+ }
+ static void ibmvnic_get_channels(struct net_device *netdev,
+@@ -2709,14 +2702,8 @@ static void ibmvnic_get_channels(struct net_device *netdev,
+ {
+       struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+-      if (adapter->priv_flags & IBMVNIC_USE_SERVER_MAXES) {
+-              channels->max_rx = adapter->max_rx_queues;
+-              channels->max_tx = adapter->max_tx_queues;
+-      } else {
+-              channels->max_rx = IBMVNIC_MAX_QUEUES;
+-              channels->max_tx = IBMVNIC_MAX_QUEUES;
+-      }
+-
++      channels->max_rx = adapter->max_rx_queues;
++      channels->max_tx = adapter->max_tx_queues;
+       channels->max_other = 0;
+       channels->max_combined = 0;
+       channels->rx_count = adapter->req_rx_queues;
+@@ -2729,22 +2716,11 @@ static int ibmvnic_set_channels(struct net_device *netdev,
+                               struct ethtool_channels *channels)
+ {
+       struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+-      int ret;
+-      ret = 0;
+       adapter->desired.rx_queues = channels->rx_count;
+       adapter->desired.tx_queues = channels->tx_count;
+-      ret = wait_for_reset(adapter);
+-
+-      if (!ret &&
+-          (adapter->req_rx_queues != channels->rx_count ||
+-           adapter->req_tx_queues != channels->tx_count))
+-              netdev_info(netdev,
+-                          "Could not match full channels request. Requested: RX %d, TX %d; Allowed: RX %llu, TX %llu\n",
+-                          channels->rx_count, channels->tx_count,
+-                          adapter->req_rx_queues, adapter->req_tx_queues);
+-      return ret;
++      return wait_for_reset(adapter);
+ }
+ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
+@@ -2752,43 +2728,32 @@ static void ibmvnic_get_strings(struct net_device *dev, u32 stringset, u8 *data)
+       struct ibmvnic_adapter *adapter = netdev_priv(dev);
+       int i;
+-      switch (stringset) {
+-      case ETH_SS_STATS:
+-              for (i = 0; i < ARRAY_SIZE(ibmvnic_stats);
+-                              i++, data += ETH_GSTRING_LEN)
+-                      memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
++      if (stringset != ETH_SS_STATS)
++              return;
+-              for (i = 0; i < adapter->req_tx_queues; i++) {
+-                      snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
+-                      data += ETH_GSTRING_LEN;
++      for (i = 0; i < ARRAY_SIZE(ibmvnic_stats); i++, data += ETH_GSTRING_LEN)
++              memcpy(data, ibmvnic_stats[i].name, ETH_GSTRING_LEN);
+-                      snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
+-                      data += ETH_GSTRING_LEN;
++      for (i = 0; i < adapter->req_tx_queues; i++) {
++              snprintf(data, ETH_GSTRING_LEN, "tx%d_packets", i);
++              data += ETH_GSTRING_LEN;
+-                      snprintf(data, ETH_GSTRING_LEN,
+-                               "tx%d_dropped_packets", i);
+-                      data += ETH_GSTRING_LEN;
+-              }
++              snprintf(data, ETH_GSTRING_LEN, "tx%d_bytes", i);
++              data += ETH_GSTRING_LEN;
+-              for (i = 0; i < adapter->req_rx_queues; i++) {
+-                      snprintf(data, ETH_GSTRING_LEN, "rx%d_packets", i);
+-                      data += ETH_GSTRING_LEN;
++              snprintf(data, ETH_GSTRING_LEN, "tx%d_dropped_packets", i);
++              data += ETH_GSTRING_LEN;
++      }
+-                      snprintf(data, ETH_GSTRING_LEN, "rx%d_bytes", i);
+-                      data += ETH_GSTRING_LEN;
++      for (i = 0; i < adapter->req_rx_queues; i++) {
++              snprintf(data, ETH_GSTRING_LEN, "rx%d_packets", i);
++              data += ETH_GSTRING_LEN;
+-                      snprintf(data, ETH_GSTRING_LEN, "rx%d_interrupts", i);
+-                      data += ETH_GSTRING_LEN;
+-              }
+-              break;
++              snprintf(data, ETH_GSTRING_LEN, "rx%d_bytes", i);
++              data += ETH_GSTRING_LEN;
+-      case ETH_SS_PRIV_FLAGS:
+-              for (i = 0; i < ARRAY_SIZE(ibmvnic_priv_flags); i++)
+-                      strcpy(data + i * ETH_GSTRING_LEN,
+-                             ibmvnic_priv_flags[i]);
+-              break;
+-      default:
+-              return;
++              snprintf(data, ETH_GSTRING_LEN, "rx%d_interrupts", i);
++              data += ETH_GSTRING_LEN;
+       }
+ }
+@@ -2801,8 +2766,6 @@ static int ibmvnic_get_sset_count(struct net_device *dev, int sset)
+               return ARRAY_SIZE(ibmvnic_stats) +
+                      adapter->req_tx_queues * NUM_TX_STATS +
+                      adapter->req_rx_queues * NUM_RX_STATS;
+-      case ETH_SS_PRIV_FLAGS:
+-              return ARRAY_SIZE(ibmvnic_priv_flags);
+       default:
+               return -EOPNOTSUPP;
+       }
+@@ -2855,26 +2818,6 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
+       }
+ }
+-static u32 ibmvnic_get_priv_flags(struct net_device *netdev)
+-{
+-      struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+-
+-      return adapter->priv_flags;
+-}
+-
+-static int ibmvnic_set_priv_flags(struct net_device *netdev, u32 flags)
+-{
+-      struct ibmvnic_adapter *adapter = netdev_priv(netdev);
+-      bool which_maxes = !!(flags & IBMVNIC_USE_SERVER_MAXES);
+-
+-      if (which_maxes)
+-              adapter->priv_flags |= IBMVNIC_USE_SERVER_MAXES;
+-      else
+-              adapter->priv_flags &= ~IBMVNIC_USE_SERVER_MAXES;
+-
+-      return 0;
+-}
+-
+ static const struct ethtool_ops ibmvnic_ethtool_ops = {
+       .get_drvinfo            = ibmvnic_get_drvinfo,
+       .get_msglevel           = ibmvnic_get_msglevel,
+@@ -2888,8 +2831,6 @@ static const struct ethtool_ops ibmvnic_ethtool_ops = {
+       .get_sset_count         = ibmvnic_get_sset_count,
+       .get_ethtool_stats      = ibmvnic_get_ethtool_stats,
+       .get_link_ksettings     = ibmvnic_get_link_ksettings,
+-      .get_priv_flags         = ibmvnic_get_priv_flags,
+-      .set_priv_flags         = ibmvnic_set_priv_flags,
+ };
+ /* Routines for managing CRQs/sCRQs  */
+diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
+index b27211063c64..2eb9a4d5533a 100644
+--- a/drivers/net/ethernet/ibm/ibmvnic.h
++++ b/drivers/net/ethernet/ibm/ibmvnic.h
+@@ -41,11 +41,6 @@
+ #define IBMVNIC_RESET_DELAY 100
+-static const char ibmvnic_priv_flags[][ETH_GSTRING_LEN] = {
+-#define IBMVNIC_USE_SERVER_MAXES 0x1
+-      "use-server-maxes"
+-};
+-
+ struct ibmvnic_login_buffer {
+       __be32 len;
+       __be32 version;
+@@ -974,7 +969,6 @@ struct ibmvnic_adapter {
+       struct ibmvnic_control_ip_offload_buffer ip_offload_ctrl;
+       dma_addr_t ip_offload_ctrl_tok;
+       u32 msg_enable;
+-      u32 priv_flags;
+       /* Vital Product Data (VPD) */
+       struct ibmvnic_vpd *vpd;
+-- 
+2.35.1
+
diff --git a/queue-5.10/sctp-check-asoc-strreset_chunk-in-sctp_generate_reco.patch b/queue-5.10/sctp-check-asoc-strreset_chunk-in-sctp_generate_reco.patch
new file mode 100644 (file)
index 0000000..7840be9
--- /dev/null
@@ -0,0 +1,66 @@
+From 681250563645ae3020c0422e6eb290c55f46a3b4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 16:52:41 -0400
+Subject: sctp: check asoc strreset_chunk in sctp_generate_reconf_event
+
+From: Xin Long <lucien.xin@gmail.com>
+
+[ Upstream commit 165e3e17fe8fe6a8aab319bc6e631a2e23b9a857 ]
+
+A null pointer reference issue can be triggered when the response of a
+stream reconf request arrives after the timer is triggered, such as:
+
+  send Incoming SSN Reset Request --->
+  CPU0:
+   reconf timer is triggered,
+   go to the handler code before hold sk lock
+                            <--- reply with Outgoing SSN Reset Request
+  CPU1:
+   process Outgoing SSN Reset Request,
+   and set asoc->strreset_chunk to NULL
+  CPU0:
+   continue the handler code, hold sk lock,
+   and try to hold asoc->strreset_chunk, crash!
+
+In Ying Xu's testing, the call trace is:
+
+  [ ] BUG: kernel NULL pointer dereference, address: 0000000000000010
+  [ ] RIP: 0010:sctp_chunk_hold+0xe/0x40 [sctp]
+  [ ] Call Trace:
+  [ ]  <IRQ>
+  [ ]  sctp_sf_send_reconf+0x2c/0x100 [sctp]
+  [ ]  sctp_do_sm+0xa4/0x220 [sctp]
+  [ ]  sctp_generate_reconf_event+0xbd/0xe0 [sctp]
+  [ ]  call_timer_fn+0x26/0x130
+
+This patch is to fix it by returning from the timer handler if asoc
+strreset_chunk is already set to NULL.
+
+Fixes: 7b9438de0cd4 ("sctp: add stream reconf timer")
+Reported-by: Ying Xu <yinxu@redhat.com>
+Signed-off-by: Xin Long <lucien.xin@gmail.com>
+Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sctp/sm_sideeffect.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
+index 0948f14ce221..d4e5969771f0 100644
+--- a/net/sctp/sm_sideeffect.c
++++ b/net/sctp/sm_sideeffect.c
+@@ -458,6 +458,10 @@ void sctp_generate_reconf_event(struct timer_list *t)
+               goto out_unlock;
+       }
++      /* This happens when the response arrives after the timer is triggered. */
++      if (!asoc->strreset_chunk)
++              goto out_unlock;
++
+       error = sctp_do_sm(net, SCTP_EVENT_T_TIMEOUT,
+                          SCTP_ST_TIMEOUT(SCTP_EVENT_TIMEOUT_RECONF),
+                          asoc->state, asoc->ep, asoc,
+-- 
+2.35.1
+
index c8f6df400199a5e1a404c2bad321a60b2857d113..e54b63d4a371cda730887595973ed0cf2c59c0b4 100644 (file)
@@ -35,3 +35,71 @@ hex2bin-fix-access-beyond-string-end.patch
 riscv-patch_text-fixup-last-cpu-should-be-master.patch
 x86-pci-xen-disable-pci-msi-masking-for-xen_hvm-guests.patch
 iocost-don-t-reset-the-inuse-weight-of-under-weighted-debtors.patch
+video-fbdev-udlfb-properly-check-endpoint-type.patch
+arm64-dts-meson-remove-cpu-opps-below-1ghz-for-g12b-.patch
+arm64-dts-meson-remove-cpu-opps-below-1ghz-for-sm1-b.patch
+iio-imu-bmi160-disable-regulator-in-error-path.patch
+mtd-rawnand-fix-ecc-parameters-for-mt7622.patch
+usb-fix-xhci-event-ring-dequeue-pointer-erdp-update-.patch
+arm-dts-imx6qdl-apalis-fix-sgtl5000-detection-issue.patch
+phy-samsung-fix-missing-of_node_put-in-exynos_sata_p.patch
+phy-samsung-exynos5250-sata-fix-missing-device-put-i.patch
+arm-omap2-fix-refcount-leak-in-omap_gic_of_init.patch
+bus-ti-sysc-make-omap3-gpt12-quirk-handling-soc-spec.patch
+phy-ti-omap-usb2-fix-error-handling-in-omap_usb2_ena.patch
+arm-dts-at91-map-mclk-for-wm8731-on-at91sam9g20ek.patch
+arm-dts-at91-sama5d4_xplained-fix-pinctrl-phandle-na.patch
+phy-mapphone-mdm6600-fix-pm-error-handling-in-phy_md.patch
+phy-ti-add-missing-pm_runtime_disable-in-serdes_am65.patch
+arm-dts-fix-mmc-order-for-omap3-gta04.patch
+arm-dts-am3517-evm-fix-misc-pinmuxing.patch
+arm-dts-logicpd-som-lv-fix-wrong-pinmuxing-on-omap35.patch
+ipvs-correctly-print-the-memory-size-of-ip_vs_conn_t.patch
+pinctrl-mediatek-moore-fix-build-error.patch
+mtd-rawnand-fix-return-value-check-of-wait_for_compl.patch
+mtd-fix-part-field-data-corruption-in-mtd_info.patch
+pinctrl-stm32-do-not-call-stm32_gpio_get-for-edge-tr.patch
+memory-renesas-rpc-if-fix-hf-ospi-data-transfer-in-m.patch
+net-dsa-add-missing-of_node_put-in-dsa_port_link_reg.patch
+netfilter-nft_set_rbtree-overlap-detection-with-elem.patch
+bpf-lwt-fix-crash-when-using-bpf_skb_set_tunnel_key-.patch
+pinctrl-rockchip-fix-rk3308-pinmux-bits.patch
+tcp-md5-incorrect-tcp_header_len-for-incoming-connec.patch
+pinctrl-stm32-keep-pinctrl-block-clock-enabled-when-.patch
+tcp-ensure-to-use-the-most-recently-sent-skb-when-fi.patch
+wireguard-device-check-for-metadata_dst-with-skb_val.patch
+sctp-check-asoc-strreset_chunk-in-sctp_generate_reco.patch
+arm-dts-imx6ull-colibri-fix-vqmmc-regulator.patch
+arm64-dts-imx8mn-ddr4-evk-describe-the-32.768-khz-pm.patch
+pinctrl-pistachio-fix-use-of-irq_of_parse_and_map.patch
+cpufreq-fix-memory-leak-in-sun50i_cpufreq_nvmem_prob.patch
+net-hns3-modify-the-return-code-of-hclge_get_ring_ch.patch
+net-hns3-add-validity-check-for-message-data-length.patch
+net-hns3-add-return-value-for-mailbox-handling-in-pf.patch
+net-smc-sync-err-code-when-tcp-connection-was-refuse.patch
+ip_gre-make-o_seqno-start-from-0-in-native-mode.patch
+ip6_gre-make-o_seqno-start-from-0-in-native-mode.patch
+ip_gre-ip6_gre-fix-race-condition-on-o_seqno-in-coll.patch
+tcp-fix-potential-xmit-stalls-caused-by-tcp_notsent_.patch
+tcp-make-sure-treq-af_specific-is-initialized.patch
+bus-sunxi-rsb-fix-the-return-value-of-sunxi_rsb_devi.patch
+clk-sunxi-sun9i-mmc-check-return-value-after-calling.patch
+net-bcmgenet-hide-status-block-before-tx-timestampin.patch
+net-phy-marvell10g-fix-return-value-on-error.patch
+net-dsa-lantiq_gswip-don-t-set-gswip_mii_cfg_rmii_cl.patch
+drm-amdkfd-fix-gws-queue-count.patch
+drm-amd-display-fix-memory-leak-in-dcn21_clock_sourc.patch
+tls-skip-tls_append_frag-on-zero-copy-size.patch
+bnx2x-fix-napi-api-usage-sequence.patch
+net-fec-add-missing-of_node_put-in-fec_enet_init_sto.patch
+ixgbe-ensure-ipsec-vf-pf-compatibility.patch
+ibmvnic-fix-miscellaneous-checks.patch
+revert-ibmvnic-add-ethtool-private-flag-for-driver-d.patch
+tcp-fix-f-rto-may-not-work-correctly-when-receiving-.patch
+asoc-intel-soc-acpi-correct-device-endpoints-for-max.patch
+asoc-wm8731-disable-the-regulator-when-probing-fails.patch
+ext4-fix-bug_on-in-start_this_handle-during-umount-f.patch
+x86-__memcpy_flushcache-fix-wrong-alignment-if-size-.patch
+cifs-destage-any-unwritten-data-to-the-server-before.patch
+drivers-net-hippi-fix-deadlock-in-rr_close.patch
+powerpc-perf-fix-32bit-compile.patch
diff --git a/queue-5.10/tcp-ensure-to-use-the-most-recently-sent-skb-when-fi.patch b/queue-5.10/tcp-ensure-to-use-the-most-recently-sent-skb-when-fi.patch
new file mode 100644 (file)
index 0000000..0c3b20f
--- /dev/null
@@ -0,0 +1,102 @@
+From 050a81cccea2a0ea704d7f4e7f18133fb20f7bb3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 10:34:41 +0800
+Subject: tcp: ensure to use the most recently sent skb when filling the rate
+ sample
+
+From: Pengcheng Yang <yangpc@wangsu.com>
+
+[ Upstream commit b253a0680ceadc5d7b4acca7aa2d870326cad8ad ]
+
+If an ACK (s)acks multiple skbs, we favor the information
+from the most recently sent skb by choosing the skb with
+the highest prior_delivered count. But in the interval
+between receiving ACKs, we send multiple skbs with the same
+prior_delivered, because the tp->delivered only changes
+when we receive an ACK.
+
+We used RACK's solution, copying tcp_rack_sent_after() as
+tcp_skb_sent_after() helper to determine "which packet was
+sent last?". Later, we will use tcp_skb_sent_after() instead
+in RACK.
+
+Fixes: b9f64820fb22 ("tcp: track data delivery rate for a TCP connection")
+Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
+Cc: Paolo Abeni <pabeni@redhat.com>
+Acked-by: Neal Cardwell <ncardwell@google.com>
+Tested-by: Neal Cardwell <ncardwell@google.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Link: https://lore.kernel.org/r/1650422081-22153-1-git-send-email-yangpc@wangsu.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/tcp.h   |  6 ++++++
+ net/ipv4/tcp_rate.c | 11 ++++++++---
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/include/net/tcp.h b/include/net/tcp.h
+index 334b8d1b5442..c74befd89ee9 100644
+--- a/include/net/tcp.h
++++ b/include/net/tcp.h
+@@ -1041,6 +1041,7 @@ struct rate_sample {
+       int  losses;            /* number of packets marked lost upon ACK */
+       u32  acked_sacked;      /* number of packets newly (S)ACKed upon ACK */
+       u32  prior_in_flight;   /* in flight before this ACK */
++      u32  last_end_seq;      /* end_seq of most recently ACKed packet */
+       bool is_app_limited;    /* is sample from packet with bubble in pipe? */
+       bool is_retrans;        /* is sample from retransmission? */
+       bool is_ack_delayed;    /* is this (likely) a delayed ACK? */
+@@ -1151,6 +1152,11 @@ void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost,
+                 bool is_sack_reneg, struct rate_sample *rs);
+ void tcp_rate_check_app_limited(struct sock *sk);
++static inline bool tcp_skb_sent_after(u64 t1, u64 t2, u32 seq1, u32 seq2)
++{
++      return t1 > t2 || (t1 == t2 && after(seq1, seq2));
++}
++
+ /* These functions determine how the current flow behaves in respect of SACK
+  * handling. SACK is negotiated with the peer, and therefore it can vary
+  * between different flows.
+diff --git a/net/ipv4/tcp_rate.c b/net/ipv4/tcp_rate.c
+index 0de693565963..6ab197928abb 100644
+--- a/net/ipv4/tcp_rate.c
++++ b/net/ipv4/tcp_rate.c
+@@ -73,26 +73,31 @@ void tcp_rate_skb_sent(struct sock *sk, struct sk_buff *skb)
+  *
+  * If an ACK (s)acks multiple skbs (e.g., stretched-acks), this function is
+  * called multiple times. We favor the information from the most recently
+- * sent skb, i.e., the skb with the highest prior_delivered count.
++ * sent skb, i.e., the skb with the most recently sent time and the highest
++ * sequence.
+  */
+ void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
+                           struct rate_sample *rs)
+ {
+       struct tcp_sock *tp = tcp_sk(sk);
+       struct tcp_skb_cb *scb = TCP_SKB_CB(skb);
++      u64 tx_tstamp;
+       if (!scb->tx.delivered_mstamp)
+               return;
++      tx_tstamp = tcp_skb_timestamp_us(skb);
+       if (!rs->prior_delivered ||
+-          after(scb->tx.delivered, rs->prior_delivered)) {
++          tcp_skb_sent_after(tx_tstamp, tp->first_tx_mstamp,
++                             scb->end_seq, rs->last_end_seq)) {
+               rs->prior_delivered  = scb->tx.delivered;
+               rs->prior_mstamp     = scb->tx.delivered_mstamp;
+               rs->is_app_limited   = scb->tx.is_app_limited;
+               rs->is_retrans       = scb->sacked & TCPCB_RETRANS;
++              rs->last_end_seq     = scb->end_seq;
+               /* Record send time of most recently ACKed packet: */
+-              tp->first_tx_mstamp  = tcp_skb_timestamp_us(skb);
++              tp->first_tx_mstamp  = tx_tstamp;
+               /* Find the duration of the "send phase" of this window: */
+               rs->interval_us = tcp_stamp_us_delta(tp->first_tx_mstamp,
+                                                    scb->tx.first_tx_mstamp);
+-- 
+2.35.1
+
diff --git a/queue-5.10/tcp-fix-f-rto-may-not-work-correctly-when-receiving-.patch b/queue-5.10/tcp-fix-f-rto-may-not-work-correctly-when-receiving-.patch
new file mode 100644 (file)
index 0000000..49986c8
--- /dev/null
@@ -0,0 +1,88 @@
+From 8f8b9ae9dd3cceac97c0935ef154f0a7869562c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 18:03:39 +0800
+Subject: tcp: fix F-RTO may not work correctly when receiving DSACK
+
+From: Pengcheng Yang <yangpc@wangsu.com>
+
+[ Upstream commit d9157f6806d1499e173770df1f1b234763de5c79 ]
+
+Currently DSACK is regarded as a dupack, which may cause
+F-RTO to incorrectly enter "loss was real" when receiving
+DSACK.
+
+Packetdrill to demonstrate:
+
+// Enable F-RTO and TLP
+    0 `sysctl -q net.ipv4.tcp_frto=2`
+    0 `sysctl -q net.ipv4.tcp_early_retrans=3`
+    0 `sysctl -q net.ipv4.tcp_congestion_control=cubic`
+
+// Establish a connection
+   +0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+   +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+   +0 bind(3, ..., ...) = 0
+   +0 listen(3, 1) = 0
+
+// RTT 10ms, RTO 210ms
+  +.1 < S 0:0(0) win 32792 <mss 1000,sackOK,nop,nop,nop,wscale 7>
+   +0 > S. 0:0(0) ack 1 <...>
+ +.01 < . 1:1(0) ack 1 win 257
+   +0 accept(3, ..., ...) = 4
+
+// Send 2 data segments
+   +0 write(4, ..., 2000) = 2000
+   +0 > P. 1:2001(2000) ack 1
+
+// TLP
++.022 > P. 1001:2001(1000) ack 1
+
+// Continue to send 8 data segments
+   +0 write(4, ..., 10000) = 10000
+   +0 > P. 2001:10001(8000) ack 1
+
+// RTO
++.188 > . 1:1001(1000) ack 1
+
+// The original data is acked and new data is sent(F-RTO step 2.b)
+   +0 < . 1:1(0) ack 2001 win 257
+   +0 > P. 10001:12001(2000) ack 1
+
+// D-SACK caused by TLP is regarded as a dupack, this results in
+// the incorrect judgment of "loss was real"(F-RTO step 3.a)
++.022 < . 1:1(0) ack 2001 win 257 <sack 1001:2001,nop,nop>
+
+// Never-retransmitted data(3001:4001) are acked and
+// expect to switch to open state(F-RTO step 3.b)
+   +0 < . 1:1(0) ack 4001 win 257
++0 %{ assert tcpi_ca_state == 0, tcpi_ca_state }%
+
+Fixes: e33099f96d99 ("tcp: implement RFC5682 F-RTO")
+Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
+Acked-by: Neal Cardwell <ncardwell@google.com>
+Tested-by: Neal Cardwell <ncardwell@google.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Link: https://lore.kernel.org/r/1650967419-2150-1-git-send-email-yangpc@wangsu.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/tcp_input.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
+index c25a95c74128..2e267b2e33e5 100644
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -3814,7 +3814,8 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
+               tcp_process_tlp_ack(sk, ack, flag);
+       if (tcp_ack_is_dubious(sk, flag)) {
+-              if (!(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP))) {
++              if (!(flag & (FLAG_SND_UNA_ADVANCED |
++                            FLAG_NOT_DUP | FLAG_DSACKING_ACK))) {
+                       num_dupack = 1;
+                       /* Consider if pure acks were aggregated in tcp_add_backlog() */
+                       if (!(flag & FLAG_DATA))
+-- 
+2.35.1
+
diff --git a/queue-5.10/tcp-fix-potential-xmit-stalls-caused-by-tcp_notsent_.patch b/queue-5.10/tcp-fix-potential-xmit-stalls-caused-by-tcp_notsent_.patch
new file mode 100644 (file)
index 0000000..58da5e2
--- /dev/null
@@ -0,0 +1,145 @@
+From eccbffe4497656de149642fea8217a9209c17420 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 17:34:07 -0700
+Subject: tcp: fix potential xmit stalls caused by TCP_NOTSENT_LOWAT
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 4bfe744ff1644fbc0a991a2677dc874475dd6776 ]
+
+I had this bug sitting for too long in my pile, it is time to fix it.
+
+Thanks to Doug Porter for reminding me of it!
+
+We had various attempts in the past, including commit
+0cbe6a8f089e ("tcp: remove SOCK_QUEUE_SHRUNK"),
+but the issue is that TCP stack currently only generates
+EPOLLOUT from input path, when tp->snd_una has advanced
+and skb(s) cleaned from rtx queue.
+
+If a flow has a big RTT, and/or receives SACKs, it is possible
+that the notsent part (tp->write_seq - tp->snd_nxt) reaches 0
+and no more data can be sent until tp->snd_una finally advances.
+
+What is needed is to also check if POLLOUT needs to be generated
+whenever tp->snd_nxt is advanced, from output path.
+
+This bug triggers more often after an idle period, as
+we do not receive ACK for at least one RTT. tcp_notsent_lowat
+could be a fraction of what CWND and pacing rate would allow to
+send during this RTT.
+
+In a followup patch, I will remove the bogus call
+to tcp_chrono_stop(sk, TCP_CHRONO_SNDBUF_LIMITED)
+from tcp_check_space(). Fact that we have decided to generate
+an EPOLLOUT does not mean the application has immediately
+refilled the transmit queue. This optimistic call
+might have been the reason the bug seemed not too serious.
+
+Tested:
+
+200 ms rtt, 1% packet loss, 32 MB tcp_rmem[2] and tcp_wmem[2]
+
+$ echo 500000 >/proc/sys/net/ipv4/tcp_notsent_lowat
+$ cat bench_rr.sh
+SUM=0
+for i in {1..10}
+do
+ V=`netperf -H remote_host -l30 -t TCP_RR -- -r 10000000,10000 -o LOCAL_BYTES_SENT | egrep -v "MIGRATED|Bytes"`
+ echo $V
+ SUM=$(($SUM + $V))
+done
+echo SUM=$SUM
+
+Before patch:
+$ bench_rr.sh
+130000000
+80000000
+140000000
+140000000
+140000000
+140000000
+130000000
+40000000
+90000000
+110000000
+SUM=1140000000
+
+After patch:
+$ bench_rr.sh
+430000000
+590000000
+530000000
+450000000
+450000000
+350000000
+450000000
+490000000
+480000000
+460000000
+SUM=4680000000  # This is 410 % of the value before patch.
+
+Fixes: c9bee3b7fdec ("tcp: TCP_NOTSENT_LOWAT socket option")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: Doug Porter <dsp@fb.com>
+Cc: Soheil Hassas Yeganeh <soheil@google.com>
+Cc: Neal Cardwell <ncardwell@google.com>
+Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/tcp.h     |  1 +
+ net/ipv4/tcp_input.c  | 12 +++++++++++-
+ net/ipv4/tcp_output.c |  1 +
+ 3 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/include/net/tcp.h b/include/net/tcp.h
+index c74befd89ee9..263f6eb417d5 100644
+--- a/include/net/tcp.h
++++ b/include/net/tcp.h
+@@ -598,6 +598,7 @@ void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req);
+ void tcp_reset(struct sock *sk);
+ void tcp_skb_mark_lost_uncond_verify(struct tcp_sock *tp, struct sk_buff *skb);
+ void tcp_fin(struct sock *sk);
++void tcp_check_space(struct sock *sk);
+ /* tcp_timer.c */
+ void tcp_init_xmit_timers(struct sock *);
+diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
+index 12dd08af12b5..c25a95c74128 100644
+--- a/net/ipv4/tcp_input.c
++++ b/net/ipv4/tcp_input.c
+@@ -5370,7 +5370,17 @@ static void tcp_new_space(struct sock *sk)
+       sk->sk_write_space(sk);
+ }
+-static void tcp_check_space(struct sock *sk)
++/* Caller made space either from:
++ * 1) Freeing skbs in rtx queues (after tp->snd_una has advanced)
++ * 2) Sent skbs from output queue (and thus advancing tp->snd_nxt)
++ *
++ * We might be able to generate EPOLLOUT to the application if:
++ * 1) Space consumed in output/rtx queues is below sk->sk_sndbuf/2
++ * 2) notsent amount (tp->write_seq - tp->snd_nxt) became
++ *    small enough that tcp_stream_memory_free() decides it
++ *    is time to generate EPOLLOUT.
++ */
++void tcp_check_space(struct sock *sk)
+ {
+       /* pairs with tcp_poll() */
+       smp_mb();
+diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
+index ce9987e6ff25..e37ad0b3645c 100644
+--- a/net/ipv4/tcp_output.c
++++ b/net/ipv4/tcp_output.c
+@@ -82,6 +82,7 @@ static void tcp_event_new_data_sent(struct sock *sk, struct sk_buff *skb)
+       NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPORIGDATASENT,
+                     tcp_skb_pcount(skb));
++      tcp_check_space(sk);
+ }
+ /* SND.NXT, if window was not shrunk or the amount of shrunk was less than one
+-- 
+2.35.1
+
diff --git a/queue-5.10/tcp-make-sure-treq-af_specific-is-initialized.patch b/queue-5.10/tcp-make-sure-treq-af_specific-is-initialized.patch
new file mode 100644 (file)
index 0000000..1972666
--- /dev/null
@@ -0,0 +1,145 @@
+From b6f06211509476124aca3fb98602259c875134b2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Apr 2022 13:35:09 -0700
+Subject: tcp: make sure treq->af_specific is initialized
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit ba5a4fdd63ae0c575707030db0b634b160baddd7 ]
+
+syzbot complained about a recent change in TCP stack,
+hitting a NULL pointer [1]
+
+tcp request sockets have an af_specific pointer, which
+was used before the blamed change only for SYNACK generation
+in non SYNCOOKIE mode.
+
+tcp requests sockets momentarily created when third packet
+coming from client in SYNCOOKIE mode were not using
+treq->af_specific.
+
+Make sure this field is populated, in the same way normal
+TCP requests sockets do in tcp_conn_request().
+
+[1]
+TCP: request_sock_TCPv6: Possible SYN flooding on port 20002. Sending cookies.  Check SNMP counters.
+general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN
+KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
+CPU: 1 PID: 3695 Comm: syz-executor864 Not tainted 5.18.0-rc3-syzkaller-00224-g5fd1fe4807f9 #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+RIP: 0010:tcp_create_openreq_child+0xe16/0x16b0 net/ipv4/tcp_minisocks.c:534
+Code: 48 c1 ea 03 80 3c 02 00 0f 85 e5 07 00 00 4c 8b b3 28 01 00 00 48 b8 00 00 00 00 00 fc ff df 49 8d 7e 08 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 c9 07 00 00 48 8b 3c 24 48 89 de 41 ff 56 08 48
+RSP: 0018:ffffc90000de0588 EFLAGS: 00010202
+RAX: dffffc0000000000 RBX: ffff888076490330 RCX: 0000000000000100
+RDX: 0000000000000001 RSI: ffffffff87d67ff0 RDI: 0000000000000008
+RBP: ffff88806ee1c7f8 R08: 0000000000000000 R09: 0000000000000000
+R10: ffffffff87d67f00 R11: 0000000000000000 R12: ffff88806ee1bfc0
+R13: ffff88801b0e0368 R14: 0000000000000000 R15: 0000000000000000
+FS:  00007f517fe58700(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000
+CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 00007ffcead76960 CR3: 000000006f97b000 CR4: 00000000003506e0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
+Call Trace:
+ <IRQ>
+ tcp_v6_syn_recv_sock+0x199/0x23b0 net/ipv6/tcp_ipv6.c:1267
+ tcp_get_cookie_sock+0xc9/0x850 net/ipv4/syncookies.c:207
+ cookie_v6_check+0x15c3/0x2340 net/ipv6/syncookies.c:258
+ tcp_v6_cookie_check net/ipv6/tcp_ipv6.c:1131 [inline]
+ tcp_v6_do_rcv+0x1148/0x13b0 net/ipv6/tcp_ipv6.c:1486
+ tcp_v6_rcv+0x3305/0x3840 net/ipv6/tcp_ipv6.c:1725
+ ip6_protocol_deliver_rcu+0x2e9/0x1900 net/ipv6/ip6_input.c:422
+ ip6_input_finish+0x14c/0x2c0 net/ipv6/ip6_input.c:464
+ NF_HOOK include/linux/netfilter.h:307 [inline]
+ NF_HOOK include/linux/netfilter.h:301 [inline]
+ ip6_input+0x9c/0xd0 net/ipv6/ip6_input.c:473
+ dst_input include/net/dst.h:461 [inline]
+ ip6_rcv_finish net/ipv6/ip6_input.c:76 [inline]
+ NF_HOOK include/linux/netfilter.h:307 [inline]
+ NF_HOOK include/linux/netfilter.h:301 [inline]
+ ipv6_rcv+0x27f/0x3b0 net/ipv6/ip6_input.c:297
+ __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5405
+ __netif_receive_skb+0x24/0x1b0 net/core/dev.c:5519
+ process_backlog+0x3a0/0x7c0 net/core/dev.c:5847
+ __napi_poll+0xb3/0x6e0 net/core/dev.c:6413
+ napi_poll net/core/dev.c:6480 [inline]
+ net_rx_action+0x8ec/0xc60 net/core/dev.c:6567
+ __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
+ invoke_softirq kernel/softirq.c:432 [inline]
+ __irq_exit_rcu+0x123/0x180 kernel/softirq.c:637
+ irq_exit_rcu+0x5/0x20 kernel/softirq.c:649
+ sysvec_apic_timer_interrupt+0x93/0xc0 arch/x86/kernel/apic/apic.c:1097
+
+Fixes: 5b0b9e4c2c89 ("tcp: md5: incorrect tcp_header_len for incoming connections")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Francesco Ruggeri <fruggeri@arista.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/tcp.h     | 1 +
+ net/ipv4/syncookies.c | 8 +++++++-
+ net/ipv6/syncookies.c | 3 ++-
+ 3 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/include/net/tcp.h b/include/net/tcp.h
+index 263f6eb417d5..2a28e0925573 100644
+--- a/include/net/tcp.h
++++ b/include/net/tcp.h
+@@ -460,6 +460,7 @@ int __cookie_v4_check(const struct iphdr *iph, const struct tcphdr *th,
+                     u32 cookie);
+ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb);
+ struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
++                                          const struct tcp_request_sock_ops *af_ops,
+                                           struct sock *sk, struct sk_buff *skb);
+ #ifdef CONFIG_SYN_COOKIES
+diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
+index 00dc3f943c80..0b616094e794 100644
+--- a/net/ipv4/syncookies.c
++++ b/net/ipv4/syncookies.c
+@@ -283,6 +283,7 @@ bool cookie_ecn_ok(const struct tcp_options_received *tcp_opt,
+ EXPORT_SYMBOL(cookie_ecn_ok);
+ struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
++                                          const struct tcp_request_sock_ops *af_ops,
+                                           struct sock *sk,
+                                           struct sk_buff *skb)
+ {
+@@ -299,6 +300,10 @@ struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
+               return NULL;
+       treq = tcp_rsk(req);
++
++      /* treq->af_specific might be used to perform TCP_MD5 lookup */
++      treq->af_specific = af_ops;
++
+       treq->syn_tos = TCP_SKB_CB(skb)->ip_dsfield;
+ #if IS_ENABLED(CONFIG_MPTCP)
+       treq->is_mptcp = sk_is_mptcp(sk);
+@@ -366,7 +371,8 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
+               goto out;
+       ret = NULL;
+-      req = cookie_tcp_reqsk_alloc(&tcp_request_sock_ops, sk, skb);
++      req = cookie_tcp_reqsk_alloc(&tcp_request_sock_ops,
++                                   &tcp_request_sock_ipv4_ops, sk, skb);
+       if (!req)
+               goto out;
+diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c
+index 9b6cae1e49d9..5fa791cf39ca 100644
+--- a/net/ipv6/syncookies.c
++++ b/net/ipv6/syncookies.c
+@@ -170,7 +170,8 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
+               goto out;
+       ret = NULL;
+-      req = cookie_tcp_reqsk_alloc(&tcp6_request_sock_ops, sk, skb);
++      req = cookie_tcp_reqsk_alloc(&tcp6_request_sock_ops,
++                                   &tcp_request_sock_ipv6_ops, sk, skb);
+       if (!req)
+               goto out;
+-- 
+2.35.1
+
diff --git a/queue-5.10/tcp-md5-incorrect-tcp_header_len-for-incoming-connec.patch b/queue-5.10/tcp-md5-incorrect-tcp_header_len-for-incoming-connec.patch
new file mode 100644 (file)
index 0000000..8abdcc6
--- /dev/null
@@ -0,0 +1,40 @@
+From 9f9ddddd45961fdcba807e0ff75a22416296bcd9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Apr 2022 17:50:26 -0700
+Subject: tcp: md5: incorrect tcp_header_len for incoming connections
+
+From: Francesco Ruggeri <fruggeri@arista.com>
+
+[ Upstream commit 5b0b9e4c2c895227c8852488b3f09839233bba54 ]
+
+In tcp_create_openreq_child we adjust tcp_header_len for md5 using the
+remote address in newsk. But that address is still 0 in newsk at this
+point, and it is only set later by the callers (tcp_v[46]_syn_recv_sock).
+Use the address from the request socket instead.
+
+Fixes: cfb6eeb4c860 ("[TCP]: MD5 Signature Option (RFC2385) support.")
+Signed-off-by: Francesco Ruggeri <fruggeri@arista.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Link: https://lore.kernel.org/r/20220421005026.686A45EC01F2@us226.sjc.aristanetworks.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/tcp_minisocks.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
+index f0f67b25c97a..62f5ef9e6f93 100644
+--- a/net/ipv4/tcp_minisocks.c
++++ b/net/ipv4/tcp_minisocks.c
+@@ -538,7 +538,7 @@ struct sock *tcp_create_openreq_child(const struct sock *sk,
+       newtp->tsoffset = treq->ts_off;
+ #ifdef CONFIG_TCP_MD5SIG
+       newtp->md5sig_info = NULL;      /*XXX*/
+-      if (newtp->af_specific->md5_lookup(sk, newsk))
++      if (treq->af_specific->req_md5_lookup(sk, req_to_sk(req)))
+               newtp->tcp_header_len += TCPOLEN_MD5SIG_ALIGNED;
+ #endif
+       if (skb->len >= TCP_MSS_DEFAULT + newtp->tcp_header_len)
+-- 
+2.35.1
+
diff --git a/queue-5.10/tls-skip-tls_append_frag-on-zero-copy-size.patch b/queue-5.10/tls-skip-tls_append_frag-on-zero-copy-size.patch
new file mode 100644 (file)
index 0000000..f91f7a9
--- /dev/null
@@ -0,0 +1,59 @@
+From 7c726f999f51e09a89fa922a3ed3a81dfdcc7f36 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Apr 2022 18:49:49 +0300
+Subject: tls: Skip tls_append_frag on zero copy size
+
+From: Maxim Mikityanskiy <maximmi@nvidia.com>
+
+[ Upstream commit a0df71948e9548de819a6f1da68f5f1742258a52 ]
+
+Calling tls_append_frag when max_open_record_len == record->len might
+add an empty fragment to the TLS record if the call happens to be on the
+page boundary. Normally tls_append_frag coalesces the zero-sized
+fragment to the previous one, but not if it's on page boundary.
+
+If a resync happens then, the mlx5 driver posts dump WQEs in
+tx_post_resync_dump, and the empty fragment may become a data segment
+with byte_count == 0, which will confuse the NIC and lead to a CQE
+error.
+
+This commit fixes the described issue by skipping tls_append_frag on
+zero size to avoid adding empty fragments. The fix is not in the driver,
+because an empty fragment is hardly the desired behavior.
+
+Fixes: e8f69799810c ("net/tls: Add generic NIC offload infrastructure")
+Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com>
+Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
+Link: https://lore.kernel.org/r/20220426154949.159055-1-maximmi@nvidia.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/tls/tls_device.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c
+index f718c7346088..1f56225a10e3 100644
+--- a/net/tls/tls_device.c
++++ b/net/tls/tls_device.c
+@@ -483,11 +483,13 @@ static int tls_push_data(struct sock *sk,
+               copy = min_t(size_t, size, (pfrag->size - pfrag->offset));
+               copy = min_t(size_t, copy, (max_open_record_len - record->len));
+-              rc = tls_device_copy_data(page_address(pfrag->page) +
+-                                        pfrag->offset, copy, msg_iter);
+-              if (rc)
+-                      goto handle_error;
+-              tls_append_frag(record, pfrag, copy);
++              if (copy) {
++                      rc = tls_device_copy_data(page_address(pfrag->page) +
++                                                pfrag->offset, copy, msg_iter);
++                      if (rc)
++                              goto handle_error;
++                      tls_append_frag(record, pfrag, copy);
++              }
+               size -= copy;
+               if (!size) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/usb-fix-xhci-event-ring-dequeue-pointer-erdp-update-.patch b/queue-5.10/usb-fix-xhci-event-ring-dequeue-pointer-erdp-update-.patch
new file mode 100644 (file)
index 0000000..d06e1a0
--- /dev/null
@@ -0,0 +1,65 @@
+From cc536152914dff3f3815325fb49540c2e8f3d44c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 Apr 2022 16:48:21 +0300
+Subject: USB: Fix xhci event ring dequeue pointer ERDP update issue
+
+From: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
+
+[ Upstream commit e91ac20889d1a26d077cc511365cd7ff4346a6f3 ]
+
+In some situations software handles TRB events slower than adding TRBs.
+If the number of TRB events to be processed in a given interrupt is exactly
+the same as the event ring size 256, then the local variable
+"event_ring_deq" that holds the initial dequeue position is equal to
+software_dequeue after handling all 256 interrupts.
+
+It will cause driver to not update ERDP to hardware,
+
+Software dequeue pointer is out of sync with ERDP on interrupt exit.
+On the next interrupt, the event ring may full but driver will not
+update ERDP as software_dequeue is equal to ERDP.
+
+[  536.377115] xhci_hcd 0000:00:12.0: ERROR unknown event type 37
+[  566.933173] sd 8:0:0:0: [sdb] tag#27 uas_eh_abort_handler 0 uas-tag 7 inflight: CMD OUT
+[  566.933181] sd 8:0:0:0: [sdb] tag#27 CDB: Write(10) 2a 00 17 71 e6 78 00 00 08 00
+[  572.041186] xhci_hcd On some situataions,the0000:00:12.0: xHCI host not responding to stop endpoint command.
+[  572.057193] xhci_hcd 0000:00:12.0: Host halt failed, -110
+[  572.057196] xhci_hcd 0000:00:12.0: xHCI host controller not responding, assume dead
+[  572.057236] sd 8:0:0:0: [sdb] tag#26 uas_eh_abort_handler 0 uas-tag 6 inflight: CMD
+[  572.057240] sd 8:0:0:0: [sdb] tag#26 CDB: Write(10) 2a 00 38 eb cc d8 00 00 08 00
+[  572.057244] sd 8:0:0:0: [sdb] tag#25 uas_eh_abort_handler 0 uas-tag 5 inflight: CMD
+
+Hardware ERDP is updated mid event handling if there are more than 128
+events in an interrupt (half of ring size).
+Fix this by updating the software local variable at the same time as
+hardware ERDP.
+
+[commit message rewording -Mathias]
+
+Fixes: dc0ffbea5729 ("usb: host: xhci: update event ring dequeue pointer on purpose")
+Reviewed-by: Peter Chen <peter.chen@kernel.org>
+Signed-off-by: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
+Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
+Link: https://lore.kernel.org/r/20220408134823.2527272-2-mathias.nyman@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/host/xhci-ring.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
+index 76389c0dda8b..fa3a7ac15f82 100644
+--- a/drivers/usb/host/xhci-ring.c
++++ b/drivers/usb/host/xhci-ring.c
+@@ -2969,6 +2969,8 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)
+               if (event_loop++ < TRBS_PER_SEGMENT / 2)
+                       continue;
+               xhci_update_erst_dequeue(xhci, event_ring_deq);
++              event_ring_deq = xhci->event_ring->dequeue;
++
+               event_loop = 0;
+       }
+-- 
+2.35.1
+
diff --git a/queue-5.10/video-fbdev-udlfb-properly-check-endpoint-type.patch b/queue-5.10/video-fbdev-udlfb-properly-check-endpoint-type.patch
new file mode 100644 (file)
index 0000000..fead585
--- /dev/null
@@ -0,0 +1,92 @@
+From 10b87f58051d4c5366258077b46726b4e765c4af Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Mar 2022 23:04:38 +0300
+Subject: video: fbdev: udlfb: properly check endpoint type
+
+From: Pavel Skripkin <paskripkin@gmail.com>
+
+[ Upstream commit aaf7dbe07385e0b8deb7237eca2a79926bbc7091 ]
+
+syzbot reported warning in usb_submit_urb, which is caused by wrong
+endpoint type.
+
+This driver uses out bulk endpoint for communication, so
+let's check if this endpoint is present and bail out early if not.
+
+Fail log:
+
+usb 1-1: BOGUS urb xfer, pipe 3 != type 1
+WARNING: CPU: 0 PID: 4822 at drivers/usb/core/urb.c:493 usb_submit_urb+0xd27/0x1540 drivers/usb/core/urb.c:493
+Modules linked in:
+CPU: 0 PID: 4822 Comm: kworker/0:3 Tainted: G        W         5.13.0-syzkaller #0
+...
+Workqueue: usb_hub_wq hub_event
+RIP: 0010:usb_submit_urb+0xd27/0x1540 drivers/usb/core/urb.c:493
+...
+Call Trace:
+ dlfb_submit_urb+0x89/0x160 drivers/video/fbdev/udlfb.c:1969
+ dlfb_set_video_mode+0x21f0/0x2950 drivers/video/fbdev/udlfb.c:315
+ dlfb_ops_set_par+0x2a3/0x840 drivers/video/fbdev/udlfb.c:1110
+ dlfb_usb_probe.cold+0x113e/0x1f4a drivers/video/fbdev/udlfb.c:1732
+ usb_probe_interface+0x315/0x7f0 drivers/usb/core/driver.c:396
+
+Fixes: 88e58b1a42f8 ("Staging: add udlfb driver")
+Reported-and-tested-by: syzbot+53ce4a4246d0fe0fee34@syzkaller.appspotmail.com
+Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/udlfb.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
+index 90f48b71fd8f..d9eec1b60e66 100644
+--- a/drivers/video/fbdev/udlfb.c
++++ b/drivers/video/fbdev/udlfb.c
+@@ -1649,8 +1649,9 @@ static int dlfb_usb_probe(struct usb_interface *intf,
+       const struct device_attribute *attr;
+       struct dlfb_data *dlfb;
+       struct fb_info *info;
+-      int retval = -ENOMEM;
++      int retval;
+       struct usb_device *usbdev = interface_to_usbdev(intf);
++      struct usb_endpoint_descriptor *out;
+       /* usb initialization */
+       dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL);
+@@ -1664,6 +1665,12 @@ static int dlfb_usb_probe(struct usb_interface *intf,
+       dlfb->udev = usb_get_dev(usbdev);
+       usb_set_intfdata(intf, dlfb);
++      retval = usb_find_common_endpoints(intf->cur_altsetting, NULL, &out, NULL, NULL);
++      if (retval) {
++              dev_err(&intf->dev, "Device should have at lease 1 bulk endpoint!\n");
++              goto error;
++      }
++
+       dev_dbg(&intf->dev, "console enable=%d\n", console);
+       dev_dbg(&intf->dev, "fb_defio enable=%d\n", fb_defio);
+       dev_dbg(&intf->dev, "shadow enable=%d\n", shadow);
+@@ -1673,6 +1680,7 @@ static int dlfb_usb_probe(struct usb_interface *intf,
+       if (!dlfb_parse_vendor_descriptor(dlfb, intf)) {
+               dev_err(&intf->dev,
+                       "firmware not recognized, incompatible device?\n");
++              retval = -ENODEV;
+               goto error;
+       }
+@@ -1686,8 +1694,10 @@ static int dlfb_usb_probe(struct usb_interface *intf,
+       /* allocates framebuffer driver structure, not framebuffer memory */
+       info = framebuffer_alloc(0, &dlfb->udev->dev);
+-      if (!info)
++      if (!info) {
++              retval = -ENOMEM;
+               goto error;
++      }
+       dlfb->info = info;
+       info->par = dlfb;
+-- 
+2.35.1
+
diff --git a/queue-5.10/wireguard-device-check-for-metadata_dst-with-skb_val.patch b/queue-5.10/wireguard-device-check-for-metadata_dst-with-skb_val.patch
new file mode 100644 (file)
index 0000000..81e4f96
--- /dev/null
@@ -0,0 +1,103 @@
+From c168e877e22baf778a2d72e083ba62982681b73e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Apr 2022 15:48:05 +0200
+Subject: wireguard: device: check for metadata_dst with skb_valid_dst()
+
+From: Nikolay Aleksandrov <razor@blackwall.org>
+
+[ Upstream commit 45ac774c33d834fe9d4de06ab5f1022fe8cd2071 ]
+
+When we try to transmit an skb with md_dst attached through wireguard
+we hit a null pointer dereference in wg_xmit() due to the use of
+dst_mtu() which calls into dst_blackhole_mtu() which in turn tries to
+dereference dst->dev.
+
+Since wireguard doesn't use md_dsts we should use skb_valid_dst(), which
+checks for DST_METADATA flag, and if it's set, then falls back to
+wireguard's device mtu. That gives us the best chance of transmitting
+the packet; otherwise if the blackhole netdev is used we'd get
+ETH_MIN_MTU.
+
+ [  263.693506] BUG: kernel NULL pointer dereference, address: 00000000000000e0
+ [  263.693908] #PF: supervisor read access in kernel mode
+ [  263.694174] #PF: error_code(0x0000) - not-present page
+ [  263.694424] PGD 0 P4D 0
+ [  263.694653] Oops: 0000 [#1] PREEMPT SMP NOPTI
+ [  263.694876] CPU: 5 PID: 951 Comm: mausezahn Kdump: loaded Not tainted 5.18.0-rc1+ #522
+ [  263.695190] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1.fc35 04/01/2014
+ [  263.695529] RIP: 0010:dst_blackhole_mtu+0x17/0x20
+ [  263.695770] Code: 00 00 00 0f 1f 44 00 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 8b 47 10 48 83 e0 fc 8b 40 04 85 c0 75 09 48 8b 07 <8b> 80 e0 00 00 00 c3 66 90 0f 1f 44 00 00 48 89 d7 be 01 00 00 00
+ [  263.696339] RSP: 0018:ffffa4a4422fbb28 EFLAGS: 00010246
+ [  263.696600] RAX: 0000000000000000 RBX: ffff8ac9c3553000 RCX: 0000000000000000
+ [  263.696891] RDX: 0000000000000401 RSI: 00000000fffffe01 RDI: ffffc4a43fb48900
+ [  263.697178] RBP: ffffa4a4422fbb90 R08: ffffffff9622635e R09: 0000000000000002
+ [  263.697469] R10: ffffffff9b69a6c0 R11: ffffa4a4422fbd0c R12: ffff8ac9d18b1a00
+ [  263.697766] R13: ffff8ac9d0ce1840 R14: ffff8ac9d18b1a00 R15: ffff8ac9c3553000
+ [  263.698054] FS:  00007f3704c337c0(0000) GS:ffff8acaebf40000(0000) knlGS:0000000000000000
+ [  263.698470] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+ [  263.698826] CR2: 00000000000000e0 CR3: 0000000117a5c000 CR4: 00000000000006e0
+ [  263.699214] Call Trace:
+ [  263.699505]  <TASK>
+ [  263.699759]  wg_xmit+0x411/0x450
+ [  263.700059]  ? bpf_skb_set_tunnel_key+0x46/0x2d0
+ [   263.700382]  ? dev_queue_xmit_nit+0x31/0x2b0
+ [  263.700719]  dev_hard_start_xmit+0xd9/0x220
+ [  263.701047]  __dev_queue_xmit+0x8b9/0xd30
+ [  263.701344]  __bpf_redirect+0x1a4/0x380
+ [  263.701664]  __dev_queue_xmit+0x83b/0xd30
+ [  263.701961]  ? packet_parse_headers+0xb4/0xf0
+ [  263.702275]  packet_sendmsg+0x9a8/0x16a0
+ [  263.702596]  ? _raw_spin_unlock_irqrestore+0x23/0x40
+ [  263.702933]  sock_sendmsg+0x5e/0x60
+ [  263.703239]  __sys_sendto+0xf0/0x160
+ [  263.703549]  __x64_sys_sendto+0x20/0x30
+ [  263.703853]  do_syscall_64+0x3b/0x90
+ [  263.704162]  entry_SYSCALL_64_after_hwframe+0x44/0xae
+ [  263.704494] RIP: 0033:0x7f3704d50506
+ [  263.704789] Code: 48 c7 c0 ff ff ff ff eb b7 66 2e 0f 1f 84 00 00 00 00 00 90 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 11 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 72 c3 90 55 48 83 ec 30 44 89 4c 24 2c 4c 89
+ [  263.705652] RSP: 002b:00007ffe954b0b88 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
+ [  263.706141] RAX: ffffffffffffffda RBX: 0000558bb259b490 RCX: 00007f3704d50506
+ [  263.706544] RDX: 000000000000004a RSI: 0000558bb259b7b2 RDI: 0000000000000003
+ [  263.706952] RBP: 0000000000000000 R08: 00007ffe954b0b90 R09: 0000000000000014
+ [  263.707339] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffe954b0b90
+ [  263.707735] R13: 000000000000004a R14: 0000558bb259b7b2 R15: 0000000000000001
+ [  263.708132]  </TASK>
+ [  263.708398] Modules linked in: bridge netconsole bonding [last unloaded: bridge]
+ [  263.708942] CR2: 00000000000000e0
+
+Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
+Link: https://github.com/cilium/cilium/issues/19428
+Reported-by: Martynas Pumputis <m@lambda.lt>
+Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
+Acked-by: Daniel Borkmann <daniel@iogearbox.net>
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireguard/device.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c
+index e189eb95678d..e0693cd965ec 100644
+--- a/drivers/net/wireguard/device.c
++++ b/drivers/net/wireguard/device.c
+@@ -19,6 +19,7 @@
+ #include <linux/if_arp.h>
+ #include <linux/icmp.h>
+ #include <linux/suspend.h>
++#include <net/dst_metadata.h>
+ #include <net/icmp.h>
+ #include <net/rtnetlink.h>
+ #include <net/ip_tunnels.h>
+@@ -152,7 +153,7 @@ static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev)
+               goto err_peer;
+       }
+-      mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
++      mtu = skb_valid_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
+       __skb_queue_head_init(&packets);
+       if (!skb_is_gso(skb)) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/x86-__memcpy_flushcache-fix-wrong-alignment-if-size-.patch b/queue-5.10/x86-__memcpy_flushcache-fix-wrong-alignment-if-size-.patch
new file mode 100644 (file)
index 0000000..dad93b7
--- /dev/null
@@ -0,0 +1,51 @@
+From 7195189e98edfe6be9ef8372a7369ff8e71fb7c3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Apr 2022 09:56:23 -0400
+Subject: x86: __memcpy_flushcache: fix wrong alignment if size > 2^32
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+[ Upstream commit a6823e4e360fe975bd3da4ab156df7c74c8b07f3 ]
+
+The first "if" condition in __memcpy_flushcache is supposed to align the
+"dest" variable to 8 bytes and copy data up to this alignment.  However,
+this condition may misbehave if "size" is greater than 4GiB.
+
+The statement min_t(unsigned, size, ALIGN(dest, 8) - dest); casts both
+arguments to unsigned int and selects the smaller one.  However, the
+cast truncates high bits in "size" and it results in misbehavior.
+
+For example:
+
+       suppose that size == 0x100000001, dest == 0x200000002
+       min_t(unsigned, size, ALIGN(dest, 8) - dest) == min_t(0x1, 0xe) == 0x1;
+       ...
+       dest += 0x1;
+
+so we copy just one byte "and" dest remains unaligned.
+
+This patch fixes the bug by replacing unsigned with size_t.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/lib/usercopy_64.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
+index 508c81e97ab1..f1c0befb62df 100644
+--- a/arch/x86/lib/usercopy_64.c
++++ b/arch/x86/lib/usercopy_64.c
+@@ -121,7 +121,7 @@ void __memcpy_flushcache(void *_dst, const void *_src, size_t size)
+       /* cache copy and flush to align dest */
+       if (!IS_ALIGNED(dest, 8)) {
+-              unsigned len = min_t(unsigned, size, ALIGN(dest, 8) - dest);
++              size_t len = min_t(size_t, size, ALIGN(dest, 8) - dest);
+               memcpy((void *) dest, (void *) source, len);
+               clean_cache_range((void *) dest, len);
+-- 
+2.35.1
+