Linux 5.15.202
Sasha Levin
maintainer-----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-----
Sasha Levin
maintainerMakefile +1 -1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 +*/ + asmvolatile ("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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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_tmight_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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 0x54struct 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 *gdataprintk ("%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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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, ©->base);return ©->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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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_2static 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 */
Lines of this file are not shown. View the raw message.
drivers/media/pci/cx23885/cx23885-alsa.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/media/pci/cx25821/cx25821-alsa.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/media/pci/cx25821/cx25821-core.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/media/pci/solo6x10/solo6x10-tw28.c +7 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/mtk-mdp/mtk_mdp_core.c +15 -2
Lines of this file are not shown. View the raw message.
drivers/media/platform/omap3isp/isppreview.c +8 -13
Lines of this file are not shown. View the raw message.
drivers/media/platform/omap3isp/ispvideo.c +11 -3
Lines of this file are not shown. View the raw message.
drivers/media/platform/qcom/venus/vdec.c +3 -3
Lines of this file are not shown. View the raw message.
drivers/media/usb/pvrusb2/pvrusb2-hdw.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/mtd/nand/raw/cadence-nand-controller.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/mtd/nand/raw/pl35x-nand-controller.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c +7 -0
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
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
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +3 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_main.c +7 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +11 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +9 -3
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
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/myricom/myri10ge/myri10ge.c +27 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +4 -3
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
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/ipw2x00/ipw2200.c +7 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlegacy/3945-mac.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlegacy/4965-mac.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/marvell/libertas/if_usb.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/ntb/hw/mscc/ntb_hw_switchtec.c +10 -2
Lines of this file are not shown. View the raw message.
drivers/phy/freescale/phy-fsl-imx8mq-usb.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/phy/marvell/phy-mvebu-cp110-utmi.c +1 -1
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
Lines of this file are not shown. View the raw message.
drivers/power/reset/nvmem-reboot-mode.c +13 -2
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
Lines of this file are not shown. View the raw message.
drivers/power/supply/goldfish_battery.c +6 -6
Lines of this file are not shown. View the raw message.
drivers/power/supply/wm97xx_battery.c +19 -15
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/rpmsg/rpmsg_core.c +27 -39
66 lines not on this page · raw message
drivers/staging/rtl8723bs/core/rtw_mlme.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/staging/rtl8723bs/os_dep/sdio_intf.c +2 -1
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/xen/xenbus/xenbus_probe_frontend.c +1 -3
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/nfsd/nfs4idmap.c +46 -6
52 lines not on this page · raw message
fs/xfs/libxfs/xfs_attr_leaf.c +41 -8
49 lines not on this page · raw message
include/asm-generic/audit_change_attr.h +3 -0
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/net/netfilter/nf_conntrack_count.h +1 -0
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
net/atm/signaling.c +54 -2
56 lines not on this page · raw message
net/bluetooth/l2cap_core.c +54 -19
73 lines not on this page · raw message
net/netfilter/nf_conncount.c +40 -14
54 lines not on this page · raw message
net/netfilter/nf_conntrack_proto_generic.c +1 -0
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/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
security/smack/smackfs.c +50 -29
79 lines not on this page · raw message
tools/testing/selftests/drivers/net/mlxsw/tc_restrictions.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh +16 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/vm/charge_reserved_hugetlb.sh +2 -2
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.