commit:     4957b5bbf67444f30231532668c95eaae4797ede
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue Sep 20 12:01:00 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue Sep 20 12:01:00 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=4957b5bb

Linux patch 5.15.69

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |    4 +
 1068_linux-5.15.69.patch | 1623 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1627 insertions(+)

diff --git a/0000_README b/0000_README
index 6021975a..7caf56d0 100644
--- a/0000_README
+++ b/0000_README
@@ -315,6 +315,10 @@ Patch:  1067_linux-5.15.68.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.15.68
 
+Patch:  1068_linux-5.15.69.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.15.69
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1068_linux-5.15.69.patch b/1068_linux-5.15.69.patch
new file mode 100644
index 00000000..569dcfef
--- /dev/null
+++ b/1068_linux-5.15.69.patch
@@ -0,0 +1,1623 @@
+diff --git a/Documentation/devicetree/bindings/iio/gyroscope/bosch,bmg160.yaml 
b/Documentation/devicetree/bindings/iio/gyroscope/bosch,bmg160.yaml
+index b6bbc312a7cf7..1414ba9977c16 100644
+--- a/Documentation/devicetree/bindings/iio/gyroscope/bosch,bmg160.yaml
++++ b/Documentation/devicetree/bindings/iio/gyroscope/bosch,bmg160.yaml
+@@ -24,8 +24,10 @@ properties:
+ 
+   interrupts:
+     minItems: 1
++    maxItems: 2
+     description:
+       Should be configured with type IRQ_TYPE_EDGE_RISING.
++      If two interrupts are provided, expected order is INT1 and INT2.
+ 
+ required:
+   - compatible
+diff --git a/Documentation/input/joydev/joystick.rst 
b/Documentation/input/joydev/joystick.rst
+index f615906a0821b..6d721396717a2 100644
+--- a/Documentation/input/joydev/joystick.rst
++++ b/Documentation/input/joydev/joystick.rst
+@@ -517,6 +517,7 @@ All I-Force devices are supported by the iforce module. 
This includes:
+ * AVB Mag Turbo Force
+ * AVB Top Shot Pegasus
+ * AVB Top Shot Force Feedback Racing Wheel
++* Boeder Force Feedback Wheel
+ * Logitech WingMan Force
+ * Logitech WingMan Force Wheel
+ * Guillemot Race Leader Force Feedback
+diff --git a/Makefile b/Makefile
+index d6b672375c079..2134d5711dccc 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 15
+-SUBLEVEL = 68
++SUBLEVEL = 69
+ EXTRAVERSION =
+ NAME = Trick or Treat
+ 
+diff --git a/arch/arm/boot/dts/at91-sama7g5ek.dts 
b/arch/arm/boot/dts/at91-sama7g5ek.dts
+index bac0e49cc5770..2038e387be288 100644
+--- a/arch/arm/boot/dts/at91-sama7g5ek.dts
++++ b/arch/arm/boot/dts/at91-sama7g5ek.dts
+@@ -169,8 +169,8 @@
+                       regulators {
+                               vdd_3v3: VDD_IO {
+                                       regulator-name = "VDD_IO";
+-                                      regulator-min-microvolt = <1200000>;
+-                                      regulator-max-microvolt = <3700000>;
++                                      regulator-min-microvolt = <3300000>;
++                                      regulator-max-microvolt = <3300000>;
+                                       regulator-initial-mode = <2>;
+                                       regulator-allowed-modes = <2>, <4>;
+                                       regulator-always-on;
+@@ -188,8 +188,8 @@
+ 
+                               vddioddr: VDD_DDR {
+                                       regulator-name = "VDD_DDR";
+-                                      regulator-min-microvolt = <1300000>;
+-                                      regulator-max-microvolt = <1450000>;
++                                      regulator-min-microvolt = <1350000>;
++                                      regulator-max-microvolt = <1350000>;
+                                       regulator-initial-mode = <2>;
+                                       regulator-allowed-modes = <2>, <4>;
+                                       regulator-always-on;
+@@ -209,8 +209,8 @@
+ 
+                               vddcore: VDD_CORE {
+                                       regulator-name = "VDD_CORE";
+-                                      regulator-min-microvolt = <1100000>;
+-                                      regulator-max-microvolt = <1850000>;
++                                      regulator-min-microvolt = <1150000>;
++                                      regulator-max-microvolt = <1150000>;
+                                       regulator-initial-mode = <2>;
+                                       regulator-allowed-modes = <2>, <4>;
+                                       regulator-always-on;
+@@ -228,8 +228,8 @@
+ 
+                               vddcpu: VDD_OTHER {
+                                       regulator-name = "VDD_OTHER";
+-                                      regulator-min-microvolt = <1125000>;
+-                                      regulator-max-microvolt = <1850000>;
++                                      regulator-min-microvolt = <1050000>;
++                                      regulator-max-microvolt = <1250000>;
+                                       regulator-initial-mode = <2>;
+                                       regulator-allowed-modes = <2>, <4>;
+                                       regulator-ramp-delay = <3125>;
+@@ -248,8 +248,8 @@
+ 
+                               vldo1: LDO1 {
+                                       regulator-name = "LDO1";
+-                                      regulator-min-microvolt = <1200000>;
+-                                      regulator-max-microvolt = <3700000>;
++                                      regulator-min-microvolt = <1800000>;
++                                      regulator-max-microvolt = <1800000>;
+                                       regulator-always-on;
+ 
+                                       regulator-state-standby {
+diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts
+index 7e2b0f198dfad..1053b7c584d81 100644
+--- a/arch/arm/boot/dts/imx28-evk.dts
++++ b/arch/arm/boot/dts/imx28-evk.dts
+@@ -129,7 +129,7 @@
+                               pinctrl-0 = <&spi2_pins_a>;
+                               status = "okay";
+ 
+-                              flash: m25p80@0 {
++                              flash: flash@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+                                       compatible = "sst,sst25vf016b", 
"jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx28-m28evk.dts 
b/arch/arm/boot/dts/imx28-m28evk.dts
+index f3bddc5ada4b8..13acdc7916b9b 100644
+--- a/arch/arm/boot/dts/imx28-m28evk.dts
++++ b/arch/arm/boot/dts/imx28-m28evk.dts
+@@ -33,7 +33,7 @@
+                               pinctrl-0 = <&spi2_pins_a>;
+                               status = "okay";
+ 
+-                              flash: m25p80@0 {
++                              flash: flash@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+                                       compatible = "m25p80", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx28-sps1.dts 
b/arch/arm/boot/dts/imx28-sps1.dts
+index 43be7a6a769bc..90928db0df701 100644
+--- a/arch/arm/boot/dts/imx28-sps1.dts
++++ b/arch/arm/boot/dts/imx28-sps1.dts
+@@ -51,7 +51,7 @@
+                               pinctrl-0 = <&spi2_pins_a>;
+                               status = "okay";
+ 
+-                              flash: m25p80@0 {
++                              flash: flash@0 {
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+                                       compatible = "everspin,mr25h256", 
"mr25h256";
+diff --git a/arch/arm/boot/dts/imx6dl-rex-basic.dts 
b/arch/arm/boot/dts/imx6dl-rex-basic.dts
+index 0f1616bfa9a80..b72f8ea1e6f6c 100644
+--- a/arch/arm/boot/dts/imx6dl-rex-basic.dts
++++ b/arch/arm/boot/dts/imx6dl-rex-basic.dts
+@@ -19,7 +19,7 @@
+ };
+ 
+ &ecspi3 {
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "sst,sst25vf016b", "jedec,spi-nor";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6q-ba16.dtsi 
b/arch/arm/boot/dts/imx6q-ba16.dtsi
+index 6330d75f8f390..f266f1b7e0cfc 100644
+--- a/arch/arm/boot/dts/imx6q-ba16.dtsi
++++ b/arch/arm/boot/dts/imx6q-ba16.dtsi
+@@ -142,7 +142,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: n25q032@0 {
++      flash: flash@0 {
+               compatible = "jedec,spi-nor";
+               #address-cells = <1>;
+               #size-cells = <1>;
+diff --git a/arch/arm/boot/dts/imx6q-bx50v3.dtsi 
b/arch/arm/boot/dts/imx6q-bx50v3.dtsi
+index 10922375c51e1..ead83091e193a 100644
+--- a/arch/arm/boot/dts/imx6q-bx50v3.dtsi
++++ b/arch/arm/boot/dts/imx6q-bx50v3.dtsi
+@@ -160,7 +160,7 @@
+       pinctrl-0 = <&pinctrl_ecspi5>;
+       status = "okay";
+ 
+-      m25_eeprom: m25p80@0 {
++      m25_eeprom: flash@0 {
+               compatible = "atmel,at25";
+               spi-max-frequency = <10000000>;
+               size = <0x8000>;
+diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts 
b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+index bfb530f29d9de..1ad41c944b4b9 100644
+--- a/arch/arm/boot/dts/imx6q-cm-fx6.dts
++++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
+@@ -260,7 +260,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      m25p80@0 {
++      flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "st,m25p", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts 
b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
+index c713ac03b3b92..9591848cbd37c 100644
+--- a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
++++ b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts
+@@ -102,7 +102,7 @@
+       cs-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "m25p80", "jedec,spi-nor";
+               spi-max-frequency = <40000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6q-dms-ba16.dts 
b/arch/arm/boot/dts/imx6q-dms-ba16.dts
+index 48fb47e715f6d..137db38f0d27b 100644
+--- a/arch/arm/boot/dts/imx6q-dms-ba16.dts
++++ b/arch/arm/boot/dts/imx6q-dms-ba16.dts
+@@ -47,7 +47,7 @@
+       pinctrl-0 = <&pinctrl_ecspi5>;
+       status = "okay";
+ 
+-      m25_eeprom: m25p80@0 {
++      m25_eeprom: flash@0 {
+               compatible = "atmel,at25256B", "atmel,at25";
+               spi-max-frequency = <20000000>;
+               size = <0x8000>;
+diff --git a/arch/arm/boot/dts/imx6q-gw5400-a.dts 
b/arch/arm/boot/dts/imx6q-gw5400-a.dts
+index 4cde45d5c90c8..e894faba571f9 100644
+--- a/arch/arm/boot/dts/imx6q-gw5400-a.dts
++++ b/arch/arm/boot/dts/imx6q-gw5400-a.dts
+@@ -137,7 +137,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "sst,w25q256", "jedec,spi-nor";
+               spi-max-frequency = <30000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6q-marsboard.dts 
b/arch/arm/boot/dts/imx6q-marsboard.dts
+index 05ee283882290..cc18010023942 100644
+--- a/arch/arm/boot/dts/imx6q-marsboard.dts
++++ b/arch/arm/boot/dts/imx6q-marsboard.dts
+@@ -100,7 +100,7 @@
+       cs-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>;
+       status = "okay";
+ 
+-      m25p80@0 {
++      flash@0 {
+               compatible = "microchip,sst25vf016b";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6q-rex-pro.dts 
b/arch/arm/boot/dts/imx6q-rex-pro.dts
+index 1767e1a3cd53a..271f4b2d9b9f0 100644
+--- a/arch/arm/boot/dts/imx6q-rex-pro.dts
++++ b/arch/arm/boot/dts/imx6q-rex-pro.dts
+@@ -19,7 +19,7 @@
+ };
+ 
+ &ecspi3 {
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "sst,sst25vf032b", "jedec,spi-nor";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi 
b/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi
+index e21f6ac864e54..baa197c90060e 100644
+--- a/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-aristainetos.dtsi
+@@ -96,7 +96,7 @@
+       pinctrl-0 = <&pinctrl_ecspi4>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "micron,n25q128a11", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6qdl-aristainetos2.dtsi 
b/arch/arm/boot/dts/imx6qdl-aristainetos2.dtsi
+index 563bf9d44fe0d..2ba577e602e7f 100644
+--- a/arch/arm/boot/dts/imx6qdl-aristainetos2.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-aristainetos2.dtsi
+@@ -131,7 +131,7 @@
+       pinctrl-0 = <&pinctrl_ecspi4>;
+       status = "okay";
+ 
+-      flash: m25p80@1 {
++      flash: flash@1 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "micron,n25q128a11", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi 
b/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi
+index 648f5fcb72e65..2c1d6f28e6950 100644
+--- a/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-dfi-fs700-m60.dtsi
+@@ -35,7 +35,7 @@
+       pinctrl-0 = <&pinctrl_ecspi3>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "sst,sst25vf040b", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi 
b/arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi
+index 9a3e5f7827152..6b791d515e294 100644
+--- a/arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi
+@@ -248,8 +248,8 @@
+       status = "okay";
+ 
+       /* default boot source: workaround #1 for errata ERR006282 */
+-      smarc_flash: spi-flash@0 {
+-              compatible = "winbond,w25q16dw", "jedec,spi-nor";
++      smarc_flash: flash@0 {
++              compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <20000000>;
+       };
+diff --git a/arch/arm/boot/dts/imx6qdl-nit6xlite.dtsi 
b/arch/arm/boot/dts/imx6qdl-nit6xlite.dtsi
+index ac34709e97413..0ad4cb4f1e828 100644
+--- a/arch/arm/boot/dts/imx6qdl-nit6xlite.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-nit6xlite.dtsi
+@@ -179,7 +179,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "microchip,sst25vf016b";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi 
b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
+index c96f4d7e1e0d8..beaa2dcd436ce 100644
+--- a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi
+@@ -321,7 +321,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "microchip,sst25vf016b";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6_som2.dtsi 
b/arch/arm/boot/dts/imx6qdl-nitrogen6_som2.dtsi
+index 92d09a3ebe0ee..ee7e2371f94bd 100644
+--- a/arch/arm/boot/dts/imx6qdl-nitrogen6_som2.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-nitrogen6_som2.dtsi
+@@ -252,7 +252,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "microchip,sst25vf016b";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi 
b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
+index 49da30d7510c4..904d5d051d63c 100644
+--- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
+@@ -237,7 +237,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "sst,sst25vf016b", "jedec,spi-nor";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi 
b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+index 5e58740d40c5b..1368a47620372 100644
+--- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+@@ -272,7 +272,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1 &pinctrl_ecspi1_cs>;
+       status = "disabled"; /* pin conflict with WEIM NOR */
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "st,m25p32", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi 
b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
+index eb9a0b104f1c3..901b9a761b66e 100644
+--- a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
+@@ -313,7 +313,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "sst,sst25vf016b", "jedec,spi-nor";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi 
b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
+index 0c0105468a2fe..37482a9023fce 100644
+--- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
+@@ -197,7 +197,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "st,m25p32", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6sl-evk.dts 
b/arch/arm/boot/dts/imx6sl-evk.dts
+index 25f6f2fb1555e..f16c830f1e918 100644
+--- a/arch/arm/boot/dts/imx6sl-evk.dts
++++ b/arch/arm/boot/dts/imx6sl-evk.dts
+@@ -137,7 +137,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "st,m25p32", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6sx-nitrogen6sx.dts 
b/arch/arm/boot/dts/imx6sx-nitrogen6sx.dts
+index 66af78e83b701..a2c79bcf9a11c 100644
+--- a/arch/arm/boot/dts/imx6sx-nitrogen6sx.dts
++++ b/arch/arm/boot/dts/imx6sx-nitrogen6sx.dts
+@@ -107,7 +107,7 @@
+       pinctrl-0 = <&pinctrl_ecspi1>;
+       status = "okay";
+ 
+-      flash: m25p80@0 {
++      flash: flash@0 {
+               compatible = "microchip,sst25vf016b";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6sx-sdb-reva.dts 
b/arch/arm/boot/dts/imx6sx-sdb-reva.dts
+index dce5dcf96c255..7dda42553f4bc 100644
+--- a/arch/arm/boot/dts/imx6sx-sdb-reva.dts
++++ b/arch/arm/boot/dts/imx6sx-sdb-reva.dts
+@@ -123,7 +123,7 @@
+       pinctrl-0 = <&pinctrl_qspi2>;
+       status = "okay";
+ 
+-      flash0: s25fl128s@0 {
++      flash0: flash@0 {
+               reg = <0>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+@@ -133,7 +133,7 @@
+               spi-tx-bus-width = <4>;
+       };
+ 
+-      flash1: s25fl128s@2 {
++      flash1: flash@2 {
+               reg = <2>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts 
b/arch/arm/boot/dts/imx6sx-sdb.dts
+index 99f4cf777a384..969cfe920d252 100644
+--- a/arch/arm/boot/dts/imx6sx-sdb.dts
++++ b/arch/arm/boot/dts/imx6sx-sdb.dts
+@@ -108,7 +108,7 @@
+       pinctrl-0 = <&pinctrl_qspi2>;
+       status = "okay";
+ 
+-      flash0: n25q256a@0 {
++      flash0: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "micron,n25q256a", "jedec,spi-nor";
+@@ -118,7 +118,7 @@
+               reg = <0>;
+       };
+ 
+-      flash1: n25q256a@2 {
++      flash1: flash@2 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "micron,n25q256a", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi 
b/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
+index a3fde3316c736..1a18c41ce385a 100644
+--- a/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
++++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
+@@ -286,7 +286,7 @@
+       pinctrl-0 = <&pinctrl_qspi>;
+       status = "okay";
+ 
+-      flash0: n25q256a@0 {
++      flash0: flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "micron,n25q256a", "jedec,spi-nor";
+diff --git a/arch/arm/boot/dts/imx6ul-kontron-n6310-som.dtsi 
b/arch/arm/boot/dts/imx6ul-kontron-n6310-som.dtsi
+index 47d3ce5d255fa..acd936540d898 100644
+--- a/arch/arm/boot/dts/imx6ul-kontron-n6310-som.dtsi
++++ b/arch/arm/boot/dts/imx6ul-kontron-n6310-som.dtsi
+@@ -19,7 +19,7 @@
+ };
+ 
+ &qspi {
+-      spi-flash@0 {
++      flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-nand";
+diff --git a/arch/arm/boot/dts/imx6ul-kontron-n6311-som.dtsi 
b/arch/arm/boot/dts/imx6ul-kontron-n6311-som.dtsi
+index a095a7654ac65..29ed38dce5802 100644
+--- a/arch/arm/boot/dts/imx6ul-kontron-n6311-som.dtsi
++++ b/arch/arm/boot/dts/imx6ul-kontron-n6311-som.dtsi
+@@ -18,7 +18,7 @@
+ };
+ 
+ &qspi {
+-      spi-flash@0 {
++      flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-nand";
+diff --git a/arch/arm/boot/dts/imx6ul-kontron-n6x1x-som-common.dtsi 
b/arch/arm/boot/dts/imx6ul-kontron-n6x1x-som-common.dtsi
+index 2a449a3c1ae27..09a83dbdf6510 100644
+--- a/arch/arm/boot/dts/imx6ul-kontron-n6x1x-som-common.dtsi
++++ b/arch/arm/boot/dts/imx6ul-kontron-n6x1x-som-common.dtsi
+@@ -19,7 +19,7 @@
+       pinctrl-0 = <&pinctrl_ecspi2>;
+       status = "okay";
+ 
+-      spi-flash@0 {
++      flash@0 {
+               compatible = "mxicy,mx25v8035f", "jedec,spi-nor";
+               spi-max-frequency = <50000000>;
+               reg = <0>;
+diff --git a/arch/arm/boot/dts/imx6ull-kontron-n6411-som.dtsi 
b/arch/arm/boot/dts/imx6ull-kontron-n6411-som.dtsi
+index b7e984284e1ad..d000606c07049 100644
+--- a/arch/arm/boot/dts/imx6ull-kontron-n6411-som.dtsi
++++ b/arch/arm/boot/dts/imx6ull-kontron-n6411-som.dtsi
+@@ -18,7 +18,7 @@
+ };
+ 
+ &qspi {
+-      spi-flash@0 {
++      flash@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-nand";
+diff --git a/arch/arm64/kernel/entry-common.c 
b/arch/arm64/kernel/entry-common.c
+index 32f9796c4ffe7..60225bc09b017 100644
+--- a/arch/arm64/kernel/entry-common.c
++++ b/arch/arm64/kernel/entry-common.c
+@@ -72,7 +72,7 @@ static __always_inline void __exit_to_kernel_mode(struct 
pt_regs *regs)
+       if (interrupts_enabled(regs)) {
+               if (regs->exit_rcu) {
+                       trace_hardirqs_on_prepare();
+-                      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++                      lockdep_hardirqs_on_prepare();
+                       rcu_irq_exit();
+                       lockdep_hardirqs_on(CALLER_ADDR0);
+                       return;
+@@ -117,7 +117,7 @@ static __always_inline void enter_from_user_mode(struct 
pt_regs *regs)
+ static __always_inline void __exit_to_user_mode(void)
+ {
+       trace_hardirqs_on_prepare();
+-      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++      lockdep_hardirqs_on_prepare();
+       user_enter_irqoff();
+       lockdep_hardirqs_on(CALLER_ADDR0);
+ }
+@@ -175,7 +175,7 @@ static void noinstr arm64_exit_nmi(struct pt_regs *regs)
+       ftrace_nmi_exit();
+       if (restore) {
+               trace_hardirqs_on_prepare();
+-              lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++              lockdep_hardirqs_on_prepare();
+       }
+ 
+       rcu_nmi_exit();
+@@ -211,7 +211,7 @@ static void noinstr arm64_exit_el1_dbg(struct pt_regs 
*regs)
+ 
+       if (restore) {
+               trace_hardirqs_on_prepare();
+-              lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++              lockdep_hardirqs_on_prepare();
+       }
+ 
+       rcu_nmi_exit();
+diff --git a/arch/x86/include/asm/cpu_entry_area.h 
b/arch/x86/include/asm/cpu_entry_area.h
+index dd5ea1bdf04c5..75efc4c6f0766 100644
+--- a/arch/x86/include/asm/cpu_entry_area.h
++++ b/arch/x86/include/asm/cpu_entry_area.h
+@@ -143,7 +143,7 @@ extern void cea_set_pte(void *cea_vaddr, phys_addr_t pa, 
pgprot_t flags);
+ 
+ extern struct cpu_entry_area *get_cpu_entry_area(int cpu);
+ 
+-static inline struct entry_stack *cpu_entry_stack(int cpu)
++static __always_inline struct entry_stack *cpu_entry_stack(int cpu)
+ {
+       return &get_cpu_entry_area(cpu)->entry_stack_page.stack;
+ }
+diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h
+index 4bde0dc66100c..56891399fa2a6 100644
+--- a/arch/x86/include/asm/page_64.h
++++ b/arch/x86/include/asm/page_64.h
+@@ -15,7 +15,7 @@ extern unsigned long page_offset_base;
+ extern unsigned long vmalloc_base;
+ extern unsigned long vmemmap_base;
+ 
+-static inline unsigned long __phys_addr_nodebug(unsigned long x)
++static __always_inline unsigned long __phys_addr_nodebug(unsigned long x)
+ {
+       unsigned long y = x - __START_KERNEL_map;
+ 
+diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h
+index 4d6f7a70bdd14..cd0c93ec72fad 100644
+--- a/arch/x86/kvm/x86.h
++++ b/arch/x86/kvm/x86.h
+@@ -26,7 +26,7 @@ static __always_inline void kvm_guest_enter_irqoff(void)
+        */
+       instrumentation_begin();
+       trace_hardirqs_on_prepare();
+-      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++      lockdep_hardirqs_on_prepare();
+       instrumentation_end();
+ 
+       guest_enter_irqoff();
+diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
+index 3c25ce8c95ba1..19358a641610d 100644
+--- a/drivers/acpi/resource.c
++++ b/drivers/acpi/resource.c
+@@ -416,6 +416,16 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, 
u8 polarity,
+ {
+       int i;
+ 
++#ifdef CONFIG_X86
++      /*
++       * IRQ override isn't needed on modern AMD Zen systems and
++       * this override breaks active low IRQs on AMD Ryzen 6000 and
++       * newer systems. Skip it.
++       */
++      if (boot_cpu_has(X86_FEATURE_ZEN))
++              return false;
++#endif
++
+       for (i = 0; i < ARRAY_SIZE(skip_override_table); i++) {
+               const struct irq_override_cmp *entry = &skip_override_table[i];
+ 
+diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
+index d26bff29157b5..369a832d96203 100644
+--- a/drivers/gpio/gpio-mockup.c
++++ b/drivers/gpio/gpio-mockup.c
+@@ -373,6 +373,13 @@ static void gpio_mockup_debugfs_setup(struct device *dev,
+       }
+ }
+ 
++static void gpio_mockup_debugfs_cleanup(void *data)
++{
++      struct gpio_mockup_chip *chip = data;
++
++      debugfs_remove_recursive(chip->dbg_dir);
++}
++
+ static void gpio_mockup_dispose_mappings(void *data)
+ {
+       struct gpio_mockup_chip *chip = data;
+@@ -455,7 +462,7 @@ static int gpio_mockup_probe(struct platform_device *pdev)
+ 
+       gpio_mockup_debugfs_setup(dev, chip);
+ 
+-      return 0;
++      return devm_add_action_or_reset(dev, gpio_mockup_debugfs_cleanup, chip);
+ }
+ 
+ static const struct of_device_id gpio_mockup_of_match[] = {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+index 5b41c29f3ed50..65744c3bd3648 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+@@ -2505,7 +2505,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
+ static bool fw_load_skip_check(struct psp_context *psp,
+                              struct amdgpu_firmware_info *ucode)
+ {
+-      if (!ucode->fw)
++      if (!ucode->fw || !ucode->ucode_size)
+               return true;
+ 
+       if (ucode->ucode_id == AMDGPU_UCODE_ID_SMC &&
+diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c
+index b55398a34fa48..e3f0dd4a36792 100644
+--- a/drivers/gpu/drm/msm/msm_rd.c
++++ b/drivers/gpu/drm/msm/msm_rd.c
+@@ -191,6 +191,9 @@ static int rd_open(struct inode *inode, struct file *file)
+       file->private_data = rd;
+       rd->open = true;
+ 
++      /* Reset fifo to clear any previously unread data: */
++      rd->fifo.head = rd->fifo.tail = 0;
++
+       /* the parsing tools need to know gpu-id to know which
+        * register database to load.
+        */
+diff --git a/drivers/hid/intel-ish-hid/ishtp-hid.h 
b/drivers/hid/intel-ish-hid/ishtp-hid.h
+index 6a5cc11aefd89..35dddc5015b37 100644
+--- a/drivers/hid/intel-ish-hid/ishtp-hid.h
++++ b/drivers/hid/intel-ish-hid/ishtp-hid.h
+@@ -105,7 +105,7 @@ struct report_list {
+  * @multi_packet_cnt: Count of fragmented packet count
+  *
+  * This structure is used to store completion flags and per client data like
+- * like report description, number of HID devices etc.
++ * report description, number of HID devices etc.
+  */
+ struct ishtp_cl_data {
+       /* completion flags */
+diff --git a/drivers/hid/intel-ish-hid/ishtp/client.c 
b/drivers/hid/intel-ish-hid/ishtp/client.c
+index 405e0d5212cc8..df0a825694f52 100644
+--- a/drivers/hid/intel-ish-hid/ishtp/client.c
++++ b/drivers/hid/intel-ish-hid/ishtp/client.c
+@@ -626,13 +626,14 @@ static void ishtp_cl_read_complete(struct ishtp_cl_rb 
*rb)
+ }
+ 
+ /**
+- * ipc_tx_callback() - IPC tx callback function
++ * ipc_tx_send() - IPC tx send function
+  * @prm: Pointer to client device instance
+  *
+- * Send message over IPC either first time or on callback on previous message
+- * completion
++ * Send message over IPC. Message will be split into fragments
++ * if message size is bigger than IPC FIFO size, and all
++ * fragments will be sent one by one.
+  */
+-static void ipc_tx_callback(void *prm)
++static void ipc_tx_send(void *prm)
+ {
+       struct ishtp_cl *cl = prm;
+       struct ishtp_cl_tx_ring *cl_msg;
+@@ -677,32 +678,41 @@ static void ipc_tx_callback(void *prm)
+                           list);
+       rem = cl_msg->send_buf.size - cl->tx_offs;
+ 
+-      ishtp_hdr.host_addr = cl->host_client_id;
+-      ishtp_hdr.fw_addr = cl->fw_client_id;
+-      ishtp_hdr.reserved = 0;
+-      pmsg = cl_msg->send_buf.data + cl->tx_offs;
++      while (rem > 0) {
++              ishtp_hdr.host_addr = cl->host_client_id;
++              ishtp_hdr.fw_addr = cl->fw_client_id;
++              ishtp_hdr.reserved = 0;
++              pmsg = cl_msg->send_buf.data + cl->tx_offs;
++
++              if (rem <= dev->mtu) {
++                      /* Last fragment or only one packet */
++                      ishtp_hdr.length = rem;
++                      ishtp_hdr.msg_complete = 1;
++                      /* Submit to IPC queue with no callback */
++                      ishtp_write_message(dev, &ishtp_hdr, pmsg);
++                      cl->tx_offs = 0;
++                      cl->sending = 0;
+ 
+-      if (rem <= dev->mtu) {
+-              ishtp_hdr.length = rem;
+-              ishtp_hdr.msg_complete = 1;
+-              cl->sending = 0;
+-              list_del_init(&cl_msg->list);   /* Must be before write */
+-              spin_unlock_irqrestore(&cl->tx_list_spinlock, tx_flags);
+-              /* Submit to IPC queue with no callback */
+-              ishtp_write_message(dev, &ishtp_hdr, pmsg);
+-              spin_lock_irqsave(&cl->tx_free_list_spinlock, tx_free_flags);
+-              list_add_tail(&cl_msg->list, &cl->tx_free_list.list);
+-              ++cl->tx_ring_free_size;
+-              spin_unlock_irqrestore(&cl->tx_free_list_spinlock,
+-                      tx_free_flags);
+-      } else {
+-              /* Send IPC fragment */
+-              spin_unlock_irqrestore(&cl->tx_list_spinlock, tx_flags);
+-              cl->tx_offs += dev->mtu;
+-              ishtp_hdr.length = dev->mtu;
+-              ishtp_hdr.msg_complete = 0;
+-              ishtp_send_msg(dev, &ishtp_hdr, pmsg, ipc_tx_callback, cl);
++                      break;
++              } else {
++                      /* Send ipc fragment */
++                      ishtp_hdr.length = dev->mtu;
++                      ishtp_hdr.msg_complete = 0;
++                      /* All fregments submitted to IPC queue with no 
callback */
++                      ishtp_write_message(dev, &ishtp_hdr, pmsg);
++                      cl->tx_offs += dev->mtu;
++                      rem = cl_msg->send_buf.size - cl->tx_offs;
++              }
+       }
++
++      list_del_init(&cl_msg->list);
++      spin_unlock_irqrestore(&cl->tx_list_spinlock, tx_flags);
++
++      spin_lock_irqsave(&cl->tx_free_list_spinlock, tx_free_flags);
++      list_add_tail(&cl_msg->list, &cl->tx_free_list.list);
++      ++cl->tx_ring_free_size;
++      spin_unlock_irqrestore(&cl->tx_free_list_spinlock,
++              tx_free_flags);
+ }
+ 
+ /**
+@@ -720,7 +730,7 @@ static void ishtp_cl_send_msg_ipc(struct ishtp_device *dev,
+               return;
+ 
+       cl->tx_offs = 0;
+-      ipc_tx_callback(cl);
++      ipc_tx_send(cl);
+       ++cl->send_msg_cnt_ipc;
+ }
+ 
+diff --git a/drivers/infiniband/hw/irdma/uk.c 
b/drivers/infiniband/hw/irdma/uk.c
+index 7e6c3ba8df6ab..aecd64a7dbbaf 100644
+--- a/drivers/infiniband/hw/irdma/uk.c
++++ b/drivers/infiniband/hw/irdma/uk.c
+@@ -501,7 +501,8 @@ enum irdma_status_code irdma_uk_send(struct irdma_qp_uk 
*qp,
+                             FIELD_PREP(IRDMAQPSQ_IMMDATA, info->imm_data));
+               i = 0;
+       } else {
+-              qp->wqe_ops.iw_set_fragment(wqe, 0, op_info->sg_list,
++              qp->wqe_ops.iw_set_fragment(wqe, 0,
++                                          frag_cnt ? op_info->sg_list : NULL,
+                                           qp->swqe_polarity);
+               i = 1;
+       }
+diff --git a/drivers/input/joystick/iforce/iforce-main.c 
b/drivers/input/joystick/iforce/iforce-main.c
+index b2a68bc9f0b4d..b86de1312512b 100644
+--- a/drivers/input/joystick/iforce/iforce-main.c
++++ b/drivers/input/joystick/iforce/iforce-main.c
+@@ -50,6 +50,7 @@ static struct iforce_device iforce_device[] = {
+       { 0x046d, 0xc291, "Logitech WingMan Formula Force",             
btn_wheel, abs_wheel, ff_iforce },
+       { 0x05ef, 0x020a, "AVB Top Shot Pegasus",                       
btn_joystick_avb, abs_avb_pegasus, ff_iforce },
+       { 0x05ef, 0x8884, "AVB Mag Turbo Force",                        
btn_wheel, abs_wheel, ff_iforce },
++      { 0x05ef, 0x8886, "Boeder Force Feedback Wheel",                
btn_wheel, abs_wheel, ff_iforce },
+       { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel",   
btn_wheel, abs_wheel, ff_iforce }, //?
+       { 0x061c, 0xc0a4, "ACT LABS Force RS",                          
btn_wheel, abs_wheel, ff_iforce }, //?
+       { 0x061c, 0xc084, "ACT LABS Force RS",                          
btn_wheel, abs_wheel, ff_iforce },
+diff --git a/drivers/input/touchscreen/goodix.c 
b/drivers/input/touchscreen/goodix.c
+index 3667f7e51fde4..9a9deea511636 100644
+--- a/drivers/input/touchscreen/goodix.c
++++ b/drivers/input/touchscreen/goodix.c
+@@ -94,6 +94,7 @@ static const struct goodix_chip_data gt9x_chip_data = {
+ 
+ static const struct goodix_chip_id goodix_chip_ids[] = {
+       { .id = "1151", .data = &gt1x_chip_data },
++      { .id = "1158", .data = &gt1x_chip_data },
+       { .id = "5663", .data = &gt1x_chip_data },
+       { .id = "5688", .data = &gt1x_chip_data },
+       { .id = "917S", .data = &gt1x_chip_data },
+@@ -1362,6 +1363,7 @@ MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);
+ #ifdef CONFIG_OF
+ static const struct of_device_id goodix_of_match[] = {
+       { .compatible = "goodix,gt1151" },
++      { .compatible = "goodix,gt1158" },
+       { .compatible = "goodix,gt5663" },
+       { .compatible = "goodix,gt5688" },
+       { .compatible = "goodix,gt911" },
+diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
+index bc5444daca9b4..2affdccb58e47 100644
+--- a/drivers/iommu/intel/iommu.c
++++ b/drivers/iommu/intel/iommu.c
+@@ -191,38 +191,6 @@ static phys_addr_t root_entry_uctp(struct root_entry *re)
+       return re->hi & VTD_PAGE_MASK;
+ }
+ 
+-static inline void context_clear_pasid_enable(struct context_entry *context)
+-{
+-      context->lo &= ~(1ULL << 11);
+-}
+-
+-static inline bool context_pasid_enabled(struct context_entry *context)
+-{
+-      return !!(context->lo & (1ULL << 11));
+-}
+-
+-static inline void context_set_copied(struct context_entry *context)
+-{
+-      context->hi |= (1ull << 3);
+-}
+-
+-static inline bool context_copied(struct context_entry *context)
+-{
+-      return !!(context->hi & (1ULL << 3));
+-}
+-
+-static inline bool __context_present(struct context_entry *context)
+-{
+-      return (context->lo & 1);
+-}
+-
+-bool context_present(struct context_entry *context)
+-{
+-      return context_pasid_enabled(context) ?
+-           __context_present(context) :
+-           __context_present(context) && !context_copied(context);
+-}
+-
+ static inline void context_set_present(struct context_entry *context)
+ {
+       context->lo |= 1;
+@@ -270,6 +238,26 @@ static inline void context_clear_entry(struct 
context_entry *context)
+       context->hi = 0;
+ }
+ 
++static inline bool context_copied(struct intel_iommu *iommu, u8 bus, u8 devfn)
++{
++      if (!iommu->copied_tables)
++              return false;
++
++      return test_bit(((long)bus << 8) | devfn, iommu->copied_tables);
++}
++
++static inline void
++set_context_copied(struct intel_iommu *iommu, u8 bus, u8 devfn)
++{
++      set_bit(((long)bus << 8) | devfn, iommu->copied_tables);
++}
++
++static inline void
++clear_context_copied(struct intel_iommu *iommu, u8 bus, u8 devfn)
++{
++      clear_bit(((long)bus << 8) | devfn, iommu->copied_tables);
++}
++
+ /*
+  * This domain is a statically identity mapping domain.
+  *    1. This domain creats a static 1:1 mapping to all usable memory.
+@@ -792,6 +780,13 @@ struct context_entry *iommu_context_addr(struct 
intel_iommu *iommu, u8 bus,
+       struct context_entry *context;
+       u64 *entry;
+ 
++      /*
++       * Except that the caller requested to allocate a new entry,
++       * returning a copied context entry makes no sense.
++       */
++      if (!alloc && context_copied(iommu, bus, devfn))
++              return NULL;
++
+       entry = &root->lo;
+       if (sm_supported(iommu)) {
+               if (devfn >= 0x80) {
+@@ -1899,6 +1894,11 @@ static void free_dmar_iommu(struct intel_iommu *iommu)
+               iommu->domain_ids = NULL;
+       }
+ 
++      if (iommu->copied_tables) {
++              bitmap_free(iommu->copied_tables);
++              iommu->copied_tables = NULL;
++      }
++
+       g_iommus[iommu->seq_id] = NULL;
+ 
+       /* free context mapping */
+@@ -2107,7 +2107,7 @@ static int domain_context_mapping_one(struct dmar_domain 
*domain,
+               goto out_unlock;
+ 
+       ret = 0;
+-      if (context_present(context))
++      if (context_present(context) && !context_copied(iommu, bus, devfn))
+               goto out_unlock;
+ 
+       /*
+@@ -2119,7 +2119,7 @@ static int domain_context_mapping_one(struct dmar_domain 
*domain,
+        * in-flight DMA will exist, and we don't need to worry anymore
+        * hereafter.
+        */
+-      if (context_copied(context)) {
++      if (context_copied(iommu, bus, devfn)) {
+               u16 did_old = context_domain_id(context);
+ 
+               if (did_old < cap_ndoms(iommu->cap)) {
+@@ -2130,6 +2130,8 @@ static int domain_context_mapping_one(struct dmar_domain 
*domain,
+                       iommu->flush.flush_iotlb(iommu, did_old, 0, 0,
+                                                DMA_TLB_DSI_FLUSH);
+               }
++
++              clear_context_copied(iommu, bus, devfn);
+       }
+ 
+       context_clear_entry(context);
+@@ -3024,32 +3026,14 @@ static int copy_context_table(struct intel_iommu 
*iommu,
+               /* Now copy the context entry */
+               memcpy(&ce, old_ce + idx, sizeof(ce));
+ 
+-              if (!__context_present(&ce))
++              if (!context_present(&ce))
+                       continue;
+ 
+               did = context_domain_id(&ce);
+               if (did >= 0 && did < cap_ndoms(iommu->cap))
+                       set_bit(did, iommu->domain_ids);
+ 
+-              /*
+-               * We need a marker for copied context entries. This
+-               * marker needs to work for the old format as well as
+-               * for extended context entries.
+-               *
+-               * Bit 67 of the context entry is used. In the old
+-               * format this bit is available to software, in the
+-               * extended format it is the PGE bit, but PGE is ignored
+-               * by HW if PASIDs are disabled (and thus still
+-               * available).
+-               *
+-               * So disable PASIDs first and then mark the entry
+-               * copied. This means that we don't copy PASID
+-               * translations from the old kernel, but this is fine as
+-               * faults there are not fatal.
+-               */
+-              context_clear_pasid_enable(&ce);
+-              context_set_copied(&ce);
+-
++              set_context_copied(iommu, bus, devfn);
+               new_ce[idx] = ce;
+       }
+ 
+@@ -3076,8 +3060,8 @@ static int copy_translation_tables(struct intel_iommu 
*iommu)
+       bool new_ext, ext;
+ 
+       rtaddr_reg = dmar_readq(iommu->reg + DMAR_RTADDR_REG);
+-      ext        = !!(rtaddr_reg & DMA_RTADDR_RTT);
+-      new_ext    = !!ecap_ecs(iommu->ecap);
++      ext        = !!(rtaddr_reg & DMA_RTADDR_SMT);
++      new_ext    = !!sm_supported(iommu);
+ 
+       /*
+        * The RTT bit can only be changed when translation is disabled,
+@@ -3088,6 +3072,10 @@ static int copy_translation_tables(struct intel_iommu 
*iommu)
+       if (new_ext != ext)
+               return -EINVAL;
+ 
++      iommu->copied_tables = bitmap_zalloc(BIT_ULL(16), GFP_KERNEL);
++      if (!iommu->copied_tables)
++              return -ENOMEM;
++
+       old_rt_phys = rtaddr_reg & VTD_PAGE_MASK;
+       if (!old_rt_phys)
+               return -EINVAL;
+diff --git a/drivers/net/ethernet/broadcom/tg3.c 
b/drivers/net/ethernet/broadcom/tg3.c
+index 5e0e0e70d8014..8aab07419263e 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -18078,16 +18078,20 @@ static void tg3_shutdown(struct pci_dev *pdev)
+       struct net_device *dev = pci_get_drvdata(pdev);
+       struct tg3 *tp = netdev_priv(dev);
+ 
++      tg3_reset_task_cancel(tp);
++
+       rtnl_lock();
++
+       netif_device_detach(dev);
+ 
+       if (netif_running(dev))
+               dev_close(dev);
+ 
+-      if (system_state == SYSTEM_POWER_OFF)
+-              tg3_power_down(tp);
++      tg3_power_down(tp);
+ 
+       rtnl_unlock();
++
++      pci_disable_device(pdev);
+ }
+ 
+ /**
+diff --git a/drivers/net/ieee802154/cc2520.c b/drivers/net/ieee802154/cc2520.c
+index 89c046b204e0c..4517517215f2b 100644
+--- a/drivers/net/ieee802154/cc2520.c
++++ b/drivers/net/ieee802154/cc2520.c
+@@ -504,6 +504,7 @@ cc2520_tx(struct ieee802154_hw *hw, struct sk_buff *skb)
+               goto err_tx;
+ 
+       if (status & CC2520_STATUS_TX_UNDERFLOW) {
++              rc = -EINVAL;
+               dev_err(&priv->spi->dev, "cc2520 tx underflow exception\n");
+               goto err_tx;
+       }
+diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
+index 889c5433c94d2..fba5a77c58d6b 100644
+--- a/drivers/nvme/target/tcp.c
++++ b/drivers/nvme/target/tcp.c
+@@ -1501,6 +1501,9 @@ static void nvmet_tcp_state_change(struct sock *sk)
+               goto done;
+ 
+       switch (sk->sk_state) {
++      case TCP_FIN_WAIT2:
++      case TCP_LAST_ACK:
++              break;
+       case TCP_FIN_WAIT1:
+       case TCP_CLOSE_WAIT:
+       case TCP_CLOSE:
+diff --git a/drivers/perf/arm_pmu_platform.c b/drivers/perf/arm_pmu_platform.c
+index 513de1f54e2d7..933b96e243b84 100644
+--- a/drivers/perf/arm_pmu_platform.c
++++ b/drivers/perf/arm_pmu_platform.c
+@@ -117,7 +117,7 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)
+ 
+       if (num_irqs == 1) {
+               int irq = platform_get_irq(pdev, 0);
+-              if (irq && irq_is_percpu_devid(irq))
++              if ((irq > 0) && irq_is_percpu_devid(irq))
+                       return pmu_parse_percpu_irq(pmu, irq);
+       }
+ 
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c 
b/drivers/platform/surface/surface_aggregator_registry.c
+index 1679811eff502..5c0451c56ea83 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -558,6 +558,9 @@ static const struct acpi_device_id 
ssam_platform_hub_match[] = {
+       /* Surface Laptop Go 1 */
+       { "MSHW0118", (unsigned long)ssam_node_group_slg1 },
+ 
++      /* Surface Laptop Go 2 */
++      { "MSHW0290", (unsigned long)ssam_node_group_slg1 },
++
+       /* Surface Laptop Studio */
+       { "MSHW0123", (unsigned long)ssam_node_group_sls },
+ 
+diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
+index 694b45ed06a21..8c2a73d5428d7 100644
+--- a/drivers/platform/x86/acer-wmi.c
++++ b/drivers/platform/x86/acer-wmi.c
+@@ -99,6 +99,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst 
= {
+       {KE_KEY, 0x22, {KEY_PROG2} },    /* Arcade */
+       {KE_KEY, 0x23, {KEY_PROG3} },    /* P_Key */
+       {KE_KEY, 0x24, {KEY_PROG4} },    /* Social networking_Key */
++      {KE_KEY, 0x27, {KEY_HELP} },
+       {KE_KEY, 0x29, {KEY_PROG3} },    /* P_Key for TM8372 */
+       {KE_IGNORE, 0x41, {KEY_MUTE} },
+       {KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
+@@ -112,7 +113,13 @@ static const struct key_entry acer_wmi_keymap[] 
__initconst = {
+       {KE_IGNORE, 0x48, {KEY_VOLUMEUP} },
+       {KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} },
+       {KE_IGNORE, 0x4a, {KEY_VOLUMEDOWN} },
+-      {KE_IGNORE, 0x61, {KEY_SWITCHVIDEOMODE} },
++      /*
++       * 0x61 is KEY_SWITCHVIDEOMODE. Usually this is a duplicate input event
++       * with the "Video Bus" input device events. But sometimes it is not
++       * a dup. Map it to KEY_UNKNOWN instead of using KE_IGNORE so that
++       * udev/hwdb can override it on systems where it is not a dup.
++       */
++      {KE_KEY, 0x61, {KEY_UNKNOWN} },
+       {KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} },
+       {KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} },
+       {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
+diff --git a/drivers/soc/fsl/Kconfig b/drivers/soc/fsl/Kconfig
+index 4df32bc4c7a6e..c5d46152d4680 100644
+--- a/drivers/soc/fsl/Kconfig
++++ b/drivers/soc/fsl/Kconfig
+@@ -24,6 +24,7 @@ config FSL_MC_DPIO
+         tristate "QorIQ DPAA2 DPIO driver"
+         depends on FSL_MC_BUS
+         select SOC_BUS
++        select FSL_GUTS
+         help
+         Driver for the DPAA2 DPIO object.  A DPIO provides queue and
+         buffer management facilities for software to interact with
+diff --git a/drivers/usb/gadget/function/f_uac2.c 
b/drivers/usb/gadget/function/f_uac2.c
+index 5226a47b68fda..885a7f593d85e 100644
+--- a/drivers/usb/gadget/function/f_uac2.c
++++ b/drivers/usb/gadget/function/f_uac2.c
+@@ -281,6 +281,12 @@ static struct usb_endpoint_descriptor ss_ep_int_desc = {
+       .bInterval = 4,
+ };
+ 
++static struct usb_ss_ep_comp_descriptor ss_ep_int_desc_comp = {
++      .bLength = sizeof(ss_ep_int_desc_comp),
++      .bDescriptorType = USB_DT_SS_ENDPOINT_COMP,
++      .wBytesPerInterval = cpu_to_le16(6),
++};
++
+ /* Audio Streaming OUT Interface - Alt0 */
+ static struct usb_interface_descriptor std_as_out_if0_desc = {
+       .bLength = sizeof std_as_out_if0_desc,
+@@ -594,7 +600,8 @@ static struct usb_descriptor_header *ss_audio_desc[] = {
+       (struct usb_descriptor_header *)&in_feature_unit_desc,
+       (struct usb_descriptor_header *)&io_out_ot_desc,
+ 
+-  (struct usb_descriptor_header *)&ss_ep_int_desc,
++      (struct usb_descriptor_header *)&ss_ep_int_desc,
++      (struct usb_descriptor_header *)&ss_ep_int_desc_comp,
+ 
+       (struct usb_descriptor_header *)&std_as_out_if0_desc,
+       (struct usb_descriptor_header *)&std_as_out_if1_desc,
+@@ -721,6 +728,7 @@ static void setup_headers(struct f_uac2_opts *opts,
+       struct usb_ss_ep_comp_descriptor *epout_desc_comp = NULL;
+       struct usb_ss_ep_comp_descriptor *epin_desc_comp = NULL;
+       struct usb_ss_ep_comp_descriptor *epin_fback_desc_comp = NULL;
++      struct usb_ss_ep_comp_descriptor *ep_int_desc_comp = NULL;
+       struct usb_endpoint_descriptor *epout_desc;
+       struct usb_endpoint_descriptor *epin_desc;
+       struct usb_endpoint_descriptor *epin_fback_desc;
+@@ -748,6 +756,7 @@ static void setup_headers(struct f_uac2_opts *opts,
+               epin_fback_desc = &ss_epin_fback_desc;
+               epin_fback_desc_comp = &ss_epin_fback_desc_comp;
+               ep_int_desc = &ss_ep_int_desc;
++              ep_int_desc_comp = &ss_ep_int_desc_comp;
+       }
+ 
+       i = 0;
+@@ -760,15 +769,15 @@ static void setup_headers(struct f_uac2_opts *opts,
+               headers[i++] = USBDHDR(&out_clk_src_desc);
+               headers[i++] = USBDHDR(&usb_out_it_desc);
+ 
+-    if (FUOUT_EN(opts))
+-      headers[i++] = USBDHDR(out_feature_unit_desc);
+-  }
++              if (FUOUT_EN(opts))
++                      headers[i++] = USBDHDR(out_feature_unit_desc);
++      }
+ 
+       if (EPIN_EN(opts)) {
+               headers[i++] = USBDHDR(&io_in_it_desc);
+ 
+-    if (FUIN_EN(opts))
+-      headers[i++] = USBDHDR(in_feature_unit_desc);
++              if (FUIN_EN(opts))
++                      headers[i++] = USBDHDR(in_feature_unit_desc);
+ 
+               headers[i++] = USBDHDR(&usb_in_ot_desc);
+       }
+@@ -776,10 +785,13 @@ static void setup_headers(struct f_uac2_opts *opts,
+       if (EPOUT_EN(opts))
+               headers[i++] = USBDHDR(&io_out_ot_desc);
+ 
+-  if (FUOUT_EN(opts) || FUIN_EN(opts))
+-      headers[i++] = USBDHDR(ep_int_desc);
++      if (FUOUT_EN(opts) || FUIN_EN(opts)) {
++              headers[i++] = USBDHDR(ep_int_desc);
++              if (ep_int_desc_comp)
++                      headers[i++] = USBDHDR(ep_int_desc_comp);
++      }
+ 
+-  if (EPOUT_EN(opts)) {
++      if (EPOUT_EN(opts)) {
+               headers[i++] = USBDHDR(&std_as_out_if0_desc);
+               headers[i++] = USBDHDR(&std_as_out_if1_desc);
+               headers[i++] = USBDHDR(&as_out_hdr_desc);
+diff --git a/drivers/usb/storage/unusual_uas.h 
b/drivers/usb/storage/unusual_uas.h
+index 4051c8cd0cd8a..23ab3b048d9be 100644
+--- a/drivers/usb/storage/unusual_uas.h
++++ b/drivers/usb/storage/unusual_uas.h
+@@ -62,6 +62,13 @@ UNUSUAL_DEV(0x0984, 0x0301, 0x0128, 0x0128,
+               USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+               US_FL_IGNORE_UAS),
+ 
++/* Reported-by: Tom Hu <[email protected]> */
++UNUSUAL_DEV(0x0b05, 0x1932, 0x0000, 0x9999,
++              "ASUS",
++              "External HDD",
++              USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++              US_FL_IGNORE_UAS),
++
+ /* Reported-by: David Webb <[email protected]> */
+ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999,
+               "Seagate",
+diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
+index f2625a372a3ae..066e8344934de 100644
+--- a/fs/tracefs/inode.c
++++ b/fs/tracefs/inode.c
+@@ -141,6 +141,8 @@ struct tracefs_mount_opts {
+       kuid_t uid;
+       kgid_t gid;
+       umode_t mode;
++      /* Opt_* bitfield. */
++      unsigned int opts;
+ };
+ 
+ enum {
+@@ -241,6 +243,7 @@ static int tracefs_parse_options(char *data, struct 
tracefs_mount_opts *opts)
+       kgid_t gid;
+       char *p;
+ 
++      opts->opts = 0;
+       opts->mode = TRACEFS_DEFAULT_MODE;
+ 
+       while ((p = strsep(&data, ",")) != NULL) {
+@@ -275,24 +278,36 @@ static int tracefs_parse_options(char *data, struct 
tracefs_mount_opts *opts)
+                * but traditionally tracefs has ignored all mount options
+                */
+               }
++
++              opts->opts |= BIT(token);
+       }
+ 
+       return 0;
+ }
+ 
+-static int tracefs_apply_options(struct super_block *sb)
++static int tracefs_apply_options(struct super_block *sb, bool remount)
+ {
+       struct tracefs_fs_info *fsi = sb->s_fs_info;
+       struct inode *inode = sb->s_root->d_inode;
+       struct tracefs_mount_opts *opts = &fsi->mount_opts;
+ 
+-      inode->i_mode &= ~S_IALLUGO;
+-      inode->i_mode |= opts->mode;
++      /*
++       * On remount, only reset mode/uid/gid if they were provided as mount
++       * options.
++       */
++
++      if (!remount || opts->opts & BIT(Opt_mode)) {
++              inode->i_mode &= ~S_IALLUGO;
++              inode->i_mode |= opts->mode;
++      }
+ 
+-      inode->i_uid = opts->uid;
++      if (!remount || opts->opts & BIT(Opt_uid))
++              inode->i_uid = opts->uid;
+ 
+-      /* Set all the group ids to the mount option */
+-      set_gid(sb->s_root, opts->gid);
++      if (!remount || opts->opts & BIT(Opt_gid)) {
++              /* Set all the group ids to the mount option */
++              set_gid(sb->s_root, opts->gid);
++      }
+ 
+       return 0;
+ }
+@@ -307,7 +322,7 @@ static int tracefs_remount(struct super_block *sb, int 
*flags, char *data)
+       if (err)
+               goto fail;
+ 
+-      tracefs_apply_options(sb);
++      tracefs_apply_options(sb, true);
+ 
+ fail:
+       return err;
+@@ -359,7 +374,7 @@ static int trace_fill_super(struct super_block *sb, void 
*data, int silent)
+ 
+       sb->s_op = &tracefs_super_operations;
+ 
+-      tracefs_apply_options(sb);
++      tracefs_apply_options(sb, false);
+ 
+       return 0;
+ 
+diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h
+index 05a65eb155f76..81da7107e3bd0 100644
+--- a/include/linux/intel-iommu.h
++++ b/include/linux/intel-iommu.h
+@@ -196,7 +196,6 @@
+ #define ecap_dis(e)           (((e) >> 27) & 0x1)
+ #define ecap_nest(e)          (((e) >> 26) & 0x1)
+ #define ecap_mts(e)           (((e) >> 25) & 0x1)
+-#define ecap_ecs(e)           (((e) >> 24) & 0x1)
+ #define ecap_iotlb_offset(e)  ((((e) >> 8) & 0x3ff) * 16)
+ #define ecap_max_iotlb_offset(e) (ecap_iotlb_offset(e) + 16)
+ #define ecap_coherent(e)      ((e) & 0x1)
+@@ -264,7 +263,6 @@
+ #define DMA_GSTS_CFIS (((u32)1) << 23)
+ 
+ /* DMA_RTADDR_REG */
+-#define DMA_RTADDR_RTT (((u64)1) << 11)
+ #define DMA_RTADDR_SMT (((u64)1) << 10)
+ 
+ /* CCMD_REG */
+@@ -594,6 +592,7 @@ struct intel_iommu {
+ #ifdef CONFIG_INTEL_IOMMU
+       unsigned long   *domain_ids; /* bitmap of domains */
+       struct dmar_domain ***domains; /* ptr to domains */
++      unsigned long   *copied_tables; /* bitmap of copied tables */
+       spinlock_t      lock; /* protect context, domain ids */
+       struct root_entry *root_entry; /* virtual address */
+ 
+@@ -713,6 +712,11 @@ static inline int first_pte_in_page(struct dma_pte *pte)
+       return !((unsigned long)pte & ~VTD_PAGE_MASK);
+ }
+ 
++static inline bool context_present(struct context_entry *context)
++{
++      return (context->lo & 1);
++}
++
+ extern struct dmar_drhd_unit * dmar_find_matched_drhd_unit(struct pci_dev 
*dev);
+ extern int dmar_find_matched_atsr_unit(struct pci_dev *dev);
+ 
+@@ -806,7 +810,6 @@ static inline void intel_iommu_debugfs_init(void) {}
+ #endif /* CONFIG_INTEL_IOMMU_DEBUGFS */
+ 
+ extern const struct attribute_group *intel_iommu_groups[];
+-bool context_present(struct context_entry *context);
+ struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus,
+                                        u8 devfn, int alloc);
+ 
+diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h
+index 600c10da321a7..747f40e0c3260 100644
+--- a/include/linux/irqflags.h
++++ b/include/linux/irqflags.h
+@@ -20,13 +20,13 @@
+ #ifdef CONFIG_PROVE_LOCKING
+   extern void lockdep_softirqs_on(unsigned long ip);
+   extern void lockdep_softirqs_off(unsigned long ip);
+-  extern void lockdep_hardirqs_on_prepare(unsigned long ip);
++  extern void lockdep_hardirqs_on_prepare(void);
+   extern void lockdep_hardirqs_on(unsigned long ip);
+   extern void lockdep_hardirqs_off(unsigned long ip);
+ #else
+   static inline void lockdep_softirqs_on(unsigned long ip) { }
+   static inline void lockdep_softirqs_off(unsigned long ip) { }
+-  static inline void lockdep_hardirqs_on_prepare(unsigned long ip) { }
++  static inline void lockdep_hardirqs_on_prepare(void) { }
+   static inline void lockdep_hardirqs_on(unsigned long ip) { }
+   static inline void lockdep_hardirqs_off(unsigned long ip) { }
+ #endif
+diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
+index fb70dd4ff3b60..38b7e9ab48b84 100644
+--- a/include/linux/kvm_host.h
++++ b/include/linux/kvm_host.h
+@@ -436,7 +436,7 @@ static __always_inline void guest_state_enter_irqoff(void)
+ {
+       instrumentation_begin();
+       trace_hardirqs_on_prepare();
+-      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++      lockdep_hardirqs_on_prepare();
+       instrumentation_end();
+ 
+       guest_context_enter_irqoff();
+diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
+index 71467d661fb66..5ddc30405f7f4 100644
+--- a/include/linux/nfs_fs.h
++++ b/include/linux/nfs_fs.h
+@@ -593,7 +593,9 @@ bool nfs_commit_end(struct nfs_mds_commit_info *cinfo);
+ static inline int
+ nfs_have_writebacks(struct inode *inode)
+ {
+-      return atomic_long_read(&NFS_I(inode)->nrequests) != 0;
++      if (S_ISREG(inode->i_mode))
++              return atomic_long_read(&NFS_I(inode)->nrequests) != 0;
++      return 0;
+ }
+ 
+ /*
+diff --git a/include/linux/sched/task_stack.h 
b/include/linux/sched/task_stack.h
+index d10150587d819..1009b6b5ce403 100644
+--- a/include/linux/sched/task_stack.h
++++ b/include/linux/sched/task_stack.h
+@@ -16,7 +16,7 @@
+  * try_get_task_stack() instead.  task_stack_page will return a pointer
+  * that could get freed out from under you.
+  */
+-static inline void *task_stack_page(const struct task_struct *task)
++static __always_inline void *task_stack_page(const struct task_struct *task)
+ {
+       return task->stack;
+ }
+diff --git a/kernel/entry/common.c b/kernel/entry/common.c
+index d5a61d565ad5d..998bdb7b8bf7f 100644
+--- a/kernel/entry/common.c
++++ b/kernel/entry/common.c
+@@ -124,7 +124,7 @@ static __always_inline void __exit_to_user_mode(void)
+ {
+       instrumentation_begin();
+       trace_hardirqs_on_prepare();
+-      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++      lockdep_hardirqs_on_prepare();
+       instrumentation_end();
+ 
+       user_enter_irqoff();
+@@ -412,7 +412,7 @@ noinstr void irqentry_exit(struct pt_regs *regs, 
irqentry_state_t state)
+                       instrumentation_begin();
+                       /* Tell the tracer that IRET will enable interrupts */
+                       trace_hardirqs_on_prepare();
+-                      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++                      lockdep_hardirqs_on_prepare();
+                       instrumentation_end();
+                       rcu_irq_exit();
+                       lockdep_hardirqs_on(CALLER_ADDR0);
+@@ -465,7 +465,7 @@ void noinstr irqentry_nmi_exit(struct pt_regs *regs, 
irqentry_state_t irq_state)
+       ftrace_nmi_exit();
+       if (irq_state.lockdep) {
+               trace_hardirqs_on_prepare();
+-              lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++              lockdep_hardirqs_on_prepare();
+       }
+       instrumentation_end();
+ 
+diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
+index 120bbdacd58bb..e6a282bc16652 100644
+--- a/kernel/locking/lockdep.c
++++ b/kernel/locking/lockdep.c
+@@ -1368,7 +1368,7 @@ static struct lock_list *alloc_list_entry(void)
+  */
+ static int add_lock_to_list(struct lock_class *this,
+                           struct lock_class *links_to, struct list_head *head,
+-                          unsigned long ip, u16 distance, u8 dep,
++                          u16 distance, u8 dep,
+                           const struct lock_trace *trace)
+ {
+       struct lock_list *entry;
+@@ -3121,19 +3121,15 @@ check_prev_add(struct task_struct *curr, struct 
held_lock *prev,
+        * to the previous lock's dependency list:
+        */
+       ret = add_lock_to_list(hlock_class(next), hlock_class(prev),
+-                             &hlock_class(prev)->locks_after,
+-                             next->acquire_ip, distance,
+-                             calc_dep(prev, next),
+-                             *trace);
++                             &hlock_class(prev)->locks_after, distance,
++                             calc_dep(prev, next), *trace);
+ 
+       if (!ret)
+               return 0;
+ 
+       ret = add_lock_to_list(hlock_class(prev), hlock_class(next),
+-                             &hlock_class(next)->locks_before,
+-                             next->acquire_ip, distance,
+-                             calc_depb(prev, next),
+-                             *trace);
++                             &hlock_class(next)->locks_before, distance,
++                             calc_depb(prev, next), *trace);
+       if (!ret)
+               return 0;
+ 
+@@ -4224,14 +4220,13 @@ static void __trace_hardirqs_on_caller(void)
+ 
+ /**
+  * lockdep_hardirqs_on_prepare - Prepare for enabling interrupts
+- * @ip:               Caller address
+  *
+  * Invoked before a possible transition to RCU idle from exit to user or
+  * guest mode. This ensures that all RCU operations are done before RCU
+  * stops watching. After the RCU transition lockdep_hardirqs_on() has to be
+  * invoked to set the final state.
+  */
+-void lockdep_hardirqs_on_prepare(unsigned long ip)
++void lockdep_hardirqs_on_prepare(void)
+ {
+       if (unlikely(!debug_locks))
+               return;
+@@ -4828,8 +4823,7 @@ EXPORT_SYMBOL_GPL(__lockdep_no_validate__);
+ 
+ static void
+ print_lock_nested_lock_not_held(struct task_struct *curr,
+-                              struct held_lock *hlock,
+-                              unsigned long ip)
++                              struct held_lock *hlock)
+ {
+       if (!debug_locks_off())
+               return;
+@@ -5005,7 +4999,7 @@ static int __lock_acquire(struct lockdep_map *lock, 
unsigned int subclass,
+       chain_key = iterate_chain_key(chain_key, hlock_id(hlock));
+ 
+       if (nest_lock && !__lock_is_held(nest_lock, -1)) {
+-              print_lock_nested_lock_not_held(curr, hlock, ip);
++              print_lock_nested_lock_not_held(curr, hlock);
+               return 0;
+       }
+ 
+diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
+index d17b0a5ce6ac3..499a3e286cd05 100644
+--- a/kernel/sched/idle.c
++++ b/kernel/sched/idle.c
+@@ -105,7 +105,7 @@ void __cpuidle default_idle_call(void)
+                * last -- this is very similar to the entry code.
+                */
+               trace_hardirqs_on_prepare();
+-              lockdep_hardirqs_on_prepare(_THIS_IP_);
++              lockdep_hardirqs_on_prepare();
+               rcu_idle_enter();
+               lockdep_hardirqs_on(_THIS_IP_);
+ 
+diff --git a/kernel/trace/trace_preemptirq.c b/kernel/trace/trace_preemptirq.c
+index f4938040c2286..1e130da1b742c 100644
+--- a/kernel/trace/trace_preemptirq.c
++++ b/kernel/trace/trace_preemptirq.c
+@@ -46,7 +46,7 @@ void trace_hardirqs_on(void)
+               this_cpu_write(tracing_irq_cpu, 0);
+       }
+ 
+-      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
++      lockdep_hardirqs_on_prepare();
+       lockdep_hardirqs_on(CALLER_ADDR0);
+ }
+ EXPORT_SYMBOL(trace_hardirqs_on);
+@@ -94,15 +94,15 @@ __visible void trace_hardirqs_on_caller(unsigned long 
caller_addr)
+               this_cpu_write(tracing_irq_cpu, 0);
+       }
+ 
+-      lockdep_hardirqs_on_prepare(CALLER_ADDR0);
+-      lockdep_hardirqs_on(CALLER_ADDR0);
++      lockdep_hardirqs_on_prepare();
++      lockdep_hardirqs_on(caller_addr);
+ }
+ EXPORT_SYMBOL(trace_hardirqs_on_caller);
+ NOKPROBE_SYMBOL(trace_hardirqs_on_caller);
+ 
+ __visible void trace_hardirqs_off_caller(unsigned long caller_addr)
+ {
+-      lockdep_hardirqs_off(CALLER_ADDR0);
++      lockdep_hardirqs_off(caller_addr);
+ 
+       if (!this_cpu_read(tracing_irq_cpu)) {
+               this_cpu_write(tracing_irq_cpu, 1);
+diff --git a/mm/mmap.c b/mm/mmap.c
+index cd1d2680ac585..5c2c7651ca298 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -2638,6 +2638,7 @@ static void unmap_region(struct mm_struct *mm,
+ {
+       struct vm_area_struct *next = vma_next(mm, prev);
+       struct mmu_gather tlb;
++      struct vm_area_struct *cur_vma;
+ 
+       lru_add_drain();
+       tlb_gather_mmu(&tlb, mm);
+@@ -2652,8 +2653,12 @@ static void unmap_region(struct mm_struct *mm,
+        * concurrent flush in this region has to be coming through the rmap,
+        * and we synchronize against that using the rmap lock.
+        */
+-      if ((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0)
+-              tlb_flush_mmu(&tlb);
++      for (cur_vma = vma; cur_vma; cur_vma = cur_vma->vm_next) {
++              if ((cur_vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) {
++                      tlb_flush_mmu(&tlb);
++                      break;
++              }
++      }
+ 
+       free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
+                                next ? next->vm_start : USER_PGTABLES_CEILING);
+diff --git a/net/dsa/tag_hellcreek.c b/net/dsa/tag_hellcreek.c
+index eb204ad36eeec..846588c0070a5 100644
+--- a/net/dsa/tag_hellcreek.c
++++ b/net/dsa/tag_hellcreek.c
+@@ -45,7 +45,7 @@ static struct sk_buff *hellcreek_rcv(struct sk_buff *skb,
+ 
+       skb->dev = dsa_master_find_slave(dev, 0, port);
+       if (!skb->dev) {
+-              netdev_warn(dev, "Failed to get source port: %d\n", port);
++              netdev_warn_once(dev, "Failed to get source port: %d\n", port);
+               return NULL;
+       }
+ 

Reply via email to