diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/compressed/libfdt_env.h linux-libre-4.14.155-gnu/arch/arm/boot/compressed/libfdt_env.h
--- linux-libre-4.14.154-gnu/arch/arm/boot/compressed/libfdt_env.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/compressed/libfdt_env.h	2019-11-20 12:00:54.000000000 -0500
@@ -6,6 +6,8 @@
 #include <linux/string.h>
 #include <asm/byteorder.h>
 
+#define INT_MAX			((int)(~0U>>1))
+
 typedef __be16 fdt16_t;
 typedef __be32 fdt32_t;
 typedef __be64 fdt64_t;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/am335x-evm.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/am335x-evm.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/am335x-evm.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/am335x-evm.dts	2019-11-20 12:00:54.000000000 -0500
@@ -724,6 +724,7 @@
 	pinctrl-0 = <&cpsw_default>;
 	pinctrl-1 = <&cpsw_sleep>;
 	status = "okay";
+	slaves = <1>;
 };
 
 &davinci_mdio {
@@ -731,15 +732,14 @@
 	pinctrl-0 = <&davinci_mdio_default>;
 	pinctrl-1 = <&davinci_mdio_sleep>;
 	status = "okay";
-};
 
-&cpsw_emac0 {
-	phy_id = <&davinci_mdio>, <0>;
-	phy-mode = "rgmii-txid";
+	ethphy0: ethernet-phy@0 {
+		reg = <0>;
+	};
 };
 
-&cpsw_emac1 {
-	phy_id = <&davinci_mdio>, <1>;
+&cpsw_emac0 {
+	phy-handle = <&ethphy0>;
 	phy-mode = "rgmii-txid";
 };
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/armada-388-clearfog.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/armada-388-clearfog.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/armada-388-clearfog.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/armada-388-clearfog.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -89,7 +89,7 @@
 					     &clearfog_sdhci_cd_pins>;
 				pinctrl-names = "default";
 				status = "okay";
-				vmmc = <&reg_3p3v>;
+				vmmc-supply = <&reg_3p3v>;
 				wp-inverted;
 			};
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-eb.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-eb.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-eb.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-eb.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -334,7 +334,7 @@
 			clock-names = "uartclk", "apb_pclk";
 		};
 
-		ssp: ssp@1000d000 {
+		ssp: spi@1000d000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x1000d000 0x1000>;
 			clocks = <&sspclk>, <&pclk>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-pb1176.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-pb1176.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-pb1176.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-pb1176.dts	2019-11-20 12:00:54.000000000 -0500
@@ -343,7 +343,7 @@
 			clock-names = "apb_pclk";
 		};
 
-		pb1176_ssp: ssp@1010b000 {
+		pb1176_ssp: spi@1010b000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x1010b000 0x1000>;
 			interrupt-parent = <&intc_dc1176>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-pb11mp.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-pb11mp.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-pb11mp.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-pb11mp.dts	2019-11-20 12:00:54.000000000 -0500
@@ -480,7 +480,7 @@
 			clock-names = "uartclk", "apb_pclk";
 		};
 
-		ssp@1000d000 {
+		spi@1000d000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x1000d000 0x1000>;
 			interrupt-parent = <&intc_pb11mp>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-pbx.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-pbx.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/arm-realview-pbx.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/arm-realview-pbx.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -318,7 +318,7 @@
 			clock-names = "uartclk", "apb_pclk";
 		};
 
-		ssp: ssp@1000d000 {
+		ssp: spi@1000d000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x1000d000 0x1000>;
 			clocks = <&sspclk>, <&pclk>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/at91sam9g45.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/at91sam9g45.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/at91sam9g45.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/at91sam9g45.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -566,7 +566,7 @@
 					};
 				};
 
-				uart1 {
+				usart1 {
 					pinctrl_usart1: usart1-0 {
 						atmel,pins =
 							<AT91_PIOB 4 AT91_PERIPH_A AT91_PINCTRL_PULL_UP	/* PB4 periph A with pullup */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/dove-cubox.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/dove-cubox.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/dove-cubox.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/dove-cubox.dts	2019-11-20 12:00:54.000000000 -0500
@@ -87,7 +87,7 @@
 	status = "okay";
 	clock-frequency = <100000>;
 
-	si5351: clock-generator {
+	si5351: clock-generator@60 {
 		compatible = "silabs,si5351a-msop";
 		reg = <0x60>;
 		#address-cells = <1>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/dove.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/dove.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/dove.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/dove.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -155,7 +155,7 @@
 				  0xffffe000 MBUS_ID(0x03, 0x01) 0 0x0000800   /* CESA SRAM  2k */
 				  0xfffff000 MBUS_ID(0x0d, 0x00) 0 0x0000800>; /* PMU  SRAM  2k */
 
-			spi0: spi-ctrl@10600 {
+			spi0: spi@10600 {
 				compatible = "marvell,orion-spi";
 				#address-cells = <1>;
 				#size-cells = <0>;
@@ -168,7 +168,7 @@
 				status = "disabled";
 			};
 
-			i2c: i2c-ctrl@11000 {
+			i2c: i2c@11000 {
 				compatible = "marvell,mv64xxx-i2c";
 				reg = <0x11000 0x20>;
 				#address-cells = <1>;
@@ -218,7 +218,7 @@
 				status = "disabled";
 			};
 
-			spi1: spi-ctrl@14600 {
+			spi1: spi@14600 {
 				compatible = "marvell,orion-spi";
 				#address-cells = <1>;
 				#size-cells = <0>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5250-arndale.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5250-arndale.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5250-arndale.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5250-arndale.dts	2019-11-20 12:00:54.000000000 -0500
@@ -169,6 +169,8 @@
 		reg = <0x66>;
 		interrupt-parent = <&gpx3>;
 		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&s5m8767_irq>;
 
 		vinb1-supply = <&main_dc_reg>;
 		vinb2-supply = <&main_dc_reg>;
@@ -544,6 +546,13 @@
 	cap-sd-highspeed;
 };
 
+&pinctrl_0 {
+	s5m8767_irq: s5m8767-irq {
+		samsung,pins = "gpx3-2";
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+};
+
 &rtc {
 	status = "okay";
 };
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5250-snow-rev5.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5250-snow-rev5.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5250-snow-rev5.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5250-snow-rev5.dts	2019-11-20 12:00:54.000000000 -0500
@@ -23,6 +23,14 @@
 
 		samsung,model = "Snow-I2S-MAX98090";
 		samsung,audio-codec = <&max98090>;
+
+		cpu {
+			sound-dai = <&i2s0 0>;
+		};
+
+		codec {
+			sound-dai = <&max98090 0>, <&hdmi>;
+		};
 	};
 };
 
@@ -34,6 +42,9 @@
 		interrupt-parent = <&gpx0>;
 		pinctrl-names = "default";
 		pinctrl-0 = <&max98090_irq>;
+		clocks = <&pmu_system_controller 0>;
+		clock-names = "mclk";
+		#sound-dai-cells = <1>;
 	};
 };
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5420-peach-pit.dts	2019-11-20 12:00:54.000000000 -0500
@@ -301,6 +301,7 @@
 				regulator-name = "vdd_1v35";
 				regulator-min-microvolt = <1350000>;
 				regulator-max-microvolt = <1350000>;
+				regulator-always-on;
 				regulator-boot-on;
 				regulator-state-mem {
 					regulator-on-in-suspend;
@@ -322,6 +323,7 @@
 				regulator-name = "vdd_2v";
 				regulator-min-microvolt = <2000000>;
 				regulator-max-microvolt = <2000000>;
+				regulator-always-on;
 				regulator-boot-on;
 				regulator-state-mem {
 					regulator-on-in-suspend;
@@ -332,6 +334,7 @@
 				regulator-name = "vdd_1v8";
 				regulator-min-microvolt = <1800000>;
 				regulator-max-microvolt = <1800000>;
+				regulator-always-on;
 				regulator-boot-on;
 				regulator-state-mem {
 					regulator-on-in-suspend;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/exynos5800-peach-pi.dts	2019-11-20 12:00:54.000000000 -0500
@@ -301,6 +301,7 @@
 				regulator-name = "vdd_1v35";
 				regulator-min-microvolt = <1350000>;
 				regulator-max-microvolt = <1350000>;
+				regulator-always-on;
 				regulator-boot-on;
 				regulator-state-mem {
 					regulator-on-in-suspend;
@@ -322,6 +323,7 @@
 				regulator-name = "vdd_2v";
 				regulator-min-microvolt = <2000000>;
 				regulator-max-microvolt = <2000000>;
+				regulator-always-on;
 				regulator-boot-on;
 				regulator-state-mem {
 					regulator-on-in-suspend;
@@ -332,6 +334,7 @@
 				regulator-name = "vdd_1v8";
 				regulator-min-microvolt = <1800000>;
 				regulator-max-microvolt = <1800000>;
+				regulator-always-on;
 				regulator-boot-on;
 				regulator-state-mem {
 					regulator-on-in-suspend;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/lpc32xx.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/lpc32xx.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/lpc32xx.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/lpc32xx.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -179,7 +179,7 @@
 			 * ssp0 and spi1 are shared pins;
 			 * enable one in your board dts, as needed.
 			 */
-			ssp0: ssp@20084000 {
+			ssp0: spi@20084000 {
 				compatible = "arm,pl022", "arm,primecell";
 				reg = <0x20084000 0x1000>;
 				interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
@@ -199,7 +199,7 @@
 			 * ssp1 and spi2 are shared pins;
 			 * enable one in your board dts, as needed.
 			 */
-			ssp1: ssp@2008c000 {
+			ssp1: spi@2008c000 {
 				compatible = "arm,pl022", "arm,primecell";
 				reg = <0x2008c000 0x1000>;
 				interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/meson8b.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/meson8b.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/meson8b.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/meson8b.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -121,7 +121,7 @@
 		#clock-cells = <1>;
 		#reset-cells = <1>;
 		compatible = "amlogic,meson8b-clkc";
-		reg = <0x8000 0x4>, <0x4000 0x460>;
+		reg = <0x8000 0x4>, <0x4000 0x400>;
 	};
 
 	reset: reset-controller@4404 {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/meson8.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/meson8.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/meson8.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/meson8.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -170,7 +170,7 @@
 		#clock-cells = <1>;
 		#reset-cells = <1>;
 		compatible = "amlogic,meson8-clkc";
-		reg = <0x8000 0x4>, <0x4000 0x460>;
+		reg = <0x8000 0x4>, <0x4000 0x400>;
 	};
 
 	pwm_ef: pwm@86c0 {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/omap3-gta04.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/omap3-gta04.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/omap3-gta04.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/omap3-gta04.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -28,6 +28,7 @@
 
 	aliases {
 		display0 = &lcd;
+		display1 = &tv0;
 	};
 
 	gpio-keys {
@@ -71,7 +72,7 @@
 		#sound-dai-cells = <0>;
 	};
 
-	spi_lcd {
+	spi_lcd: spi_lcd {
 		compatible = "spi-gpio";
 		#address-cells = <0x1>;
 		#size-cells = <0x0>;
@@ -123,7 +124,7 @@
 	};
 
 	tv0: connector {
-		compatible = "svideo-connector";
+		compatible = "composite-video-connector";
 		label = "tv";
 
 		port {
@@ -135,7 +136,7 @@
 
 	tv_amp: opa362 {
 		compatible = "ti,opa362";
-		enable-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
+		enable-gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;	/* GPIO_23 to enable video out amplifier */
 
 		ports {
 			#address-cells = <1>;
@@ -274,6 +275,13 @@
 			OMAP3_CORE1_IOPAD(0x2134, PIN_INPUT_PULLUP | MUX_MODE4) /* gpio112 */
 		>;
 	};
+
+	penirq_pins: pinmux_penirq_pins {
+		pinctrl-single,pins = <
+			/* here we could enable to wakeup the cpu from suspend by a pen touch */
+			OMAP3_CORE1_IOPAD(0x2194, PIN_INPUT_PULLUP | MUX_MODE4) /* gpio160 */
+		>;
+	};
 };
 
 &omap3_pmx_core2 {
@@ -411,10 +419,19 @@
 	tsc2007@48 {
 		compatible = "ti,tsc2007";
 		reg = <0x48>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&penirq_pins>;
 		interrupt-parent = <&gpio6>;
 		interrupts = <0 IRQ_TYPE_EDGE_FALLING>; /* GPIO_160 */
-		gpios = <&gpio6 0 GPIO_ACTIVE_LOW>;
+		gpios = <&gpio6 0 GPIO_ACTIVE_LOW>;	/* GPIO_160 */
 		ti,x-plate-ohms = <600>;
+		touchscreen-size-x = <480>;
+		touchscreen-size-y = <640>;
+		touchscreen-max-pressure = <1000>;
+		touchscreen-fuzz-x = <3>;
+		touchscreen-fuzz-y = <8>;
+		touchscreen-fuzz-pressure = <10>;
+		touchscreen-inverted-y;
 	};
 
 	/* RFID EEPROM */
@@ -520,6 +537,12 @@
 	regulator-max-microvolt = <3150000>;
 };
 
+/* Needed to power the DPI pins */
+
+&vpll2 {
+	regulator-always-on;
+};
+
 &dss {
 	pinctrl-names = "default";
 	pinctrl-0 = < &dss_dpi_pins >;
@@ -540,10 +563,14 @@
 
 	vdda-supply = <&vdac>;
 
+	#address-cells = <1>;
+	#size-cells = <0>;
+
 	port {
+		reg = <0>;
 		venc_out: endpoint {
 			remote-endpoint = <&opa_in>;
-			ti,channels = <2>;
+			ti,channels = <1>;
 			ti,invert-polarity;
 		};
 	};
@@ -587,22 +614,22 @@
 
 		bootloaders@80000 {
 			label = "U-Boot";
-			reg = <0x80000 0x1e0000>;
+			reg = <0x80000 0x1c0000>;
 		};
 
-		bootloaders_env@260000 {
+		bootloaders_env@240000 {
 			label = "U-Boot Env";
-			reg = <0x260000 0x20000>;
+			reg = <0x240000 0x40000>;
 		};
 
 		kernel@280000 {
 			label = "Kernel";
-			reg = <0x280000 0x400000>;
+			reg = <0x280000 0x600000>;
 		};
 
-		filesystem@680000 {
+		filesystem@880000 {
 			label = "File System";
-			reg = <0x680000 0xf980000>;
+			reg = <0x880000 0>;	/* 0 = MTDPART_SIZ_FULL */
 		};
 	};
 };
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/orion5x-linkstation.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/orion5x-linkstation.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/orion5x-linkstation.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/orion5x-linkstation.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -156,7 +156,7 @@
 &i2c {
 	status = "okay";
 
-	rtc {
+	rtc@32 {
 		compatible = "ricoh,rs5c372a";
 		reg = <0x32>;
 	};
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/pxa25x.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/pxa25x.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/pxa25x.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/pxa25x.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -80,6 +80,10 @@
 			#pwm-cells = <1>;
 			clocks = <&clks CLK_PWM1>;
 		};
+
+		rtc@40900000 {
+			clocks = <&clks CLK_OSC32k768>;
+		};
 	};
 
 	timer@40a00000 {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/pxa27x.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/pxa27x.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/pxa27x.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/pxa27x.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -71,7 +71,7 @@
 			clocks = <&clks CLK_PWM1>;
 		};
 
-		pwri2c: i2c@40f000180 {
+		pwri2c: i2c@40f00180 {
 			compatible = "mrvl,pxa-i2c";
 			reg = <0x40f00180 0x24>;
 			interrupts = <6>;
@@ -113,6 +113,10 @@
 
 			status = "disabled";
 		};
+
+		rtc@40900000 {
+			clocks = <&clks CLK_OSC32k768>;
+		};
 	};
 
 	clocks {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/qcom-ipq4019.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/qcom-ipq4019.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/qcom-ipq4019.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/qcom-ipq4019.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -234,7 +234,7 @@
 
                 saw0: regulator@b089000 {
                         compatible = "qcom,saw2";
-                        reg = <0x02089000 0x1000>, <0x0b009000 0x1000>;
+			reg = <0x0b089000 0x1000>, <0x0b009000 0x1000>;
                         regulator;
                 };
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/rk3036.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/rk3036.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/rk3036.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/rk3036.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -750,7 +750,7 @@
 			/* no rts / cts for uart2 */
 		};
 
-		spi {
+		spi-pins {
 			spi_txd:spi-txd {
 				rockchip,pins = <1 29 RK_FUNC_3 &pcfg_pull_default>;
 			};
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/rk3188-radxarock.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/rk3188-radxarock.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/rk3188-radxarock.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/rk3188-radxarock.dts	2019-11-20 12:00:54.000000000 -0500
@@ -130,6 +130,8 @@
 		regulator-min-microvolt = <3300000>;
 		regulator-max-microvolt = <3300000>;
 		gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&sdmmc_pwr>;
 		startup-delay-us = <100000>;
 		vin-supply = <&vcc_io>;
 	};
@@ -348,6 +350,12 @@
 		};
 	};
 
+	sd0 {
+		sdmmc_pwr: sdmmc-pwr {
+			rockchip,pins = <RK_GPIO3 1 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+
 	usb {
 		host_vbus_drv: host-vbus-drv {
 			rockchip,pins = <0 3 RK_FUNC_GPIO &pcfg_pull_none>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dts	2019-11-20 12:00:54.000000000 -0500
@@ -88,7 +88,7 @@
 	status = "okay";
 	clock-frequency = <100000>;
 
-	adxl345: adxl345@0 {
+	adxl345: adxl345@53 {
 		compatible = "adi,adxl345";
 		reg = <0x53>;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-dbx5x0.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-dbx5x0.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-dbx5x0.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-dbx5x0.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -197,7 +197,7 @@
 			      <0xa0410100 0x100>;
 		};
 
-		scu@a04100000 {
+		scu@a0410000 {
 			compatible = "arm,cortex-a9-scu";
 			reg = <0xa0410000 0x100>;
 		};
@@ -878,7 +878,7 @@
 			power-domains = <&pm_domains DOMAIN_VAPE>;
 		};
 
-		ssp@80002000 {
+		spi@80002000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x80002000 0x1000>;
 			interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
@@ -892,7 +892,7 @@
 			power-domains = <&pm_domains DOMAIN_VAPE>;
 		};
 
-		ssp@80003000 {
+		spi@80003000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x80003000 0x1000>;
 			interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-href-family-pinctrl.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -607,16 +607,20 @@
 
 			mcde {
 				lcd_default_mode: lcd_default {
-					default_mux {
+					default_mux1 {
 						/* Mux in VSI0 and all the data lines */
 						function = "lcd";
 						groups =
 						"lcdvsi0_a_1", /* VSI0 for LCD */
 						"lcd_d0_d7_a_1", /* Data lines */
 						"lcd_d8_d11_a_1", /* TV-out */
-						"lcdaclk_b_1", /* Clock line for TV-out */
 						"lcdvsi1_a_1"; /* VSI1 for HDMI */
 					};
+					default_mux2 {
+						function = "lcda";
+						groups =
+						"lcdaclk_b_1"; /* Clock line for TV-out */
+					};
 					default_cfg1 {
 						pins =
 						"GPIO68_E1", /* VSI0 */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-hrefprev60.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-hrefprev60.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-hrefprev60.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-hrefprev60.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -57,7 +57,7 @@
 			};
 		};
 
-		ssp@80002000 {
+		spi@80002000 {
 			/*
 			 * On the first generation boards, this SSP/SPI port was connected
 			 * to the AB8500.
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-snowball.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-snowball.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-snowball.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-snowball.dts	2019-11-20 12:00:54.000000000 -0500
@@ -376,7 +376,7 @@
 			pinctrl-1 = <&i2c3_sleep_mode>;
 		};
 
-		ssp@80002000 {
+		spi@80002000 {
 			pinctrl-names = "default";
 			pinctrl-0 = <&ssp0_snowball_mode>;
 		};
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-u300.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-u300.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/ste-u300.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/ste-u300.dts	2019-11-20 12:00:54.000000000 -0500
@@ -442,7 +442,7 @@
 			dma-names = "rx";
 		};
 
-		spi: ssp@c0006000 {
+		spi: spi@c0006000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0xc0006000 0x1000>;
 			interrupt-parent = <&vica>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/tegra20-paz00.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/tegra20-paz00.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/tegra20-paz00.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/tegra20-paz00.dts	2019-11-20 12:00:54.000000000 -0500
@@ -524,10 +524,10 @@
 	gpio-keys {
 		compatible = "gpio-keys";
 
-		power {
-			label = "Power";
+		wakeup {
+			label = "Wakeup";
 			gpios = <&gpio TEGRA_GPIO(J, 7) GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_POWER>;
+			linux,code = <KEY_WAKEUP>;
 			wakeup-source;
 		};
 	};
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/tegra30-apalis.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/tegra30-apalis.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/tegra30-apalis.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/tegra30-apalis.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -166,14 +166,14 @@
 
 			/* Apalis MMC1 */
 			sdmmc3_clk_pa6 {
-				nvidia,pins = "sdmmc3_clk_pa6",
-					      "sdmmc3_cmd_pa7";
+				nvidia,pins = "sdmmc3_clk_pa6";
 				nvidia,function = "sdmmc3";
 				nvidia,pull = <TEGRA_PIN_PULL_NONE>;
 				nvidia,tristate = <TEGRA_PIN_DISABLE>;
 			};
 			sdmmc3_dat0_pb7 {
-				nvidia,pins = "sdmmc3_dat0_pb7",
+				nvidia,pins = "sdmmc3_cmd_pa7",
+					      "sdmmc3_dat0_pb7",
 					      "sdmmc3_dat1_pb6",
 					      "sdmmc3_dat2_pb5",
 					      "sdmmc3_dat3_pb4",
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/tegra30.dtsi linux-libre-4.14.155-gnu/arch/arm/boot/dts/tegra30.dtsi
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/tegra30.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/tegra30.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -840,7 +840,7 @@
 		nvidia,elastic-limit = <16>;
 		nvidia,term-range-adj = <6>;
 		nvidia,xcvr-setup = <51>;
-		nvidia.xcvr-setup-use-fuses;
+		nvidia,xcvr-setup-use-fuses;
 		nvidia,xcvr-lsfslew = <1>;
 		nvidia,xcvr-lsrslew = <1>;
 		nvidia,xcvr-hsslew = <32>;
@@ -877,7 +877,7 @@
 		nvidia,elastic-limit = <16>;
 		nvidia,term-range-adj = <6>;
 		nvidia,xcvr-setup = <51>;
-		nvidia.xcvr-setup-use-fuses;
+		nvidia,xcvr-setup-use-fuses;
 		nvidia,xcvr-lsfslew = <2>;
 		nvidia,xcvr-lsrslew = <2>;
 		nvidia,xcvr-hsslew = <32>;
@@ -913,7 +913,7 @@
 		nvidia,elastic-limit = <16>;
 		nvidia,term-range-adj = <6>;
 		nvidia,xcvr-setup = <51>;
-		nvidia.xcvr-setup-use-fuses;
+		nvidia,xcvr-setup-use-fuses;
 		nvidia,xcvr-lsfslew = <2>;
 		nvidia,xcvr-lsrslew = <2>;
 		nvidia,xcvr-hsslew = <32>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/boot/dts/versatile-ab.dts linux-libre-4.14.155-gnu/arch/arm/boot/dts/versatile-ab.dts
--- linux-libre-4.14.154-gnu/arch/arm/boot/dts/versatile-ab.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/boot/dts/versatile-ab.dts	2019-11-20 12:00:54.000000000 -0500
@@ -304,7 +304,7 @@
 			clock-names = "apb_pclk";
 		};
 
-		ssp@101f4000 {
+		spi@101f4000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x101f4000 0x1000>;
 			interrupts = <11>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/crypto/crc32-ce-glue.c linux-libre-4.14.155-gnu/arch/arm/crypto/crc32-ce-glue.c
--- linux-libre-4.14.154-gnu/arch/arm/crypto/crc32-ce-glue.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/crypto/crc32-ce-glue.c	2019-11-20 12:00:54.000000000 -0500
@@ -236,7 +236,7 @@ static void __exit crc32_pmull_mod_exit(
 				  ARRAY_SIZE(crc32_pmull_algs));
 }
 
-static const struct cpu_feature crc32_cpu_feature[] = {
+static const struct cpu_feature __maybe_unused crc32_cpu_feature[] = {
 	{ cpu_feature(CRC32) }, { cpu_feature(PMULL) }, { }
 };
 MODULE_DEVICE_TABLE(cpu, crc32_cpu_feature);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm/mach-imx/pm-imx6.c linux-libre-4.14.155-gnu/arch/arm/mach-imx/pm-imx6.c
--- linux-libre-4.14.154-gnu/arch/arm/mach-imx/pm-imx6.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm/mach-imx/pm-imx6.c	2019-11-20 12:00:54.000000000 -0500
@@ -604,6 +604,28 @@ static void __init imx6_pm_common_init(c
 				   IMX6Q_GPR1_GINT);
 }
 
+static void imx6_pm_stby_poweroff(void)
+{
+	imx6_set_lpm(STOP_POWER_OFF);
+	imx6q_suspend_finish(0);
+
+	mdelay(1000);
+
+	pr_emerg("Unable to poweroff system\n");
+}
+
+static int imx6_pm_stby_poweroff_probe(void)
+{
+	if (pm_power_off) {
+		pr_warn("%s: pm_power_off already claimed  %p %pf!\n",
+			__func__, pm_power_off, pm_power_off);
+		return -EBUSY;
+	}
+
+	pm_power_off = imx6_pm_stby_poweroff;
+	return 0;
+}
+
 void __init imx6_pm_ccm_init(const char *ccm_compat)
 {
 	struct device_node *np;
@@ -620,6 +642,9 @@ void __init imx6_pm_ccm_init(const char
 	val = readl_relaxed(ccm_base + CLPCR);
 	val &= ~BM_CLPCR_LPM;
 	writel_relaxed(val, ccm_base + CLPCR);
+
+	if (of_property_read_bool(np, "fsl,pmic-stby-poweroff"))
+		imx6_pm_stby_poweroff_probe();
 }
 
 void __init imx6q_pm_init(void)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-nanopi-a64.dts linux-libre-4.14.155-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-nanopi-a64.dts
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-nanopi-a64.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-nanopi-a64.dts	2019-11-20 12:00:54.000000000 -0500
@@ -126,9 +126,9 @@
 
 &reg_dcdc1 {
 	regulator-always-on;
-	regulator-min-microvolt = <3000000>;
-	regulator-max-microvolt = <3000000>;
-	regulator-name = "vcc-3v";
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+	regulator-name = "vcc-3v3";
 };
 
 &reg_dcdc2 {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-olinuxino.dts linux-libre-4.14.155-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-olinuxino.dts
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-olinuxino.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/allwinner/sun50i-a64-olinuxino.dts	2019-11-20 12:00:54.000000000 -0500
@@ -120,10 +120,14 @@
 
 /* DCDC3 is polyphased with DCDC2 */
 
+/*
+ * The board uses DDR3L DRAM chips. 1.36V is the closest to the nominal
+ * 1.35V that the PMIC can drive.
+ */
 &reg_dcdc5 {
 	regulator-always-on;
-	regulator-min-microvolt = <1500000>;
-	regulator-max-microvolt = <1500000>;
+	regulator-min-microvolt = <1360000>;
+	regulator-max-microvolt = <1360000>;
 	regulator-name = "vcc-ddr3";
 };
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amd/amd-seattle-soc.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -107,7 +107,7 @@
 			clock-names = "uartclk", "apb_pclk";
 		};
 
-		spi0: ssp@e1020000 {
+		spi0: spi@e1020000 {
 			status = "disabled";
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0 0xe1020000 0 0x1000>;
@@ -117,7 +117,7 @@
 			clock-names = "apb_pclk";
 		};
 
-		spi1: ssp@e1030000 {
+		spi1: spi@e1030000 {
 			status = "disabled";
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0 0xe1030000 0 0x1000>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -413,7 +413,7 @@
 			};
 		};
 
-		spi_pins: spi {
+		spi_pins: spi-pins {
 			mux {
 				groups = "spi_miso",
 					"spi_mosi",
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -310,7 +310,7 @@
 			};
 		};
 
-		spi_pins: spi {
+		spi_pins: spi-pins {
 			mux {
 				groups = "spi_miso",
 					"spi_mosi",
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts	2019-11-20 12:00:54.000000000 -0500
@@ -14,7 +14,7 @@
 
 / {
 	compatible = "libretech,cc", "amlogic,s905x", "amlogic,meson-gxl";
-	model = "Libre Technology CC";
+	model = "Libre Computer Board AML-S905X-CC";
 
 	aliases {
 		serial0 = &uart_AO;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/lg/lg1312.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/lg/lg1312.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/lg/lg1312.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/lg/lg1312.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -168,14 +168,14 @@
 			clock-names = "apb_pclk";
 			status="disabled";
 		};
-		spi0: ssp@fe800000 {
+		spi0: spi@fe800000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x0 0xfe800000 0x1000>;
 			interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&clk_bus>;
 			clock-names = "apb_pclk";
 		};
-		spi1: ssp@fe900000 {
+		spi1: spi@fe900000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x0 0xfe900000 0x1000>;
 			interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/lg/lg1313.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/lg/lg1313.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/lg/lg1313.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/lg/lg1313.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -168,14 +168,14 @@
 			clock-names = "apb_pclk";
 			status="disabled";
 		};
-		spi0: ssp@fe800000 {
+		spi0: spi@fe800000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x0 0xfe800000 0x1000>;
 			interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
 			clocks = <&clk_bus>;
 			clock-names = "apb_pclk";
 		};
-		spi1: ssp@fe900000 {
+		spi1: spi@fe900000 {
 			compatible = "arm,pl022", "arm,primecell";
 			reg = <0x0 0xfe900000 0x1000>;
 			interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -282,6 +282,7 @@
 		status = "okay";
 		bus-width = <8>;
 		non-removable;
+		vqmmc-supply = <&vdd_1v8>;
 	};
 
 	clocks {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi linux-libre-4.14.155-gnu/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
--- linux-libre-4.14.154-gnu/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi	2019-11-20 12:00:54.000000000 -0500
@@ -113,6 +113,19 @@
 		vin-supply = <&vcc_1v8>;
 	};
 
+	vcc3v0_sd: vcc3v0-sd {
+		compatible = "regulator-fixed";
+		enable-active-high;
+		gpio = <&gpio0 RK_PA1 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&sdmmc0_pwr_h>;
+		regulator-always-on;
+		regulator-max-microvolt = <3000000>;
+		regulator-min-microvolt = <3000000>;
+		regulator-name = "vcc3v0_sd";
+		vin-supply = <&vcc3v3_sys>;
+	};
+
 	vcc3v3_sys: vcc3v3-sys {
 		compatible = "regulator-fixed";
 		regulator-name = "vcc3v3_sys";
@@ -136,7 +149,7 @@
 	vcc5v0_host: vcc5v0-host-regulator {
 		compatible = "regulator-fixed";
 		enable-active-high;
-		gpio = <&gpio1 RK_PD1 GPIO_ACTIVE_HIGH>;
+		gpio = <&gpio4 RK_PD1 GPIO_ACTIVE_HIGH>;
 		pinctrl-names = "default";
 		pinctrl-0 = <&vcc5v0_host_en>;
 		regulator-name = "vcc5v0_host";
@@ -315,7 +328,7 @@
 				regulator-always-on;
 				regulator-boot-on;
 				regulator-min-microvolt = <1800000>;
-				regulator-max-microvolt = <3000000>;
+				regulator-max-microvolt = <3300000>;
 				regulator-state-mem {
 					regulator-on-in-suspend;
 					regulator-suspend-microvolt = <3000000>;
@@ -490,6 +503,13 @@
 		};
 	};
 
+	sd {
+		sdmmc0_pwr_h: sdmmc0-pwr-h {
+			rockchip,pins =
+				<RK_GPIO0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+
 	usb2 {
 		vcc5v0_host_en: vcc5v0-host-en {
 			rockchip,pins =
@@ -537,6 +557,7 @@
 };
 
 &sdmmc {
+	broken-cd;
 	bus-width = <4>;
 	cap-mmc-highspeed;
 	cap-sd-highspeed;
@@ -545,6 +566,7 @@
 	max-frequency = <150000000>;
 	pinctrl-names = "default";
 	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
+	vmmc-supply = <&vcc3v0_sd>;
 	vqmmc-supply = <&vcc_sdio>;
 	status = "okay";
 };
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/mips/bcm47xx/workarounds.c linux-libre-4.14.155-gnu/arch/mips/bcm47xx/workarounds.c
--- linux-libre-4.14.154-gnu/arch/mips/bcm47xx/workarounds.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/mips/bcm47xx/workarounds.c	2019-11-20 12:00:54.000000000 -0500
@@ -5,9 +5,8 @@
 #include <bcm47xx_board.h>
 #include <bcm47xx.h>
 
-static void __init bcm47xx_workarounds_netgear_wnr3500l(void)
+static void __init bcm47xx_workarounds_enable_usb_power(int usb_power)
 {
-	const int usb_power = 12;
 	int err;
 
 	err = gpio_request_one(usb_power, GPIOF_OUT_INIT_HIGH, "usb_power");
@@ -23,7 +22,10 @@ void __init bcm47xx_workarounds(void)
 
 	switch (board) {
 	case BCM47XX_BOARD_NETGEAR_WNR3500L:
-		bcm47xx_workarounds_netgear_wnr3500l();
+		bcm47xx_workarounds_enable_usb_power(12);
+		break;
+	case BCM47XX_BOARD_NETGEAR_WNDR3400_V3:
+		bcm47xx_workarounds_enable_usb_power(21);
 		break;
 	default:
 		/* No workaround(s) needed */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/mips/bcm63xx/reset.c linux-libre-4.14.155-gnu/arch/mips/bcm63xx/reset.c
--- linux-libre-4.14.154-gnu/arch/mips/bcm63xx/reset.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/mips/bcm63xx/reset.c	2019-11-20 12:00:54.000000000 -0500
@@ -120,7 +120,7 @@
 #define BCM6368_RESET_DSL	0
 #define BCM6368_RESET_SAR	SOFTRESET_6368_SAR_MASK
 #define BCM6368_RESET_EPHY	SOFTRESET_6368_EPHY_MASK
-#define BCM6368_RESET_ENETSW	0
+#define BCM6368_RESET_ENETSW	SOFTRESET_6368_ENETSW_MASK
 #define BCM6368_RESET_PCM	SOFTRESET_6368_PCM_MASK
 #define BCM6368_RESET_MPI	SOFTRESET_6368_MPI_MASK
 #define BCM6368_RESET_PCIE	0
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/mips/include/asm/kexec.h linux-libre-4.14.155-gnu/arch/mips/include/asm/kexec.h
--- linux-libre-4.14.154-gnu/arch/mips/include/asm/kexec.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/mips/include/asm/kexec.h	2019-11-20 12:00:54.000000000 -0500
@@ -12,11 +12,11 @@
 #include <asm/stacktrace.h>
 
 /* Maximum physical address we can use pages from */
-#define KEXEC_SOURCE_MEMORY_LIMIT (0x20000000)
+#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
 /* Maximum address we can reach in physical address mode */
-#define KEXEC_DESTINATION_MEMORY_LIMIT (0x20000000)
+#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
  /* Maximum address we can use for the control code buffer */
-#define KEXEC_CONTROL_MEMORY_LIMIT (0x20000000)
+#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
 /* Reserve 3*4096 bytes for board-specific info */
 #define KEXEC_CONTROL_PAGE_SIZE (4096 + 3*4096)
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/mips/txx9/generic/setup.c linux-libre-4.14.155-gnu/arch/mips/txx9/generic/setup.c
--- linux-libre-4.14.154-gnu/arch/mips/txx9/generic/setup.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/mips/txx9/generic/setup.c	2019-11-20 12:00:54.000000000 -0500
@@ -959,12 +959,11 @@ void __init txx9_sramc_init(struct resou
 		goto exit_put;
 	err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
 	if (err) {
-		device_unregister(&dev->dev);
 		iounmap(dev->base);
-		kfree(dev);
+		device_unregister(&dev->dev);
 	}
 	return;
 exit_put:
+	iounmap(dev->base);
 	put_device(&dev->dev);
-	return;
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/boot/libfdt_env.h linux-libre-4.14.155-gnu/arch/powerpc/boot/libfdt_env.h
--- linux-libre-4.14.154-gnu/arch/powerpc/boot/libfdt_env.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/boot/libfdt_env.h	2019-11-20 12:00:54.000000000 -0500
@@ -5,6 +5,8 @@
 #include <types.h>
 #include <string.h>
 
+#define INT_MAX			((int)(~0U>>1))
+
 #include "of.h"
 
 typedef u32 uint32_t;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/include/asm/imc-pmu.h linux-libre-4.14.155-gnu/arch/powerpc/include/asm/imc-pmu.h
--- linux-libre-4.14.154-gnu/arch/powerpc/include/asm/imc-pmu.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/include/asm/imc-pmu.h	2019-11-20 12:00:54.000000000 -0500
@@ -21,11 +21,6 @@
 #include <asm/opal.h>
 
 /*
- * For static allocation of some of the structures.
- */
-#define IMC_MAX_PMUS			32
-
-/*
  * Compatibility macros for IMC devices
  */
 #define IMC_DTB_COMPAT			"ibm,opal-in-memory-counters"
@@ -125,4 +120,5 @@ enum {
 extern int init_imc_pmu(struct device_node *parent,
 				struct imc_pmu *pmu_ptr, int pmu_id);
 extern void thread_imc_disable(void);
+extern int get_max_nest_dev(void);
 #endif /* __ASM_POWERPC_IMC_PMU_H */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/include/asm/uaccess.h linux-libre-4.14.155-gnu/arch/powerpc/include/asm/uaccess.h
--- linux-libre-4.14.154-gnu/arch/powerpc/include/asm/uaccess.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/include/asm/uaccess.h	2019-11-20 12:00:54.000000000 -0500
@@ -234,7 +234,7 @@ do {								\
 ({								\
 	long __gu_err;						\
 	__long_type(*(ptr)) __gu_val;				\
-	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);	\
+	__typeof__(*(ptr)) __user *__gu_addr = (ptr);	\
 	__chk_user_ptr(ptr);					\
 	if (!is_kernel_addr((unsigned long)__gu_addr))		\
 		might_fault();					\
@@ -248,7 +248,7 @@ do {								\
 ({									\
 	long __gu_err = -EFAULT;					\
 	__long_type(*(ptr)) __gu_val = 0;				\
-	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);		\
+	__typeof__(*(ptr)) __user *__gu_addr = (ptr);		\
 	might_fault();							\
 	if (access_ok(VERIFY_READ, __gu_addr, (size))) {		\
 		barrier_nospec();					\
@@ -262,7 +262,7 @@ do {								\
 ({								\
 	long __gu_err;						\
 	__long_type(*(ptr)) __gu_val;				\
-	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);	\
+	__typeof__(*(ptr)) __user *__gu_addr = (ptr);	\
 	__chk_user_ptr(ptr);					\
 	barrier_nospec();					\
 	__get_user_size(__gu_val, __gu_addr, (size), __gu_err);	\
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/kernel/iommu.c linux-libre-4.14.155-gnu/arch/powerpc/kernel/iommu.c
--- linux-libre-4.14.154-gnu/arch/powerpc/kernel/iommu.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/kernel/iommu.c	2019-11-20 12:00:54.000000000 -0500
@@ -785,9 +785,9 @@ dma_addr_t iommu_map_page(struct device
 
 	vaddr = page_address(page) + offset;
 	uaddr = (unsigned long)vaddr;
-	npages = iommu_num_pages(uaddr, size, IOMMU_PAGE_SIZE(tbl));
 
 	if (tbl) {
+		npages = iommu_num_pages(uaddr, size, IOMMU_PAGE_SIZE(tbl));
 		align = 0;
 		if (tbl->it_page_shift < PAGE_SHIFT && size >= PAGE_SIZE &&
 		    ((unsigned long)vaddr & ~PAGE_MASK) == 0)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/kernel/rtas.c linux-libre-4.14.155-gnu/arch/powerpc/kernel/rtas.c
--- linux-libre-4.14.154-gnu/arch/powerpc/kernel/rtas.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/kernel/rtas.c	2019-11-20 12:00:54.000000000 -0500
@@ -984,6 +984,7 @@ int rtas_ibm_suspend_me(u64 handle)
 		goto out;
 	}
 
+	cpu_hotplug_disable();
 	stop_topology_update();
 
 	/* Call function on all CPUs.  One of us will make the
@@ -998,6 +999,7 @@ int rtas_ibm_suspend_me(u64 handle)
 		printk(KERN_ERR "Error doing global join\n");
 
 	start_topology_update();
+	cpu_hotplug_enable();
 
 	/* Take down CPUs not online prior to suspend */
 	cpuret = rtas_offline_cpus_mask(offline_mask);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso32/datapage.S linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso32/datapage.S
--- linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso32/datapage.S	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso32/datapage.S	2019-11-20 12:00:54.000000000 -0500
@@ -37,6 +37,7 @@ data_page_branch:
 	mtlr	r0
 	addi	r3, r3, __kernel_datapage_offset-data_page_branch
 	lwz	r0,0(r3)
+  .cfi_restore lr
 	add	r3,r0,r3
 	blr
   .cfi_endproc
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso32/gettimeofday.S linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso32/gettimeofday.S
--- linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso32/gettimeofday.S	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso32/gettimeofday.S	2019-11-20 12:00:54.000000000 -0500
@@ -139,6 +139,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime)
 	 */
 99:
 	li	r0,__NR_clock_gettime
+  .cfi_restore lr
 	sc
 	blr
   .cfi_endproc
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso64/datapage.S linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso64/datapage.S
--- linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso64/datapage.S	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso64/datapage.S	2019-11-20 12:00:54.000000000 -0500
@@ -37,6 +37,7 @@ data_page_branch:
 	mtlr	r0
 	addi	r3, r3, __kernel_datapage_offset-data_page_branch
 	lwz	r0,0(r3)
+  .cfi_restore lr
 	add	r3,r0,r3
 	blr
   .cfi_endproc
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso64/gettimeofday.S linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso64/gettimeofday.S
--- linux-libre-4.14.154-gnu/arch/powerpc/kernel/vdso64/gettimeofday.S	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/kernel/vdso64/gettimeofday.S	2019-11-20 12:00:54.000000000 -0500
@@ -124,6 +124,7 @@ V_FUNCTION_BEGIN(__kernel_clock_gettime)
 	 */
 99:
 	li	r0,__NR_clock_gettime
+  .cfi_restore lr
 	sc
 	blr
   .cfi_endproc
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/mm/slb.c linux-libre-4.14.155-gnu/arch/powerpc/mm/slb.c
--- linux-libre-4.14.154-gnu/arch/powerpc/mm/slb.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/mm/slb.c	2019-11-20 12:00:54.000000000 -0500
@@ -315,7 +315,7 @@ void slb_initialize(void)
 #endif
 	}
 
-	get_paca()->stab_rr = SLB_NUM_BOLTED;
+	get_paca()->stab_rr = SLB_NUM_BOLTED - 1;
 
 	lflags = SLB_VSID_KERNEL | linear_llp;
 	vflags = SLB_VSID_KERNEL | vmalloc_llp;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/perf/imc-pmu.c linux-libre-4.14.155-gnu/arch/powerpc/perf/imc-pmu.c
--- linux-libre-4.14.154-gnu/arch/powerpc/perf/imc-pmu.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/perf/imc-pmu.c	2019-11-20 12:00:54.000000000 -0500
@@ -26,7 +26,7 @@
  */
 static DEFINE_MUTEX(nest_init_lock);
 static DEFINE_PER_CPU(struct imc_pmu_ref *, local_nest_imc_refc);
-static struct imc_pmu *per_nest_pmu_arr[IMC_MAX_PMUS];
+static struct imc_pmu **per_nest_pmu_arr;
 static cpumask_t nest_imc_cpumask;
 struct imc_pmu_ref *nest_imc_refc;
 static int nest_pmus;
@@ -286,13 +286,14 @@ static struct imc_pmu_ref *get_nest_pmu_
 static void nest_change_cpu_context(int old_cpu, int new_cpu)
 {
 	struct imc_pmu **pn = per_nest_pmu_arr;
-	int i;
 
 	if (old_cpu < 0 || new_cpu < 0)
 		return;
 
-	for (i = 0; *pn && i < IMC_MAX_PMUS; i++, pn++)
+	while (*pn) {
 		perf_pmu_migrate_context(&(*pn)->pmu, old_cpu, new_cpu);
+		pn++;
+	}
 }
 
 static int ppc_nest_imc_cpu_offline(unsigned int cpu)
@@ -1188,6 +1189,7 @@ static void imc_common_cpuhp_mem_free(st
 		if (nest_pmus == 1) {
 			cpuhp_remove_state(CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE);
 			kfree(nest_imc_refc);
+			kfree(per_nest_pmu_arr);
 		}
 
 		if (nest_pmus > 0)
@@ -1236,6 +1238,13 @@ static int imc_mem_init(struct imc_pmu *
 			return -ENOMEM;
 
 		/* Needed for hotplug/migration */
+		if (!per_nest_pmu_arr) {
+			per_nest_pmu_arr = kcalloc(get_max_nest_dev() + 1,
+						sizeof(struct imc_pmu *),
+						GFP_KERNEL);
+			if (!per_nest_pmu_arr)
+				return -ENOMEM;
+		}
 		per_nest_pmu_arr[pmu_index] = pmu_ptr;
 		break;
 	case IMC_DOMAIN_CORE:
@@ -1318,6 +1327,8 @@ int init_imc_pmu(struct device_node *par
 			ret = nest_pmu_cpumask_init();
 			if (ret) {
 				mutex_unlock(&nest_init_lock);
+				kfree(nest_imc_refc);
+				kfree(per_nest_pmu_arr);
 				goto err_free;
 			}
 		}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/powerpc/platforms/powernv/opal-imc.c linux-libre-4.14.155-gnu/arch/powerpc/platforms/powernv/opal-imc.c
--- linux-libre-4.14.154-gnu/arch/powerpc/platforms/powernv/opal-imc.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/powerpc/platforms/powernv/opal-imc.c	2019-11-20 12:00:54.000000000 -0500
@@ -159,6 +159,22 @@ static void disable_core_pmu_counters(vo
 	put_online_cpus();
 }
 
+int get_max_nest_dev(void)
+{
+	struct device_node *node;
+	u32 pmu_units = 0, type;
+
+	for_each_compatible_node(node, NULL, IMC_DTB_UNIT_COMPAT) {
+		if (of_property_read_u32(node, "type", &type))
+			continue;
+
+		if (type == IMC_TYPE_CHIP)
+			pmu_units++;
+	}
+
+	return pmu_units;
+}
+
 static int opal_imc_counters_probe(struct platform_device *pdev)
 {
 	struct device_node *imc_dev = pdev->dev.of_node;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/hyperv/hv_init.c linux-libre-4.14.155-gnu/arch/x86/hyperv/hv_init.c
--- linux-libre-4.14.154-gnu/arch/x86/hyperv/hv_init.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/hyperv/hv_init.c	2019-11-20 12:00:54.000000000 -0500
@@ -17,6 +17,7 @@
  *
  */
 
+#include <linux/efi.h>
 #include <linux/types.h>
 #include <asm/hypervisor.h>
 #include <asm/hyperv.h>
@@ -101,6 +102,22 @@ static int hv_cpu_init(unsigned int cpu)
 	return 0;
 }
 
+static int __init hv_pci_init(void)
+{
+	int gen2vm = efi_enabled(EFI_BOOT);
+
+	/*
+	 * For Generation-2 VM, we exit from pci_arch_init() by returning 0.
+	 * The purpose is to suppress the harmless warning:
+	 * "PCI: Fatal: No config space access function found"
+	 */
+	if (gen2vm)
+		return 0;
+
+	/* For Generation-1 VM, we'll proceed in pci_arch_init().  */
+	return 1;
+}
+
 /*
  * This function is to be invoked early in the boot sequence after the
  * hypervisor has been detected.
@@ -154,6 +171,8 @@ void hyperv_init(void)
 
 	hyper_alloc_mmu();
 
+	x86_init.pci.arch_init = hv_pci_init;
+
 	/*
 	 * Register Hyper-V specific clocksource.
 	 */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kernel/cpu/common.c linux-libre-4.14.155-gnu/arch/x86/kernel/cpu/common.c
--- linux-libre-4.14.154-gnu/arch/x86/kernel/cpu/common.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kernel/cpu/common.c	2019-11-20 12:00:54.000000000 -0500
@@ -1066,6 +1066,9 @@ static void __init early_identify_cpu(st
 	memset(&c->x86_capability, 0, sizeof c->x86_capability);
 	c->extended_cpuid_level = 0;
 
+	if (!have_cpuid_p())
+		identify_cpu_without_cpuid(c);
+
 	/* cyrix could have cpuid enabled via c_identify()*/
 	if (have_cpuid_p()) {
 		cpu_detect(c);
@@ -1082,7 +1085,6 @@ static void __init early_identify_cpu(st
 		if (this_cpu->c_bsp_init)
 			this_cpu->c_bsp_init(c);
 	} else {
-		identify_cpu_without_cpuid(c);
 		setup_clear_cpu_cap(X86_FEATURE_CPUID);
 	}
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kernel/cpu/cyrix.c linux-libre-4.14.155-gnu/arch/x86/kernel/cpu/cyrix.c
--- linux-libre-4.14.154-gnu/arch/x86/kernel/cpu/cyrix.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kernel/cpu/cyrix.c	2019-11-20 12:00:54.000000000 -0500
@@ -437,7 +437,7 @@ static void cyrix_identify(struct cpuinf
 			/* enable MAPEN  */
 			setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10);
 			/* enable cpuid  */
-			setCx86_old(CX86_CCR4, getCx86_old(CX86_CCR4) | 0x80);
+			setCx86(CX86_CCR4, getCx86(CX86_CCR4) | 0x80);
 			/* disable MAPEN */
 			setCx86(CX86_CCR3, ccr3);
 			local_irq_restore(flags);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kernel/cpu/mcheck/mce-inject.c linux-libre-4.14.155-gnu/arch/x86/kernel/cpu/mcheck/mce-inject.c
--- linux-libre-4.14.154-gnu/arch/x86/kernel/cpu/mcheck/mce-inject.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kernel/cpu/mcheck/mce-inject.c	2019-11-20 12:00:54.000000000 -0500
@@ -108,6 +108,9 @@ static void setup_inj_struct(struct mce
 	memset(m, 0, sizeof(struct mce));
 
 	m->cpuvendor = boot_cpu_data.x86_vendor;
+	m->time	     = ktime_get_real_seconds();
+	m->cpuid     = cpuid_eax(1);
+	m->microcode = boot_cpu_data.microcode;
 }
 
 /* Update fake mce registers on current CPU. */
@@ -576,6 +579,9 @@ static int inj_bank_set(void *data, u64
 	m->bank = val;
 	do_inject();
 
+	/* Reset injection struct */
+	setup_inj_struct(&i_mce);
+
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kernel/uprobes.c linux-libre-4.14.155-gnu/arch/x86/kernel/uprobes.c
--- linux-libre-4.14.154-gnu/arch/x86/kernel/uprobes.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kernel/uprobes.c	2019-11-20 12:00:54.000000000 -0500
@@ -987,7 +987,7 @@ arch_uretprobe_hijack_return_addr(unsign
 		pr_err("uprobe: return address clobbered: pid=%d, %%sp=%#lx, "
 			"%%ip=%#lx\n", current->pid, regs->sp, regs->ip);
 
-		force_sig_info(SIGSEGV, SEND_SIG_FORCED, current);
+		force_sig(SIGSEGV, current);
 	}
 
 	return -1;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kvm/vmx.c linux-libre-4.14.155-gnu/arch/x86/kvm/vmx.c
--- linux-libre-4.14.154-gnu/arch/x86/kvm/vmx.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kvm/vmx.c	2019-11-20 12:00:54.000000000 -0500
@@ -4468,7 +4468,7 @@ static void ept_load_pdptrs(struct kvm_v
 		      (unsigned long *)&vcpu->arch.regs_dirty))
 		return;
 
-	if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {
+	if (is_pae_paging(vcpu)) {
 		vmcs_write64(GUEST_PDPTR0, mmu->pdptrs[0]);
 		vmcs_write64(GUEST_PDPTR1, mmu->pdptrs[1]);
 		vmcs_write64(GUEST_PDPTR2, mmu->pdptrs[2]);
@@ -4480,7 +4480,7 @@ static void ept_save_pdptrs(struct kvm_v
 {
 	struct kvm_mmu *mmu = vcpu->arch.walk_mmu;
 
-	if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {
+	if (is_pae_paging(vcpu)) {
 		mmu->pdptrs[0] = vmcs_read64(GUEST_PDPTR0);
 		mmu->pdptrs[1] = vmcs_read64(GUEST_PDPTR1);
 		mmu->pdptrs[2] = vmcs_read64(GUEST_PDPTR2);
@@ -10906,8 +10906,7 @@ static int nested_vmx_load_cr3(struct kv
 		 * If PAE paging and EPT are both on, CR3 is not used by the CPU and
 		 * must not be dereferenced.
 		 */
-		if (!is_long_mode(vcpu) && is_pae(vcpu) && is_paging(vcpu) &&
-		    !nested_ept) {
+		if (is_pae_paging(vcpu) && !nested_ept) {
 			if (!load_pdptrs(vcpu, vcpu->arch.walk_mmu, cr3)) {
 				*entry_failure_code = ENTRY_FAIL_PDPTE;
 				return 1;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kvm/x86.c linux-libre-4.14.155-gnu/arch/x86/kvm/x86.c
--- linux-libre-4.14.154-gnu/arch/x86/kvm/x86.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kvm/x86.c	2019-11-20 12:00:54.000000000 -0500
@@ -620,7 +620,7 @@ bool pdptrs_changed(struct kvm_vcpu *vcp
 	gfn_t gfn;
 	int r;
 
-	if (is_long_mode(vcpu) || !is_pae(vcpu))
+	if (!is_pae_paging(vcpu))
 		return false;
 
 	if (!test_bit(VCPU_EXREG_PDPTR,
@@ -849,8 +849,8 @@ int kvm_set_cr3(struct kvm_vcpu *vcpu, u
 	if (is_long_mode(vcpu) &&
 	    (cr3 & rsvd_bits(cpuid_maxphyaddr(vcpu), 63)))
 		return 1;
-	else if (is_pae(vcpu) && is_paging(vcpu) &&
-		   !load_pdptrs(vcpu, vcpu->arch.walk_mmu, cr3))
+	else if (is_pae_paging(vcpu) &&
+		 !load_pdptrs(vcpu, vcpu->arch.walk_mmu, cr3))
 		return 1;
 
 	vcpu->arch.cr3 = cr3;
@@ -7787,7 +7787,7 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct
 		kvm_update_cpuid(vcpu);
 
 	idx = srcu_read_lock(&vcpu->kvm->srcu);
-	if (!is_long_mode(vcpu) && is_pae(vcpu)) {
+	if (is_pae_paging(vcpu)) {
 		load_pdptrs(vcpu, vcpu->arch.walk_mmu, kvm_read_cr3(vcpu));
 		mmu_reset_needed = 1;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/arch/x86/kvm/x86.h linux-libre-4.14.155-gnu/arch/x86/kvm/x86.h
--- linux-libre-4.14.154-gnu/arch/x86/kvm/x86.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/arch/x86/kvm/x86.h	2019-11-20 12:00:54.000000000 -0500
@@ -94,6 +94,11 @@ static inline int is_paging(struct kvm_v
 	return likely(kvm_read_cr0_bits(vcpu, X86_CR0_PG));
 }
 
+static inline bool is_pae_paging(struct kvm_vcpu *vcpu)
+{
+	return !is_long_mode(vcpu) && is_pae(vcpu) && is_paging(vcpu);
+}
+
 static inline u32 bit(int bitno)
 {
 	return 1 << (bitno & 31);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/block/bfq-iosched.c linux-libre-4.14.155-gnu/block/bfq-iosched.c
--- linux-libre-4.14.154-gnu/block/bfq-iosched.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/block/bfq-iosched.c	2019-11-20 12:00:54.000000000 -0500
@@ -3314,7 +3314,12 @@ static bool bfq_bfqq_may_idle(struct bfq
 	 * whether bfqq is being weight-raised, because
 	 * bfq_symmetric_scenario() does not take into account also
 	 * weight-raised queues (see comments on
-	 * bfq_weights_tree_add()).
+	 * bfq_weights_tree_add()). In particular, if bfqq is being
+	 * weight-raised, it is important to idle only if there are
+	 * other, non-weight-raised queues that may steal throughput
+	 * to bfqq. Actually, we should be even more precise, and
+	 * differentiate between interactive weight raising and
+	 * soft real-time weight raising.
 	 *
 	 * As a side note, it is worth considering that the above
 	 * device-idling countermeasures may however fail in the
@@ -3326,7 +3331,8 @@ static bool bfq_bfqq_may_idle(struct bfq
 	 * to let requests be served in the desired order until all
 	 * the requests already queued in the device have been served.
 	 */
-	asymmetric_scenario = bfqq->wr_coeff > 1 ||
+	asymmetric_scenario = (bfqq->wr_coeff > 1 &&
+			       bfqd->wr_busy_queues < bfqd->busy_queues) ||
 		!bfq_symmetric_scenario(bfqd);
 
 	/*
diff -druNp --no-dereference linux-libre-4.14.154-gnu/crypto/rsa-pkcs1pad.c linux-libre-4.14.155-gnu/crypto/rsa-pkcs1pad.c
--- linux-libre-4.14.154-gnu/crypto/rsa-pkcs1pad.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/crypto/rsa-pkcs1pad.c	2019-11-20 12:00:54.000000000 -0500
@@ -261,15 +261,6 @@ static int pkcs1pad_encrypt(struct akcip
 	pkcs1pad_sg_set_buf(req_ctx->in_sg, req_ctx->in_buf,
 			ctx->key_size - 1 - req->src_len, req->src);
 
-	req_ctx->out_buf = kmalloc(ctx->key_size, GFP_KERNEL);
-	if (!req_ctx->out_buf) {
-		kfree(req_ctx->in_buf);
-		return -ENOMEM;
-	}
-
-	pkcs1pad_sg_set_buf(req_ctx->out_sg, req_ctx->out_buf,
-			ctx->key_size, NULL);
-
 	akcipher_request_set_tfm(&req_ctx->child_req, ctx->child);
 	akcipher_request_set_callback(&req_ctx->child_req, req->base.flags,
 			pkcs1pad_encrypt_sign_complete_cb, req);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/Documentation/devicetree/bindings/media/i2c/adv748x.txt linux-libre-4.14.155-gnu/Documentation/devicetree/bindings/media/i2c/adv748x.txt
--- linux-libre-4.14.154-gnu/Documentation/devicetree/bindings/media/i2c/adv748x.txt	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/Documentation/devicetree/bindings/media/i2c/adv748x.txt	2019-11-20 12:00:54.000000000 -0500
@@ -73,7 +73,7 @@ Example:
 			};
 		};
 
-		port@10 {
+		port@a {
 			reg = <10>;
 
 			adv7482_txa: endpoint {
@@ -83,7 +83,7 @@ Example:
 			};
 		};
 
-		port@11 {
+		port@b {
 			reg = <11>;
 
 			adv7482_txb: endpoint {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt linux-libre-4.14.155-gnu/Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt
--- linux-libre-4.14.154-gnu/Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/Documentation/devicetree/bindings/net/brcm,unimac-mdio.txt	2019-11-20 12:00:54.000000000 -0500
@@ -19,6 +19,9 @@ Optional properties:
 - interrupt-names: must be "mdio_done_error" when there is a share interrupt fed
   to this hardware block, or must be "mdio_done" for the first interrupt and
   "mdio_error" for the second when there are separate interrupts
+- clocks: A reference to the clock supplying the MDIO bus controller
+- clock-frequency: the MDIO bus clock that must be output by the MDIO bus
+  hardware, if absent, the default hardware values are used
 
 Child nodes of this MDIO bus controller node are standard Ethernet PHY device
 nodes as described in Documentation/devicetree/bindings/net/phy.txt
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/acpi/acpi_lpss.c linux-libre-4.14.155-gnu/drivers/acpi/acpi_lpss.c
--- linux-libre-4.14.154-gnu/drivers/acpi/acpi_lpss.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/acpi/acpi_lpss.c	2019-11-20 12:00:54.000000000 -0500
@@ -98,6 +98,9 @@ struct lpss_private_data {
 	u32 prv_reg_ctx[LPSS_PRV_REG_COUNT];
 };
 
+/* Devices which need to be in D3 before lpss_iosf_enter_d3_state() proceeds */
+static u32 pmc_atom_d3_mask = 0xfe000ffe;
+
 /* LPSS run time quirks */
 static unsigned int lpss_quirks;
 
@@ -174,6 +177,21 @@ static void byt_pwm_setup(struct lpss_pr
 
 static void byt_i2c_setup(struct lpss_private_data *pdata)
 {
+	const char *uid_str = acpi_device_uid(pdata->adev);
+	acpi_handle handle = pdata->adev->handle;
+	unsigned long long shared_host = 0;
+	acpi_status status;
+	long uid = 0;
+
+	/* Expected to always be true, but better safe then sorry */
+	if (uid_str)
+		uid = simple_strtol(uid_str, NULL, 10);
+
+	/* Detect I2C bus shared with PUNIT and ignore its d3 status */
+	status = acpi_evaluate_integer(handle, "_SEM", NULL, &shared_host);
+	if (ACPI_SUCCESS(status) && shared_host && uid)
+		pmc_atom_d3_mask &= ~(BIT_LPSS2_F1_I2C1 << (uid - 1));
+
 	lpss_deassert_reset(pdata);
 
 	if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset))
@@ -789,7 +807,7 @@ static void lpss_iosf_enter_d3_state(voi
 	 * Here we read the values related to LPSS power island, i.e. LPSS
 	 * devices, excluding both LPSS DMA controllers, along with SCC domain.
 	 */
-	u32 func_dis, d3_sts_0, pmc_status, pmc_mask = 0xfe000ffe;
+	u32 func_dis, d3_sts_0, pmc_status;
 	int ret;
 
 	ret = pmc_atom_read(PMC_FUNC_DIS, &func_dis);
@@ -807,7 +825,7 @@ static void lpss_iosf_enter_d3_state(voi
 	 * Shutdown both LPSS DMA controllers if and only if all other devices
 	 * are already in D3hot.
 	 */
-	pmc_status = (~(d3_sts_0 | func_dis)) & pmc_mask;
+	pmc_status = (~(d3_sts_0 | func_dis)) & pmc_atom_d3_mask;
 	if (pmc_status)
 		goto exit;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/acpi/pci_root.c linux-libre-4.14.155-gnu/drivers/acpi/pci_root.c
--- linux-libre-4.14.154-gnu/drivers/acpi/pci_root.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/acpi/pci_root.c	2019-11-20 12:00:54.000000000 -0500
@@ -454,8 +454,9 @@ static void negotiate_os_control(struct
 	decode_osc_support(root, "OS supports", support);
 	status = acpi_pci_osc_support(root, support);
 	if (ACPI_FAILURE(status)) {
-		dev_info(&device->dev, "_OSC failed (%s); disabling ASPM\n",
-			 acpi_format_exception(status));
+		dev_info(&device->dev, "_OSC failed (%s)%s\n",
+			 acpi_format_exception(status),
+			 pcie_aspm_support_enabled() ? "; disabling ASPM" : "");
 		*no_aspm = 1;
 		return;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/base/component.c linux-libre-4.14.155-gnu/drivers/base/component.c
--- linux-libre-4.14.154-gnu/drivers/base/component.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/base/component.c	2019-11-20 12:00:54.000000000 -0500
@@ -461,9 +461,9 @@ int component_bind_all(struct device *ma
 		}
 
 	if (ret != 0) {
-		for (; i--; )
-			if (!master->match->compare[i].duplicate) {
-				c = master->match->compare[i].component;
+		for (; i > 0; i--)
+			if (!master->match->compare[i - 1].duplicate) {
+				c = master->match->compare[i - 1].component;
 				component_unbind(c, master, data);
 			}
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/base/power/opp/core.c linux-libre-4.14.155-gnu/drivers/base/power/opp/core.c
--- linux-libre-4.14.154-gnu/drivers/base/power/opp/core.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/base/power/opp/core.c	2019-11-20 12:00:54.000000000 -0500
@@ -49,9 +49,14 @@ static struct opp_device *_find_opp_dev(
 static struct opp_table *_find_opp_table_unlocked(struct device *dev)
 {
 	struct opp_table *opp_table;
+	bool found;
 
 	list_for_each_entry(opp_table, &opp_tables, node) {
-		if (_find_opp_dev(dev, opp_table)) {
+		mutex_lock(&opp_table->lock);
+		found = !!_find_opp_dev(dev, opp_table);
+		mutex_unlock(&opp_table->lock);
+
+		if (found) {
 			_get_opp_table_kref(opp_table);
 
 			return opp_table;
@@ -711,6 +716,8 @@ struct opp_device *_add_opp_dev(const st
 
 	/* Initialize opp-dev */
 	opp_dev->dev = dev;
+
+	mutex_lock(&opp_table->lock);
 	list_add(&opp_dev->node, &opp_table->dev_list);
 
 	/* Create debugfs entries for the opp_table */
@@ -718,6 +725,7 @@ struct opp_device *_add_opp_dev(const st
 	if (ret)
 		dev_err(dev, "%s: Failed to register opp debugfs (%d)\n",
 			__func__, ret);
+	mutex_unlock(&opp_table->lock);
 
 	return opp_dev;
 }
@@ -736,6 +744,7 @@ static struct opp_table *_allocate_opp_t
 	if (!opp_table)
 		return NULL;
 
+	mutex_init(&opp_table->lock);
 	INIT_LIST_HEAD(&opp_table->dev_list);
 
 	opp_dev = _add_opp_dev(dev, opp_table);
@@ -757,7 +766,6 @@ static struct opp_table *_allocate_opp_t
 
 	BLOCKING_INIT_NOTIFIER_HEAD(&opp_table->head);
 	INIT_LIST_HEAD(&opp_table->opp_list);
-	mutex_init(&opp_table->lock);
 	kref_init(&opp_table->kref);
 
 	/* Secure the device table modification */
@@ -799,6 +807,10 @@ static void _opp_table_kref_release(stru
 	if (!IS_ERR(opp_table->clk))
 		clk_put(opp_table->clk);
 
+	/*
+	 * No need to take opp_table->lock here as we are guaranteed that no
+	 * references to the OPP table are taken at this point.
+	 */
 	opp_dev = list_first_entry(&opp_table->dev_list, struct opp_device,
 				   node);
 
@@ -1702,6 +1714,9 @@ void _dev_pm_opp_remove_table(struct opp
 {
 	struct dev_pm_opp *opp, *tmp;
 
+	/* Protect dev_list */
+	mutex_lock(&opp_table->lock);
+
 	/* Find if opp_table manages a single device */
 	if (list_is_singular(&opp_table->dev_list)) {
 		/* Free static OPPs */
@@ -1712,6 +1727,8 @@ void _dev_pm_opp_remove_table(struct opp
 	} else {
 		_remove_opp_dev(_find_opp_dev(dev, opp_table), opp_table);
 	}
+
+	mutex_unlock(&opp_table->lock);
 }
 
 void _dev_pm_opp_find_and_remove_table(struct device *dev, bool remove_all)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/base/power/opp/cpu.c linux-libre-4.14.155-gnu/drivers/base/power/opp/cpu.c
--- linux-libre-4.14.154-gnu/drivers/base/power/opp/cpu.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/base/power/opp/cpu.c	2019-11-20 12:00:54.000000000 -0500
@@ -222,8 +222,10 @@ int dev_pm_opp_get_sharing_cpus(struct d
 	cpumask_clear(cpumask);
 
 	if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) {
+		mutex_lock(&opp_table->lock);
 		list_for_each_entry(opp_dev, &opp_table->dev_list, node)
 			cpumask_set_cpu(opp_dev->dev->id, cpumask);
+		mutex_unlock(&opp_table->lock);
 	} else {
 		cpumask_set_cpu(cpu_dev->id, cpumask);
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/base/power/opp/opp.h linux-libre-4.14.155-gnu/drivers/base/power/opp/opp.h
--- linux-libre-4.14.154-gnu/drivers/base/power/opp/opp.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/base/power/opp/opp.h	2019-11-20 12:00:54.000000000 -0500
@@ -124,7 +124,7 @@ enum opp_table_access {
  * @dev_list:	list of devices that share these OPPs
  * @opp_list:	table of opps
  * @kref:	for reference count of the table.
- * @lock:	mutex protecting the opp_list.
+ * @lock:	mutex protecting the opp_list and dev_list.
  * @np:		struct device_node pointer for opp's DT node.
  * @clock_latency_ns_max: Max clock latency in nanoseconds.
  * @shared_opp: OPP is shared between multiple devices.
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/bluetooth/hci_serdev.c linux-libre-4.14.155-gnu/drivers/bluetooth/hci_serdev.c
--- linux-libre-4.14.154-gnu/drivers/bluetooth/hci_serdev.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/bluetooth/hci_serdev.c	2019-11-20 12:00:54.000000000 -0500
@@ -360,6 +360,7 @@ void hci_uart_unregister_device(struct h
 {
 	struct hci_dev *hdev = hu->hdev;
 
+	clear_bit(HCI_UART_PROTO_READY, &hu->flags);
 	hci_unregister_dev(hdev);
 	hci_free_dev(hdev);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/char/ipmi/ipmi_dmi.c linux-libre-4.14.155-gnu/drivers/char/ipmi/ipmi_dmi.c
--- linux-libre-4.14.154-gnu/drivers/char/ipmi/ipmi_dmi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/char/ipmi/ipmi_dmi.c	2019-11-20 12:00:54.000000000 -0500
@@ -197,6 +197,10 @@ static void __init dmi_decode_ipmi(const
 	slave_addr = data[DMI_IPMI_SLAVEADDR];
 
 	memcpy(&base_addr, data + DMI_IPMI_ADDR, sizeof(unsigned long));
+	if (!base_addr) {
+		pr_err("Base address is zero, assuming no IPMI interface\n");
+		return;
+	}
 	if (len >= DMI_IPMI_VER2_LENGTH) {
 		if (type == IPMI_DMI_TYPE_SSIF) {
 			offset = 0;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/crypto/s5p-sss.c linux-libre-4.14.155-gnu/drivers/crypto/s5p-sss.c
--- linux-libre-4.14.154-gnu/drivers/crypto/s5p-sss.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/crypto/s5p-sss.c	2019-11-20 12:00:54.000000000 -0500
@@ -323,7 +323,7 @@ static void s5p_unset_indata(struct s5p_
 }
 
 static int s5p_make_sg_cpy(struct s5p_aes_dev *dev, struct scatterlist *src,
-			    struct scatterlist **dst)
+			   struct scatterlist **dst)
 {
 	void *pages;
 	int len;
@@ -569,7 +569,7 @@ static int s5p_set_indata_start(struct s
 }
 
 static int s5p_set_outdata_start(struct s5p_aes_dev *dev,
-				struct ablkcipher_request *req)
+				 struct ablkcipher_request *req)
 {
 	struct scatterlist *sg;
 	int err;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/dma/dma-jz4780.c linux-libre-4.14.155-gnu/drivers/dma/dma-jz4780.c
--- linux-libre-4.14.154-gnu/drivers/dma/dma-jz4780.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/dma/dma-jz4780.c	2019-11-20 12:00:54.000000000 -0500
@@ -580,7 +580,7 @@ static enum dma_status jz4780_dma_tx_sta
 					to_jz4780_dma_desc(vdesc), 0);
 	} else if (cookie == jzchan->desc->vdesc.tx.cookie) {
 		txstate->residue = jz4780_dma_desc_residue(jzchan, jzchan->desc,
-			  (jzchan->curr_hwdesc + 1) % jzchan->desc->count);
+					jzchan->curr_hwdesc + 1);
 	} else
 		txstate->residue = 0;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/dma/Kconfig linux-libre-4.14.155-gnu/drivers/dma/Kconfig
--- linux-libre-4.14.154-gnu/drivers/dma/Kconfig	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/dma/Kconfig	2019-11-20 12:00:54.000000000 -0500
@@ -143,7 +143,7 @@ config DMA_JZ4740
 
 config DMA_JZ4780
 	tristate "JZ4780 DMA support"
-	depends on MACH_JZ4780 || COMPILE_TEST
+	depends on MIPS || COMPILE_TEST
 	select DMA_ENGINE
 	select DMA_VIRTUAL_CHANNELS
 	help
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/edac/sb_edac.c linux-libre-4.14.155-gnu/drivers/edac/sb_edac.c
--- linux-libre-4.14.154-gnu/drivers/edac/sb_edac.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/edac/sb_edac.c	2019-11-20 12:00:54.000000000 -0500
@@ -2915,35 +2915,27 @@ static void sbridge_mce_output_error(str
 	 *	cccc = channel
 	 * If the mask doesn't match, report an error to the parsing logic
 	 */
-	if (! ((errcode & 0xef80) == 0x80)) {
-		optype = "Can't parse: it is not a mem";
-	} else {
-		switch (optypenum) {
-		case 0:
-			optype = "generic undef request error";
-			break;
-		case 1:
-			optype = "memory read error";
-			break;
-		case 2:
-			optype = "memory write error";
-			break;
-		case 3:
-			optype = "addr/cmd error";
-			break;
-		case 4:
-			optype = "memory scrubbing error";
-			break;
-		default:
-			optype = "reserved";
-			break;
-		}
+	switch (optypenum) {
+	case 0:
+		optype = "generic undef request error";
+		break;
+	case 1:
+		optype = "memory read error";
+		break;
+	case 2:
+		optype = "memory write error";
+		break;
+	case 3:
+		optype = "addr/cmd error";
+		break;
+	case 4:
+		optype = "memory scrubbing error";
+		break;
+	default:
+		optype = "reserved";
+		break;
 	}
 
-	/* Only decode errors with an valid address (ADDRV) */
-	if (!GET_BITFIELD(m->status, 58, 58))
-		return;
-
 	if (pvt->info.type == KNIGHTS_LANDING) {
 		if (channel == 14) {
 			edac_dbg(0, "%s%s err_code:%04x:%04x EDRAM bank %d\n",
@@ -3049,17 +3041,11 @@ static int sbridge_mce_check_error(struc
 {
 	struct mce *mce = (struct mce *)data;
 	struct mem_ctl_info *mci;
-	struct sbridge_pvt *pvt;
 	char *type;
 
 	if (edac_get_report_status() == EDAC_REPORTING_DISABLED)
 		return NOTIFY_DONE;
 
-	mci = get_mci_for_node_id(mce->socketid, IMC0);
-	if (!mci)
-		return NOTIFY_DONE;
-	pvt = mci->pvt_info;
-
 	/*
 	 * Just let mcelog handle it if the error is
 	 * outside the memory controller. A memory error
@@ -3069,6 +3055,22 @@ static int sbridge_mce_check_error(struc
 	if ((mce->status & 0xefff) >> 7 != 1)
 		return NOTIFY_DONE;
 
+	/* Check ADDRV bit in STATUS */
+	if (!GET_BITFIELD(mce->status, 58, 58))
+		return NOTIFY_DONE;
+
+	/* Check MISCV bit in STATUS */
+	if (!GET_BITFIELD(mce->status, 59, 59))
+		return NOTIFY_DONE;
+
+	/* Check address type in MISC (physical address only) */
+	if (GET_BITFIELD(mce->misc, 6, 8) != 2)
+		return NOTIFY_DONE;
+
+	mci = get_mci_for_node_id(mce->socketid, IMC0);
+	if (!mci)
+		return NOTIFY_DONE;
+
 	if (mce->mcgstatus & MCG_STATUS_MCIP)
 		type = "Exception";
 	else
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/extcon/extcon-intel-cht-wc.c linux-libre-4.14.155-gnu/drivers/extcon/extcon-intel-cht-wc.c
--- linux-libre-4.14.154-gnu/drivers/extcon/extcon-intel-cht-wc.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/extcon/extcon-intel-cht-wc.c	2019-11-20 12:00:54.000000000 -0500
@@ -155,7 +155,7 @@ static int cht_wc_extcon_get_charger(str
 		dev_warn(ext->dev,
 			"Unhandled charger type %d, defaulting to SDP\n",
 			 ret);
-		/* Fall through, treat as SDP */
+		return EXTCON_CHG_USB_SDP;
 	case CHT_WC_USBSRC_TYPE_SDP:
 	case CHT_WC_USBSRC_TYPE_FLOAT_DP_DN:
 	case CHT_WC_USBSRC_TYPE_OTHER:
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/firmware/dell_rbu.c linux-libre-4.14.155-gnu/drivers/firmware/dell_rbu.c
--- linux-libre-4.14.154-gnu/drivers/firmware/dell_rbu.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/firmware/dell_rbu.c	2019-11-20 12:00:54.000000000 -0500
@@ -45,6 +45,7 @@
 #include <linux/moduleparam.h>
 #include <linux/firmware.h>
 #include <linux/dma-mapping.h>
+#include <asm/set_memory.h>
 
 MODULE_AUTHOR("Abhay Salunke <abhay_salunke@dell.com>");
 MODULE_DESCRIPTION("Driver for updating BIOS image on DELL systems");
@@ -181,6 +182,11 @@ static int create_packet(void *data, siz
 			packet_data_temp_buf = NULL;
 		}
 	}
+	/*
+	 * set to uncachable or it may never get written back before reboot
+	 */
+	set_memory_uc((unsigned long)packet_data_temp_buf, 1 << ordernum);
+
 	spin_lock(&rbu_data.lock);
 
 	newpacket->data = packet_data_temp_buf;
@@ -349,6 +355,8 @@ static void packet_empty_list(void)
 		 * to make sure there are no stale RBU packets left in memory
 		 */
 		memset(newpacket->data, 0, rbu_data.packetsize);
+		set_memory_wb((unsigned long)newpacket->data,
+			1 << newpacket->ordernum);
 		free_pages((unsigned long) newpacket->data,
 			newpacket->ordernum);
 		kfree(newpacket);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/hv/hv.c linux-libre-4.14.155-gnu/drivers/hv/hv.c
--- linux-libre-4.14.154-gnu/drivers/hv/hv.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/hv/hv.c	2019-11-20 12:00:54.000000000 -0500
@@ -148,6 +148,17 @@ static void hv_init_clockevent_device(st
 int hv_synic_alloc(void)
 {
 	int cpu;
+	struct hv_per_cpu_context *hv_cpu;
+
+	/*
+	 * First, zero all per-cpu memory areas so hv_synic_free() can
+	 * detect what memory has been allocated and cleanup properly
+	 * after any failures.
+	 */
+	for_each_present_cpu(cpu) {
+		hv_cpu = per_cpu_ptr(hv_context.cpu_context, cpu);
+		memset(hv_cpu, 0, sizeof(*hv_cpu));
+	}
 
 	hv_context.hv_numa_map = kzalloc(sizeof(struct cpumask) * nr_node_ids,
 					 GFP_ATOMIC);
@@ -157,10 +168,8 @@ int hv_synic_alloc(void)
 	}
 
 	for_each_present_cpu(cpu) {
-		struct hv_per_cpu_context *hv_cpu
-			= per_cpu_ptr(hv_context.cpu_context, cpu);
+		hv_cpu = per_cpu_ptr(hv_context.cpu_context, cpu);
 
-		memset(hv_cpu, 0, sizeof(*hv_cpu));
 		tasklet_init(&hv_cpu->msg_dpc,
 			     vmbus_on_msg_dpc, (unsigned long) hv_cpu);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight.c linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight.c
--- linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight.c	2019-11-20 12:00:54.000000000 -0500
@@ -140,12 +140,14 @@ static int coresight_enable_sink(struct
 {
 	int ret;
 
-	if (!csdev->enable) {
-		if (sink_ops(csdev)->enable) {
-			ret = sink_ops(csdev)->enable(csdev, mode);
-			if (ret)
-				return ret;
-		}
+	/*
+	 * We need to make sure the "new" session is compatible with the
+	 * existing "mode" of operation.
+	 */
+	if (sink_ops(csdev)->enable) {
+		ret = sink_ops(csdev)->enable(csdev, mode);
+		if (ret)
+			return ret;
 		csdev->enable = true;
 	}
 
@@ -347,8 +349,14 @@ int coresight_enable_path(struct list_he
 		switch (type) {
 		case CORESIGHT_DEV_TYPE_SINK:
 			ret = coresight_enable_sink(csdev, mode);
+			/*
+			 * Sink is the first component turned on. If we
+			 * failed to enable the sink, there are no components
+			 * that need disabling. Disabling the path here
+			 * would mean we could disrupt an existing session.
+			 */
 			if (ret)
-				goto err;
+				goto out;
 			break;
 		case CORESIGHT_DEV_TYPE_SOURCE:
 			/* sources are enabled from either sysFS or Perf */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight-etm4x.c linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight-etm4x.c
--- linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight-etm4x.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight-etm4x.c	2019-11-20 12:00:54.000000000 -0500
@@ -35,6 +35,7 @@
 #include <linux/pm_runtime.h>
 #include <asm/sections.h>
 #include <asm/local.h>
+#include <asm/virt.h>
 
 #include "coresight-etm4x.h"
 #include "coresight-etm-perf.h"
@@ -623,7 +624,7 @@ static void etm4_set_default_config(stru
 	config->vinst_ctrl |= BIT(0);
 }
 
-static u64 etm4_get_access_type(struct etmv4_config *config)
+static u64 etm4_get_ns_access_type(struct etmv4_config *config)
 {
 	u64 access_type = 0;
 
@@ -634,17 +635,26 @@ static u64 etm4_get_access_type(struct e
 	 *   Bit[13] Exception level 1 - OS
 	 *   Bit[14] Exception level 2 - Hypervisor
 	 *   Bit[15] Never implemented
-	 *
-	 * Always stay away from hypervisor mode.
 	 */
-	access_type = ETM_EXLEVEL_NS_HYP;
-
-	if (config->mode & ETM_MODE_EXCL_KERN)
-		access_type |= ETM_EXLEVEL_NS_OS;
+	if (!is_kernel_in_hyp_mode()) {
+		/* Stay away from hypervisor mode for non-VHE */
+		access_type =  ETM_EXLEVEL_NS_HYP;
+		if (config->mode & ETM_MODE_EXCL_KERN)
+			access_type |= ETM_EXLEVEL_NS_OS;
+	} else if (config->mode & ETM_MODE_EXCL_KERN) {
+		access_type = ETM_EXLEVEL_NS_HYP;
+	}
 
 	if (config->mode & ETM_MODE_EXCL_USER)
 		access_type |= ETM_EXLEVEL_NS_APP;
 
+	return access_type;
+}
+
+static u64 etm4_get_access_type(struct etmv4_config *config)
+{
+	u64 access_type = etm4_get_ns_access_type(config);
+
 	/*
 	 * EXLEVEL_S, bits[11:8], don't trace anything happening
 	 * in secure state.
@@ -898,20 +908,10 @@ void etm4_config_trace_mode(struct etmv4
 
 	addr_acc = config->addr_acc[ETM_DEFAULT_ADDR_COMP];
 	/* clear default config */
-	addr_acc &= ~(ETM_EXLEVEL_NS_APP | ETM_EXLEVEL_NS_OS);
+	addr_acc &= ~(ETM_EXLEVEL_NS_APP | ETM_EXLEVEL_NS_OS |
+		      ETM_EXLEVEL_NS_HYP);
 
-	/*
-	 * EXLEVEL_NS, bits[15:12]
-	 * The Exception levels are:
-	 *   Bit[12] Exception level 0 - Application
-	 *   Bit[13] Exception level 1 - OS
-	 *   Bit[14] Exception level 2 - Hypervisor
-	 *   Bit[15] Never implemented
-	 */
-	if (mode & ETM_MODE_EXCL_KERN)
-		addr_acc |= ETM_EXLEVEL_NS_OS;
-	else
-		addr_acc |= ETM_EXLEVEL_NS_APP;
+	addr_acc |= etm4_get_ns_access_type(config);
 
 	config->addr_acc[ETM_DEFAULT_ADDR_COMP] = addr_acc;
 	config->addr_acc[ETM_DEFAULT_ADDR_COMP + 1] = addr_acc;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight-etm-perf.c linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight-etm-perf.c
--- linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight-etm-perf.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight-etm-perf.c	2019-11-20 12:00:54.000000000 -0500
@@ -23,6 +23,7 @@
 #include <linux/mm.h>
 #include <linux/init.h>
 #include <linux/perf_event.h>
+#include <linux/percpu-defs.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/workqueue.h>
@@ -44,7 +45,7 @@ struct etm_event_data {
 	struct work_struct work;
 	cpumask_t mask;
 	void *snk_config;
-	struct list_head **path;
+	struct list_head * __percpu *path;
 };
 
 static DEFINE_PER_CPU(struct perf_output_handle, ctx_handle);
@@ -72,6 +73,18 @@ static const struct attribute_group *etm
 	NULL,
 };
 
+static inline struct list_head **
+etm_event_cpu_path_ptr(struct etm_event_data *data, int cpu)
+{
+	return per_cpu_ptr(data->path, cpu);
+}
+
+static inline struct list_head *
+etm_event_cpu_path(struct etm_event_data *data, int cpu)
+{
+	return *etm_event_cpu_path_ptr(data, cpu);
+}
+
 static void etm_event_read(struct perf_event *event) {}
 
 static int etm_addr_filters_alloc(struct perf_event *event)
@@ -131,23 +144,26 @@ static void free_event_data(struct work_
 	 */
 	if (event_data->snk_config) {
 		cpu = cpumask_first(mask);
-		sink = coresight_get_sink(event_data->path[cpu]);
+		sink = coresight_get_sink(etm_event_cpu_path(event_data, cpu));
 		if (sink_ops(sink)->free_buffer)
 			sink_ops(sink)->free_buffer(event_data->snk_config);
 	}
 
 	for_each_cpu(cpu, mask) {
-		if (!(IS_ERR_OR_NULL(event_data->path[cpu])))
-			coresight_release_path(event_data->path[cpu]);
+		struct list_head **ppath;
+
+		ppath = etm_event_cpu_path_ptr(event_data, cpu);
+		if (!(IS_ERR_OR_NULL(*ppath)))
+			coresight_release_path(*ppath);
+		*ppath = NULL;
 	}
 
-	kfree(event_data->path);
+	free_percpu(event_data->path);
 	kfree(event_data);
 }
 
 static void *alloc_event_data(int cpu)
 {
-	int size;
 	cpumask_t *mask;
 	struct etm_event_data *event_data;
 
@@ -158,7 +174,6 @@ static void *alloc_event_data(int cpu)
 
 	/* Make sure nothing disappears under us */
 	get_online_cpus();
-	size = num_online_cpus();
 
 	mask = &event_data->mask;
 	if (cpu != -1)
@@ -175,8 +190,8 @@ static void *alloc_event_data(int cpu)
 	 * unused memory when dealing with single CPU trace scenarios is small
 	 * compared to the cost of searching through an optimized array.
 	 */
-	event_data->path = kcalloc(size,
-				   sizeof(struct list_head *), GFP_KERNEL);
+	event_data->path = alloc_percpu(struct list_head *);
+
 	if (!event_data->path) {
 		kfree(event_data);
 		return NULL;
@@ -224,6 +239,7 @@ static void *etm_setup_aux(int event_cpu
 
 	/* Setup the path for each CPU in a trace session */
 	for_each_cpu(cpu, mask) {
+		struct list_head *path;
 		struct coresight_device *csdev;
 
 		csdev = per_cpu(csdev_src, cpu);
@@ -235,9 +251,11 @@ static void *etm_setup_aux(int event_cpu
 		 * list of devices from source to sink that can be
 		 * referenced later when the path is actually needed.
 		 */
-		event_data->path[cpu] = coresight_build_path(csdev, sink);
-		if (IS_ERR(event_data->path[cpu]))
+		path = coresight_build_path(csdev, sink);
+		if (IS_ERR(path))
 			goto err;
+
+		*etm_event_cpu_path_ptr(event_data, cpu) = path;
 	}
 
 	if (!sink_ops(sink)->alloc_buffer)
@@ -266,6 +284,7 @@ static void etm_event_start(struct perf_
 	struct etm_event_data *event_data;
 	struct perf_output_handle *handle = this_cpu_ptr(&ctx_handle);
 	struct coresight_device *sink, *csdev = per_cpu(csdev_src, cpu);
+	struct list_head *path;
 
 	if (!csdev)
 		goto fail;
@@ -278,8 +297,9 @@ static void etm_event_start(struct perf_
 	if (!event_data)
 		goto fail;
 
+	path = etm_event_cpu_path(event_data, cpu);
 	/* We need a sink, no need to continue without one */
-	sink = coresight_get_sink(event_data->path[cpu]);
+	sink = coresight_get_sink(path);
 	if (WARN_ON_ONCE(!sink || !sink_ops(sink)->set_buffer))
 		goto fail_end_stop;
 
@@ -289,7 +309,7 @@ static void etm_event_start(struct perf_
 		goto fail_end_stop;
 
 	/* Nothing will happen without a path */
-	if (coresight_enable_path(event_data->path[cpu], CS_MODE_PERF))
+	if (coresight_enable_path(path, CS_MODE_PERF))
 		goto fail_end_stop;
 
 	/* Tell the perf core the event is alive */
@@ -297,11 +317,13 @@ static void etm_event_start(struct perf_
 
 	/* Finally enable the tracer */
 	if (source_ops(csdev)->enable(csdev, event, CS_MODE_PERF))
-		goto fail_end_stop;
+		goto fail_disable_path;
 
 out:
 	return;
 
+fail_disable_path:
+	coresight_disable_path(path);
 fail_end_stop:
 	perf_aux_output_flag(handle, PERF_AUX_FLAG_TRUNCATED);
 	perf_aux_output_end(handle, 0);
@@ -317,6 +339,7 @@ static void etm_event_stop(struct perf_e
 	struct coresight_device *sink, *csdev = per_cpu(csdev_src, cpu);
 	struct perf_output_handle *handle = this_cpu_ptr(&ctx_handle);
 	struct etm_event_data *event_data = perf_get_aux(handle);
+	struct list_head *path;
 
 	if (event->hw.state == PERF_HES_STOPPED)
 		return;
@@ -324,7 +347,11 @@ static void etm_event_stop(struct perf_e
 	if (!csdev)
 		return;
 
-	sink = coresight_get_sink(event_data->path[cpu]);
+	path = etm_event_cpu_path(event_data, cpu);
+	if (!path)
+		return;
+
+	sink = coresight_get_sink(path);
 	if (!sink)
 		return;
 
@@ -355,7 +382,7 @@ static void etm_event_stop(struct perf_e
 	}
 
 	/* Disabling the path make its elements available to other sessions */
-	coresight_disable_path(event_data->path[cpu]);
+	coresight_disable_path(path);
 }
 
 static int etm_event_add(struct perf_event *event, int mode)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight-tmc-etf.c linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight-tmc-etf.c
--- linux-libre-4.14.154-gnu/drivers/hwtracing/coresight/coresight-tmc-etf.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/hwtracing/coresight/coresight-tmc-etf.c	2019-11-20 12:00:54.000000000 -0500
@@ -442,10 +442,10 @@ static void tmc_update_etf_buffer(struct
 		case TMC_MEM_INTF_WIDTH_32BITS:
 		case TMC_MEM_INTF_WIDTH_64BITS:
 		case TMC_MEM_INTF_WIDTH_128BITS:
-			mask = GENMASK(31, 5);
+			mask = GENMASK(31, 4);
 			break;
 		case TMC_MEM_INTF_WIDTH_256BITS:
-			mask = GENMASK(31, 6);
+			mask = GENMASK(31, 5);
 			break;
 		}
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/i2c/busses/i2c-aspeed.c linux-libre-4.14.155-gnu/drivers/i2c/busses/i2c-aspeed.c
--- linux-libre-4.14.154-gnu/drivers/i2c/busses/i2c-aspeed.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/i2c/busses/i2c-aspeed.c	2019-11-20 12:00:54.000000000 -0500
@@ -135,7 +135,8 @@ struct aspeed_i2c_bus {
 	/* Synchronizes I/O mem access to base. */
 	spinlock_t			lock;
 	struct completion		cmd_complete;
-	u32				(*get_clk_reg_val)(u32 divisor);
+	u32				(*get_clk_reg_val)(struct device *dev,
+							   u32 divisor);
 	unsigned long			parent_clk_frequency;
 	u32				bus_frequency;
 	/* Transaction state. */
@@ -679,16 +680,27 @@ static const struct i2c_algorithm aspeed
 #endif /* CONFIG_I2C_SLAVE */
 };
 
-static u32 aspeed_i2c_get_clk_reg_val(u32 clk_high_low_max, u32 divisor)
+static u32 aspeed_i2c_get_clk_reg_val(struct device *dev,
+				      u32 clk_high_low_mask,
+				      u32 divisor)
 {
-	u32 base_clk, clk_high, clk_low, tmp;
+	u32 base_clk_divisor, clk_high_low_max, clk_high, clk_low, tmp;
+
+	/*
+	 * SCL_high and SCL_low represent a value 1 greater than what is stored
+	 * since a zero divider is meaningless. Thus, the max value each can
+	 * store is every bit set + 1. Since SCL_high and SCL_low are added
+	 * together (see below), the max value of both is the max value of one
+	 * them times two.
+	 */
+	clk_high_low_max = (clk_high_low_mask + 1) * 2;
 
 	/*
 	 * The actual clock frequency of SCL is:
 	 *	SCL_freq = APB_freq / (base_freq * (SCL_high + SCL_low))
 	 *		 = APB_freq / divisor
 	 * where base_freq is a programmable clock divider; its value is
-	 *	base_freq = 1 << base_clk
+	 *	base_freq = 1 << base_clk_divisor
 	 * SCL_high is the number of base_freq clock cycles that SCL stays high
 	 * and SCL_low is the number of base_freq clock cycles that SCL stays
 	 * low for a period of SCL.
@@ -698,47 +710,59 @@ static u32 aspeed_i2c_get_clk_reg_val(u3
 	 *	SCL_low	 = clk_low + 1
 	 * Thus,
 	 *	SCL_freq = APB_freq /
-	 *		((1 << base_clk) * (clk_high + 1 + clk_low + 1))
+	 *		((1 << base_clk_divisor) * (clk_high + 1 + clk_low + 1))
 	 * The documentation recommends clk_high >= clk_high_max / 2 and
 	 * clk_low >= clk_low_max / 2 - 1 when possible; this last constraint
 	 * gives us the following solution:
 	 */
-	base_clk = divisor > clk_high_low_max ?
+	base_clk_divisor = divisor > clk_high_low_max ?
 			ilog2((divisor - 1) / clk_high_low_max) + 1 : 0;
-	tmp = (divisor + (1 << base_clk) - 1) >> base_clk;
-	clk_low = tmp / 2;
-	clk_high = tmp - clk_low;
 
-	if (clk_high)
-		clk_high--;
+	if (base_clk_divisor > ASPEED_I2CD_TIME_BASE_DIVISOR_MASK) {
+		base_clk_divisor = ASPEED_I2CD_TIME_BASE_DIVISOR_MASK;
+		clk_low = clk_high_low_mask;
+		clk_high = clk_high_low_mask;
+		dev_err(dev,
+			"clamping clock divider: divider requested, %u, is greater than largest possible divider, %u.\n",
+			divisor, (1 << base_clk_divisor) * clk_high_low_max);
+	} else {
+		tmp = (divisor + (1 << base_clk_divisor) - 1)
+				>> base_clk_divisor;
+		clk_low = tmp / 2;
+		clk_high = tmp - clk_low;
 
-	if (clk_low)
-		clk_low--;
+		if (clk_high)
+			clk_high--;
+
+		if (clk_low)
+			clk_low--;
+	}
 
 
 	return ((clk_high << ASPEED_I2CD_TIME_SCL_HIGH_SHIFT)
 		& ASPEED_I2CD_TIME_SCL_HIGH_MASK)
 			| ((clk_low << ASPEED_I2CD_TIME_SCL_LOW_SHIFT)
 			   & ASPEED_I2CD_TIME_SCL_LOW_MASK)
-			| (base_clk & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK);
+			| (base_clk_divisor
+			   & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK);
 }
 
-static u32 aspeed_i2c_24xx_get_clk_reg_val(u32 divisor)
+static u32 aspeed_i2c_24xx_get_clk_reg_val(struct device *dev, u32 divisor)
 {
 	/*
 	 * clk_high and clk_low are each 3 bits wide, so each can hold a max
 	 * value of 8 giving a clk_high_low_max of 16.
 	 */
-	return aspeed_i2c_get_clk_reg_val(16, divisor);
+	return aspeed_i2c_get_clk_reg_val(dev, GENMASK(2, 0), divisor);
 }
 
-static u32 aspeed_i2c_25xx_get_clk_reg_val(u32 divisor)
+static u32 aspeed_i2c_25xx_get_clk_reg_val(struct device *dev, u32 divisor)
 {
 	/*
 	 * clk_high and clk_low are each 4 bits wide, so each can hold a max
 	 * value of 16 giving a clk_high_low_max of 32.
 	 */
-	return aspeed_i2c_get_clk_reg_val(32, divisor);
+	return aspeed_i2c_get_clk_reg_val(dev, GENMASK(3, 0), divisor);
 }
 
 /* precondition: bus.lock has been acquired. */
@@ -751,7 +775,7 @@ static int aspeed_i2c_init_clk(struct as
 	clk_reg_val &= (ASPEED_I2CD_TIME_TBUF_MASK |
 			ASPEED_I2CD_TIME_THDSTA_MASK |
 			ASPEED_I2CD_TIME_TACST_MASK);
-	clk_reg_val |= bus->get_clk_reg_val(divisor);
+	clk_reg_val |= bus->get_clk_reg_val(bus->dev, divisor);
 	writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1);
 	writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2);
 
@@ -859,7 +883,8 @@ static int aspeed_i2c_probe_bus(struct p
 	if (!match)
 		bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val;
 	else
-		bus->get_clk_reg_val = (u32 (*)(u32))match->data;
+		bus->get_clk_reg_val = (u32 (*)(struct device *, u32))
+				match->data;
 
 	/* Initialize the I2C adapter */
 	spin_lock_init(&bus->lock);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/i2c/i2c-core-acpi.c linux-libre-4.14.155-gnu/drivers/i2c/i2c-core-acpi.c
--- linux-libre-4.14.154-gnu/drivers/i2c/i2c-core-acpi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/i2c/i2c-core-acpi.c	2019-11-20 12:00:54.000000000 -0500
@@ -43,6 +43,7 @@ struct i2c_acpi_lookup {
 	int index;
 	u32 speed;
 	u32 min_speed;
+	u32 force_speed;
 };
 
 static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data)
@@ -240,6 +241,19 @@ i2c_acpi_match_device(const struct acpi_
 	return acpi_match_device(matches, &client->dev);
 }
 
+static const struct acpi_device_id i2c_acpi_force_400khz_device_ids[] = {
+	/*
+	 * These Silead touchscreen controllers only work at 400KHz, for
+	 * some reason they do not work at 100KHz. On some devices the ACPI
+	 * tables list another device at their bus as only being capable
+	 * of 100KHz, testing has shown that these other devices work fine
+	 * at 400KHz (as can be expected of any recent i2c hw) so we force
+	 * the speed of the bus to 400 KHz if a Silead device is present.
+	 */
+	{ "MSSL1680", 0 },
+	{}
+};
+
 static acpi_status i2c_acpi_lookup_speed(acpi_handle handle, u32 level,
 					   void *data, void **return_value)
 {
@@ -258,6 +272,9 @@ static acpi_status i2c_acpi_lookup_speed
 	if (lookup->speed <= lookup->min_speed)
 		lookup->min_speed = lookup->speed;
 
+	if (acpi_match_device_ids(adev, i2c_acpi_force_400khz_device_ids) == 0)
+		lookup->force_speed = 400000;
+
 	return AE_OK;
 }
 
@@ -295,7 +312,16 @@ u32 i2c_acpi_find_bus_speed(struct devic
 		return 0;
 	}
 
-	return lookup.min_speed != UINT_MAX ? lookup.min_speed : 0;
+	if (lookup.force_speed) {
+		if (lookup.force_speed != lookup.min_speed)
+			dev_warn(dev, FW_BUG "DSDT uses known not-working I2C bus speed %d, forcing it to %d\n",
+				 lookup.min_speed, lookup.force_speed);
+		return lookup.force_speed;
+	} else if (lookup.min_speed != UINT_MAX) {
+		return lookup.min_speed;
+	} else {
+		return 0;
+	}
 }
 EXPORT_SYMBOL_GPL(i2c_acpi_find_bus_speed);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/iio/adc/max9611.c linux-libre-4.14.155-gnu/drivers/iio/adc/max9611.c
--- linux-libre-4.14.154-gnu/drivers/iio/adc/max9611.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/iio/adc/max9611.c	2019-11-20 12:00:54.000000000 -0500
@@ -289,7 +289,7 @@ static int max9611_read_csa_voltage(stru
 			return ret;
 
 		if (*adc_raw > 0) {
-			*csa_gain = gain_selectors[i];
+			*csa_gain = (enum max9611_csa_gain)gain_selectors[i];
 			return 0;
 		}
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/iio/dac/mcp4922.c linux-libre-4.14.155-gnu/drivers/iio/dac/mcp4922.c
--- linux-libre-4.14.154-gnu/drivers/iio/dac/mcp4922.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/iio/dac/mcp4922.c	2019-11-20 12:00:54.000000000 -0500
@@ -94,17 +94,22 @@ static int mcp4922_write_raw(struct iio_
 		long mask)
 {
 	struct mcp4922_state *state = iio_priv(indio_dev);
+	int ret;
 
 	if (val2 != 0)
 		return -EINVAL;
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
-		if (val > GENMASK(chan->scan_type.realbits-1, 0))
+		if (val < 0 || val > GENMASK(chan->scan_type.realbits - 1, 0))
 			return -EINVAL;
 		val <<= chan->scan_type.shift;
-		state->value[chan->channel] = val;
-		return mcp4922_spi_write(state, chan->channel, val);
+
+		ret = mcp4922_spi_write(state, chan->channel, val);
+		if (!ret)
+			state->value[chan->channel] = val;
+		return ret;
+
 	default:
 		return -EINVAL;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/core/device.c linux-libre-4.14.155-gnu/drivers/infiniband/core/device.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/core/device.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/core/device.c	2019-11-20 12:00:54.000000000 -0500
@@ -599,8 +599,8 @@ void ib_unregister_device(struct ib_devi
 	}
 	up_read(&lists_rwsem);
 
-	ib_device_unregister_rdmacg(device);
 	ib_device_unregister_sysfs(device);
+	ib_device_unregister_rdmacg(device);
 
 	mutex_unlock(&device_mutex);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/core/mad.c linux-libre-4.14.155-gnu/drivers/infiniband/core/mad.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/core/mad.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/core/mad.c	2019-11-20 12:00:54.000000000 -0500
@@ -217,30 +217,30 @@ struct ib_mad_agent *ib_register_mad_age
 	/* Validate parameters */
 	qpn = get_spl_qp_index(qp_type);
 	if (qpn == -1) {
-		dev_notice(&device->dev,
-			   "ib_register_mad_agent: invalid QP Type %d\n",
-			   qp_type);
+		dev_dbg_ratelimited(&device->dev, "%s: invalid QP Type %d\n",
+				    __func__, qp_type);
 		goto error1;
 	}
 
 	if (rmpp_version && rmpp_version != IB_MGMT_RMPP_VERSION) {
-		dev_notice(&device->dev,
-			   "ib_register_mad_agent: invalid RMPP Version %u\n",
-			   rmpp_version);
+		dev_dbg_ratelimited(&device->dev,
+				    "%s: invalid RMPP Version %u\n",
+				    __func__, rmpp_version);
 		goto error1;
 	}
 
 	/* Validate MAD registration request if supplied */
 	if (mad_reg_req) {
 		if (mad_reg_req->mgmt_class_version >= MAX_MGMT_VERSION) {
-			dev_notice(&device->dev,
-				   "ib_register_mad_agent: invalid Class Version %u\n",
-				   mad_reg_req->mgmt_class_version);
+			dev_dbg_ratelimited(&device->dev,
+					    "%s: invalid Class Version %u\n",
+					    __func__,
+					    mad_reg_req->mgmt_class_version);
 			goto error1;
 		}
 		if (!recv_handler) {
-			dev_notice(&device->dev,
-				   "ib_register_mad_agent: no recv_handler\n");
+			dev_dbg_ratelimited(&device->dev,
+					    "%s: no recv_handler\n", __func__);
 			goto error1;
 		}
 		if (mad_reg_req->mgmt_class >= MAX_MGMT_CLASS) {
@@ -250,9 +250,9 @@ struct ib_mad_agent *ib_register_mad_age
 			 */
 			if (mad_reg_req->mgmt_class !=
 			    IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE) {
-				dev_notice(&device->dev,
-					   "ib_register_mad_agent: Invalid Mgmt Class 0x%x\n",
-					   mad_reg_req->mgmt_class);
+				dev_dbg_ratelimited(&device->dev,
+					"%s: Invalid Mgmt Class 0x%x\n",
+					__func__, mad_reg_req->mgmt_class);
 				goto error1;
 			}
 		} else if (mad_reg_req->mgmt_class == 0) {
@@ -260,8 +260,9 @@ struct ib_mad_agent *ib_register_mad_age
 			 * Class 0 is reserved in IBA and is used for
 			 * aliasing of IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE
 			 */
-			dev_notice(&device->dev,
-				   "ib_register_mad_agent: Invalid Mgmt Class 0\n");
+			dev_dbg_ratelimited(&device->dev,
+					    "%s: Invalid Mgmt Class 0\n",
+					    __func__);
 			goto error1;
 		} else if (is_vendor_class(mad_reg_req->mgmt_class)) {
 			/*
@@ -269,18 +270,19 @@ struct ib_mad_agent *ib_register_mad_age
 			 * ensure supplied OUI is not zero
 			 */
 			if (!is_vendor_oui(mad_reg_req->oui)) {
-				dev_notice(&device->dev,
-					   "ib_register_mad_agent: No OUI specified for class 0x%x\n",
-					   mad_reg_req->mgmt_class);
+				dev_dbg_ratelimited(&device->dev,
+					"%s: No OUI specified for class 0x%x\n",
+					__func__,
+					mad_reg_req->mgmt_class);
 				goto error1;
 			}
 		}
 		/* Make sure class supplied is consistent with RMPP */
 		if (!ib_is_mad_class_rmpp(mad_reg_req->mgmt_class)) {
 			if (rmpp_version) {
-				dev_notice(&device->dev,
-					   "ib_register_mad_agent: RMPP version for non-RMPP class 0x%x\n",
-					   mad_reg_req->mgmt_class);
+				dev_dbg_ratelimited(&device->dev,
+					"%s: RMPP version for non-RMPP class 0x%x\n",
+					__func__, mad_reg_req->mgmt_class);
 				goto error1;
 			}
 		}
@@ -291,9 +293,9 @@ struct ib_mad_agent *ib_register_mad_age
 					IB_MGMT_CLASS_SUBN_LID_ROUTED) &&
 			    (mad_reg_req->mgmt_class !=
 					IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)) {
-				dev_notice(&device->dev,
-					   "ib_register_mad_agent: Invalid SM QP type: class 0x%x\n",
-					   mad_reg_req->mgmt_class);
+				dev_dbg_ratelimited(&device->dev,
+					"%s: Invalid SM QP type: class 0x%x\n",
+					__func__, mad_reg_req->mgmt_class);
 				goto error1;
 			}
 		} else {
@@ -301,9 +303,9 @@ struct ib_mad_agent *ib_register_mad_age
 					IB_MGMT_CLASS_SUBN_LID_ROUTED) ||
 			    (mad_reg_req->mgmt_class ==
 					IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE)) {
-				dev_notice(&device->dev,
-					   "ib_register_mad_agent: Invalid GS QP type: class 0x%x\n",
-					   mad_reg_req->mgmt_class);
+				dev_dbg_ratelimited(&device->dev,
+					"%s: Invalid GS QP type: class 0x%x\n",
+					__func__, mad_reg_req->mgmt_class);
 				goto error1;
 			}
 		}
@@ -318,18 +320,18 @@ struct ib_mad_agent *ib_register_mad_age
 	/* Validate device and port */
 	port_priv = ib_get_mad_port(device, port_num);
 	if (!port_priv) {
-		dev_notice(&device->dev,
-			   "ib_register_mad_agent: Invalid port %d\n",
-			   port_num);
+		dev_dbg_ratelimited(&device->dev, "%s: Invalid port %d\n",
+				    __func__, port_num);
 		ret = ERR_PTR(-ENODEV);
 		goto error1;
 	}
 
-	/* Verify the QP requested is supported.  For example, Ethernet devices
-	 * will not have QP0 */
+	/* Verify the QP requested is supported. For example, Ethernet devices
+	 * will not have QP0.
+	 */
 	if (!port_priv->qp_info[qpn].qp) {
-		dev_notice(&device->dev,
-			   "ib_register_mad_agent: QP %d not supported\n", qpn);
+		dev_dbg_ratelimited(&device->dev, "%s: QP %d not supported\n",
+				    __func__, qpn);
 		ret = ERR_PTR(-EPROTONOSUPPORT);
 		goto error1;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/hw/hfi1/pcie.c linux-libre-4.14.155-gnu/drivers/infiniband/hw/hfi1/pcie.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/hw/hfi1/pcie.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/hw/hfi1/pcie.c	2019-11-20 12:00:54.000000000 -0500
@@ -327,7 +327,9 @@ int pcie_speeds(struct hfi1_devdata *dd)
 	/*
 	 * bus->max_bus_speed is set from the bridge's linkcap Max Link Speed
 	 */
-	if (parent && dd->pcidev->bus->max_bus_speed != PCIE_SPEED_8_0GT) {
+	if (parent &&
+	    (dd->pcidev->bus->max_bus_speed == PCIE_SPEED_2_5GT ||
+	     dd->pcidev->bus->max_bus_speed == PCIE_SPEED_5_0GT)) {
 		dd_dev_info(dd, "Parent PCIe bridge does not support Gen3\n");
 		dd->link_gen3_capable = 0;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/hw/hfi1/user_sdma.c linux-libre-4.14.155-gnu/drivers/infiniband/hw/hfi1/user_sdma.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/hw/hfi1/user_sdma.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/hw/hfi1/user_sdma.c	2019-11-20 12:00:54.000000000 -0500
@@ -856,8 +856,10 @@ static int user_sdma_send_pkts(struct us
 
 				changes = set_txreq_header_ahg(req, tx,
 							       datalen);
-				if (changes < 0)
+				if (changes < 0) {
+					ret = changes;
 					goto free_tx;
+				}
 			}
 		} else {
 			ret = sdma_txinit(&tx->txreq, 0, sizeof(req->hdr) +
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/hw/i40iw/i40iw_cm.c linux-libre-4.14.155-gnu/drivers/infiniband/hw/i40iw/i40iw_cm.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/hw/i40iw/i40iw_cm.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/hw/i40iw/i40iw_cm.c	2019-11-20 12:00:54.000000000 -0500
@@ -1667,7 +1667,7 @@ static enum i40iw_status_code i40iw_add_
 	unsigned long flags;
 
 	rtnl_lock();
-	for_each_netdev_rcu(&init_net, ip_dev) {
+	for_each_netdev(&init_net, ip_dev) {
 		if ((((rdma_vlan_dev_vlan_id(ip_dev) < I40IW_NO_VLAN) &&
 		      (rdma_vlan_dev_real_dev(ip_dev) == iwdev->netdev)) ||
 		     (ip_dev == iwdev->netdev)) && (ip_dev->flags & IFF_UP)) {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/sw/rxe/rxe_comp.c linux-libre-4.14.155-gnu/drivers/infiniband/sw/rxe/rxe_comp.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/sw/rxe/rxe_comp.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/sw/rxe/rxe_comp.c	2019-11-20 12:00:54.000000000 -0500
@@ -253,6 +253,17 @@ static inline enum comp_state check_ack(
 	case IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE:
 		if (pkt->opcode != IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE &&
 		    pkt->opcode != IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST) {
+			/* read retries of partial data may restart from
+			 * read response first or response only.
+			 */
+			if ((pkt->psn == wqe->first_psn &&
+			     pkt->opcode ==
+			     IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST) ||
+			    (wqe->first_psn == wqe->last_psn &&
+			     pkt->opcode ==
+			     IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY))
+				break;
+
 			return COMPST_ERROR;
 		}
 		break;
@@ -501,11 +512,11 @@ static inline enum comp_state complete_w
 					   struct rxe_pkt_info *pkt,
 					   struct rxe_send_wqe *wqe)
 {
-	qp->comp.opcode = -1;
-
-	if (pkt) {
-		if (psn_compare(pkt->psn, qp->comp.psn) >= 0)
-			qp->comp.psn = (pkt->psn + 1) & BTH_PSN_MASK;
+	if (pkt && wqe->state == wqe_state_pending) {
+		if (psn_compare(wqe->last_psn, qp->comp.psn) >= 0) {
+			qp->comp.psn = (wqe->last_psn + 1) & BTH_PSN_MASK;
+			qp->comp.opcode = -1;
+		}
 
 		if (qp->req.wait_psn) {
 			qp->req.wait_psn = 0;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/sw/rxe/rxe_req.c linux-libre-4.14.155-gnu/drivers/infiniband/sw/rxe/rxe_req.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/sw/rxe/rxe_req.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/sw/rxe/rxe_req.c	2019-11-20 12:00:54.000000000 -0500
@@ -73,9 +73,6 @@ static void req_retry(struct rxe_qp *qp)
 	int npsn;
 	int first = 1;
 
-	wqe = queue_head(qp->sq.queue);
-	npsn = (qp->comp.psn - wqe->first_psn) & BTH_PSN_MASK;
-
 	qp->req.wqe_index	= consumer_index(qp->sq.queue);
 	qp->req.psn		= qp->comp.psn;
 	qp->req.opcode		= -1;
@@ -107,11 +104,17 @@ static void req_retry(struct rxe_qp *qp)
 		if (first) {
 			first = 0;
 
-			if (mask & WR_WRITE_OR_SEND_MASK)
+			if (mask & WR_WRITE_OR_SEND_MASK) {
+				npsn = (qp->comp.psn - wqe->first_psn) &
+					BTH_PSN_MASK;
 				retry_first_write_send(qp, wqe, mask, npsn);
+			}
 
-			if (mask & WR_READ_MASK)
+			if (mask & WR_READ_MASK) {
+				npsn = (wqe->dma.length - wqe->dma.resid) /
+					qp->mtu;
 				wqe->iova += npsn * qp->mtu;
+			}
 		}
 
 		wqe->state = wqe_state_posted;
@@ -435,7 +438,7 @@ static struct sk_buff *init_req_packet(s
 	if (pkt->mask & RXE_RETH_MASK) {
 		reth_set_rkey(pkt, ibwr->wr.rdma.rkey);
 		reth_set_va(pkt, wqe->iova);
-		reth_set_len(pkt, wqe->dma.length);
+		reth_set_len(pkt, wqe->dma.resid);
 	}
 
 	if (pkt->mask & RXE_IMMDT_MASK)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/ulp/ipoib/ipoib_main.c linux-libre-4.14.155-gnu/drivers/infiniband/ulp/ipoib/ipoib_main.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/ulp/ipoib/ipoib_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/ulp/ipoib/ipoib_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -249,7 +249,8 @@ static int ipoib_change_mtu(struct net_d
 		return 0;
 	}
 
-	if (new_mtu > IPOIB_UD_MTU(priv->max_ib_mtu))
+	if (new_mtu < (ETH_MIN_MTU + IPOIB_ENCAP_LEN) ||
+	    new_mtu > IPOIB_UD_MTU(priv->max_ib_mtu))
 		return -EINVAL;
 
 	priv->admin_mtu = new_mtu;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/infiniband/ulp/iser/iser_initiator.c linux-libre-4.14.155-gnu/drivers/infiniband/ulp/iser/iser_initiator.c
--- linux-libre-4.14.154-gnu/drivers/infiniband/ulp/iser/iser_initiator.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/infiniband/ulp/iser/iser_initiator.c	2019-11-20 12:00:54.000000000 -0500
@@ -592,13 +592,19 @@ void iser_login_rsp(struct ib_cq *cq, st
 	ib_conn->post_recv_buf_count--;
 }
 
-static inline void
+static inline int
 iser_inv_desc(struct iser_fr_desc *desc, u32 rkey)
 {
-	if (likely(rkey == desc->rsc.mr->rkey))
+	if (likely(rkey == desc->rsc.mr->rkey)) {
 		desc->rsc.mr_valid = 0;
-	else if (likely(rkey == desc->pi_ctx->sig_mr->rkey))
+	} else if (likely(desc->pi_ctx && rkey == desc->pi_ctx->sig_mr->rkey)) {
 		desc->pi_ctx->sig_mr_valid = 0;
+	} else {
+		iser_err("Bogus remote invalidation for rkey %#x\n", rkey);
+		return -EINVAL;
+	}
+
+	return 0;
 }
 
 static int
@@ -626,12 +632,14 @@ iser_check_remote_inv(struct iser_conn *
 
 			if (iser_task->dir[ISER_DIR_IN]) {
 				desc = iser_task->rdma_reg[ISER_DIR_IN].mem_h;
-				iser_inv_desc(desc, rkey);
+				if (unlikely(iser_inv_desc(desc, rkey)))
+					return -EINVAL;
 			}
 
 			if (iser_task->dir[ISER_DIR_OUT]) {
 				desc = iser_task->rdma_reg[ISER_DIR_OUT].mem_h;
-				iser_inv_desc(desc, rkey);
+				if (unlikely(iser_inv_desc(desc, rkey)))
+					return -EINVAL;
 			}
 		} else {
 			iser_err("failed to get task for itt=%d\n", hdr->itt);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/input/ff-memless.c linux-libre-4.14.155-gnu/drivers/input/ff-memless.c
--- linux-libre-4.14.154-gnu/drivers/input/ff-memless.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/input/ff-memless.c	2019-11-20 12:00:54.000000000 -0500
@@ -501,6 +501,15 @@ static void ml_ff_destroy(struct ff_devi
 {
 	struct ml_device *ml = ff->private;
 
+	/*
+	 * Even though we stop all playing effects when tearing down
+	 * an input device (via input_device_flush() that calls into
+	 * input_ff_flush() that stops and erases all effects), we
+	 * do not actually stop the timer, and therefore we should
+	 * do it here.
+	 */
+	del_timer_sync(&ml->timer);
+
 	kfree(ml->private);
 }
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_driver.c linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_driver.c
--- linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_driver.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_driver.c	2019-11-20 12:00:54.000000000 -0500
@@ -165,7 +165,7 @@ static int rmi_process_interrupt_request
 	}
 
 	mutex_lock(&data->irq_mutex);
-	bitmap_and(data->irq_status, data->irq_status, data->fn_irq_bits,
+	bitmap_and(data->irq_status, data->irq_status, data->current_irq_mask,
 	       data->irq_count);
 	/*
 	 * At this point, irq_status has all bits that are set in the
@@ -412,8 +412,6 @@ static int rmi_driver_set_irq_bits(struc
 	bitmap_copy(data->current_irq_mask, data->new_irq_mask,
 		    data->num_of_irq_regs);
 
-	bitmap_or(data->fn_irq_bits, data->fn_irq_bits, mask, data->irq_count);
-
 error_unlock:
 	mutex_unlock(&data->irq_mutex);
 	return error;
@@ -427,8 +425,6 @@ static int rmi_driver_clear_irq_bits(str
 	struct device *dev = &rmi_dev->dev;
 
 	mutex_lock(&data->irq_mutex);
-	bitmap_andnot(data->fn_irq_bits,
-		      data->fn_irq_bits, mask, data->irq_count);
 	bitmap_andnot(data->new_irq_mask,
 		  data->current_irq_mask, mask, data->irq_count);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_f11.c linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_f11.c
--- linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_f11.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_f11.c	2019-11-20 12:00:54.000000000 -0500
@@ -1295,8 +1295,8 @@ static int rmi_f11_attention(struct rmi_
 			valid_bytes = f11->sensor.attn_size;
 		memcpy(f11->sensor.data_pkt, drvdata->attn_data.data,
 			valid_bytes);
-		drvdata->attn_data.data += f11->sensor.attn_size;
-		drvdata->attn_data.size -= f11->sensor.attn_size;
+		drvdata->attn_data.data += valid_bytes;
+		drvdata->attn_data.size -= valid_bytes;
 	} else {
 		error = rmi_read_block(rmi_dev,
 				data_base_addr, f11->sensor.data_pkt,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_f12.c linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_f12.c
--- linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_f12.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_f12.c	2019-11-20 12:00:54.000000000 -0500
@@ -58,6 +58,9 @@ struct f12_data {
 
 	const struct rmi_register_desc_item *data15;
 	u16 data15_offset;
+
+	unsigned long *abs_mask;
+	unsigned long *rel_mask;
 };
 
 static int rmi_f12_read_sensor_tuning(struct f12_data *f12)
@@ -214,8 +217,8 @@ static int rmi_f12_attention(struct rmi_
 			valid_bytes = sensor->attn_size;
 		memcpy(sensor->data_pkt, drvdata->attn_data.data,
 			valid_bytes);
-		drvdata->attn_data.data += sensor->attn_size;
-		drvdata->attn_data.size -= sensor->attn_size;
+		drvdata->attn_data.data += valid_bytes;
+		drvdata->attn_data.size -= valid_bytes;
 	} else {
 		retval = rmi_read_block(rmi_dev, f12->data_addr,
 					sensor->data_pkt, sensor->pkt_size);
@@ -296,9 +299,18 @@ static int rmi_f12_write_control_regs(st
 static int rmi_f12_config(struct rmi_function *fn)
 {
 	struct rmi_driver *drv = fn->rmi_dev->driver;
+	struct f12_data *f12 = dev_get_drvdata(&fn->dev);
+	struct rmi_2d_sensor *sensor;
 	int ret;
 
-	drv->set_irq_bits(fn->rmi_dev, fn->irq_mask);
+	sensor = &f12->sensor;
+
+	if (!sensor->report_abs)
+		drv->clear_irq_bits(fn->rmi_dev, f12->abs_mask);
+	else
+		drv->set_irq_bits(fn->rmi_dev, f12->abs_mask);
+
+	drv->clear_irq_bits(fn->rmi_dev, f12->rel_mask);
 
 	ret = rmi_f12_write_control_regs(fn);
 	if (ret)
@@ -320,9 +332,12 @@ static int rmi_f12_probe(struct rmi_func
 	struct rmi_device_platform_data *pdata = rmi_get_platform_data(rmi_dev);
 	struct rmi_driver_data *drvdata = dev_get_drvdata(&rmi_dev->dev);
 	u16 data_offset = 0;
+	int mask_size;
 
 	rmi_dbg(RMI_DEBUG_FN, &fn->dev, "%s\n", __func__);
 
+	mask_size = BITS_TO_LONGS(drvdata->irq_count) * sizeof(unsigned long);
+
 	ret = rmi_read(fn->rmi_dev, query_addr, &buf);
 	if (ret < 0) {
 		dev_err(&fn->dev, "Failed to read general info register: %d\n",
@@ -337,10 +352,19 @@ static int rmi_f12_probe(struct rmi_func
 		return -ENODEV;
 	}
 
-	f12 = devm_kzalloc(&fn->dev, sizeof(struct f12_data), GFP_KERNEL);
+	f12 = devm_kzalloc(&fn->dev, sizeof(struct f12_data) + mask_size * 2,
+			GFP_KERNEL);
 	if (!f12)
 		return -ENOMEM;
 
+	f12->abs_mask = (unsigned long *)((char *)f12
+			+ sizeof(struct f12_data));
+	f12->rel_mask = (unsigned long *)((char *)f12
+			+ sizeof(struct f12_data) + mask_size);
+
+	set_bit(fn->irq_pos, f12->abs_mask);
+	set_bit(fn->irq_pos + 1, f12->rel_mask);
+
 	f12->has_dribble = !!(buf & BIT(3));
 
 	if (fn->dev.of_node) {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_f54.c linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_f54.c
--- linux-libre-4.14.154-gnu/drivers/input/rmi4/rmi_f54.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/input/rmi4/rmi_f54.c	2019-11-20 12:00:54.000000000 -0500
@@ -362,7 +362,7 @@ static const struct vb2_ops rmi_f54_queu
 static const struct vb2_queue rmi_f54_queue = {
 	.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
 	.io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ,
-	.buf_struct_size = sizeof(struct vb2_buffer),
+	.buf_struct_size = sizeof(struct vb2_v4l2_buffer),
 	.ops = &rmi_f54_queue_ops,
 	.mem_ops = &vb2_vmalloc_memops,
 	.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC,
@@ -619,7 +619,7 @@ static int rmi_f54_config(struct rmi_fun
 {
 	struct rmi_driver *drv = fn->rmi_dev->driver;
 
-	drv->set_irq_bits(fn->rmi_dev, fn->irq_mask);
+	drv->clear_irq_bits(fn->rmi_dev, fn->irq_mask);
 
 	return 0;
 }
@@ -747,6 +747,7 @@ static void rmi_f54_remove(struct rmi_fu
 
 	video_unregister_device(&f54->vdev);
 	v4l2_device_unregister(&f54->v4l2);
+	destroy_workqueue(f54->workqueue);
 }
 
 struct rmi_function_handler rmi_f54_handler = {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/media/pci/ivtv/ivtv-yuv.c linux-libre-4.14.155-gnu/drivers/media/pci/ivtv/ivtv-yuv.c
--- linux-libre-4.14.154-gnu/drivers/media/pci/ivtv/ivtv-yuv.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/media/pci/ivtv/ivtv-yuv.c	2019-11-20 12:00:54.000000000 -0500
@@ -935,7 +935,7 @@ static void ivtv_yuv_init(struct ivtv *i
 	}
 
 	/* We need a buffer for blanking when Y plane is offset - non-fatal if we can't get one */
-	yi->blanking_ptr = kzalloc(720 * 16, GFP_KERNEL|__GFP_NOWARN);
+	yi->blanking_ptr = kzalloc(720 * 16, GFP_ATOMIC|__GFP_NOWARN);
 	if (yi->blanking_ptr) {
 		yi->blanking_dmaptr = pci_map_single(itv->pdev, yi->blanking_ptr, 720*16, PCI_DMA_TODEVICE);
 	} else {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/media/pci/meye/meye.c linux-libre-4.14.155-gnu/drivers/media/pci/meye/meye.c
--- linux-libre-4.14.154-gnu/drivers/media/pci/meye/meye.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/media/pci/meye/meye.c	2019-11-20 12:00:54.000000000 -0500
@@ -1460,7 +1460,7 @@ static int meye_mmap(struct file *file,
 	unsigned long page, pos;
 
 	mutex_lock(&meye.lock);
-	if (size > gbuffers * gbufsize) {
+	if (size > gbuffers * gbufsize || offset > gbuffers * gbufsize - size) {
 		mutex_unlock(&meye.lock);
 		return -EINVAL;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/media/platform/davinci/vpbe_display.c linux-libre-4.14.155-gnu/drivers/media/platform/davinci/vpbe_display.c
--- linux-libre-4.14.154-gnu/drivers/media/platform/davinci/vpbe_display.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/media/platform/davinci/vpbe_display.c	2019-11-20 12:00:54.000000000 -0500
@@ -518,7 +518,7 @@ vpbe_disp_calculate_scale_factor(struct
 		else if (v_scale == 4)
 			layer_info->v_zoom = ZOOM_X4;
 		if (v_exp)
-			layer_info->h_exp = V_EXP_6_OVER_5;
+			layer_info->v_exp = V_EXP_6_OVER_5;
 	} else {
 		/* no scaling, only cropping. Set display area to crop area */
 		cfg->ysize = expected_ysize;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/media/usb/au0828/au0828-core.c linux-libre-4.14.155-gnu/drivers/media/usb/au0828/au0828-core.c
--- linux-libre-4.14.154-gnu/drivers/media/usb/au0828/au0828-core.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/media/usb/au0828/au0828-core.c	2019-11-20 12:00:54.000000000 -0500
@@ -632,7 +632,7 @@ static int au0828_usb_probe(struct usb_i
 	/* Analog TV */
 	retval = au0828_analog_register(dev, interface);
 	if (retval) {
-		pr_err("%s() au0282_dev_register failed to register on V4L2\n",
+		pr_err("%s() au0828_analog_register failed to register on V4L2\n",
 			__func__);
 		mutex_unlock(&dev->lock);
 		goto done;
@@ -641,7 +641,7 @@ static int au0828_usb_probe(struct usb_i
 	/* Digital TV */
 	retval = au0828_dvb_register(dev);
 	if (retval)
-		pr_err("%s() au0282_dev_register failed\n",
+		pr_err("%s() au0828_dvb_register failed\n",
 		       __func__);
 
 	/* Remote controller */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/misc/genwqe/card_utils.c linux-libre-4.14.155-gnu/drivers/misc/genwqe/card_utils.c
--- linux-libre-4.14.154-gnu/drivers/misc/genwqe/card_utils.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/misc/genwqe/card_utils.c	2019-11-20 12:00:54.000000000 -0500
@@ -298,7 +298,7 @@ static int genwqe_sgl_size(int num_pages
 int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
 			  void __user *user_addr, size_t user_size)
 {
-	int rc;
+	int ret = -ENOMEM;
 	struct pci_dev *pci_dev = cd->pci_dev;
 
 	sgl->fpage_offs = offset_in_page((unsigned long)user_addr);
@@ -317,7 +317,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_
 	if (get_order(sgl->sgl_size) > MAX_ORDER) {
 		dev_err(&pci_dev->dev,
 			"[%s] err: too much memory requested!\n", __func__);
-		return -ENOMEM;
+		return ret;
 	}
 
 	sgl->sgl = __genwqe_alloc_consistent(cd, sgl->sgl_size,
@@ -325,7 +325,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_
 	if (sgl->sgl == NULL) {
 		dev_err(&pci_dev->dev,
 			"[%s] err: no memory available!\n", __func__);
-		return -ENOMEM;
+		return ret;
 	}
 
 	/* Only use buffering on incomplete pages */
@@ -338,7 +338,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_
 		/* Sync with user memory */
 		if (copy_from_user(sgl->fpage + sgl->fpage_offs,
 				   user_addr, sgl->fpage_size)) {
-			rc = -EFAULT;
+			ret = -EFAULT;
 			goto err_out;
 		}
 	}
@@ -351,7 +351,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_
 		/* Sync with user memory */
 		if (copy_from_user(sgl->lpage, user_addr + user_size -
 				   sgl->lpage_size, sgl->lpage_size)) {
-			rc = -EFAULT;
+			ret = -EFAULT;
 			goto err_out2;
 		}
 	}
@@ -373,7 +373,8 @@ int genwqe_alloc_sync_sgl(struct genwqe_
 	sgl->sgl = NULL;
 	sgl->sgl_dma_addr = 0;
 	sgl->sgl_size = 0;
-	return -ENOMEM;
+
+	return ret;
 }
 
 int genwqe_setup_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/misc/kgdbts.c linux-libre-4.14.155-gnu/drivers/misc/kgdbts.c
--- linux-libre-4.14.154-gnu/drivers/misc/kgdbts.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/misc/kgdbts.c	2019-11-20 12:00:54.000000000 -0500
@@ -981,6 +981,12 @@ static void kgdbts_run_tests(void)
 	int nmi_sleep = 0;
 	int i;
 
+	verbose = 0;
+	if (strstr(config, "V1"))
+		verbose = 1;
+	if (strstr(config, "V2"))
+		verbose = 2;
+
 	ptr = strchr(config, 'F');
 	if (ptr)
 		fork_test = simple_strtol(ptr + 1, NULL, 10);
@@ -1064,13 +1070,6 @@ static int kgdbts_option_setup(char *opt
 		return -ENOSPC;
 	}
 	strcpy(config, opt);
-
-	verbose = 0;
-	if (strstr(config, "V1"))
-		verbose = 1;
-	if (strstr(config, "V2"))
-		verbose = 2;
-
 	return 0;
 }
 
@@ -1082,9 +1081,6 @@ static int configure_kgdbts(void)
 
 	if (!strlen(config) || isspace(config[0]))
 		goto noconfig;
-	err = kgdbts_option_setup(config);
-	if (err)
-		goto noconfig;
 
 	final_ack = 0;
 	run_plant_and_detach_test(1);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/mmc/host/sdhci-of-at91.c linux-libre-4.14.155-gnu/drivers/mmc/host/sdhci-of-at91.c
--- linux-libre-4.14.154-gnu/drivers/mmc/host/sdhci-of-at91.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/mmc/host/sdhci-of-at91.c	2019-11-20 12:00:54.000000000 -0500
@@ -365,7 +365,7 @@ static int sdhci_at91_probe(struct platf
 	pm_runtime_use_autosuspend(&pdev->dev);
 
 	/* HS200 is broken at this moment */
-	host->quirks2 = SDHCI_QUIRK2_BROKEN_HS200;
+	host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
 
 	ret = sdhci_add_host(host);
 	if (ret)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/can/slcan.c linux-libre-4.14.155-gnu/drivers/net/can/slcan.c
--- linux-libre-4.14.154-gnu/drivers/net/can/slcan.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/can/slcan.c	2019-11-20 12:00:54.000000000 -0500
@@ -613,6 +613,7 @@ err_free_chan:
 	sl->tty = NULL;
 	tty->disc_data = NULL;
 	clear_bit(SLF_INUSE, &sl->flags);
+	free_netdev(sl->dev);
 
 err_exit:
 	rtnl_unlock();
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/am79c961a.c linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/am79c961a.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/am79c961a.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/am79c961a.c	2019-11-20 12:00:54.000000000 -0500
@@ -440,7 +440,7 @@ static void am79c961_timeout(struct net_
 /*
  * Transmit a packet
  */
-static int
+static netdev_tx_t
 am79c961_sendpacket(struct sk_buff *skb, struct net_device *dev)
 {
 	struct dev_priv *priv = netdev_priv(dev);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/atarilance.c linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/atarilance.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/atarilance.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/atarilance.c	2019-11-20 12:00:54.000000000 -0500
@@ -339,7 +339,8 @@ static unsigned long lance_probe1( struc
                                    *init_rec );
 static int lance_open( struct net_device *dev );
 static void lance_init_ring( struct net_device *dev );
-static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev );
+static netdev_tx_t lance_start_xmit(struct sk_buff *skb,
+				    struct net_device *dev);
 static irqreturn_t lance_interrupt( int irq, void *dev_id );
 static int lance_rx( struct net_device *dev );
 static int lance_close( struct net_device *dev );
@@ -769,7 +770,8 @@ static void lance_tx_timeout (struct net
 
 /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
 
-static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev )
+static netdev_tx_t
+lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct lance_private *lp = netdev_priv(dev);
 	struct lance_ioreg	 *IO = lp->iobase;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/declance.c linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/declance.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/declance.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/declance.c	2019-11-20 12:00:54.000000000 -0500
@@ -893,7 +893,7 @@ static void lance_tx_timeout(struct net_
 	netif_wake_queue(dev);
 }
 
-static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct lance_private *lp = netdev_priv(dev);
 	volatile struct lance_regs *ll = lp->ll;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/sun3lance.c linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/sun3lance.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/sun3lance.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/sun3lance.c	2019-11-20 12:00:54.000000000 -0500
@@ -236,7 +236,8 @@ struct lance_private {
 static int lance_probe( struct net_device *dev);
 static int lance_open( struct net_device *dev );
 static void lance_init_ring( struct net_device *dev );
-static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev );
+static netdev_tx_t lance_start_xmit(struct sk_buff *skb,
+				    struct net_device *dev);
 static irqreturn_t lance_interrupt( int irq, void *dev_id);
 static int lance_rx( struct net_device *dev );
 static int lance_close( struct net_device *dev );
@@ -511,7 +512,8 @@ static void lance_init_ring( struct net_
 }
 
 
-static int lance_start_xmit( struct sk_buff *skb, struct net_device *dev )
+static netdev_tx_t
+lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct lance_private *lp = netdev_priv(dev);
 	int entry, len;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/sunlance.c linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/sunlance.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/sunlance.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/sunlance.c	2019-11-20 12:00:54.000000000 -0500
@@ -1106,7 +1106,7 @@ static void lance_tx_timeout(struct net_
 	netif_wake_queue(dev);
 }
 
-static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct lance_private *lp = netdev_priv(dev);
 	int entry, skblen, len;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/xgbe/xgbe-drv.c linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/amd/xgbe/xgbe-drv.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/amd/xgbe/xgbe-drv.c	2019-11-20 12:00:54.000000000 -0500
@@ -1964,7 +1964,7 @@ static int xgbe_close(struct net_device
 	return 0;
 }
 
-static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
+static netdev_tx_t xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
 {
 	struct xgbe_prv_data *pdata = netdev_priv(netdev);
 	struct xgbe_hw_if *hw_if = &pdata->hw_if;
@@ -1973,7 +1973,7 @@ static int xgbe_xmit(struct sk_buff *skb
 	struct xgbe_ring *ring;
 	struct xgbe_packet_data *packet;
 	struct netdev_queue *txq;
-	int ret;
+	netdev_tx_t ret;
 
 	DBGPR("-->xgbe_xmit: skb->len = %d\n", skb->len);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/broadcom/bcm63xx_enet.c linux-libre-4.14.155-gnu/drivers/net/ethernet/broadcom/bcm63xx_enet.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/broadcom/bcm63xx_enet.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/broadcom/bcm63xx_enet.c	2019-11-20 12:00:54.000000000 -0500
@@ -571,12 +571,13 @@ static irqreturn_t bcm_enet_isr_dma(int
 /*
  * tx request callback
  */
-static int bcm_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+bcm_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct bcm_enet_priv *priv;
 	struct bcm_enet_desc *desc;
 	u32 len_stat;
-	int ret;
+	netdev_tx_t ret;
 
 	priv = netdev_priv(dev);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c linux-libre-4.14.155-gnu/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c	2019-11-13 02:05:19.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c	2019-11-20 13:55:31.000000000 -0500
@@ -3534,6 +3534,16 @@ static void bnx2x_drv_info_iscsi_stat(st
  */
 static void bnx2x_config_mf_bw(struct bnx2x *bp)
 {
+	/* Workaround for MFW bug.
+	 * MFW is not supposed to generate BW attention in
+	 * single function mode.
+	 */
+	if (!IS_MF(bp)) {
+		DP(BNX2X_MSG_MCP,
+		   "Ignoring MF BW config in single function mode\n");
+		return;
+	}
+
 	if (bp->link_vars.link_up) {
 		bnx2x_cmng_fns_init(bp, true, CMNG_FNS_MINMAX);
 		bnx2x_link_sync_notify(bp);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/broadcom/sb1250-mac.c linux-libre-4.14.155-gnu/drivers/net/ethernet/broadcom/sb1250-mac.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/broadcom/sb1250-mac.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/broadcom/sb1250-mac.c	2019-11-20 12:00:54.000000000 -0500
@@ -299,7 +299,7 @@ static enum sbmac_state sbmac_set_channe
 static void sbmac_promiscuous_mode(struct sbmac_softc *sc, int onoff);
 static uint64_t sbmac_addr2reg(unsigned char *ptr);
 static irqreturn_t sbmac_intr(int irq, void *dev_instance);
-static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t sbmac_start_tx(struct sk_buff *skb, struct net_device *dev);
 static void sbmac_setmulti(struct sbmac_softc *sc);
 static int sbmac_init(struct platform_device *pldev, long long base);
 static int sbmac_set_speed(struct sbmac_softc *s, enum sbmac_speed speed);
@@ -2028,7 +2028,7 @@ static irqreturn_t sbmac_intr(int irq,vo
  *  Return value:
  *  	   nothing
  ********************************************************************* */
-static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t sbmac_start_tx(struct sk_buff *skb, struct net_device *dev)
 {
 	struct sbmac_softc *sc = netdev_priv(dev);
 	unsigned long flags;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/cavium/liquidio/octeon_device.c linux-libre-4.14.155-gnu/drivers/net/ethernet/cavium/liquidio/octeon_device.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/cavium/liquidio/octeon_device.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/cavium/liquidio/octeon_device.c	2019-11-20 12:00:54.000000000 -0500
@@ -1444,8 +1444,9 @@ void lio_enable_irq(struct octeon_droq *
 	}
 	if (iq) {
 		spin_lock_bh(&iq->lock);
-		writel(iq->pkt_in_done, iq->inst_cnt_reg);
-		iq->pkt_in_done = 0;
+		writel(iq->pkts_processed, iq->inst_cnt_reg);
+		iq->pkt_in_done -= iq->pkts_processed;
+		iq->pkts_processed = 0;
 		/* this write needs to be flushed before we release the lock */
 		mmiowb();
 		spin_unlock_bh(&iq->lock);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/cavium/liquidio/octeon_iq.h linux-libre-4.14.155-gnu/drivers/net/ethernet/cavium/liquidio/octeon_iq.h
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/cavium/liquidio/octeon_iq.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/cavium/liquidio/octeon_iq.h	2019-11-20 12:00:54.000000000 -0500
@@ -84,6 +84,8 @@ struct octeon_instr_queue {
 
 	u32 pkt_in_done;
 
+	u32 pkts_processed;
+
 	/** A spinlock to protect access to the input ring.*/
 	spinlock_t iq_flush_running_lock;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/cavium/liquidio/request_manager.c linux-libre-4.14.155-gnu/drivers/net/ethernet/cavium/liquidio/request_manager.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/cavium/liquidio/request_manager.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/cavium/liquidio/request_manager.c	2019-11-20 12:00:54.000000000 -0500
@@ -122,6 +122,7 @@ int octeon_init_instr_queue(struct octeo
 	iq->do_auto_flush = 1;
 	iq->db_timeout = (u32)conf->db_timeout;
 	atomic_set(&iq->instr_pending, 0);
+	iq->pkts_processed = 0;
 
 	/* Initialize the spinlock for this instruction queue */
 	spin_lock_init(&iq->lock);
@@ -474,6 +475,7 @@ octeon_flush_iq(struct octeon_device *oc
 				lio_process_iq_request_list(oct, iq, 0);
 
 		if (inst_processed) {
+			iq->pkts_processed += inst_processed;
 			atomic_sub(inst_processed, &iq->instr_pending);
 			iq->stats.instr_processed += inst_processed;
 		}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c linux-libre-4.14.155-gnu/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c	2019-11-20 12:00:54.000000000 -0500
@@ -3750,7 +3750,7 @@ int t4_fwcache(struct adapter *adap, enu
 	c.param[0].mnem =
 		cpu_to_be32(FW_PARAMS_MNEM_V(FW_PARAMS_MNEM_DEV) |
 			    FW_PARAMS_PARAM_X_V(FW_PARAMS_PARAM_DEV_FWCACHE));
-	c.param[0].val = (__force __be32)op;
+	c.param[0].val = cpu_to_be32(op);
 
 	return t4_wr_mbox(adap, adap->mbox, &c, sizeof(c), NULL);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/faraday/ftgmac100.c linux-libre-4.14.155-gnu/drivers/net/ethernet/faraday/ftgmac100.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/faraday/ftgmac100.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/faraday/ftgmac100.c	2019-11-20 12:00:54.000000000 -0500
@@ -707,8 +707,8 @@ static bool ftgmac100_prep_tx_csum(struc
 	return skb_checksum_help(skb) == 0;
 }
 
-static int ftgmac100_hard_start_xmit(struct sk_buff *skb,
-				     struct net_device *netdev)
+static netdev_tx_t ftgmac100_hard_start_xmit(struct sk_buff *skb,
+					     struct net_device *netdev)
 {
 	struct ftgmac100 *priv = netdev_priv(netdev);
 	struct ftgmac100_txdes *txdes, *first;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/faraday/ftmac100.c linux-libre-4.14.155-gnu/drivers/net/ethernet/faraday/ftmac100.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/faraday/ftmac100.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/faraday/ftmac100.c	2019-11-20 12:00:54.000000000 -0500
@@ -632,8 +632,8 @@ static void ftmac100_tx_complete(struct
 		;
 }
 
-static int ftmac100_xmit(struct ftmac100 *priv, struct sk_buff *skb,
-			 dma_addr_t map)
+static netdev_tx_t ftmac100_xmit(struct ftmac100 *priv, struct sk_buff *skb,
+				 dma_addr_t map)
 {
 	struct net_device *netdev = priv->netdev;
 	struct ftmac100_txdes *txdes;
@@ -1013,7 +1013,8 @@ static int ftmac100_stop(struct net_devi
 	return 0;
 }
 
-static int ftmac100_hard_start_xmit(struct sk_buff *skb, struct net_device *netdev)
+static netdev_tx_t
+ftmac100_hard_start_xmit(struct sk_buff *skb, struct net_device *netdev)
 {
 	struct ftmac100 *priv = netdev_priv(netdev);
 	dma_addr_t map;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c	2019-11-20 12:00:54.000000000 -0500
@@ -2036,7 +2036,8 @@ static inline int dpaa_xmit(struct dpaa_
 	return 0;
 }
 
-static int dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
+static netdev_tx_t
+dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
 {
 	const int queue_mapping = skb_get_queue_mapping(skb);
 	bool nonlinear = skb_is_nonlinear(skb);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/fec_mpc52xx.c linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/fec_mpc52xx.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/fec_mpc52xx.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/fec_mpc52xx.c	2019-11-20 12:00:54.000000000 -0500
@@ -305,7 +305,8 @@ static int mpc52xx_fec_close(struct net_
  * invariant will hold if you make sure that the netif_*_queue()
  * calls are done at the proper times.
  */
-static int mpc52xx_fec_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+mpc52xx_fec_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct mpc52xx_fec_priv *priv = netdev_priv(dev);
 	struct bcom_fec_bd *bd;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c	2019-11-20 12:00:54.000000000 -0500
@@ -481,7 +481,8 @@ static struct sk_buff *tx_skb_align_work
 }
 #endif
 
-static int fs_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+fs_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct fs_enet_private *fep = netdev_priv(dev);
 	cbd_t __iomem *bdp;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/gianfar.c linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/gianfar.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/gianfar.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/gianfar.c	2019-11-20 12:00:54.000000000 -0500
@@ -112,7 +112,7 @@
 const char gfar_driver_version[] = "2.0";
 
 static int gfar_enet_open(struct net_device *dev);
-static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t gfar_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void gfar_reset_task(struct work_struct *work);
 static void gfar_timeout(struct net_device *dev);
 static int gfar_close(struct net_device *dev);
@@ -2334,7 +2334,7 @@ static inline bool gfar_csum_errata_76(s
 /* This is called by the kernel when a frame is ready for transmission.
  * It is pointed to by the dev->hard_start_xmit function pointer
  */
-static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct gfar_private *priv = netdev_priv(dev);
 	struct gfar_priv_tx_q *tx_queue = NULL;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/ucc_geth.c linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/ucc_geth.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/freescale/ucc_geth.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/freescale/ucc_geth.c	2019-11-20 12:00:54.000000000 -0500
@@ -3085,7 +3085,8 @@ static int ucc_geth_startup(struct ucc_g
 
 /* This is called by the kernel when a frame is ready for transmission. */
 /* It is pointed to by the dev->hard_start_xmit function pointer */
-static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct ucc_geth_private *ugeth = netdev_priv(dev);
 #ifdef CONFIG_UGETH_TX_ON_DEMAND
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hip04_eth.c linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hip04_eth.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hip04_eth.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hip04_eth.c	2019-11-20 12:00:54.000000000 -0500
@@ -424,7 +424,8 @@ static void hip04_start_tx_timer(struct
 			       ns, HRTIMER_MODE_REL);
 }
 
-static int hip04_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+static netdev_tx_t
+hip04_mac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 {
 	struct hip04_priv *priv = netdev_priv(ndev);
 	struct net_device_stats *stats = &ndev->stats;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hix5hd2_gmac.c	2019-11-20 12:00:54.000000000 -0500
@@ -736,7 +736,7 @@ static int hix5hd2_fill_sg_desc(struct h
 	return 0;
 }
 
-static int hix5hd2_net_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t hix5hd2_net_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct hix5hd2_priv *priv = netdev_priv(dev);
 	struct hix5hd2_desc *desc;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -2179,7 +2179,7 @@ static int hclge_get_mac_phy_link(struct
 	mac_state = hclge_get_mac_link_status(hdev);
 
 	if (hdev->hw.mac.phydev) {
-		if (!genphy_read_status(hdev->hw.mac.phydev))
+		if (hdev->hw.mac.phydev->state == PHY_RUNNING)
 			link_stat = mac_state &
 				hdev->hw.mac.phydev->link;
 		else
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c	2019-11-20 12:00:54.000000000 -0500
@@ -200,7 +200,7 @@ static int hclge_tm_qs_to_pri_map_cfg(st
 }
 
 static int hclge_tm_q_to_qs_map_cfg(struct hclge_dev *hdev,
-				    u8 q_id, u16 qs_id)
+				    u16 q_id, u16 qs_id)
 {
 	struct hclge_nq_to_qs_link_cmd *map;
 	struct hclge_desc desc;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/intel/i40e/i40e_main.c linux-libre-4.14.155-gnu/drivers/net/ethernet/intel/i40e/i40e_main.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/intel/i40e/i40e_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/intel/i40e/i40e_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -11885,6 +11885,7 @@ static void i40e_remove(struct pci_dev *
 	mutex_destroy(&hw->aq.asq_mutex);
 
 	/* Clear all dynamic memory lists of rings, q_vectors, and VSIs */
+	rtnl_lock();
 	i40e_clear_interrupt_scheme(pf);
 	for (i = 0; i < pf->num_alloc_vsi; i++) {
 		if (pf->vsi[i]) {
@@ -11893,6 +11894,7 @@ static void i40e_remove(struct pci_dev *
 			pf->vsi[i] = NULL;
 		}
 	}
+	rtnl_unlock();
 
 	for (i = 0; i < I40E_MAX_VEB; i++) {
 		kfree(pf->veb[i]);
@@ -12086,7 +12088,13 @@ static void i40e_shutdown(struct pci_dev
 	wr32(hw, I40E_PFPM_WUFC,
 	     (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0));
 
+	/* Since we're going to destroy queues during the
+	 * i40e_clear_interrupt_scheme() we should hold the RTNL lock for this
+	 * whole section
+	 */
+	rtnl_lock();
 	i40e_clear_interrupt_scheme(pf);
+	rtnl_unlock();
 
 	if (system_state == SYSTEM_POWER_OFF) {
 		pci_wake_from_d3(pdev, pf->wol_en);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/intel/i40e/i40e_ptp.c linux-libre-4.14.155-gnu/drivers/net/ethernet/intel/i40e/i40e_ptp.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/intel/i40e/i40e_ptp.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/intel/i40e/i40e_ptp.c	2019-11-20 12:00:54.000000000 -0500
@@ -704,7 +704,8 @@ static long i40e_ptp_create_clock(struct
 	if (!IS_ERR_OR_NULL(pf->ptp_clock))
 		return 0;
 
-	strncpy(pf->ptp_caps.name, i40e_driver_name, sizeof(pf->ptp_caps.name));
+	strncpy(pf->ptp_caps.name, i40e_driver_name,
+		sizeof(pf->ptp_caps.name) - 1);
 	pf->ptp_caps.owner = THIS_MODULE;
 	pf->ptp_caps.max_adj = 999999999;
 	pf->ptp_caps.n_ext_ts = 0;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c linux-libre-4.14.155-gnu/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c	2019-11-20 12:00:54.000000000 -0500
@@ -2177,6 +2177,16 @@ static int i40e_vc_del_mac_addr_msg(stru
 			ret = I40E_ERR_INVALID_MAC_ADDR;
 			goto error_param;
 		}
+
+		if (vf->pf_set_mac &&
+		    ether_addr_equal(al->list[i].addr,
+				     vf->default_lan_addr.addr)) {
+			dev_err(&pf->pdev->dev,
+				"MAC addr %pM has been set by PF, cannot delete it for VF %d, reset VF to change MAC addr\n",
+				vf->default_lan_addr.addr, vf->vf_id);
+			ret = I40E_ERR_PARAM;
+			goto error_param;
+		}
 	}
 	vsi = pf->vsi[vf->lan_vsi_idx];
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/mellanox/mlxsw/spectrum.c linux-libre-4.14.155-gnu/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/mellanox/mlxsw/spectrum.c	2019-11-13 02:06:00.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/mellanox/mlxsw/spectrum.c	2019-11-20 13:56:13.000000000 -0500
@@ -2823,6 +2823,13 @@ static int mlxsw_sp_port_ets_init(struct
 						    MLXSW_REG_QEEC_MAS_DIS);
 		if (err)
 			return err;
+
+		err = mlxsw_sp_port_ets_maxrate_set(mlxsw_sp_port,
+						    MLXSW_REG_QEEC_HIERARCY_TC,
+						    i + 8, i,
+						    MLXSW_REG_QEEC_MAS_DIS);
+		if (err)
+			return err;
 	}
 
 	/* Map all priorities to traffic class 0. */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/micrel/ks8695net.c linux-libre-4.14.155-gnu/drivers/net/ethernet/micrel/ks8695net.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/micrel/ks8695net.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/micrel/ks8695net.c	2019-11-20 12:00:54.000000000 -0500
@@ -1164,7 +1164,7 @@ ks8695_timeout(struct net_device *ndev)
  *	sk_buff and adds it to the TX ring. It then kicks the TX DMA
  *	engine to ensure transmission begins.
  */
-static int
+static netdev_tx_t
 ks8695_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 {
 	struct ks8695_priv *ksp = netdev_priv(ndev);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/micrel/ks8851_mll.c linux-libre-4.14.155-gnu/drivers/net/ethernet/micrel/ks8851_mll.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/micrel/ks8851_mll.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/micrel/ks8851_mll.c	2019-11-20 12:00:54.000000000 -0500
@@ -1020,9 +1020,9 @@ static void ks_write_qmu(struct ks_net *
  * spin_lock_irqsave is required because tx and rx should be mutual exclusive.
  * So while tx is in-progress, prevent IRQ interrupt from happenning.
  */
-static int ks_start_xmit(struct sk_buff *skb, struct net_device *netdev)
+static netdev_tx_t ks_start_xmit(struct sk_buff *skb, struct net_device *netdev)
 {
-	int retv = NETDEV_TX_OK;
+	netdev_tx_t retv = NETDEV_TX_OK;
 	struct ks_net *ks = netdev_priv(netdev);
 
 	disable_irq(netdev->irq);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/netronome/nfp/nfp_net_common.c linux-libre-4.14.155-gnu/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/netronome/nfp/nfp_net_common.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/netronome/nfp/nfp_net_common.c	2019-11-20 12:00:54.000000000 -0500
@@ -2169,9 +2169,13 @@ nfp_net_tx_ring_alloc(struct nfp_net_dp
 
 	tx_ring->size = sizeof(*tx_ring->txds) * tx_ring->cnt;
 	tx_ring->txds = dma_zalloc_coherent(dp->dev, tx_ring->size,
-					    &tx_ring->dma, GFP_KERNEL);
-	if (!tx_ring->txds)
+					    &tx_ring->dma,
+					    GFP_KERNEL | __GFP_NOWARN);
+	if (!tx_ring->txds) {
+		netdev_warn(dp->netdev, "failed to allocate TX descriptor ring memory, requested descriptor count: %d, consider lowering descriptor count\n",
+			    tx_ring->cnt);
 		goto err_alloc;
+	}
 
 	sz = sizeof(*tx_ring->txbufs) * tx_ring->cnt;
 	tx_ring->txbufs = kzalloc(sz, GFP_KERNEL);
@@ -2314,9 +2318,13 @@ nfp_net_rx_ring_alloc(struct nfp_net_dp
 	rx_ring->cnt = dp->rxd_cnt;
 	rx_ring->size = sizeof(*rx_ring->rxds) * rx_ring->cnt;
 	rx_ring->rxds = dma_zalloc_coherent(dp->dev, rx_ring->size,
-					    &rx_ring->dma, GFP_KERNEL);
-	if (!rx_ring->rxds)
+					    &rx_ring->dma,
+					    GFP_KERNEL | __GFP_NOWARN);
+	if (!rx_ring->rxds) {
+		netdev_warn(dp->netdev, "failed to allocate RX descriptor ring memory, requested descriptor count: %d, consider lowering descriptor count\n",
+			    rx_ring->cnt);
 		goto err_alloc;
+	}
 
 	sz = sizeof(*rx_ring->rxbufs) * rx_ring->cnt;
 	rx_ring->rxbufs = kzalloc(sz, GFP_KERNEL);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/smsc/smc911x.c linux-libre-4.14.155-gnu/drivers/net/ethernet/smsc/smc911x.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/smsc/smc911x.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/smsc/smc911x.c	2019-11-20 12:00:54.000000000 -0500
@@ -514,7 +514,8 @@ static void smc911x_hardware_send_pkt(st
  * now, or set the card to generates an interrupt when ready
  * for the packet.
  */
-static int smc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+smc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct smc911x_local *lp = netdev_priv(dev);
 	unsigned int free;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/smsc/smc91x.c linux-libre-4.14.155-gnu/drivers/net/ethernet/smsc/smc91x.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/smsc/smc91x.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/smsc/smc91x.c	2019-11-20 12:00:54.000000000 -0500
@@ -638,7 +638,8 @@ done:	if (!THROTTLE_TX_PKTS)
  * now, or set the card to generates an interrupt when ready
  * for the packet.
  */
-static int smc_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+smc_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct smc_local *lp = netdev_priv(dev);
 	void __iomem *ioaddr = lp->base;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/smsc/smsc911x.c linux-libre-4.14.155-gnu/drivers/net/ethernet/smsc/smsc911x.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/smsc/smsc911x.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/smsc/smsc911x.c	2019-11-20 12:00:54.000000000 -0500
@@ -1786,7 +1786,8 @@ static int smsc911x_stop(struct net_devi
 }
 
 /* Entry point for transmitting a packet */
-static int smsc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+smsc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct smsc911x_data *pdata = netdev_priv(dev);
 	unsigned int freespace;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/ldmvsw.c linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/ldmvsw.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/ldmvsw.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/ldmvsw.c	2019-11-20 12:00:54.000000000 -0500
@@ -111,7 +111,7 @@ static u16 vsw_select_queue(struct net_d
 }
 
 /* Wrappers to common functions */
-static int vsw_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t vsw_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	return sunvnet_start_xmit_common(skb, dev, vsw_tx_port_find);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunbmac.c linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunbmac.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunbmac.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunbmac.c	2019-11-20 12:00:54.000000000 -0500
@@ -951,7 +951,8 @@ static void bigmac_tx_timeout(struct net
 }
 
 /* Put a packet on the wire. */
-static int bigmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+bigmac_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct bigmac *bp = netdev_priv(dev);
 	int len, entry;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunqe.c linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunqe.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunqe.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunqe.c	2019-11-20 12:00:54.000000000 -0500
@@ -569,7 +569,7 @@ out:
 }
 
 /* Get a packet queued to go onto the wire. */
-static int qe_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t qe_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct sunqe *qep = netdev_priv(dev);
 	struct sunqe_buffers *qbufs = qep->buffers;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunvnet.c linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunvnet.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunvnet.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunvnet.c	2019-11-20 12:00:54.000000000 -0500
@@ -245,7 +245,7 @@ static u16 vnet_select_queue(struct net_
 }
 
 /* Wrappers to common functions */
-static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	return sunvnet_start_xmit_common(skb, dev, vnet_tx_port_find);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunvnet_common.c linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunvnet_common.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunvnet_common.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunvnet_common.c	2019-11-20 12:00:54.000000000 -0500
@@ -1215,9 +1215,10 @@ static inline struct sk_buff *vnet_skb_s
 	return skb;
 }
 
-static int vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb,
-				struct vnet_port *(*vnet_tx_port)
-				(struct sk_buff *, struct net_device *))
+static netdev_tx_t
+vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb,
+		     struct vnet_port *(*vnet_tx_port)
+		     (struct sk_buff *, struct net_device *))
 {
 	struct net_device *dev = VNET_PORT_TO_NET_DEVICE(port);
 	struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
@@ -1320,9 +1321,10 @@ out_dropped:
 	return NETDEV_TX_OK;
 }
 
-int sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,
-			      struct vnet_port *(*vnet_tx_port)
-			      (struct sk_buff *, struct net_device *))
+netdev_tx_t
+sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,
+			  struct vnet_port *(*vnet_tx_port)
+			  (struct sk_buff *, struct net_device *))
 {
 	struct vnet_port *port = NULL;
 	struct vio_dring_state *dr;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunvnet_common.h linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunvnet_common.h
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/sun/sunvnet_common.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/sun/sunvnet_common.h	2019-11-20 12:00:54.000000000 -0500
@@ -136,9 +136,10 @@ int sunvnet_close_common(struct net_devi
 void sunvnet_set_rx_mode_common(struct net_device *dev, struct vnet *vp);
 int sunvnet_set_mac_addr_common(struct net_device *dev, void *p);
 void sunvnet_tx_timeout_common(struct net_device *dev);
-int sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,
-			   struct vnet_port *(*vnet_tx_port)
-			   (struct sk_buff *, struct net_device *));
+netdev_tx_t
+sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,
+			  struct vnet_port *(*vnet_tx_port)
+			  (struct sk_buff *, struct net_device *));
 #ifdef CONFIG_NET_POLL_CONTROLLER
 void sunvnet_poll_controller_common(struct net_device *dev, struct vnet *vp);
 #endif
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.c linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.c	2019-11-20 12:00:54.000000000 -0500
@@ -845,9 +845,9 @@ static int gelic_card_kick_txdma(struct
  * @skb: packet to send out
  * @netdev: interface device structure
  *
- * returns 0 on success, <0 on failure
+ * returns NETDEV_TX_OK on success, NETDEV_TX_BUSY on failure
  */
-int gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev)
+netdev_tx_t gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev)
 {
 	struct gelic_card *card = netdev_card(netdev);
 	struct gelic_descr *descr;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.h linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.h
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/ps3_gelic_net.h	2019-11-20 12:00:54.000000000 -0500
@@ -370,7 +370,7 @@ void gelic_card_up(struct gelic_card *ca
 void gelic_card_down(struct gelic_card *card);
 int gelic_net_open(struct net_device *netdev);
 int gelic_net_stop(struct net_device *netdev);
-int gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev);
+netdev_tx_t gelic_net_xmit(struct sk_buff *skb, struct net_device *netdev);
 void gelic_net_set_multi(struct net_device *netdev);
 void gelic_net_tx_timeout(struct net_device *netdev);
 int gelic_net_setup_netdev(struct net_device *netdev, struct gelic_card *card);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/spider_net.c linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/spider_net.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/spider_net.c	2019-11-13 02:06:47.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/spider_net.c	2019-11-20 13:57:01.000000000 -0500
@@ -880,9 +880,9 @@ out:
  * @skb: packet to send out
  * @netdev: interface device structure
  *
- * returns 0 on success, !0 on failure
+ * returns NETDEV_TX_OK on success, NETDEV_TX_BUSY on failure
  */
-static int
+static netdev_tx_t
 spider_net_xmit(struct sk_buff *skb, struct net_device *netdev)
 {
 	int cnt;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/tc35815.c linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/tc35815.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/toshiba/tc35815.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/toshiba/tc35815.c	2019-11-20 12:00:54.000000000 -0500
@@ -474,7 +474,8 @@ static void free_rxbuf_skb(struct pci_de
 /* Index to functions, as function prototypes. */
 
 static int	tc35815_open(struct net_device *dev);
-static int	tc35815_send_packet(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t	tc35815_send_packet(struct sk_buff *skb,
+					    struct net_device *dev);
 static irqreturn_t	tc35815_interrupt(int irq, void *dev_id);
 static int	tc35815_rx(struct net_device *dev, int limit);
 static int	tc35815_poll(struct napi_struct *napi, int budget);
@@ -1248,7 +1249,8 @@ tc35815_open(struct net_device *dev)
  * invariant will hold if you make sure that the netif_*_queue()
  * calls are done at the proper times.
  */
-static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t
+tc35815_send_packet(struct sk_buff *skb, struct net_device *dev)
 {
 	struct tc35815_local *lp = netdev_priv(dev);
 	struct TxFD *txfd;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/xilinx/ll_temac_main.c linux-libre-4.14.155-gnu/drivers/net/ethernet/xilinx/ll_temac_main.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/xilinx/ll_temac_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/xilinx/ll_temac_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -674,7 +674,8 @@ static inline int temac_check_tx_bd_spac
 	return 0;
 }
 
-static int temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+static netdev_tx_t
+temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 {
 	struct temac_local *lp = netdev_priv(ndev);
 	struct cdmac_bd *cur_p;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/xilinx/xilinx_axienet_main.c linux-libre-4.14.155-gnu/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/xilinx/xilinx_axienet_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/xilinx/xilinx_axienet_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -657,7 +657,8 @@ static inline int axienet_check_tx_bd_sp
  * start the transmission. Additionally if checksum offloading is supported,
  * it populates AXI Stream Control fields with appropriate values.
  */
-static int axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
+static netdev_tx_t
+axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 {
 	u32 ii;
 	u32 num_frag;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/ethernet/xilinx/xilinx_emaclite.c linux-libre-4.14.155-gnu/drivers/net/ethernet/xilinx/xilinx_emaclite.c
--- linux-libre-4.14.154-gnu/drivers/net/ethernet/xilinx/xilinx_emaclite.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/ethernet/xilinx/xilinx_emaclite.c	2019-11-20 12:00:54.000000000 -0500
@@ -1005,9 +1005,10 @@ static int xemaclite_close(struct net_de
  * deferred and the Tx queue is stopped so that the deferred socket buffer can
  * be transmitted when the Emaclite device is free to transmit data.
  *
- * Return:	0, always.
+ * Return:	NETDEV_TX_OK, always.
  */
-static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)
+static netdev_tx_t
+xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)
 {
 	struct net_local *lp = netdev_priv(dev);
 	struct sk_buff *new_skb;
@@ -1028,7 +1029,7 @@ static int xemaclite_send(struct sk_buff
 		/* Take the time stamp now, since we can't do this in an ISR. */
 		skb_tx_timestamp(new_skb);
 		spin_unlock_irqrestore(&lp->reset_lock, flags);
-		return 0;
+		return NETDEV_TX_OK;
 	}
 	spin_unlock_irqrestore(&lp->reset_lock, flags);
 
@@ -1037,7 +1038,7 @@ static int xemaclite_send(struct sk_buff
 	dev->stats.tx_bytes += len;
 	dev_consume_skb_any(new_skb);
 
-	return 0;
+	return NETDEV_TX_OK;
 }
 
 /**
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/phy/mdio-bcm-unimac.c linux-libre-4.14.155-gnu/drivers/net/phy/mdio-bcm-unimac.c
--- linux-libre-4.14.154-gnu/drivers/net/phy/mdio-bcm-unimac.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/phy/mdio-bcm-unimac.c	2019-11-20 12:00:54.000000000 -0500
@@ -16,6 +16,7 @@
 #include <linux/module.h>
 #include <linux/io.h>
 #include <linux/delay.h>
+#include <linux/clk.h>
 
 #include <linux/of.h>
 #include <linux/of_platform.h>
@@ -45,6 +46,8 @@ struct unimac_mdio_priv {
 	void __iomem		*base;
 	int (*wait_func)	(void *wait_func_data);
 	void			*wait_func_data;
+	struct clk		*clk;
+	u32			clk_freq;
 };
 
 static inline u32 unimac_mdio_readl(struct unimac_mdio_priv *priv, u32 offset)
@@ -189,6 +192,35 @@ static int unimac_mdio_reset(struct mii_
 	return 0;
 }
 
+static void unimac_mdio_clk_set(struct unimac_mdio_priv *priv)
+{
+	unsigned long rate;
+	u32 reg, div;
+
+	/* Keep the hardware default values */
+	if (!priv->clk_freq)
+		return;
+
+	if (!priv->clk)
+		rate = 250000000;
+	else
+		rate = clk_get_rate(priv->clk);
+
+	div = (rate / (2 * priv->clk_freq)) - 1;
+	if (div & ~MDIO_CLK_DIV_MASK) {
+		pr_warn("Incorrect MDIO clock frequency, ignoring\n");
+		return;
+	}
+
+	/* The MDIO clock is the reference clock (typicaly 250Mhz) divided by
+	 * 2 x (MDIO_CLK_DIV + 1)
+	 */
+	reg = unimac_mdio_readl(priv, MDIO_CFG);
+	reg &= ~(MDIO_CLK_DIV_MASK << MDIO_CLK_DIV_SHIFT);
+	reg |= div << MDIO_CLK_DIV_SHIFT;
+	unimac_mdio_writel(priv, reg, MDIO_CFG);
+}
+
 static int unimac_mdio_probe(struct platform_device *pdev)
 {
 	struct unimac_mdio_pdata *pdata = pdev->dev.platform_data;
@@ -215,9 +247,26 @@ static int unimac_mdio_probe(struct plat
 		return -ENOMEM;
 	}
 
+	priv->clk = devm_clk_get(&pdev->dev, NULL);
+	if (PTR_ERR(priv->clk) == -EPROBE_DEFER)
+		return PTR_ERR(priv->clk);
+	else
+		priv->clk = NULL;
+
+	ret = clk_prepare_enable(priv->clk);
+	if (ret)
+		return ret;
+
+	if (of_property_read_u32(np, "clock-frequency", &priv->clk_freq))
+		priv->clk_freq = 0;
+
+	unimac_mdio_clk_set(priv);
+
 	priv->mii_bus = mdiobus_alloc();
-	if (!priv->mii_bus)
-		return -ENOMEM;
+	if (!priv->mii_bus) {
+		ret = -ENOMEM;
+		goto out_clk_disable;
+	}
 
 	bus = priv->mii_bus;
 	bus->priv = priv;
@@ -251,6 +300,8 @@ static int unimac_mdio_probe(struct plat
 
 out_mdio_free:
 	mdiobus_free(bus);
+out_clk_disable:
+	clk_disable_unprepare(priv->clk);
 	return ret;
 }
 
@@ -260,10 +311,37 @@ static int unimac_mdio_remove(struct pla
 
 	mdiobus_unregister(priv->mii_bus);
 	mdiobus_free(priv->mii_bus);
+	clk_disable_unprepare(priv->clk);
 
 	return 0;
 }
 
+static int __maybe_unused unimac_mdio_suspend(struct device *d)
+{
+	struct unimac_mdio_priv *priv = dev_get_drvdata(d);
+
+	clk_disable_unprepare(priv->clk);
+
+	return 0;
+}
+
+static int __maybe_unused unimac_mdio_resume(struct device *d)
+{
+	struct unimac_mdio_priv *priv = dev_get_drvdata(d);
+	int ret;
+
+	ret = clk_prepare_enable(priv->clk);
+	if (ret)
+		return ret;
+
+	unimac_mdio_clk_set(priv);
+
+	return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(unimac_mdio_pm_ops,
+			 unimac_mdio_suspend, unimac_mdio_resume);
+
 static const struct of_device_id unimac_mdio_ids[] = {
 	{ .compatible = "brcm,genet-mdio-v5", },
 	{ .compatible = "brcm,genet-mdio-v4", },
@@ -279,6 +357,7 @@ static struct platform_driver unimac_mdi
 	.driver = {
 		.name = UNIMAC_MDIO_DRV_NAME,
 		.of_match_table = unimac_mdio_ids,
+		.pm = &unimac_mdio_pm_ops,
 	},
 	.probe	= unimac_mdio_probe,
 	.remove	= unimac_mdio_remove,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/phy/mscc.c linux-libre-4.14.155-gnu/drivers/net/phy/mscc.c
--- linux-libre-4.14.154-gnu/drivers/net/phy/mscc.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/phy/mscc.c	2019-11-20 12:00:54.000000000 -0500
@@ -111,8 +111,8 @@ struct vsc8531_private {
 
 #ifdef CONFIG_OF_MDIO
 struct vsc8531_edge_rate_table {
-	u16 vddmac;
-	u8 slowdown[8];
+	u32 vddmac;
+	u32 slowdown[8];
 };
 
 static const struct vsc8531_edge_rate_table edge_table[] = {
@@ -375,8 +375,7 @@ out_unlock:
 #ifdef CONFIG_OF_MDIO
 static int vsc85xx_edge_rate_magic_get(struct phy_device *phydev)
 {
-	u8 sd;
-	u16 vdd;
+	u32 vdd, sd;
 	int rc, i, j;
 	struct device *dev = &phydev->mdio.dev;
 	struct device_node *of_node = dev->of_node;
@@ -385,11 +384,11 @@ static int vsc85xx_edge_rate_magic_get(s
 	if (!of_node)
 		return -ENODEV;
 
-	rc = of_property_read_u16(of_node, "vsc8531,vddmac", &vdd);
+	rc = of_property_read_u32(of_node, "vsc8531,vddmac", &vdd);
 	if (rc != 0)
 		vdd = MSCC_VDDMAC_3300;
 
-	rc = of_property_read_u8(of_node, "vsc8531,edge-slowdown", &sd);
+	rc = of_property_read_u32(of_node, "vsc8531,edge-slowdown", &sd);
 	if (rc != 0)
 		sd = 0;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/slip/slip.c linux-libre-4.14.155-gnu/drivers/net/slip/slip.c
--- linux-libre-4.14.154-gnu/drivers/net/slip/slip.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/slip/slip.c	2019-11-20 12:00:54.000000000 -0500
@@ -859,6 +859,7 @@ err_free_chan:
 	sl->tty = NULL;
 	tty->disc_data = NULL;
 	clear_bit(SLF_INUSE, &sl->flags);
+	free_netdev(sl->dev);
 
 err_exit:
 	rtnl_unlock();
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/usb/ax88172a.c linux-libre-4.14.155-gnu/drivers/net/usb/ax88172a.c
--- linux-libre-4.14.154-gnu/drivers/net/usb/ax88172a.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/usb/ax88172a.c	2019-11-20 12:00:54.000000000 -0500
@@ -208,7 +208,7 @@ static int ax88172a_bind(struct usbnet *
 
 	/* Get the MAC address */
 	ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID, 0, 0, ETH_ALEN, buf, 0);
-	if (ret < 0) {
+	if (ret < ETH_ALEN) {
 		netdev_err(dev->net, "Failed to read MAC address: %d\n", ret);
 		goto free;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/usb/lan78xx.c linux-libre-4.14.155-gnu/drivers/net/usb/lan78xx.c
--- linux-libre-4.14.154-gnu/drivers/net/usb/lan78xx.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/usb/lan78xx.c	2019-11-20 12:00:54.000000000 -0500
@@ -2818,6 +2818,11 @@ static int lan78xx_bind(struct lan78xx_n
 	int i;
 
 	ret = lan78xx_get_endpoints(dev, intf);
+	if (ret) {
+		netdev_warn(dev->net, "lan78xx_get_endpoints failed: %d\n",
+			    ret);
+		return ret;
+	}
 
 	dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/usb/qmi_wwan.c linux-libre-4.14.155-gnu/drivers/net/usb/qmi_wwan.c
--- linux-libre-4.14.154-gnu/drivers/net/usb/qmi_wwan.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/usb/qmi_wwan.c	2019-11-20 12:00:54.000000000 -0500
@@ -1295,6 +1295,8 @@ static const struct usb_device_id produc
 	{QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)},	/* Quectel EG91 */
 	{QMI_FIXED_INTF(0x2c7c, 0x0296, 4)},	/* Quectel BG96 */
 	{QMI_QUIRK_SET_DTR(0x2cb7, 0x0104, 4)},	/* Fibocom NL678 series */
+	{QMI_FIXED_INTF(0x0489, 0xe0b4, 0)},	/* Foxconn T77W968 LTE */
+	{QMI_FIXED_INTF(0x0489, 0xe0b5, 0)},	/* Foxconn T77W968 LTE with eSIM support*/
 
 	/* 4. Gobi 1000 devices */
 	{QMI_GOBI1K_DEVICE(0x05c6, 0x9212)},	/* Acer Gobi Modem Device */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/ahb.c linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/ahb.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/ahb.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/ahb.c	2019-11-20 12:00:54.000000000 -0500
@@ -663,10 +663,10 @@ static void ath10k_ahb_hif_stop(struct a
 	ath10k_ahb_irq_disable(ar);
 	synchronize_irq(ar_ahb->irq);
 
-	ath10k_pci_flush(ar);
-
 	napi_synchronize(&ar->napi);
 	napi_disable(&ar->napi);
+
+	ath10k_pci_flush(ar);
 }
 
 static int ath10k_ahb_hif_power_up(struct ath10k *ar)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/mac.c linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/mac.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/mac.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/mac.c	2019-11-20 12:00:54.000000000 -0500
@@ -17,6 +17,7 @@
 
 #include "mac.h"
 
+#include <net/cfg80211.h>
 #include <net/mac80211.h>
 #include <linux/etherdevice.h>
 #include <linux/acpi.h>
@@ -8174,6 +8175,7 @@ int ath10k_mac_register(struct ath10k *a
 		ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band;
 	}
 
+	wiphy_read_of_freq_limits(ar->hw->wiphy);
 	ath10k_mac_setup_ht_vht_cap(ar);
 
 	ar->hw->wiphy->interface_modes =
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/pci.c linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/pci.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/pci.c	2019-11-13 02:10:58.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/pci.c	2019-11-20 14:01:03.000000000 -0500
@@ -1787,9 +1787,9 @@ static void ath10k_pci_hif_stop(struct a
 
 	ath10k_pci_irq_disable(ar);
 	ath10k_pci_irq_sync(ar);
-	ath10k_pci_flush(ar);
 	napi_synchronize(&ar->napi);
 	napi_disable(&ar->napi);
+	ath10k_pci_flush(ar);
 
 	spin_lock_irqsave(&ar_pci->ps_lock, flags);
 	WARN_ON(ar_pci->ps_wake_refcount > 0);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/wmi.c linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/wmi.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath10k/wmi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath10k/wmi.c	2019-11-20 12:00:54.000000000 -0500
@@ -2414,7 +2414,8 @@ int ath10k_wmi_event_mgmt_rx(struct ath1
 		   status->freq, status->band, status->signal,
 		   status->rate_idx);
 
-	ieee80211_rx(ar->hw, skb);
+	ieee80211_rx_ni(ar->hw, skb);
+
 	return 0;
 }
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath9k/main.c linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath9k/main.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath9k/main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath9k/main.c	2019-11-20 12:00:54.000000000 -0500
@@ -1251,7 +1251,6 @@ static int ath9k_add_interface(struct ie
 	struct ath_node *an = &avp->mcast_node;
 
 	mutex_lock(&sc->mutex);
-
 	if (IS_ENABLED(CONFIG_ATH9K_TX99)) {
 		if (sc->cur_chan->nvifs >= 1) {
 			mutex_unlock(&sc->mutex);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath9k/tx99.c linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath9k/tx99.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/ath/ath9k/tx99.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/ath/ath9k/tx99.c	2019-11-20 12:00:54.000000000 -0500
@@ -56,11 +56,6 @@ static struct sk_buff *ath9k_build_tx99_
 	struct sk_buff *skb;
 	struct ath_vif *avp;
 
-	if (!sc->tx99_vif)
-		return NULL;
-
-	avp = (struct ath_vif *)sc->tx99_vif->drv_priv;
-
 	skb = alloc_skb(len, GFP_KERNEL);
 	if (!skb)
 		return NULL;
@@ -77,7 +72,10 @@ static struct sk_buff *ath9k_build_tx99_
 	memcpy(hdr->addr2, hw->wiphy->perm_addr, ETH_ALEN);
 	memcpy(hdr->addr3, hw->wiphy->perm_addr, ETH_ALEN);
 
-	hdr->seq_ctrl |= cpu_to_le16(avp->seq_no);
+	if (sc->tx99_vif) {
+		avp = (struct ath_vif *) sc->tx99_vif->drv_priv;
+		hdr->seq_ctrl |= cpu_to_le16(avp->seq_no);
+	}
 
 	tx_info = IEEE80211_SKB_CB(skb);
 	memset(tx_info, 0, sizeof(*tx_info));
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h
--- linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h	2019-11-20 12:00:54.000000000 -0500
@@ -722,9 +722,9 @@ enum iwl_mvm_ba_resp_flags {
  * @tfd_cnt: number of TFD-Q elements
  * @ra_tid_cnt: number of RATID-Q elements
  * @tfd: array of TFD queue status updates. See &iwl_mvm_compressed_ba_tfd
- *	for details.
+ *	for details. Length in @tfd_cnt.
  * @ra_tid: array of RA-TID queue status updates. For debug purposes only. See
- *	&iwl_mvm_compressed_ba_ratid for more details.
+ *	&iwl_mvm_compressed_ba_ratid for more details. Length in @ra_tid_cnt.
  */
 struct iwl_mvm_compressed_ba_notif {
 	__le32 flags;
@@ -741,7 +741,7 @@ struct iwl_mvm_compressed_ba_notif {
 	__le32 tx_rate;
 	__le16 tfd_cnt;
 	__le16 ra_tid_cnt;
-	struct iwl_mvm_compressed_ba_tfd tfd[1];
+	struct iwl_mvm_compressed_ba_tfd tfd[0];
 	struct iwl_mvm_compressed_ba_ratid ra_tid[0];
 } __packed; /* COMPRESSED_BA_RES_API_S_VER_4 */
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/fw/dbg.c linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/fw/dbg.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/fw/dbg.c	2019-11-20 12:00:54.000000000 -0500
@@ -775,7 +775,7 @@ void iwl_fw_error_dump(struct iwl_fw_run
 	dump_data = iwl_fw_error_next_data(dump_data);
 
 	/* We only dump the FIFOs if the FW is in error state */
-	if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status)) {
+	if (fifo_data_len) {
 		iwl_fw_dump_fifos(fwrt, &dump_data);
 		if (radio_len)
 			iwl_read_radio_regs(fwrt, &dump_data);
@@ -954,7 +954,7 @@ int iwl_fw_dbg_collect_desc(struct iwl_f
 	 * If the loading of the FW completed successfully, the next step is to
 	 * get the SMEM config data. Thus, if fwrt->smem_cfg.num_lmacs is non
 	 * zero, the FW was already loaded successully. If the state is "NO_FW"
-	 * in such a case - WARN and exit, since FW may be dead. Otherwise, we
+	 * in such a case - exit, since FW may be dead. Otherwise, we
 	 * can try to collect the data, since FW might just not be fully
 	 * loaded (no "ALIVE" yet), and the debug data is accessible.
 	 *
@@ -962,9 +962,8 @@ int iwl_fw_dbg_collect_desc(struct iwl_f
 	 *	config. In such a case, due to HW access problems, we might
 	 *	collect garbage.
 	 */
-	if (WARN((fwrt->trans->state == IWL_TRANS_NO_FW) &&
-		 fwrt->smem_cfg.num_lmacs,
-		 "Can't collect dbg data when FW isn't alive\n"))
+	if (fwrt->trans->state == IWL_TRANS_NO_FW &&
+	    fwrt->smem_cfg.num_lmacs)
 		return -EIO;
 
 	if (test_and_set_bit(IWL_FWRT_STATUS_DUMPING, &fwrt->status))
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/mvm/sta.c linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/mvm/sta.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/mvm/sta.c	2019-11-20 12:00:54.000000000 -0500
@@ -3067,10 +3067,6 @@ static int __iwl_mvm_set_sta_key(struct
 
 	switch (keyconf->cipher) {
 	case WLAN_CIPHER_SUITE_TKIP:
-		if (vif->type == NL80211_IFTYPE_AP) {
-			ret = -EINVAL;
-			break;
-		}
 		addr = iwl_mvm_get_mac_addr(mvm, vif, sta);
 		/* get phase 1 key from mac80211 */
 		ieee80211_get_key_rx_seq(keyconf, 0, &seq);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/mvm/tx.c linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/intel/iwlwifi/mvm/tx.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/intel/iwlwifi/mvm/tx.c	2019-11-20 12:00:54.000000000 -0500
@@ -1378,6 +1378,14 @@ static void iwl_mvm_rx_tx_cmd_single(str
 			break;
 		}
 
+		/*
+		 * If we are freeing multiple frames, mark all the frames
+		 * but the first one as acked, since they were acknowledged
+		 * before
+		 * */
+		if (skb_freed > 1)
+			info->flags |= IEEE80211_TX_STAT_ACK;
+
 		iwl_mvm_tx_status_check_trigger(mvm, status);
 
 		info->status.rates[0].count = tx_resp->failure_frame + 1;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c linux-libre-4.14.155-gnu/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c
--- linux-libre-4.14.154-gnu/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/net/wireless/realtek/rtl818x/rtl8187/leds.c	2019-11-20 12:00:54.000000000 -0500
@@ -146,7 +146,7 @@ static int rtl8187_register_led(struct i
 	led->dev = dev;
 	led->ledpin = ledpin;
 	led->is_radio = is_radio;
-	strncpy(led->name, name, sizeof(led->name));
+	strlcpy(led->name, name, sizeof(led->name));
 
 	led->led_dev.name = led->name;
 	led->led_dev.default_trigger = default_trigger;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/nvmem/core.c linux-libre-4.14.155-gnu/drivers/nvmem/core.c
--- linux-libre-4.14.154-gnu/drivers/nvmem/core.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/nvmem/core.c	2019-11-20 12:00:54.000000000 -0500
@@ -617,7 +617,7 @@ static struct nvmem_device *nvmem_find(c
 	d = bus_find_device(&nvmem_bus_type, NULL, (void *)name, nvmem_match);
 
 	if (!d)
-		return NULL;
+		return ERR_PTR(-ENOENT);
 
 	return to_nvmem_device(d);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/of/base.c linux-libre-4.14.155-gnu/drivers/of/base.c
--- linux-libre-4.14.154-gnu/drivers/of/base.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/of/base.c	2019-11-20 12:00:54.000000000 -0500
@@ -1837,7 +1837,7 @@ struct device_node *of_find_next_cache_n
 	/* OF on pmac has nodes instead of properties named "l2-cache"
 	 * beneath CPU nodes.
 	 */
-	if (!strcmp(np->type, "cpu"))
+	if (IS_ENABLED(CONFIG_PPC_PMAC) && !strcmp(np->type, "cpu"))
 		for_each_child_of_node(np, child)
 			if (!strcmp(child->type, "cache"))
 				return child;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/phy/broadcom/Kconfig linux-libre-4.14.155-gnu/drivers/phy/broadcom/Kconfig
--- linux-libre-4.14.154-gnu/drivers/phy/broadcom/Kconfig	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/phy/broadcom/Kconfig	2019-11-20 12:00:54.000000000 -0500
@@ -60,7 +60,8 @@ config PHY_NS2_USB_DRD
 
 config PHY_BRCM_SATA
 	tristate "Broadcom SATA PHY driver"
-	depends on ARCH_BRCMSTB || ARCH_BCM_IPROC || BMIPS_GENERIC || COMPILE_TEST
+	depends on ARCH_BRCMSTB || ARCH_BCM_IPROC || BMIPS_GENERIC || \
+		   ARCH_BCM_63XX || COMPILE_TEST
 	depends on OF
 	select GENERIC_PHY
 	default ARCH_BCM_IPROC
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c linux-libre-4.14.155-gnu/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c
--- linux-libre-4.14.154-gnu/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c	2019-11-20 12:00:54.000000000 -0500
@@ -156,7 +156,6 @@ static int ltq_rcu_usb2_of_parse(struct
 {
 	struct device *dev = priv->dev;
 	const __be32 *offset;
-	int ret;
 
 	priv->reg_bits = of_device_get_match_data(dev);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/phy/renesas/phy-rcar-gen3-usb2.c linux-libre-4.14.155-gnu/drivers/phy/renesas/phy-rcar-gen3-usb2.c
--- linux-libre-4.14.154-gnu/drivers/phy/renesas/phy-rcar-gen3-usb2.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/phy/renesas/phy-rcar-gen3-usb2.c	2019-11-20 12:00:54.000000000 -0500
@@ -195,7 +195,7 @@ static void rcar_gen3_init_from_a_peri_t
 	val = readl(usb2_base + USB2_OBINTEN);
 	writel(val & ~USB2_OBINT_BITS, usb2_base + USB2_OBINTEN);
 
-	rcar_gen3_enable_vbus_ctrl(ch, 0);
+	rcar_gen3_enable_vbus_ctrl(ch, 1);
 	rcar_gen3_init_for_host(ch);
 
 	writel(val | USB2_OBINT_BITS, usb2_base + USB2_OBINTEN);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/phy/ti/phy-twl4030-usb.c linux-libre-4.14.155-gnu/drivers/phy/ti/phy-twl4030-usb.c
--- linux-libre-4.14.154-gnu/drivers/phy/ti/phy-twl4030-usb.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/phy/ti/phy-twl4030-usb.c	2019-11-20 12:00:54.000000000 -0500
@@ -144,6 +144,7 @@
 #define PMBR1				0x0D
 #define GPIO_USB_4PIN_ULPI_2430C	(3 << 0)
 
+static irqreturn_t twl4030_usb_irq(int irq, void *_twl);
 /*
  * If VBUS is valid or ID is ground, then we know a
  * cable is present and we need to be runtime-enabled
@@ -395,6 +396,33 @@ static void __twl4030_phy_power(struct t
 	WARN_ON(twl4030_usb_write_verify(twl, PHY_PWR_CTRL, pwr) < 0);
 }
 
+static int __maybe_unused twl4030_usb_suspend(struct device *dev)
+{
+	struct twl4030_usb *twl = dev_get_drvdata(dev);
+
+	/*
+	 * we need enabled runtime on resume,
+	 * so turn irq off here, so we do not get it early
+	 * note: wakeup on usb plug works independently of this
+	 */
+	dev_dbg(twl->dev, "%s\n", __func__);
+	disable_irq(twl->irq);
+
+	return 0;
+}
+
+static int __maybe_unused twl4030_usb_resume(struct device *dev)
+{
+	struct twl4030_usb *twl = dev_get_drvdata(dev);
+
+	dev_dbg(twl->dev, "%s\n", __func__);
+	enable_irq(twl->irq);
+	/* check whether cable status changed */
+	twl4030_usb_irq(0, twl);
+
+	return 0;
+}
+
 static int __maybe_unused twl4030_usb_runtime_suspend(struct device *dev)
 {
 	struct twl4030_usb *twl = dev_get_drvdata(dev);
@@ -655,6 +683,7 @@ static const struct phy_ops ops = {
 static const struct dev_pm_ops twl4030_usb_pm_ops = {
 	SET_RUNTIME_PM_OPS(twl4030_usb_runtime_suspend,
 			   twl4030_usb_runtime_resume, NULL)
+	SET_SYSTEM_SLEEP_PM_OPS(twl4030_usb_suspend, twl4030_usb_resume)
 };
 
 static int twl4030_usb_probe(struct platform_device *pdev)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/pinctrl/pinctrl-at91.c linux-libre-4.14.155-gnu/drivers/pinctrl/pinctrl-at91.c
--- linux-libre-4.14.154-gnu/drivers/pinctrl/pinctrl-at91.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/pinctrl/pinctrl-at91.c	2019-11-20 12:00:54.000000000 -0500
@@ -1566,16 +1566,6 @@ void at91_pinctrl_gpio_resume(void)
 #define gpio_irq_set_wake	NULL
 #endif /* CONFIG_PM */
 
-static struct irq_chip gpio_irqchip = {
-	.name		= "GPIO",
-	.irq_ack	= gpio_irq_ack,
-	.irq_disable	= gpio_irq_mask,
-	.irq_mask	= gpio_irq_mask,
-	.irq_unmask	= gpio_irq_unmask,
-	/* .irq_set_type is set dynamically */
-	.irq_set_wake	= gpio_irq_set_wake,
-};
-
 static void gpio_irq_handler(struct irq_desc *desc)
 {
 	struct irq_chip *chip = irq_desc_get_chip(desc);
@@ -1616,12 +1606,22 @@ static int at91_gpio_of_irq_setup(struct
 	struct gpio_chip	*gpiochip_prev = NULL;
 	struct at91_gpio_chip   *prev = NULL;
 	struct irq_data		*d = irq_get_irq_data(at91_gpio->pioc_virq);
+	struct irq_chip		*gpio_irqchip;
 	int ret, i;
 
+	gpio_irqchip = devm_kzalloc(&pdev->dev, sizeof(*gpio_irqchip), GFP_KERNEL);
+	if (!gpio_irqchip)
+		return -ENOMEM;
+
 	at91_gpio->pioc_hwirq = irqd_to_hwirq(d);
 
-	/* Setup proper .irq_set_type function */
-	gpio_irqchip.irq_set_type = at91_gpio->ops->irq_type;
+	gpio_irqchip->name = "GPIO";
+	gpio_irqchip->irq_ack = gpio_irq_ack;
+	gpio_irqchip->irq_disable = gpio_irq_mask;
+	gpio_irqchip->irq_mask = gpio_irq_mask;
+	gpio_irqchip->irq_unmask = gpio_irq_unmask;
+	gpio_irqchip->irq_set_wake = gpio_irq_set_wake,
+	gpio_irqchip->irq_set_type = at91_gpio->ops->irq_type;
 
 	/* Disable irqs of this PIO controller */
 	writel_relaxed(~0, at91_gpio->regbase + PIO_IDR);
@@ -1632,7 +1632,7 @@ static int at91_gpio_of_irq_setup(struct
 	 * interrupt.
 	 */
 	ret = gpiochip_irqchip_add(&at91_gpio->chip,
-				   &gpio_irqchip,
+				   gpio_irqchip,
 				   0,
 				   handle_edge_irq,
 				   IRQ_TYPE_NONE);
@@ -1650,7 +1650,7 @@ static int at91_gpio_of_irq_setup(struct
 	if (!gpiochip_prev) {
 		/* Then register the chain on the parent IRQ */
 		gpiochip_set_chained_irqchip(&at91_gpio->chip,
-					     &gpio_irqchip,
+					     gpio_irqchip,
 					     at91_gpio->pioc_virq,
 					     gpio_irq_handler);
 		return 0;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/pinctrl/pinctrl-at91-pio4.c linux-libre-4.14.155-gnu/drivers/pinctrl/pinctrl-at91-pio4.c
--- linux-libre-4.14.154-gnu/drivers/pinctrl/pinctrl-at91-pio4.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/pinctrl/pinctrl-at91-pio4.c	2019-11-20 12:00:54.000000000 -0500
@@ -483,7 +483,6 @@ static int atmel_pctl_dt_subnode_to_map(
 	unsigned num_pins, num_configs, reserve;
 	unsigned long *configs;
 	struct property	*pins;
-	bool has_config;
 	u32 pinfunc;
 	int ret, i;
 
@@ -499,9 +498,6 @@ static int atmel_pctl_dt_subnode_to_map(
 		return ret;
 	}
 
-	if (num_configs)
-		has_config = true;
-
 	num_pins = pins->length / sizeof(u32);
 	if (!num_pins) {
 		dev_err(pctldev->dev, "no pins found in node %pOF\n", np);
@@ -514,7 +510,7 @@ static int atmel_pctl_dt_subnode_to_map(
 	 * map for each pin.
 	 */
 	reserve = 1;
-	if (has_config && num_pins >= 1)
+	if (num_configs)
 		reserve++;
 	reserve *= num_pins;
 	ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps, num_maps,
@@ -537,7 +533,7 @@ static int atmel_pctl_dt_subnode_to_map(
 		pinctrl_utils_add_map_mux(pctldev, map, reserved_maps, num_maps,
 					  group, func);
 
-		if (has_config) {
+		if (num_configs) {
 			ret = pinctrl_utils_add_map_configs(pctldev, map,
 					reserved_maps, num_maps, group,
 					configs, num_configs,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/pinctrl/pinctrl-ingenic.c linux-libre-4.14.155-gnu/drivers/pinctrl/pinctrl-ingenic.c
--- linux-libre-4.14.154-gnu/drivers/pinctrl/pinctrl-ingenic.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/pinctrl/pinctrl-ingenic.c	2019-11-20 12:00:54.000000000 -0500
@@ -849,4 +849,4 @@ static int __init ingenic_pinctrl_drv_re
 {
 	return platform_driver_register(&ingenic_pinctrl_driver);
 }
-postcore_initcall(ingenic_pinctrl_drv_register);
+subsys_initcall(ingenic_pinctrl_drv_register);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/power/reset/at91-sama5d2_shdwc.c linux-libre-4.14.155-gnu/drivers/power/reset/at91-sama5d2_shdwc.c
--- linux-libre-4.14.154-gnu/drivers/power/reset/at91-sama5d2_shdwc.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/power/reset/at91-sama5d2_shdwc.c	2019-11-20 12:00:54.000000000 -0500
@@ -246,6 +246,9 @@ static int __init at91_shdwc_probe(struc
 	if (!pdev->dev.of_node)
 		return -ENODEV;
 
+	if (at91_shdwc)
+		return -EBUSY;
+
 	at91_shdwc = devm_kzalloc(&pdev->dev, sizeof(*at91_shdwc), GFP_KERNEL);
 	if (!at91_shdwc)
 		return -ENOMEM;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/power/supply/ab8500_fg.c linux-libre-4.14.155-gnu/drivers/power/supply/ab8500_fg.c
--- linux-libre-4.14.154-gnu/drivers/power/supply/ab8500_fg.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/power/supply/ab8500_fg.c	2019-11-20 12:00:54.000000000 -0500
@@ -2437,17 +2437,14 @@ static ssize_t charge_full_store(struct
 				 size_t count)
 {
 	unsigned long charge_full;
-	ssize_t ret;
+	int ret;
 
 	ret = kstrtoul(buf, 10, &charge_full);
+	if (ret)
+		return ret;
 
-	dev_dbg(di->dev, "Ret %zd charge_full %lu", ret, charge_full);
-
-	if (!ret) {
-		di->bat_cap.max_mah = (int) charge_full;
-		ret = count;
-	}
-	return ret;
+	di->bat_cap.max_mah = (int) charge_full;
+	return count;
 }
 
 static ssize_t charge_now_show(struct ab8500_fg *di, char *buf)
@@ -2459,20 +2456,16 @@ static ssize_t charge_now_store(struct a
 				 size_t count)
 {
 	unsigned long charge_now;
-	ssize_t ret;
+	int ret;
 
 	ret = kstrtoul(buf, 10, &charge_now);
+	if (ret)
+		return ret;
 
-	dev_dbg(di->dev, "Ret %zd charge_now %lu was %d",
-		ret, charge_now, di->bat_cap.prev_mah);
-
-	if (!ret) {
-		di->bat_cap.user_mah = (int) charge_now;
-		di->flags.user_cap = true;
-		ret = count;
-		queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
-	}
-	return ret;
+	di->bat_cap.user_mah = (int) charge_now;
+	di->flags.user_cap = true;
+	queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
+	return count;
 }
 
 static struct ab8500_fg_sysfs_entry charge_full_attr =
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/power/supply/max8998_charger.c linux-libre-4.14.155-gnu/drivers/power/supply/max8998_charger.c
--- linux-libre-4.14.154-gnu/drivers/power/supply/max8998_charger.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/power/supply/max8998_charger.c	2019-11-20 12:00:54.000000000 -0500
@@ -85,7 +85,7 @@ static const struct power_supply_desc ma
 static int max8998_battery_probe(struct platform_device *pdev)
 {
 	struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent);
-	struct max8998_platform_data *pdata = dev_get_platdata(iodev->dev);
+	struct max8998_platform_data *pdata = iodev->pdata;
 	struct power_supply_config psy_cfg = {};
 	struct max8998_battery_data *max8998;
 	struct i2c_client *i2c;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/power/supply/twl4030_charger.c linux-libre-4.14.155-gnu/drivers/power/supply/twl4030_charger.c
--- linux-libre-4.14.154-gnu/drivers/power/supply/twl4030_charger.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/power/supply/twl4030_charger.c	2019-11-20 12:00:54.000000000 -0500
@@ -420,7 +420,8 @@ static void twl4030_current_worker(struc
 
 	if (v < USB_MIN_VOLT) {
 		/* Back up and stop adjusting. */
-		bci->usb_cur -= USB_CUR_STEP;
+		if (bci->usb_cur >= USB_CUR_STEP)
+			bci->usb_cur -= USB_CUR_STEP;
 		bci->usb_cur_target = bci->usb_cur;
 	} else if (bci->usb_cur >= bci->usb_cur_target ||
 		   bci->usb_cur + USB_CUR_STEP > USB_MAX_CURRENT) {
@@ -439,6 +440,7 @@ static void twl4030_current_worker(struc
 static int twl4030_charger_enable_usb(struct twl4030_bci *bci, bool enable)
 {
 	int ret;
+	u32 reg;
 
 	if (bci->usb_mode == CHARGE_OFF)
 		enable = false;
@@ -452,14 +454,38 @@ static int twl4030_charger_enable_usb(st
 			bci->usb_enabled = 1;
 		}
 
-		if (bci->usb_mode == CHARGE_AUTO)
+		if (bci->usb_mode == CHARGE_AUTO) {
+			/* Enable interrupts now. */
+			reg = ~(u32)(TWL4030_ICHGLOW | TWL4030_ICHGEOC |
+					TWL4030_TBATOR2 | TWL4030_TBATOR1 |
+					TWL4030_BATSTS);
+			ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, reg,
+				       TWL4030_INTERRUPTS_BCIIMR1A);
+			if (ret < 0) {
+				dev_err(bci->dev,
+					"failed to unmask interrupts: %d\n",
+					ret);
+				return ret;
+			}
 			/* forcing the field BCIAUTOUSB (BOOT_BCI[1]) to 1 */
 			ret = twl4030_clear_set_boot_bci(0, TWL4030_BCIAUTOUSB);
+		}
 
 		/* forcing USBFASTMCHG(BCIMFSTS4[2]) to 1 */
 		ret = twl4030_clear_set(TWL_MODULE_MAIN_CHARGE, 0,
 			TWL4030_USBFASTMCHG, TWL4030_BCIMFSTS4);
 		if (bci->usb_mode == CHARGE_LINEAR) {
+			/* Enable interrupts now. */
+			reg = ~(u32)(TWL4030_ICHGLOW | TWL4030_TBATOR2 |
+					TWL4030_TBATOR1 | TWL4030_BATSTS);
+			ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, reg,
+				       TWL4030_INTERRUPTS_BCIIMR1A);
+			if (ret < 0) {
+				dev_err(bci->dev,
+					"failed to unmask interrupts: %d\n",
+					ret);
+				return ret;
+			}
 			twl4030_clear_set_boot_bci(TWL4030_BCIAUTOAC|TWL4030_CVENAC, 0);
 			/* Watch dog key: WOVF acknowledge */
 			ret = twl_i2c_write_u8(TWL_MODULE_MAIN_CHARGE, 0x33,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/remoteproc/da8xx_remoteproc.c linux-libre-4.14.155-gnu/drivers/remoteproc/da8xx_remoteproc.c
--- linux-libre-4.14.154-gnu/drivers/remoteproc/da8xx_remoteproc.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/remoteproc/da8xx_remoteproc.c	2019-11-20 12:00:54.000000000 -0500
@@ -207,7 +207,7 @@ static int da8xx_rproc_get_internal_memo
 				res->start & DA8XX_RPROC_LOCAL_ADDRESS_MASK;
 		drproc->mem[i].size = resource_size(res);
 
-		dev_dbg(dev, "memory %8s: bus addr %pa size 0x%x va %p da 0x%x\n",
+		dev_dbg(dev, "memory %8s: bus addr %pa size 0x%zx va %p da 0x%x\n",
 			mem_names[i], &drproc->mem[i].bus_addr,
 			drproc->mem[i].size, drproc->mem[i].cpu_addr,
 			drproc->mem[i].dev_addr);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/rtc/rtc-armada38x.c linux-libre-4.14.155-gnu/drivers/rtc/rtc-armada38x.c
--- linux-libre-4.14.154-gnu/drivers/rtc/rtc-armada38x.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/rtc/rtc-armada38x.c	2019-11-20 12:00:54.000000000 -0500
@@ -390,7 +390,6 @@ MODULE_DEVICE_TABLE(of, armada38x_rtc_of
 
 static __init int armada38x_rtc_probe(struct platform_device *pdev)
 {
-	const struct rtc_class_ops *ops;
 	struct resource *res;
 	struct armada38x_rtc *rtc;
 	const struct of_device_id *match;
@@ -427,6 +426,11 @@ static __init int armada38x_rtc_probe(st
 		dev_err(&pdev->dev, "no irq\n");
 		return rtc->irq;
 	}
+
+	rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev);
+	if (IS_ERR(rtc->rtc_dev))
+		return PTR_ERR(rtc->rtc_dev);
+
 	if (devm_request_irq(&pdev->dev, rtc->irq, armada38x_rtc_alarm_irq,
 				0, pdev->name, rtc) < 0) {
 		dev_warn(&pdev->dev, "Interrupt not available.\n");
@@ -436,28 +440,24 @@ static __init int armada38x_rtc_probe(st
 
 	if (rtc->irq != -1) {
 		device_init_wakeup(&pdev->dev, 1);
-		ops = &armada38x_rtc_ops;
+		rtc->rtc_dev->ops = &armada38x_rtc_ops;
 	} else {
 		/*
 		 * If there is no interrupt available then we can't
 		 * use the alarm
 		 */
-		ops = &armada38x_rtc_ops_noirq;
+		rtc->rtc_dev->ops = &armada38x_rtc_ops_noirq;
 	}
 	rtc->data = (struct armada38x_rtc_data *)match->data;
 
-
 	/* Update RTC-MBUS bridge timing parameters */
 	rtc->data->update_mbus_timing(rtc);
 
-	rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name,
-						ops, THIS_MODULE);
-	if (IS_ERR(rtc->rtc_dev)) {
-		ret = PTR_ERR(rtc->rtc_dev);
+	ret = rtc_register_device(rtc->rtc_dev);
+	if (ret)
 		dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret);
-		return ret;
-	}
-	return 0;
+
+	return ret;
 }
 
 #ifdef CONFIG_PM_SLEEP
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/rtc/rtc-mt6397.c linux-libre-4.14.155-gnu/drivers/rtc/rtc-mt6397.c
--- linux-libre-4.14.154-gnu/drivers/rtc/rtc-mt6397.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/rtc/rtc-mt6397.c	2019-11-20 12:00:54.000000000 -0500
@@ -333,6 +333,10 @@ static int mtk_rtc_probe(struct platform
 
 	platform_set_drvdata(pdev, rtc);
 
+	rtc->rtc_dev = devm_rtc_allocate_device(rtc->dev);
+	if (IS_ERR(rtc->rtc_dev))
+		return PTR_ERR(rtc->rtc_dev);
+
 	ret = request_threaded_irq(rtc->irq, NULL,
 				   mtk_rtc_irq_handler_thread,
 				   IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
@@ -345,11 +349,11 @@ static int mtk_rtc_probe(struct platform
 
 	device_init_wakeup(&pdev->dev, 1);
 
-	rtc->rtc_dev = rtc_device_register("mt6397-rtc", &pdev->dev,
-					   &mtk_rtc_ops, THIS_MODULE);
-	if (IS_ERR(rtc->rtc_dev)) {
+	rtc->rtc_dev->ops = &mtk_rtc_ops;
+
+	ret = rtc_register_device(rtc->rtc_dev);
+	if (ret) {
 		dev_err(&pdev->dev, "register rtc device failed\n");
-		ret = PTR_ERR(rtc->rtc_dev);
 		goto out_free_irq;
 	}
 
@@ -366,7 +370,6 @@ static int mtk_rtc_remove(struct platfor
 {
 	struct mt6397_rtc *rtc = platform_get_drvdata(pdev);
 
-	rtc_device_unregister(rtc->rtc_dev);
 	free_irq(rtc->irq, rtc->rtc_dev);
 	irq_dispose_mapping(rtc->irq);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/rtc/rtc-pl030.c linux-libre-4.14.155-gnu/drivers/rtc/rtc-pl030.c
--- linux-libre-4.14.154-gnu/drivers/rtc/rtc-pl030.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/rtc/rtc-pl030.c	2019-11-20 12:00:54.000000000 -0500
@@ -112,6 +112,13 @@ static int pl030_probe(struct amba_devic
 		goto err_rtc;
 	}
 
+	rtc->rtc = devm_rtc_allocate_device(&dev->dev);
+	if (IS_ERR(rtc->rtc)) {
+		ret = PTR_ERR(rtc->rtc);
+		goto err_rtc;
+	}
+
+	rtc->rtc->ops = &pl030_ops;
 	rtc->base = ioremap(dev->res.start, resource_size(&dev->res));
 	if (!rtc->base) {
 		ret = -ENOMEM;
@@ -128,12 +135,9 @@ static int pl030_probe(struct amba_devic
 	if (ret)
 		goto err_irq;
 
-	rtc->rtc = rtc_device_register("pl030", &dev->dev, &pl030_ops,
-				       THIS_MODULE);
-	if (IS_ERR(rtc->rtc)) {
-		ret = PTR_ERR(rtc->rtc);
+	ret = rtc_register_device(rtc->rtc);
+	if (ret)
 		goto err_reg;
-	}
 
 	return 0;
 
@@ -154,7 +158,6 @@ static int pl030_remove(struct amba_devi
 	writel(0, rtc->base + RTC_CR);
 
 	free_irq(dev->irq[0], rtc);
-	rtc_device_unregister(rtc->rtc);
 	iounmap(rtc->base);
 	amba_release_regions(dev);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/rtc/rtc-rv8803.c linux-libre-4.14.155-gnu/drivers/rtc/rtc-rv8803.c
--- linux-libre-4.14.154-gnu/drivers/rtc/rtc-rv8803.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/rtc/rtc-rv8803.c	2019-11-20 12:00:54.000000000 -0500
@@ -622,7 +622,7 @@ MODULE_DEVICE_TABLE(i2c, rv8803_id);
 static const struct of_device_id rv8803_of_match[] = {
 	{
 		.compatible = "microcrystal,rv8803",
-		.data = (void *)rx_8900
+		.data = (void *)rv_8803
 	},
 	{
 		.compatible = "epson,rx8900",
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/s390/net/qeth_l2_main.c linux-libre-4.14.155-gnu/drivers/s390/net/qeth_l2_main.c
--- linux-libre-4.14.154-gnu/drivers/s390/net/qeth_l2_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/s390/net/qeth_l2_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -869,7 +869,10 @@ static int __qeth_l2_open(struct net_dev
 
 	if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) {
 		napi_enable(&card->napi);
+		local_bh_disable();
 		napi_schedule(&card->napi);
+		/* kick-start the NAPI softirq: */
+		local_bh_enable();
 	} else
 		rc = -EIO;
 	return rc;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/s390/net/qeth_l3_main.c linux-libre-4.14.155-gnu/drivers/s390/net/qeth_l3_main.c
--- linux-libre-4.14.154-gnu/drivers/s390/net/qeth_l3_main.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/s390/net/qeth_l3_main.c	2019-11-20 12:00:54.000000000 -0500
@@ -2849,7 +2849,10 @@ static int __qeth_l3_open(struct net_dev
 
 	if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) {
 		napi_enable(&card->napi);
+		local_bh_disable();
 		napi_schedule(&card->napi);
+		/* kick-start the NAPI softirq: */
+		local_bh_enable();
 	} else
 		rc = -EIO;
 	return rc;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/libsas/sas_expander.c linux-libre-4.14.155-gnu/drivers/scsi/libsas/sas_expander.c
--- linux-libre-4.14.154-gnu/drivers/scsi/libsas/sas_expander.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/libsas/sas_expander.c	2019-11-20 12:00:54.000000000 -0500
@@ -2060,14 +2060,11 @@ static int sas_rediscover_dev(struct dom
 		return res;
 	}
 
-	/* delete the old link */
-	if (SAS_ADDR(phy->attached_sas_addr) &&
-	    SAS_ADDR(sas_addr) != SAS_ADDR(phy->attached_sas_addr)) {
-		SAS_DPRINTK("ex %016llx phy 0x%x replace %016llx\n",
-			    SAS_ADDR(dev->sas_addr), phy_id,
-			    SAS_ADDR(phy->attached_sas_addr));
-		sas_unregister_devs_sas_addr(dev, phy_id, last);
-	}
+	/* we always have to delete the old device when we went here */
+	SAS_DPRINTK("ex %016llx phy 0x%x replace %016llx\n",
+		    SAS_ADDR(dev->sas_addr), phy_id,
+		    SAS_ADDR(phy->attached_sas_addr));
+	sas_unregister_devs_sas_addr(dev, phy_id, last);
 
 	return sas_discover_new(dev, phy_id);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/lpfc/lpfc_nvme.c linux-libre-4.14.155-gnu/drivers/scsi/lpfc/lpfc_nvme.c
--- linux-libre-4.14.154-gnu/drivers/scsi/lpfc/lpfc_nvme.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/lpfc/lpfc_nvme.c	2019-11-20 12:00:54.000000000 -0500
@@ -144,7 +144,7 @@ lpfc_nvme_delete_queue(struct nvme_fc_lo
 	vport = lport->vport;
 
 	lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME,
-			"6001 ENTER.  lpfc_pnvme %p, qidx x%xi qhandle %p\n",
+			"6001 ENTER.  lpfc_pnvme %p, qidx x%x qhandle %p\n",
 			lport, qidx, handle);
 	kfree(handle);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/lpfc/lpfc_nvmet.c linux-libre-4.14.155-gnu/drivers/scsi/lpfc/lpfc_nvmet.c
--- linux-libre-4.14.154-gnu/drivers/scsi/lpfc/lpfc_nvmet.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/lpfc/lpfc_nvmet.c	2019-11-20 12:00:54.000000000 -0500
@@ -1078,15 +1078,14 @@ lpfc_nvmet_setup_io_context(struct lpfc_
 			idx = 0;
 	}
 
-	infop = phba->sli4_hba.nvmet_ctx_info;
-	for (j = 0; j < phba->cfg_nvmet_mrq; j++) {
-		for (i = 0; i < phba->sli4_hba.num_present_cpu; i++) {
+	for (i = 0; i < phba->sli4_hba.num_present_cpu; i++) {
+		for (j = 0; j < phba->cfg_nvmet_mrq; j++) {
+			infop = lpfc_get_ctx_list(phba, i, j);
 			lpfc_printf_log(phba, KERN_INFO, LOG_NVME | LOG_INIT,
 					"6408 TOTAL NVMET ctx for CPU %d "
 					"MRQ %d: cnt %d nextcpu %p\n",
 					i, j, infop->nvmet_ctx_list_cnt,
 					infop->nvmet_ctx_next_cpu);
-			infop++;
 		}
 	}
 	return 0;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/NCR5380.c linux-libre-4.14.155-gnu/drivers/scsi/NCR5380.c
--- linux-libre-4.14.154-gnu/drivers/scsi/NCR5380.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/NCR5380.c	2019-11-20 12:00:54.000000000 -0500
@@ -131,6 +131,7 @@
 
 static int do_abort(struct Scsi_Host *);
 static void do_reset(struct Scsi_Host *);
+static void bus_reset_cleanup(struct Scsi_Host *);
 
 /**
  * initialize_SCp - init the scsi pointer field
@@ -513,16 +514,15 @@ static void complete_cmd(struct Scsi_Hos
 
 	if (hostdata->sensing == cmd) {
 		/* Autosense processing ends here */
-		if ((cmd->result & 0xff) != SAM_STAT_GOOD) {
+		if (status_byte(cmd->result) != GOOD) {
 			scsi_eh_restore_cmnd(cmd, &hostdata->ses);
-			set_host_byte(cmd, DID_ERROR);
-		} else
+		} else {
 			scsi_eh_restore_cmnd(cmd, &hostdata->ses);
+			set_driver_byte(cmd, DRIVER_SENSE);
+		}
 		hostdata->sensing = NULL;
 	}
 
-	hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
-
 	cmd->scsi_done(cmd);
 }
 
@@ -886,7 +886,14 @@ static irqreturn_t __maybe_unused NCR538
 			/* Probably Bus Reset */
 			NCR5380_read(RESET_PARITY_INTERRUPT_REG);
 
-			dsprintk(NDEBUG_INTR, instance, "unknown interrupt\n");
+			if (sr & SR_RST) {
+				/* Certainly Bus Reset */
+				shost_printk(KERN_WARNING, instance,
+					     "bus reset interrupt\n");
+				bus_reset_cleanup(instance);
+			} else {
+				dsprintk(NDEBUG_INTR, instance, "unknown interrupt\n");
+			}
 #ifdef SUN3_SCSI_VME
 			dregs->csr |= CSR_DMA_ENABLE;
 #endif
@@ -904,20 +911,16 @@ static irqreturn_t __maybe_unused NCR538
 	return IRQ_RETVAL(handled);
 }
 
-/*
- * Function : int NCR5380_select(struct Scsi_Host *instance,
- * struct scsi_cmnd *cmd)
- *
- * Purpose : establishes I_T_L or I_T_L_Q nexus for new or existing command,
- * including ARBITRATION, SELECTION, and initial message out for
- * IDENTIFY and queue messages.
+/**
+ * NCR5380_select - attempt arbitration and selection for a given command
+ * @instance: the Scsi_Host instance
+ * @cmd: the scsi_cmnd to execute
  *
- * Inputs : instance - instantiation of the 5380 driver on which this
- * target lives, cmd - SCSI command to execute.
+ * This routine establishes an I_T_L nexus for a SCSI command. This involves
+ * ARBITRATION, SELECTION and MESSAGE OUT phases and an IDENTIFY message.
  *
- * Returns cmd if selection failed but should be retried,
- * NULL if selection failed and should not be retried, or
- * NULL if selection succeeded (hostdata->connected == cmd).
+ * Returns true if the operation should be retried.
+ * Returns false if it should not be retried.
  *
  * Side effects :
  * If bus busy, arbitration failed, etc, NCR5380_select() will exit
@@ -925,16 +928,15 @@ static irqreturn_t __maybe_unused NCR538
  * SELECT_ENABLE will be set appropriately, the NCR5380
  * will cease to drive any SCSI bus signals.
  *
- * If successful : I_T_L or I_T_L_Q nexus will be established,
- * instance->connected will be set to cmd.
+ * If successful : the I_T_L nexus will be established, and
+ * hostdata->connected will be set to cmd.
  * SELECT interrupt will be disabled.
  *
  * If failed (no target) : cmd->scsi_done() will be called, and the
  * cmd->result host byte set to DID_BAD_TARGET.
  */
 
-static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
-                                        struct scsi_cmnd *cmd)
+static bool NCR5380_select(struct Scsi_Host *instance, struct scsi_cmnd *cmd)
 	__releases(&hostdata->lock) __acquires(&hostdata->lock)
 {
 	struct NCR5380_hostdata *hostdata = shost_priv(instance);
@@ -942,6 +944,9 @@ static struct scsi_cmnd *NCR5380_select(
 	unsigned char *data;
 	int len;
 	int err;
+	bool ret = true;
+	bool can_disconnect = instance->irq != NO_IRQ &&
+			      cmd->cmnd[0] != REQUEST_SENSE;
 
 	NCR5380_dprint(NDEBUG_ARBITRATION, instance);
 	dsprintk(NDEBUG_ARBITRATION, instance, "starting arbitration, id = %d\n",
@@ -950,7 +955,7 @@ static struct scsi_cmnd *NCR5380_select(
 	/*
 	 * Arbitration and selection phases are slow and involve dropping the
 	 * lock, so we have to watch out for EH. An exception handler may
-	 * change 'selecting' to NULL. This function will then return NULL
+	 * change 'selecting' to NULL. This function will then return false
 	 * so that the caller will forget about 'cmd'. (During information
 	 * transfer phases, EH may change 'connected' to NULL.)
 	 */
@@ -986,7 +991,7 @@ static struct scsi_cmnd *NCR5380_select(
 	if (!hostdata->selecting) {
 		/* Command was aborted */
 		NCR5380_write(MODE_REG, MR_BASE);
-		return NULL;
+		return false;
 	}
 	if (err < 0) {
 		NCR5380_write(MODE_REG, MR_BASE);
@@ -1035,7 +1040,7 @@ static struct scsi_cmnd *NCR5380_select(
 	if (!hostdata->selecting) {
 		NCR5380_write(MODE_REG, MR_BASE);
 		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
-		return NULL;
+		return false;
 	}
 
 	dsprintk(NDEBUG_ARBITRATION, instance, "won arbitration\n");
@@ -1118,13 +1123,13 @@ static struct scsi_cmnd *NCR5380_select(
 
 		/* Can't touch cmd if it has been reclaimed by the scsi ML */
 		if (!hostdata->selecting)
-			return NULL;
+			return false;
 
 		cmd->result = DID_BAD_TARGET << 16;
 		complete_cmd(instance, cmd);
 		dsprintk(NDEBUG_SELECTION, instance,
 			"target did not respond within 250ms\n");
-		cmd = NULL;
+		ret = false;
 		goto out;
 	}
 
@@ -1156,12 +1161,12 @@ static struct scsi_cmnd *NCR5380_select(
 	}
 	if (!hostdata->selecting) {
 		do_abort(instance);
-		return NULL;
+		return false;
 	}
 
 	dsprintk(NDEBUG_SELECTION, instance, "target %d selected, going into MESSAGE OUT phase.\n",
 	         scmd_id(cmd));
-	tmp[0] = IDENTIFY(((instance->irq == NO_IRQ) ? 0 : 1), cmd->device->lun);
+	tmp[0] = IDENTIFY(can_disconnect, cmd->device->lun);
 
 	len = 1;
 	data = tmp;
@@ -1172,7 +1177,7 @@ static struct scsi_cmnd *NCR5380_select(
 		cmd->result = DID_ERROR << 16;
 		complete_cmd(instance, cmd);
 		dsprintk(NDEBUG_SELECTION, instance, "IDENTIFY message transfer failed\n");
-		cmd = NULL;
+		ret = false;
 		goto out;
 	}
 
@@ -1187,13 +1192,13 @@ static struct scsi_cmnd *NCR5380_select(
 
 	initialize_SCp(cmd);
 
-	cmd = NULL;
+	ret = false;
 
 out:
 	if (!hostdata->selecting)
 		return NULL;
 	hostdata->selecting = NULL;
-	return cmd;
+	return ret;
 }
 
 /*
@@ -1712,6 +1717,7 @@ static void NCR5380_information_transfer
 				cmd->result = DID_ERROR << 16;
 				complete_cmd(instance, cmd);
 				hostdata->connected = NULL;
+				hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
 				return;
 #endif
 			case PHASE_DATAIN:
@@ -1794,6 +1800,7 @@ static void NCR5380_information_transfer
 					         cmd, scmd_id(cmd), cmd->device->lun);
 
 					hostdata->connected = NULL;
+					hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
 
 					cmd->result &= ~0xffff;
 					cmd->result |= cmd->SCp.Status;
@@ -1953,6 +1960,7 @@ static void NCR5380_information_transfer
 				NCR5380_transfer_pio(instance, &phase, &len, &data);
 				if (msgout == ABORT) {
 					hostdata->connected = NULL;
+					hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
 					cmd->result = DID_ERROR << 16;
 					complete_cmd(instance, cmd);
 					maybe_release_dma_irq(instance);
@@ -2015,8 +2023,11 @@ static void NCR5380_reselect(struct Scsi
 	NCR5380_write(MODE_REG, MR_BASE);
 
 	target_mask = NCR5380_read(CURRENT_SCSI_DATA_REG) & ~(hostdata->id_mask);
-
-	dsprintk(NDEBUG_RESELECTION, instance, "reselect\n");
+	if (!target_mask || target_mask & (target_mask - 1)) {
+		shost_printk(KERN_WARNING, instance,
+			     "reselect: bad target_mask 0x%02x\n", target_mask);
+		return;
+	}
 
 	/*
 	 * At this point, we have detected that our SCSI ID is on the bus,
@@ -2030,6 +2041,7 @@ static void NCR5380_reselect(struct Scsi
 	NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_BSY);
 	if (NCR5380_poll_politely(hostdata,
 	                          STATUS_REG, SR_SEL, 0, 2 * HZ) < 0) {
+		shost_printk(KERN_ERR, instance, "reselect: !SEL timeout\n");
 		NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
 		return;
 	}
@@ -2041,6 +2053,10 @@ static void NCR5380_reselect(struct Scsi
 
 	if (NCR5380_poll_politely(hostdata,
 	                          STATUS_REG, SR_REQ, SR_REQ, 2 * HZ) < 0) {
+		if ((NCR5380_read(STATUS_REG) & (SR_BSY | SR_SEL)) == 0)
+			/* BUS FREE phase */
+			return;
+		shost_printk(KERN_ERR, instance, "reselect: REQ timeout\n");
 		do_abort(instance);
 		return;
 	}
@@ -2102,13 +2118,16 @@ static void NCR5380_reselect(struct Scsi
 		dsprintk(NDEBUG_RESELECTION | NDEBUG_QUEUES, instance,
 		         "reselect: removed %p from disconnected queue\n", tmp);
 	} else {
+		int target = ffs(target_mask) - 1;
+
 		shost_printk(KERN_ERR, instance, "target bitmask 0x%02x lun %d not in disconnected queue.\n",
 		             target_mask, lun);
 		/*
 		 * Since we have an established nexus that we can't do anything
 		 * with, we must abort it.
 		 */
-		do_abort(instance);
+		if (do_abort(instance) == 0)
+			hostdata->busy[target] &= ~(1 << lun);
 		return;
 	}
 
@@ -2273,15 +2292,16 @@ static int NCR5380_abort(struct scsi_cmn
 	if (list_del_cmd(&hostdata->autosense, cmd)) {
 		dsprintk(NDEBUG_ABORT, instance,
 		         "abort: removed %p from sense queue\n", cmd);
-		set_host_byte(cmd, DID_ERROR);
 		complete_cmd(instance, cmd);
 	}
 
 out:
 	if (result == FAILED)
 		dsprintk(NDEBUG_ABORT, instance, "abort: failed to abort %p\n", cmd);
-	else
+	else {
+		hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun);
 		dsprintk(NDEBUG_ABORT, instance, "abort: successfully aborted %p\n", cmd);
+	}
 
 	queue_work(hostdata->work_q, &hostdata->main_task);
 	maybe_release_dma_irq(instance);
@@ -2291,31 +2311,12 @@ out:
 }
 
 
-/**
- * NCR5380_host_reset - reset the SCSI host
- * @cmd: SCSI command undergoing EH
- *
- * Returns SUCCESS
- */
-
-static int NCR5380_host_reset(struct scsi_cmnd *cmd)
+static void bus_reset_cleanup(struct Scsi_Host *instance)
 {
-	struct Scsi_Host *instance = cmd->device->host;
 	struct NCR5380_hostdata *hostdata = shost_priv(instance);
 	int i;
-	unsigned long flags;
 	struct NCR5380_cmd *ncmd;
 
-	spin_lock_irqsave(&hostdata->lock, flags);
-
-#if (NDEBUG & NDEBUG_ANY)
-	scmd_printk(KERN_INFO, cmd, __func__);
-#endif
-	NCR5380_dprint(NDEBUG_ANY, instance);
-	NCR5380_dprint_phase(NDEBUG_ANY, instance);
-
-	do_reset(instance);
-
 	/* reset NCR registers */
 	NCR5380_write(MODE_REG, MR_BASE);
 	NCR5380_write(TARGET_COMMAND_REG, 0);
@@ -2327,11 +2328,6 @@ static int NCR5380_host_reset(struct scs
 	 * commands!
 	 */
 
-	if (list_del_cmd(&hostdata->unissued, cmd)) {
-		cmd->result = DID_RESET << 16;
-		cmd->scsi_done(cmd);
-	}
-
 	if (hostdata->selecting) {
 		hostdata->selecting->result = DID_RESET << 16;
 		complete_cmd(instance, hostdata->selecting);
@@ -2349,7 +2345,6 @@ static int NCR5380_host_reset(struct scs
 	list_for_each_entry(ncmd, &hostdata->autosense, list) {
 		struct scsi_cmnd *cmd = NCR5380_to_scmd(ncmd);
 
-		set_host_byte(cmd, DID_RESET);
 		cmd->scsi_done(cmd);
 	}
 	INIT_LIST_HEAD(&hostdata->autosense);
@@ -2366,6 +2361,41 @@ static int NCR5380_host_reset(struct scs
 
 	queue_work(hostdata->work_q, &hostdata->main_task);
 	maybe_release_dma_irq(instance);
+}
+
+/**
+ * NCR5380_host_reset - reset the SCSI host
+ * @cmd: SCSI command undergoing EH
+ *
+ * Returns SUCCESS
+ */
+
+static int NCR5380_host_reset(struct scsi_cmnd *cmd)
+{
+	struct Scsi_Host *instance = cmd->device->host;
+	struct NCR5380_hostdata *hostdata = shost_priv(instance);
+	unsigned long flags;
+	struct NCR5380_cmd *ncmd;
+
+	spin_lock_irqsave(&hostdata->lock, flags);
+
+#if (NDEBUG & NDEBUG_ANY)
+	shost_printk(KERN_INFO, instance, __func__);
+#endif
+	NCR5380_dprint(NDEBUG_ANY, instance);
+	NCR5380_dprint_phase(NDEBUG_ANY, instance);
+
+	list_for_each_entry(ncmd, &hostdata->unissued, list) {
+		struct scsi_cmnd *scmd = NCR5380_to_scmd(ncmd);
+
+		scmd->result = DID_RESET << 16;
+		scmd->scsi_done(scmd);
+	}
+	INIT_LIST_HEAD(&hostdata->unissued);
+
+	do_reset(instance);
+	bus_reset_cleanup(instance);
+
 	spin_unlock_irqrestore(&hostdata->lock, flags);
 
 	return SUCCESS;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/NCR5380.h linux-libre-4.14.155-gnu/drivers/scsi/NCR5380.h
--- linux-libre-4.14.154-gnu/drivers/scsi/NCR5380.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/NCR5380.h	2019-11-20 12:00:54.000000000 -0500
@@ -275,7 +275,7 @@ static irqreturn_t NCR5380_intr(int irq,
 static void NCR5380_main(struct work_struct *work);
 static const char *NCR5380_info(struct Scsi_Host *instance);
 static void NCR5380_reselect(struct Scsi_Host *instance);
-static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *, struct scsi_cmnd *);
+static bool NCR5380_select(struct Scsi_Host *, struct scsi_cmnd *);
 static int NCR5380_transfer_dma(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data);
 static int NCR5380_transfer_pio(struct Scsi_Host *instance, unsigned char *phase, int *count, unsigned char **data);
 static int NCR5380_poll_politely2(struct NCR5380_hostdata *,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm8001_hwi.c linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm8001_hwi.c
--- linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm8001_hwi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm8001_hwi.c	2019-11-20 12:00:54.000000000 -0500
@@ -1479,6 +1479,12 @@ u32 pm8001_mpi_msg_consume(struct pm8001
 		} else {
 			u32 producer_index;
 			void *pi_virt = circularQ->pi_virt;
+			/* spurious interrupt during setup if
+			 * kexec-ing and driver doing a doorbell access
+			 * with the pre-kexec oq interrupt setup
+			 */
+			if (!pi_virt)
+				break;
 			/* Update the producer index from SPC */
 			producer_index = pm8001_read_32(pi_virt);
 			circularQ->producer_index = cpu_to_le32(producer_index);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm8001_sas.c linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm8001_sas.c
--- linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm8001_sas.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm8001_sas.c	2019-11-20 12:00:54.000000000 -0500
@@ -374,6 +374,13 @@ static int pm8001_task_exec(struct sas_t
 		return 0;
 	}
 	pm8001_ha = pm8001_find_ha_by_dev(task->dev);
+	if (pm8001_ha->controller_fatal_error) {
+		struct task_status_struct *ts = &t->task_status;
+
+		ts->resp = SAS_TASK_UNDELIVERED;
+		t->task_done(t);
+		return 0;
+	}
 	PM8001_IO_DBG(pm8001_ha, pm8001_printk("pm8001_task_exec device \n "));
 	spin_lock_irqsave(&pm8001_ha->lock, flags);
 	do {
@@ -466,7 +473,7 @@ err_out:
 	dev_printk(KERN_ERR, pm8001_ha->dev, "pm8001 exec failed[%d]!\n", rc);
 	if (!sas_protocol_ata(t->task_proto))
 		if (n_elem)
-			dma_unmap_sg(pm8001_ha->dev, t->scatter, n_elem,
+			dma_unmap_sg(pm8001_ha->dev, t->scatter, t->num_scatter,
 				t->data_dir);
 out_done:
 	spin_unlock_irqrestore(&pm8001_ha->lock, flags);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm8001_sas.h linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm8001_sas.h
--- linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm8001_sas.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm8001_sas.h	2019-11-20 12:00:54.000000000 -0500
@@ -529,6 +529,7 @@ struct pm8001_hba_info {
 	u32			logging_level;
 	u32			fw_status;
 	u32			smp_exp_mode;
+	bool			controller_fatal_error;
 	const struct firmware 	*fw_image;
 	struct isr_param irq_vector[PM8001_MAX_MSIX_VEC];
 };
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm80xx_hwi.c linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm80xx_hwi.c
--- linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm80xx_hwi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm80xx_hwi.c	2019-11-20 12:00:54.000000000 -0500
@@ -572,6 +572,9 @@ static void update_main_config_table(str
 		pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size);
 	pm8001_mw32(address, MAIN_PCS_EVENT_LOG_OPTION,
 		pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity);
+	/* Update Fatal error interrupt vector */
+	pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt |=
+					((pm8001_ha->number_of_intr - 1) << 8);
 	pm8001_mw32(address, MAIN_FATAL_ERROR_INTERRUPT,
 		pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt);
 	pm8001_mw32(address, MAIN_EVENT_CRC_CHECK,
@@ -1099,6 +1102,9 @@ static int pm80xx_chip_init(struct pm800
 		return -EBUSY;
 	}
 
+	/* Initialize the controller fatal error flag */
+	pm8001_ha->controller_fatal_error = false;
+
 	/* Initialize pci space address eg: mpi offset */
 	init_pci_device_addresses(pm8001_ha);
 	init_default_table_values(pm8001_ha);
@@ -1207,13 +1213,17 @@ pm80xx_chip_soft_rst(struct pm8001_hba_i
 	u32 bootloader_state;
 	u32 ibutton0, ibutton1;
 
-	/* Check if MPI is in ready state to reset */
-	if (mpi_uninit_check(pm8001_ha) != 0) {
-		PM8001_FAIL_DBG(pm8001_ha,
-			pm8001_printk("MPI state is not ready\n"));
-		return -1;
+	/* Process MPI table uninitialization only if FW is ready */
+	if (!pm8001_ha->controller_fatal_error) {
+		/* Check if MPI is in ready state to reset */
+		if (mpi_uninit_check(pm8001_ha) != 0) {
+			regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1);
+			PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+				"MPI state is not ready scratch1 :0x%x\n",
+				regval));
+			return -1;
+		}
 	}
-
 	/* checked for reset register normal state; 0x0 */
 	regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET);
 	PM8001_INIT_DBG(pm8001_ha,
@@ -3717,6 +3727,46 @@ static void process_one_iomb(struct pm80
 	}
 }
 
+static void print_scratchpad_registers(struct pm8001_hba_info *pm8001_ha)
+{
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_SCRATCH_PAD_0: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_SCRATCH_PAD_1:0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_SCRATCH_PAD_2: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_SCRATCH_PAD_3: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_HOST_SCRATCH_PAD_0: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_0)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_HOST_SCRATCH_PAD_1: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_1)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_HOST_SCRATCH_PAD_2: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_2)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_HOST_SCRATCH_PAD_3: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_3)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_HOST_SCRATCH_PAD_4: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_4)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_HOST_SCRATCH_PAD_5: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_5)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_RSVD_SCRATCH_PAD_0: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_6)));
+	PM8001_FAIL_DBG(pm8001_ha,
+		pm8001_printk("MSGU_RSVD_SCRATCH_PAD_1: 0x%x\n",
+			pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_7)));
+}
+
 static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec)
 {
 	struct outbound_queue_table *circularQ;
@@ -3724,10 +3774,28 @@ static int process_oq(struct pm8001_hba_
 	u8 uninitialized_var(bc);
 	u32 ret = MPI_IO_STATUS_FAIL;
 	unsigned long flags;
+	u32 regval;
 
+	if (vec == (pm8001_ha->number_of_intr - 1)) {
+		regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1);
+		if ((regval & SCRATCH_PAD_MIPSALL_READY) !=
+					SCRATCH_PAD_MIPSALL_READY) {
+			pm8001_ha->controller_fatal_error = true;
+			PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
+				"Firmware Fatal error! Regval:0x%x\n", regval));
+			print_scratchpad_registers(pm8001_ha);
+			return ret;
+		}
+	}
 	spin_lock_irqsave(&pm8001_ha->lock, flags);
 	circularQ = &pm8001_ha->outbnd_q_tbl[vec];
 	do {
+		/* spurious interrupt during setup if kexec-ing and
+		 * driver doing a doorbell access w/ the pre-kexec oq
+		 * interrupt setup.
+		 */
+		if (!circularQ->pi_virt)
+			break;
 		ret = pm8001_mpi_msg_consume(pm8001_ha, circularQ, &pMsg1, &bc);
 		if (MPI_IO_STATUS_SUCCESS == ret) {
 			/* process the outbound message */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm80xx_hwi.h linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm80xx_hwi.h
--- linux-libre-4.14.154-gnu/drivers/scsi/pm8001/pm80xx_hwi.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/pm8001/pm80xx_hwi.h	2019-11-20 12:00:54.000000000 -0500
@@ -1288,6 +1288,9 @@ typedef struct SASProtocolTimerConfig SA
 #define SCRATCH_PAD_BOOT_LOAD_SUCCESS	0x0
 #define SCRATCH_PAD_IOP0_READY		0xC00
 #define SCRATCH_PAD_IOP1_READY		0x3000
+#define SCRATCH_PAD_MIPSALL_READY	(SCRATCH_PAD_IOP1_READY | \
+					SCRATCH_PAD_IOP0_READY | \
+					SCRATCH_PAD_RAAE_READY)
 
 /* boot loader state */
 #define SCRATCH_PAD1_BOOTSTATE_MASK		0x70	/* Bit 4-6 */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/qla2xxx/qla_gs.c linux-libre-4.14.155-gnu/drivers/scsi/qla2xxx/qla_gs.c
--- linux-libre-4.14.154-gnu/drivers/scsi/qla2xxx/qla_gs.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/qla2xxx/qla_gs.c	2019-11-20 12:00:54.000000000 -0500
@@ -3033,7 +3033,7 @@ static void qla24xx_async_gpsc_sp_done(v
 			ql_dbg(ql_dbg_disc, vha, 0x2019,
 			    "GPSC command unsupported, disabling query.\n");
 			ha->flags.gpsc_supported = 0;
-			res = QLA_SUCCESS;
+			goto done;
 		}
 	} else {
 		switch (be16_to_cpu(ct_rsp->rsp.gpsc.speed)) {
@@ -3066,13 +3066,13 @@ static void qla24xx_async_gpsc_sp_done(v
 		    be16_to_cpu(ct_rsp->rsp.gpsc.speeds),
 		    be16_to_cpu(ct_rsp->rsp.gpsc.speed));
 	}
-done:
 	memset(&ea, 0, sizeof(ea));
 	ea.event = FCME_GPSC_DONE;
 	ea.rc = res;
 	ea.fcport = fcport;
 	qla2x00_fcport_event_handler(vha, &ea);
 
+done:
 	sp->free(sp);
 }
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/qla2xxx/qla_isr.c linux-libre-4.14.155-gnu/drivers/scsi/qla2xxx/qla_isr.c
--- linux-libre-4.14.154-gnu/drivers/scsi/qla2xxx/qla_isr.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/qla2xxx/qla_isr.c	2019-11-20 12:00:54.000000000 -0500
@@ -2792,6 +2792,7 @@ qla2x00_error_entry(scsi_qla_host_t *vha
 	case ELS_IOCB_TYPE:
 	case ABORT_IOCB_TYPE:
 	case MBX_IOCB_TYPE:
+	default:
 		sp = qla2x00_get_sp_from_handle(vha, func, req, pkt);
 		if (sp) {
 			sp->done(sp, res);
@@ -2802,7 +2803,6 @@ qla2x00_error_entry(scsi_qla_host_t *vha
 	case ABTS_RESP_24XX:
 	case CTIO_TYPE7:
 	case CTIO_CRC2:
-	default:
 		return 1;
 	}
 fatal:
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/qla2xxx/qla_os.c linux-libre-4.14.155-gnu/drivers/scsi/qla2xxx/qla_os.c
--- linux-libre-4.14.154-gnu/drivers/scsi/qla2xxx/qla_os.c	2019-11-13 02:17:16.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/qla2xxx/qla_os.c	2019-11-20 14:07:19.000000000 -0500
@@ -5801,12 +5801,27 @@ qla2x00_do_dpc(void *data)
 		if (test_and_clear_bit
 		    (ISP_ABORT_NEEDED, &base_vha->dpc_flags) &&
 		    !test_bit(UNLOADING, &base_vha->dpc_flags)) {
+			bool do_reset = true;
 
-			ql_dbg(ql_dbg_dpc, base_vha, 0x4007,
-			    "ISP abort scheduled.\n");
-			if (!(test_and_set_bit(ABORT_ISP_ACTIVE,
-			    &base_vha->dpc_flags))) {
+			switch (ql2x_ini_mode) {
+			case QLA2XXX_INI_MODE_ENABLED:
+				break;
+			case QLA2XXX_INI_MODE_DISABLED:
+				if (!qla_tgt_mode_enabled(base_vha))
+					do_reset = false;
+				break;
+			case QLA2XXX_INI_MODE_DUAL:
+				if (!qla_dual_mode_enabled(base_vha))
+					do_reset = false;
+				break;
+			default:
+				break;
+			}
 
+			if (do_reset && !(test_and_set_bit(ABORT_ISP_ACTIVE,
+			    &base_vha->dpc_flags))) {
+				ql_dbg(ql_dbg_dpc, base_vha, 0x4007,
+				    "ISP abort scheduled.\n");
 				if (ha->isp_ops->abort_isp(base_vha)) {
 					/* failed. retry later */
 					set_bit(ISP_ABORT_NEEDED,
@@ -5814,10 +5829,9 @@ qla2x00_do_dpc(void *data)
 				}
 				clear_bit(ABORT_ISP_ACTIVE,
 						&base_vha->dpc_flags);
+				ql_dbg(ql_dbg_dpc, base_vha, 0x4008,
+				    "ISP abort end.\n");
 			}
-
-			ql_dbg(ql_dbg_dpc, base_vha, 0x4008,
-			    "ISP abort end.\n");
 		}
 
 		if (test_and_clear_bit(FCPORT_UPDATE_NEEDED,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/scsi_lib.c linux-libre-4.14.155-gnu/drivers/scsi/scsi_lib.c
--- linux-libre-4.14.154-gnu/drivers/scsi/scsi_lib.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/scsi_lib.c	2019-11-20 12:00:54.000000000 -0500
@@ -2277,7 +2277,8 @@ int scsi_mq_setup_tags(struct Scsi_Host
 {
 	unsigned int cmd_size, sgl_size;
 
-	sgl_size = scsi_mq_sgl_size(shost);
+	sgl_size = max_t(unsigned int, sizeof(struct scatterlist),
+			scsi_mq_sgl_size(shost));
 	cmd_size = sizeof(struct scsi_cmnd) + shost->hostt->cmd_size + sgl_size;
 	if (scsi_host_get_prot(shost))
 		cmd_size += sizeof(struct scsi_data_buffer) + sgl_size;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/scsi/sym53c8xx_2/sym_hipd.c linux-libre-4.14.155-gnu/drivers/scsi/sym53c8xx_2/sym_hipd.c
--- linux-libre-4.14.154-gnu/drivers/scsi/sym53c8xx_2/sym_hipd.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/scsi/sym53c8xx_2/sym_hipd.c	2019-11-20 12:00:54.000000000 -0500
@@ -4371,6 +4371,13 @@ static void sym_nego_rejected(struct sym
 	OUTB(np, HS_PRT, HS_BUSY);
 }
 
+#define sym_printk(lvl, tp, cp, fmt, v...) do { \
+	if (cp)							\
+		scmd_printk(lvl, cp->cmd, fmt, ##v);		\
+	else							\
+		starget_printk(lvl, tp->starget, fmt, ##v);	\
+} while (0)
+
 /*
  *  chip exception handler for programmed interrupts.
  */
@@ -4416,7 +4423,7 @@ static void sym_int_sir(struct sym_hcb *
 	 *  been selected with ATN.  We do not want to handle that.
 	 */
 	case SIR_SEL_ATN_NO_MSG_OUT:
-		scmd_printk(KERN_WARNING, cp->cmd,
+		sym_printk(KERN_WARNING, tp, cp,
 				"No MSG OUT phase after selection with ATN\n");
 		goto out_stuck;
 	/*
@@ -4424,7 +4431,7 @@ static void sym_int_sir(struct sym_hcb *
 	 *  having reselected the initiator.
 	 */
 	case SIR_RESEL_NO_MSG_IN:
-		scmd_printk(KERN_WARNING, cp->cmd,
+		sym_printk(KERN_WARNING, tp, cp,
 				"No MSG IN phase after reselection\n");
 		goto out_stuck;
 	/*
@@ -4432,7 +4439,7 @@ static void sym_int_sir(struct sym_hcb *
 	 *  an IDENTIFY.
 	 */
 	case SIR_RESEL_NO_IDENTIFY:
-		scmd_printk(KERN_WARNING, cp->cmd,
+		sym_printk(KERN_WARNING, tp, cp,
 				"No IDENTIFY after reselection\n");
 		goto out_stuck;
 	/*
@@ -4461,7 +4468,7 @@ static void sym_int_sir(struct sym_hcb *
 	case SIR_RESEL_ABORTED:
 		np->lastmsg = np->msgout[0];
 		np->msgout[0] = M_NOOP;
-		scmd_printk(KERN_WARNING, cp->cmd,
+		sym_printk(KERN_WARNING, tp, cp,
 			"message %x sent on bad reselection\n", np->lastmsg);
 		goto out;
 	/*
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/soc/imx/gpc.c linux-libre-4.14.155-gnu/drivers/soc/imx/gpc.c
--- linux-libre-4.14.154-gnu/drivers/soc/imx/gpc.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/soc/imx/gpc.c	2019-11-20 12:00:54.000000000 -0500
@@ -73,7 +73,7 @@ static int imx6_pm_domain_power_off(stru
 		return -EBUSY;
 
 	/* Read ISO and ISO2SW power down delays */
-	regmap_read(pd->regmap, pd->reg_offs + GPC_PGC_PUPSCR_OFFS, &val);
+	regmap_read(pd->regmap, pd->reg_offs + GPC_PGC_PDNSCR_OFFS, &val);
 	iso = val & 0x3f;
 	iso2sw = (val >> 8) & 0x3f;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/soc/qcom/wcnss_ctrl.c linux-libre-4.14.155-gnu/drivers/soc/qcom/wcnss_ctrl.c
--- linux-libre-4.14.154-gnu/drivers/soc/qcom/wcnss_ctrl.c	2019-11-13 02:22:09.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/soc/qcom/wcnss_ctrl.c	2019-11-20 14:12:03.000000000 -0500
@@ -281,7 +281,7 @@ struct rpmsg_endpoint *qcom_wcnss_open_c
 	struct rpmsg_channel_info chinfo;
 	struct wcnss_ctrl *_wcnss = wcnss;
 
-	strncpy(chinfo.name, name, sizeof(chinfo.name));
+	strscpy(chinfo.name, name, sizeof(chinfo.name));
 	chinfo.src = RPMSG_ADDR_ANY;
 	chinfo.dst = RPMSG_ADDR_ANY;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/spi/spi-mt65xx.c linux-libre-4.14.155-gnu/drivers/spi/spi-mt65xx.c
--- linux-libre-4.14.154-gnu/drivers/spi/spi-mt65xx.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/spi/spi-mt65xx.c	2019-11-20 12:00:54.000000000 -0500
@@ -98,6 +98,7 @@ struct mtk_spi {
 	struct clk *parent_clk, *sel_clk, *spi_clk;
 	struct spi_transfer *cur_transfer;
 	u32 xfer_len;
+	u32 num_xfered;
 	struct scatterlist *tx_sgl, *rx_sgl;
 	u32 tx_sgl_len, rx_sgl_len;
 	const struct mtk_spi_compatible *dev_comp;
@@ -385,6 +386,7 @@ static int mtk_spi_fifo_transfer(struct
 
 	mdata->cur_transfer = xfer;
 	mdata->xfer_len = min(MTK_SPI_MAX_FIFO_SIZE, xfer->len);
+	mdata->num_xfered = 0;
 	mtk_spi_prepare_transfer(master, xfer);
 	mtk_spi_setup_packet(master);
 
@@ -415,6 +417,7 @@ static int mtk_spi_dma_transfer(struct s
 	mdata->tx_sgl_len = 0;
 	mdata->rx_sgl_len = 0;
 	mdata->cur_transfer = xfer;
+	mdata->num_xfered = 0;
 
 	mtk_spi_prepare_transfer(master, xfer);
 
@@ -482,7 +485,7 @@ static int mtk_spi_setup(struct spi_devi
 
 static irqreturn_t mtk_spi_interrupt(int irq, void *dev_id)
 {
-	u32 cmd, reg_val, cnt, remainder;
+	u32 cmd, reg_val, cnt, remainder, len;
 	struct spi_master *master = dev_id;
 	struct mtk_spi *mdata = spi_master_get_devdata(master);
 	struct spi_transfer *trans = mdata->cur_transfer;
@@ -497,36 +500,38 @@ static irqreturn_t mtk_spi_interrupt(int
 		if (trans->rx_buf) {
 			cnt = mdata->xfer_len / 4;
 			ioread32_rep(mdata->base + SPI_RX_DATA_REG,
-				     trans->rx_buf, cnt);
+				     trans->rx_buf + mdata->num_xfered, cnt);
 			remainder = mdata->xfer_len % 4;
 			if (remainder > 0) {
 				reg_val = readl(mdata->base + SPI_RX_DATA_REG);
-				memcpy(trans->rx_buf + (cnt * 4),
-					&reg_val, remainder);
+				memcpy(trans->rx_buf +
+					mdata->num_xfered +
+					(cnt * 4),
+					&reg_val,
+					remainder);
 			}
 		}
 
-		trans->len -= mdata->xfer_len;
-		if (!trans->len) {
+		mdata->num_xfered += mdata->xfer_len;
+		if (mdata->num_xfered == trans->len) {
 			spi_finalize_current_transfer(master);
 			return IRQ_HANDLED;
 		}
 
-		if (trans->tx_buf)
-			trans->tx_buf += mdata->xfer_len;
-		if (trans->rx_buf)
-			trans->rx_buf += mdata->xfer_len;
-
-		mdata->xfer_len = min(MTK_SPI_MAX_FIFO_SIZE, trans->len);
+		len = trans->len - mdata->num_xfered;
+		mdata->xfer_len = min(MTK_SPI_MAX_FIFO_SIZE, len);
 		mtk_spi_setup_packet(master);
 
-		cnt = trans->len / 4;
-		iowrite32_rep(mdata->base + SPI_TX_DATA_REG, trans->tx_buf, cnt);
+		cnt = len / 4;
+		iowrite32_rep(mdata->base + SPI_TX_DATA_REG,
+				trans->tx_buf + mdata->num_xfered, cnt);
 
-		remainder = trans->len % 4;
+		remainder = len % 4;
 		if (remainder > 0) {
 			reg_val = 0;
-			memcpy(&reg_val, trans->tx_buf + (cnt * 4), remainder);
+			memcpy(&reg_val,
+				trans->tx_buf + (cnt * 4) + mdata->num_xfered,
+				remainder);
 			writel(reg_val, mdata->base + SPI_TX_DATA_REG);
 		}
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/spi/spi-pic32.c linux-libre-4.14.155-gnu/drivers/spi/spi-pic32.c
--- linux-libre-4.14.154-gnu/drivers/spi/spi-pic32.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/spi/spi-pic32.c	2019-11-20 12:00:54.000000000 -0500
@@ -320,7 +320,7 @@ static int pic32_spi_dma_transfer(struct
 	desc_rx = dmaengine_prep_slave_sg(master->dma_rx,
 					  xfer->rx_sg.sgl,
 					  xfer->rx_sg.nents,
-					  DMA_FROM_DEVICE,
+					  DMA_DEV_TO_MEM,
 					  DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
 	if (!desc_rx) {
 		ret = -EINVAL;
@@ -330,7 +330,7 @@ static int pic32_spi_dma_transfer(struct
 	desc_tx = dmaengine_prep_slave_sg(master->dma_tx,
 					  xfer->tx_sg.sgl,
 					  xfer->tx_sg.nents,
-					  DMA_TO_DEVICE,
+					  DMA_MEM_TO_DEV,
 					  DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
 	if (!desc_tx) {
 		ret = -EINVAL;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/tee/optee/core.c linux-libre-4.14.155-gnu/drivers/tee/optee/core.c
--- linux-libre-4.14.154-gnu/drivers/tee/optee/core.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/tee/optee/core.c	2019-11-20 12:00:54.000000000 -0500
@@ -590,7 +590,7 @@ static int __init optee_driver_init(void
 		return -ENODEV;
 
 	np = of_find_matching_node(fw_np, optee_match);
-	if (!np)
+	if (!np || !of_device_is_available(np))
 		return -ENODEV;
 
 	optee = optee_probe(np);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/tty/serial/mxs-auart.c linux-libre-4.14.155-gnu/drivers/tty/serial/mxs-auart.c
--- linux-libre-4.14.154-gnu/drivers/tty/serial/mxs-auart.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/tty/serial/mxs-auart.c	2019-11-20 12:00:54.000000000 -0500
@@ -1638,8 +1638,9 @@ static int mxs_auart_request_gpio_irq(st
 
 	/*
 	 * If something went wrong, rollback.
+	 * Be careful: i may be unsigned.
 	 */
-	while (err && (--i >= 0))
+	while (err && (i-- > 0))
 		if (irq[i] >= 0)
 			free_irq(irq[i], s);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/tty/serial/samsung.c linux-libre-4.14.155-gnu/drivers/tty/serial/samsung.c
--- linux-libre-4.14.154-gnu/drivers/tty/serial/samsung.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/tty/serial/samsung.c	2019-11-20 12:00:54.000000000 -0500
@@ -1922,7 +1922,11 @@ static int s3c24xx_serial_resume(struct
 
 	if (port) {
 		clk_prepare_enable(ourport->clk);
+		if (!IS_ERR(ourport->baudclk))
+			clk_prepare_enable(ourport->baudclk);
 		s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port));
+		if (!IS_ERR(ourport->baudclk))
+			clk_disable_unprepare(ourport->baudclk);
 		clk_disable_unprepare(ourport->clk);
 
 		uart_resume_port(&s3c24xx_uart_drv, port);
@@ -1945,7 +1949,11 @@ static int s3c24xx_serial_resume_noirq(s
 			if (rx_enabled(port))
 				uintm &= ~S3C64XX_UINTM_RXD_MSK;
 			clk_prepare_enable(ourport->clk);
+			if (!IS_ERR(ourport->baudclk))
+				clk_prepare_enable(ourport->baudclk);
 			wr_regl(port, S3C64XX_UINTM, uintm);
+			if (!IS_ERR(ourport->baudclk))
+				clk_disable_unprepare(ourport->baudclk);
 			clk_disable_unprepare(ourport->clk);
 		}
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/tty/serial/xilinx_uartps.c linux-libre-4.14.155-gnu/drivers/tty/serial/xilinx_uartps.c
--- linux-libre-4.14.154-gnu/drivers/tty/serial/xilinx_uartps.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/tty/serial/xilinx_uartps.c	2019-11-20 12:00:54.000000000 -0500
@@ -1342,24 +1342,11 @@ static struct uart_driver cdns_uart_uart
 static int cdns_uart_suspend(struct device *device)
 {
 	struct uart_port *port = dev_get_drvdata(device);
-	struct tty_struct *tty;
-	struct device *tty_dev;
-	int may_wake = 0;
+	int may_wake;
 
-	/* Get the tty which could be NULL so don't assume it's valid */
-	tty = tty_port_tty_get(&port->state->port);
-	if (tty) {
-		tty_dev = tty->dev;
-		may_wake = device_may_wakeup(tty_dev);
-		tty_kref_put(tty);
-	}
+	may_wake = device_may_wakeup(device);
 
-	/*
-	 * Call the API provided in serial_core.c file which handles
-	 * the suspend.
-	 */
-	uart_suspend_port(&cdns_uart_uart_driver, port);
-	if (!(console_suspend_enabled && !may_wake)) {
+	if (console_suspend_enabled && may_wake) {
 		unsigned long flags = 0;
 
 		spin_lock_irqsave(&port->lock, flags);
@@ -1374,7 +1361,11 @@ static int cdns_uart_suspend(struct devi
 		spin_unlock_irqrestore(&port->lock, flags);
 	}
 
-	return 0;
+	/*
+	 * Call the API provided in serial_core.c file which handles
+	 * the suspend.
+	 */
+	return uart_suspend_port(&cdns_uart_uart_driver, port);
 }
 
 /**
@@ -1388,17 +1379,9 @@ static int cdns_uart_resume(struct devic
 	struct uart_port *port = dev_get_drvdata(device);
 	unsigned long flags = 0;
 	u32 ctrl_reg;
-	struct tty_struct *tty;
-	struct device *tty_dev;
-	int may_wake = 0;
+	int may_wake;
 
-	/* Get the tty which could be NULL so don't assume it's valid */
-	tty = tty_port_tty_get(&port->state->port);
-	if (tty) {
-		tty_dev = tty->dev;
-		may_wake = device_may_wakeup(tty_dev);
-		tty_kref_put(tty);
-	}
+	may_wake = device_may_wakeup(device);
 
 	if (console_suspend_enabled && !may_wake) {
 		struct cdns_uart *cdns_uart = port->private_data;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/usb/chipidea/otg.c linux-libre-4.14.155-gnu/drivers/usb/chipidea/otg.c
--- linux-libre-4.14.154-gnu/drivers/usb/chipidea/otg.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/usb/chipidea/otg.c	2019-11-20 12:00:54.000000000 -0500
@@ -206,14 +206,17 @@ static void ci_otg_work(struct work_stru
 	}
 
 	pm_runtime_get_sync(ci->dev);
+
 	if (ci->id_event) {
 		ci->id_event = false;
 		ci_handle_id_switch(ci);
-	} else if (ci->b_sess_valid_event) {
+	}
+
+	if (ci->b_sess_valid_event) {
 		ci->b_sess_valid_event = false;
 		ci_handle_vbus_change(ci);
-	} else
-		dev_err(ci->dev, "unexpected event occurs at %s\n", __func__);
+	}
+
 	pm_runtime_put_sync(ci->dev);
 
 	enable_irq(ci->irq);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/usb/chipidea/usbmisc_imx.c linux-libre-4.14.155-gnu/drivers/usb/chipidea/usbmisc_imx.c
--- linux-libre-4.14.154-gnu/drivers/usb/chipidea/usbmisc_imx.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/usb/chipidea/usbmisc_imx.c	2019-11-20 12:00:54.000000000 -0500
@@ -343,6 +343,8 @@ static int usbmisc_imx6q_init(struct imx
 	} else if (data->oc_polarity == 1) {
 		/* High active */
 		reg &= ~(MX6_BM_OVER_CUR_DIS | MX6_BM_OVER_CUR_POLARITY);
+	} else {
+		reg &= ~(MX6_BM_OVER_CUR_DIS);
 	}
 	writel(reg, usbmisc->base + data->index * 4);
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/usb/gadget/function/uvc_configfs.c linux-libre-4.14.155-gnu/drivers/usb/gadget/function/uvc_configfs.c
--- linux-libre-4.14.154-gnu/drivers/usb/gadget/function/uvc_configfs.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/usb/gadget/function/uvc_configfs.c	2019-11-20 12:00:54.000000000 -0500
@@ -543,6 +543,7 @@ static int uvcg_control_class_allow_link
 unlock:
 	mutex_unlock(&opts->lock);
 out:
+	config_item_put(header);
 	mutex_unlock(su_mutex);
 	return ret;
 }
@@ -578,6 +579,7 @@ static void uvcg_control_class_drop_link
 unlock:
 	mutex_unlock(&opts->lock);
 out:
+	config_item_put(header);
 	mutex_unlock(su_mutex);
 }
 
@@ -763,6 +765,7 @@ static int uvcg_streaming_header_allow_l
 	format_ptr->fmt = target_fmt;
 	list_add_tail(&format_ptr->entry, &src_hdr->formats);
 	++src_hdr->num_fmt;
+	++target_fmt->linked;
 
 out:
 	mutex_unlock(&opts->lock);
@@ -800,6 +803,8 @@ static void uvcg_streaming_header_drop_l
 			break;
 		}
 
+	--target_fmt->linked;
+
 out:
 	mutex_unlock(&opts->lock);
 	mutex_unlock(su_mutex);
@@ -2037,6 +2042,7 @@ static int uvcg_streaming_class_allow_li
 unlock:
 	mutex_unlock(&opts->lock);
 out:
+	config_item_put(header);
 	mutex_unlock(su_mutex);
 	return ret;
 }
@@ -2077,6 +2083,7 @@ static void uvcg_streaming_class_drop_li
 unlock:
 	mutex_unlock(&opts->lock);
 out:
+	config_item_put(header);
 	mutex_unlock(su_mutex);
 }
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/usb/gadget/function/uvc_video.c linux-libre-4.14.155-gnu/drivers/usb/gadget/function/uvc_video.c
--- linux-libre-4.14.154-gnu/drivers/usb/gadget/function/uvc_video.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/usb/gadget/function/uvc_video.c	2019-11-20 12:00:54.000000000 -0500
@@ -129,6 +129,21 @@ uvc_video_encode_isoc(struct usb_request
  * Request handling
  */
 
+static int uvcg_video_ep_queue(struct uvc_video *video, struct usb_request *req)
+{
+	int ret;
+
+	ret = usb_ep_queue(video->ep, req, GFP_ATOMIC);
+	if (ret < 0) {
+		printk(KERN_INFO "Failed to queue request (%d).\n", ret);
+		/* Isochronous endpoints can't be halted. */
+		if (usb_endpoint_xfer_bulk(video->ep->desc))
+			usb_ep_set_halt(video->ep);
+	}
+
+	return ret;
+}
+
 /*
  * I somehow feel that synchronisation won't be easy to achieve here. We have
  * three events that control USB requests submission:
@@ -193,14 +208,13 @@ uvc_video_complete(struct usb_ep *ep, st
 
 	video->encode(req, video, buf);
 
-	if ((ret = usb_ep_queue(ep, req, GFP_ATOMIC)) < 0) {
-		printk(KERN_INFO "Failed to queue request (%d).\n", ret);
-		usb_ep_set_halt(ep);
-		spin_unlock_irqrestore(&video->queue.irqlock, flags);
+	ret = uvcg_video_ep_queue(video, req);
+	spin_unlock_irqrestore(&video->queue.irqlock, flags);
+
+	if (ret < 0) {
 		uvcg_queue_cancel(queue, 0);
 		goto requeue;
 	}
-	spin_unlock_irqrestore(&video->queue.irqlock, flags);
 
 	return;
 
@@ -320,15 +334,13 @@ int uvcg_video_pump(struct uvc_video *vi
 		video->encode(req, video, buf);
 
 		/* Queue the USB request */
-		ret = usb_ep_queue(video->ep, req, GFP_ATOMIC);
+		ret = uvcg_video_ep_queue(video, req);
+		spin_unlock_irqrestore(&queue->irqlock, flags);
+
 		if (ret < 0) {
-			printk(KERN_INFO "Failed to queue request (%d)\n", ret);
-			usb_ep_set_halt(video->ep);
-			spin_unlock_irqrestore(&queue->irqlock, flags);
 			uvcg_queue_cancel(queue, 0);
 			break;
 		}
-		spin_unlock_irqrestore(&queue->irqlock, flags);
 	}
 
 	spin_lock_irqsave(&video->req_lock, flags);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/usb/host/xhci-mtk-sch.c linux-libre-4.14.155-gnu/drivers/usb/host/xhci-mtk-sch.c
--- linux-libre-4.14.154-gnu/drivers/usb/host/xhci-mtk-sch.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/usb/host/xhci-mtk-sch.c	2019-11-20 12:00:54.000000000 -0500
@@ -122,7 +122,9 @@ static void setup_sch_info(struct usb_de
 		}
 
 		if (ep_type == ISOC_IN_EP || ep_type == ISOC_OUT_EP) {
-			if (esit_pkts <= sch_ep->esit)
+			if (sch_ep->esit == 1)
+				sch_ep->pkts = esit_pkts;
+			else if (esit_pkts <= sch_ep->esit)
 				sch_ep->pkts = 1;
 			else
 				sch_ep->pkts = roundup_pow_of_two(esit_pkts)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/vfio/pci/vfio_pci.c linux-libre-4.14.155-gnu/drivers/vfio/pci/vfio_pci.c
--- linux-libre-4.14.154-gnu/drivers/vfio/pci/vfio_pci.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/vfio/pci/vfio_pci.c	2019-11-20 12:00:54.000000000 -0500
@@ -433,10 +433,14 @@ static int vfio_pci_get_irq_count(struct
 {
 	if (irq_type == VFIO_PCI_INTX_IRQ_INDEX) {
 		u8 pin;
+
+		if (!IS_ENABLED(CONFIG_VFIO_PCI_INTX) ||
+		    vdev->nointx || vdev->pdev->is_virtfn)
+			return 0;
+
 		pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin);
-		if (IS_ENABLED(CONFIG_VFIO_PCI_INTX) && !vdev->nointx && pin)
-			return 1;
 
+		return pin ? 1 : 0;
 	} else if (irq_type == VFIO_PCI_MSI_IRQ_INDEX) {
 		u8 pos;
 		u16 flags;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/drivers/vfio/pci/vfio_pci_config.c linux-libre-4.14.155-gnu/drivers/vfio/pci/vfio_pci_config.c
--- linux-libre-4.14.154-gnu/drivers/vfio/pci/vfio_pci_config.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/drivers/vfio/pci/vfio_pci_config.c	2019-11-20 12:00:54.000000000 -0500
@@ -1180,8 +1180,10 @@ static int vfio_msi_cap_len(struct vfio_
 		return -ENOMEM;
 
 	ret = init_pci_cap_msi_perm(vdev->msi_perm, len, flags);
-	if (ret)
+	if (ret) {
+		kfree(vdev->msi_perm);
 		return ret;
+	}
 
 	return len;
 }
@@ -1610,6 +1612,15 @@ static int vfio_ecap_init(struct vfio_pc
 }
 
 /*
+ * Nag about hardware bugs, hopefully to have vendors fix them, but at least
+ * to collect a list of dependencies for the VF INTx pin quirk below.
+ */
+static const struct pci_device_id known_bogus_vf_intx_pin[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x270c) },
+	{}
+};
+
+/*
  * For each device we allocate a pci_config_map that indicates the
  * capability occupying each dword and thus the struct perm_bits we
  * use for read and write.  We also allocate a virtualized config
@@ -1674,6 +1685,24 @@ int vfio_config_init(struct vfio_pci_dev
 	if (pdev->is_virtfn) {
 		*(__le16 *)&vconfig[PCI_VENDOR_ID] = cpu_to_le16(pdev->vendor);
 		*(__le16 *)&vconfig[PCI_DEVICE_ID] = cpu_to_le16(pdev->device);
+
+		/*
+		 * Per SR-IOV spec rev 1.1, 3.4.1.18 the interrupt pin register
+		 * does not apply to VFs and VFs must implement this register
+		 * as read-only with value zero.  Userspace is not readily able
+		 * to identify whether a device is a VF and thus that the pin
+		 * definition on the device is bogus should it violate this
+		 * requirement.  We already virtualize the pin register for
+		 * other purposes, so we simply need to replace the bogus value
+		 * and consider VFs when we determine INTx IRQ count.
+		 */
+		if (vconfig[PCI_INTERRUPT_PIN] &&
+		    !pci_match_id(known_bogus_vf_intx_pin, pdev))
+			pci_warn(pdev,
+				 "Hardware bug: VF reports bogus INTx pin %d\n",
+				 vconfig[PCI_INTERRUPT_PIN]);
+
+		vconfig[PCI_INTERRUPT_PIN] = 0; /* Gratuitous for good VFs */
 	}
 
 	if (!IS_ENABLED(CONFIG_VFIO_PCI_INTX) || vdev->nointx)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/compat_ioctl.c linux-libre-4.14.155-gnu/fs/compat_ioctl.c
--- linux-libre-4.14.154-gnu/fs/compat_ioctl.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/compat_ioctl.c	2019-11-20 12:00:54.000000000 -0500
@@ -161,6 +161,7 @@ struct compat_video_event {
 		unsigned int frame_rate;
 	} u;
 };
+#define VIDEO_GET_EVENT32 _IOR('o', 28, struct compat_video_event)
 
 static int do_video_get_event(struct file *file,
 		unsigned int cmd, struct compat_video_event __user *up)
@@ -172,7 +173,7 @@ static int do_video_get_event(struct fil
 	if (kevent == NULL)
 		return -EFAULT;
 
-	err = do_ioctl(file, cmd, (unsigned long)kevent);
+	err = do_ioctl(file, VIDEO_GET_EVENT, (unsigned long)kevent);
 	if (!err) {
 		err  = convert_in_user(&kevent->type, &up->type);
 		err |= convert_in_user(&kevent->timestamp, &up->timestamp);
@@ -191,6 +192,7 @@ struct compat_video_still_picture {
         compat_uptr_t iFrame;
         int32_t size;
 };
+#define VIDEO_STILLPICTURE32 _IOW('o', 30, struct compat_video_still_picture)
 
 static int do_video_stillpicture(struct file *file,
 		unsigned int cmd, struct compat_video_still_picture __user *up)
@@ -213,7 +215,7 @@ static int do_video_stillpicture(struct
 	if (err)
 		return -EFAULT;
 
-	err = do_ioctl(file, cmd, (unsigned long) up_native);
+	err = do_ioctl(file, VIDEO_STILLPICTURE, (unsigned long) up_native);
 
 	return err;
 }
@@ -1476,9 +1478,9 @@ static long do_ioctl_trans(unsigned int
 		return rtc_ioctl(file, cmd, argp);
 
 	/* dvb */
-	case VIDEO_GET_EVENT:
+	case VIDEO_GET_EVENT32:
 		return do_video_get_event(file, cmd, argp);
-	case VIDEO_STILLPICTURE:
+	case VIDEO_STILLPICTURE32:
 		return do_video_stillpicture(file, cmd, argp);
 	case VIDEO_SET_SPU_PALETTE:
 		return do_video_set_spu_palette(file, cmd, argp);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/ecryptfs/inode.c linux-libre-4.14.155-gnu/fs/ecryptfs/inode.c
--- linux-libre-4.14.154-gnu/fs/ecryptfs/inode.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/ecryptfs/inode.c	2019-11-20 12:00:54.000000000 -0500
@@ -326,9 +326,9 @@ static int ecryptfs_i_size_read(struct d
 static struct dentry *ecryptfs_lookup_interpose(struct dentry *dentry,
 				     struct dentry *lower_dentry)
 {
-	struct inode *inode, *lower_inode = d_inode(lower_dentry);
+	struct path *path = ecryptfs_dentry_to_lower_path(dentry->d_parent);
+	struct inode *inode, *lower_inode;
 	struct ecryptfs_dentry_info *dentry_info;
-	struct vfsmount *lower_mnt;
 	int rc = 0;
 
 	dentry_info = kmem_cache_alloc(ecryptfs_dentry_info_cache, GFP_KERNEL);
@@ -340,16 +340,23 @@ static struct dentry *ecryptfs_lookup_in
 		return ERR_PTR(-ENOMEM);
 	}
 
-	lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent));
 	fsstack_copy_attr_atime(d_inode(dentry->d_parent),
-				d_inode(lower_dentry->d_parent));
+				d_inode(path->dentry));
 	BUG_ON(!d_count(lower_dentry));
 
 	ecryptfs_set_dentry_private(dentry, dentry_info);
-	dentry_info->lower_path.mnt = lower_mnt;
+	dentry_info->lower_path.mnt = mntget(path->mnt);
 	dentry_info->lower_path.dentry = lower_dentry;
 
-	if (d_really_is_negative(lower_dentry)) {
+	/*
+	 * negative dentry can go positive under us here - its parent is not
+	 * locked.  That's OK and that could happen just as we return from
+	 * ecryptfs_lookup() anyway.  Just need to be careful and fetch
+	 * ->d_inode only once - it's not stable here.
+	 */
+	lower_inode = READ_ONCE(lower_dentry->d_inode);
+
+	if (!lower_inode) {
 		/* We want to add because we couldn't find in lower */
 		d_add(dentry, NULL);
 		return NULL;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/f2fs/recovery.c linux-libre-4.14.155-gnu/fs/f2fs/recovery.c
--- linux-libre-4.14.154-gnu/fs/f2fs/recovery.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/f2fs/recovery.c	2019-11-20 12:00:54.000000000 -0500
@@ -201,6 +201,21 @@ static void recover_inode(struct inode *
 	char *name;
 
 	inode->i_mode = le16_to_cpu(raw->i_mode);
+	i_uid_write(inode, le32_to_cpu(raw->i_uid));
+	i_gid_write(inode, le32_to_cpu(raw->i_gid));
+
+	if (raw->i_inline & F2FS_EXTRA_ATTR) {
+		if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)->sb) &&
+			F2FS_FITS_IN_INODE(raw, le16_to_cpu(raw->i_extra_isize),
+								i_projid)) {
+			projid_t i_projid;
+
+			i_projid = (projid_t)le32_to_cpu(raw->i_projid);
+			F2FS_I(inode)->i_projid =
+				make_kprojid(&init_user_ns, i_projid);
+		}
+	}
+
 	f2fs_i_size_write(inode, le64_to_cpu(raw->i_size));
 	inode->i_atime.tv_sec = le64_to_cpu(raw->i_atime);
 	inode->i_ctime.tv_sec = le64_to_cpu(raw->i_ctime);
@@ -212,6 +227,8 @@ static void recover_inode(struct inode *
 	F2FS_I(inode)->i_advise = raw->i_advise;
 	F2FS_I(inode)->i_flags = le32_to_cpu(raw->i_flags);
 
+	f2fs_mark_inode_dirty_sync(inode, true);
+
 	if (file_enc_name(inode))
 		name = "<encrypted>";
 	else
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/f2fs/super.c linux-libre-4.14.155-gnu/fs/f2fs/super.c
--- linux-libre-4.14.154-gnu/fs/f2fs/super.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/f2fs/super.c	2019-11-20 12:00:54.000000000 -0500
@@ -2123,8 +2123,12 @@ static int init_percpu_info(struct f2fs_
 	if (err)
 		return err;
 
-	return percpu_counter_init(&sbi->total_valid_inode_count, 0,
+	err = percpu_counter_init(&sbi->total_valid_inode_count, 0,
 								GFP_KERNEL);
+	if (err)
+		percpu_counter_destroy(&sbi->alloc_valid_block_count);
+
+	return err;
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/fuse/control.c linux-libre-4.14.155-gnu/fs/fuse/control.c
--- linux-libre-4.14.154-gnu/fs/fuse/control.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/fuse/control.c	2019-11-20 12:00:54.000000000 -0500
@@ -107,7 +107,7 @@ static ssize_t fuse_conn_max_background_
 	if (!fc)
 		return 0;
 
-	val = fc->max_background;
+	val = READ_ONCE(fc->max_background);
 	fuse_conn_put(fc);
 
 	return fuse_conn_limit_read(file, buf, len, ppos, val);
@@ -144,7 +144,7 @@ static ssize_t fuse_conn_congestion_thre
 	if (!fc)
 		return 0;
 
-	val = fc->congestion_threshold;
+	val = READ_ONCE(fc->congestion_threshold);
 	fuse_conn_put(fc);
 
 	return fuse_conn_limit_read(file, buf, len, ppos, val);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/gfs2/rgrp.c linux-libre-4.14.155-gnu/fs/gfs2/rgrp.c
--- linux-libre-4.14.154-gnu/fs/gfs2/rgrp.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/gfs2/rgrp.c	2019-11-20 12:00:54.000000000 -0500
@@ -1201,7 +1201,7 @@ static int update_rgrp_lvb(struct gfs2_r
 	rl_flags = be32_to_cpu(rgd->rd_rgl->rl_flags);
 	rl_flags &= ~GFS2_RDF_MASK;
 	rgd->rd_flags &= GFS2_RDF_MASK;
-	rgd->rd_flags |= (rl_flags | GFS2_RDF_UPTODATE | GFS2_RDF_CHECK);
+	rgd->rd_flags |= (rl_flags | GFS2_RDF_CHECK);
 	if (rgd->rd_rgl->rl_unlinked == 0)
 		rgd->rd_flags &= ~GFS2_RDF_CHECK;
 	rgd->rd_free = be32_to_cpu(rgd->rd_rgl->rl_free);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/fs/kernfs/symlink.c linux-libre-4.14.155-gnu/fs/kernfs/symlink.c
--- linux-libre-4.14.154-gnu/fs/kernfs/symlink.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/fs/kernfs/symlink.c	2019-11-20 12:00:54.000000000 -0500
@@ -63,6 +63,9 @@ static int kernfs_get_target_path(struct
 		if (base == kn)
 			break;
 
+		if ((s - path) + 3 >= PATH_MAX)
+			return -ENAMETOOLONG;
+
 		strcpy(s, "../");
 		s += 3;
 		base = base->parent;
@@ -79,7 +82,7 @@ static int kernfs_get_target_path(struct
 	if (len < 2)
 		return -EINVAL;
 	len--;
-	if ((s - path) + len > PATH_MAX)
+	if ((s - path) + len >= PATH_MAX)
 		return -ENAMETOOLONG;
 
 	/* reverse fillup of target string from target to base */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/include/linux/cpufeature.h linux-libre-4.14.155-gnu/include/linux/cpufeature.h
--- linux-libre-4.14.154-gnu/include/linux/cpufeature.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/include/linux/cpufeature.h	2019-11-20 12:00:54.000000000 -0500
@@ -45,7 +45,7 @@
  * 'asm/cpufeature.h' of your favorite architecture.
  */
 #define module_cpu_feature_match(x, __initfunc)			\
-static struct cpu_feature const cpu_feature_match_ ## x[] =	\
+static struct cpu_feature const __maybe_unused cpu_feature_match_ ## x[] = \
 	{ { .feature = cpu_feature(x) }, { } };			\
 MODULE_DEVICE_TABLE(cpu, cpu_feature_match_ ## x);		\
 								\
diff -druNp --no-dereference linux-libre-4.14.154-gnu/include/linux/edac.h linux-libre-4.14.155-gnu/include/linux/edac.h
--- linux-libre-4.14.154-gnu/include/linux/edac.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/include/linux/edac.h	2019-11-20 12:00:54.000000000 -0500
@@ -17,6 +17,7 @@
 #include <linux/completion.h>
 #include <linux/workqueue.h>
 #include <linux/debugfs.h>
+#include <linux/numa.h>
 
 #define EDAC_DEVICE_NAME_LEN	31
 
@@ -667,6 +668,6 @@ struct mem_ctl_info {
 /*
  * Maximum number of memory controllers in the coherent fabric.
  */
-#define EDAC_MAX_MCS	16
+#define EDAC_MAX_MCS	2 * MAX_NUMNODES
 
 #endif
diff -druNp --no-dereference linux-libre-4.14.154-gnu/include/linux/intel-iommu.h linux-libre-4.14.155-gnu/include/linux/intel-iommu.h
--- linux-libre-4.14.154-gnu/include/linux/intel-iommu.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/include/linux/intel-iommu.h	2019-11-20 12:00:54.000000000 -0500
@@ -282,7 +282,8 @@ enum {
 #define QI_DEV_IOTLB_SID(sid)	((u64)((sid) & 0xffff) << 32)
 #define QI_DEV_IOTLB_QDEP(qdep)	(((qdep) & 0x1f) << 16)
 #define QI_DEV_IOTLB_ADDR(addr)	((u64)(addr) & VTD_PAGE_MASK)
-#define QI_DEV_IOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52))
+#define QI_DEV_IOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \
+				   ((u64)((pfsid >> 4) & 0xfff) << 52))
 #define QI_DEV_IOTLB_SIZE	1
 #define QI_DEV_IOTLB_MAX_INVS	32
 
@@ -307,7 +308,8 @@ enum {
 #define QI_DEV_EIOTLB_PASID(p)	(((u64)p) << 32)
 #define QI_DEV_EIOTLB_SID(sid)	((u64)((sid) & 0xffff) << 16)
 #define QI_DEV_EIOTLB_QDEP(qd)	((u64)((qd) & 0x1f) << 4)
-#define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | ((u64)(pfsid & 0xfff) << 52))
+#define QI_DEV_EIOTLB_PFSID(pfsid) (((u64)(pfsid & 0xf) << 12) | \
+				    ((u64)((pfsid >> 4) & 0xfff) << 52))
 #define QI_DEV_EIOTLB_MAX_INVS	32
 
 #define QI_PGRP_IDX(idx)	(((u64)(idx)) << 55)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/include/linux/libfdt_env.h linux-libre-4.14.155-gnu/include/linux/libfdt_env.h
--- linux-libre-4.14.154-gnu/include/linux/libfdt_env.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/include/linux/libfdt_env.h	2019-11-20 12:00:54.000000000 -0500
@@ -2,6 +2,7 @@
 #ifndef _LIBFDT_ENV_H
 #define _LIBFDT_ENV_H
 
+#include <linux/kernel.h>	/* For INT_MAX */
 #include <linux/string.h>
 
 #include <asm/byteorder.h>
diff -druNp --no-dereference linux-libre-4.14.154-gnu/include/net/llc.h linux-libre-4.14.155-gnu/include/net/llc.h
--- linux-libre-4.14.154-gnu/include/net/llc.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/include/net/llc.h	2019-11-20 12:00:54.000000000 -0500
@@ -66,6 +66,7 @@ struct llc_sap {
 	int sk_count;
 	struct hlist_nulls_head sk_laddr_hash[LLC_SK_LADDR_HASH_ENTRIES];
 	struct hlist_head sk_dev_hash[LLC_SK_DEV_HASH_ENTRIES];
+	struct rcu_head rcu;
 };
 
 static inline
diff -druNp --no-dereference linux-libre-4.14.154-gnu/include/trace/events/sched.h linux-libre-4.14.155-gnu/include/trace/events/sched.h
--- linux-libre-4.14.154-gnu/include/trace/events/sched.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/include/trace/events/sched.h	2019-11-20 12:00:54.000000000 -0500
@@ -169,9 +169,14 @@ TRACE_EVENT(sched_switch,
 
 		(__entry->prev_state & (TASK_REPORT_MAX - 1)) ?
 		  __print_flags(__entry->prev_state & (TASK_REPORT_MAX - 1), "|",
-				{ 0x01, "S" }, { 0x02, "D" }, { 0x04, "T" },
-				{ 0x08, "t" }, { 0x10, "X" }, { 0x20, "Z" },
-				{ 0x40, "P" }, { 0x80, "I" }) :
+				{ TASK_INTERRUPTIBLE, "S" },
+				{ TASK_UNINTERRUPTIBLE, "D" },
+				{ __TASK_STOPPED, "T" },
+				{ __TASK_TRACED, "t" },
+				{ EXIT_DEAD, "X" },
+				{ EXIT_ZOMBIE, "Z" },
+				{ TASK_PARKED, "P" },
+				{ TASK_DEAD, "I" }) :
 		  "R",
 
 		__entry->prev_state & TASK_REPORT_MAX ? "+" : "",
diff -druNp --no-dereference linux-libre-4.14.154-gnu/kernel/events/uprobes.c linux-libre-4.14.155-gnu/kernel/events/uprobes.c
--- linux-libre-4.14.154-gnu/kernel/events/uprobes.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/kernel/events/uprobes.c	2019-11-20 12:00:54.000000000 -0500
@@ -1854,7 +1854,7 @@ static void handle_trampoline(struct pt_
 
  sigill:
 	uprobe_warn(current, "handle uretprobe, sending SIGILL.");
-	force_sig_info(SIGILL, SEND_SIG_FORCED, current);
+	force_sig(SIGILL, current);
 
 }
 
@@ -1970,7 +1970,7 @@ static void handle_singlestep(struct upr
 
 	if (unlikely(err)) {
 		uprobe_warn(current, "execute the probed insn, sending SIGILL.");
-		force_sig_info(SIGILL, SEND_SIG_FORCED, current);
+		force_sig(SIGILL, current);
 	}
 }
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/kernel/kprobes.c linux-libre-4.14.155-gnu/kernel/kprobes.c
--- linux-libre-4.14.154-gnu/kernel/kprobes.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/kernel/kprobes.c	2019-11-20 12:00:54.000000000 -0500
@@ -544,8 +544,14 @@ static void do_free_cleaned_kprobes(void
 	struct optimized_kprobe *op, *tmp;
 
 	list_for_each_entry_safe(op, tmp, &freeing_list, list) {
-		BUG_ON(!kprobe_unused(&op->kp));
 		list_del_init(&op->list);
+		if (WARN_ON_ONCE(!kprobe_unused(&op->kp))) {
+			/*
+			 * This must not happen, but if there is a kprobe
+			 * still in use, keep it on kprobes hash list.
+			 */
+			continue;
+		}
 		free_aggr_kprobe(&op->kp);
 	}
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/kernel/signal.c linux-libre-4.14.155-gnu/kernel/signal.c
--- linux-libre-4.14.154-gnu/kernel/signal.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/kernel/signal.c	2019-11-20 12:00:54.000000000 -0500
@@ -77,6 +77,10 @@ static int sig_task_ignored(struct task_
 
 	handler = sig_handler(t, sig);
 
+	/* SIGKILL and SIGSTOP may not be sent to the global init */
+	if (unlikely(is_global_init(t) && sig_kernel_only(sig)))
+		return true;
+
 	if (unlikely(t->signal->flags & SIGNAL_UNKILLABLE) &&
 	    handler == SIG_DFL && !(force && sig_kernel_only(sig)))
 		return 1;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/Makefile linux-libre-4.14.155-gnu/Makefile
--- linux-libre-4.14.154-gnu/Makefile	2019-11-13 01:50:45.000000000 -0500
+++ linux-libre-4.14.155-gnu/Makefile	2019-11-20 13:41:26.000000000 -0500
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 4
 PATCHLEVEL = 14
-SUBLEVEL = 154
+SUBLEVEL = 155
 EXTRAVERSION = -gnu
 NAME = Petit Gorille
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/mm/hugetlb_cgroup.c linux-libre-4.14.155-gnu/mm/hugetlb_cgroup.c
--- linux-libre-4.14.154-gnu/mm/hugetlb_cgroup.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/mm/hugetlb_cgroup.c	2019-11-20 12:00:54.000000000 -0500
@@ -196,7 +196,7 @@ int hugetlb_cgroup_charge_cgroup(int idx
 again:
 	rcu_read_lock();
 	h_cg = hugetlb_cgroup_from_task(current);
-	if (!css_tryget_online(&h_cg->css)) {
+	if (!css_tryget(&h_cg->css)) {
 		rcu_read_unlock();
 		goto again;
 	}
diff -druNp --no-dereference linux-libre-4.14.154-gnu/mm/memcontrol.c linux-libre-4.14.155-gnu/mm/memcontrol.c
--- linux-libre-4.14.154-gnu/mm/memcontrol.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/mm/memcontrol.c	2019-11-20 12:00:54.000000000 -0500
@@ -725,7 +725,7 @@ static struct mem_cgroup *get_mem_cgroup
 			if (unlikely(!memcg))
 				memcg = root_mem_cgroup;
 		}
-	} while (!css_tryget_online(&memcg->css));
+	} while (!css_tryget(&memcg->css));
 	rcu_read_unlock();
 	return memcg;
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/mm/shmem.c linux-libre-4.14.155-gnu/mm/shmem.c
--- linux-libre-4.14.154-gnu/mm/shmem.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/mm/shmem.c	2019-11-20 12:00:54.000000000 -0500
@@ -2664,7 +2664,7 @@ static void shmem_tag_pins(struct addres
 
 	spin_lock_irq(&mapping->tree_lock);
 	radix_tree_for_each_slot(slot, &mapping->page_tree, &iter, start) {
-		page = radix_tree_deref_slot(slot);
+		page = radix_tree_deref_slot_protected(slot, &mapping->tree_lock);
 		if (!page || radix_tree_exception(page)) {
 			if (radix_tree_deref_retry(page)) {
 				slot = radix_tree_iter_retry(&iter);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/bluetooth/l2cap_core.c linux-libre-4.14.155-gnu/net/bluetooth/l2cap_core.c
--- linux-libre-4.14.154-gnu/net/bluetooth/l2cap_core.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/bluetooth/l2cap_core.c	2019-11-20 12:00:54.000000000 -0500
@@ -6819,6 +6819,16 @@ static int l2cap_le_data_rcv(struct l2ca
 		chan->sdu_len = sdu_len;
 		chan->sdu_last_frag = skb;
 
+		/* Detect if remote is not able to use the selected MPS */
+		if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) {
+			u16 mps_len = skb->len + L2CAP_SDULEN_SIZE;
+
+			/* Adjust the number of credits */
+			BT_DBG("chan->mps %u -> %u", chan->mps, mps_len);
+			chan->mps = mps_len;
+			l2cap_chan_le_send_credits(chan);
+		}
+
 		return 0;
 	}
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/ipv4/gre_demux.c linux-libre-4.14.155-gnu/net/ipv4/gre_demux.c
--- linux-libre-4.14.154-gnu/net/ipv4/gre_demux.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/ipv4/gre_demux.c	2019-11-20 12:00:54.000000000 -0500
@@ -86,13 +86,14 @@ int gre_parse_header(struct sk_buff *skb
 
 	options = (__be32 *)(greh + 1);
 	if (greh->flags & GRE_CSUM) {
-		if (skb_checksum_simple_validate(skb)) {
+		if (!skb_checksum_simple_validate(skb)) {
+			skb_checksum_try_convert(skb, IPPROTO_GRE, 0,
+						 null_compute_pseudo);
+		} else if (csum_err) {
 			*csum_err = true;
 			return -EINVAL;
 		}
 
-		skb_checksum_try_convert(skb, IPPROTO_GRE, 0,
-					 null_compute_pseudo);
 		options++;
 	}
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/ipv4/ip_gre.c linux-libre-4.14.155-gnu/net/ipv4/ip_gre.c
--- linux-libre-4.14.154-gnu/net/ipv4/ip_gre.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/ipv4/ip_gre.c	2019-11-20 12:00:54.000000000 -0500
@@ -230,13 +230,10 @@ static void gre_err(struct sk_buff *skb,
 	const int type = icmp_hdr(skb)->type;
 	const int code = icmp_hdr(skb)->code;
 	struct tnl_ptk_info tpi;
-	bool csum_err = false;
 
-	if (gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IP),
-			     iph->ihl * 4) < 0) {
-		if (!csum_err)		/* ignore csum errors. */
-			return;
-	}
+	if (gre_parse_header(skb, &tpi, NULL, htons(ETH_P_IP),
+			     iph->ihl * 4) < 0)
+		return;
 
 	if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
 		ipv4_update_pmtu(skb, dev_net(skb->dev), info,
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c linux-libre-4.14.155-gnu/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c
--- linux-libre-4.14.154-gnu/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c	2019-11-20 12:00:54.000000000 -0500
@@ -105,12 +105,26 @@ static int masq_device_event(struct noti
 	return NOTIFY_DONE;
 }
 
+static int inet_cmp(struct nf_conn *ct, void *ptr)
+{
+	struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
+	struct net_device *dev = ifa->ifa_dev->dev;
+	struct nf_conntrack_tuple *tuple;
+
+	if (!device_cmp(ct, (void *)(long)dev->ifindex))
+		return 0;
+
+	tuple = &ct->tuplehash[IP_CT_DIR_REPLY].tuple;
+
+	return ifa->ifa_address == tuple->dst.u3.ip;
+}
+
 static int masq_inet_event(struct notifier_block *this,
 			   unsigned long event,
 			   void *ptr)
 {
 	struct in_device *idev = ((struct in_ifaddr *)ptr)->ifa_dev;
-	struct netdev_notifier_info info;
+	struct net *net = dev_net(idev->dev);
 
 	/* The masq_dev_notifier will catch the case of the device going
 	 * down.  So if the inetdev is dead and being destroyed we have
@@ -120,8 +134,10 @@ static int masq_inet_event(struct notifi
 	if (idev->dead)
 		return NOTIFY_DONE;
 
-	netdev_notifier_info_init(&info, idev->dev);
-	return masq_device_event(this, event, &info);
+	if (event == NETDEV_DOWN)
+		nf_ct_iterate_cleanup_net(net, inet_cmp, ptr, 0, 0);
+
+	return NOTIFY_DONE;
 }
 
 static struct notifier_block masq_dev_notifier = {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/ipv6/netfilter/nf_nat_masquerade_ipv6.c linux-libre-4.14.155-gnu/net/ipv6/netfilter/nf_nat_masquerade_ipv6.c
--- linux-libre-4.14.154-gnu/net/ipv6/netfilter/nf_nat_masquerade_ipv6.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/ipv6/netfilter/nf_nat_masquerade_ipv6.c	2019-11-20 12:00:54.000000000 -0500
@@ -88,18 +88,30 @@ static struct notifier_block masq_dev_no
 struct masq_dev_work {
 	struct work_struct work;
 	struct net *net;
+	struct in6_addr addr;
 	int ifindex;
 };
 
+static int inet_cmp(struct nf_conn *ct, void *work)
+{
+	struct masq_dev_work *w = (struct masq_dev_work *)work;
+	struct nf_conntrack_tuple *tuple;
+
+	if (!device_cmp(ct, (void *)(long)w->ifindex))
+		return 0;
+
+	tuple = &ct->tuplehash[IP_CT_DIR_REPLY].tuple;
+
+	return ipv6_addr_equal(&w->addr, &tuple->dst.u3.in6);
+}
+
 static void iterate_cleanup_work(struct work_struct *work)
 {
 	struct masq_dev_work *w;
-	long index;
 
 	w = container_of(work, struct masq_dev_work, work);
 
-	index = w->ifindex;
-	nf_ct_iterate_cleanup_net(w->net, device_cmp, (void *)index, 0, 0);
+	nf_ct_iterate_cleanup_net(w->net, inet_cmp, (void *)w, 0, 0);
 
 	put_net(w->net);
 	kfree(w);
@@ -148,6 +160,7 @@ static int masq_inet_event(struct notifi
 		INIT_WORK(&w->work, iterate_cleanup_work);
 		w->ifindex = dev->ifindex;
 		w->net = net;
+		w->addr = ifa->addr;
 		schedule_work(&w->work);
 
 		return NOTIFY_DONE;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/llc/llc_core.c linux-libre-4.14.155-gnu/net/llc/llc_core.c
--- linux-libre-4.14.154-gnu/net/llc/llc_core.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/llc/llc_core.c	2019-11-20 12:00:54.000000000 -0500
@@ -127,9 +127,7 @@ void llc_sap_close(struct llc_sap *sap)
 	list_del_rcu(&sap->node);
 	spin_unlock_bh(&llc_sap_list_lock);
 
-	synchronize_rcu();
-
-	kfree(sap);
+	kfree_rcu(sap, rcu);
 }
 
 static struct packet_type llc_packet_type __read_mostly = {
diff -druNp --no-dereference linux-libre-4.14.154-gnu/net/wireless/reg.c linux-libre-4.14.155-gnu/net/wireless/reg.c
--- linux-libre-4.14.154-gnu/net/wireless/reg.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/net/wireless/reg.c	2019-11-20 12:00:54.000000000 -0500
@@ -2703,8 +2703,54 @@ static void restore_regulatory_settings(
 	schedule_work(&reg_work);
 }
 
+static bool is_wiphy_all_set_reg_flag(enum ieee80211_regulatory_flags flag)
+{
+	struct cfg80211_registered_device *rdev;
+	struct wireless_dev *wdev;
+
+	list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
+		list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
+			wdev_lock(wdev);
+			if (!(wdev->wiphy->regulatory_flags & flag)) {
+				wdev_unlock(wdev);
+				return false;
+			}
+			wdev_unlock(wdev);
+		}
+	}
+
+	return true;
+}
+
 void regulatory_hint_disconnect(void)
 {
+	/* Restore of regulatory settings is not required when wiphy(s)
+	 * ignore IE from connected access point but clearance of beacon hints
+	 * is required when wiphy(s) supports beacon hints.
+	 */
+	if (is_wiphy_all_set_reg_flag(REGULATORY_COUNTRY_IE_IGNORE)) {
+		struct reg_beacon *reg_beacon, *btmp;
+
+		if (is_wiphy_all_set_reg_flag(REGULATORY_DISABLE_BEACON_HINTS))
+			return;
+
+		spin_lock_bh(&reg_pending_beacons_lock);
+		list_for_each_entry_safe(reg_beacon, btmp,
+					 &reg_pending_beacons, list) {
+			list_del(&reg_beacon->list);
+			kfree(reg_beacon);
+		}
+		spin_unlock_bh(&reg_pending_beacons_lock);
+
+		list_for_each_entry_safe(reg_beacon, btmp,
+					 &reg_beacon_list, list) {
+			list_del(&reg_beacon->list);
+			kfree(reg_beacon);
+		}
+
+		return;
+	}
+
 	pr_debug("All devices are disconnected, going to restore regulatory settings\n");
 	restore_regulatory_settings(false);
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/samples/bpf/sockex2_kern.c linux-libre-4.14.155-gnu/samples/bpf/sockex2_kern.c
--- linux-libre-4.14.154-gnu/samples/bpf/sockex2_kern.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/samples/bpf/sockex2_kern.c	2019-11-20 12:00:54.000000000 -0500
@@ -14,7 +14,7 @@ struct vlan_hdr {
 	__be16 h_vlan_encapsulated_proto;
 };
 
-struct bpf_flow_keys {
+struct flow_key_record {
 	__be32 src;
 	__be32 dst;
 	union {
@@ -59,7 +59,7 @@ static inline __u32 ipv6_addr_hash(struc
 }
 
 static inline __u64 parse_ip(struct __sk_buff *skb, __u64 nhoff, __u64 *ip_proto,
-			     struct bpf_flow_keys *flow)
+			     struct flow_key_record *flow)
 {
 	__u64 verlen;
 
@@ -83,7 +83,7 @@ static inline __u64 parse_ip(struct __sk
 }
 
 static inline __u64 parse_ipv6(struct __sk_buff *skb, __u64 nhoff, __u64 *ip_proto,
-			       struct bpf_flow_keys *flow)
+			       struct flow_key_record *flow)
 {
 	*ip_proto = load_byte(skb,
 			      nhoff + offsetof(struct ipv6hdr, nexthdr));
@@ -96,7 +96,8 @@ static inline __u64 parse_ipv6(struct __
 	return nhoff;
 }
 
-static inline bool flow_dissector(struct __sk_buff *skb, struct bpf_flow_keys *flow)
+static inline bool flow_dissector(struct __sk_buff *skb,
+				  struct flow_key_record *flow)
 {
 	__u64 nhoff = ETH_HLEN;
 	__u64 ip_proto;
@@ -198,7 +199,7 @@ struct bpf_map_def SEC("maps") hash_map
 SEC("socket2")
 int bpf_prog2(struct __sk_buff *skb)
 {
-	struct bpf_flow_keys flow = {};
+	struct flow_key_record flow = {};
 	struct pair *value;
 	u32 key;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/samples/bpf/sockex3_kern.c linux-libre-4.14.155-gnu/samples/bpf/sockex3_kern.c
--- linux-libre-4.14.154-gnu/samples/bpf/sockex3_kern.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/samples/bpf/sockex3_kern.c	2019-11-20 12:00:54.000000000 -0500
@@ -61,7 +61,7 @@ struct vlan_hdr {
 	__be16 h_vlan_encapsulated_proto;
 };
 
-struct bpf_flow_keys {
+struct flow_key_record {
 	__be32 src;
 	__be32 dst;
 	union {
@@ -88,7 +88,7 @@ static inline __u32 ipv6_addr_hash(struc
 }
 
 struct globals {
-	struct bpf_flow_keys flow;
+	struct flow_key_record flow;
 };
 
 struct bpf_map_def SEC("maps") percpu_map = {
@@ -114,14 +114,14 @@ struct pair {
 
 struct bpf_map_def SEC("maps") hash_map = {
 	.type = BPF_MAP_TYPE_HASH,
-	.key_size = sizeof(struct bpf_flow_keys),
+	.key_size = sizeof(struct flow_key_record),
 	.value_size = sizeof(struct pair),
 	.max_entries = 1024,
 };
 
 static void update_stats(struct __sk_buff *skb, struct globals *g)
 {
-	struct bpf_flow_keys key = g->flow;
+	struct flow_key_record key = g->flow;
 	struct pair *value;
 
 	value = bpf_map_lookup_elem(&hash_map, &key);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/samples/bpf/sockex3_user.c linux-libre-4.14.155-gnu/samples/bpf/sockex3_user.c
--- linux-libre-4.14.154-gnu/samples/bpf/sockex3_user.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/samples/bpf/sockex3_user.c	2019-11-20 12:00:54.000000000 -0500
@@ -13,7 +13,7 @@
 #define PARSE_IP_PROG_FD (prog_fd[0])
 #define PROG_ARRAY_FD (map_fd[0])
 
-struct bpf_flow_keys {
+struct flow_key_record {
 	__be32 src;
 	__be32 dst;
 	union {
@@ -64,7 +64,7 @@ int main(int argc, char **argv)
 	(void) f;
 
 	for (i = 0; i < 5; i++) {
-		struct bpf_flow_keys key = {}, next_key;
+		struct flow_key_record key = {}, next_key;
 		struct pair value;
 
 		sleep(1);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/core/oss/pcm_plugin.c linux-libre-4.14.155-gnu/sound/core/oss/pcm_plugin.c
--- linux-libre-4.14.154-gnu/sound/core/oss/pcm_plugin.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/core/oss/pcm_plugin.c	2019-11-20 12:00:54.000000000 -0500
@@ -111,7 +111,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_su
 		while (plugin->next) {
 			if (plugin->dst_frames)
 				frames = plugin->dst_frames(plugin, frames);
-			if (snd_BUG_ON(frames <= 0))
+			if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0))
 				return -ENXIO;
 			plugin = plugin->next;
 			err = snd_pcm_plugin_alloc(plugin, frames);
@@ -123,7 +123,7 @@ int snd_pcm_plug_alloc(struct snd_pcm_su
 		while (plugin->prev) {
 			if (plugin->src_frames)
 				frames = plugin->src_frames(plugin, frames);
-			if (snd_BUG_ON(frames <= 0))
+			if (snd_BUG_ON((snd_pcm_sframes_t)frames <= 0))
 				return -ENXIO;
 			plugin = plugin->prev;
 			err = snd_pcm_plugin_alloc(plugin, frames);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/core/seq/seq_system.c linux-libre-4.14.155-gnu/sound/core/seq/seq_system.c
--- linux-libre-4.14.154-gnu/sound/core/seq/seq_system.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/core/seq/seq_system.c	2019-11-20 12:00:54.000000000 -0500
@@ -123,6 +123,7 @@ int __init snd_seq_system_client_init(vo
 {
 	struct snd_seq_port_callback pcallbacks;
 	struct snd_seq_port_info *port;
+	int err;
 
 	port = kzalloc(sizeof(*port), GFP_KERNEL);
 	if (!port)
@@ -144,7 +145,10 @@ int __init snd_seq_system_client_init(vo
 	port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT;
 	port->addr.client = sysclient;
 	port->addr.port = SNDRV_SEQ_PORT_SYSTEM_TIMER;
-	snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port);
+	err = snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT,
+					port);
+	if (err < 0)
+		goto error_port;
 
 	/* register announcement port */
 	strcpy(port->name, "Announce");
@@ -154,16 +158,24 @@ int __init snd_seq_system_client_init(vo
 	port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT;
 	port->addr.client = sysclient;
 	port->addr.port = SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE;
-	snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT, port);
+	err = snd_seq_kernel_client_ctl(sysclient, SNDRV_SEQ_IOCTL_CREATE_PORT,
+					port);
+	if (err < 0)
+		goto error_port;
 	announce_port = port->addr.port;
 
 	kfree(port);
 	return 0;
+
+ error_port:
+	snd_seq_system_client_done();
+	kfree(port);
+	return err;
 }
 
 
 /* unregister our internal client */
-void __exit snd_seq_system_client_done(void)
+void snd_seq_system_client_done(void)
 {
 	int oldsysclient = sysclient;
 
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/pci/intel8x0m.c linux-libre-4.14.155-gnu/sound/pci/intel8x0m.c
--- linux-libre-4.14.154-gnu/sound/pci/intel8x0m.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/pci/intel8x0m.c	2019-11-20 12:00:54.000000000 -0500
@@ -1171,16 +1171,6 @@ static int snd_intel8x0m_create(struct s
 	}
 
  port_inited:
-	if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED,
-			KBUILD_MODNAME, chip)) {
-		dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
-		snd_intel8x0m_free(chip);
-		return -EBUSY;
-	}
-	chip->irq = pci->irq;
-	pci_set_master(pci);
-	synchronize_irq(chip->irq);
-
 	/* initialize offsets */
 	chip->bdbars_count = 2;
 	tbl = intel_regs;
@@ -1224,11 +1214,21 @@ static int snd_intel8x0m_create(struct s
 	chip->int_sta_reg = ICH_REG_GLOB_STA;
 	chip->int_sta_mask = int_sta_masks;
 
+	pci_set_master(pci);
+
 	if ((err = snd_intel8x0m_chip_init(chip, 1)) < 0) {
 		snd_intel8x0m_free(chip);
 		return err;
 	}
 
+	if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED,
+			KBUILD_MODNAME, chip)) {
+		dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
+		snd_intel8x0m_free(chip);
+		return -EBUSY;
+	}
+	chip->irq = pci->irq;
+
 	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
 		snd_intel8x0m_free(chip);
 		return err;
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/soc/codecs/hdac_hdmi.c linux-libre-4.14.155-gnu/sound/soc/codecs/hdac_hdmi.c
--- linux-libre-4.14.154-gnu/sound/soc/codecs/hdac_hdmi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/soc/codecs/hdac_hdmi.c	2019-11-20 12:00:54.000000000 -0500
@@ -1408,6 +1408,12 @@ static int hdac_hdmi_create_dais(struct
 		if (ret)
 			return ret;
 
+		/* Filter out 44.1, 88.2 and 176.4Khz */
+		rates &= ~(SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_88200 |
+			   SNDRV_PCM_RATE_176400);
+		if (!rates)
+			return -EINVAL;
+
 		sprintf(dai_name, "intel-hdmi-hifi%d", i+1);
 		hdmi_dais[i].name = devm_kstrdup(&hdac->dev,
 					dai_name, GFP_KERNEL);
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/soc/codecs/sgtl5000.c linux-libre-4.14.155-gnu/sound/soc/codecs/sgtl5000.c
--- linux-libre-4.14.154-gnu/sound/soc/codecs/sgtl5000.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/soc/codecs/sgtl5000.c	2019-11-20 12:00:54.000000000 -0500
@@ -1314,7 +1314,7 @@ static int sgtl5000_set_power_regs(struc
 	 * Searching for a suitable index solving this formula:
 	 * idx = 40 * log10(vag_val / lo_cagcntrl) + 15
 	 */
-	vol_quot = (vag * 100) / lo_vag;
+	vol_quot = lo_vag ? (vag * 100) / lo_vag : 0;
 	lo_vol = 0;
 	for (i = 0; i < ARRAY_SIZE(vol_quot_table); i++) {
 		if (vol_quot >= vol_quot_table[i])
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/soc/sh/rcar/rsnd.h linux-libre-4.14.155-gnu/sound/soc/sh/rcar/rsnd.h
--- linux-libre-4.14.154-gnu/sound/soc/sh/rcar/rsnd.h	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/soc/sh/rcar/rsnd.h	2019-11-20 12:00:54.000000000 -0500
@@ -432,6 +432,7 @@ struct rsnd_dai_stream {
 	char name[RSND_DAI_NAME_SIZE];
 	struct snd_pcm_substream *substream;
 	struct rsnd_mod *mod[RSND_MOD_MAX];
+	struct rsnd_mod *dma;
 	struct rsnd_dai *rdai;
 	u32 parent_ssi_status;
 };
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/soc/sh/rcar/ssi.c linux-libre-4.14.155-gnu/sound/soc/sh/rcar/ssi.c
--- linux-libre-4.14.154-gnu/sound/soc/sh/rcar/ssi.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/soc/sh/rcar/ssi.c	2019-11-20 12:00:54.000000000 -0500
@@ -66,7 +66,6 @@
 
 struct rsnd_ssi {
 	struct rsnd_mod mod;
-	struct rsnd_mod *dma;
 
 	u32 flags;
 	u32 cr_own;
@@ -868,7 +867,6 @@ static int rsnd_ssi_dma_probe(struct rsn
 			      struct rsnd_dai_stream *io,
 			      struct rsnd_priv *priv)
 {
-	struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
 	int ret;
 
 	/*
@@ -883,7 +881,7 @@ static int rsnd_ssi_dma_probe(struct rsn
 		return ret;
 
 	/* SSI probe might be called many times in MUX multi path */
-	ret = rsnd_dma_attach(io, mod, &ssi->dma);
+	ret = rsnd_dma_attach(io, mod, &io->dma);
 
 	return ret;
 }
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/soc/soc-pcm.c linux-libre-4.14.155-gnu/sound/soc/soc-pcm.c
--- linux-libre-4.14.154-gnu/sound/soc/soc-pcm.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/soc/soc-pcm.c	2019-11-20 12:00:54.000000000 -0500
@@ -1578,7 +1578,7 @@ static void dpcm_init_runtime_hw(struct
 				 u64 formats)
 {
 	runtime->hw.rate_min = stream->rate_min;
-	runtime->hw.rate_max = stream->rate_max;
+	runtime->hw.rate_max = min_not_zero(stream->rate_max, UINT_MAX);
 	runtime->hw.channels_min = stream->channels_min;
 	runtime->hw.channels_max = stream->channels_max;
 	if (runtime->hw.formats)
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/usb/endpoint.c linux-libre-4.14.155-gnu/sound/usb/endpoint.c
--- linux-libre-4.14.154-gnu/sound/usb/endpoint.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/usb/endpoint.c	2019-11-20 12:00:54.000000000 -0500
@@ -403,6 +403,9 @@ static void snd_complete_urb(struct urb
 		}
 
 		prepare_outbound_urb(ep, ctx);
+		/* can be stopped during prepare callback */
+		if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags)))
+			goto exit_clear;
 	} else {
 		retire_inbound_urb(ep, ctx);
 		/* can be stopped during retire callback */
diff -druNp --no-dereference linux-libre-4.14.154-gnu/sound/usb/mixer.c linux-libre-4.14.155-gnu/sound/usb/mixer.c
--- linux-libre-4.14.154-gnu/sound/usb/mixer.c	2019-11-12 13:19:08.000000000 -0500
+++ linux-libre-4.14.155-gnu/sound/usb/mixer.c	2019-11-20 12:00:54.000000000 -0500
@@ -1052,7 +1052,8 @@ static int get_min_max_with_quirks(struc
 		if (cval->min + cval->res < cval->max) {
 			int last_valid_res = cval->res;
 			int saved, test, check;
-			get_cur_mix_raw(cval, minchn, &saved);
+			if (get_cur_mix_raw(cval, minchn, &saved) < 0)
+				goto no_res_check;
 			for (;;) {
 				test = saved;
 				if (test < cval->max)
@@ -1072,6 +1073,7 @@ static int get_min_max_with_quirks(struc
 			snd_usb_set_cur_mix_value(cval, minchn, 0, saved);
 		}
 
+no_res_check:
 		cval->initialized = 1;
 	}
 
