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

Linux patch 5.10.144

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

 0000_README               |    4 +
 1143_linux-5.10.144.patch | 1010 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1014 insertions(+)

diff --git a/0000_README b/0000_README
index 32d72e53..7aedc075 100644
--- a/0000_README
+++ b/0000_README
@@ -615,6 +615,10 @@ Patch:  1142_linux-5.10.143.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.10.143
 
+Patch:  1143_linux-5.10.144.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.10.144
+
 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/1143_linux-5.10.144.patch b/1143_linux-5.10.144.patch
new file mode 100644
index 00000000..f1021dcf
--- /dev/null
+++ b/1143_linux-5.10.144.patch
@@ -0,0 +1,1010 @@
+diff --git a/Documentation/input/joydev/joystick.rst 
b/Documentation/input/joydev/joystick.rst
+index 9746fd76cc581..f38c330c028e5 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 60b2018c26dba..21aa9b04164d1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 10
+-SUBLEVEL = 143
++SUBLEVEL = 144
+ EXTRAVERSION =
+ NAME = Dare mighty things
+ 
+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 e4578ed3371ef..133991ca8c633 100644
+--- a/arch/arm/boot/dts/imx6q-ba16.dtsi
++++ b/arch/arm/boot/dts/imx6q-ba16.dtsi
+@@ -139,7 +139,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 2a98cc657595f..66be04299cbf8 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 fa2307d8ce861..4dee1b22d5c17 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 ead7ba27e1053..ff8cb47fb9fdb 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 e9a4115124eb0..37d94aa45a8b7 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 d526f01a2c520..b7e74d859a962 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 a0917823c244f..a88323ac6c696 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 1243677b5f977..5adeb7aed2204 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 afe477f329846..17535bf12516d 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 fdc3aa9d544d3..0aa1a0a28de0c 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 f824c9abd11a3..758c62fb9cac1 100644
+--- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
+@@ -194,7 +194,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 5a63ca6157229..1b808563a536a 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 64c2d1e9f7fce..71d3c7e05e08f 100644
+--- a/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
++++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
+@@ -239,7 +239,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/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
+index 9a8633a6506ca..d096b5a1dbebe 100644
+--- a/arch/x86/kernel/ftrace.c
++++ b/arch/x86/kernel/ftrace.c
+@@ -322,12 +322,12 @@ create_trampoline(struct ftrace_ops *ops, unsigned int 
*tramp_size)
+       unsigned long offset;
+       unsigned long npages;
+       unsigned long size;
+-      unsigned long retq;
+       unsigned long *ptr;
+       void *trampoline;
+       void *ip;
+       /* 48 8b 15 <offset> is movq <offset>(%rip), %rdx */
+       unsigned const char op_ref[] = { 0x48, 0x8b, 0x15 };
++      unsigned const char retq[] = { RET_INSN_OPCODE, INT3_INSN_OPCODE };
+       union ftrace_op_code_union op_ptr;
+       int ret;
+ 
+@@ -367,13 +367,10 @@ create_trampoline(struct ftrace_ops *ops, unsigned int 
*tramp_size)
+       ip = trampoline + size;
+ 
+       /* The trampoline ends with ret(q) */
+-      retq = (unsigned long)ftrace_stub;
+       if (cpu_feature_enabled(X86_FEATURE_RETHUNK))
+               memcpy(ip, text_gen_insn(JMP32_INSN_OPCODE, ip, 
&__x86_return_thunk), JMP32_INSN_SIZE);
+       else
+-              ret = copy_from_kernel_nofault(ip, (void *)retq, RET_SIZE);
+-      if (WARN_ON(ret < 0))
+-              goto fail;
++              memcpy(ip, retq, sizeof(retq));
+ 
+       /* No need to test direct calls on created trampolines */
+       if (ops->flags & FTRACE_OPS_FL_SAVE_REGS) {
+diff --git a/arch/x86/kernel/ftrace_64.S b/arch/x86/kernel/ftrace_64.S
+index e3a375185a1b4..5b2dabedcf664 100644
+--- a/arch/x86/kernel/ftrace_64.S
++++ b/arch/x86/kernel/ftrace_64.S
+@@ -170,7 +170,6 @@ SYM_INNER_LABEL(ftrace_graph_call, SYM_L_GLOBAL)
+ 
+ /*
+  * This is weak to keep gas from relaxing the jumps.
+- * It is also used to copy the RET for trampolines.
+  */
+ SYM_INNER_LABEL_ALIGN(ftrace_stub, SYM_L_WEAK)
+       UNWIND_HINT_FUNC
+@@ -325,7 +324,7 @@ SYM_FUNC_END(ftrace_graph_caller)
+ 
+ SYM_CODE_START(return_to_handler)
+       UNWIND_HINT_EMPTY
+-      subq  $24, %rsp
++      subq  $16, %rsp
+ 
+       /* Save the return values */
+       movq %rax, (%rsp)
+@@ -337,7 +336,19 @@ SYM_CODE_START(return_to_handler)
+       movq %rax, %rdi
+       movq 8(%rsp), %rdx
+       movq (%rsp), %rax
+-      addq $24, %rsp
+-      JMP_NOSPEC rdi
++
++      addq $16, %rsp
++      /*
++       * Jump back to the old return address. This cannot be JMP_NOSPEC rdi
++       * since IBT would demand that contain ENDBR, which simply isn't so for
++       * return addresses. Use a retpoline here to keep the RSB balanced.
++       */
++      ANNOTATE_INTRA_FUNCTION_CALL
++      call .Ldo_rop
++      int3
++.Ldo_rop:
++      mov %rdi, (%rsp)
++      UNWIND_HINT_FUNC
++      RET
+ SYM_CODE_END(return_to_handler)
+ #endif
+diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
+index 67ed4f238d437..780cba4e30d0e 100644
+--- a/drivers/gpio/gpio-mockup.c
++++ b/drivers/gpio/gpio-mockup.c
+@@ -375,6 +375,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;
+@@ -457,7 +464,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 struct platform_driver gpio_mockup_driver = {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+index ae84d3b582aa5..8a2abcfd5a889 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+@@ -1921,7 +1921,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 fea30e7aa9e83..084b6ae2a4761 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 5ffd0da3cf1fa..65af0ebef79f6 100644
+--- a/drivers/hid/intel-ish-hid/ishtp-hid.h
++++ b/drivers/hid/intel-ish-hid/ishtp-hid.h
+@@ -110,7 +110,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 1cc157126fce7..c0d69303e3b09 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/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 5fc789f717c8a..b23abde5d7db3 100644
+--- a/drivers/input/touchscreen/goodix.c
++++ b/drivers/input/touchscreen/goodix.c
+@@ -154,6 +154,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 },
+@@ -1385,6 +1386,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 477dde39823c7..93c60712a948e 100644
+--- a/drivers/iommu/intel/iommu.c
++++ b/drivers/iommu/intel/iommu.c
+@@ -560,14 +560,36 @@ static inline int domain_pfn_supported(struct 
dmar_domain *domain,
+       return !(addr_width < BITS_PER_LONG && pfn >> addr_width);
+ }
+ 
++/*
++ * Calculate the Supported Adjusted Guest Address Widths of an IOMMU.
++ * Refer to 11.4.2 of the VT-d spec for the encoding of each bit of
++ * the returned SAGAW.
++ */
++static unsigned long __iommu_calculate_sagaw(struct intel_iommu *iommu)
++{
++      unsigned long fl_sagaw, sl_sagaw;
++
++      fl_sagaw = BIT(2) | (cap_fl1gp_support(iommu->cap) ? BIT(3) : 0);
++      sl_sagaw = cap_sagaw(iommu->cap);
++
++      /* Second level only. */
++      if (!sm_supported(iommu) || !ecap_flts(iommu->ecap))
++              return sl_sagaw;
++
++      /* First level only. */
++      if (!ecap_slts(iommu->ecap))
++              return fl_sagaw;
++
++      return fl_sagaw & sl_sagaw;
++}
++
+ static int __iommu_calculate_agaw(struct intel_iommu *iommu, int max_gaw)
+ {
+       unsigned long sagaw;
+       int agaw = -1;
+ 
+-      sagaw = cap_sagaw(iommu->cap);
+-      for (agaw = width_to_agaw(max_gaw);
+-           agaw >= 0; agaw--) {
++      sagaw = __iommu_calculate_sagaw(iommu);
++      for (agaw = width_to_agaw(max_gaw); agaw >= 0; agaw--) {
+               if (test_bit(agaw, &sagaw))
+                       break;
+       }
+diff --git a/drivers/net/ethernet/broadcom/tg3.c 
b/drivers/net/ethernet/broadcom/tg3.c
+index 5143cdd0eecad..be96116dc2ccb 100644
+--- a/drivers/net/ethernet/broadcom/tg3.c
++++ b/drivers/net/ethernet/broadcom/tg3.c
+@@ -18146,16 +18146,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 d030d5e69dc50..e3e35b9bd6846 100644
+--- a/drivers/nvme/target/tcp.c
++++ b/drivers/nvme/target/tcp.c
+@@ -1471,6 +1471,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 ef9676418c9f4..2e1f3680d8466 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/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
+index 80983f9dfcd55..8e696262215fc 100644
+--- a/drivers/platform/x86/acer-wmi.c
++++ b/drivers/platform/x86/acer-wmi.c
+@@ -93,6 +93,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} },
+@@ -106,7 +107,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/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 <huxiaoy...@kylinos.cn> */
++UNUSUAL_DEV(0x0b05, 0x1932, 0x0000, 0x9999,
++              "ASUS",
++              "External HDD",
++              USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++              US_FL_IGNORE_UAS),
++
+ /* Reported-by: David Webb <d...@noc.ac.uk> */
+ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999,
+               "Seagate",
+diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
+index 8b7315c22f0d1..4b70571368526 100644
+--- a/fs/tracefs/inode.c
++++ b/fs/tracefs/inode.c
+@@ -139,6 +139,8 @@ struct tracefs_mount_opts {
+       kuid_t uid;
+       kgid_t gid;
+       umode_t mode;
++      /* Opt_* bitfield. */
++      unsigned int opts;
+ };
+ 
+ enum {
+@@ -239,6 +241,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) {
+@@ -273,24 +276,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;
+ }
+@@ -305,7 +320,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;
+@@ -357,7 +372,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/mm/mmap.c b/mm/mmap.c
+index b69c9711bb269..31fc116a8ec9b 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -2664,6 +2664,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, start, end);
+@@ -2678,8 +2679,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);


Reply via email to