Skip to contentSkip to conversation

Linux 5.15.202

DISCUSSION Sasha Levin 1 participant 2 messages Mar 4 Stable branch

lore
Share & tools
lore

Sasha Levin

author maintainer
#0 lore raw

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

I'm announcing the release of the 5.15.202 kernel.

All users of the 5.15 kernel series must upgrade.

The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

Thanks,
Sasha

- ------------

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEE4n5dijQDou9mhzu83qZv95d3LNwFAmmoMHUACgkQ3qZv95d3 LNzc1g//YEAp/PUTdX16PKW7e/3S9CDaSBOdVgY3xb372XT++rd/Ty2qN/eNH8u8 rc27fv4CpLHfIYKP6AeCg7JCQRCvD7f8yPD0ii/VCOAjVGTYYxzOLCc2Ey8/asOv ++x574wjxA56zsR2jHdqbiBeIgO61Q0GiHjLs+SEiS4El0A10oIfwB1Fl+lChtUF bj7x0FtInpgRj9dYpDFOrVbGx8M7D9JzxlRXnRN8VJ1gLlWoGnZe4OQr48/2Z3D7 PAHpIJWpK0rIJT1KZJgi2AVFFybmBUo+7E0Sd85pdwXsDkLVQlIzdPeD//3PIjk5 hMVyxIglfIIJoepq92CVANEJ5tNtg5xW/q6KHrFLyTaDJ5L/FewsXu4y3g64AQSu UG5bh8To3cLeUoiTHBVmR1acYYQINJHeCvjyEUByZN2xVEUZGdGfmPEgyS9pEJah rbztIJHi7WtOmoEwoPv3Gxzu9n/yavDCi7ZBPvJOl3baP4GO+2dY5dmNawh/tu0N DukXp0vRG2Gh5DoKXGm10JgfP+ippa5jPQcIqyjZ+ygDxM7vhyb5eoTCYjLuShZa ywO/bnyVzZ8kXpXZUktvyh2fPn0ZKOVkJRGRkRSowJkUUr/oaDjK4v8i/hDQX+ku vW8fX+HWXnj0WvMYKsxRCgdEo/KVYSeZyt5vv4fqIHap6bbTS6I= =TS4J
-----END PGP SIGNATURE-----

author maintainer
#1 lore raw
Makefile +1 -1
index 5e3d4c453ed7e..8fc3ffa96622e 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 201
+SUBLEVEL = 202
 EXTRAVERSION =
 NAME = Trick or Treat
 
arch/arm/boot/dts/lpc32xx.dtsi +2 -1
index c87066d6c9950..0e856de14e49a 100644
@@ -301,8 +301,9 @@ i2c2: i2c@400a8000 {
 			mpwm: mpwm@400e8000 {
 				compatible = "nxp,lpc3220-motor-pwm";
 				reg = <0x400e8000 0x78>;
+				clocks = <&clk LPC32XX_CLK_MCPWM>;
+				#pwm-cells = <3>;
 				status = "disabled";
-				#pwm-cells = <2>;
 			};
 		};
 
arch/arm/boot/dts/sun5i-a13-utoo-p66.dts +1 -0
index be486d28d04fa..428cab5a0e906 100644
@@ -102,6 +102,7 @@ &touchscreen {
 	/* The P66 uses a different EINT then the reference design */
 	interrupts = <6 9 IRQ_TYPE_EDGE_FALLING>; /* EINT9 (PG9) */
 	/* The icn8318 binding expects wake-gpios instead of power-gpios */
+	/delete-property/ power-gpios;
 	wake-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; /* PB3 */
 	touchscreen-size-x = <800>;
 	touchscreen-size-y = <480>;
arch/arm/kernel/vdso.c +1 -0
index 3408269d19c7d..b38f4a1bc9b8a 100644
@@ -176,6 +176,7 @@ static void __init patch_vdso(void *ehdr)
 		vdso_nullpatch_one(&einfo, "__vdso_gettimeofday");
 		vdso_nullpatch_one(&einfo, "__vdso_clock_gettime");
 		vdso_nullpatch_one(&einfo, "__vdso_clock_gettime64");
+		vdso_nullpatch_one(&einfo, "__vdso_clock_getres");
 	}
 }
 
arch/arm/mm/physaddr.c +1 -1
index cf75819e4c137..4ae327bf7aa29 100644
@@ -38,7 +38,7 @@ static inline bool __virt_addr_valid(unsigned long x)
 phys_addr_t __virt_to_phys(unsigned long x)
 {
 	WARN(!__virt_addr_valid(x),
-	     "virt_to_phys used for non-linear address: %pK (%pS)\n",
+	     "virt_to_phys used for non-linear address: %px (%pS)\n",
 	     (void *)x, (void *)x);
 
 	return __virt_to_phys_nodebug(x);
arch/arm64/Kbuild +4 -0
index ea7ab4ca81f92..34ab64e16f466 100644
@@ -1,4 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0-only
+
+# Branch profiling isn't noinstr-safe
+subdir-ccflags-$(CONFIG_TRACE_BRANCH_PROFILING) += -DDISABLE_BRANCH_PROFILING
+
 obj-y			+= kernel/ mm/ net/
 obj-$(CONFIG_KVM)	+= kvm/
 obj-$(CONFIG_XEN)	+= xen/
arch/arm64/boot/dts/amlogic/meson-axg.dtsi +6 -0
index db5a1f4653135..280fe16b68fe0 100644
@@ -1892,6 +1892,9 @@ sd_emmc_b: sd@5000 {
 					<&clkc CLKID_FCLK_DIV2>;
 				clock-names = "core", "clkin0", "clkin1";
 				resets = <&reset RESET_SD_EMMC_B>;
+
+				assigned-clocks = <&clkc CLKID_SD_EMMC_B_CLK0>;
+				assigned-clock-rates = <24000000>;
 			};
 
 			sd_emmc_c: mmc@7000 {
@@ -1904,6 +1907,9 @@ sd_emmc_c: mmc@7000 {
 					<&clkc CLKID_FCLK_DIV2>;
 				clock-names = "core", "clkin0", "clkin1";
 				resets = <&reset RESET_SD_EMMC_C>;
+
+				assigned-clocks = <&clkc CLKID_SD_EMMC_C_CLK0>;
+				assigned-clock-rates = <24000000>;
 			};
 
 			usb2_phy1: phy@9020 {
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi +9 -0
index 369334076467a..20b4575594a03 100644
@@ -2336,6 +2336,9 @@ sd_emmc_a: sd@ffe03000 {
 				 <&clkc CLKID_FCLK_DIV2>;
 			clock-names = "core", "clkin0", "clkin1";
 			resets = <&reset RESET_SD_EMMC_A>;
+
+			assigned-clocks = <&clkc CLKID_SD_EMMC_A_CLK0>;
+			assigned-clock-rates = <24000000>;
 		};
 
 		sd_emmc_b: sd@ffe05000 {
@@ -2348,6 +2351,9 @@ sd_emmc_b: sd@ffe05000 {
 				 <&clkc CLKID_FCLK_DIV2>;
 			clock-names = "core", "clkin0", "clkin1";
 			resets = <&reset RESET_SD_EMMC_B>;
+
+			assigned-clocks = <&clkc CLKID_SD_EMMC_B_CLK0>;
+			assigned-clock-rates = <24000000>;
 		};
 
 		sd_emmc_c: mmc@ffe07000 {
@@ -2360,6 +2366,9 @@ sd_emmc_c: mmc@ffe07000 {
 				 <&clkc CLKID_FCLK_DIV2>;
 			clock-names = "core", "clkin0", "clkin1";
 			resets = <&reset RESET_SD_EMMC_C>;
+
+			assigned-clocks = <&clkc CLKID_SD_EMMC_C_CLK0>;
+			assigned-clock-rates = <24000000>;
 		};
 
 		usb: usb@ffe09000 {
arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi +9 -0
index 256c46771db78..c57a6f37bc2af 100644
@@ -779,6 +779,9 @@ &sd_emmc_a {
 		 <&clkc CLKID_FCLK_DIV2>;
 	clock-names = "core", "clkin0", "clkin1";
 	resets = <&reset RESET_SD_EMMC_A>;
+
+	assigned-clocks = <&clkc CLKID_SD_EMMC_A_CLK0>;
+	assigned-clock-rates = <24000000>;
 };
 
 &sd_emmc_b {
@@ -787,6 +790,9 @@ &sd_emmc_b {
 		 <&clkc CLKID_FCLK_DIV2>;
 	clock-names = "core", "clkin0", "clkin1";
 	resets = <&reset RESET_SD_EMMC_B>;
+
+	assigned-clocks = <&clkc CLKID_SD_EMMC_B_CLK0>;
+	assigned-clock-rates = <24000000>;
 };
 
 &sd_emmc_c {
@@ -795,6 +801,9 @@ &sd_emmc_c {
 		 <&clkc CLKID_FCLK_DIV2>;
 	clock-names = "core", "clkin0", "clkin1";
 	resets = <&reset RESET_SD_EMMC_C>;
+
+	assigned-clocks = <&clkc CLKID_SD_EMMC_C_CLK0>;
+	assigned-clock-rates = <24000000>;
 };
 
 &simplefb_hdmi {
arch/arm64/boot/dts/amlogic/meson-gxl.dtsi +9 -0
index a689bd14ece99..fb6e8c466811f 100644
@@ -848,6 +848,9 @@ &sd_emmc_a {
 		 <&clkc CLKID_FCLK_DIV2>;
 	clock-names = "core", "clkin0", "clkin1";
 	resets = <&reset RESET_SD_EMMC_A>;
+
+	assigned-clocks = <&clkc CLKID_SD_EMMC_A_CLK0>;
+	assigned-clock-rates = <24000000>;
 };
 
 &sd_emmc_b {
@@ -856,6 +859,9 @@ &sd_emmc_b {
 		 <&clkc CLKID_FCLK_DIV2>;
 	clock-names = "core", "clkin0", "clkin1";
 	resets = <&reset RESET_SD_EMMC_B>;
+
+	assigned-clocks = <&clkc CLKID_SD_EMMC_B_CLK0>;
+	assigned-clock-rates = <24000000>;
 };
 
 &sd_emmc_c {
@@ -864,6 +870,9 @@ &sd_emmc_c {
 		 <&clkc CLKID_FCLK_DIV2>;
 	clock-names = "core", "clkin0", "clkin1";
 	resets = <&reset RESET_SD_EMMC_C>;
+
+	assigned-clocks = <&clkc CLKID_SD_EMMC_C_CLK0>;
+	assigned-clock-rates = <24000000>;
 };
 
 &simplefb_hdmi {
arch/arm64/boot/dts/nvidia/tegra210-smaug.dts +2 -0
index 131c064d69919..5fae86c1e4f10 100644
@@ -1687,6 +1687,8 @@ usb2-0 {
 				status = "okay";
 				vbus-supply = <&usbc_vbus>;
 				mode = "otg";
+				usb-role-switch;
+				role-switch-default-mode = "host";
 			};
 
 			usb3-0 {
arch/arm64/boot/dts/qcom/sdm630.dtsi +4 -4
index 70dfde9d24ec5..5a1069cb696e9 100644
@@ -554,13 +554,13 @@ qfprom: qfprom@780000 {
 			#size-cells = <1>;
 
 			qusb2_hstx_trim: hstx-trim@240 {
-				reg = <0x240 0x1>;
-				bits = <25 3>;
+				reg = <0x243 0x1>;
+				bits = <1 3>;
 			};
 
 			gpu_speed_bin: gpu-speed-bin@41a0 {
-				reg = <0x41a0 0x1>;
-				bits = <21 7>;
+				reg = <0x41a2 0x2>;
+				bits = <5 8>;
 			};
 		};
 
arch/arm64/boot/dts/qcom/sdm845-db845c.dts +7 -0
index 62877311e5c24..cf2df9e2ccf30 100644
@@ -342,6 +342,12 @@ vreg_l21a_2p95: ldo21 {
 			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
 		};
 
+		vreg_l23a_3p3: ldo23 {
+			regulator-min-microvolt = <3300000>;
+			regulator-max-microvolt = <3312000>;
+			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+		};
+
 		vreg_l24a_3p075: ldo24 {
 			regulator-min-microvolt = <3088000>;
 			regulator-max-microvolt = <3088000>;
@@ -1039,6 +1045,7 @@ &wifi {
 	vdd-1.8-xo-supply = <&vreg_l7a_1p8>;
 	vdd-1.3-rfa-supply = <&vreg_l17a_1p3>;
 	vdd-3.3-ch0-supply = <&vreg_l25a_3p3>;
+	vdd-3.3-ch1-supply = <&vreg_l23a_3p3>;
 
 	qcom,snoc-host-cap-8bit-quirk;
 };
arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi +1 -1
index d4355522374a1..948ec59418017 100644
@@ -136,7 +136,6 @@ ts_1p8_supply: ts-1p8-regulator {
 
 		gpio = <&tlmm 88 0>;
 		enable-active-high;
-		regulator-boot-on;
 	};
 };
 
@@ -227,6 +226,7 @@ vreg_l12a_1p8: ldo12 {
 			regulator-min-microvolt = <1800000>;
 			regulator-max-microvolt = <1800000>;
 			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
+			regulator-boot-on;
 		};
 
 		vreg_l14a_1p88: ldo14 {
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +0 -4
index ab2e2ee4ce6fe..a94c01c3316fe 100644
@@ -438,10 +438,6 @@ &gpu {
 	status = "okay";
 };
 
-&hdmi_sound {
-	status = "okay";
-};
-
 &i2c0 {
 	clock-frequency = <400000>;
 	i2c-scl-falling-time-ns = <4>;
arch/arm64/include/asm/rwonce.h +1 -1
index 56f7b1d4d54b9..bd5fc880b9090 100644
@@ -62,7 +62,7 @@
 	default:							\
 		atomic = 0;						\
 	}								\
-	atomic ? (typeof(*__x))__u.__val : (*(volatile typeof(__x))__x);\
+	atomic ? (typeof(*__x))__u.__val : (*(volatile typeof(*__x) *)__x);\
 })
 
 #endif	/* !BUILD_VDSO */
arch/arm64/kernel/proton-pack.c +1 -0
index 42359eaba2dba..6fd2caa968fbe 100644
@@ -896,6 +896,7 @@ static u8 spectre_bhb_loop_affected(void)
 		MIDR_ALL_VERSIONS(MIDR_CORTEX_X2),
 		MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
 		MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1),
+		MIDR_ALL_VERSIONS(MIDR_HISI_TSV110),
 		{},
 	};
 	static const struct midr_range spectre_bhb_k24_list[] = {
arch/m68k/lib/memmove.c +18 -0
index 6519f7f349f66..e33f00b02e4c0 100644
@@ -24,6 +24,15 @@ void *memmove(void *dest, const void *src, size_t n)
 			src = csrc;
 			n--;
 		}
+#if defined(CONFIG_M68000)
+		if ((long)src & 1) {
+			char *cdest = dest;
+			const char *csrc = src;
+			for (; n; n--)
+				*cdest++ = *csrc++;
+			return xdest;
+		}
+#endif
 		if (n > 2 && (long)dest & 2) {
 			short *sdest = dest;
 			const short *ssrc = src;
@@ -66,6 +75,15 @@ void *memmove(void *dest, const void *src, size_t n)
 			src = csrc;
 			n--;
 		}
+#if defined(CONFIG_M68000)
+		if ((long)src & 1) {
+			char *cdest = dest;
+			const char *csrc = src;
+			for (; n; n--)
+				*--cdest = *--csrc;
+			return xdest;
+		}
+#endif
 		if (n > 2 && (long)dest & 2) {
 			short *sdest = dest;
 			const short *ssrc = src;
arch/mips/include/asm/mach-loongson64/topology.h +1 -1
index 3414a1fd17835..89bb4deab98a6 100644
@@ -7,7 +7,7 @@
 #define cpu_to_node(cpu)	(cpu_logical_map(cpu) >> 2)
 
 extern cpumask_t __node_cpumask[];
-#define cpumask_of_node(node)	(&__node_cpumask[node])
+#define cpumask_of_node(node)	  ((node) == NUMA_NO_NODE ? cpu_all_mask : &__node_cpumask[node])
 
 struct pci_bus;
 extern int pcibus_to_node(struct pci_bus *);
arch/mips/kernel/relocate.c +13 -0
index 56b51de2dc51b..8ca4d1f226854 100644
@@ -420,7 +420,20 @@ void *__init relocate_kernel(void)
 			goto out;
 
 		/* The current thread is now within the relocated image */
+#ifndef CONFIG_CC_IS_CLANG
 		__current_thread_info = RELOCATED(&init_thread_union);
+#else
+		/*
+		 * LLVM may wrongly restore $gp ($28) in epilog even if it's
+		 * intentionally modified. Work around this by using inline
+		 * assembly to assign $gp. $gp couldn't be listed as output or
+		 * clobber, or LLVM will still restore its original value.
+		 * See also LLVM upstream issue
+		 * https://github.com/llvm/llvm-project/issues/176546
+		 */
+		asm volatile("move $28, %0" : :
+			     "r" (RELOCATED(&init_thread_union)));
+#endif
 
 		/* Return the new kernel's entry point */
 		kernel_entry = RELOCATED(start_kernel);
arch/mips/rb532/devices.c +3 -2
index b7f6f782d9a13..ffa4d38ca95df 100644
@@ -212,11 +212,12 @@ static struct platform_device rb532_wdt = {
 static struct plat_serial8250_port rb532_uart_res[] = {
 	{
 		.type           = PORT_16550A,
-		.membase	= (char *)KSEG1ADDR(REGBASE + UART0BASE),
+		.mapbase        = REGBASE + UART0BASE,
+		.mapsize        = 0x1000,
 		.irq		= UART0_IRQ,
 		.regshift	= 2,
 		.iotype		= UPIO_MEM,
-		.flags		= UPF_BOOT_AUTOCONF,
+		.flags		= UPF_BOOT_AUTOCONF | UPF_IOREMAP,
 	},
 	{
 		.flags		= 0,
arch/openrisc/include/asm/barrier.h +2 -0
index 7538294721bed..8e592c9909023 100644
@@ -4,6 +4,8 @@
 
 #define mb() asm volatile ("l.msync" ::: "memory")
 
+#define nop() asm volatile ("l.nop")
+
 #include <asm-generic/barrier.h>
 
 #endif /* __ASM_BARRIER_H */
arch/parisc/kernel/drivers.c +1 -1
index 8f12b9f318ae6..af5766a0f1ea9 100644
@@ -434,7 +434,7 @@ struct parisc_device * __init create_tree_node(char id, struct device *parent)
 	dev->dev.dma_mask = &dev->dma_mask;
 	dev->dev.coherent_dma_mask = dev->dma_mask;
 	if (device_register(&dev->dev)) {
-		kfree(dev);
+		put_device(&dev->dev);
 		return NULL;
 	}
 
arch/parisc/kernel/process.c +3 -0
index f393d24e4b1c3..e5cbdd17cdd53 100644
@@ -82,6 +82,9 @@ void machine_restart(char *cmd)
 #endif
 	/* set up a new led state on systems shipped with a LED State panel */
 	pdc_chassis_send_status(PDC_CHASSIS_DIRECT_SHUTDOWN);
+
+	/* prevent interrupts during reboot */
+	set_eiem(0);
 	
 	/* "Normal" system reset */
 	pdc_do_reset();
arch/powerpc/include/asm/eeh.h +2 -0
index b1a5bba2e0b94..2c9dc733accfd 100644
@@ -289,6 +289,8 @@ void eeh_pe_dev_traverse(struct eeh_pe *root,
 void eeh_pe_restore_bars(struct eeh_pe *pe);
 const char *eeh_pe_loc_get(struct eeh_pe *pe);
 struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe);
+const char *eeh_pe_loc_get_bus(struct pci_bus *bus);
+struct pci_bus *eeh_pe_bus_get_nolock(struct eeh_pe *pe);
 
 void eeh_show_enabled(void);
 int __init eeh_init(struct eeh_ops *ops);
arch/powerpc/include/asm/kup.h +0 -2
index 34ff86e3686ea..eb048b6be6d83 100644
@@ -81,7 +81,6 @@ static __always_inline void setup_kup(void)
 
 static __always_inline void allow_read_from_user(const void __user *from, unsigned long size)
 {
-	barrier_nospec();
 	allow_user_access(NULL, from, size, KUAP_READ);
 }
 
@@ -93,7 +92,6 @@ static __always_inline void allow_write_to_user(void __user *to, unsigned long s
 static __always_inline void allow_read_write_user(void __user *to, const void __user *from,
 						  unsigned long size)
 {
-	barrier_nospec();
 	allow_user_access(to, from, size, KUAP_READ_WRITE);
 }
 
arch/powerpc/include/asm/uaccess.h +4 -0
index 6013a7fc74ba7..7781f6dd51390 100644
@@ -276,6 +276,7 @@ do {								\
 	__typeof__(sizeof(*(ptr))) __gu_size = sizeof(*(ptr));	\
 								\
 	might_fault();					\
+	barrier_nospec();					\
 	allow_read_from_user(__gu_addr, __gu_size);		\
 	__get_user_size_allowed(__gu_val, __gu_addr, __gu_size, __gu_err);	\
 	prevent_read_from_user(__gu_addr, __gu_size);		\
@@ -304,6 +305,7 @@ raw_copy_in_user(void __user *to, const void __user *from, unsigned long n)
 {
 	unsigned long ret;
 
+	barrier_nospec();
 	allow_read_write_user(to, from, n);
 	ret = __copy_tofrom_user(to, from, n);
 	prevent_read_write_user(to, from, n);
@@ -392,6 +394,7 @@ static __must_check inline bool user_access_begin(const void __user *ptr, size_t
 
 	might_fault();
 
+	barrier_nospec();
 	allow_read_write_user((void __user *)ptr, ptr, len);
 	return true;
 }
@@ -408,6 +411,7 @@ user_read_access_begin(const void __user *ptr, size_t len)
 
 	might_fault();
 
+	barrier_nospec();
 	allow_read_from_user(ptr, len);
 	return true;
 }
arch/powerpc/kernel/eeh_driver.c +6 -5
index 2f13d906e1fcb..20106e490b9c6 100644
@@ -847,7 +847,7 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
 
 	pci_lock_rescan_remove();
 
-	bus = eeh_pe_bus_get(pe);
+	bus = eeh_pe_bus_get_nolock(pe);
 	if (!bus) {
 		pr_err("%s: Cannot find PCI bus for PHB#%x-PE#%x\n",
 			__func__, pe->phb->global_number, pe->addr);
@@ -878,14 +878,15 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
 	/* Log the event */
 	if (pe->type & EEH_PE_PHB) {
 		pr_err("EEH: Recovering PHB#%x, location: %s\n",
-			pe->phb->global_number, eeh_pe_loc_get(pe));
+			pe->phb->global_number, eeh_pe_loc_get_bus(bus));
 	} else {
 		struct eeh_pe *phb_pe = eeh_phb_pe_get(pe->phb);
 
 		pr_err("EEH: Recovering PHB#%x-PE#%x\n",
 		       pe->phb->global_number, pe->addr);
 		pr_err("EEH: PE location: %s, PHB location: %s\n",
-		       eeh_pe_loc_get(pe), eeh_pe_loc_get(phb_pe));
+		       eeh_pe_loc_get_bus(bus),
+		       eeh_pe_loc_get_bus(eeh_pe_bus_get_nolock(phb_pe)));
 	}
 
 #ifdef CONFIG_STACKTRACE
@@ -1093,7 +1094,7 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
 		eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true);
 		eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED);
 
-		bus = eeh_pe_bus_get(pe);
+		bus = eeh_pe_bus_get_nolock(pe);
 		if (bus)
 			pci_hp_remove_devices(bus);
 		else
@@ -1217,7 +1218,7 @@ void eeh_handle_special_event(void)
 				    (phb_pe->state & EEH_PE_RECOVERING))
 					continue;
 
-				bus = eeh_pe_bus_get(phb_pe);
+				bus = eeh_pe_bus_get_nolock(phb_pe);
 				if (!bus) {
 					pr_err("%s: Cannot find PCI bus for "
 					       "PHB#%x-PE#%x\n",
arch/powerpc/kernel/eeh_pe.c +70 -4

102 lines not on this page · raw message

arch/powerpc/kernel/smp.c +2 -0
index fb95f92dcfac6..2b8a5309fb4a5 100644
@@ -840,6 +840,8 @@ static int parse_thread_groups(struct device_node *dn,
 
 	count = of_property_count_u32_elems(dn, "ibm,thread-groups");
 	thread_group_array = kcalloc(count, sizeof(u32), GFP_KERNEL);
+	if (!thread_group_array)
+		return -ENOMEM;
 	ret = of_property_read_u32_array(dn, "ibm,thread-groups",
 					 thread_group_array, count);
 	if (ret)
arch/s390/kernel/perf_cpum_sf.c +1 -1
index 22893bf86f650..b7606b80388bc 100644
@@ -887,7 +887,7 @@ static bool is_callchain_event(struct perf_event *event)
 	u64 sample_type = event->attr.sample_type;
 
 	return sample_type & (PERF_SAMPLE_CALLCHAIN | PERF_SAMPLE_REGS_USER |
-			      PERF_SAMPLE_STACK_USER);
+			      PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_STACK_USER);
 }
 
 static int cpumsf_pmu_event_init(struct perf_event *event)
arch/s390/pci/pci.c +17 -8
index 8764f0ae6d345..c3e1081372134 100644
@@ -193,24 +193,33 @@ int zpci_fmb_disable_device(struct zpci_dev *zdev)
 static int zpci_cfg_load(struct zpci_dev *zdev, int offset, u32 *val, u8 len)
 {
 	u64 req = ZPCI_CREATE_REQ(zdev->fh, ZPCI_PCIAS_CFGSPC, len);
+	int rc = -ENODEV;
 	u64 data;
-	int rc;
+
+	if (!zdev_enabled(zdev))
+		goto out_err;
 
 	rc = __zpci_load(&data, req, offset);
-	if (!rc) {
-		data = le64_to_cpu((__force __le64) data);
-		data >>= (8 - len) * 8;
-		*val = (u32) data;
-	} else
-		*val = 0xffffffff;
+	if (rc)
+		goto out_err;
+	data = le64_to_cpu((__force __le64)data);
+	data >>= (8 - len) * 8;
+	*val = (u32)data;
+	return 0;
+
+out_err:
+	PCI_SET_ERROR_RESPONSE(val);
 	return rc;
 }
 
 static int zpci_cfg_store(struct zpci_dev *zdev, int offset, u32 val, u8 len)
 {
 	u64 req = ZPCI_CREATE_REQ(zdev->fh, ZPCI_PCIAS_CFGSPC, len);
+	int rc = -ENODEV;
 	u64 data = val;
-	int rc;
+
+	if (!zdev_enabled(zdev))
+		return rc;
 
 	data <<= (8 - len) * 8;
 	data = (__force u64) cpu_to_le64(data);
arch/s390/purgatory/Makefile +1 -0
index 414ba87e038b6..c5e4a1ed820df 100644
@@ -29,6 +29,7 @@ KBUILD_CFLAGS += -fno-stack-protector
 KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
 KBUILD_CFLAGS += $(CLANG_FLAGS)
 KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
+KBUILD_CFLAGS += $(call cc-option, -Wno-default-const-init-unsafe)
 KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
 
 # Since we link purgatory with -r unresolved symbols are not checked, so we
arch/sparc/include/uapi/asm/ioctls.h +4 -4
index 7fd2f5873c9e7..a8bbdf9877a41 100644
@@ -5,10 +5,10 @@
 #include <asm/ioctl.h>
 
 /* Big T */
-#define TCGETA		_IOR('T', 1, struct termio)
-#define TCSETA		_IOW('T', 2, struct termio)
-#define TCSETAW		_IOW('T', 3, struct termio)
-#define TCSETAF		_IOW('T', 4, struct termio)
+#define TCGETA          0x40125401 /* _IOR('T', 1, struct termio) */
+#define TCSETA          0x80125402 /* _IOW('T', 2, struct termio) */
+#define TCSETAW         0x80125403 /* _IOW('T', 3, struct termio) */
+#define TCSETAF         0x80125404 /* _IOW('T', 4, struct termio) */
 #define TCSBRK		_IO('T', 5)
 #define TCXONC		_IO('T', 6)
 #define TCFLSH		_IO('T', 7)
arch/sparc/kernel/process.c +24 -14
index 0442ab00518d3..7d69877511fac 100644
@@ -17,14 +17,18 @@
 
 asmlinkage long sparc_fork(struct pt_regs *regs)
 {
-	unsigned long orig_i1 = regs->u_regs[UREG_I1];
+	unsigned long orig_i1;
 	long ret;
 	struct kernel_clone_args args = {
 		.exit_signal	= SIGCHLD,
-		/* Reuse the parent's stack for the child. */
-		.stack		= regs->u_regs[UREG_FP],
 	};
 
+	synchronize_user_stack();
+
+	orig_i1 = regs->u_regs[UREG_I1];
+	/* Reuse the parent's stack for the child. */
+	args.stack = regs->u_regs[UREG_FP];
+
 	ret = kernel_clone(&args);
 
 	/* If we get an error and potentially restart the system
@@ -40,16 +44,19 @@ asmlinkage long sparc_fork(struct pt_regs *regs)
 
 asmlinkage long sparc_vfork(struct pt_regs *regs)
 {
-	unsigned long orig_i1 = regs->u_regs[UREG_I1];
+	unsigned long orig_i1;
 	long ret;
-
 	struct kernel_clone_args args = {
 		.flags		= CLONE_VFORK | CLONE_VM,
 		.exit_signal	= SIGCHLD,
-		/* Reuse the parent's stack for the child. */
-		.stack		= regs->u_regs[UREG_FP],
 	};
 
+	synchronize_user_stack();
+
+	orig_i1 = regs->u_regs[UREG_I1];
+	/* Reuse the parent's stack for the child. */
+	args.stack = regs->u_regs[UREG_FP];
+
 	ret = kernel_clone(&args);
 
 	/* If we get an error and potentially restart the system
@@ -65,15 +72,18 @@ asmlinkage long sparc_vfork(struct pt_regs *regs)
 
 asmlinkage long sparc_clone(struct pt_regs *regs)
 {
-	unsigned long orig_i1 = regs->u_regs[UREG_I1];
-	unsigned int flags = lower_32_bits(regs->u_regs[UREG_I0]);
+	unsigned long orig_i1;
+	unsigned int flags;
 	long ret;
+	struct kernel_clone_args args = {0};
 
-	struct kernel_clone_args args = {
-		.flags		= (flags & ~CSIGNAL),
-		.exit_signal	= (flags & CSIGNAL),
-		.tls		= regs->u_regs[UREG_I3],
-	};
+	synchronize_user_stack();
+
+	orig_i1 = regs->u_regs[UREG_I1];
+	flags = lower_32_bits(regs->u_regs[UREG_I0]);
+	args.flags		= (flags & ~CSIGNAL);
+	args.exit_signal	= (flags & CSIGNAL);
+	args.tls		= regs->u_regs[UREG_I3];
 
 #ifdef CONFIG_COMPAT
 	if (test_thread_flag(TIF_32BIT)) {
arch/x86/kvm/svm/nested.c +1 -2
index 4ce2bef00e406..cd6c7b302f135 100644
@@ -1392,10 +1392,9 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
 	 * thus MMU might not be initialized correctly.
 	 * Set it again to fix this.
 	 */
-
 	ret = nested_svm_load_cr3(&svm->vcpu, vcpu->arch.cr3,
 				  nested_npt_enabled(svm), false);
-	if (WARN_ON_ONCE(ret))
+	if (ret)
 		goto out_free;
 
 
arch/x86/kvm/svm/svm.c +3 -2
index 02ec424db2240..1687b74a1a4d8 100644
@@ -2168,12 +2168,13 @@ static int vmload_vmsave_interception(struct kvm_vcpu *vcpu, bool vmload)
 
 	ret = kvm_skip_emulated_instruction(vcpu);
 
+	/* KVM always performs VMLOAD/VMSAVE on VMCB01 (see __svm_vcpu_run()) */
 	if (vmload) {
-		svm_copy_vmloadsave_state(svm->vmcb, vmcb12);
+		svm_copy_vmloadsave_state(svm->vmcb01.ptr, vmcb12);
 		svm->sysenter_eip_hi = 0;
 		svm->sysenter_esp_hi = 0;
 	} else {
-		svm_copy_vmloadsave_state(vmcb12, svm->vmcb);
+		svm_copy_vmloadsave_state(vmcb12, svm->vmcb01.ptr);
 	}
 
 	kvm_vcpu_unmap(vcpu, &map, true);
arch/x86/platform/pvh/head.S +2 -0
index b3e3f64d436d8..56376fb4b3ae8 100644
@@ -69,10 +69,12 @@ SYM_CODE_START_LOCAL(pvh_start_xen)
 
 	mov $_pa(early_stack_end), %esp
 
+#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
 	/* Enable PAE mode. */
 	mov %cr4, %eax
 	orl $X86_CR4_PAE, %eax
 	mov %eax, %cr4
+#endif
 
 #ifdef CONFIG_X86_64
 	/* Enable Long mode. */
block/blk-mq-debugfs.c +2 -0
index 7023257a133df..8ae3115666e70 100644
@@ -903,8 +903,10 @@ void blk_mq_debugfs_register_hctxs(struct request_queue *q)
 	struct blk_mq_hw_ctx *hctx;
 	int i;
 
+	mutex_lock(&q->debugfs_mutex);
 	queue_for_each_hw_ctx(q, hctx, i)
 		blk_mq_debugfs_register_hctx(q, hctx);
+	mutex_unlock(&q->debugfs_mutex);
 }
 
 void blk_mq_debugfs_unregister_hctxs(struct request_queue *q)
drivers/acpi/acpi_processor.c +15 -13
index cfa75b14caa2b..669398045c0fd 100644
@@ -33,6 +33,7 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)
 {
 	u8 value1 = 0;
 	u8 value2 = 0;
+	struct pci_dev *ide_dev = NULL, *isa_dev = NULL;
 
 
 	if (!dev)
@@ -90,12 +91,12 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)
 		 * each IDE controller's DMA status to make sure we catch all
 		 * DMA activity.
 		 */
-		dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
+		ide_dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
 				     PCI_DEVICE_ID_INTEL_82371AB,
 				     PCI_ANY_ID, PCI_ANY_ID, NULL);
-		if (dev) {
-			errata.piix4.bmisx = pci_resource_start(dev, 4);
-			pci_dev_put(dev);
+		if (ide_dev) {
+			errata.piix4.bmisx = pci_resource_start(ide_dev, 4);
+			pci_dev_put(ide_dev);
 		}
 
 		/*
@@ -107,24 +108,25 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)
 		 * disable C3 support if this is enabled, as some legacy
 		 * devices won't operate well if fast DMA is disabled.
 		 */
-		dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
+		isa_dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
 				     PCI_DEVICE_ID_INTEL_82371AB_0,
 				     PCI_ANY_ID, PCI_ANY_ID, NULL);
-		if (dev) {
-			pci_read_config_byte(dev, 0x76, &value1);
-			pci_read_config_byte(dev, 0x77, &value2);
+		if (isa_dev) {
+			pci_read_config_byte(isa_dev, 0x76, &value1);
+			pci_read_config_byte(isa_dev, 0x77, &value2);
 			if ((value1 & 0x80) || (value2 & 0x80))
 				errata.piix4.fdma = 1;
-			pci_dev_put(dev);
+			pci_dev_put(isa_dev);
 		}
 
 		break;
 	}
 
-	if (errata.piix4.bmisx)
-		dev_dbg(&dev->dev, "Bus master activity detection (BM-IDE) erratum enabled\n");
-	if (errata.piix4.fdma)
-		dev_dbg(&dev->dev, "Type-F DMA livelock erratum (C3 disabled)\n");
+	if (ide_dev)
+		dev_dbg(&ide_dev->dev, "Bus master activity detection (BM-IDE) erratum enabled\n");
+
+	if (isa_dev)
+		dev_dbg(&isa_dev->dev, "Type-F DMA livelock erratum (C3 disabled)\n");
 
 	return 0;
 }
drivers/acpi/acpica/exoparg3.c +18 -28

81 lines not on this page · raw message

drivers/acpi/apei/ghes.c +5 -1
index bdb23ca251e23..28651f9e6d60f 100644
@@ -28,6 +28,7 @@
 #include <linux/timer.h>
 #include <linux/cper.h>
 #include <linux/platform_device.h>
+#include <linux/minmax.h>
 #include <linux/mutex.h>
 #include <linux/ratelimit.h>
 #include <linux/vmalloc.h>
@@ -262,6 +263,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)
 		error_block_length = GHES_ESTATUS_MAX_SIZE;
 	}
 	ghes->estatus = kmalloc(error_block_length, GFP_KERNEL);
+	ghes->estatus_length = error_block_length;
 	if (!ghes->estatus) {
 		rc = -ENOMEM;
 		goto err_unmap_status_addr;
@@ -333,13 +335,15 @@ static int __ghes_check_estatus(struct ghes *ghes,
 				struct acpi_hest_generic_status *estatus)
 {
 	u32 len = cper_estatus_len(estatus);
+	u32 max_len = min(ghes->generic->error_block_length,
+			  ghes->estatus_length);
 
 	if (len < sizeof(*estatus)) {
 		pr_warn_ratelimited(FW_WARN GHES_PFX "Truncated error status block!\n");
 		return -EIO;
 	}
 
-	if (len > ghes->generic->error_block_length) {
+	if (!len || len > max_len) {
 		pr_warn_ratelimited(FW_WARN GHES_PFX "Invalid error status block length!\n");
 		return -EIO;
 	}
drivers/acpi/cppc_acpi.c +2 -2
index 0387b293ea76a..572d4d3815fae 100644
@@ -336,7 +336,7 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd)
 end:
 	if (cmd == CMD_WRITE) {
 		if (unlikely(ret)) {
-			for_each_possible_cpu(i) {
+			for_each_online_cpu(i) {
 				struct cpc_desc *desc = per_cpu(cpc_desc_ptr, i);
 
 				if (!desc)
@@ -477,7 +477,7 @@ int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data)
 	else if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ANY)
 		cpu_data->shared_type = CPUFREQ_SHARED_TYPE_ANY;
 
-	for_each_possible_cpu(i) {
+	for_each_online_cpu(i) {
 		if (i == cpu)
 			continue;
 
drivers/android/binder.c +1 -1
index 73fd95bc70c03..24906f085b940 100644
@@ -4008,7 +4008,7 @@ static int binder_thread_write(struct binder_proc *proc,
 				}
 			}
 			binder_debug(BINDER_DEBUG_DEAD_BINDER,
-				     "%d:%d BC_DEAD_BINDER_DONE %016llx found %pK\n",
+				     "%d:%d BC_DEAD_BINDER_DONE %016llx found %p\n",
 				     proc->pid, thread->pid, (u64)cookie,
 				     death);
 			if (death == NULL) {
drivers/android/binder_alloc.c +3 -3
index 813894ba5da6b..cb46d36e219a0 100644
@@ -79,7 +79,7 @@ static void binder_insert_free_buffer(struct binder_alloc *alloc,
 	new_buffer_size = binder_alloc_buffer_size(alloc, new_buffer);
 
 	binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
-		     "%d: add free buffer, size %zd, at %pK\n",
+		     "%d: add free buffer, size %zd, at %p\n",
 		      alloc->pid, new_buffer_size, new_buffer);
 
 	while (*p) {
@@ -474,7 +474,7 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
 	}
 
 	binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
-		     "%d: binder_alloc_buf size %zd got buffer %pK size %zd\n",
+		     "%d: binder_alloc_buf size %zd got buffer %p size %zd\n",
 		      alloc->pid, size, buffer, buffer_size);
 
 	has_page_addr = (void __user *)
@@ -646,7 +646,7 @@ static void binder_free_buf_locked(struct binder_alloc *alloc,
 		ALIGN(buffer->extra_buffers_size, sizeof(void *));
 
 	binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
-		     "%d: binder_free_buf %pK size %zd buffer_size %zd\n",
+		     "%d: binder_free_buf %p size %zd buffer_size %zd\n",
 		      alloc->pid, buffer, size, buffer_size);
 
 	BUG_ON(buffer->free);
drivers/ata/pata_ftide010.c +3 -3
index bc30e2f305beb..4c72903575e76 100644
@@ -123,10 +123,10 @@ static const u8 mwdma_50_active_time[3] = {6, 2, 2};
 static const u8 mwdma_50_recovery_time[3] = {6, 2, 1};
 static const u8 mwdma_66_active_time[3] = {8, 3, 3};
 static const u8 mwdma_66_recovery_time[3] = {8, 2, 1};
-static const u8 udma_50_setup_time[6] = {3, 3, 2, 2, 1, 1};
+static const u8 udma_50_setup_time[6] = {3, 3, 2, 2, 1, 9};
 static const u8 udma_50_hold_time[6] = {3, 1, 1, 1, 1, 1};
-static const u8 udma_66_setup_time[7] = {4, 4, 3, 2, };
-static const u8 udma_66_hold_time[7] = {};
+static const u8 udma_66_setup_time[7] = {4, 4, 3, 2, 1, 9, 9};
+static const u8 udma_66_hold_time[7] = {4, 2, 1, 1, 1, 1, 1};
 
 /*
  * We set 66 MHz for all MWDMA modes
drivers/atm/fore200e.c +4 -0
index b57faf6dc327e..ca3051e0023e8 100644
@@ -376,6 +376,10 @@ fore200e_shutdown(struct fore200e* fore200e)
 	fallthrough;
     case FORE200E_STATE_IRQ:
 	free_irq(fore200e->irq, fore200e->atm_dev);
+#ifdef FORE200E_USE_TASKLET
+	tasklet_kill(&fore200e->tx_tasklet);
+	tasklet_kill(&fore200e->rx_tasklet);
+#endif
 
 	fallthrough;
     case FORE200E_STATE_ALLOC_BUF:
drivers/auxdisplay/arm-charlcd.c +1 -1
index 0b1c99cca7334..f418b133ee752 100644
@@ -323,7 +323,7 @@ static int __init charlcd_probe(struct platform_device *pdev)
 out_no_irq:
 	iounmap(lcd->virtbase);
 out_no_memregion:
-	release_mem_region(lcd->phybase, SZ_4K);
+	release_mem_region(lcd->phybase, lcd->physize);
 out_no_resource:
 	kfree(lcd);
 	return ret;
drivers/base/power/wakeirq.c +6 -3
index ab6eced7f5762..0328ee03c1bfc 100644
@@ -83,13 +83,16 @@ EXPORT_SYMBOL_GPL(dev_pm_set_wake_irq);
  */
 void dev_pm_clear_wake_irq(struct device *dev)
 {
-	struct wake_irq *wirq = dev->power.wakeirq;
+	struct wake_irq *wirq;
 	unsigned long flags;
 
-	if (!wirq)
+	spin_lock_irqsave(&dev->power.lock, flags);
+	wirq = dev->power.wakeirq;
+	if (!wirq) {
+		spin_unlock_irqrestore(&dev->power.lock, flags);
 		return;
+	}
 
-	spin_lock_irqsave(&dev->power.lock, flags);
 	device_wakeup_detach_irq(dev);
 	dev->power.wakeirq = NULL;
 	spin_unlock_irqrestore(&dev->power.lock, flags);
drivers/base/power/wakeup.c +1 -3
index 8666590201c9a..4ef4c8dfd2bc7 100644
@@ -285,9 +285,7 @@ EXPORT_SYMBOL_GPL(wakeup_sources_read_unlock);
  */
 struct wakeup_source *wakeup_sources_walk_start(void)
 {
-	struct list_head *ws_head = &wakeup_sources;
-
-	return list_entry_rcu(ws_head->next, struct wakeup_source, entry);
+	return list_first_or_null_rcu(&wakeup_sources, struct wakeup_source, entry);
 }
 EXPORT_SYMBOL_GPL(wakeup_sources_walk_start);
 
drivers/block/rnbd/rnbd-srv.c +3 -0
index 86a6242d9c205..3af8c4e49fe4c 100644
@@ -546,6 +546,8 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp,
 	struct rnbd_dev *rnbd_dev = sess_dev->rnbd_dev;
 	struct request_queue *q = bdev_get_queue(rnbd_dev->bdev);
 
+	memset(rsp, 0, sizeof(*rsp));
+
 	rsp->hdr.type = cpu_to_le16(RNBD_MSG_OPEN_RSP);
 	rsp->device_id =
 		cpu_to_le32(sess_dev->device_id);
@@ -663,6 +665,7 @@ static int process_msg_sess_info(struct rnbd_srv_session *srv_sess,
 		 srv_sess->sessname, srv_sess->ver,
 		 sess_info_msg->ver, RNBD_PROTO_VER_MAJOR);
 
+	memset(rsp, 0, sizeof(*rsp));
 	rsp->hdr.type = cpu_to_le16(RNBD_MSG_SESS_INFO_RSP);
 	rsp->ver = srv_sess->ver;
 
drivers/bluetooth/btusb.c +1 -0
index c447e2e9417b3..a79fd106fad7a 100644
@@ -512,6 +512,7 @@ static const struct usb_device_id blacklist_table[] = {
 
 	/* Additional Realtek 8723BU Bluetooth devices */
 	{ USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK },
+	{ USB_DEVICE(0x2c0a, 0x8761), .driver_info = BTUSB_REALTEK },
 
 	/* Additional Realtek 8723DE Bluetooth devices */
 	{ USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK },
drivers/bluetooth/hci_qca.c +14 -10
index 26b5811272667..c0de1b22e7539 100644
@@ -1907,19 +1907,23 @@ static int qca_setup(struct hci_uart *hu)
 	}
 
 out:
-	if (ret && retries < MAX_INIT_RETRIES) {
-		bt_dev_warn(hdev, "Retry BT power ON:%d", retries);
+	if (ret) {
 		qca_power_shutdown(hu);
-		if (hu->serdev) {
-			serdev_device_close(hu->serdev);
-			ret = serdev_device_open(hu->serdev);
-			if (ret) {
-				bt_dev_err(hdev, "failed to open port");
-				return ret;
+
+		if (retries < MAX_INIT_RETRIES) {
+			bt_dev_warn(hdev, "Retry BT power ON:%d", retries);
+			if (hu->serdev) {
+				serdev_device_close(hu->serdev);
+				ret = serdev_device_open(hu->serdev);
+				if (ret) {
+					bt_dev_err(hdev, "failed to open port");
+					return ret;
+				}
 			}
+			retries++;
+			goto retry;
 		}
-		retries++;
-		goto retry;
+		return ret;
 	}
 
 	/* Setup bdaddr */
drivers/bus/fsl-mc/fsl-mc-bus.c +1 -5
index dc35de3e4379e..bd086f8c4faa4 100644
@@ -910,11 +910,7 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
 	return 0;
 
 error_cleanup_dev:
-	kfree(mc_dev->regions);
-	if (mc_bus)
-		kfree(mc_bus);
-	else
-		kfree(mc_dev);
+	put_device(&mc_dev->dev);
 
 	return error;
 }
drivers/char/tpm/st33zp24/st33zp24.c +4 -2
index 4ec10ab5e5766..33ee4fe693796 100644
@@ -381,8 +381,10 @@ static int st33zp24_send(struct tpm_chip *chip, unsigned char *buf,
 
 	for (i = 0; i < len - 1;) {
 		burstcnt = get_burstcount(chip);
-		if (burstcnt < 0)
-			return burstcnt;
+		if (burstcnt < 0) {
+			ret = burstcnt;
+			goto out_err;
+		}
 		size = min_t(int, len - i - 1, burstcnt);
 		ret = tpm_dev->ops->send(tpm_dev->phy_id, TPM_DATA_FIFO,
 					 buf + i, size);
drivers/char/tpm/tpm_i2c_infineon.c +4 -2
index a19d32cb4e942..cabc9e1b49321 100644
@@ -543,8 +543,10 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len)
 		burstcnt = get_burstcount(chip);
 
 		/* burstcnt < 0 = TPM is busy */
-		if (burstcnt < 0)
-			return burstcnt;
+		if (burstcnt < 0) {
+			rc = burstcnt;
+			goto out_err;
+		}
 
 		if (burstcnt > (len - 1 - count))
 			burstcnt = len - 1 - count;
drivers/char/tpm/tpm_tis_i2c_cr50.c +1 -2
index e2ab6a329732b..beb338722d20c 100644
@@ -699,8 +699,7 @@ static int tpm_cr50_i2c_probe(struct i2c_client *client)
 
 	if (client->irq > 0) {
 		rc = devm_request_irq(dev, client->irq, tpm_cr50_i2c_int_handler,
-				      IRQF_TRIGGER_FALLING | IRQF_ONESHOT |
-				      IRQF_NO_AUTOEN,
+				      IRQF_TRIGGER_FALLING | IRQF_NO_AUTOEN,
 				      dev->driver->name, chip);
 		if (rc < 0) {
 			dev_err(dev, "Failed to probe IRQ %d\n", client->irq);
drivers/char/tpm/tpm_tis_spi_cr50.c +1 -1
index ea759af256345..c1188a6368288 100644
@@ -273,7 +273,7 @@ int cr50_spi_probe(struct spi_device *spi)
 	if (spi->irq > 0) {
 		ret = devm_request_irq(&spi->dev, spi->irq,
 				       cr50_spi_irq_handler,
-				       IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+				       IRQF_TRIGGER_RISING,
 				       "cr50_spi", cr50_phy);
 		if (ret < 0) {
 			if (ret == -EPROBE_DEFER)
drivers/clk/meson/gxbb.c +14 -3
index 35bc13e73c0dd..6f3918f0a7826 100644
@@ -316,12 +316,23 @@ static struct clk_regmap gxbb_hdmi_pll = {
 	},
 };
 
+/*
+ * GXL hdmi OD dividers are POWER_OF_TWO dividers but limited to /4.
+ * A divider value of 3 should map to /8 but instead map /4 so ignore it.
+ */
+static const struct clk_div_table gxl_hdmi_pll_od_div_table[] = {
+	{ .val = 0, .div = 1 },
+	{ .val = 1, .div = 2 },
+	{ .val = 2, .div = 4 },
+	{ /* sentinel */ }
+};
+
 static struct clk_regmap gxl_hdmi_pll_od = {
 	.data = &(struct clk_regmap_div_data){
 		.offset = HHI_HDMI_PLL_CNTL + 8,
 		.shift = 21,
 		.width = 2,
-		.flags = CLK_DIVIDER_POWER_OF_TWO,
+		.table = gxl_hdmi_pll_od_div_table,
 	},
 	.hw.init = &(struct clk_init_data){
 		.name = "hdmi_pll_od",
@@ -339,7 +350,7 @@ static struct clk_regmap gxl_hdmi_pll_od2 = {
 		.offset = HHI_HDMI_PLL_CNTL + 8,
 		.shift = 23,
 		.width = 2,
-		.flags = CLK_DIVIDER_POWER_OF_TWO,
+		.table = gxl_hdmi_pll_od_div_table,
 	},
 	.hw.init = &(struct clk_init_data){
 		.name = "hdmi_pll_od2",
@@ -357,7 +368,7 @@ static struct clk_regmap gxl_hdmi_pll = {
 		.offset = HHI_HDMI_PLL_CNTL + 8,
 		.shift = 19,
 		.width = 2,
-		.flags = CLK_DIVIDER_POWER_OF_TWO,
+		.table = gxl_hdmi_pll_od_div_table,
 	},
 	.hw.init = &(struct clk_init_data){
 		.name = "hdmi_pll",
drivers/clk/microchip/clk-core.c +12 -13
index 1b4f023cdc8be..71fbaf8318f22 100644
@@ -281,14 +281,13 @@ static u8 roclk_get_parent(struct clk_hw *hw)
 
 	v = (readl(refo->ctrl_reg) >> REFO_SEL_SHIFT) & REFO_SEL_MASK;
 
-	if (!refo->parent_map)
-		return v;
-
-	for (i = 0; i < clk_hw_get_num_parents(hw); i++)
-		if (refo->parent_map[i] == v)
-			return i;
+	if (refo->parent_map) {
+		for (i = 0; i < clk_hw_get_num_parents(hw); i++)
+			if (refo->parent_map[i] == v)
+				return i;
+	}
 
-	return -EINVAL;
+	return v;
 }
 
 static unsigned long roclk_calc_rate(unsigned long parent_rate,
@@ -823,13 +822,13 @@ static u8 sclk_get_parent(struct clk_hw *hw)
 
 	v = (readl(sclk->mux_reg) >> OSC_CUR_SHIFT) & OSC_CUR_MASK;
 
-	if (!sclk->parent_map)
-		return v;
+	if (sclk->parent_map) {
+		for (i = 0; i < clk_hw_get_num_parents(hw); i++)
+			if (sclk->parent_map[i] == v)
+				return i;
+	}
 
-	for (i = 0; i < clk_hw_get_num_parents(hw); i++)
-		if (sclk->parent_map[i] == v)
-			return i;
-	return -EINVAL;
+	return v;
 }
 
 static int sclk_set_parent(struct clk_hw *hw, u8 index)
drivers/clk/qcom/clk-rcg2.c +2 -4
index f3c225ed57377..05aa831ac7a44 100644
@@ -400,7 +400,7 @@ static int clk_rcg2_get_duty_cycle(struct clk_hw *hw, struct clk_duty *duty)
 static int clk_rcg2_set_duty_cycle(struct clk_hw *hw, struct clk_duty *duty)
 {
 	struct clk_rcg2 *rcg = to_clk_rcg2(hw);
-	u32 notn_m, n, m, d, not2d, mask, duty_per, cfg;
+	u32 notn_m, n, m, d, not2d, mask, cfg;
 	int ret;
 
 	/* Duty-cycle cannot be modified for non-MND RCGs */
@@ -419,10 +419,8 @@ static int clk_rcg2_set_duty_cycle(struct clk_hw *hw, struct clk_duty *duty)
 
 	n = (~(notn_m) + m) & mask;
 
-	duty_per = (duty->num * 100) / duty->den;
-
 	/* Calculate 2d value */
-	d = DIV_ROUND_CLOSEST(n * duty_per * 2, 100);
+	d = DIV_ROUND_CLOSEST(n * duty->num * 2, duty->den);
 
 	/*
 	 * Check bit widths of 2d. If D is too big reduce duty cycle.
drivers/clk/qcom/common.c +1 -1
index 2af04fc4abfa9..8aef7749f167d 100644
@@ -331,7 +331,7 @@ int qcom_cc_probe_by_index(struct platform_device *pdev, int index,
 	res = platform_get_resource(pdev, IORESOURCE_MEM, index);
 	base = devm_ioremap_resource(&pdev->dev, res);
 	if (IS_ERR(base))
-		return -ENOMEM;
+		return PTR_ERR(base);
 
 	regmap = devm_regmap_init_mmio(&pdev->dev, base, desc->config);
 	if (IS_ERR(regmap))
drivers/clk/qcom/dispcc-sdm845.c +2 -2
index e792e0b130d33..eae6dcff18da5 100644
@@ -280,7 +280,7 @@ static struct clk_rcg2 disp_cc_mdss_pclk0_clk_src = {
 		.name = "disp_cc_mdss_pclk0_clk_src",
 		.parent_data = disp_cc_parent_data_4,
 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
-		.flags = CLK_SET_RATE_PARENT,
+		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 		.ops = &clk_pixel_ops,
 	},
 };
@@ -295,7 +295,7 @@ static struct clk_rcg2 disp_cc_mdss_pclk1_clk_src = {
 		.name = "disp_cc_mdss_pclk1_clk_src",
 		.parent_data = disp_cc_parent_data_4,
 		.num_parents = ARRAY_SIZE(disp_cc_parent_data_4),
-		.flags = CLK_SET_RATE_PARENT,
+		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 		.ops = &clk_pixel_ops,
 	},
 };
drivers/clk/qcom/gcc-msm8953.c +0 -1
index 9d11f993843db..0d7235e1fd9e4 100644
@@ -3947,7 +3947,6 @@ static struct gdsc cpp_gdsc = {
 	.pd = {
 		.name = "cpp_gdsc",
 	},
-	.flags = ALWAYS_ON,
 	.pwrsts = PWRSTS_OFF_ON,
 };
 
drivers/clk/tegra/clk-tegra124-emc.c +3 -1
index 2a6db04342815..0f6fb776b2298 100644
@@ -538,8 +538,10 @@ struct clk *tegra124_clk_register_emc(void __iomem *base, struct device_node *np
 	tegra->hw.init = &init;
 
 	clk = clk_register(NULL, &tegra->hw);
-	if (IS_ERR(clk))
+	if (IS_ERR(clk)) {
+		kfree(tegra);
 		return clk;
+	}
 
 	tegra->prev_parent = clk_hw_get_parent_by_index(
 		&tegra->hw, emc_get_parent(&tegra->hw))->clk;
drivers/clocksource/Kconfig +1 -0
index 6382dad202207..133ee5c3c0bf8 100644
@@ -221,6 +221,7 @@ config KEYSTONE_TIMER
 
 config INTEGRATOR_AP_TIMER
 	bool "Integrator-AP timer driver" if COMPILE_TEST
+	depends on OF
 	select CLKSRC_MMIO
 	help
 	  Enables support for the Integrator-AP timer.
drivers/clocksource/sh_tmu.c +0 -18
index b00dec0655cb2..2e35bb39ef42f 100644
@@ -143,16 +143,6 @@ static void sh_tmu_start_stop_ch(struct sh_tmu_channel *ch, int start)
 
 static int __sh_tmu_enable(struct sh_tmu_channel *ch)
 {
-	int ret;
-
-	/* enable clock */
-	ret = clk_enable(ch->tmu->clk);
-	if (ret) {
-		dev_err(&ch->tmu->pdev->dev, "ch%u: cannot enable clock\n",
-			ch->index);
-		return ret;
-	}
-
 	/* make sure channel is disabled */
 	sh_tmu_start_stop_ch(ch, 0);
 
@@ -174,7 +164,6 @@ static int sh_tmu_enable(struct sh_tmu_channel *ch)
 	if (ch->enable_count++ > 0)
 		return 0;
 
-	pm_runtime_get_sync(&ch->tmu->pdev->dev);
 	dev_pm_syscore_device(&ch->tmu->pdev->dev, true);
 
 	return __sh_tmu_enable(ch);
@@ -187,9 +176,6 @@ static void __sh_tmu_disable(struct sh_tmu_channel *ch)
 
 	/* disable interrupts in TMU block */
 	sh_tmu_write(ch, TCR, TCR_TPSC_CLK4);
-
-	/* stop clock */
-	clk_disable(ch->tmu->clk);
 }
 
 static void sh_tmu_disable(struct sh_tmu_channel *ch)
@@ -203,7 +189,6 @@ static void sh_tmu_disable(struct sh_tmu_channel *ch)
 	__sh_tmu_disable(ch);
 
 	dev_pm_syscore_device(&ch->tmu->pdev->dev, false);
-	pm_runtime_put(&ch->tmu->pdev->dev);
 }
 
 static void sh_tmu_set_next(struct sh_tmu_channel *ch, unsigned long delta,
@@ -552,7 +537,6 @@ static int sh_tmu_setup(struct sh_tmu_device *tmu, struct platform_device *pdev)
 		goto err_clk_unprepare;
 
 	tmu->rate = clk_get_rate(tmu->clk) / 4;
-	clk_disable(tmu->clk);
 
 	/* Map the memory resource. */
 	ret = sh_tmu_map_memory(tmu);
@@ -626,8 +610,6 @@ static int sh_tmu_probe(struct platform_device *pdev)
  out:
 	if (tmu->has_clockevent || tmu->has_clocksource)
 		pm_runtime_irq_safe(&pdev->dev);
-	else
-		pm_runtime_idle(&pdev->dev);
 
 	return 0;
 }
drivers/cpuidle/cpuidle.c +10 -0
index e371d6972f8d9..20b9f77a8fb02 100644
@@ -319,6 +319,16 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
 int cpuidle_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
 		   bool *stop_tick)
 {
+	/*
+	 * If there is only a single idle state (or none), there is nothing
+	 * meaningful for the governor to choose. Skip the governor and
+	 * always use state 0 with the tick running.
+	 */
+	if (drv->state_count <= 1) {
+		*stop_tick = false;
+		return 0;
+	}
+
 	return cpuidle_curr_governor->select(drv, dev, stop_tick);
 }
 
drivers/crypto/cavium/cpt/cptvf_main.c +2 -1
index 112b12a32542b..aaf54cab19cc1 100644
@@ -183,7 +183,8 @@ static void free_command_queues(struct cpt_vf *cptvf,
 
 		hlist_for_each_entry_safe(chunk, node, &cqinfo->queue[i].chead,
 					  nextchunk) {
-			dma_free_coherent(&pdev->dev, chunk->size,
+			dma_free_coherent(&pdev->dev,
+					  chunk->size + CPT_NEXT_CHUNK_PTR_SIZE,
 					  chunk->head,
 					  chunk->dma_addr);
 			chunk->head = NULL;
drivers/crypto/ccp/psp-dev.c +11 -0
index 4bf9eaab4456f..61f5302e7cf1a 100644
@@ -251,6 +251,17 @@ struct psp_device *psp_get_master_device(void)
 	return sp ? sp->psp_data : NULL;
 }
 
+int psp_restore(struct sp_device *sp)
+{
+	struct psp_device *psp = sp->psp_data;
+	int ret = 0;
+
+	if (psp->tee_data)
+		ret = tee_restore(psp);
+
+	return ret;
+}
+
 void psp_pci_init(void)
 {
 	psp_master = psp_get_master_device();
drivers/crypto/ccp/sp-dev.c +12 -0
index 7eb3e46682860..ccbe009ad6e58 100644
@@ -229,6 +229,18 @@ int sp_resume(struct sp_device *sp)
 	return 0;
 }
 
+int sp_restore(struct sp_device *sp)
+{
+	if (sp->psp_data) {
+		int ret = psp_restore(sp);
+
+		if (ret)
+			return ret;
+	}
+
+	return sp_resume(sp);
+}
+
 struct sp_device *sp_get_psp_master_device(void)
 {
 	struct sp_device *i, *ret = NULL;
drivers/crypto/ccp/sp-dev.h +3 -0
index 20377e67f65df..731e34a65b640 100644
@@ -121,6 +121,7 @@ struct sp_device *sp_get_master(void);
 
 int sp_suspend(struct sp_device *sp);
 int sp_resume(struct sp_device *sp);
+int sp_restore(struct sp_device *sp);
 int sp_request_ccp_irq(struct sp_device *sp, irq_handler_t handler,
 		       const char *name, void *data);
 void sp_free_ccp_irq(struct sp_device *sp, void *data);
@@ -154,6 +155,7 @@ int psp_dev_init(struct sp_device *sp);
 void psp_pci_init(void);
 void psp_dev_destroy(struct sp_device *sp);
 void psp_pci_exit(void);
+int psp_restore(struct sp_device *sp);
 
 #else /* !CONFIG_CRYPTO_DEV_SP_PSP */
 
@@ -161,6 +163,7 @@ static inline int psp_dev_init(struct sp_device *sp) { return 0; }
 static inline void psp_pci_init(void) { }
 static inline void psp_dev_destroy(struct sp_device *sp) { }
 static inline void psp_pci_exit(void) { }
+static inline int psp_restore(struct sp_device *sp) { return 0; }
 
 #endif /* CONFIG_CRYPTO_DEV_SP_PSP */
 
drivers/crypto/ccp/sp-pci.c +15 -1
index f9178821023da..3971702835a27 100644
@@ -282,6 +282,13 @@ static int __maybe_unused sp_pci_resume(struct device *dev)
 	return sp_resume(sp);
 }
 
+static int __maybe_unused sp_pci_restore(struct device *dev)
+{
+	struct sp_device *sp = dev_get_drvdata(dev);
+
+	return sp_restore(sp);
+}
+
 #ifdef CONFIG_CRYPTO_DEV_SP_PSP
 static const struct sev_vdata sevv1 = {
 	.cmdresp_reg		= 0x10580,
@@ -394,7 +401,14 @@ static const struct pci_device_id sp_pci_table[] = {
 };
 MODULE_DEVICE_TABLE(pci, sp_pci_table);
 
-static SIMPLE_DEV_PM_OPS(sp_pci_pm_ops, sp_pci_suspend, sp_pci_resume);
+static const struct dev_pm_ops sp_pci_pm_ops = {
+	.suspend = pm_sleep_ptr(sp_pci_suspend),
+	.resume = pm_sleep_ptr(sp_pci_resume),
+	.freeze = pm_sleep_ptr(sp_pci_suspend),
+	.thaw = pm_sleep_ptr(sp_pci_resume),
+	.poweroff = pm_sleep_ptr(sp_pci_suspend),
+	.restore_early = pm_sleep_ptr(sp_pci_restore),
+};
 
 static struct pci_driver sp_pci_driver = {
 	.name = "ccp",
drivers/crypto/ccp/tee-dev.c +5 -0
index 5c9d47f3be375..c0dc462a94288 100644
@@ -394,3 +394,8 @@ int psp_check_tee_status(void)
 	return 0;
 }
 EXPORT_SYMBOL(psp_check_tee_status);
+
+int tee_restore(struct psp_device *psp)
+{
+	return tee_init_ring(psp->tee_data);
+}
drivers/crypto/ccp/tee-dev.h +1 -0
index 49d26158b71e3..b0bf1de94ea6f 100644
@@ -122,5 +122,6 @@ struct tee_ring_cmd {
 
 int tee_dev_init(struct psp_device *psp);
 void tee_dev_destroy(struct psp_device *psp);
+int tee_restore(struct psp_device *psp);
 
 #endif /* __TEE_DEV_H__ */
drivers/crypto/hisilicon/trng/trng.c +87 -36

232 lines not on this page · raw message

drivers/crypto/marvell/octeontx/otx_cptvf_main.c +2 -1
index c076d0b3ad5f1..bbac7778201d2 100644
@@ -170,7 +170,8 @@ static void free_command_queues(struct otx_cptvf *cptvf,
 			chunk = list_first_entry(&cqinfo->queue[i].chead,
 					struct otx_cpt_cmd_chunk, nextchunk);
 
-			dma_free_coherent(&pdev->dev, chunk->size,
+			dma_free_coherent(&pdev->dev,
+					  chunk->size + OTX_CPT_NEXT_CHUNK_PTR_SIZE,
 					  chunk->head,
 					  chunk->dma_addr);
 			chunk->head = NULL;
drivers/dma/dma-axi-dmac.c +1 -2
index e91aeec71c811..6194ef0ac17f6 100644
@@ -221,6 +221,7 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
 			return;
 		list_move_tail(&vdesc->node, &chan->active_descs);
 		desc = to_axi_dmac_desc(vdesc);
+		chan->next_desc = desc;
 	}
 	sg = &desc->sg[desc->num_submitted];
 
@@ -238,8 +239,6 @@ static void axi_dmac_start_transfer(struct axi_dmac_chan *chan)
 		else
 			chan->next_desc = NULL;
 		flags |= AXI_DMAC_FLAG_LAST;
-	} else {
-		chan->next_desc = desc;
 	}
 
 	sg->id = axi_dmac_read(dmac, AXI_DMAC_REG_TRANSFER_ID);
drivers/dma/mediatek/mtk-uart-apdma.c +5 -5
index 0acf6a92a4ad3..c1e132a110ffb 100644
@@ -42,7 +42,7 @@
 #define VFF_STOP_CLR_B		0
 #define VFF_EN_CLR_B		0
 #define VFF_INT_EN_CLR_B	0
-#define VFF_4G_SUPPORT_CLR_B	0
+#define VFF_ADDR2_CLR_B		0
 
 /*
  * interrupt trigger level for tx
@@ -73,7 +73,7 @@
 /* TX: the buffer size SW can write. RX: the buffer size HW can write. */
 #define VFF_LEFT_SIZE		0x40
 #define VFF_DEBUG_STATUS	0x50
-#define VFF_4G_SUPPORT		0x54
+#define VFF_ADDR2		0x54
 
 struct mtk_uart_apdmadev {
 	struct dma_device ddev;
@@ -150,7 +150,7 @@ static void mtk_uart_apdma_start_tx(struct mtk_chan *c)
 		mtk_uart_apdma_write(c, VFF_INT_FLAG, VFF_TX_INT_CLR_B);
 
 		if (mtkd->support_33bits)
-			mtk_uart_apdma_write(c, VFF_4G_SUPPORT, VFF_4G_EN_B);
+			mtk_uart_apdma_write(c, VFF_ADDR2, upper_32_bits(d->addr));
 	}
 
 	mtk_uart_apdma_write(c, VFF_EN, VFF_EN_B);
@@ -193,7 +193,7 @@ static void mtk_uart_apdma_start_rx(struct mtk_chan *c)
 		mtk_uart_apdma_write(c, VFF_INT_FLAG, VFF_RX_INT_CLR_B);
 
 		if (mtkd->support_33bits)
-			mtk_uart_apdma_write(c, VFF_4G_SUPPORT, VFF_4G_EN_B);
+			mtk_uart_apdma_write(c, VFF_ADDR2, upper_32_bits(d->addr));
 	}
 
 	mtk_uart_apdma_write(c, VFF_INT_EN, VFF_RX_INT_EN_B);
@@ -299,7 +299,7 @@ static int mtk_uart_apdma_alloc_chan_resources(struct dma_chan *chan)
 	}
 
 	if (mtkd->support_33bits)
-		mtk_uart_apdma_write(c, VFF_4G_SUPPORT, VFF_4G_SUPPORT_CLR_B);
+		mtk_uart_apdma_write(c, VFF_ADDR2, VFF_ADDR2_CLR_B);
 
 err_pm:
 	pm_runtime_put_noidle(mtkd->ddev.dev);
drivers/edac/altera_edac.c +4 -7
index f1f8c34638339..ff65779b5d657 100644
@@ -1535,8 +1535,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
 		goto err_release_group_1;
 	}
 	rc = devm_request_irq(&altdev->ddev, altdev->sb_irq,
-			      prv->ecc_irq_handler,
-			      IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+			      prv->ecc_irq_handler, IRQF_TRIGGER_HIGH,
 			      ecc_name, altdev);
 	if (rc) {
 		edac_printk(KERN_ERR, EDAC_DEVICE, "PortB SBERR IRQ error\n");
@@ -1559,8 +1558,7 @@ static int altr_portb_setup(struct altr_edac_device_dev *device)
 		goto err_release_group_1;
 	}
 	rc = devm_request_irq(&altdev->ddev, altdev->db_irq,
-			      prv->ecc_irq_handler,
-			      IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+			      prv->ecc_irq_handler, IRQF_TRIGGER_HIGH,
 			      ecc_name, altdev);
 	if (rc) {
 		edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n");
@@ -1943,8 +1941,7 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
 		goto err_release_group1;
 	}
 	rc = devm_request_irq(edac->dev, altdev->sb_irq, prv->ecc_irq_handler,
-			      IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
-			      ecc_name, altdev);
+			      IRQF_TRIGGER_HIGH, ecc_name, altdev);
 	if (rc) {
 		edac_printk(KERN_ERR, EDAC_DEVICE, "No SBERR IRQ resource\n");
 		goto err_release_group1;
@@ -1966,7 +1963,7 @@ static int altr_edac_a10_device_add(struct altr_arria10_edac *edac,
 		goto err_release_group1;
 	}
 	rc = devm_request_irq(edac->dev, altdev->db_irq, prv->ecc_irq_handler,
-			      IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+			      IRQF_TRIGGER_HIGH,
 			      ecc_name, altdev);
 	if (rc) {
 		edac_printk(KERN_ERR, EDAC_DEVICE, "No DBERR IRQ resource\n");
drivers/edac/i5000_edac.c +1 -0
index ba46057d42207..3d82ab8eb2c71 100644
@@ -1111,6 +1111,7 @@ static void calculate_dimm_size(struct i5000_pvt *pvt)
 
 	n = snprintf(p, space, "           ");
 	p += n;
+	space -= n;
 	for (branch = 0; branch < MAX_BRANCHES; branch++) {
 		n = snprintf(p, space, "       branch %d       | ", branch);
 		p += n;
drivers/edac/i5400_edac.c +1 -1
index f76624ee82ef7..5b1188f1b5705 100644
@@ -1024,13 +1024,13 @@ static void calculate_dimm_size(struct i5400_pvt *pvt)
 		space -= n;
 	}
 
-	space -= n;
 	edac_dbg(2, "%s\n", mem_buffer);
 	p = mem_buffer;
 	space = PAGE_SIZE;
 
 	n = snprintf(p, space, "           ");
 	p += n;
+	space -= n;
 	for (branch = 0; branch < MAX_BRANCHES; branch++) {
 		n = snprintf(p, space, "       branch %d       | ", branch);
 		p += n;
drivers/firmware/efi/cper-arm.c +8 -4
index ea43589944ba5..26a12f8076359 100644
@@ -227,7 +227,8 @@ static void cper_print_arm_err_info(const char *pfx, u32 type,
 }
 
 void cper_print_proc_arm(const char *pfx,
-			 const struct cper_sec_proc_arm *proc)
+			 const struct cper_sec_proc_arm *proc,
+			 u32 length)
 {
 	int i, len, max_ctx_type;
 	struct cper_arm_err_info *err_info;
@@ -239,9 +240,12 @@ void cper_print_proc_arm(const char *pfx,
 
 	len = proc->section_length - (sizeof(*proc) +
 		proc->err_info_num * (sizeof(*err_info)));
-	if (len < 0) {
-		printk("%ssection length: %d\n", pfx, proc->section_length);
-		printk("%ssection length is too small\n", pfx);
+
+	if (len < 0 || proc->section_length > length) {
+		printk("%ssection length: %d, CPER size: %d\n",
+		       pfx, proc->section_length, length);
+		printk("%ssection length is too %s\n", pfx,
+		       (len < 0) ? "small" : "big");
 		printk("%sfirmware-generated error record is incorrect\n", pfx);
 		printk("%sERR_INFO_NUM is %d\n", pfx, proc->err_info_num);
 		return;
drivers/firmware/efi/cper.c +7 -1
index f00ee3eef71b8..d45f653502206 100644
@@ -523,6 +523,11 @@ static void cper_print_fw_err(const char *pfx,
 	} else {
 		offset = sizeof(*fw_err);
 	}
+	if (offset > length) {
+		printk("%s""error section length is too small: offset=%d, length=%d\n",
+		       pfx, offset, length);
+		return;
+	}
 
 	buf += offset;
 	length -= offset;
@@ -603,7 +608,8 @@ cper_estatus_print_section(const char *pfx, struct acpi_hest_generic_data *gdata
 
 		printk("%ssection_type: ARM processor error\n", newpfx);
 		if (gdata->error_data_length >= sizeof(*arm_err))
-			cper_print_proc_arm(newpfx, arm_err);
+			cper_print_proc_arm(newpfx, arm_err,
+					    gdata->error_data_length);
 		else
 			goto err_section_too_small;
 #endif
drivers/fpga/dfl.c +1 -1
index 071c25c164a82..71de5fd313840 100644
@@ -1880,7 +1880,7 @@ static void __exit dfl_fpga_exit(void)
 	bus_unregister(&dfl_bus_type);
 }
 
-module_init(dfl_fpga_init);
+subsys_initcall(dfl_fpga_init);
 module_exit(dfl_fpga_exit);
 
 MODULE_DESCRIPTION("FPGA Device Feature List (DFL) Support");
drivers/gpio/gpio-aspeed-sgpio.c +3 -2
index 454cefbeecf0e..e523a539410a8 100644
@@ -508,7 +508,7 @@ static const struct of_device_id aspeed_sgpio_of_table[] = {
 
 MODULE_DEVICE_TABLE(of, aspeed_sgpio_of_table);
 
-static int __init aspeed_sgpio_probe(struct platform_device *pdev)
+static int aspeed_sgpio_probe(struct platform_device *pdev)
 {
 	u32 nr_gpios, sgpio_freq, sgpio_clk_div, gpio_cnt_regval, pin_mask;
 	const struct aspeed_sgpio_pdata *pdata;
@@ -601,12 +601,13 @@ static int __init aspeed_sgpio_probe(struct platform_device *pdev)
 }
 
 static struct platform_driver aspeed_sgpio_driver = {
+	.probe = aspeed_sgpio_probe,
 	.driver = {
 		.name = KBUILD_MODNAME,
 		.of_match_table = aspeed_sgpio_of_table,
 	},
 };
 
-module_platform_driver_probe(aspeed_sgpio_driver, aspeed_sgpio_probe);
+module_platform_driver(aspeed_sgpio_driver);
 MODULE_DESCRIPTION("Aspeed Serial GPIO Driver");
 MODULE_LICENSE("GPL");
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +10 -0
index 9ff600a38559d..259897f1ea8a4 100644
@@ -693,6 +693,16 @@ void amdgpu_gmc_get_vbios_allocations(struct amdgpu_device *adev)
 	case CHIP_RENOIR:
 		adev->mman.keep_stolen_vga_memory = true;
 		break;
+	case CHIP_POLARIS10:
+	case CHIP_POLARIS11:
+	case CHIP_POLARIS12:
+		/* MacBookPros with switchable graphics put VRAM at 0 when
+		 * the iGPU is enabled which results in cursor issues if
+		 * the cursor ends up at 0.  Reserve vram at 0 in that case.
+		 */
+		if (adev->gmc.vram_start == 0)
+			adev->mman.keep_stolen_vga_memory = true;
+		break;
 	default:
 		adev->mman.keep_stolen_vga_memory = false;
 		break;
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +1 -1
index 64bf24b64446b..7f84c202aeb7f 100644
@@ -488,7 +488,7 @@ psp_cmd_submit_buf(struct psp_context *psp,
 		ras_intr = amdgpu_ras_intr_triggered();
 		if (ras_intr)
 			break;
-		usleep_range(10, 100);
+		usleep_range(60, 100);
 		amdgpu_device_invalidate_hdp(psp->adev, NULL);
 	}
 
drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c +23 -22

131 lines not on this page · raw message

drivers/gpu/drm/amd/amdkfd/kfd_events.c +6 -0
index 8b5c82af2acd7..5b8f665e033bc 100644
@@ -303,6 +303,12 @@ int kfd_event_page_set(struct kfd_process *p, void *kernel_address,
 	if (p->signal_page)
 		return -EBUSY;
 
+	if (size < KFD_SIGNAL_EVENT_LIMIT * 8) {
+		pr_err("Event page size %llu is too small, need at least %lu bytes\n",
+				size, (unsigned long)(KFD_SIGNAL_EVENT_LIMIT * 8));
+		return -EINVAL;
+	}
+
 	page = kzalloc(sizeof(*page), GFP_KERNEL);
 	if (!page)
 		return -ENOMEM;
drivers/gpu/drm/amd/amdkfd/kfd_migrate.c +1 -1
index 013749cd3ae29..2396f79470d9b 100644
@@ -57,7 +57,7 @@ svm_migrate_gart_map(struct amdgpu_ring *ring, uint64_t npages,
 	*gart_addr = adev->gmc.gart_start;
 
 	num_dw = ALIGN(adev->mman.buffer_funcs->copy_num_dw, 8);
-	num_bytes = npages * 8;
+	num_bytes = npages * 8 * AMDGPU_GPU_PAGES_IN_CPU_PAGE;
 
 	r = amdgpu_job_alloc_with_ib(adev, num_dw * 4 + num_bytes,
 				     AMDGPU_IB_POOL_DELAYED, &job);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -1
index 5d22622f9c1a8..9a6c0b17745e5 100644
@@ -9875,7 +9875,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
 		 * To fix this, DC should permit updating only stream properties.
 		 */
 		for (j = 0; j < status->plane_count; j++)
-			dummy_updates[j].surface = status->plane_states[0];
+			dummy_updates[j].surface = status->plane_states[j];
 
 
 		mutex_lock(&dm->dc_lock);
drivers/gpu/drm/amd/pm/powerplay/si_dpm.c +5 -0
index a6ed28ab07083..35160f1f323be 100644
@@ -3426,6 +3426,11 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,
 			max_sclk = 60000;
 			max_mclk = 80000;
 		}
+		if ((adev->pdev->device == 0x666f) &&
+		    (adev->pdev->revision == 0x00)) {
+			max_sclk = 80000;
+			max_mclk = 95000;
+		}
 	} else if (adev->asic_type == CHIP_OLAND) {
 		if ((adev->pdev->revision == 0xC7) ||
 		    (adev->pdev->revision == 0x80) ||
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c +6 -19
index a077d93c78d7b..fba7e4b52e978 100644
@@ -77,8 +77,6 @@ drm_plane_state_to_atmel_hlcdc_plane_state(struct drm_plane_state *s)
 	return container_of(s, struct atmel_hlcdc_plane_state, base);
 }
 
-#define SUBPIXEL_MASK			0xffff
-
 static uint32_t rgb_formats[] = {
 	DRM_FORMAT_C8,
 	DRM_FORMAT_XRGB4444,
@@ -618,24 +616,15 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
 	if (ret || !s->visible)
 		return ret;
 
-	hstate->src_x = s->src.x1;
-	hstate->src_y = s->src.y1;
-	hstate->src_w = drm_rect_width(&s->src);
-	hstate->src_h = drm_rect_height(&s->src);
+	hstate->src_x = s->src.x1 >> 16;
+	hstate->src_y = s->src.y1 >> 16;
+	hstate->src_w = drm_rect_width(&s->src) >> 16;
+	hstate->src_h = drm_rect_height(&s->src) >> 16;
 	hstate->crtc_x = s->dst.x1;
 	hstate->crtc_y = s->dst.y1;
 	hstate->crtc_w = drm_rect_width(&s->dst);
 	hstate->crtc_h = drm_rect_height(&s->dst);
 
-	if ((hstate->src_x | hstate->src_y | hstate->src_w | hstate->src_h) &
-	    SUBPIXEL_MASK)
-		return -EINVAL;
-
-	hstate->src_x >>= 16;
-	hstate->src_y >>= 16;
-	hstate->src_w >>= 16;
-	hstate->src_h >>= 16;
-
 	hstate->nplanes = fb->format->num_planes;
 	if (hstate->nplanes > ATMEL_HLCDC_LAYER_MAX_PLANES)
 		return -EINVAL;
@@ -914,8 +903,7 @@ atmel_hlcdc_plane_atomic_duplicate_state(struct drm_plane *p)
 		return NULL;
 	}
 
-	if (copy->base.fb)
-		drm_framebuffer_get(copy->base.fb);
+	__drm_atomic_helper_plane_duplicate_state(p, &copy->base);
 
 	return &copy->base;
 }
@@ -933,8 +921,7 @@ static void atmel_hlcdc_plane_atomic_destroy_state(struct drm_plane *p,
 			      state->dscrs[i]->self);
 	}
 
-	if (s->fb)
-		drm_framebuffer_put(s->fb);
+	__drm_atomic_helper_plane_destroy_state(s);
 
 	kfree(state);
 }
drivers/gpu/drm/drm_property.c +1 -1
index 6c353c9dc772e..125a807e6e0ec 100644
@@ -564,7 +564,7 @@ drm_property_create_blob(struct drm_device *dev, size_t length,
 	if (!length || length > INT_MAX - sizeof(struct drm_property_blob))
 		return ERR_PTR(-EINVAL);
 
-	blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
+	blob = kvzalloc(sizeof(struct drm_property_blob) + length, GFP_KERNEL_ACCOUNT);
 	if (!blob)
 		return ERR_PTR(-ENOMEM);
 
drivers/gpu/drm/i915/display/intel_acpi.c +1 -0
index 68abeaf2d7d4d..63c046cdbad6c 100644
@@ -92,6 +92,7 @@ static void intel_dsm_platform_mux_info(acpi_handle dhandle)
 
 	if (!pkg->package.count) {
 		DRM_DEBUG_DRIVER("no connection in _DSM\n");
+		ACPI_FREE(pkg);
 		return;
 	}
 
drivers/gpu/drm/radeon/si_dpm.c +5 -0
index 3add39c1a6897..82a93f7aeafb4 100644
@@ -2969,6 +2969,11 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev,
 			max_sclk = 60000;
 			max_mclk = 80000;
 		}
+		if ((rdev->pdev->device == 0x666f) &&
+		    (rdev->pdev->revision == 0x00)) {
+			max_sclk = 80000;
+			max_mclk = 95000;
+		}
 	} else if (rdev->family == CHIP_OLAND) {
 		if ((rdev->pdev->revision == 0xC7) ||
 		    (rdev->pdev->revision == 0x80) ||
drivers/gpu/drm/v3d/v3d_drv.c +2 -0
index 6407a006d6ec4..692131c7fa36d 100644
@@ -246,6 +246,8 @@ static int v3d_platform_drm_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
+	dma_set_max_seg_size(&pdev->dev, UINT_MAX);
+
 	v3d->va_width = 30 + V3D_GET_FIELD(mmu_debug, V3D_MMU_VA_WIDTH);
 
 	ident1 = V3D_READ(V3D_HUB_IDENT1);
drivers/hid/Kconfig +1 -0
index 9235ab7161e3a..e1bd249666a2b 100644
@@ -337,6 +337,7 @@ config HID_ELECOM
 	  - EX-G Trackballs (M-XT3DRBK, M-XT3URBK)
 	  - DEFT Trackballs (M-DT1DRBK, M-DT1URBK, M-DT2DRBK, M-DT2URBK)
 	  - HUGE Trackballs (M-HT1DRBK, M-HT1URBK)
+	  - HUGE Plus Trackball (M-HT1MRBK)
 
 config HID_ELO
 	tristate "ELO USB 4000/4500 touchscreen"
drivers/hid/hid-elecom.c +16 -0
index f76fec79e8903..9aeb2d2b43a43 100644
@@ -5,6 +5,7 @@
  *  - EX-G Trackballs (M-XT3DRBK, M-XT3URBK, M-XT4DRBK)
  *  - DEFT Trackballs (M-DT1DRBK, M-DT1URBK, M-DT2DRBK, M-DT2URBK)
  *  - HUGE Trackballs (M-HT1DRBK, M-HT1URBK)
+ *  - HUGE Plus Trackball (M-HT1MRBK)
  *
  *  Copyright (c) 2010 Richard Nauber <[email protected]>
  *  Copyright (c) 2016 Yuxuan Shui <[email protected]>
@@ -111,12 +112,25 @@ static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
 		 */
 		mouse_button_fixup(hdev, rdesc, *rsize, 22, 30, 24, 16, 8);
 		break;
+	case USB_DEVICE_ID_ELECOM_M_HT1MRBK:
+	case USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB:
+	case USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC:
+		/*
+		 * Report descriptor format:
+		 * 24: button bit count
+		 * 28: padding bit count
+		 * 22: button report size
+		 * 16: button usage maximum
+		 */
+		mouse_button_fixup(hdev, rdesc, *rsize, 24, 28, 22, 16, 8);
+		break;
 	}
 	return rdesc;
 }
 
 static const struct hid_device_id elecom_devices[] = {
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XGL20DLBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_018F) },
@@ -127,6 +141,8 @@ static const struct hid_device_id elecom_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB) },
 	{ }
 };
 MODULE_DEVICE_TABLE(hid, elecom_devices);
drivers/hid/hid-ids.h +4 -0
index 1dc28cabd71d5..37beb969268c3 100644
@@ -399,6 +399,7 @@
 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349	0x7349
 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7	0x73f7
 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001	0xa001
+#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C000	0xc000
 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002	0xc002
 
 #define USB_VENDOR_ID_EDIFIER		0x2d99
@@ -428,6 +429,9 @@
 #define USB_DEVICE_ID_ELECOM_M_HT1URBK	0x010c
 #define USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D	0x010d
 #define USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C	0x011c
+#define USB_DEVICE_ID_ELECOM_M_HT1MRBK	0x01aa
+#define USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB	0x01ab
+#define USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC	0x01ac
 
 #define USB_VENDOR_ID_DREAM_CHEEKY	0x1d34
 #define USB_DEVICE_ID_DREAM_CHEEKY_WN	0x0004
drivers/hid/hid-logitech-hidpp.c +1 -1
index fb287c4cbd5b8..7ed851bf5bc81 100644
@@ -4029,7 +4029,7 @@ static int hidpp_get_report_length(struct hid_device *hdev, int id)
 
 	re = &(hdev->report_enum[HID_OUTPUT_REPORT]);
 	report = re->report_id_hash[id];
-	if (!report)
+	if (!report || !report->maxfield)
 		return 0;
 
 	return report->field[0]->report_count + 1;
drivers/hid/hid-magicmouse.c +5 -0
index f1b92fe4c7569..ec7b4f7b3d8c9 100644
@@ -682,6 +682,11 @@ static int magicmouse_input_configured(struct hid_device *hdev,
 	struct magicmouse_sc *msc = hid_get_drvdata(hdev);
 	int ret;
 
+	if (!msc->input) {
+		hid_err(hdev, "magicmouse setup input failed (no input)");
+		return -EINVAL;
+	}
+
 	ret = magicmouse_setup_input(msc->input, hdev);
 	if (ret) {
 		hid_err(hdev, "magicmouse setup input failed (%d)\n", ret);
drivers/hid/hid-multitouch.c +3 -0
index 5c40790b977ee..30769b37aabe7 100644
@@ -2017,6 +2017,9 @@ static const struct hid_device_id mt_devices[] = {
 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
+	{ .driver_data = MT_CLS_EGALAX_SERIAL,
+		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
+			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C000) },
 	{ .driver_data = MT_CLS_EGALAX,
 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002) },
drivers/hid/hid-pl.c +6 -1
index 93fb07ec31802..d1a1ddd933abd 100644
@@ -194,9 +194,14 @@ static int pl_probe(struct hid_device *hdev, const struct hid_device_id *id)
 		goto err;
 	}
 
-	plff_init(hdev);
+	ret = plff_init(hdev);
+	if (ret)
+		goto stop;
 
 	return 0;
+
+stop:
+	hid_hw_stop(hdev);
 err:
 	return ret;
 }
drivers/hid/hid-playstation.c +3 -1
index 69c16c9b8c5c9..5e4c329a43414 100644
@@ -484,7 +484,9 @@ static struct input_dev *ps_gamepad_create(struct hid_device *hdev,
 #if IS_ENABLED(CONFIG_PLAYSTATION_FF)
 	if (play_effect) {
 		input_set_capability(gamepad, EV_FF, FF_RUMBLE);
-		input_ff_create_memless(gamepad, NULL, play_effect);
+		ret = input_ff_create_memless(gamepad, NULL, play_effect);
+		if (ret)
+			return ERR_PTR(ret);
 	}
 #endif
 
drivers/hid/hid-prodikeys.c +4 -0
index e4e9471d0f1e9..f20d29566b4da 100644
@@ -388,6 +388,10 @@ static int pcmidi_handle_report4(struct pcmidi_snd *pm, u8 *data)
 	bit_mask = (bit_mask << 8) | data[2];
 	bit_mask = (bit_mask << 8) | data[3];
 
+	/* robustness in case input_mapping hook does not get called */
+	if (!pm->input_ep82)
+		return 0;
+
 	/* break keys */
 	for (bit_index = 0; bit_index < 24; bit_index++) {
 		if (!((0x01 << bit_index) & bit_mask)) {
drivers/hid/hid-quirks.c +3 -0
index b4f4f6823c5f6..2a07db02ad932 100644
@@ -392,6 +392,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
 #if IS_ENABLED(CONFIG_HID_ELECOM)
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XGL20DLBK) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AC) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_00FB) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3URBK_018F) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_XT3DRBK) },
@@ -401,6 +402,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1MRBK_01AB) },
 #endif
 #if IS_ENABLED(CONFIG_HID_ELO)
 	{ HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
drivers/hwtracing/coresight/coresight-etm3x-core.c +6 -6
index cf64ce73a7412..436e65437f535 100644
@@ -786,16 +786,16 @@ static int __init etm_hp_setup(void)
 {
 	int ret;
 
-	ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ARM_CORESIGHT_STARTING,
-						   "arm/coresight:starting",
-						   etm_starting_cpu, etm_dying_cpu);
+	ret = cpuhp_setup_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING,
+					"arm/coresight:starting",
+					etm_starting_cpu, etm_dying_cpu);
 
 	if (ret)
 		return ret;
 
-	ret = cpuhp_setup_state_nocalls_cpuslocked(CPUHP_AP_ONLINE_DYN,
-						   "arm/coresight:online",
-						   etm_online_cpu, NULL);
+	ret = cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN,
+					"arm/coresight:online",
+					etm_online_cpu, NULL);
 
 	/* HP dyn state ID returned in ret on success */
 	if (ret > 0) {
drivers/i3c/master.c +12 -9
index e2777db13762f..dee694024f280 100644
@@ -610,7 +610,7 @@ static void i3c_master_free_i2c_dev(struct i2c_dev_desc *dev)
 
 static struct i2c_dev_desc *
 i3c_master_alloc_i2c_dev(struct i3c_master_controller *master,
-			 const struct i2c_dev_boardinfo *boardinfo)
+			 u16 addr, u8 lvr)
 {
 	struct i2c_dev_desc *dev;
 
@@ -619,9 +619,8 @@ i3c_master_alloc_i2c_dev(struct i3c_master_controller *master,
 		return ERR_PTR(-ENOMEM);
 
 	dev->common.master = master;
-	dev->boardinfo = boardinfo;
-	dev->addr = boardinfo->base.addr;
-	dev->lvr = boardinfo->lvr;
+	dev->addr = addr;
+	dev->lvr = lvr;
 
 	return dev;
 }
@@ -695,7 +694,7 @@ i3c_master_find_i2c_dev_by_addr(const struct i3c_master_controller *master,
 	struct i2c_dev_desc *dev;
 
 	i3c_bus_for_each_i2cdev(&master->bus, dev) {
-		if (dev->boardinfo->base.addr == addr)
+		if (dev->addr == addr)
 			return dev;
 	}
 
@@ -1692,7 +1691,9 @@ static int i3c_master_bus_init(struct i3c_master_controller *master)
 					     i2cboardinfo->base.addr,
 					     I3C_ADDR_SLOT_I2C_DEV);
 
-		i2cdev = i3c_master_alloc_i2c_dev(master, i2cboardinfo);
+		i2cdev = i3c_master_alloc_i2c_dev(master,
+						  i2cboardinfo->base.addr,
+						  i2cboardinfo->lvr);
 		if (IS_ERR(i2cdev)) {
 			ret = PTR_ERR(i2cdev);
 			goto err_detach_devs;
@@ -2178,6 +2179,7 @@ static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master)
 {
 	struct i2c_adapter *adap = i3c_master_to_i2c_adapter(master);
 	struct i2c_dev_desc *i2cdev;
+	struct i2c_dev_boardinfo *i2cboardinfo;
 	int ret;
 
 	adap->dev.parent = master->dev.parent;
@@ -2197,8 +2199,8 @@ static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master)
 	 * We silently ignore failures here. The bus should keep working
 	 * correctly even if one or more i2c devices are not registered.
 	 */
-	i3c_bus_for_each_i2cdev(&master->bus, i2cdev)
-		i2cdev->dev = i2c_new_client_device(adap, &i2cdev->boardinfo->base);
+	list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node)
+		i2cdev->dev = i2c_new_client_device(adap, &i2cboardinfo->base);
 
 	return 0;
 }
@@ -2495,12 +2497,13 @@ int i3c_master_register(struct i3c_master_controller *master,
 	INIT_LIST_HEAD(&master->boardinfo.i3c);
 
 	device_initialize(&master->dev);
-	dev_set_name(&master->dev, "i3c-%d", i3cbus->id);
 
 	ret = i3c_bus_init(i3cbus);
 	if (ret)
 		goto err_put_dev;
 
+	dev_set_name(&master->dev, "i3c-%d", i3cbus->id);
+
 	ret = of_populate_i3c_bus(master);
 	if (ret)
 		goto err_put_dev;
drivers/i3c/master/svc-i3c-master.c +2 -2
index d12b4ff2a4495..c1aa01d8b162e 100644
@@ -357,8 +357,8 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)
 {
 	struct svc_i3c_master *master = container_of(work, struct svc_i3c_master, ibi_work);
 	struct svc_i3c_i2c_dev_data *data;
+	struct i3c_dev_desc *dev = NULL;
 	unsigned int ibitype, ibiaddr;
-	struct i3c_dev_desc *dev;
 	u32 status, val;
 	int ret;
 
@@ -419,7 +419,7 @@ static void svc_i3c_master_ibi_work(struct work_struct *work)
 	 * for the slave to interrupt again.
 	 */
 	if (svc_i3c_master_error(master)) {
-		if (master->ibi.tbq_slot) {
+		if (master->ibi.tbq_slot && dev) {
 			data = i3c_dev_get_master_data(dev);
 			i3c_generic_ibi_recycle_slot(data->ibi_pool,
 						     master->ibi.tbq_slot);
drivers/iio/accel/bma180.c +3 -2
index 3a1f47c7288ff..ea453087b8ed5 100644
@@ -997,8 +997,9 @@ static int bma180_probe(struct i2c_client *client,
 		}
 
 		ret = devm_request_irq(dev, client->irq,
-			iio_trigger_generic_data_rdy_poll, IRQF_TRIGGER_RISING,
-			"bma180_event", data->trig);
+				       iio_trigger_generic_data_rdy_poll,
+				       IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
+				       "bma180_event", data->trig);
 		if (ret) {
 			dev_err(dev, "unable to request IRQ\n");
 			goto err_trigger_free;
drivers/iio/accel/sca3000.c +5 -1
index cb753a43533cd..9174269c7653b 100644
@@ -1489,7 +1489,11 @@ static int sca3000_probe(struct spi_device *spi)
 	if (ret)
 		goto error_free_irq;
 
-	return iio_device_register(indio_dev);
+	ret = iio_device_register(indio_dev);
+	if (ret)
+		goto error_free_irq;
+
+	return 0;
 
 error_free_irq:
 	if (spi->irq)
drivers/iio/adc/ad7766.c +1 -1
index 51ee9482e0df9..cd4283c32349b 100644
@@ -262,7 +262,7 @@ static int ad7766_probe(struct spi_device *spi)
 		 * don't enable the interrupt to avoid extra load on the system
 		 */
 		ret = devm_request_irq(&spi->dev, spi->irq, ad7766_irq,
-				       IRQF_TRIGGER_FALLING | IRQF_NO_AUTOEN,
+				       IRQF_TRIGGER_FALLING | IRQF_NO_AUTOEN | IRQF_NO_THREAD,
 				       dev_name(&spi->dev),
 				       ad7766->trig);
 		if (ret < 0)
drivers/iio/gyro/itg3200_buffer.c +3 -5
index 4cfa0d4395605..d1c125a77308a 100644
@@ -118,11 +118,9 @@ int itg3200_probe_trigger(struct iio_dev *indio_dev)
 	if (!st->trig)
 		return -ENOMEM;
 
-	ret = request_irq(st->i2c->irq,
-			  &iio_trigger_generic_data_rdy_poll,
-			  IRQF_TRIGGER_RISING,
-			  "itg3200_data_rdy",
-			  st->trig);
+	ret = request_irq(st->i2c->irq, &iio_trigger_generic_data_rdy_poll,
+			  IRQF_TRIGGER_RISING | IRQF_NO_THREAD,
+			  "itg3200_data_rdy", st->trig);
 	if (ret)
 		goto error_free_trig;
 
drivers/iio/gyro/itg3200_core.c +2 -0
index a7f1bbb5f289d..a09ef1523bdb3 100644
@@ -92,6 +92,8 @@ static int itg3200_read_raw(struct iio_dev *indio_dev,
 	case IIO_CHAN_INFO_RAW:
 		reg = (u8)chan->address;
 		ret = itg3200_read_reg_s16(indio_dev, reg, val);
+		if (ret)
+			return ret;
 		return IIO_VAL_INT;
 	case IIO_CHAN_INFO_SCALE:
 		*val = 0;
drivers/iio/gyro/mpu3050-core.c +2 -4
index 5311bee5475ff..dcbc719275ceb 100644
@@ -1174,10 +1174,8 @@ int mpu3050_common_probe(struct device *dev,
 	mpu3050->regs[1].supply = mpu3050_reg_vlogic;
 	ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(mpu3050->regs),
 				      mpu3050->regs);
-	if (ret) {
-		dev_err(dev, "Cannot get regulators\n");
-		return ret;
-	}
+	if (ret)
+		return dev_err_probe(dev, ret, "Cannot get regulators\n");
 
 	ret = mpu3050_power_up(mpu3050);
 	if (ret)
drivers/iio/light/si1145.c +1 -1
index e8f6cdf26f22a..50b424b4f23b9 100644
@@ -1251,7 +1251,7 @@ static int si1145_probe_trigger(struct iio_dev *indio_dev)
 
 	ret = devm_request_irq(&client->dev, client->irq,
 			  iio_trigger_generic_data_rdy_poll,
-			  IRQF_TRIGGER_FALLING,
+			  IRQF_TRIGGER_FALLING | IRQF_NO_THREAD,
 			  "si1145_irq",
 			  trig);
 	if (ret < 0) {
drivers/iio/magnetometer/ak8975.c +1 -1
index c12bcee912424..565f64e1cb17a 100644
@@ -511,7 +511,7 @@ static int ak8975_setup_irq(struct ak8975_data *data)
 		irq = gpiod_to_irq(data->eoc_gpiod);
 
 	rc = devm_request_irq(&client->dev, irq, ak8975_irq_handler,
-			      IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+			      IRQF_TRIGGER_RISING,
 			      dev_name(&client->dev), data);
 	if (rc < 0) {
 		dev_err(&client->dev, "irq %d request failed: %d\n", irq, rc);
drivers/infiniband/core/cache.c +15 -1
index 91ee3e823a9fe..38cb1a0d3c682 100644
@@ -927,6 +927,13 @@ static int gid_table_setup_one(struct ib_device *ib_dev)
 	if (err)
 		return err;
 
+	/*
+	 * Mark the device as ready for GID cache updates. This allows netdev
+	 * event handlers to update the GID cache even before the device is
+	 * fully registered.
+	 */
+	ib_device_enable_gid_updates(ib_dev);
+
 	rdma_roce_rescan_device(ib_dev);
 
 	return err;
@@ -1549,7 +1556,8 @@ static void ib_cache_event_task(struct work_struct *_work)
 	 * the cache.
 	 */
 	ret = ib_cache_update(work->event.device, work->event.element.port_num,
-			      work->event.event == IB_EVENT_GID_CHANGE,
+			      work->event.event == IB_EVENT_GID_CHANGE ||
+			      work->event.event == IB_EVENT_CLIENT_REREGISTER,
 			      work->event.event == IB_EVENT_PKEY_CHANGE,
 			      work->enforce_security);
 
@@ -1650,6 +1658,12 @@ void ib_cache_release_one(struct ib_device *device)
 
 void ib_cache_cleanup_one(struct ib_device *device)
 {
+	/*
+	 * Clear the GID updates mark first to prevent event handlers from
+	 * accessing the device while it's being torn down.
+	 */
+	ib_device_disable_gid_updates(device);
+
 	/* The cleanup function waits for all in-progress workqueue
 	 * elements and cleans up the GID cache. This function should be
 	 * called after the device was removed from the devices list and
drivers/infiniband/core/core_priv.h +3 -0
index f66f48d860ec3..149dacf5b64d8 100644
@@ -100,6 +100,9 @@ void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
 			      roce_netdev_callback cb,
 			      void *cookie);
 
+void ib_device_enable_gid_updates(struct ib_device *device);
+void ib_device_disable_gid_updates(struct ib_device *device);
+
 typedef int (*nldev_callback)(struct ib_device *device,
 			      struct sk_buff *skb,
 			      struct netlink_callback *cb,
drivers/infiniband/core/device.c +33 -1
index e0151ec763503..a55af015a9109 100644
@@ -92,6 +92,7 @@ EXPORT_SYMBOL_GPL(ib_wq);
 static DEFINE_XARRAY_FLAGS(devices, XA_FLAGS_ALLOC);
 static DECLARE_RWSEM(devices_rwsem);
 #define DEVICE_REGISTERED XA_MARK_1
+#define DEVICE_GID_UPDATES XA_MARK_2
 
 static u32 highest_client_id;
 #define CLIENT_REGISTERED XA_MARK_1
@@ -2348,11 +2349,42 @@ void ib_enum_all_roce_netdevs(roce_netdev_filter filter,
 	unsigned long index;
 
 	down_read(&devices_rwsem);
-	xa_for_each_marked (&devices, index, dev, DEVICE_REGISTERED)
+	xa_for_each_marked(&devices, index, dev, DEVICE_GID_UPDATES)
 		ib_enum_roce_netdev(dev, filter, filter_cookie, cb, cookie);
 	up_read(&devices_rwsem);
 }
 
+/**
+ * ib_device_enable_gid_updates - Mark device as ready for GID cache updates
+ * @device: Device to mark
+ *
+ * Called after GID table is allocated and initialized. After this mark is set,
+ * netdevice event handlers can update the device's GID cache. This allows
+ * events that arrive during device registration to be processed, avoiding
+ * stale GID entries when netdev properties change during the device
+ * registration process.
+ */
+void ib_device_enable_gid_updates(struct ib_device *device)
+{
+	down_write(&devices_rwsem);
+	xa_set_mark(&devices, device->index, DEVICE_GID_UPDATES);
+	up_write(&devices_rwsem);
+}
+
+/**
+ * ib_device_disable_gid_updates - Clear the GID updates mark
+ * @device: Device to unmark
+ *
+ * Called before GID table cleanup to prevent event handlers from accessing
+ * the device while it's being torn down.
+ */
+void ib_device_disable_gid_updates(struct ib_device *device)
+{
+	down_write(&devices_rwsem);
+	xa_clear_mark(&devices, device->index, DEVICE_GID_UPDATES);
+	up_write(&devices_rwsem);
+}
+
 /*
  * ib_enum_all_devs - enumerate all ib_devices
  * @cb: Callback to call for each found ib_device
drivers/infiniband/core/rw.c +38 -15

72 lines not on this page · raw message

drivers/infiniband/core/user_mad.c +6 -2
index 66a0c5a73b832..03e94ef2d9227 100644
@@ -514,7 +514,8 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf,
 	struct rdma_ah_attr ah_attr;
 	struct ib_ah *ah;
 	__be64 *tid;
-	int ret, data_len, hdr_len, copy_offset, rmpp_active;
+	int ret, hdr_len, copy_offset, rmpp_active;
+	size_t data_len;
 	u8 base_version;
 
 	if (count < hdr_size(file) + IB_MGMT_RMPP_HDR)
@@ -588,7 +589,10 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf,
 	}
 
 	base_version = ((struct ib_mad_hdr *)&packet->mad.data)->base_version;
-	data_len = count - hdr_size(file) - hdr_len;
+	if (check_sub_overflow(count, hdr_size(file) + hdr_len, &data_len)) {
+		ret = -EINVAL;
+		goto err_ah;
+	}
 	packet->msg = ib_create_send_mad(agent,
 					 be32_to_cpu(packet->mad.hdr.qpn),
 					 packet->mad.hdr.pkey_index, rmpp_active,
drivers/infiniband/core/uverbs_cmd.c +5 -2
index de631a6abe48d..9ae14c59777ee 100644
@@ -2031,7 +2031,10 @@ static int ib_uverbs_post_send(struct uverbs_attr_bundle *attrs)
 	if (ret)
 		return ret;
 
-	user_wr = kmalloc(cmd.wqe_size, GFP_KERNEL);
+	if (cmd.wqe_size < sizeof(struct ib_uverbs_send_wr))
+		return -EINVAL;
+
+	user_wr = kmalloc(cmd.wqe_size, GFP_KERNEL | __GFP_NOWARN);
 	if (!user_wr)
 		return -ENOMEM;
 
@@ -2221,7 +2224,7 @@ ib_uverbs_unmarshall_recv(struct uverbs_req_iter *iter, u32 wr_count,
 	if (ret)
 		return ERR_PTR(ret);
 
-	user_wr = kmalloc(wqe_size, GFP_KERNEL);
+	user_wr = kmalloc(wqe_size, GFP_KERNEL | __GFP_NOWARN);
 	if (!user_wr)
 		return ERR_PTR(-ENOMEM);
 
drivers/infiniband/hw/efa/efa_verbs.c +1 -1
index 6fca145f1e8a1..cacdf4af9206b 100644
@@ -1501,7 +1501,7 @@ struct ib_mr *efa_reg_mr(struct ib_pd *ibpd, u64 start, u64 length,
 	int err;
 
 	if (udata && udata->inlen &&
-	    !ib_is_udata_cleared(udata, 0, sizeof(udata->inlen))) {
+	    !ib_is_udata_cleared(udata, 0, udata->inlen)) {
 		ibdev_dbg(&dev->ibdev,
 			  "Incompatible ABI params, udata not cleared\n");
 		err = -EINVAL;
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +23 -0
index 8baf6fb2d1fa5..43b661f971882 100644
@@ -3376,6 +3376,23 @@ static void hns_roce_v2_write_cqc(struct hns_roce_dev *hr_dev,
 		     HNS_ROCE_V2_CQ_DEFAULT_INTERVAL);
 }
 
+static bool left_sw_wc(struct hns_roce_dev *hr_dev, struct hns_roce_cq *hr_cq)
+{
+	struct hns_roce_qp *hr_qp;
+
+	list_for_each_entry(hr_qp, &hr_cq->sq_list, sq_node) {
+		if (hr_qp->sq.head != hr_qp->sq.tail)
+			return true;
+	}
+
+	list_for_each_entry(hr_qp, &hr_cq->rq_list, rq_node) {
+		if (hr_qp->rq.head != hr_qp->rq.tail)
+			return true;
+	}
+
+	return false;
+}
+
 static int hns_roce_v2_req_notify_cq(struct ib_cq *ibcq,
 				     enum ib_cq_notify_flags flags)
 {
@@ -3384,6 +3401,12 @@ static int hns_roce_v2_req_notify_cq(struct ib_cq *ibcq,
 	struct hns_roce_v2_db cq_db = {};
 	u32 notify_flag;
 
+	if (hr_dev->state >= HNS_ROCE_DEVICE_STATE_RST_DOWN) {
+		if ((flags & IB_CQ_REPORT_MISSED_EVENTS) &&
+		    left_sw_wc(hr_dev, hr_cq))
+			return 1;
+		return 0;
+	}
 	/*
 	 * flags = 0, then notify_flag : next
 	 * flags = 1, then notify flag : solocited
drivers/infiniband/sw/rxe/rxe_srq.c +3 -0
index eb1c4c3b3a786..05ae3d183b21d 100644
@@ -118,6 +118,9 @@ int rxe_srq_from_init(struct rxe_dev *rxe, struct rxe_srq *srq,
 		}
 	}
 
+	srq->rq.queue = q;
+	init->attr.max_wr = srq->rq.max_wr;
+
 	return 0;
 }
 
drivers/infiniband/sw/siw/siw_qp_rx.c +2 -1
index fd721cc19682e..6b049858644e8 100644
@@ -1456,7 +1456,8 @@ int siw_tcp_rx_data(read_descriptor_t *rd_desc, struct sk_buff *skb,
 		}
 		if (unlikely(rv != 0 && rv != -EAGAIN)) {
 			if ((srx->state > SIW_GET_HDR ||
-			     qp->rx_fpdu->more_ddp_segs) && run_completion)
+			     (qp->rx_fpdu && qp->rx_fpdu->more_ddp_segs)) &&
+			    run_completion)
 				siw_rdmap_complete(qp, rv);
 
 			siw_dbg_qp(qp, "rx error %d, rx state %d\n", rv,
drivers/infiniband/ulp/rtrs/rtrs-clt.c +2 -2
index cda7849e2133c..dbd51e5be3a6b 100644
@@ -1911,7 +1911,7 @@ static int rtrs_rdma_conn_rejected(struct rtrs_clt_con *con,
 	struct rtrs_path *s = con->c.path;
 	const struct rtrs_msg_conn_rsp *msg;
 	const char *rej_msg;
-	int status, errno;
+	int status, errno = -ECONNRESET;
 	u8 data_len;
 
 	status = ev->status;
@@ -1933,7 +1933,7 @@ static int rtrs_rdma_conn_rejected(struct rtrs_clt_con *con,
 			  status, rej_msg);
 	}
 
-	return -ECONNRESET;
+	return errno;
 }
 
 void rtrs_clt_close_conns(struct rtrs_clt_path *clt_path, bool wait)
drivers/infiniband/ulp/rtrs/rtrs-srv.c +41 -39

135 lines not on this page · raw message

drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +21 -10
index bc65e7b4f0045..b12e23800844a 100644
@@ -448,20 +448,26 @@ static void arm_smmu_cmdq_skip_err(struct arm_smmu_device *smmu)
  */
 static void arm_smmu_cmdq_shared_lock(struct arm_smmu_cmdq *cmdq)
 {
-	int val;
-
 	/*
-	 * We can try to avoid the cmpxchg() loop by simply incrementing the
-	 * lock counter. When held in exclusive state, the lock counter is set
-	 * to INT_MIN so these increments won't hurt as the value will remain
-	 * negative.
+	 * When held in exclusive state, the lock counter is set to INT_MIN
+	 * so these increments won't hurt as the value will remain negative.
+	 * The increment will also signal the exclusive locker that there are
+	 * shared waiters.
 	 */
 	if (atomic_fetch_inc_relaxed(&cmdq->lock) >= 0)
 		return;
 
-	do {
-		val = atomic_cond_read_relaxed(&cmdq->lock, VAL >= 0);
-	} while (atomic_cmpxchg_relaxed(&cmdq->lock, val, val + 1) != val);
+	/*
+	 * Someone else is holding the lock in exclusive state, so wait
+	 * for them to finish. Since we already incremented the lock counter,
+	 * no exclusive lock can be acquired until we finish. We don't need
+	 * the return value since we only care that the exclusive lock is
+	 * released (i.e. the lock counter is non-negative).
+	 * Once the exclusive locker releases the lock, the sign bit will
+	 * be cleared and our increment will make the lock counter positive,
+	 * allowing us to proceed.
+	 */
+	atomic_cond_read_relaxed(&cmdq->lock, VAL > 0);
 }
 
 static void arm_smmu_cmdq_shared_unlock(struct arm_smmu_cmdq *cmdq)
@@ -488,9 +494,14 @@ static bool arm_smmu_cmdq_shared_tryunlock(struct arm_smmu_cmdq *cmdq)
 	__ret;								\
 })
 
+/*
+ * Only clear the sign bit when releasing the exclusive lock this will
+ * allow any shared_lock() waiters to proceed without the possibility
+ * of entering the exclusive lock in a tight loop.
+ */
 #define arm_smmu_cmdq_exclusive_unlock_irqrestore(cmdq, flags)		\
 ({									\
-	atomic_set_release(&cmdq->lock, 0);				\
+	atomic_fetch_andnot_release(INT_MIN, &cmdq->lock);		\
 	local_irq_restore(flags);					\
 })
 
drivers/iommu/intel/pasid.c +5 -4
index 589b97ff5433c..18a9f6babbe93 100644
@@ -268,6 +268,9 @@ static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
 		if (!entries)
 			return NULL;
 
+		if (!ecap_coherent(info->iommu->ecap))
+			clflush_cache_range(entries, VTD_PAGE_SIZE);
+
 		/*
 		 * The pasid directory table entry won't be freed after
 		 * allocation. No worry about the race with free and
@@ -279,10 +282,8 @@ static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
 			free_pgtable_page(entries);
 			goto retry;
 		}
-		if (!ecap_coherent(info->iommu->ecap)) {
-			clflush_cache_range(entries, VTD_PAGE_SIZE);
+		if (!ecap_coherent(info->iommu->ecap))
 			clflush_cache_range(&dir[dir_index].val, sizeof(*dir));
-		}
 	}
 
 	return &entries[index];
@@ -508,7 +509,7 @@ devtlb_invalidation_with_pasid(struct intel_iommu *iommu,
 	if (!info || !info->ats_enabled)
 		return;
 
-	if (pci_dev_is_disconnected(to_pci_dev(dev)))
+	if (!pci_device_is_present(to_pci_dev(dev)))
 		return;
 
 	sid = info->bus << 8 | info->devfn;
drivers/mailbox/bcm-flexrm-mailbox.c +2 -12
index b7e9fd53d47db..08870ed12a271 100644
@@ -1183,14 +1183,6 @@ static int flexrm_debugfs_stats_show(struct seq_file *file, void *offset)
 
 /* ====== FlexRM interrupt handler ===== */
 
-static irqreturn_t flexrm_irq_event(int irq, void *dev_id)
-{
-	/* We only have MSI for completions so just wakeup IRQ thread */
-	/* Ring related errors will be informed via completion descriptors */
-
-	return IRQ_WAKE_THREAD;
-}
-
 static irqreturn_t flexrm_irq_thread(int irq, void *dev_id)
 {
 	flexrm_process_completions(dev_id);
@@ -1281,10 +1273,8 @@ static int flexrm_startup(struct mbox_chan *chan)
 		ret = -ENODEV;
 		goto fail_free_cmpl_memory;
 	}
-	ret = request_threaded_irq(ring->irq,
-				   flexrm_irq_event,
-				   flexrm_irq_thread,
-				   0, dev_name(ring->mbox->dev), ring);
+	ret = request_threaded_irq(ring->irq, NULL, flexrm_irq_thread,
+				   IRQF_ONESHOT, dev_name(ring->mbox->dev), ring);
 	if (ret) {
 		dev_err(ring->mbox->dev,
 			"failed to request ring%d IRQ\n", ring->num);
drivers/mailbox/sprd-mailbox.c +9 -11
index e3c899abeed8b..2a43fb375bcb9 100644
@@ -167,6 +167,11 @@ static irqreturn_t sprd_mbox_inbox_isr(int irq, void *data)
 		return IRQ_NONE;
 	}
 
+	/* Clear FIFO delivery and overflow status first */
+	writel(fifo_sts &
+	       (SPRD_INBOX_FIFO_DELIVER_MASK | SPRD_INBOX_FIFO_OVERLOW_MASK),
+	       priv->inbox_base + SPRD_MBOX_FIFO_RST);
+
 	while (send_sts) {
 		id = __ffs(send_sts);
 		send_sts &= (send_sts - 1);
@@ -182,11 +187,6 @@ static irqreturn_t sprd_mbox_inbox_isr(int irq, void *data)
 			mbox_chan_txdone(chan, 0);
 	}
 
-	/* Clear FIFO delivery and overflow status */
-	writel(fifo_sts &
-	       (SPRD_INBOX_FIFO_DELIVER_MASK | SPRD_INBOX_FIFO_OVERLOW_MASK),
-	       priv->inbox_base + SPRD_MBOX_FIFO_RST);
-
 	/* Clear irq status */
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

drivers/md/dm-integrity.c +1 -1
index 43d47ba8dabca..cfc3e82848d3d 100644

Lines of this file are not shown. View the raw message.

drivers/md/dm-mpath.c +1 -1
index 694aaca4eea24..278cc9dff4b83 100644

Lines of this file are not shown. View the raw message.

drivers/md/dm-rq.c +11 -5
index 7eedcd012f45f..32a985ad331e8 100644

Lines of this file are not shown. View the raw message.

drivers/md/dm-unstripe.c +1 -1
index e69d297b9122f..3167894808012 100644

Lines of this file are not shown. View the raw message.

drivers/md/dm-verity-fec.c +2 -2
index 1a23d3ebf0981..41b580933f9c0 100644

Lines of this file are not shown. View the raw message.

drivers/md/md-bitmap.c +2 -1
index cb84a4ab8d70f..03efb3c72980f 100644

Lines of this file are not shown. View the raw message.

drivers/md/raid10.c +1 -1
index 5b0f38e7c8f13..c6429ef37f9e2 100644

Lines of this file are not shown. View the raw message.

drivers/media/dvb-core/dmxdev.c +4 -4
index 8abf7f44d96bc..4989ffe2477ea 100644

Lines of this file are not shown. View the raw message.

drivers/media/dvb-core/dvb_vb2.c +3 -2
index 1331f2c2237e6..c1aaa0b46c37e 100644

Lines of this file are not shown. View the raw message.

drivers/media/i2c/adv7180.c +7 -0
index d9a99fcfacb17..930ab969cc742 100644

Lines of this file are not shown. View the raw message.

drivers/media/i2c/ccs/ccs-core.c +16 -2
index 789f288bd1ed8..3e84bbcd67f19 100644

Lines of this file are not shown. View the raw message.

drivers/media/i2c/ov5647.c +13 -11
index d346d18ce629e..9d28f1c81d444 100644

Lines of this file are not shown. View the raw message.

drivers/media/i2c/tw9903.c +1 -0
index f8e3ab4909d8b..37d5ab6846421 100644

Lines of this file are not shown. View the raw message.

drivers/media/i2c/tw9906.c +1 -0
index c528eb01fed0e..04fdde437907b 100644

Lines of this file are not shown. View the raw message.

drivers/media/pci/cx23885/cx23885-alsa.c +3 -1
index 25dc8d4dc5b73..717fc6c9ef21f 100644

Lines of this file are not shown. View the raw message.

drivers/media/pci/cx25821/cx25821-alsa.c +1 -0
index 438fdcec6eac6..e45b19114dfc0 100644

Lines of this file are not shown. View the raw message.

drivers/media/pci/cx25821/cx25821-core.c +1 -0
index a4192e80e9a07..bce4fe15dce57 100644

Lines of this file are not shown. View the raw message.

drivers/media/pci/cx88/cx88-alsa.c +3 -1
index 29fb1311e4434..4e574d8390b4d 100644

Lines of this file are not shown. View the raw message.

drivers/media/pci/solo6x10/solo6x10-tw28.c +7 -1
index 1b7c22a9bc94f..8f53946c67928 100644

Lines of this file are not shown. View the raw message.

drivers/media/platform/mtk-mdp/mtk_mdp_core.c +15 -2
index 976aa1f4829b8..d1061b0292e15 100644

Lines of this file are not shown. View the raw message.

drivers/media/platform/omap3isp/isppreview.c +8 -13
index 53aedec7990da..32e4348e6837a 100644

Lines of this file are not shown. View the raw message.

drivers/media/platform/omap3isp/ispvideo.c +11 -3
index 8811d6dd4ee74..3304457716450 100644

Lines of this file are not shown. View the raw message.

drivers/media/platform/qcom/venus/vdec.c +3 -3
index 5a54f05d7e2cf..df35c6fa3023c 100644

Lines of this file are not shown. View the raw message.

drivers/media/radio/radio-keene.c +1 -1
index a35648316aa8d..05d3c4b567211 100644

Lines of this file are not shown. View the raw message.

drivers/media/usb/pvrusb2/pvrusb2-hdw.c +5 -0
index 10c21580a827b..fc7eb59aa2c80 100644

Lines of this file are not shown. View the raw message.

drivers/media/usb/uvc/uvc_video.c +2 -1
index 4739633e30879..f868a13280a1e 100644

Lines of this file are not shown. View the raw message.

drivers/mfd/arizona-core.c +1 -1
index 5c8317bd4d98b..6ec50eb1544c0 100644

Lines of this file are not shown. View the raw message.

drivers/mfd/da9052-spi.c +1 -1
index 06c500bf4d57e..5faf3766a5e20 100644

Lines of this file are not shown. View the raw message.

drivers/misc/eeprom/eeprom_93xx46.c +3 -8
index 1f15399e5cb49..fb8c054321a38 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/nand/raw/cadence-nand-controller.c +1 -1
index 8c8d21af1d9b7..6ba4601681cef 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/nand/raw/pl35x-nand-controller.c +1 -0
index 7bcece135715d..2dcf71288ae7e 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/parsers/ofpart_core.c +14 -2
index 192190c42fc84..20af45a7270d5 100644

Lines of this file are not shown. View the raw message.

drivers/net/bonding/bond_main.c +14 -7
index e6394fd45f6df..1323a619db4d2 100644

Lines of this file are not shown. View the raw message.

drivers/net/caif/caif_serial.c +3 -2
index 2a7af611d43a5..90b4820486990 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/ec_bhf.c +1 -1
index b2d4fb3feb744..2d29922e25eb0 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c +7 -0
index 5c7055a4acc6f..147e53c0552f8 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +28 -16

44 lines not on this page · raw message

drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +2 -0
index f3f7f370807f0..83c4b9856e171 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +57 -0

57 lines not on this page · raw message

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +3 -2
index 7d96aa361f633..fb0dc5833af1a 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +3 -1
index 1dae7500fa57c..4fcb08684ee09 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/i40e/i40e_main.c +7 -1
index b2e185357ab27..31a8217f6aa97 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu.c +11 -0
index 53f742a507dbe..187c66fb2458c 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +9 -3
index 8bdde74b34b6d..e91b4d27ce759 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +22 -19

41 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +1 -0
index 5f093b34db698..803f40a2bdc19 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/skge.c +0 -1
index 791a209158cd1..8fe3581a385b6 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/myricom/myri10ge/myri10ge.c +27 -1
index e6f18e004036a..30a523e03c806 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +4 -3
index 8d459d5634160..b14fd0310ed92 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/ti/cpsw_new.c +5 -7
index 923746ba87a61..9d52b949ae3f9 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/xscale/ixp4xx_eth.c +27 -33

60 lines not on this page · raw message

drivers/net/ethernet/xscale/ptp_ixp46x.c +3 -0
index 20f6aa508003b..422946c1e65b7 100644

Lines of this file are not shown. View the raw message.

drivers/net/macvlan.c +5 -0
index e92d7f2f28c17..f2fb958c1f232 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/Kconfig +0 -1
index 8939e5fbd50a8..4143714f2b7d5 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/kaweth.c +0 -2
index 9b2bc1993ece2..3ebf876dd60fc 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/lan78xx.c +21 -19
index 174d94bdaae64..dbd9bd23e60c8 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/pegasus.c +30 -5
index fd7b9776b4824..020d88a373946 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/r8152.c +2 -0
index 1bd18a6292803..e70f3cb8bad94 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/sr9700.c +4 -21
index 86d14fad318c3..07a018585b30f 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/sr9700.h +1 -6
index ea2b4de621c86..c479908f7d823 100644

Lines of this file are not shown. View the raw message.

drivers/net/wan/farsync.c +2 -0
index 5b01642ca44e0..6b2d1e63855e8 100644

Lines of this file are not shown. View the raw message.

drivers/net/wan/fsl_ucc_hdlc.c +2 -6
index 44348e2dd95ea..b2c1a2ec4d267 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/ath/ath10k/sdio.c +6 -0
index b2e0abb5b2b53..e092702d25b34 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/ath/ath10k/wmi.c +2 -2
index e018f732fa267..e3d4505d7615e 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/ipw2x00/ipw2200.c +7 -1
index bb728fb24b8a4..50ccfff4452fb 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlegacy/3945-mac.c +2 -0
index dea0012fcdc79..1f2d089e1fdf8 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/intel/iwlegacy/4965-mac.c +2 -0
index df9d139a008eb..7bf2e3a35cd8c 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/marvell/libertas/if_usb.c +2 -0
index 2240b4db8c036..d98c81539ba53 100644

Lines of this file are not shown. View the raw message.

drivers/net/xen-netback/xenbus.c +3 -2
index e85b3c5d4acce..5b78d9172aac9 100644

Lines of this file are not shown. View the raw message.

drivers/nfc/nxp-nci/i2c.c +1 -1
index ae2ba08d8ac3f..152c9065e730d 100644

Lines of this file are not shown. View the raw message.

drivers/ntb/hw/mscc/ntb_hw_switchtec.c +10 -2
index c9351063aaf15..da1e32edadc8e 100644

Lines of this file are not shown. View the raw message.

drivers/ntb/ntb_transport.c +2 -2
index 72c67a1ce7c44..51c47a6d4c191 100644

Lines of this file are not shown. View the raw message.

drivers/nvdimm/nd_virtio.c +2 -1
index 41e97c6567cf9..204d1a05f8e32 100644

Lines of this file are not shown. View the raw message.

drivers/nvdimm/virtio_pmem.c +1 -0
index 726c7354d4659..23ce47b67df50 100644

Lines of this file are not shown. View the raw message.

drivers/nvdimm/virtio_pmem.h +4 -0
index 0dddefe594c46..f72cf17f9518f 100644

Lines of this file are not shown. View the raw message.

drivers/pci/controller/pcie-mediatek.c +3 -1
index 3200d776e34d8..787783345129f 100644

Lines of this file are not shown. View the raw message.

drivers/pci/endpoint/pci-ep-cfs.c +4 -4
index 3814050070491..81f0bebe6c8cb 100644

Lines of this file are not shown. View the raw message.

drivers/pci/iov.c +4 -5
index 1175c0e081080..50881aa7282cf 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pci-driver.c +8 -0
index 08c985478b8ff..ecbe382b56be9 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pci.c +19 -18
index 9cf46bf7e1e7b..d1474b2129abe 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pci.h +1 -0
index 4a8f499d278be..d9d7a79e3563e 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pcie/aer.c +25 -1
index 81ea196ce843e..a8bec1c3c769a 100644

Lines of this file are not shown. View the raw message.

drivers/pci/pcie/portdrv_core.c +3 -3
index 3e5274ad60f10..4c57ddfd6275d 100644

Lines of this file are not shown. View the raw message.

drivers/pci/probe.c +34 -1
index a8d431731d22b..2180013a1a65a 100644

Lines of this file are not shown. View the raw message.

drivers/pci/quirks.c +23 -0
index 7597aedc05c37..d4a300766cbc3 100644

Lines of this file are not shown. View the raw message.

drivers/phy/freescale/phy-fsl-imx8mq-usb.c +1 -0
index a29b4a6f7c249..c2a6e70493ff7 100644

Lines of this file are not shown. View the raw message.

drivers/phy/marvell/phy-mvebu-cp110-utmi.c +1 -1
index 08d178a4dc13f..d5761681a253f 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/pinctrl-equilibrium.c +1 -0
index 3f0143087cc77..5de9c7dfe5555 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/pinctrl-single.c +2 -0
index 0659cd3aa3a5a..2c5b5ce60248e 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/qcom/Kconfig +10 -0
index f1b5176a5085b..7d70a7854a403 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/qcom/Makefile +1 -0
index 7a12e8cd2fbac..6dcee8eed1d23 100644

Lines of this file are not shown. View the raw message.

drivers/pinctrl/qcom/pinctrl-lpass-lpi.c +39 -262

301 lines not on this page · raw message

drivers/pinctrl/qcom/pinctrl-lpass-lpi.h new file +85 -0

85 lines not on this page · raw message

drivers/pinctrl/qcom/pinctrl-sm8250-lpass-lpi.c new file +163 -0

163 lines not on this page · raw message

drivers/platform/chrome/cros_ec_lightbar.c +1 -1
index 469dfc7a4a030..e2365788d4590 100644

Lines of this file are not shown. View the raw message.

drivers/power/reset/nvmem-reboot-mode.c +13 -2
index e229308d43e25..819f11bae788b 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/ab8500-bm.h +1 -2
index d11405b7ee1aa..33c7e15f5d96e 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/ab8500_bmdata.c +12 -20
index 6f5fb794042ce..a515dfad4c3fd 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/ab8500_charger.c +31 -25

56 lines not on this page · raw message

drivers/power/supply/act8945a_charger.c +8 -8
index e9b5f42837729..e9cb06daecea9 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/bq256xx_charger.c +6 -6
index 9fb7b44e890af..86f8ce4035209 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/bq25980_charger.c +6 -6
index 0008c229fd9c7..a93919c4ea275 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/bq27xxx_battery.c +3 -3
index 2b45187234001..844d8fef014f1 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/cpcap-battery.c +4 -4
index 8d62d4241da3d..053d376700447 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/goldfish_battery.c +6 -6
index bf1754355c9fc..c7502fa8efa7b 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/rt9455_charger.c +9 -8
index a84afccd509f1..89b414fac6c3a 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/sbs-battery.c +18 -18
index c4a95b01463ae..a633130a768df 100644

Lines of this file are not shown. View the raw message.

drivers/power/supply/wm97xx_battery.c +19 -15
index a0e1eaa25d93e..e2a41f9c903c5 100644

Lines of this file are not shown. View the raw message.

drivers/rapidio/rio-scan.c +2 -1
index c12941f71e2cb..dcd6619a4b027 100644

Lines of this file are not shown. View the raw message.

drivers/regulator/core.c +30 -25

55 lines not on this page · raw message

drivers/remoteproc/imx_rproc.c +4 -0
index 107da44ab3b76..5b2a4208e4d19 100644

Lines of this file are not shown. View the raw message.

drivers/remoteproc/mtk_scp.c +28 -11
index 211c7e3b848e4..bf9228bd5090f 100644

Lines of this file are not shown. View the raw message.

drivers/remoteproc/mtk_scp_ipi.c +2 -2
index 968128b78e59c..3f657a662cc0e 100644

Lines of this file are not shown. View the raw message.

drivers/rpmsg/rpmsg_core.c +27 -39

66 lines not on this page · raw message

drivers/rtc/interface.c +1 -1
index e91ab1df4c6b8..5a3e0f3fcd8d7 100644

Lines of this file are not shown. View the raw message.

drivers/s390/cio/css.c +1 -1
index 3c499136af657..4c3fde0bd5512 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/BusLogic.c +4 -2
index 40088dcb98cd8..ee90509b5c760 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/csiostor/csio_scsi.c +2 -1
index 3b2eb6ce1fcff..59d7dadfbfb71 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/elx/efct/efct_driver.c +1 -7
index 37e1ab96ee5be..658f463744e66 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/ufs/ufshcd.c +2 -0
index 3d2b6ee50e2c5..736a2dd630a7a 100644

Lines of this file are not shown. View the raw message.

drivers/soc/qcom/cmd-db.c +4 -3
index 6cb5e3956fc52..7854f49611cd7 100644

Lines of this file are not shown. View the raw message.

drivers/soc/ti/k3-socinfo.c +1 -1
index 76a4e6eac8b53..d8bb8f96f837c 100644

Lines of this file are not shown. View the raw message.

drivers/soc/ti/pruss.c +2 -4
index 84f992320c4d8..69ff854bf0ad2 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-mem.c +10 -1
index 37f4443ce9a09..fa1cd68625553 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-stm32.c +5 -4
index e8d21c93ed7ef..4500c4a4aed0c 100644

Lines of this file are not shown. View the raw message.

drivers/staging/greybus/light.c +6 -2
index 9999f84016992..eb69500e080e0 100644

Lines of this file are not shown. View the raw message.

drivers/staging/rtl8723bs/core/rtw_mlme.c +4 -2
index 5b64980e8522f..be9f3238580f4 100644

Lines of this file are not shown. View the raw message.

drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c +2 -1
index b33424a9e83b7..6ac79b430acc9 100644

Lines of this file are not shown. View the raw message.

drivers/staging/rtl8723bs/os_dep/sdio_intf.c +2 -1
index 4904314845242..335e6002df70f 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_dw.c +9 -2
index bcf770f344dac..211dc88ce4e2c 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_omap.c +1 -1
index 3baa37d26bc64..0d9fd4837ce96 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/Kconfig +4 -4
index 4fc5c043adf62..73db1b1306b03 100644

Lines of this file are not shown. View the raw message.

drivers/usb/dwc2/core.c +1 -0
index cf0bcd0dc320e..89dcc1f12d420 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/udc/bdc/bdc_core.c +2 -2
index fa1a3908ec3bb..69d11b703c8d0 100644

Lines of this file are not shown. View the raw message.

drivers/usb/gadget/udc/tegra-xudc.c +9 -3
index 7102a4d3971f7..2cebd65119818 100644

Lines of this file are not shown. View the raw message.

drivers/video/backlight/qcom-wled.c +39 -2

41 lines not on this page · raw message

drivers/video/fbdev/au1200fb.c +4 -2
index 80f54111baec1..ec1d86f253904 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/ffb.c +13 -1
index b3d580e57221e..937eb1ef60633 100644

Lines of this file are not shown. View the raw message.

drivers/video/fbdev/vt8500lcdfb.c +4 -1
index c61476247ba8d..ccd316aac4677 100644

Lines of this file are not shown. View the raw message.

drivers/video/of_display_timing.c +2 -2
index f93b6abbe2581..6b0124ffd435d 100644

Lines of this file are not shown. View the raw message.

drivers/watchdog/it87_wdt.c +12 -0
index 239947df613db..1392e557fa371 100644

Lines of this file are not shown. View the raw message.

drivers/xen/xenbus/xenbus_probe_frontend.c +1 -3
index 480944606a3c9..73cf4810715e4 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/extent-tree.c +1 -1
index 8959506a0aa77..d6b5a644f8724 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/qgroup.c +10 -5
index 6cff41c46d02e..208c6813dc681 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/volumes.c +8 -2
index c18918ce8edde..839ee01827b26 100644

Lines of this file are not shown. View the raw message.

fs/ceph/file.c +16 -1
index e92a10ba58b3f..dad7a9ec4ad1d 100644

Lines of this file are not shown. View the raw message.

fs/ext4/extents.c +8 -1
index 35bc58a26f7f4..fd2a096d8ba6a 100644

Lines of this file are not shown. View the raw message.

fs/ext4/ioctl.c +3 -0
index bd90b454c6213..4d1e5d8055231 100644

Lines of this file are not shown. View the raw message.

fs/ext4/mballoc.c +0 -2
index 0fd921ada8973..8091dabf4167e 100644

Lines of this file are not shown. View the raw message.

fs/fat/namei_msdos.c +6 -1
index efba301d68aec..fba3a07d39478 100644

Lines of this file are not shown. View the raw message.

fs/fat/namei_vfat.c +6 -1
index e69e2a4f99b92..d8e328e390d6b 100644

Lines of this file are not shown. View the raw message.

fs/fs_struct.c +1 -0
index 04b3f5b9c6295..0b0f88259cc60 100644

Lines of this file are not shown. View the raw message.

fs/gfs2/bmap.c +19 -2
index d2011c3c33fc2..1e95d777f6737 100644

Lines of this file are not shown. View the raw message.

fs/gfs2/inode.c +16 -0
index a7af9904e3edb..061372f84a64c 100644

Lines of this file are not shown. View the raw message.

fs/hfsplus/bnode.c +1 -1
index 7c127922ac0c7..1fa4a1d18b7b2 100644

Lines of this file are not shown. View the raw message.

fs/hfsplus/inode.c +11 -1
index 98a80ec5faa91..4310b9105d0fa 100644

Lines of this file are not shown. View the raw message.

fs/hfsplus/super.c +6 -0
index cb703b3e99fc2..8d2155ef7e811 100644

Lines of this file are not shown. View the raw message.

fs/iomap/direct-io.c +7 -3
index 4ee7790f7b2ea..f5b36732b89b3 100644

Lines of this file are not shown. View the raw message.

fs/jfs/jfs_logmgr.c +1 -0
index 78fd136ac13b9..d02bca48bc7b0 100644

Lines of this file are not shown. View the raw message.

fs/jfs/namei.c +4 -2
index b3a0fe0649c49..df6bde0206bb4 100644

Lines of this file are not shown. View the raw message.

fs/minix/inode.c +29 -21

50 lines not on this page · raw message

fs/nfs/pnfs.c +2 -1
index 50d608f6c6906..041cb7a96e8d9 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfs4idmap.c +46 -6

52 lines not on this page · raw message

fs/nfsd/nfs4proc.c +0 -2
index 2d6e88f3370bf..7a85817fa5bfe 100644

Lines of this file are not shown. View the raw message.

fs/nfsd/nfs4xdr.c +16 -0
index 9e25079804732..46a7fd731ba0a 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/attrib.c +12 -3
index 83c15c70f5945..872586e9598a7 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/attrlist.c +9 -0
index 82bd9b5d9bd80..64da2196711ed 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/file.c +6 -2
index ffb31420085f4..25788df25deeb 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/fslog.c +3 -0
index 6fddedca71f32..d3d006b63b27e 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/fsntfs.c +6 -0
index 7dc2ae7dec591..566dd9083b8ff 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/index.c +6 -1
index 0fe1b5696e855..b0aa5cc63b507 100644

Lines of this file are not shown. View the raw message.

fs/ocfs2/xattr.c +4 -0
index 7e097da448cc0..248b5e45393a7 100644

Lines of this file are not shown. View the raw message.

fs/overlayfs/readdir.c +1 -1
index 9c580ef8cd6fc..666cc62578f65 100644

Lines of this file are not shown. View the raw message.

fs/proc/array.c +1 -1
index 2ff568dc58387..6f30b5a316678 100644

Lines of this file are not shown. View the raw message.

fs/pstore/ram_core.c +18 -0
index ec321722384dc..c0b3b9c6892d1 100644

Lines of this file are not shown. View the raw message.

fs/xfs/libxfs/xfs_attr_leaf.c +41 -8

49 lines not on this page · raw message

fs/xfs/scrub/attr.c +4 -1
index b6f0c9f3f1245..601e02d749881 100644

Lines of this file are not shown. View the raw message.

fs/xfs/scrub/btree.c +2 -0
index eccb855dc904b..f9b7c0ffd9de5 100644

Lines of this file are not shown. View the raw message.

fs/xfs/scrub/common.c +4 -0
index 08df23edea720..96d5806637300 100644

Lines of this file are not shown. View the raw message.

fs/xfs/scrub/dabtree.c +2 -0
index 8a52514bc1ff1..b3f6c3c0fca4f 100644

Lines of this file are not shown. View the raw message.

include/acpi/ghes.h +1 -0
index 292a5c40bd0c6..259ae345849f0 100644

Lines of this file are not shown. View the raw message.

include/asm-generic/audit_change_attr.h +3 -0
index 331670807cf01..6c311d4d37f4e 100644

Lines of this file are not shown. View the raw message.

include/asm-generic/audit_read.h +6 -0
index 7bb7b5a83ae2e..fb9991f53fb6f 100644

Lines of this file are not shown. View the raw message.

include/drm/drm_of.h +3 -0
index b9b093add92e7..dee5ef9dec3ff 100644

Lines of this file are not shown. View the raw message.

include/linux/clk.h +24 -24

48 lines not on this page · raw message

include/linux/cper.h +2 -1
index a31e22cc839eb..b3079f687c5c6 100644

Lines of this file are not shown. View the raw message.

include/linux/i3c/master.h +0 -1
index 9cb39d901cd5f..604a126b78c83 100644

Lines of this file are not shown. View the raw message.

include/linux/mfd/wm8350/core.h +1 -1
index a3241e4d75486..4816d4f472101 100644

Lines of this file are not shown. View the raw message.

include/media/dvb_vb2.h +4 -2
index 8cb88452cd6c2..0fbbfc65157e6 100644

Lines of this file are not shown. View the raw message.

include/net/bluetooth/l2cap.h +2 -0
index 2f766e3437ce2..15b4b2d97f421 100644

Lines of this file are not shown. View the raw message.

include/net/ioam6.h +2 -0
index 3c2993bc48c81..d5e03e663e90f 100644

Lines of this file are not shown. View the raw message.

include/net/ipv6.h +9 -6
index 608943944ce1a..0a1c9366cc81e 100644

Lines of this file are not shown. View the raw message.

include/net/netfilter/nf_conntrack_count.h +1 -0
index 115bb7e572f7d..bf22661925b81 100644

Lines of this file are not shown. View the raw message.

include/rdma/ib_verbs.h +1 -1
index f4257c2e96b6d..eada75848eec3 100644

Lines of this file are not shown. View the raw message.

include/rdma/rw.h +2 -0
index d606cac482338..9a8f4b76ce588 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/ethtool.h +1 -0
index b6db6590baf0a..266e95e4fb33d 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/hyperv.h +1 -1
index daf82a230c0e7..15f3415415d2c 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/netfilter_bridge.h +4 -0
index 1610fdbab98df..ad520d3e9df8f 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/vbox_vmmdev_types.h +2 -2
index f8a8d6b3c5219..436678d4fb24f 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/verifier.c +7 -11
index 4b7c9a60a7352..48776d23b44e2 100644

Lines of this file are not shown. View the raw message.

kernel/kexec_file.c +74 -57

131 lines not on this page · raw message

kernel/sched/rt.c +5 -0
index 9720b3c19ab97..c5122e5f258e4 100644

Lines of this file are not shown. View the raw message.

kernel/time/hrtimer.c +1 -1
index abb375816e4c1..0246b32e907d2 100644

Lines of this file are not shown. View the raw message.

kernel/time/timer.c +1 -1
index ab4709be7a59a..827d2ec268678 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace.c +1 -1
index a6040a707abb7..28bfaf27db16c 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace_events.c +0 -5
index 4e282deb6f787..1dfdbd365c8c2 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace_hwlat.c +7 -8
index 77a5a05544fce..31ce3d137307e 100644

Lines of this file are not shown. View the raw message.

kernel/ucount.c +1 -1
index 8c21398f7b4fc..cc8ec071d46d3 100644

Lines of this file are not shown. View the raw message.

mm/page_alloc.c +14 -0
index 0b5e2a4e01176..cfbfd6309c250 100644

Lines of this file are not shown. View the raw message.

net/atm/signaling.c +54 -2

56 lines not on this page · raw message

net/bluetooth/hci_conn.c +2 -2
index 700920aea39ef..a9ba288afe0ee 100644

Lines of this file are not shown. View the raw message.

net/bluetooth/l2cap_core.c +54 -19

73 lines not on this page · raw message

net/ceph/crypto.c +5 -3
index 92d89b3316459..4c6cc4e855d36 100644

Lines of this file are not shown. View the raw message.

net/ceph/crypto.h +1 -1
index 13bd526349fa1..0d32f1649f3d0 100644

Lines of this file are not shown. View the raw message.

net/ceph/messenger_v2.c +1 -1
index d7c61058fa0f8..a35ff372d4230 100644

Lines of this file are not shown. View the raw message.

net/core/dev.c +19 -6
index 977146a70b8c1..de52fc130486a 100644

Lines of this file are not shown. View the raw message.

net/ethtool/common.c +1 -0
index c63e0739dc6ac..0c52100159111 100644

Lines of this file are not shown. View the raw message.

net/ethtool/ioctl.c +1 -0
index 8f44bdae78bf7..fd26baf6e6ea8 100644

Lines of this file are not shown. View the raw message.

net/ipv4/fib_lookup.h +4 -2
index 78e40ea42e58d..82e77516ca8d2 100644

Lines of this file are not shown. View the raw message.

net/ipv4/fib_trie.c +2 -2
index 2cec18cb5c488..3f43851f87e39 100644

Lines of this file are not shown. View the raw message.

net/ipv4/tcp.c +3 -0
index b3d373372e841..36981a3e9013f 100644

Lines of this file are not shown. View the raw message.

net/ipv6/exthdrs.c +11 -4
index d273f6fe19c20..10772dab66bbd 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ioam6.c +14 -0
index d128172bb5497..bb7ad0d1cacf8 100644

Lines of this file are not shown. View the raw message.

net/ipv6/ioam6_iptunnel.c +1 -9
index 9b7b726f8f45f..880e69e0f36df 100644

Lines of this file are not shown. View the raw message.

net/ipv6/xfrm6_policy.c +5 -2
index f5ef5e4c88df1..b504eeb592249 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_conncount.c +40 -14

54 lines not on this page · raw message

net/netfilter/nf_conntrack_h323_asn1.c +1 -1
index 540d97715bd23..62aa22a078769 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_conntrack_h323_main.c +5 -5
index 2eb31ffb3d141..b479dc148d7bf 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_conntrack_proto_generic.c +1 -0
index e831637bc8ca8..cb260eb3d012c 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nft_connlimit.c +1 -6
index ef5099441a822..e2ddb55968531 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nft_set_hash.c +7 -2
index a592cca7a61f9..9ea4a09903186 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nft_set_rbtree.c +25 -5
index 021d9e76129a5..426becaad1b94 100644

Lines of this file are not shown. View the raw message.

net/netfilter/xt_tcpmss.c +1 -1
index 37704ab017992..0d32d4841cb32 100644

Lines of this file are not shown. View the raw message.

net/nfc/hci/llc_shdlc.c +8 -0
index aef750d7787c8..948cf4d210bde 100644

Lines of this file are not shown. View the raw message.

net/nfc/nci/ntf.c +141 -18

159 lines not on this page · raw message

net/rds/connection.c +4 -0
index b4cc699c5fad3..98c0d5ff9de9c 100644

Lines of this file are not shown. View the raw message.

net/rds/send.c +4 -2
index 85c27d9aa33a3..9a23f8f2bcfa7 100644

Lines of this file are not shown. View the raw message.

net/rds/tcp_listen.c +0 -5
index 3994eeef95a3c..7b6d0088ae33e 100644

Lines of this file are not shown. View the raw message.

net/sunrpc/auth_gss/auth_gss.c +3 -0
index 7ce4a6b7cfae6..5f6d67023a1b0 100644

Lines of this file are not shown. View the raw message.

net/sunrpc/auth_gss/gss_rpc_xdr.c +64 -18

82 lines not on this page · raw message

net/sunrpc/xprtrdma/svc_rdma_transport.c +26 -17

43 lines not on this page · raw message

net/tipc/crypto.c +1 -1
index 22c07a270ed40..aa1ff1f438b35 100644

Lines of this file are not shown. View the raw message.

net/tipc/name_table.c +4 -2
index 1d8ba233d0474..3d0598afde79a 100644

Lines of this file are not shown. View the raw message.

net/vmw_vsock/vmci_transport.c +1 -1
index 6910b5ce9a183..35585e9f1af4c 100644

Lines of this file are not shown. View the raw message.

net/wireless/core.c +3 -1
index 58b91e9647c20..22e6fd12f2016 100644

Lines of this file are not shown. View the raw message.

net/wireless/wext-compat.c +1 -1
index a32065d600a1c..8715a9a056239 100644

Lines of this file are not shown. View the raw message.

scripts/mod/modpost.c +4 -0
index a663a0ea4066b..2fa333fca1f7b 100644

Lines of this file are not shown. View the raw message.

security/apparmor/apparmorfs.c +9 -0
index c70b86f17124a..bd822f13e3253 100644

Lines of this file are not shown. View the raw message.

security/apparmor/net.c +4 -2
index e0c1b50d6eddc..abdce5e52b026 100644

Lines of this file are not shown. View the raw message.

security/apparmor/resource.c +5 -0
index 1ae4874251a96..f94e416399441 100644

Lines of this file are not shown. View the raw message.

security/smack/smackfs.c +50 -29

79 lines not on this page · raw message

sound/soc/codecs/es8328.c +8 -2
index fe4763805df94..0e4951c4febbd 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/wm8962.c +11 -1
index b5a35999d8dfa..d8497b06c0638 100644

Lines of this file are not shown. View the raw message.

sound/soc/fsl/fsl_xcvr.c +0 -3
index c4deb09c9a9bc..ae5960b2b6a95 100644

Lines of this file are not shown. View the raw message.

sound/usb/endpoint.c +23 -17
index 40c5825fa41e5..e442a4fcead9b 100644

Lines of this file are not shown. View the raw message.

sound/usb/quirks.c +2 -0
index f24a334316a29..778304f349699 100644

Lines of this file are not shown. View the raw message.

tools/bpf/bpftool/net.c +4 -1
index 18e5e5faa2aa2..ef7fe8dd50984 100644

Lines of this file are not shown. View the raw message.

tools/lib/bpf/btf_dump.c +16 -8
index d62b2d2e8aacb..fc329c2cf9df2 100644

Lines of this file are not shown. View the raw message.

tools/lib/bpf/netlink.c +3 -1
index fadde7d80a51c..00ba40b0a57e2 100644

Lines of this file are not shown. View the raw message.

tools/lib/perf/Makefile +4 -10
index 08fe6e3c4089f..c8d5a434c2ab9 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/evsel_fprintf.c +6 -2
index bfedd7b235211..2ef8e7cb0c86c 100644

Lines of this file are not shown. View the raw message.

tools/power/cpupower/lib/cpuidle.c +1 -0
index c15d0de12357f..e7b8c56638370 100644

Lines of this file are not shown. View the raw message.

tools/spi/.gitignore +1 -0
index 14ddba3d21957..038261b34ed83 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/drivers/net/mlxsw/tc_restrictions.sh +2 -2
index 5ec3beb637c82..2e9669408d3b0 100755

Lines of this file are not shown. View the raw message.

tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh +16 -10
index eb307ca37bfa6..002551451a728 100755

Lines of this file are not shown. View the raw message.

tools/testing/selftests/vm/charge_reserved_hugetlb.sh +2 -2
index dc3fc438b3d9e..7cf581f4f44fb 100644

Lines of this file are not shown. View the raw message.

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.