Linux 5.10.252
Sasha Levin
maintainer-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
I'm announcing the release of the 5.10.252 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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-----
iQIzBAEBCgAdFiEE4n5dijQDou9mhzu83qZv95d3LNwFAmmoMRUACgkQ3qZv95d3 LNzIvhAAjcITtYu19c5tVCwXUhgIzV0wWF+9rjR57iWfeVTAkmvK7t48dPJkEyVt BmVbUAv9sqtJl9/v5WhbxpbN5fbcyHtpZrmhdXsqzJ8++1acbEI4vacG7Ed1AVe9 pUrj8ISdmJbs227cj3alawtGJHeAtPD2MEb8XWsCT/jUbwazEj0mqf0jMCFwB9d0 g9JM7nRy2KzZudvyxcV7xXisiZhVMB/jT8Pj7RsVPrWm58/5LVrnDYHdP7eLzSgo TWgl0bJvVF5ZuFwUNjHOrD6ceywZVsa/1cafNkdiAAXR32ihq9VZTTb95IO3ZfHv haGLJEdStyczprtSHTapNesDreVb5SX3l7Whw1SuEEpm7CSgd2PPiASqIuhNYky4 CIpkrOBP0EZL5sOiaG0dTMrSONnb5tg6uCypIkcJlXqvZJvLbgXI2v/8mmRdT3X3 wHQFXhReir8FEEZmnOd7FJmRznih9WkLQMO93QZv44U0svG/e7d0K1tTIt5pJdVJ NPbAt4ekPQYN6M5HnHKl6eJPWUXsNJfLffp4ASD3JxG4Od359G96Jt+BKPhV5ngl h7mlV6XNcyxTGjxzpJEXlmOJFqob/Rg6rq88cdG9Flz+1pQftYqlx9MhxjtveJT5 3D5ZcEL1x/5bjNnjNH5Vl9A7cp4M0pIUCIEzrNOX1x1A3FGWNoo= =3ZRu
-----END PGP SIGNATURE-----
Sasha Levin
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 251 +SUBLEVEL = 252 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/lpc32xx.dtsi +2 -1
@@ -304,8 +304,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
@@ -185,6 +185,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/mach-pxa/mioa701.c +0 -1
@@ -577,7 +577,6 @@ static struct platform_device power_dev = {static struct wm97xx_batt_pdata mioa701_battery_data = { .batt_aux =WM97XX_AUX_ID1 , .temp_aux =-1 , - .charge_gpio =-1 , .min_voltage =0xc00 , .max_voltage =0xfc0 , .batt_tech =POWER_SUPPLY_TECHNOLOGY_LION ,
arch/arm/mach-pxa/palm27x.c +0 -1
@@ -212,7 +212,6 @@ void __init palm27x_irda_init(int pwdn)static struct wm97xx_batt_pdata palm27x_batt_pdata = { .batt_aux =WM97XX_AUX_ID3 , .temp_aux =WM97XX_AUX_ID2 , - .charge_gpio =-1 , .batt_mult =1000 , .batt_div =414 , .temp_mult =1 ,
arch/arm/mach-pxa/palmte2.c +0 -1
@@ -273,7 +273,6 @@ static struct platform_device power_supply = {static struct wm97xx_batt_pdata palmte2_batt_pdata = { .batt_aux =WM97XX_AUX_ID3 , .temp_aux =WM97XX_AUX_ID2 , - .charge_gpio =-1 , .max_voltage =PALMTE2_BAT_MAX_VOLTAGE , .min_voltage =PALMTE2_BAT_MIN_VOLTAGE , .batt_mult =1000 ,
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/boot/dts/amlogic/meson-axg.dtsi +6 -0
@@ -1761,6 +1761,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 {
@@ -1773,6 +1776,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
@@ -2323,6 +2323,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 {
@@ -2335,6 +2338,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 {
@@ -2347,6 +2353,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 +10 -0
@@ -460,6 +460,16 @@ qfprom: qfprom@780000 { reg = <0x00780000 0x621c>; #address-cells = <1>; #size-cells = <1>; + + qusb2_hstx_trim: hstx-trim@240 { + reg = <0x243 0x1>; + bits = <1 3>; + }; + + gpu_speed_bin: gpu-speed-bin@41a0 { + reg = <0x41a2 0x2>; + bits = <5 8>; + }; }; rng: rng@793000 {
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/rockchip/rk3399-pinebook-pro.dts +0 -4
@@ -432,10 +432,6 @@ &gpu { status = "okay"; }; -&hdmi_sound { - status = "okay"; -}; - &i2c0 { clock-frequency = <400000>; i2c-scl-falling-time-ns = <4>;
arch/arm64/kernel/proton-pack.c +1 -0
@@ -904,6 +904,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
@@ -399,7 +399,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
@@ -219,11 +219,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
@@ -435,7 +435,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
@@ -85,6 +85,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/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/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/purgatory/Makefile +1 -0
@@ -28,6 +28,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/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
@@ -905,8 +905,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/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/android/binder.c +1 -1
@@ -4355,7 +4355,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) {
@@ -482,7 +482,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 *)
@@ -651,7 +651,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
@@ -379,6 +379,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
@@ -86,13 +86,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
@@ -535,6 +535,8 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp, {struct rnbd_dev *rnbd_dev = sess_dev->rnbd_dev; +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);
@@ -649,6 +651,7 @@ static int process_msg_sess_info(struct rtrs_srv *rtrs, 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
@@ -475,6 +475,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/bus/fsl-mc/fsl-mc-bus.c +1 -5
@@ -799,11 +799,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/clk/meson/gxbb.c +14 -3
@@ -315,12 +315,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" ,
@@ -338,7 +349,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" ,
@@ -356,7 +367,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/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 +111 -109
466 lines not on this page · raw message
drivers/clk/tegra/clk-tegra124-emc.c +3 -1
@@ -529,8 +529,10 @@ struct clk *tegra_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
@@ -240,6 +240,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
@@ -237,6 +237,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);
@@ -161,6 +162,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 */
@@ -168,6 +170,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,
@@ -377,7 +384,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/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
@@ -1521,8 +1521,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" );
@@ -1545,8 +1544,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" );
@@ -1932,8 +1930,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;
@@ -1955,7 +1952,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
@@ -524,6 +524,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;
@@ -604,7 +609,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
@@ -1873,7 +1873,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
@@ -474,7 +474,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) {struct aspeed_sgpio *gpio;u32 nr_gpios, sgpio_freq, sgpio_clk_div;
@@ -562,12 +562,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
@@ -489,6 +489,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/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/display/amdgpu_dm/amdgpu_dm.c +1 -1
@@ -7958,7 +7958,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 +2 -4
@@ -910,8 +910,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; }
@@ -929,8 +928,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
@@ -86,6 +86,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
@@ -2972,6 +2972,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/hid/hid-ids.h +1 -0
@@ -395,6 +395,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
drivers/hid/hid-logitech-hidpp.c +1 -1
@@ -3743,7 +3743,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
@@ -569,6 +569,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
@@ -1901,6 +1901,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-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/hwmon/ibmpex.c +2 -7
@@ -282,9 +282,6 @@ static ssize_t ibmpex_high_low_store(struct device *dev, {struct ibmpex_bmc_data *data =dev_get_drvdata (dev); -if (!data) -return -ENODEV ; -ibmpex_reset_high_low_data (data);return count;
@@ -517,9 +514,6 @@ static void ibmpex_bmc_delete(struct ibmpex_bmc_data *data) {int i, j; -hwmon_device_unregister (data->hwmon_dev); -dev_set_drvdata (data->bmc_device,NULL ); -device_remove_file (data->bmc_device, &sensor_dev_attr_reset_high_low.dev_attr);device_remove_file (data->bmc_device, &sensor_dev_attr_name.dev_attr);
@@ -533,7 +527,8 @@ static void ibmpex_bmc_delete(struct ibmpex_bmc_data *data) }list_del (&data->list); - +dev_set_drvdata (data->bmc_device,NULL ); +hwmon_device_unregister (data->hwmon_dev);ipmi_destroy_user (data->user);kfree (data->sensors);kfree (data);
drivers/hwtracing/coresight/coresight-etm3x-core.c +6 -6
@@ -784,16 +784,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
@@ -656,7 +656,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;
@@ -665,9 +665,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; }
@@ -741,7 +740,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; }
@@ -1731,7 +1730,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;
@@ -2220,6 +2221,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;
@@ -2239,8 +2241,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 ; }
@@ -2537,12 +2539,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/iio/accel/sca3000.c +5 -1
@@ -1502,7 +1502,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/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
@@ -1170,10 +1170,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/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 +13 -0
@@ -931,6 +931,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;
@@ -1658,6 +1665,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
@@ -102,6 +102,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 +36 -4
@@ -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
@@ -1875,9 +1876,9 @@ static int __ib_get_client_nl_info(struct ib_device *ibdev,/** * ib_get_client_nl_info - Fetch the nl_info from a client -* @device - IB device -* @client_name - Name of the client -* @res - Result of the query +* @ibdev: IB device +* @client_name: Name of the client +* @res: Result of the query */ int ib_get_client_nl_info (struct ib_device *ibdev,const char *client_name,struct ib_client_nl_info *res)
@@ -2300,12 +2301,43 @@ 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
@@ -2017,7 +2017,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 ;
@@ -2207,7 +2210,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
@@ -1495,7 +1495,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/sw/rxe/rxe_srq.c +3 -0
@@ -116,6 +116,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-srv.c +1 -7
@@ -239,7 +239,6 @@ static int rdma_write_sg(struct rtrs_srv_op *id)size_t sg_cnt;int err, offset;bool need_inval; -u32 rkey =0 ;struct ib_reg_wr rwr;struct ib_sge *plist;struct ib_sge list;
@@ -271,11 +270,6 @@ static int rdma_write_sg(struct rtrs_srv_op *id) wr->wr.num_sge =1 ; wr->remote_addr =le64_to_cpu (id->rd_msg->desc[0 ].addr); wr->rkey =le32_to_cpu (id->rd_msg->desc[0 ].key); -if (rkey ==0 ) - rkey = wr->rkey; -else -/* Only one key is actually used */ -WARN_ON_ONCE (rkey != wr->rkey); wr->wr.opcode =IB_WR_RDMA_WRITE ; wr->wr.wr_cqe = &io_comp_cqe;
@@ -308,7 +302,7 @@ static int rdma_write_sg(struct rtrs_srv_op *id) inv_wr.opcode =IB_WR_SEND_WITH_INV ; inv_wr.wr_cqe = &io_comp_cqe; inv_wr.send_flags =0 ; - inv_wr.ex.invalidate_rkey = rkey; + inv_wr.ex.invalidate_rkey = wr->rkey; } imm_wr.wr.next =NULL ;
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +21 -10
@@ -438,20 +438,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)
@@ -478,9 +484,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 @@ 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 @@ 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];
@@ -489,7 +490,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 +5 -5
@@ -149,6 +149,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 );
@@ -164,11 +169,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 */ writel (SPRD_MBOX_IRQ_CLR , priv->inbox_base +SPRD_MBOX_IRQ_STS );
drivers/md/dm-integrity.c +1 -1
@@ -2111,7 +2111,7 @@ static void dm_integrity_map_continue(struct dm_integrity_io *dio, bool from_mapsector_t next_sector;unsigned new_pos =find_journal_node (ic, dio->range.logical_sector, &next_sector);if (unlikely (new_pos !=NOT_FOUND ) || -unlikely (next_sector < dio->range.logical_sector - dio->range.n_sectors)) { +unlikely (next_sector < dio->range.logical_sector + dio->range.n_sectors)) {remove_range_unlocked (ic, &dio->range);spin_unlock_irq (&ic->endio_wait.lock);queue_work (ic->commit_wq, &ic->commit_work);
drivers/md/dm-mpath.c +1 -1
@@ -213,6 +213,7 @@ static struct multipath *alloc_multipath(struct dm_target *ti)mutex_init (&m->work_mutex); m->queue_mode =DM_TYPE_NONE ; + m->pg_init_delay_msecs =DM_PG_INIT_DELAY_DEFAULT ; m->ti = ti; ti->private = m;
@@ -245,7 +246,6 @@ static int alloc_multipath_stage2(struct dm_target *ti, struct multipath *m)set_bit (MPATHF_QUEUE_IO , &m->flags);atomic_set (&m->pg_init_in_progress,0 );atomic_set (&m->pg_init_count,0 ); - m->pg_init_delay_msecs =DM_PG_INIT_DELAY_DEFAULT ;init_waitqueue_head (&m->pg_init_wait);return 0 ;
drivers/md/dm-rq.c +11 -5
@@ -110,14 +110,21 @@ static void end_clone_bio(struct bio *clone)*/ tio->completed += nr_bytes; +if (!is_last) +return ; +/* +* At this moment we know this is the last bio of the cloned request, +* and all cloned bios have been released, so reset the clone request's +* bio pointer to avoid double free. +*/ + tio->clone->bio =NULL ; + exit:/* * Update the original request. * Do not use blk_mq_end_request() here, because it may complete * the original request before the clone, and break the ordering. */ -if (is_last) - exit: -blk_update_request (tio->orig,BLK_STS_OK , tio->completed); +blk_update_request (tio->orig,BLK_STS_OK , tio->completed); }static struct dm_rq_target_io *tio_from_request (struct request *rq)
@@ -281,8 +288,7 @@ static void dm_complete_request(struct request *rq, blk_status_t error)struct dm_rq_target_io *tio =tio_from_request (rq); tio->error = error; -if (likely (!blk_should_fake_timeout (rq->q))) -blk_mq_complete_request (rq); +blk_mq_complete_request (rq); }/*
drivers/md/dm-unstripe.c +1 -1
@@ -116,7 +116,7 @@ static void unstripe_dtr(struct dm_target *ti)static sector_t map_to_core (struct dm_target *ti,struct bio *bio) {struct unstripe_c *uc = ti->private; -sector_t sector = bio->bi_iter.bi_sector; +sector_t sector =dm_target_offset (ti, bio->bi_iter.bi_sector);sector_t tmp_sector = sector;/* Shift us up to the right "row" on the stripe */
drivers/md/dm-verity-fec.c +2 -2
@@ -550,9 +550,9 @@ void verity_fec_dtr(struct dm_verity *v)mempool_exit (&f->output_pool);kmem_cache_destroy (f->cache); -if (f->data_bufio) +if (!IS_ERR_OR_NULL (f->data_bufio))dm_bufio_client_destroy (f->data_bufio); -if (f->bufio) +if (!IS_ERR_OR_NULL (f->bufio))dm_bufio_client_destroy (f->bufio);if (f->dev)
drivers/md/md-bitmap.c +2 -1
@@ -2143,6 +2143,7 @@ int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,memcpy (page_address (store.sb_page),page_address (bitmap->storage.sb_page),sizeof (bitmap_super_t)); +mutex_lock (&bitmap->mddev->bitmap_info.mutex);spin_lock_irq (&bitmap->counts.lock);md_bitmap_file_unmap (&bitmap->storage); bitmap->storage = store;
@@ -2250,7 +2251,7 @@ int md_bitmap_resize(struct bitmap *bitmap, sector_t blocks,set_page_attr (bitmap, i,BITMAP_PAGE_DIRTY ); }spin_unlock_irq (&bitmap->counts.lock); - +mutex_unlock (&bitmap->mddev->bitmap_info.mutex);if (!init) {md_bitmap_unplug (bitmap); bitmap->mddev->pers->quiesce (bitmap->mddev,0 );
drivers/md/raid10.c +1 -1
@@ -3148,7 +3148,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, !test_bit(In_sync, &rdev->flags))continue ;/* This is where we read from */ - any_working =1 ; sector = r10_bio->devs[j].addr; if (is_badblock(rdev, sector, max_sync,
@@ -3163,6 +3162,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,continue ; } } + any_working =1 ; bio = r10_bio->devs[0 ].bio; bio->bi_next = biolist; biolist = bio;
drivers/media/dvb-core/dmxdev.c +4 -4
@@ -406,11 +406,11 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,if (dvb_vb2_is_streaming (&dmxdevfilter->vb2_ctx)) { ret =dvb_vb2_fill_buffer (&dmxdevfilter->vb2_ctx, buffer1, buffer1_len, - buffer_flags); + buffer_flags, true);if (ret == buffer1_len) ret =dvb_vb2_fill_buffer (&dmxdevfilter->vb2_ctx, buffer2, buffer2_len, - buffer_flags); + buffer_flags, true); }else { ret =dvb_dmxdev_buffer_write (&dmxdevfilter->buffer, buffer1, buffer1_len);
@@ -461,10 +461,10 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,if (dvb_vb2_is_streaming (ctx)) { ret =dvb_vb2_fill_buffer (ctx, buffer1, buffer1_len, - buffer_flags); + buffer_flags, false);if (ret == buffer1_len) ret =dvb_vb2_fill_buffer (ctx, buffer2, buffer2_len, - buffer_flags); + buffer_flags, false); }else {if (buffer->error) {spin_unlock (&dmxdevfilter->dev->lock);
drivers/media/dvb-core/dvb_vb2.c +3 -2
@@ -256,7 +256,8 @@ int dvb_vb2_is_streaming(struct dvb_vb2_ctx *ctx)int dvb_vb2_fill_buffer (struct dvb_vb2_ctx *ctx,const unsigned char *src,int len, -enum dmx_buffer_flags *buffer_flags) +enum dmx_buffer_flags *buffer_flags, +bool flush) {unsigned long flags =0 ;void *vbuf =NULL ;
@@ -313,7 +314,7 @@ int dvb_vb2_fill_buffer(struct dvb_vb2_ctx *ctx, } } -if (ctx->nonblocking && ctx->buf) { +if (flush && ctx->buf) {vb2_set_plane_payload (&ctx->buf->vb,0 , ll);vb2_buffer_done (&ctx->buf->vb,VB2_BUF_STATE_DONE );list_del (&ctx->buf->list);
drivers/media/i2c/adv7180.c +7 -0
@@ -468,6 +468,13 @@ static int adv7180_g_frame_interval(struct v4l2_subdev *sd, fi->interval.denominator =25 ; } +/* +* If the de-interlacer is active, the chip produces full video frames +* at the field rate. +*/ +if (state->field ==V4L2_FIELD_NONE ) + fi->interval.denominator *=2 ; +return 0 ; }
drivers/media/i2c/tw9903.c +1 -0
@@ -229,6 +229,7 @@ static int tw9903_probe(struct i2c_client *client,if (write_regs (sd, initial_registers) <0 ) {v4l2_err (client,"error initializing TW9903\n" ); +v4l2_ctrl_handler_free (hdl);return -EINVAL ; }
drivers/media/i2c/tw9906.c +1 -0
@@ -197,6 +197,7 @@ static int tw9906_probe(struct i2c_client *client,if (write_regs (sd, initial_registers) <0 ) {v4l2_err (client,"error initializing TW9906\n" ); +v4l2_ctrl_handler_free (hdl);return -EINVAL ; }
drivers/media/pci/cx23885/cx23885-alsa.c +3 -1
@@ -392,8 +392,10 @@ static int snd_cx23885_hw_params(struct snd_pcm_substream *substream, ret =cx23885_risc_databuffer (chip->pci, &buf->risc, buf->sglist, chip->period_size, chip->num_periods,1 ); -if (ret <0 ) +if (ret <0 ) { +cx23885_alsa_dma_unmap (chip); goto error; + }/* Loop back to start of program */ buf->risc.jmp[0 ] =cpu_to_le32 (RISC_JUMP |RISC_IRQ1 |RISC_CNT_INC );
drivers/media/pci/cx25821/cx25821-alsa.c +1 -0
@@ -536,6 +536,7 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream, chip->period_size, chip->num_periods, 1);if (ret <0 ) {pr_info ("DEBUG: ERROR after cx25821_risc_databuffer_audio()\n" ); +cx25821_alsa_dma_unmap (chip); goto error; }
drivers/media/pci/cx25821/cx25821-core.c +1 -0
@@ -915,6 +915,7 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)if (!dev->lmmio) {CX25821_ERR ("ioremap failed, maybe increasing __VMALLOC_RESERVE in page.h\n" ); +release_mem_region (dev->base_io_addr,pci_resource_len (dev->pci,0 ));cx25821_iounmap (dev);return -ENOMEM ; }
drivers/media/pci/cx88/cx88-alsa.c +3 -1
@@ -484,8 +484,10 @@ static int snd_cx88_hw_params(struct snd_pcm_substream *substream, ret =cx88_risc_databuffer (chip->pci, &buf->risc, buf->sglist, chip->period_size, chip->num_periods,1 ); -if (ret <0 ) +if (ret <0 ) { +cx88_alsa_dma_unmap (chip); goto error; + }/* Loop back to start of program */ buf->risc.jmp[0 ] =cpu_to_le32 (RISC_JUMP |RISC_IRQ1 |RISC_CNT_INC );
drivers/media/pci/solo6x10/solo6x10-tw28.c +7 -1
@@ -166,7 +166,7 @@ static const u8 tbl_tw2865_pal_template[] = { 0x64, 0x51, 0x40, 0xaf, 0xFF, 0xF0, 0x00, 0xC0, }; -#define is_tw286x (__solo, __id) (!(__solo->tw2815 & (1 << __id))) +#define is_tw286x (__solo, __id) (!((__solo)->tw2815 & (1U << (__id))))static u8 tw_readbyte (struct solo_dev *solo_dev,int chip_id,u8 tw6x_off,u8 tw_off)
@@ -686,6 +686,9 @@ int tw28_set_ctrl_val(struct solo_dev *solo_dev, u32 ctrl, u8 ch, chip_num = ch /4 ; ch %=4 ; +if (chip_num >=TW_NUM_CHIP ) +return -EINVAL ; +if (val >255 || val <0 )return -ERANGE ;
@@ -758,6 +761,9 @@ int tw28_get_ctrl_val(struct solo_dev *solo_dev, u32 ctrl, u8 ch, chip_num = ch /4 ; ch %=4 ; +if (chip_num >=TW_NUM_CHIP ) +return -EINVAL ; +switch (ctrl) {case V4L2_CID_SHARPNESS :/* Only 286x has sharpness */
drivers/media/platform/mtk-mdp/mtk_mdp_core.c +15 -2
@@ -195,11 +195,17 @@ static int mtk_mdp_probe(struct platform_device *pdev) } mdp->vpu_dev =vpu_get_plat_device (pdev); +if (!mdp->vpu_dev) { +dev_err (&pdev->dev,"Failed to get vpu device\n" ); + ret = -ENODEV ; + goto err_vpu_get_dev; + } + ret =vpu_wdt_reg_handler (mdp->vpu_dev, mtk_mdp_reset_handler, mdp,VPU_RST_MDP );if (ret) {dev_err (&pdev->dev,"Failed to register reset handler\n" ); - goto err_m2m_register; + goto err_reg_handler; }platform_set_drvdata (pdev, mdp);
@@ -207,7 +213,7 @@ static int mtk_mdp_probe(struct platform_device *pdev) ret =vb2_dma_contig_set_max_seg_size (&pdev->dev,DMA_BIT_MASK (32 ));if (ret) {dev_err (&pdev->dev,"Failed to set vb2 dma mag seg size\n" ); - goto err_m2m_register; + goto err_reg_handler; }pm_runtime_enable (dev);
@@ -215,6 +221,12 @@ static int mtk_mdp_probe(struct platform_device *pdev)return 0 ; +err_reg_handler: +platform_device_put (mdp->vpu_dev); + +err_vpu_get_dev: +mtk_mdp_unregister_m2m_device (mdp); + err_m2m_register:v4l2_device_unregister (&mdp->v4l2_dev);
@@ -243,6 +255,7 @@ static int mtk_mdp_remove(struct platform_device *pdev)pm_runtime_disable (&pdev->dev);vb2_dma_contig_clear_max_seg_size (&pdev->dev); +platform_device_put (mdp->vpu_dev);mtk_mdp_unregister_m2m_device (mdp);v4l2_device_unregister (&mdp->v4l2_dev);
drivers/media/platform/omap3isp/isppreview.c +8 -13
@@ -1739,22 +1739,17 @@ static void preview_try_format(struct isp_prev_device *prev,switch (pad) {case PREV_PAD_SINK : -/* When reading data from the CCDC, the input size has already -* been mangled by the CCDC output pad so it can be accepted -* as-is. -* -* When reading data from memory, clamp the requested width and -* height. The TRM doesn't specify a minimum input height, make +/* +* Clamp the requested width and height. +* The TRM doesn't specify a minimum input height, make * sure we got enough lines to enable the noise filter and color * filter array interpolation. */ -if (prev->input ==PREVIEW_INPUT_MEMORY ) { - fmt->width =clamp_t (u32, fmt->width,PREV_MIN_IN_WIDTH , -preview_max_out_width (prev)); - fmt->height =clamp_t (u32, fmt->height, -PREV_MIN_IN_HEIGHT , -PREV_MAX_IN_HEIGHT ); - } + fmt->width =clamp_t (u32, fmt->width,PREV_MIN_IN_WIDTH , +preview_max_out_width (prev)); + fmt->height =clamp_t (u32, fmt->height, +PREV_MIN_IN_HEIGHT , +PREV_MAX_IN_HEIGHT ); fmt->colorspace =V4L2_COLORSPACE_SRGB ;
drivers/media/platform/omap3isp/ispvideo.c +11 -3
@@ -148,12 +148,12 @@ static unsigned int isp_video_mbus_to_pix(const struct isp_video *video, pix->width = mbus->width; pix->height = mbus->height; -for (i =0 ; i <ARRAY_SIZE (formats); ++i) { +for (i =0 ; i <ARRAY_SIZE (formats) -1 ; ++i) {if (formats[i].code == mbus->code)break ; } -if (WARN_ON (i ==ARRAY_SIZE (formats))) +if (WARN_ON (i ==ARRAY_SIZE (formats) -1 ))return 0 ; min_bpl = pix->width * formats[i].bpp;
@@ -191,7 +191,7 @@ static void isp_video_pix_to_mbus(const struct v4l2_pix_format *pix,/* Skip the last format in the loop so that it will be selected if no * match is found. */ -for (i =0 ; i <ARRAY_SIZE (formats) -1 ; ++i) { +for (i =0 ; i <ARRAY_SIZE (formats) -2 ; ++i) {if (formats[i].pixelformat == pix->pixelformat)break ; }
@@ -1293,6 +1293,7 @@ static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {static int isp_video_open (struct file *file) {struct isp_video *video =video_drvdata (file); +struct v4l2_mbus_framefmt fmt;struct isp_video_fh *handle;struct vb2_queue *queue;int ret =0 ;
@@ -1334,6 +1335,13 @@ static int isp_video_open(struct file *file)memset (&handle->format,0 ,sizeof (handle->format)); handle->format.type = video->type; + handle->format.fmt.pix.width =720 ; + handle->format.fmt.pix.height =480 ; + handle->format.fmt.pix.pixelformat =V4L2_PIX_FMT_UYVY ; + handle->format.fmt.pix.field =V4L2_FIELD_NONE ; + handle->format.fmt.pix.colorspace =V4L2_COLORSPACE_SRGB ; +isp_video_pix_to_mbus (&handle->format.fmt.pix, &fmt); +isp_video_mbus_to_pix (video, &fmt, &handle->format.fmt.pix); handle->timeperframe.denominator =1 ; handle->video = video;
drivers/media/platform/qcom/venus/vdec.c +3 -3
@@ -1311,10 +1311,10 @@ static void vdec_buf_done(struct venus_inst *inst, unsigned int buf_type, inst->drain_active = false; inst->codec_state =VENUS_DEC_STATE_STOPPED ; } + }else { +if (!bytesused) + state =VB2_BUF_STATE_ERROR ; } - -if (!bytesused) - state =VB2_BUF_STATE_ERROR ; }else { vbuf->sequence = inst->sequence_out++; }
drivers/media/radio/radio-keene.c +1 -1
@@ -338,7 +338,6 @@ static int usb_keene_probe(struct usb_interface *intf,if (hdl->error) { retval = hdl->error; -v4l2_ctrl_handler_free (hdl); goto err_v4l2; } retval =v4l2_device_register (&intf->dev, &radio->v4l2_dev);
@@ -384,6 +383,7 @@ static int usb_keene_probe(struct usb_interface *intf, err_vdev:v4l2_device_unregister (&radio->v4l2_dev); err_v4l2: +v4l2_ctrl_handler_free (&radio->hdl);kfree (radio->buffer);kfree (radio); err:
drivers/media/usb/pvrusb2/pvrusb2-hdw.c +5 -0
@@ -3704,6 +3704,11 @@ status);"Failed to submit read-control URB status=%d" , status); hdw->ctl_read_pend_flag =0 ; +if (hdw->ctl_write_pend_flag) { +usb_unlink_urb (hdw->ctl_write_urb); +while (hdw->ctl_write_pend_flag)
Lines of this file are not shown. View the raw message.
drivers/mmc/core/sd_ops.c +47 -2
49 lines not on this page · raw message
drivers/mtd/nand/raw/cadence-nand-controller.c +1 -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/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/usb/catc.c +48 -11
59 lines not on this page · raw message
drivers/net/usb/lan78xx.c +78 -37
115 lines not on this page · 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/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/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 +33 -36
69 lines not on this page · raw message
drivers/regulator/core.c +38 -30
68 lines not on this page · raw message
drivers/rpmsg/rpmsg_core.c +27 -39
66 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/gfs2/bmap.c +93 -134
227 lines not on this page · raw message
fs/gfs2/file.c +46 -13
59 lines not on this page · 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/linux/pm.h +51 -29
80 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 +69 -26
95 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/sunrpc/auth_gss/gss_rpc_xdr.c +64 -18
82 lines not on this page · raw message
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +51 -38
89 lines not on this page · raw message
net/sunrpc/xprtrdma/svc_rdma_transport.c +29 -17
46 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/tc_actions.sh +12 -6
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.