Linux 5.13.10
Greg Kroah-Hartman
maintainerMakefile +10 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 13 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Opossums on Parade
@@ -1366,6 +1366,15 @@ scripts_unifdef: scripts_basic $(Q)$(MAKE) $(build)=scripts scripts/unifdef # --------------------------------------------------------------------------- +# Install + +# Many distributions have the custom install script, /sbin/installkernel. +# If DKMS is installed, 'make install' will eventually recuses back +# to the this Makefile to build and install external modules. +# Cancel sub_make_done so that options such as M=, V=, etc. are parsed. + +install: sub_make_done := + # Kernel selftest PHONY += kselftest
arch/alpha/kernel/smp.c +1 -1
@@ -582,7 +582,7 @@ voidsmp_send_stop (void) {cpumask_t to_whom; -cpumask_copy (&to_whom, cpu_possible_mask); +cpumask_copy (&to_whom, cpu_online_mask);cpumask_clear_cpu (smp_processor_id (), &to_whom);#ifdef DEBUG_IPI_MSG if (hard_smp_processor_id () != boot_cpu_id)
arch/arm/boot/dts/am437x-l4.dtsi +1 -1
@@ -1595,7 +1595,7 @@ dcan1: can@0 { compatible = "ti,am4372-d_can", "ti,am3352-d_can"; reg = <0x0 0x2000>; clocks = <&dcan1_fck>; - clock-name = "fck"; + clock-names = "fck"; syscon-raminit = <&scm_conf 0x644 1>; interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; status = "disabled";
arch/arm/boot/dts/imx53-m53menlo.dts +2 -2
@@ -388,13 +388,13 @@ MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 0x80000000 pinctrl_power_button: powerbutgrp { fsl,pins = < - MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4 + MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4 >; }; pinctrl_power_out: poweroutgrp { fsl,pins = < - MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4 + MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4 >; };
arch/arm/boot/dts/imx6qdl-sr-som.dtsi +7 -1
@@ -54,7 +54,13 @@ &fec { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_microsom_enet_ar8035>; phy-mode = "rgmii-id"; - phy-reset-duration = <2>; + + /* + * The PHY seems to require a long-enough reset duration to avoid + * some rare issues where the PHY gets stuck in an inconsistent and + * non-functional state at boot-up. 10ms proved to be fine . + */ + phy-reset-duration = <10>; phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; status = "okay";
arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi +1 -0
@@ -43,6 +43,7 @@ &usdhc2 { assigned-clock-rates = <0>, <198000000>; cap-power-off-card; keep-power-in-suspend; + max-frequency = <25000000>; mmc-pwrseq = <&wifi_pwrseq>; no-1-8-v; non-removable;
arch/arm/boot/dts/omap5-board-common.dtsi +1 -8
@@ -30,14 +30,6 @@ vsys_cobra: fixedregulator-vsys_cobra { regulator-max-microvolt = <5000000>; }; - vdds_1v8_main: fixedregulator-vdds_1v8_main { - compatible = "regulator-fixed"; - regulator-name = "vdds_1v8_main"; - vin-supply = <&smps7_reg>; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - }; - vmmcsd_fixed: fixedregulator-mmcsd { compatible = "regulator-fixed"; regulator-name = "vmmcsd_fixed";
@@ -487,6 +479,7 @@ smps6_reg: smps6 { regulator-boot-on; }; + vdds_1v8_main: smps7_reg: smps7 { /* VDDS_1v8_OMAP over VDDS_1v8_MAIN */ regulator-name = "smps7";
arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi +14 -10
@@ -37,7 +37,7 @@ gpio-keys-polled { poll-interval = <20>; /* - * The EXTi IRQ line 3 is shared with touchscreen and ethernet, + * The EXTi IRQ line 3 is shared with ethernet, * so mark this as polled GPIO key. */ button-0 {
@@ -46,6 +46,16 @@ button-0 { gpios = <&gpiof 3 GPIO_ACTIVE_LOW>; }; + /* + * The EXTi IRQ line 6 is shared with touchscreen, + * so mark this as polled GPIO key. + */ + button-1 { + label = "TA2-GPIO-B"; + linux,code = <KEY_B>; + gpios = <&gpiod 6 GPIO_ACTIVE_LOW>; + }; + /* * The EXTi IRQ line 0 is shared with PMIC, * so mark this as polled GPIO key.
@@ -60,13 +70,6 @@ button-2 { gpio-keys { compatible = "gpio-keys"; - button-1 { - label = "TA2-GPIO-B"; - linux,code = <KEY_B>; - gpios = <&gpiod 6 GPIO_ACTIVE_LOW>; - wakeup-source; - }; - button-3 { label = "TA4-GPIO-D"; linux,code = <KEY_D>;
@@ -82,6 +85,7 @@ led-0 { label = "green:led5"; gpios = <&gpioc 6 GPIO_ACTIVE_HIGH>; default-state = "off"; + status = "disabled"; }; led-1 {
@@ -185,8 +189,8 @@ sgtl5000_rx_endpoint: endpoint@1 { touchscreen@38 { compatible = "edt,edt-ft5406"; reg = <0x38>; - interrupt-parent = <&gpiog>; - interrupts = <2 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */ + interrupt-parent = <&gpioc>; + interrupts = <6 IRQ_TYPE_EDGE_FALLING>; /* GPIO E */ }; };
arch/arm/boot/dts/stm32mp15xx-dhcom-som.dtsi +4 -1
@@ -12,6 +12,8 @@ / { aliases { ethernet0 = ðernet0; ethernet1 = &ksz8851; + rtc0 = &hwrtc; + rtc1 = &rtc; }; memory@c0000000 {
@@ -138,6 +140,7 @@ phy0: ethernet-phy@1 { reset-gpios = <&gpioh 3 GPIO_ACTIVE_LOW>; reset-assert-us = <500>; reset-deassert-us = <500>; + smsc,disable-energy-detect; interrupt-parent = <&gpioi>; interrupts = <11 IRQ_TYPE_LEVEL_LOW>; };
@@ -248,7 +251,7 @@ &i2c4 { /delete-property/dmas; /delete-property/dma-names; - rtc@32 { + hwrtc: rtc@32 { compatible = "microcrystal,rv8803"; reg = <0x32>; };
arch/arm/mach-imx/mmdc.c +14 -3
@@ -103,6 +103,7 @@ struct mmdc_pmu {struct perf_event *mmdc_events[MMDC_NUM_COUNTERS ];struct hlist_node node;struct fsl_mmdc_devtype_data *devtype_data; +struct clk *mmdc_ipg_clk; };/*
@@ -462,11 +463,14 @@ static int imx_mmdc_remove(struct platform_device *pdev)cpuhp_state_remove_instance_nocalls (cpuhp_mmdc_state, &pmu_mmdc->node);perf_pmu_unregister (&pmu_mmdc->pmu); +iounmap (pmu_mmdc->mmdc_base); +clk_disable_unprepare (pmu_mmdc->mmdc_ipg_clk);kfree (pmu_mmdc);return 0 ; } -static int imx_mmdc_perf_init (struct platform_device *pdev,void __iomem *mmdc_base) +static int imx_mmdc_perf_init (struct platform_device *pdev,void __iomem *mmdc_base, +struct clk *mmdc_ipg_clk) {struct mmdc_pmu *pmu_mmdc;char *name;
@@ -494,6 +498,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b } mmdc_num =mmdc_pmu_init (pmu_mmdc, mmdc_base, &pdev->dev); + pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk;if (mmdc_num ==0 ) name ="mmdc" ;else
@@ -529,7 +534,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b#else #define imx_mmdc_remove NULL -#define imx_mmdc_perf_init (pdev, mmdc_base) 0 +#define imx_mmdc_perf_init (pdev, mmdc_base, mmdc_ipg_clk) 0#endif static int imx_mmdc_probe (struct platform_device *pdev)
@@ -567,7 +572,13 @@ static int imx_mmdc_probe(struct platform_device *pdev) val &= ~(1 <<BP_MMDC_MAPSR_PSD );writel_relaxed (val, reg); -return imx_mmdc_perf_init (pdev, mmdc_base); + err =imx_mmdc_perf_init (pdev, mmdc_base, mmdc_ipg_clk); +if (err) { +iounmap (mmdc_base); +clk_disable_unprepare (mmdc_ipg_clk); + } + +return err; }int imx_mmdc_get_ddr_type (void )
arch/arm/mach-omap2/omap_hwmod.c +9 -1
@@ -3776,6 +3776,7 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)struct omap_hwmod_ocp_if *oi;struct clockdomain *clkdm;struct clk_hw_omap *clk; +struct clk_hw *hw;if (!oh)return NULL ;
@@ -3792,7 +3793,14 @@ struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh) c = oi->_clk; } - clk =to_clk_hw_omap (__clk_get_hw (c)); + hw =__clk_get_hw (c); +if (!hw) +return NULL ; + + clk =to_clk_hw_omap (hw); +if (!clk) +return NULL ; + clkdm = clk->clkdm;if (!clkdm)return NULL ;
arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var2.dts +2 -0
@@ -54,6 +54,7 @@ &mscc_felix { &mscc_felix_port0 { label = "swp0"; + managed = "in-band-status"; phy-handle = <&phy0>; phy-mode = "sgmii"; status = "okay";
@@ -61,6 +62,7 @@ &mscc_felix_port0 { &mscc_felix_port1 { label = "swp1"; + managed = "in-band-status"; phy-handle = <&phy1>; phy-mode = "sgmii"; status = "okay";
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +1 -1
@@ -66,7 +66,7 @@ CPU_PW20: cpu-pw20 { }; }; - sysclk: clock-sysclk { + sysclk: sysclk { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <100000000>;
arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts +3 -0
@@ -19,6 +19,8 @@ / { aliases { spi0 = &spi0; ethernet1 = ð1; + mmc0 = &sdhci0; + mmc1 = &sdhci1; }; chosen {
@@ -119,6 +121,7 @@ &i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; clock-frequency = <100000>; + /delete-property/ mrvl,i2c-fast-mode; status = "okay"; rtc@6f {
arch/arm64/include/asm/ptrace.h +11 -1
@@ -320,7 +320,17 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)static inline unsigned long regs_return_value (struct pt_regs *regs) { -return regs->regs[0 ]; +unsigned long val = regs->regs[0 ]; + +/* +* Audit currently uses regs_return_value() instead of +* syscall_get_return_value(). Apply the same sign-extension here until +* audit is updated to use syscall_get_return_value(). +*/ +if (compat_user_mode (regs)) + val =sign_extend64 (val,31 ); + +return val; }static inline void regs_set_return_value (struct pt_regs *regs,unsigned long rc)
arch/arm64/include/asm/syscall.h +10 -9
@@ -29,22 +29,23 @@ static inline void syscall_rollback(struct task_struct *task, regs->regs[0 ] = regs->orig_x0; } - -static inline long syscall_get_error (struct task_struct *task, -struct pt_regs *regs) +static inline long syscall_get_return_value (struct task_struct *task, +struct pt_regs *regs) { -unsigned long error = regs->regs[0 ]; +unsigned long val = regs->regs[0 ];if (is_compat_thread (task_thread_info (task))) - error =sign_extend64 (error,31 ); + val =sign_extend64 (val,31 ); -return IS_ERR_VALUE (error) ? error :0 ; +return val; } -static inline long syscall_get_return_value (struct task_struct *task, -struct pt_regs *regs) +static inline long syscall_get_error (struct task_struct *task, +struct pt_regs *regs) { -return regs->regs[0 ]; +unsigned long error =syscall_get_return_value (task, regs); + +return IS_ERR_VALUE (error) ? error :0 ; } static inline void syscall_set_return_value(struct task_struct *task,
arch/arm64/kernel/ptrace.c +1 -1
@@ -1862,7 +1862,7 @@ void syscall_trace_exit(struct pt_regs *regs)audit_syscall_exit (regs);if (flags & _TIF_SYSCALL_TRACEPOINT) -trace_sys_exit (regs,regs_return_value (regs)); +trace_sys_exit (regs,syscall_get_return_value (current, regs));if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))tracehook_report_syscall (regs,PTRACE_SYSCALL_EXIT );
arch/arm64/kernel/signal.c +2 -1
@@ -29,6 +29,7 @@#include <asm/unistd.h> #include <asm/fpsimd.h> #include <asm/ptrace.h> +#include <asm/syscall.h> #include <asm/signal32.h> #include <asm/traps.h> #include <asm/vdso.h>
@@ -890,7 +891,7 @@ static void do_signal(struct pt_regs *regs) retval == -ERESTART_RESTARTBLOCK || (retval == -ERESTARTSYS && !(ksig.ka.sa.sa_flags & SA_RESTART)))) { - regs->regs[0 ] = -EINTR ; +syscall_set_return_value (current, regs, -EINTR ,0 ); regs->pc = continue_addr; }
arch/arm64/kernel/stacktrace.c +1 -1
@@ -220,7 +220,7 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)#ifdef CONFIG_STACKTRACE -noinline void arch_stack_walk(stack_trace_consume_fn consume_entry, +noinline notrace void arch_stack_walk(stack_trace_consume_fn consume_entry,void *cookie,struct task_struct *task,struct pt_regs *regs) {
arch/arm64/kernel/syscall.c +3 -6
@@ -54,10 +54,7 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno, ret =do_ni_syscall (regs, scno); } -if (is_compat_task ()) - ret =lower_32_bits (ret); - - regs->regs[0 ] = ret; +syscall_set_return_value (current, regs,0 , ret);/* * Ultimately, this value will get limited by KSTACK_OFFSET_MAX(),
@@ -115,7 +112,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,* syscall. do_notify_resume() will send a signal to userspace * before the syscall is restarted. */ - regs->regs[0 ] = -ERESTARTNOINTR ; +syscall_set_return_value (current, regs, -ERESTARTNOINTR ,0 );return ; }
@@ -136,7 +133,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,* anyway. */ if (scno ==NO_SYSCALL ) - regs->regs[0 ] = -ENOSYS ; +syscall_set_return_value (current, regs, -ENOSYS ,0 ); scno =syscall_trace_enter (regs);if (scno ==NO_SYSCALL ) goto trace_exit;
arch/mips/Makefile +1 -1
@@ -321,7 +321,7 @@ KBUILD_LDFLAGS += -m $(ld-emul) ifdef CONFIG_MIPS CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ - egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \ + egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') endif
arch/mips/include/asm/pgalloc.h +11 -6
@@ -59,15 +59,20 @@ do { \static inline pmd_t *pmd_alloc_one (struct mm_struct *mm,unsigned long address) { -pmd_t *pmd =NULL ; +pmd_t *pmd;struct page *pg; - pg =alloc_pages (GFP_KERNEL | __GFP_ACCOUNT,PMD_ORDER ); -if (pg) { -pgtable_pmd_page_ctor (pg); - pmd = (pmd_t *)page_address (pg); -pmd_init ((unsigned long )pmd, (unsigned long )invalid_pte_table); + pg =alloc_pages (GFP_KERNEL_ACCOUNT ,PMD_ORDER ); +if (!pg) +return NULL ; + +if (!pgtable_pmd_page_ctor (pg)) { +__free_pages (pg,PMD_ORDER ); +return NULL ; } + + pmd = (pmd_t *)page_address (pg); +pmd_init ((unsigned long )pmd, (unsigned long )invalid_pte_table);return pmd; }
arch/mips/mti-malta/malta-platform.c +2 -1
@@ -47,7 +47,8 @@ static struct plat_serial8250_port uart8250_data[] = { .mapbase = 0x1f000900, /* The CBUS UART */ .irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2, .uartclk = 3686400, /* Twice the usual clk! */ - .iotype = UPIO_MEM32, + .iotype =IS_ENABLED (CONFIG_CPU_BIG_ENDIAN ) ? + UPIO_MEM32BE : UPIO_MEM32, .flags = CBUS_UART_FLAGS, .regshift = 3, },
arch/riscv/Kconfig +1 -0
@@ -489,6 +489,7 @@ config CC_HAVE_STACKPROTECTOR_TLS config STACKPROTECTOR_PER_TASK def_bool y + depends on !GCC_PLUGIN_RANDSTRUCT depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS config PHYS_RAM_BASE_FIXED
arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts +1 -1
@@ -24,7 +24,7 @@ cpus { memory@80000000 { device_type = "memory"; - reg = <0x0 0x80000000 0x2 0x00000000>; + reg = <0x0 0x80000000 0x4 0x00000000>; }; soc {
arch/riscv/kernel/stacktrace.c +1 -1
@@ -27,7 +27,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs, fp =frame_pointer (regs); sp =user_stack_pointer (regs); pc =instruction_pointer (regs); - }else if (task == current) { + }else if (task ==NULL || task == current) { fp = (unsigned long )__builtin_frame_address (1 ); sp = (unsigned long )__builtin_frame_address (0 ); pc = (unsigned long )__builtin_return_address (0 );
arch/x86/events/perf_event.h +2 -1
@@ -1115,9 +1115,10 @@ void x86_pmu_stop(struct perf_event *event, int flags);static inline void x86_pmu_disable_event (struct perf_event *event) { +u64 disable_mask =__this_cpu_read (cpu_hw_events.perf_ctr_virt_mask);struct hw_perf_event *hwc = &event->hw; -wrmsrl (hwc->config_base, hwc->config); +wrmsrl (hwc->config_base, hwc->config & ~disable_mask);if (is_counter_pair (hwc))wrmsrl (x86_pmu_config_addr (hwc->idx +1 ),0 );
arch/x86/kvm/mmu/mmu.c +1 -1
@@ -1546,7 +1546,7 @@ static int is_empty_shadow_page(u64 *spt)* aggregate version in order to make the slab shrinker * faster */ -static inline void kvm_mod_used_mmu_pages (struct kvm *kvm,unsigned long nr) +static inline void kvm_mod_used_mmu_pages (struct kvm *kvm,long nr) { kvm->arch.n_used_mmu_pages += nr;percpu_counter_add (&kvm_total_used_mmu_pages, nr);
arch/x86/kvm/svm/sev.c +1 -1
@@ -188,7 +188,7 @@ static void sev_asid_free(struct kvm_sev_info *sev)for_each_possible_cpu (cpu) { sd =per_cpu (svm_data, cpu); - sd->sev_vmcbs[pos] =NULL ; + sd->sev_vmcbs[sev->asid] =NULL ; }mutex_unlock (&sev_bitmap_lock);
arch/x86/kvm/x86.c +11 -2
@@ -4252,8 +4252,17 @@ static int kvm_cpu_accept_dm_intr(struct kvm_vcpu *vcpu)static int kvm_vcpu_ready_for_interrupt_injection (struct kvm_vcpu *vcpu) { -return kvm_arch_interrupt_allowed (vcpu) && -kvm_cpu_accept_dm_intr (vcpu); +/* +* Do not cause an interrupt window exit if an exception +* is pending or an event needs reinjection; userspace +* might want to inject the interrupt manually using KVM_SET_REGS +* or KVM_SET_SREGS. For that to work, we must be at an +* instruction boundary and with no events half-injected. +*/ +return (kvm_arch_interrupt_allowed (vcpu) && +kvm_cpu_accept_dm_intr (vcpu) && + !kvm_event_needs_reinjection (vcpu) && + !vcpu->arch.exception.pending); } static int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu,
arch/x86/tools/relocs.c +4 -4
@@ -57,12 +57,12 @@ static const char * const sym_regex_kernel[S_NSYMTYPES] = { [S_REL ] ="^(__init_(begin|end)|" "__x86_cpu_dev_(start|end)|" -"(__parainstructions|__alt_instructions)(|_end)|" -"(__iommu_table|__apicdrivers|__smp_locks)(|_end)|" +"(__parainstructions|__alt_instructions)(_end)?|" +"(__iommu_table|__apicdrivers|__smp_locks)(_end)?|" "__(start|end)_pci_.*|" "__(start|end)_builtin_fw|" -"__(start|stop)___ksymtab(|_gpl)|" -"__(start|stop)___kcrctab(|_gpl)|" +"__(start|stop)___ksymtab(_gpl)?|" +"__(start|stop)___kcrctab(_gpl)?|" "__(start|stop)___param|" "__(start|stop)___modver|" "__(start|stop)___bug_table|"
block/blk-iolatency.c +5 -1
@@ -833,7 +833,11 @@ static ssize_t iolatency_set_limit(struct kernfs_open_file *of, char *buf, enable =iolatency_set_min_lat_nsec (blkg, lat_val);if (enable) { -WARN_ON_ONCE (!blk_get_queue (blkg->q)); +if (!blk_get_queue (blkg->q)) { + ret = -ENODEV ; + goto out; + } +blkg_get (blkg); }
drivers/acpi/acpica/nsrepair2.c +0 -7
@@ -379,13 +379,6 @@ acpi_ns_repair_CID(struct acpi_evaluate_info *info, (*element_ptr)->common.reference_count = original_ref_count; - -/* -* The original_element holds a reference from the package object -* that represents _HID. Since a new element was created by _HID, -* remove the reference from the _CID package. -*/ -acpi_ut_remove_reference (original_element); } element_ptr++;
drivers/ata/libata-sff.c +27 -8
@@ -637,6 +637,20 @@ unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc, unsigned char *buf, }EXPORT_SYMBOL_GPL (ata_sff_data_xfer32); +static void ata_pio_xfer (struct ata_queued_cmd *qc,struct page *page, +unsigned int offset,size_t xfer_size) +{ +bool do_write = (qc->tf.flags &ATA_TFLAG_WRITE ); +unsigned char *buf; + + buf =kmap_atomic (page); + qc->ap->ops->sff_data_xfer (qc, buf + offset, xfer_size, do_write); +kunmap_atomic (buf); + +if (!do_write && !PageSlab (page)) +flush_dcache_page (page); +} +/** * ata_pio_sector - Transfer a sector of data. * @qc: Command on going
@@ -648,11 +662,9 @@ EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);*/ static void ata_pio_sector (struct ata_queued_cmd *qc) { -int do_write = (qc->tf.flags &ATA_TFLAG_WRITE );struct ata_port *ap = qc->ap;struct page *page;unsigned int offset; -unsigned char *buf;if (!qc->cursg) { qc->curbytes = qc->nbytes;
@@ -670,13 +682,20 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)DPRINTK ("data %s\n" , qc->tf.flags &ATA_TFLAG_WRITE ?"write" :"read" ); -/* do the actual data transfer */ - buf =kmap_atomic (page); - ap->ops->sff_data_xfer (qc, buf + offset, qc->sect_size, do_write); -kunmap_atomic (buf); +/* +* Split the transfer when it splits a page boundary. Note that the +* split still has to be dword aligned like all ATA data transfers. +*/ +WARN_ON_ONCE (offset %4 ); +if (offset + qc->sect_size >PAGE_SIZE ) { +unsigned int split_len =PAGE_SIZE - offset; -if (!do_write && !PageSlab (page)) -flush_dcache_page (page); +ata_pio_xfer (qc, page, offset, split_len); +ata_pio_xfer (qc,nth_page (page,1 ),0 , + qc->sect_size - split_len); + }else { +ata_pio_xfer (qc, page, offset, qc->sect_size); + } qc->curbytes += qc->sect_size; qc->cursg_ofs += qc->sect_size;
drivers/base/dd.c +2 -2
@@ -634,8 +634,6 @@ static int really_probe(struct device *dev, struct device_driver *drv)else if (drv->remove) drv->remove (dev); probe_failed: -kfree (dev->dma_range_map); - dev->dma_range_map =NULL ;if (dev->bus)blocking_notifier_call_chain (&dev->bus->p->bus_notifier,BUS_NOTIFY_DRIVER_NOT_BOUND , dev);
@@ -643,6 +641,8 @@ static int really_probe(struct device *dev, struct device_driver *drv)device_links_no_driver (dev);devres_release_all (dev);arch_teardown_dma_ops (dev); +kfree (dev->dma_range_map); + dev->dma_range_map =NULL ;driver_sysfs_remove (dev); dev->driver =NULL ;dev_set_drvdata (dev,NULL );
drivers/base/firmware_loader/fallback.c +8 -6
@@ -89,12 +89,11 @@ static void __fw_load_abort(struct fw_priv *fw_priv) {/* * There is a small window in which user can write to 'loading' -* between loading done and disappearance of 'loading' +* between loading done/aborted and disappearance of 'loading' */ -if (fw_sysfs_done (fw_priv)) +if (fw_state_is_aborted (fw_priv) ||fw_sysfs_done (fw_priv))return ; -list_del_init (&fw_priv->pending_list);fw_state_aborted (fw_priv); }
@@ -280,7 +279,6 @@ static ssize_t firmware_loading_store(struct device *dev,* Same logic as fw_load_abort, only the DONE bit * is ignored and we set ABORT only on failure. */ -list_del_init (&fw_priv->pending_list);if (rc) {fw_state_aborted (fw_priv); written = rc;
@@ -513,6 +511,11 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, long timeout) }mutex_lock (&fw_lock); +if (fw_state_is_aborted (fw_priv)) { +mutex_unlock (&fw_lock); + retval = -EINTR ; + goto out; + }list_add (&fw_priv->pending_list, &pending_fw_head);mutex_unlock (&fw_lock);
@@ -535,11 +538,10 @@ static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs, long timeout)if (fw_state_is_aborted (fw_priv)) {if (retval == -ERESTARTSYS ) retval = -EINTR ; -else - retval = -EAGAIN ; }else if (fw_priv->is_paged_buf && !fw_priv->data) retval = -ENOMEM ; +out:device_del (f_dev); err_put_dev:put_device (f_dev);
drivers/base/firmware_loader/firmware.h +9 -1
@@ -117,8 +117,16 @@ static inline void __fw_state_set(struct fw_priv *fw_priv,WRITE_ONCE (fw_st->status, status); -if (status ==FW_STATUS_DONE || status ==FW_STATUS_ABORTED ) +if (status ==FW_STATUS_DONE || status ==FW_STATUS_ABORTED ) { +#ifdef CONFIG_FW_LOADER_USER_HELPER +/* +* Doing this here ensures that the fw_priv is deleted from +* the pending list in all abort/done paths. +*/ +list_del_init (&fw_priv->pending_list); +#endif complete_all (&fw_st->completion); + } }static inline void fw_state_aborted (struct fw_priv *fw_priv)
drivers/base/firmware_loader/main.c +2 -0
@@ -783,8 +783,10 @@ static void fw_abort_batch_reqs(struct firmware *fw)return ; fw_priv = fw->priv; +mutex_lock (&fw_lock);if (!fw_state_is_aborted (fw_priv))fw_state_aborted (fw_priv); +mutex_unlock (&fw_lock); }/* called from request_firmware() and request_firmware_work_func() */
drivers/bus/ti-sysc.c +15 -7
@@ -100,6 +100,7 @@ static const char * const clock_names[SYSC_MAX_CLOCKS] = {* @cookie: data used by legacy platform callbacks * @name: name if available * @revision: interconnect target module revision +* @reserved: target module is reserved and already in use * @enabled: sysc runtime enabled status * @needs_resume: runtime resume needed on resume from suspend * @child_needs_resume: runtime resume needed for child on resume from suspend
@@ -130,6 +131,7 @@ struct sysc {struct ti_sysc_cookie cookie;const char *name;u32 revision; + unsigned int reserved:1; unsigned int enabled:1; unsigned int needs_resume:1; unsigned int child_needs_resume:1;
@@ -2951,6 +2953,8 @@ static int sysc_init_soc(struct sysc *ddata) case SOC_3430 ... SOC_3630:sysc_add_disabled (0x48304000 );/* timer12 */ break ; +case SOC_AM3 : +sysc_add_disabled (0x48310000 );/* rng */ default :break ; }
@@ -3093,8 +3097,8 @@ static int sysc_probe(struct platform_device *pdev)return error; error =sysc_check_active_timer (ddata); -if (error) -return error; +if (error == -EBUSY ) + ddata->reserved = true; error =sysc_get_clocks (ddata);if (error)
@@ -3130,11 +3134,15 @@ static int sysc_probe(struct platform_device *pdev)sysc_show_registers (ddata); ddata->dev->type = &sysc_device_type; - error =of_platform_populate (ddata->dev->of_node, sysc_match_table, - pdata ? pdata->auxdata :NULL , - ddata->dev); -if (error) - goto err; + +if (!ddata->reserved) { + error =of_platform_populate (ddata->dev->of_node, + sysc_match_table, + pdata ? pdata->auxdata :NULL , + ddata->dev); +if (error) + goto err; + }INIT_DELAYED_WORK (&ddata->idle_work, ti_sysc_idle);
drivers/char/tpm/tpm_ftpm_tee.c +4 -4
@@ -254,11 +254,11 @@ static int ftpm_tee_probe(struct device *dev) pvt_data->session = sess_arg.session;/* Allocate dynamic shared memory with fTPM TA */ - pvt_data->shm =tee_shm_alloc (pvt_data->ctx, -MAX_COMMAND_SIZE +MAX_RESPONSE_SIZE , -TEE_SHM_MAPPED |TEE_SHM_DMA_BUF ); + pvt_data->shm =tee_shm_alloc_kernel_buf (pvt_data->ctx, +MAX_COMMAND_SIZE + +MAX_RESPONSE_SIZE );if (IS_ERR (pvt_data->shm)) { -dev_err (dev,"%s: tee_shm_alloc failed\n" , __func__); +dev_err (dev,"%s: tee_shm_alloc_kernel_buf failed\n" , __func__); rc = -ENOMEM ; goto out_shm_alloc; }
drivers/clk/clk-devres.c +8 -1
@@ -92,13 +92,20 @@ int __must_check devm_clk_bulk_get_optional(struct device *dev, int num_clks, }EXPORT_SYMBOL_GPL (devm_clk_bulk_get_optional); +static void devm_clk_bulk_release_all (struct device *dev,void *res) +{ +struct clk_bulk_devres *devres = res; + +clk_bulk_put_all (devres->num_clks, devres->clks); +} +int __must_check devm_clk_bulk_get_all (struct device *dev,struct clk_bulk_data **clks) {struct clk_bulk_devres *devres;int ret; - devres =devres_alloc (devm_clk_bulk_release, + devres =devres_alloc (devm_clk_bulk_release_all,sizeof (*devres),GFP_KERNEL );if (!devres)return -ENOMEM ;
drivers/clk/clk-stm32f4.c +5 -5
@@ -526,7 +526,7 @@ struct stm32f4_pll {struct stm32f4_pll_post_div_data {int idx; -u8 pll_num; +int pll_idx;const char *name;const char *parent;u8 flag;
@@ -557,13 +557,13 @@ static const struct clk_div_table post_divr_table[] = {#define MAX_POST_DIV 3static const struct stm32f4_pll_post_div_data post_div_data[MAX_POST_DIV ] = { - {CLK_I2SQ_PDIV ,PLL_I2S ,"plli2s-q-div" ,"plli2s-q" , + {CLK_I2SQ_PDIV ,PLL_VCO_I2S ,"plli2s-q-div" ,"plli2s-q" ,CLK_SET_RATE_PARENT ,STM32F4_RCC_DCKCFGR ,0 ,5 ,0 ,NULL }, - {CLK_SAIQ_PDIV ,PLL_SAI ,"pllsai-q-div" ,"pllsai-q" , + {CLK_SAIQ_PDIV ,PLL_VCO_SAI ,"pllsai-q-div" ,"pllsai-q" ,CLK_SET_RATE_PARENT ,STM32F4_RCC_DCKCFGR ,8 ,5 ,0 ,NULL }, - {NO_IDX ,PLL_SAI ,"pllsai-r-div" ,"pllsai-r" ,CLK_SET_RATE_PARENT , + {NO_IDX ,PLL_VCO_SAI ,"pllsai-r-div" ,"pllsai-r" ,CLK_SET_RATE_PARENT ,STM32F4_RCC_DCKCFGR ,16 ,2 ,0 , post_divr_table }, };
@@ -1774,7 +1774,7 @@ static void __init stm32f4_rcc_init(struct device_node *np) post_div->width, post_div->flag_div, post_div->div_table, - clks[post_div->pll_num], + clks[post_div->pll_idx], &stm32f4_clk_lock);if (post_div->idx !=NO_IDX )
drivers/clk/tegra/clk-sdmmc-mux.c +10 -0
@@ -194,6 +194,15 @@ static void clk_sdmmc_mux_disable(struct clk_hw *hw) gate_ops->disable (gate_hw); } +static void clk_sdmmc_mux_disable_unused (struct clk_hw *hw) +{ +struct tegra_sdmmc_mux *sdmmc_mux =to_clk_sdmmc_mux (hw); +const struct clk_ops *gate_ops = sdmmc_mux->gate_ops; +struct clk_hw *gate_hw = &sdmmc_mux->gate.hw; + + gate_ops->disable_unused (gate_hw); +} +static void clk_sdmmc_mux_restore_context (struct clk_hw *hw) {struct clk_hw *parent =clk_hw_get_parent (hw);
@@ -218,6 +227,7 @@ static const struct clk_ops tegra_clk_sdmmc_mux_ops = { .is_enabled = clk_sdmmc_mux_is_enabled, .enable = clk_sdmmc_mux_enable, .disable = clk_sdmmc_mux_disable, + .disable_unused = clk_sdmmc_mux_disable_unused, .restore_context = clk_sdmmc_mux_restore_context, };
drivers/dma/idxd/idxd.h +14 -0
@@ -294,6 +294,14 @@ struct idxd_desc {struct idxd_wq *wq; }; +/* +* This is software defined error for the completion status. We overload the error code +* that will never appear in completion status and only SWERR register. +*/ +enum idxd_completion_status { +IDXD_COMP_DESC_ABORT =0xff , +}; +#define confdev_to_idxd (dev) container_of(dev, struct idxd_device, conf_dev)#define confdev_to_wq (dev) container_of(dev, struct idxd_wq, conf_dev)
@@ -482,4 +490,10 @@ static inline void perfmon_init(void) {}static inline void perfmon_exit (void ) {}#endif +static inline void complete_desc (struct idxd_desc *desc,enum idxd_complete_type reason) +{ +idxd_dma_complete_txd (desc, reason); +idxd_free_desc (desc->wq, desc); +} +#endif
drivers/dma/idxd/init.c +20 -10
@@ -102,6 +102,8 @@ static int idxd_setup_interrupts(struct idxd_device *idxd)spin_lock_init (&idxd->irq_entries[i].list_lock); } +idxd_msix_perm_setup (idxd); + irq_entry = &idxd->irq_entries[0 ]; rc =request_threaded_irq (irq_entry->vector,NULL , idxd_misc_thread,0 ,"idxd-misc" , irq_entry);
@@ -148,7 +150,6 @@ static int idxd_setup_interrupts(struct idxd_device *idxd) }idxd_unmask_error_interrupts (idxd); -idxd_msix_perm_setup (idxd);return 0 ; err_wq_irqs:
@@ -162,6 +163,7 @@ static int idxd_setup_interrupts(struct idxd_device *idxd) err_misc_irq:/* Disable error interrupt generation */ idxd_mask_error_interrupts (idxd); +idxd_msix_perm_clear (idxd); err_irq_entries:pci_free_irq_vectors (pdev);dev_err (dev,"No usable interrupts\n" );
@@ -757,32 +759,40 @@ static void idxd_shutdown(struct pci_dev *pdev)for (i =0 ; i < msixcnt; i++) { irq_entry = &idxd->irq_entries[i];synchronize_irq (irq_entry->vector); -free_irq (irq_entry->vector, irq_entry);if (i ==0 )continue ;idxd_flush_pending_llist (irq_entry);idxd_flush_work_list (irq_entry); } - -idxd_msix_perm_clear (idxd); -idxd_release_int_handles (idxd); -pci_free_irq_vectors (pdev); -pci_iounmap (pdev, idxd->reg_base); -pci_disable_device (pdev); -destroy_workqueue (idxd->wq); +flush_workqueue (idxd->wq); }static void idxd_remove (struct pci_dev *pdev) {struct idxd_device *idxd =pci_get_drvdata (pdev); +struct idxd_irq_entry *irq_entry; +int msixcnt =pci_msix_vec_count (pdev); +int i;dev_dbg (&pdev->dev,"%s called\n" , __func__);idxd_shutdown (pdev);if (device_pasid_enabled (idxd))idxd_disable_system_pasid (idxd);idxd_unregister_devices (idxd); -perfmon_pmu_remove (idxd); + +for (i =0 ; i < msixcnt; i++) { + irq_entry = &idxd->irq_entries[i]; +free_irq (irq_entry->vector, irq_entry); + } +idxd_msix_perm_clear (idxd); +idxd_release_int_handles (idxd); +pci_free_irq_vectors (pdev); +pci_iounmap (pdev, idxd->reg_base);iommu_dev_disable_feature (&pdev->dev,IOMMU_DEV_FEAT_SVA ); +pci_disable_device (pdev); +destroy_workqueue (idxd->wq); +perfmon_pmu_remove (idxd); +device_unregister (&idxd->conf_dev); }static struct pci_driver idxd_pci_driver = {
drivers/dma/idxd/irq.c +18 -9
@@ -245,12 +245,6 @@ static inline bool match_fault(struct idxd_desc *desc, u64 fault_addr)return false; } -static inline void complete_desc (struct idxd_desc *desc,enum idxd_complete_type reason) -{ -idxd_dma_complete_txd (desc, reason); -idxd_free_desc (desc->wq, desc); -} -static int irq_process_pending_llist (struct idxd_irq_entry *irq_entry,enum irq_work_type wtype,int *processed,u64 data)
@@ -272,8 +266,16 @@ static int irq_process_pending_llist(struct idxd_irq_entry *irq_entry, reason =IDXD_COMPLETE_DEV_FAIL ;llist_for_each_entry_safe (desc, t, head, llnode) { -if (desc->completion->status) { -if ((desc->completion->status &DSA_COMP_STATUS_MASK ) !=DSA_COMP_SUCCESS ) +u8 status = desc->completion->status &DSA_COMP_STATUS_MASK ; + +if (status) { +if (unlikely (status ==IDXD_COMP_DESC_ABORT )) { +complete_desc (desc,IDXD_COMPLETE_ABORT ); + (*processed)++; +continue ; + } + +if (unlikely (status !=DSA_COMP_SUCCESS ))match_fault (desc, data);complete_desc (desc, reason); (*processed)++;
@@ -329,7 +331,14 @@ static int irq_process_work_list(struct idxd_irq_entry *irq_entry,spin_unlock_irqrestore (&irq_entry->list_lock, flags);list_for_each_entry (desc, &flist, list) { -if ((desc->completion->status &DSA_COMP_STATUS_MASK ) !=DSA_COMP_SUCCESS ) +u8 status = desc->completion->status &DSA_COMP_STATUS_MASK ; + +if (unlikely (status ==IDXD_COMP_DESC_ABORT )) { +complete_desc (desc,IDXD_COMPLETE_ABORT ); +continue ; + } + +if (unlikely (status !=DSA_COMP_SUCCESS ))match_fault (desc, data);complete_desc (desc, reason); }
drivers/dma/idxd/submit.c +70 -22
125 lines not on this page · raw message
drivers/dma/idxd/sysfs.c +0 -2
@@ -1744,8 +1744,6 @@ void idxd_unregister_devices(struct idxd_device *idxd)device_unregister (&group->conf_dev); } - -device_unregister (&idxd->conf_dev); }int idxd_register_bus_type (void )
drivers/dma/imx-dma.c +2 -0
@@ -812,6 +812,8 @@ static struct dma_async_tx_descriptor *imxdma_prep_slave_sg( dma_length +=sg_dma_len (sg); } +imxdma_config_write (chan, &imxdmac->config, direction); +switch (imxdmac->word_size) {case DMA_SLAVE_BUSWIDTH_4_BYTES :if (sg_dma_len (sgl) &3 || sgl->dma_address &3 )
drivers/dma/stm32-dma.c +2 -2
@@ -1200,7 +1200,7 @@ static int stm32_dma_alloc_chan_resources(struct dma_chan *c) chan->config_init = false; - ret =pm_runtime_get_sync (dmadev->ddev.dev); + ret =pm_runtime_resume_and_get (dmadev->ddev.dev);if (ret <0 )return ret;
@@ -1470,7 +1470,7 @@ static int stm32_dma_suspend(struct device *dev)struct stm32_dma_device *dmadev =dev_get_drvdata (dev);int id, ret, scr; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 )return ret;
drivers/dma/stm32-dmamux.c +3 -3
@@ -137,7 +137,7 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec,/* Set dma request */ spin_lock_irqsave (&dmamux->lock, flags); - ret =pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 ) {spin_unlock_irqrestore (&dmamux->lock, flags); goto error;
@@ -336,7 +336,7 @@ static int stm32_dmamux_suspend(struct device *dev)struct stm32_dmamux_data *stm32_dmamux =platform_get_drvdata (pdev);int i, ret; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 )return ret;
@@ -361,7 +361,7 @@ static int stm32_dmamux_resume(struct device *dev)if (ret <0 )return ret; - ret =pm_runtime_get_sync (dev); + ret =pm_runtime_resume_and_get (dev);if (ret <0 )return ret;
drivers/dma/uniphier-xdmac.c +2 -2
@@ -209,8 +209,8 @@ static int uniphier_xdmac_chan_stop(struct uniphier_xdmac_chan *xc)writel (0 , xc->reg_ch_base +XDMAC_TSS );/* wait until transfer is stopped */ -return readl_poll_timeout (xc->reg_ch_base +XDMAC_STAT , val, - !(val &XDMAC_STAT_TENF ),100 ,1000 ); +return readl_poll_timeout_atomic (xc->reg_ch_base +XDMAC_STAT , val, + !(val &XDMAC_STAT_TENF ),100 ,1000 ); }/* xc->vc.lock must be held by caller */
drivers/fpga/dfl-fme-perf.c +2 -0
@@ -953,6 +953,8 @@ static int fme_perf_offline_cpu(unsigned int cpu, struct hlist_node *node)return 0 ; priv->cpu = target; +perf_pmu_migrate_context (&priv->pmu, cpu, target); +return 0 ; }
drivers/gpio/gpio-mpc8xxx.c +1 -1
@@ -405,7 +405,7 @@ static int mpc8xxx_probe(struct platform_device *pdev) ret =devm_request_irq (&pdev->dev, mpc8xxx_gc->irqn, mpc8xxx_gpio_irq_cascade, -IRQF_SHARED ,"gpio-cascade" , +IRQF_NO_THREAD |IRQF_SHARED ,"gpio-cascade" , mpc8xxx_gc);if (ret) { dev_err(&pdev->dev,
drivers/gpio/gpio-tqmx86.c +3 -3
@@ -238,8 +238,8 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)struct resource *res;int ret, irq; - irq =platform_get_irq (pdev,0 ); -if (irq <0 ) + irq =platform_get_irq_optional (pdev,0 ); +if (irq <0 && irq != -ENXIO )return irq; res =platform_get_resource (pdev,IORESOURCE_IO ,0 );
@@ -278,7 +278,7 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)pm_runtime_enable (&pdev->dev); -if (irq) { +if (irq >0 ) {struct irq_chip *irq_chip = &gpio->irq_chip;u8 irq_status;
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +1 -1
@@ -904,7 +904,7 @@ void amdgpu_acpi_fini(struct amdgpu_device *adev)*/ bool amdgpu_acpi_is_s0ix_supported (struct amdgpu_device *adev) { -#if defined(CONFIG_AMD_PMC ) || defined(CONFIG_AMD_PMC_MODULE ) +#if IS_ENABLED (CONFIG_AMD_PMC ) &&IS_ENABLED (CONFIG_PM_SLEEP )if (acpi_gbl_FADT.flags &ACPI_FADT_LOW_POWER_S0 ) {if (adev->flags &AMD_IS_APU )return pm_suspend_target_state ==PM_SUSPEND_TO_IDLE ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +3 -3
@@ -1493,6 +1493,7 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev) } hdr = (const struct dmcub_firmware_header_v1_0 *)adev->dm.dmub_fw->data; + adev->dm.dmcub_fw_version =le32_to_cpu (hdr->header.ucode_version);if (adev->firmware.load_type ==AMDGPU_FW_LOAD_PSP ) { adev->firmware.ucode[AMDGPU_UCODE_ID_DMCUB].ucode_id =
@@ -1506,7 +1507,6 @@ static int dm_dmub_sw_init(struct amdgpu_device *adev) adev->dm.dmcub_fw_version); } - adev->dm.dmcub_fw_version =le32_to_cpu (hdr->header.ucode_version); adev->dm.dmub_srv =kzalloc (sizeof (*adev->dm.dmub_srv),GFP_KERNEL ); dmub_srv = adev->dm.dmub_srv;
@@ -2367,9 +2367,9 @@ static void update_connector_ext_caps(struct amdgpu_dm_connector *aconnector) max_cll = conn_base->hdr_sink_metadata.hdmi_type1.max_cll; min_cll = conn_base->hdr_sink_metadata.hdmi_type1.min_cll; -if (caps->ext_caps->bits.oled ==1 || +if (caps->ext_caps->bits.oled ==1 /*|| caps->ext_caps->bits.sdr_aux_backlight_control == 1 || - caps->ext_caps->bits.hdr_aux_backlight_control ==1 ) +caps->ext_caps->bits.hdr_aux_backlight_control == 1*/ ) caps->aux_support = true;if (amdgpu_backlight ==0 )
drivers/gpu/drm/i915/i915_globals.c +2 -2
@@ -139,7 +139,7 @@ void i915_globals_unpark(void)atomic_inc (&active); } -static void __exit __i915_globals_flush(void) +static void __i915_globals_flush (void ) {atomic_inc (&active);/* skip shrinking */
@@ -149,7 +149,7 @@ static void __exit __i915_globals_flush(void)atomic_dec (&active); } -void __exit i915_globals_exit(void) +void i915_globals_exit (void ) {GEM_BUG_ON (atomic_read (&active));
drivers/gpu/drm/i915/i915_pci.c +1 -0
@@ -1168,6 +1168,7 @@ static int __init i915_init(void) err =pci_register_driver (&i915_pci_driver);if (err) {i915_pmu_exit (); +i915_globals_exit ();return err; }
drivers/gpu/drm/i915/i915_reg.h +1 -1
@@ -416,7 +416,7 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)#define GEN11_VECS_SFC_USAGE (engine) _MMIO((engine)->mmio_base + 0x2014)#define GEN11_VECS_SFC_USAGE_BIT (1 << 0) -#define GEN12_SFC_DONE (n) _MMIO(0x1cc00 + (n) * 0x100) +#define GEN12_SFC_DONE (n) _MMIO(0x1cc000 + (n) * 0x1000)#define GEN12_SFC_DONE_MAX 4#define RING_PP_DIR_BASE (base) _MMIO((base) + 0x228)
drivers/gpu/drm/kmb/kmb_drv.c +14 -0
@@ -203,6 +203,7 @@ static irqreturn_t handle_lcd_irq(struct drm_device *dev)unsigned long status, val, val1;int plane_id, dma0_state, dma1_state;struct kmb_drm_private *kmb =to_kmb (dev); +u32 ctrl =0 ; status =kmb_read_lcd (kmb,LCD_INT_STATUS );
@@ -227,6 +228,19 @@ static irqreturn_t handle_lcd_irq(struct drm_device *dev)kmb_clr_bitmask_lcd (kmb,LCD_CONTROL , kmb->plane_status[plane_id].ctrl); + ctrl =kmb_read_lcd (kmb,LCD_CONTROL ); +if (!(ctrl & (LCD_CTRL_VL1_ENABLE | +LCD_CTRL_VL2_ENABLE | +LCD_CTRL_GL1_ENABLE | +LCD_CTRL_GL2_ENABLE ))) { +/* If no LCD layers are using DMA, +* then disable DMA pipelined AXI read +* transactions. +*/ +kmb_clr_bitmask_lcd (kmb,LCD_CONTROL , +LCD_CTRL_PIPELINE_DMA ); + } + kmb->plane_status[plane_id].disable = false; } }
drivers/gpu/drm/kmb/kmb_plane.c +13 -2
@@ -427,8 +427,14 @@ static void kmb_plane_atomic_update(struct drm_plane *plane,kmb_set_bitmask_lcd (kmb,LCD_CONTROL , ctrl); -/* FIXME no doc on how to set output format,these values are -* taken from the Myriadx tests +/* Enable pipeline AXI read transactions for the DMA +* after setting graphics layers. This must be done +* in a separate write cycle. +*/ +kmb_set_bitmask_lcd (kmb,LCD_CONTROL ,LCD_CTRL_PIPELINE_DMA ); + +/* FIXME no doc on how to set output format, these values are taken +* from the Myriadx tests */ out_format |=LCD_OUTF_FORMAT_RGB888 ;
@@ -526,6 +532,11 @@ struct kmb_plane *kmb_plane_init(struct drm_device *drm) plane->id = i; } +/* Disable pipeline AXI read transactions for the DMA +* prior to setting graphics layers +*/ +kmb_clr_bitmask_lcd (kmb,LCD_CONTROL ,LCD_CTRL_PIPELINE_DMA ); +return primary; cleanup:drmm_kfree (drm, plane);
drivers/hid/hid-ft260.c +7 -16
@@ -742,7 +742,7 @@ static int ft260_is_interface_enabled(struct hid_device *hdev)int ret; ret =ft260_get_system_config (hdev, &cfg); -if (ret) +if (ret <0 )return ret;ft260_dbg ("interface: 0x%02x\n" , interface);
@@ -754,23 +754,16 @@ static int ft260_is_interface_enabled(struct hid_device *hdev)switch (cfg.chip_mode) {case FT260_MODE_ALL :case FT260_MODE_BOTH : -if (interface ==1 ) { +if (interface ==1 )hid_info (hdev,"uart interface is not supported\n" ); -return 0 ; - } - ret =1 ; +else + ret =1 ;break ;case FT260_MODE_UART : -if (interface ==0 ) { -hid_info (hdev,"uart is unsupported on interface 0\n" ); - ret =0 ; - } +hid_info (hdev,"uart interface is not supported\n" );break ;case FT260_MODE_I2C : -if (interface ==1 ) { -hid_info (hdev,"i2c is unsupported on interface 1\n" ); - ret =0 ; - } + ret =1 ;break ; }return ret;
@@ -1004,11 +997,9 @@ static int ft260_probe(struct hid_device *hdev, const struct hid_device_id *id)static void ft260_remove (struct hid_device *hdev) { -int ret;struct ft260_device *dev =hid_get_drvdata (hdev); - ret =ft260_is_interface_enabled (hdev); -if (ret <=0 ) +if (!dev)return ;sysfs_remove_group (&hdev->dev.kobj, &ft260_attr_group);
drivers/infiniband/hw/hns/hns_roce_cmd.c +3 -4
@@ -213,8 +213,10 @@ int hns_roce_cmd_use_events(struct hns_roce_dev *hr_dev) hr_cmd->context =kcalloc (hr_cmd->max_cmds,sizeof (*hr_cmd->context),GFP_KERNEL ); -if (!hr_cmd->context) +if (!hr_cmd->context) { + hr_dev->cmd_mod =0 ;return -ENOMEM ; + }for (i =0 ; i < hr_cmd->max_cmds; ++i) { hr_cmd->context[i].token = i;
@@ -228,7 +230,6 @@ int hns_roce_cmd_use_events(struct hns_roce_dev *hr_dev)spin_lock_init (&hr_cmd->context_lock); hr_cmd->use_events =1 ; -down (&hr_cmd->poll_sem);return 0 ; }
@@ -239,8 +240,6 @@ void hns_roce_cmd_use_polling(struct hns_roce_dev *hr_dev)kfree (hr_cmd->context); hr_cmd->use_events =0 ; - -up (&hr_cmd->poll_sem); } struct hns_roce_cmd_mailbox *
drivers/infiniband/hw/hns/hns_roce_main.c +1 -3
@@ -897,11 +897,9 @@ int hns_roce_init(struct hns_roce_dev *hr_dev)if (hr_dev->cmd_mod) { ret =hns_roce_cmd_use_events (hr_dev); -if (ret) { +if (ret)dev_warn (dev,"Cmd event mode failed, set back to poll!\n" ); -hns_roce_cmd_use_polling (hr_dev); - } } ret =hns_roce_init_hem (hr_dev);
drivers/infiniband/hw/mlx5/mr.c +2 -2
@@ -530,8 +530,8 @@ static void __cache_work_func(struct mlx5_cache_ent *ent)*/ spin_unlock_irq (&ent->lock); need_delay =need_resched () ||someone_adding (cache) || -time_after (jiffies, -READ_ONCE (cache->last_add) +300 *HZ ); + !time_after (jiffies, +READ_ONCE (cache->last_add) +300 *HZ );spin_lock_irq (&ent->lock);if (ent->disabled) goto out;
drivers/interconnect/core.c +8 -1
@@ -403,7 +403,7 @@ struct icc_path *devm_of_icc_get(struct device *dev, const char *name) {struct icc_path **ptr, *path; - ptr =devres_alloc (devm_icc_release,sizeof (**ptr),GFP_KERNEL ); + ptr =devres_alloc (devm_icc_release,sizeof (*ptr),GFP_KERNEL );if (!ptr)return ERR_PTR (-ENOMEM );
@@ -973,9 +973,14 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider) } node->avg_bw = node->init_avg; node->peak_bw = node->init_peak; + +if (provider->pre_aggregate) + provider->pre_aggregate (node); +if (provider->aggregate) provider->aggregate (node,0 , node->init_avg, node->init_peak, &node->avg_bw, &node->peak_bw); + provider->set (node, node); node->avg_bw =0 ; node->peak_bw =0 ;
@@ -1106,6 +1111,8 @@ void icc_sync_state(struct device *dev)dev_dbg (p->dev,"interconnect provider is in synced state\n" );list_for_each_entry (n, &p->nodes, node_list) {if (n->init_avg || n->init_peak) { + n->init_avg =0 ; + n->init_peak =0 ;aggregate_requests (n); p->set (n, n); }
drivers/interconnect/qcom/icc-rpmh.c +5 -7
@@ -57,6 +57,11 @@ int qcom_icc_aggregate(struct icc_node *node, u32 tag, u32 avg_bw, qn->sum_avg[i] += avg_bw; qn->max_peak[i] =max_t (u32, qn->max_peak[i], peak_bw); } + +if (node->init_avg || node->init_peak) { + qn->sum_avg[i] =max_t (u64, qn->sum_avg[i], node->init_avg); + qn->max_peak[i] =max_t (u64, qn->max_peak[i], node->init_peak); + } } *agg_avg += avg_bw;
@@ -79,7 +84,6 @@ EXPORT_SYMBOL_GPL(qcom_icc_aggregate);int qcom_icc_set (struct icc_node *src,struct icc_node *dst) {struct qcom_icc_provider *qp; -struct qcom_icc_node *qn;struct icc_node *node;if (!src)
@@ -88,12 +92,6 @@ int qcom_icc_set(struct icc_node *src, struct icc_node *dst) node = src; qp =to_qcom_provider (node->provider); - qn = node->data; - - qn->sum_avg[QCOM_ICC_BUCKET_AMC ] =max_t (u64, qn->sum_avg[QCOM_ICC_BUCKET_AMC ], - node->avg_bw); - qn->max_peak[QCOM_ICC_BUCKET_AMC ] =max_t (u64, qn->max_peak[QCOM_ICC_BUCKET_AMC ], - node->peak_bw);qcom_icc_bcm_voter_commit (qp->voter);
drivers/md/raid1.c +0 -2
@@ -472,8 +472,6 @@ static void raid1_end_write_request(struct bio *bio)/* * When the device is faulty, it is not necessary to * handle write error. -* For failfast, this is the only remaining device, -* We need to retry the write without FailFast. */ if (!test_bit (Faulty, &rdev->flags))set_bit (R1BIO_WriteError, &r1_bio->state);
drivers/md/raid10.c +2 -2
@@ -469,12 +469,12 @@ static void raid10_end_write_request(struct bio *bio)/* * When the device is faulty, it is not necessary to * handle write error. -* For failfast, this is the only remaining device, -* We need to retry the write without FailFast. */ if (!test_bit (Faulty, &rdev->flags))set_bit (R10BIO_WriteError, &r10_bio->state);else { +/* Fail the request */ +set_bit (R10BIO_Degraded, &r10_bio->state); r10_bio->devs[slot].bio =NULL ; to_put = bio; dec_rdev =1 ;
drivers/media/common/videobuf2/videobuf2-core.c +12 -1
@@ -1573,6 +1573,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb, struct media_request *req) {struct vb2_buffer *vb; +enum vb2_buffer_state orig_state;int ret;if (q->error) {
@@ -1673,6 +1674,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,* Add to the queued buffers list, a buffer will stay on it until * dequeued in dqbuf. */ + orig_state = vb->state;list_add_tail (&vb->queued_entry, &q->queued_list); q->queued_count++; q->waiting_for_buffers = false;
@@ -1703,8 +1705,17 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,if (q->streaming && !q->start_streaming_called && q->queued_count >= q->min_buffers_needed) { ret =vb2_start_streaming (q); -if (ret) +if (ret) { +/* +* Since vb2_core_qbuf will return with an error, +* we should return it to state DEQUEUED since +* the error indicates that the buffer wasn't queued. +*/ +list_del (&vb->queued_entry); + q->queued_count--; + vb->state = orig_state;return ret; + } }dprintk (q,2 ,"qbuf of buffer %d succeeded\n" , vb->index);
drivers/media/usb/dvb-usb-v2/rtl28xxu.c +10 -1
@@ -37,7 +37,16 @@ static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req) }else {/* read */ requesttype = (USB_TYPE_VENDOR |USB_DIR_IN ); - pipe =usb_rcvctrlpipe (d->udev,0 ); + +/* +* Zero-length transfers must use usb_sndctrlpipe() and +* rtl28xxu_identify_state() uses a zero-length i2c read +* command to determine the chip type. +*/ +if (req->size) + pipe =usb_rcvctrlpipe (d->udev,0 ); +else + pipe =usb_sndctrlpipe (d->udev,0 ); } ret = usb_control_msg(d->udev, pipe, 0, requesttype, req->value,
drivers/net/dsa/qca/ar9331.c +11 -3
@@ -837,16 +837,24 @@ static int ar9331_mdio_write(void *ctx, u32 reg, u32 val)return 0 ; } - ret =__ar9331_mdio_write (sbus,AR9331_SW_MDIO_PHY_MODE_REG , reg, val); +/* In case of this switch we work with 32bit registers on top of 16bit +* bus. Some registers (for example access to forwarding database) have +* trigger bit on the first 16bit half of request, the result and +* configuration of request in the second half. +* To make it work properly, we should do the second part of transfer +* before the first one is done. +*/ + ret =__ar9331_mdio_write (sbus,AR9331_SW_MDIO_PHY_MODE_REG , reg +2 , + val >>16 );if (ret <0 ) goto error; - ret =__ar9331_mdio_write (sbus,AR9331_SW_MDIO_PHY_MODE_REG , reg +2 , - val >>16 ); + ret =__ar9331_mdio_write (sbus,AR9331_SW_MDIO_PHY_MODE_REG , reg, val);if (ret <0 ) goto error;return 0 ; + error:dev_err_ratelimited (&sbus->dev,"Bus error. Failed to write register.\n" );return ret;
drivers/net/dsa/sja1105/sja1105_main.c +70 -24
162 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +2 -1
@@ -2669,7 +2669,8 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode) }/* Allocated memory for FW statistics */ -if (bnx2x_alloc_fw_stats_mem (bp)) + rc =bnx2x_alloc_fw_stats_mem (bp); +if (rc)LOAD_ERROR_EXIT (bp, load_error0);/* request pf to initialize status blocks */
drivers/net/ethernet/freescale/fec_main.c +1 -1
@@ -3843,13 +3843,13 @@ fec_drv_remove(struct platform_device *pdev)if (of_phy_is_fixed_link (np))of_phy_deregister_fixed_link (np);of_node_put (fep->phy_node); -free_netdev (ndev);clk_disable_unprepare (fep->clk_ahb);clk_disable_unprepare (fep->clk_ipg);pm_runtime_put_noidle (&pdev->dev);pm_runtime_disable (&pdev->dev); +free_netdev (ndev);return 0 ; }
drivers/net/ethernet/natsemi/natsemi.c +2 -6
@@ -819,7 +819,7 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)printk (version);#endif - i =pci_enable_device (pdev); + i =pcim_enable_device (pdev);if (i)return i;/* natsemi has a non-standard PM control register
@@ -852,7 +852,7 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent) ioaddr =ioremap (iostart, iosize);if (!ioaddr) { i = -ENOMEM ; - goto err_ioremap; + goto err_pci_request_regions; }/* Work around the dropped serial bit. */
@@ -974,9 +974,6 @@ static int natsemi_probe1(struct pci_dev *pdev, const struct pci_device_id *ent) err_register_netdev:iounmap (ioaddr); - err_ioremap: -pci_release_regions (pdev); - err_pci_request_regions:free_netdev (dev);return i;
@@ -3241,7 +3238,6 @@ static void natsemi_remove1(struct pci_dev *pdev)NATSEMI_REMOVE_FILE (pdev, dspcfg_workaround);unregister_netdev (dev); -pci_release_regions (pdev);iounmap (ioaddr);free_netdev (dev); }
drivers/net/ethernet/neterion/vxge/vxge-main.c +3 -3
@@ -3527,13 +3527,13 @@ static void vxge_device_unregister(struct __vxge_hw_device *hldev)kfree (vdev->vpaths); -/* we are safe to free it now */ -free_netdev (dev); -vxge_debug_init (vdev->level_trace,"%s: ethernet device unregistered" , buf);vxge_debug_entryexit (vdev->level_trace,"%s: %s:%d Exiting..." , buf, __func__, __LINE__); + +/* we are safe to free it now */ +free_netdev (dev); }/*
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +2 -0
@@ -286,6 +286,8 @@ nfp_net_get_link_ksettings(struct net_device *netdev,/* Init to unknowns */ ethtool_link_ksettings_add_link_mode (cmd, supported,FIBRE ); +ethtool_link_ksettings_add_link_mode (cmd, supported, Pause); +ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause); cmd->base.port =PORT_OTHER ; cmd->base.speed =SPEED_UNKNOWN ; cmd->base.duplex =DUPLEX_UNKNOWN ;
drivers/net/ethernet/qlogic/qede/qede_filter.c +2 -2
@@ -831,7 +831,7 @@ int qede_configure_vlan_filters(struct qede_dev *edev)int qede_vlan_rx_kill_vid (struct net_device *dev,__be16 proto,u16 vid) {struct qede_dev *edev =netdev_priv (dev); -struct qede_vlan *vlan =NULL ; +struct qede_vlan *vlan;int rc =0 ;DP_VERBOSE (edev,NETIF_MSG_IFDOWN ,"Removing vlan 0x%04x\n" , vid);
@@ -842,7 +842,7 @@ int qede_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid)if (vlan->vid == vid)break ; -if (!vlan || (vlan->vid != vid)) { +if (list_entry_is_head (vlan, &edev->vlan_list, list)) {DP_VERBOSE (edev, (NETIF_MSG_IFUP |NETIF_MSG_IFDOWN ),"Vlan isn't configured\n" ); goto out;
drivers/net/ethernet/qlogic/qla3xxx.c +3 -3
@@ -154,7 +154,7 @@ static int ql_wait_for_drvr_lock(struct ql3_adapter *qdev) "driver lock acquired\n");return 1 ; } -ssleep (1 ); +mdelay (1000 ); }while (++i <10 );netdev_err (qdev->ndev,"Timed out waiting for driver lock...\n" );
@@ -3274,7 +3274,7 @@ static int ql_adapter_reset(struct ql3_adapter *qdev)if ((value &ISP_CONTROL_SR ) ==0 )break ; -ssleep (1 ); +mdelay (1000 ); }while ((--max_wait_time));/*
@@ -3310,7 +3310,7 @@ static int ql_adapter_reset(struct ql3_adapter *qdev) ispControlStatus);if ((value &ISP_CONTROL_FSR ) ==0 )break ; -ssleep (1 ); +mdelay (1000 ); }while ((--max_wait_time)); }if (max_wait_time ==0 )
drivers/net/ethernet/ti/am65-cpsw-nuss.c +5 -1
@@ -2060,8 +2060,12 @@ static void am65_cpsw_port_offload_fwd_mark_update(struct am65_cpsw_common *commfor (i =1 ; i <= common->port_num; i++) {struct am65_cpsw_port *port =am65_common_get_port (common, i); -struct am65_cpsw_ndev_priv *priv =am65_ndev_to_priv (port->ndev); +struct am65_cpsw_ndev_priv *priv; +if (!port->ndev) +continue ; + + priv =am65_ndev_to_priv (port->ndev); priv->offload_fwd_mark = set_val; } }
drivers/net/phy/micrel.c +5 -5
@@ -382,11 +382,11 @@ static int ksz8041_config_aneg(struct phy_device *phydev) }static int ksz8051_ksz8795_match_phy_device (struct phy_device *phydev, -const u32 ksz_phy_id) +const bool ksz_8051) {int ret; -if ((phydev->phy_id &MICREL_PHY_ID_MASK ) != ksz_phy_id) +if ((phydev->phy_id &MICREL_PHY_ID_MASK ) !=PHY_ID_KSZ8051 )return 0 ; ret =phy_read (phydev,MII_BMSR );
@@ -399,7 +399,7 @@ static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,* the switch does not. */ ret &=BMSR_ERCAP ; -if (ksz_phy_id ==PHY_ID_KSZ8051 ) +if (ksz_8051)return ret;else return !ret;
@@ -407,7 +407,7 @@ static int ksz8051_ksz8795_match_phy_device(struct phy_device *phydev,static int ksz8051_match_phy_device (struct phy_device *phydev) { -return ksz8051_ksz8795_match_phy_device (phydev,PHY_ID_KSZ8051 ); +return ksz8051_ksz8795_match_phy_device (phydev, true); }static int ksz8081_config_init (struct phy_device *phydev)
@@ -435,7 +435,7 @@ static int ksz8061_config_init(struct phy_device *phydev)static int ksz8795_match_phy_device (struct phy_device *phydev) { -return ksz8051_ksz8795_match_phy_device (phydev,PHY_ID_KSZ87XX ); +return ksz8051_ksz8795_match_phy_device (phydev, false); } static int ksz9021_load_values_from_of(struct phy_device *phydev,
drivers/net/usb/pegasus.c +11 -3
@@ -735,12 +735,16 @@ static inline void disable_net_traffic(pegasus_t *pegasus)set_registers (pegasus, EthCtrl0,sizeof (tmp), &tmp); } -static inline void get_interrupt_interval (pegasus_t *pegasus) +static inline int get_interrupt_interval (pegasus_t *pegasus) {u16 data;u8 interval; +int ret; + + ret =read_eprom_word (pegasus,4 , &data); +if (ret <0 ) +return ret; -read_eprom_word (pegasus,4 , &data); interval = data >>8 ;if (pegasus->usb->speed !=USB_SPEED_HIGH ) {if (interval <0x80 ) {
@@ -755,6 +759,8 @@ static inline void get_interrupt_interval(pegasus_t *pegasus) } } pegasus->intr_interval = interval; + +return 0 ; }static void set_carrier (struct net_device *net)
@@ -1149,7 +1155,9 @@ static int pegasus_probe(struct usb_interface *intf, | NETIF_MSG_PROBE | NETIF_MSG_LINK); pegasus->features = usb_dev_id[dev_index].private; -get_interrupt_interval (pegasus); + res =get_interrupt_interval (pegasus); +if (res) + goto out2;if (reset_mac (pegasus)) {dev_err (&intf->dev,"can't reset MAC\n" ); res = -EIO ;
drivers/net/wireless/virt_wifi.c +32 -20
87 lines not on this page · raw message
drivers/pcmcia/i82092.c +1 -0
@@ -112,6 +112,7 @@ static int i82092aa_pci_probe(struct pci_dev *dev,for (i =0 ; i < socket_count; i++) { sockets[i].card_state =1 ;/* 1 = present but empty */ sockets[i].io_base =pci_resource_start (dev,0 ); + sockets[i].dev = dev; sockets[i].socket.features |=SS_CAP_PCCARD ; sockets[i].socket.map_size =0x1000 ; sockets[i].socket.irq_mask =0 ;
drivers/platform/x86/gigabyte-wmi.c +1 -0
@@ -141,6 +141,7 @@ static u8 gigabyte_wmi_detect_sensor_usability(struct wmi_device *wdev)static const struct dmi_system_id gigabyte_wmi_known_working_platforms[] = {DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME ("B550 AORUS ELITE" ), +DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME ("B550 AORUS ELITE V2" ),DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME ("B550 GAMING X V2" ),DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME ("B550M AORUS PRO-P" ),DMI_EXACT_MATCH_GIGABYTE_BOARD_NAME ("B550M DS3H" ),
drivers/s390/block/dasd_eckd.c +11 -2
@@ -1004,15 +1004,23 @@ static unsigned char dasd_eckd_path_access(void *conf_data, int conf_len)static void dasd_eckd_store_conf_data (struct dasd_device *device,struct dasd_conf_data *conf_data,int chp) { +struct dasd_eckd_private *private = device->private;struct channel_path_desc_fmt0 *chp_desc;struct subchannel_id sch_id; +void *cdp; -ccw_device_get_schid (device->cdev, &sch_id);/* * path handling and read_conf allocate data * free it before replacing the pointer +* also replace the old private->conf_data pointer +* with the new one if this points to the same data */ -kfree (device->path[chp].conf_data); + cdp = device->path[chp].conf_data; +if (private->conf_data == cdp) { + private->conf_data = (void *)conf_data; +dasd_eckd_identify_conf_parts (private); + } +ccw_device_get_schid (device->cdev, &sch_id); device->path[chp].conf_data = conf_data; device->path[chp].cssid = sch_id.cssid; device->path[chp].ssid = sch_id.ssid;
@@ -1020,6 +1028,7 @@ static void dasd_eckd_store_conf_data(struct dasd_device *device,if (chp_desc) device->path[chp].chpid = chp_desc->chpid;kfree (chp_desc); +kfree (cdp); }static void dasd_eckd_clear_conf_data (struct dasd_device *device)
drivers/scsi/ibmvscsi/ibmvfc.c +17 -2
@@ -804,6 +804,13 @@ static int ibmvfc_init_event_pool(struct ibmvfc_host *vhost,for (i =0 ; i < size; ++i) {struct ibmvfc_event *evt = &pool->events[i]; +/* +* evt->active states +* 1 = in flight +* 0 = being completed +* -1 = free/freed +*/ +atomic_set (&evt->active,-1 );atomic_set (&evt->free,1 ); evt->crq.valid =0x80 ; evt->crq.ioba =cpu_to_be64 (pool->iu_token + (sizeof (*evt->xfer_iu) * i));
@@ -1014,6 +1021,7 @@ static void ibmvfc_free_event(struct ibmvfc_event *evt)BUG_ON (!ibmvfc_valid_event (pool, evt));BUG_ON (atomic_inc_return (&evt->free) !=1 ); +BUG_ON (atomic_dec_and_test (&evt->active));spin_lock_irqsave (&evt->queue->l_lock, flags);list_add_tail (&evt->queue_list, &evt->queue->free);
@@ -1069,6 +1077,12 @@ static void ibmvfc_complete_purge(struct list_head *purge_list)**/ static void ibmvfc_fail_request (struct ibmvfc_event *evt,int error_code) { +/* +* Anything we are failing should still be active. Otherwise, it +* implies we already got a response for the command and are doing +* something bad like double completing it. +*/ +BUG_ON (!atomic_dec_and_test (&evt->active));if (evt->cmnd) { evt->cmnd->result = (error_code <<16 ); evt->done = ibmvfc_scsi_eh_done;
@@ -1720,6 +1734,7 @@ static int ibmvfc_send_event(struct ibmvfc_event *evt, evt->done (evt); }else { +atomic_set (&evt->active,1 );spin_unlock_irqrestore (&evt->queue->l_lock, flags);ibmvfc_trc_start (evt); }
@@ -3248,7 +3263,7 @@ static void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhost,return ; } -if (unlikely (atomic_read (&evt->free))) { +if (unlikely (atomic_dec_if_positive (&evt->active))) {dev_err (vhost->dev,"Received duplicate correlation_token 0x%08llx!\n" , crq->ioba);return ;
@@ -3775,7 +3790,7 @@ static void ibmvfc_handle_scrq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhostreturn ; } -if (unlikely (atomic_read (&evt->free))) { +if (unlikely (atomic_dec_if_positive (&evt->active))) {dev_err (vhost->dev,"Received duplicate correlation_token 0x%08llx!\n" , crq->ioba);return ;
drivers/scsi/ibmvscsi/ibmvfc.h +1 -0
@@ -744,6 +744,7 @@ struct ibmvfc_event {struct ibmvfc_target *tgt;struct scsi_cmnd *cmnd;atomic_t free; +atomic_t active;union ibmvfc_iu *xfer_iu;void (*done)(struct ibmvfc_event *evt);void (*_done)(struct ibmvfc_event *evt);
drivers/scsi/sr.c +1 -1
@@ -221,7 +221,7 @@ static unsigned int sr_get_events(struct scsi_device *sdev)else if (med->media_event_code ==2 )return DISK_EVENT_MEDIA_CHANGE ;else if (med->media_event_code ==3 ) -return DISK_EVENT_EJECT_REQUEST ; +return DISK_EVENT_MEDIA_CHANGE ;return 0 ; }
drivers/soc/imx/soc-imx8m.c +12 -72
153 lines not on this page · raw message
drivers/soc/ixp4xx/ixp4xx-npe.c +5 -6
@@ -690,8 +690,8 @@ static int ixp4xx_npe_probe(struct platform_device *pdev)if (!(ixp4xx_read_feature_bits () & (IXP4XX_FEATURE_RESET_NPEA << i))) { -dev_info (dev,"NPE%d at 0x%08x-0x%08x not available\n" , - i, res->start, res->end); +dev_info (dev,"NPE%d at %pR not available\n" , + i, res);continue ;/* NPE already disabled or not present */ } npe->regs =devm_ioremap_resource (dev, res);
@@ -699,13 +699,12 @@ static int ixp4xx_npe_probe(struct platform_device *pdev)return PTR_ERR (npe->regs);if (npe_reset (npe)) { -dev_info (dev,"NPE%d at 0x%08x-0x%08x does not reset\n" , - i, res->start, res->end); +dev_info (dev,"NPE%d at %pR does not reset\n" , + i, res);continue ; } npe->valid =1 ; -dev_info (dev,"NPE%d at 0x%08x-0x%08x registered\n" , - i, res->start, res->end); +dev_info (dev,"NPE%d at %pR registered\n" , i, res); found++; }
drivers/soc/ixp4xx/ixp4xx-qmgr.c +5 -4
@@ -145,12 +145,12 @@ static irqreturn_t qmgr_irq1_a0(int irq, void *pdev)/* ACK - it may clear any bits so don't rely on it */ __raw_writel (0xFFFFFFFF , &qmgr_regs->irqstat[0 ]); - en_bitmap = qmgr_regs->irqen[0 ]; + en_bitmap =__raw_readl (&qmgr_regs->irqen[0 ]);while (en_bitmap) { i =__fls (en_bitmap);/* number of the last "low" queue */ en_bitmap &= ~BIT (i); - src = qmgr_regs->irqsrc[i >>3 ]; - stat = qmgr_regs->stat1[i >>3 ]; + src =__raw_readl (&qmgr_regs->irqsrc[i >>3 ]); + stat =__raw_readl (&qmgr_regs->stat1[i >>3 ]);if (src &4 )/* the IRQ condition is inverted */ stat = ~stat;if (stat &BIT (src &3 )) {
@@ -170,7 +170,8 @@ static irqreturn_t qmgr_irq2_a0(int irq, void *pdev)/* ACK - it may clear any bits so don't rely on it */ __raw_writel (0xFFFFFFFF , &qmgr_regs->irqstat[1 ]); - req_bitmap = qmgr_regs->irqen[1 ] & qmgr_regs->statne_h; + req_bitmap =__raw_readl (&qmgr_regs->irqen[1 ]) & +__raw_readl (&qmgr_regs->statne_h);while (req_bitmap) { i =__fls (req_bitmap);/* number of the last "high" queue */ req_bitmap &= ~BIT (i);
drivers/spi/spi-imx.c +33 -19
77 lines not on this page · raw message
drivers/spi/spi-meson-spicc.c +2 -0
@@ -785,6 +785,8 @@ static int meson_spicc_remove(struct platform_device *pdev)clk_disable_unprepare (spicc->core);clk_disable_unprepare (spicc->pclk); +spi_master_put (spicc->master); +return 0 ; }
drivers/staging/rtl8712/hal_init.c +20 -10
@@ -29,21 +29,31 @@#define FWBUFF_ALIGN_SZ 512#define MAX_DUMP_FWSZ (48 * 1024) +static void rtl871x_load_fw_fail (struct _adapter *adapter) +{ +struct usb_device *udev = adapter->dvobjpriv.pusbdev; +struct device *dev = &udev->dev; +struct device *parent = dev->parent; + +complete (&adapter->rtl8712_fw_ready); + +dev_err (&udev->dev,"r8712u: Firmware request failed\n" ); + +if (parent) +device_lock (parent); + +device_release_driver (dev); + +if (parent) +device_unlock (parent); +} +static void rtl871x_load_fw_cb (const struct firmware *firmware,void *context) {struct _adapter *adapter = context;if (!firmware) { -struct usb_device *udev = adapter->dvobjpriv.pusbdev; -struct usb_interface *usb_intf = adapter->pusb_intf; - -dev_err (&udev->dev,"r8712u: Firmware request failed\n" ); -usb_put_dev (udev); -usb_set_intfdata (usb_intf,NULL ); -r8712_free_drv_sw (adapter); - adapter->dvobj_deinit (adapter); -complete (&adapter->rtl8712_fw_ready); -free_netdev (adapter->pnetdev); +rtl871x_load_fw_fail (adapter);return ; } adapter->fw = firmware;
drivers/staging/rtl8712/rtl8712_led.c +8 -0
@@ -1820,3 +1820,11 @@ void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction)break ; } } + +void r8712_flush_led_works (struct _adapter *padapter) +{ +struct led_priv *pledpriv = &padapter->ledpriv; + +flush_work (&pledpriv->SwLed0.BlinkWorkItem); +flush_work (&pledpriv->SwLed1.BlinkWorkItem); +}
drivers/staging/rtl8712/rtl871x_led.h +1 -0
@@ -112,6 +112,7 @@ struct led_priv {void r8712_InitSwLeds (struct _adapter *padapter);void r8712_DeInitSwLeds (struct _adapter *padapter);void LedControl871x (struct _adapter *padapter,enum LED_CTL_MODE LedAction); +void r8712_flush_led_works (struct _adapter *padapter);#endif
drivers/staging/rtl8712/rtl871x_pwrctrl.c +8 -0
@@ -224,3 +224,11 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter) }mutex_unlock (&pwrctrl->mutex_lock); } + +void r8712_flush_rwctrl_works (struct _adapter *padapter) +{ +struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv; + +flush_work (&pwrctrl->SetPSModeWorkItem); +flush_work (&pwrctrl->rpwm_workitem); +}
drivers/staging/rtl8712/rtl871x_pwrctrl.h +1 -0
@@ -108,5 +108,6 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter,void r8712_set_ps_mode (struct _adapter *padapter,uint ps_mode,uint smart_ps);void r8712_set_rpwm (struct _adapter *padapter,u8 val8); +void r8712_flush_rwctrl_works (struct _adapter *padapter);#endif /* __RTL871X_PWRCTRL_H_ */
drivers/staging/rtl8712/usb_intf.c +23 -28
58 lines not on this page · raw message
drivers/staging/rtl8723bs/hal/sdio_ops.c +2 -0
@@ -921,6 +921,8 @@ void sd_int_dpc(struct adapter *adapter) }else {rtw_c2h_wk_cmd (adapter, (u8 *)c2h_evt); } + }else { +kfree (c2h_evt); } }else {/* Error handling for malloc fail */
drivers/tee/optee/call.c +34 -4
@@ -184,7 +184,7 @@ static struct tee_shm *get_msg_arg(struct tee_context *ctx, size_t num_params,struct optee_msg_arg *ma; shm =tee_shm_alloc (ctx,OPTEE_MSG_GET_ARG_SIZE (num_params), -TEE_SHM_MAPPED ); +TEE_SHM_MAPPED |TEE_SHM_PRIV );if (IS_ERR (shm))return shm;
@@ -416,11 +416,13 @@ void optee_enable_shm_cache(struct optee *optee) }/** -* optee_disable_shm_cache() - Disables caching of some shared memory allocation -* in OP-TEE +* __optee_disable_shm_cache() - Disables caching of some shared memory +* allocation in OP-TEE * @optee: main service struct +* @is_mapped: true if the cached shared memory addresses were mapped by this +* kernel, are safe to dereference, and should be freed */ -void optee_disable_shm_cache (struct optee *optee) +static void __optee_disable_shm_cache (struct optee *optee,bool is_mapped) {struct optee_call_waiter w;
@@ -439,6 +441,13 @@ void optee_disable_shm_cache(struct optee *optee)if (res.result.status ==OPTEE_SMC_RETURN_OK ) {struct tee_shm *shm; +/* +* Shared memory references that were not mapped by +* this kernel must be ignored to prevent a crash. +*/ +if (!is_mapped) +continue ; + shm =reg_pair_to_ptr (res.result.shm_upper32, res.result.shm_lower32);tee_shm_free (shm);
@@ -449,6 +458,27 @@ void optee_disable_shm_cache(struct optee *optee)optee_cq_wait_final (&optee->call_queue, &w); } +/** +* optee_disable_shm_cache() - Disables caching of mapped shared memory +* allocations in OP-TEE +* @optee: main service struct +*/ +void optee_disable_shm_cache (struct optee *optee) +{ +return __optee_disable_shm_cache (optee, true); +} + +/** +* optee_disable_unmapped_shm_cache() - Disables caching of shared memory +* allocations in OP-TEE which are not +* currently mapped +* @optee: main service struct +*/ +void optee_disable_unmapped_shm_cache (struct optee *optee) +{ +return __optee_disable_shm_cache (optee, false); +} +#define PAGELIST_ENTRIES_PER_PAGE \ ((OPTEE_MSG_NONCONTIG_PAGE_SIZE / sizeof(u64)) - 1)
drivers/tee/optee/core.c +42 -1
85 lines not on this page · raw message
drivers/tee/optee/optee_private.h +1 -0
@@ -159,6 +159,7 @@ int optee_cancel_req(struct tee_context *ctx, u32 cancel_id, u32 session);void optee_enable_shm_cache (struct optee *optee);void optee_disable_shm_cache (struct optee *optee); +void optee_disable_unmapped_shm_cache (struct optee *optee); int optee_shm_register(struct tee_context *ctx, struct tee_shm *shm, struct page **pages, size_t num_pages,
drivers/tee/optee/rpc.c +3 -2
@@ -314,7 +314,7 @@ static void handle_rpc_func_cmd_shm_alloc(struct tee_context *ctx, shm =cmd_alloc_suppl (ctx, sz);break ;case OPTEE_RPC_SHM_TYPE_KERNEL : - shm =tee_shm_alloc (ctx, sz,TEE_SHM_MAPPED ); + shm =tee_shm_alloc (ctx, sz,TEE_SHM_MAPPED |TEE_SHM_PRIV );break ;default : arg->ret =TEEC_ERROR_BAD_PARAMETERS ;
@@ -502,7 +502,8 @@ void optee_handle_rpc(struct tee_context *ctx, struct optee_rpc_param *param,switch (OPTEE_SMC_RETURN_GET_RPC_FUNC (param->a0)) {case OPTEE_SMC_RPC_FUNC_ALLOC : - shm =tee_shm_alloc (ctx, param->a1,TEE_SHM_MAPPED ); + shm =tee_shm_alloc (ctx, param->a1, +TEE_SHM_MAPPED |TEE_SHM_PRIV );if (!IS_ERR (shm) && !tee_shm_get_pa (shm,0 , &pa)) {reg_pair_from_64 (¶m->a1, ¶m->a2, pa); reg_pair_from_64(¶m->a4, ¶m->a5,
drivers/tee/optee/shm_pool.c +16 -4
@@ -27,13 +27,19 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, shm->paddr =page_to_phys (page); shm->size =PAGE_SIZE << order; -if (shm->flags &TEE_SHM_DMA_BUF ) { +/* +* Shared memory private to the OP-TEE driver doesn't need +* to be registered with OP-TEE. +*/ +if (!(shm->flags &TEE_SHM_PRIV )) {unsigned int nr_pages =1 << order, i;struct page **pages; pages =kcalloc (nr_pages,sizeof (pages),GFP_KERNEL ); -if (!pages) -return -ENOMEM ; +if (!pages) { + rc = -ENOMEM ; + goto err; + }for (i =0 ; i < nr_pages; i++) { pages[i] = page;
@@ -44,15 +50,21 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, rc =optee_shm_register (shm->ctx, shm, pages, nr_pages, (unsigned long )shm->kaddr);kfree (pages); +if (rc) + goto err; } +return 0 ; + +err: +__free_pages (page, order);return rc; }static void pool_op_free (struct tee_shm_pool_mgr *poolm,struct tee_shm *shm) { -if (shm->flags &TEE_SHM_DMA_BUF ) +if (!(shm->flags &TEE_SHM_PRIV ))optee_shm_unregister (shm->ctx, shm);free_pages ((unsigned long )shm->kaddr,get_order (shm->size));
drivers/tee/tee_shm.c +19 -1
@@ -117,7 +117,7 @@ struct tee_shm *tee_shm_alloc(struct tee_context *ctx, size_t size, u32 flags)return ERR_PTR (-EINVAL ); } -if ((flags & ~(TEE_SHM_MAPPED |TEE_SHM_DMA_BUF ))) { +if ((flags & ~(TEE_SHM_MAPPED |TEE_SHM_DMA_BUF |TEE_SHM_PRIV ))) {dev_err (teedev->dev.parent,"invalid shm flags 0x%x" , flags);return ERR_PTR (-EINVAL ); }
@@ -193,6 +193,24 @@ struct tee_shm *tee_shm_alloc(struct tee_context *ctx, size_t size, u32 flags) }EXPORT_SYMBOL_GPL (tee_shm_alloc); +/** +* tee_shm_alloc_kernel_buf() - Allocate shared memory for kernel buffer +* @ctx: Context that allocates the shared memory +* @size: Requested size of shared memory +* +* The returned memory registered in secure world and is suitable to be +* passed as a memory buffer in parameter argument to +* tee_client_invoke_func(). The memory allocated is later freed with a +* call to tee_shm_free(). +* +* @returns a pointer to 'struct tee_shm' +*/ +struct tee_shm *tee_shm_alloc_kernel_buf (struct tee_context *ctx,size_t size) +{ +return tee_shm_alloc (ctx, size,TEE_SHM_MAPPED ); +} +EXPORT_SYMBOL_GPL (tee_shm_alloc_kernel_buf); +struct tee_shm *tee_shm_register (struct tee_context *ctx,unsigned long addr,size_t length,u32 flags) {
drivers/thunderbolt/switch.c +1 -14
@@ -1740,18 +1740,6 @@ static struct attribute *switch_attrs[] = { NULL, }; -static bool has_port (const struct tb_switch *sw,enum tb_port_type type) -{ -const struct tb_port *port; - -tb_switch_for_each_port (sw, port) { -if (!port->disabled && port->config.type == type) -return true; - } - -return false; -} -static umode_t switch_attr_is_visible (struct kobject *kobj,struct attribute *attr,int n) {
@@ -1760,8 +1748,7 @@ static umode_t switch_attr_is_visible(struct kobject *kobj,if (attr == &dev_attr_authorized.attr) {if (sw->tb->security_level ==TB_SECURITY_NOPCIE || - sw->tb->security_level ==TB_SECURITY_DPONLY || - !has_port (sw,TB_TYPE_PCIE_UP )) + sw->tb->security_level ==TB_SECURITY_DPONLY )return 0 ; }else if (attr == &dev_attr_device.attr) {if (!sw->device)
drivers/tty/serial/8250/8250_aspeed_vuart.c +3 -2
@@ -320,6 +320,7 @@ static int aspeed_vuart_handle_irq(struct uart_port *port) {struct uart_8250_port *up =up_to_u8250p (port);unsigned int iir, lsr; +unsigned long flags;int space, count; iir =serial_port_in (port,UART_IIR );
@@ -327,7 +328,7 @@ static int aspeed_vuart_handle_irq(struct uart_port *port)if (iir &UART_IIR_NO_INT )return 0 ; -spin_lock (&port->lock); +spin_lock_irqsave (&port->lock, flags); lsr =serial_port_in (port,UART_LSR );
@@ -363,7 +364,7 @@ static int aspeed_vuart_handle_irq(struct uart_port *port)if (lsr &UART_LSR_THRE )serial8250_tx_chars (up); -uart_unlock_and_check_sysrq (port); +uart_unlock_and_check_sysrq_irqrestore (port, flags);return 1 ; }
drivers/tty/serial/8250/8250_fsl.c +3 -2
@@ -30,10 +30,11 @@ struct fsl8250_data {int fsl8250_handle_irq (struct uart_port *port) {unsigned char lsr, orig_lsr; +unsigned long flags;unsigned int iir;struct uart_8250_port *up =up_to_u8250p (port); -spin_lock (&up->port.lock); +spin_lock_irqsave (&up->port.lock, flags); iir = port->serial_in (port,UART_IIR );if (iir &UART_IIR_NO_INT ) {
@@ -82,7 +83,7 @@ int fsl8250_handle_irq(struct uart_port *port) up->lsr_saved_flags = orig_lsr; -uart_unlock_and_check_sysrq (&up->port); +uart_unlock_and_check_sysrq_irqrestore (&up->port, flags);return 1 ; }
drivers/tty/serial/8250/8250_mtk.c +5 -0
@@ -93,10 +93,13 @@ static void mtk8250_dma_rx_complete(void *param)struct dma_tx_state state;int copied, total, cnt;unsigned char *ptr; +unsigned long flags;if (data->rx_status ==DMA_RX_SHUTDOWN )return ; +spin_lock_irqsave (&up->port.lock, flags); +dmaengine_tx_status (dma->rxchan, dma->rx_cookie, &state); total = dma->rx_size - state.residue; cnt = total;
@@ -120,6 +123,8 @@ static void mtk8250_dma_rx_complete(void *param)tty_flip_buffer_push (tty_port);mtk8250_rx_dma (up); + +spin_unlock_irqrestore (&up->port.lock, flags); }static void mtk8250_rx_dma (struct uart_8250_port *up)
drivers/tty/serial/8250/8250_pci.c +7 -0
@@ -3804,6 +3804,12 @@ static const struct pci_device_id blacklist[] = { { PCI_VDEVICE(INTEL, 0x0f0c), }, { PCI_VDEVICE(INTEL, 0x228a), }, { PCI_VDEVICE(INTEL, 0x228c), }, + { PCI_VDEVICE(INTEL, 0x4b96), }, + { PCI_VDEVICE(INTEL, 0x4b97), }, + { PCI_VDEVICE(INTEL, 0x4b98), }, + { PCI_VDEVICE(INTEL, 0x4b99), }, + { PCI_VDEVICE(INTEL, 0x4b9a), }, + { PCI_VDEVICE(INTEL, 0x4b9b), }, { PCI_VDEVICE(INTEL, 0x9ce3), }, { PCI_VDEVICE(INTEL, 0x9ce4), },
@@ -3964,6 +3970,7 @@ pciserial_init_ports(struct pci_dev *dev, const struct pciserial_board *board)if (pci_match_id (pci_use_msi, dev)) {dev_dbg (&dev->dev,"Using MSI(-X) interrupts\n" );pci_set_master (dev); + uart.port.flags &= ~UPF_SHARE_IRQ ; rc =pci_alloc_irq_vectors (dev,1 ,1 ,PCI_IRQ_ALL_TYPES ); }else {dev_dbg (&dev->dev,"Using legacy interrupts\n" );
drivers/tty/serial/8250/8250_port.c +12 -5
@@ -311,7 +311,11 @@ static const struct serial8250_config uart_config[] = {/* Uart divisor latch read */ static int default_serial_dl_read (struct uart_8250_port *up) { -return serial_in (up,UART_DLL ) |serial_in (up,UART_DLM ) <<8 ; +/* Assign these in pieces to truncate any bits above 7. */ +unsigned char dll =serial_in (up,UART_DLL ); +unsigned char dlm =serial_in (up,UART_DLM ); + +return dll | dlm <<8 ; }/* Uart divisor latch write */
@@ -1297,9 +1301,11 @@ static void autoconfig(struct uart_8250_port *up)serial_out (up,UART_LCR ,0 );serial_out (up,UART_FCR ,UART_FCR_ENABLE_FIFO ); - scratch =serial_in (up,UART_IIR ) >>6 ; -switch (scratch) { +/* Assign this as it is to truncate any bits above 7. */ + scratch =serial_in (up,UART_IIR ); + +switch (scratch >>6 ) {case 0 :autoconfig_8250 (up);break ;
@@ -1893,11 +1899,12 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)unsigned char status;struct uart_8250_port *up =up_to_u8250p (port);bool skip_rx = false; +unsigned long flags;if (iir &UART_IIR_NO_INT )return 0 ; -spin_lock (&port->lock); +spin_lock_irqsave (&port->lock, flags); status =serial_port_in (port,UART_LSR );
@@ -1923,7 +1930,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) (up->ier & UART_IER_THRI))serial8250_tx_chars (up); -uart_unlock_and_check_sysrq (port); +uart_unlock_and_check_sysrq_irqrestore (port, flags);return 1 ; }
drivers/tty/serial/serial-tegra.c +4 -2
@@ -1045,9 +1045,11 @@ static int tegra_uart_hw_init(struct tegra_uart_port *tup)if (tup->cdata->fifo_mode_enable_status) { ret =tegra_uart_wait_fifo_mode_enabled (tup); -dev_err (tup->uport.dev,"FIFO mode not enabled\n" ); -if (ret <0 ) +if (ret <0 ) { +dev_err (tup->uport.dev, +"Failed to enable FIFO mode: %d\n" , ret);return ret; + } }else {/* * For all tegra devices (up to t210), there is a hardware
drivers/usb/cdns3/cdns3-ep0.c +1 -0
@@ -731,6 +731,7 @@ static int cdns3_gadget_ep0_queue(struct usb_ep *ep, request->actual =0 ; priv_dev->status_completion_no_call = true; priv_dev->pending_status_request = request; +usb_gadget_set_state (&priv_dev->gadget,USB_STATE_CONFIGURED );spin_unlock_irqrestore (&priv_dev->lock, flags);/*
drivers/usb/cdns3/cdnsp-gadget.c +1 -1
@@ -1881,7 +1881,7 @@ static int __cdnsp_gadget_init(struct cdns *cdns) pdev->gadget.name ="cdnsp-gadget" ; pdev->gadget.speed =USB_SPEED_UNKNOWN ; pdev->gadget.sg_supported =1 ; - pdev->gadget.max_speed =USB_SPEED_SUPER_PLUS ; + pdev->gadget.max_speed = max_speed; pdev->gadget.lpm_capable =1 ; pdev->setup_buf =kzalloc (CDNSP_EP0_SETUP_SIZE ,GFP_KERNEL );
drivers/usb/cdns3/cdnsp-gadget.h +2 -2
@@ -383,8 +383,8 @@ struct cdnsp_intr_reg {#define IMAN_IE BIT(1)
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/function/f_hid.c +38 -6
44 lines not on this page · raw message
drivers/usb/serial/pl2303.c +26 -16
42 lines not on this page · raw message
fs/io-wq.c +45 -26
71 lines not on this page · raw message
kernel/sched/core.c +35 -55
90 lines not on this page · raw message
kernel/tracepoint.c +135 -20
155 lines not on this page · raw message
net/bluetooth/hci_sock.c +33 -16
49 lines not on this page · raw message
net/xfrm/xfrm_compat.c +44 -5
49 lines not on this page · 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.
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.13.10 kernel.
All users of the 5.13 kernel series must upgrade.
The updated 5.13.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.13.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,
greg k-h
------------
Makefile | 11 arch/alpha/kernel/smp.c | 2 arch/arm/boot/dts/am437x-l4.dtsi | 2 arch/arm/boot/dts/imx53-m53menlo.dts | 4 arch/arm/boot/dts/imx6qdl-sr-som.dtsi | 8 arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi | 1 arch/arm/boot/dts/omap5-board-common.dtsi | 9 arch/arm/boot/dts/stm32mp15xx-dhcom-pdk2.dtsi | 24 - arch/arm/boot/dts/stm32mp15xx-dhcom-som.dtsi | 5 arch/arm/mach-imx/mmdc.c | 17 - arch/arm/mach-omap2/omap_hwmod.c | 10 arch/arm64/boot/dts/freescale/fsl-ls1028a-kontron-sl28-var2.dts | 2 arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts | 3 arch/arm64/include/asm/ptrace.h | 12 arch/arm64/include/asm/syscall.h | 19 - arch/arm64/kernel/ptrace.c | 2 arch/arm64/kernel/signal.c | 3 arch/arm64/kernel/stacktrace.c | 2 arch/arm64/kernel/syscall.c | 9 arch/mips/Makefile | 2 arch/mips/include/asm/pgalloc.h | 17 - arch/mips/mti-malta/malta-platform.c | 3 arch/riscv/Kconfig | 1 arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts | 2 arch/riscv/kernel/stacktrace.c | 2 arch/x86/events/perf_event.h | 3 arch/x86/kvm/mmu/mmu.c | 2 arch/x86/kvm/svm/sev.c | 2 arch/x86/kvm/x86.c | 13 arch/x86/tools/relocs.c | 8 block/blk-iolatency.c | 6 drivers/acpi/acpica/nsrepair2.c | 7 drivers/ata/libata-sff.c | 35 +- drivers/base/dd.c | 4 drivers/base/firmware_loader/fallback.c | 14 drivers/base/firmware_loader/firmware.h | 10 drivers/base/firmware_loader/main.c | 2 drivers/bus/ti-sysc.c | 22 - drivers/char/tpm/tpm_ftpm_tee.c | 8 drivers/clk/clk-devres.c | 9 drivers/clk/clk-stm32f4.c | 10 drivers/clk/tegra/clk-sdmmc-mux.c | 10 drivers/dma/idxd/idxd.h | 14 drivers/dma/idxd/init.c | 30 + drivers/dma/idxd/irq.c | 27 + drivers/dma/idxd/submit.c | 92 ++++- drivers/dma/idxd/sysfs.c | 2 drivers/dma/imx-dma.c | 2 drivers/dma/stm32-dma.c | 4 drivers/dma/stm32-dmamux.c | 6 drivers/dma/uniphier-xdmac.c | 4 drivers/fpga/dfl-fme-perf.c | 2 drivers/gpio/gpio-mpc8xxx.c | 2 drivers/gpio/gpio-tqmx86.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 drivers/gpu/drm/i915/i915_globals.c | 4 drivers/gpu/drm/i915/i915_pci.c | 1 drivers/gpu/drm/i915/i915_reg.h | 2 drivers/gpu/drm/kmb/kmb_drv.c | 14 drivers/gpu/drm/kmb/kmb_plane.c | 15 drivers/hid/hid-ft260.c | 23 - drivers/infiniband/hw/hns/hns_roce_cmd.c | 7 drivers/infiniband/hw/hns/hns_roce_main.c | 4 drivers/infiniband/hw/mlx5/mr.c | 4 drivers/interconnect/core.c | 9 drivers/interconnect/qcom/icc-rpmh.c | 12 drivers/md/raid1.c | 2 drivers/md/raid10.c | 4 drivers/media/common/videobuf2/videobuf2-core.c | 13 drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 11 drivers/net/dsa/qca/ar9331.c | 14 drivers/net/dsa/sja1105/sja1105_main.c | 94 ++++-- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 3 drivers/net/ethernet/freescale/fec_main.c | 2 drivers/net/ethernet/natsemi/natsemi.c | 8 drivers/net/ethernet/neterion/vxge/vxge-main.c | 6 drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 2 drivers/net/ethernet/qlogic/qede/qede_filter.c | 4 drivers/net/ethernet/qlogic/qla3xxx.c | 6 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 6 drivers/net/phy/micrel.c | 10 drivers/net/usb/pegasus.c | 14 drivers/net/wireless/virt_wifi.c | 52 ++- drivers/pcmcia/i82092.c | 1 drivers/platform/x86/gigabyte-wmi.c | 1 drivers/s390/block/dasd_eckd.c | 13 drivers/scsi/ibmvscsi/ibmvfc.c | 19 + drivers/scsi/ibmvscsi/ibmvfc.h | 1 drivers/scsi/sr.c | 2 drivers/soc/imx/soc-imx8m.c | 84 ----- drivers/soc/ixp4xx/ixp4xx-npe.c | 11 drivers/soc/ixp4xx/ixp4xx-qmgr.c | 9 drivers/spi/spi-imx.c | 52 ++- drivers/spi/spi-meson-spicc.c | 2 drivers/staging/rtl8712/hal_init.c | 30 + drivers/staging/rtl8712/rtl8712_led.c | 8 drivers/staging/rtl8712/rtl871x_led.h | 1 drivers/staging/rtl8712/rtl871x_pwrctrl.c | 8 drivers/staging/rtl8712/rtl871x_pwrctrl.h | 1 drivers/staging/rtl8712/usb_intf.c | 51 +-- drivers/staging/rtl8723bs/hal/sdio_ops.c | 2 drivers/tee/optee/call.c | 38 ++ drivers/tee/optee/core.c | 43 ++ drivers/tee/optee/optee_private.h | 1 drivers/tee/optee/rpc.c | 5 drivers/tee/optee/shm_pool.c | 20 + drivers/tee/tee_shm.c | 20 + drivers/thunderbolt/switch.c | 15 drivers/tty/serial/8250/8250_aspeed_vuart.c | 5 drivers/tty/serial/8250/8250_fsl.c | 5 drivers/tty/serial/8250/8250_mtk.c | 5 drivers/tty/serial/8250/8250_pci.c | 7 drivers/tty/serial/8250/8250_port.c | 17 - drivers/tty/serial/serial-tegra.c | 6 drivers/usb/cdns3/cdns3-ep0.c | 1 drivers/usb/cdns3/cdnsp-gadget.c | 2 drivers/usb/cdns3/cdnsp-gadget.h | 4 drivers/usb/cdns3/cdnsp-ring.c | 18 - drivers/usb/class/usbtmc.c | 9 drivers/usb/common/usb-otg-fsm.c | 6 drivers/usb/dwc3/gadget.c | 29 + drivers/usb/gadget/function/f_hid.c | 44 ++ drivers/usb/gadget/udc/max3420_udc.c | 14 drivers/usb/host/ohci-at91.c | 9 drivers/usb/serial/ch341.c | 1 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 3 drivers/usb/serial/option.c | 2 drivers/usb/serial/pl2303.c | 42 +- drivers/usb/typec/tcpm/tcpm.c | 4 drivers/virt/acrn/vm.c | 16 - fs/cifs/smb2ops.c | 3 fs/ext4/mmp.c | 2 fs/ext4/namei.c | 2 fs/io-wq.c | 71 ++-- fs/pipe.c | 19 + fs/reiserfs/stree.c | 31 +- fs/reiserfs/super.c | 8 include/linux/serial_core.h | 24 + include/linux/tee_drv.h | 2 include/linux/usb/otg-fsm.h | 1 include/net/bluetooth/hci_core.h | 1 include/net/ip6_route.h | 2 include/net/netns/xfrm.h | 1 kernel/events/core.c | 25 + kernel/sched/core.c | 90 ++--- kernel/time/timer.c | 6 kernel/trace/trace.c | 4 kernel/trace/trace_events_hist.c | 24 + kernel/tracepoint.c | 155 ++++++++-- net/bluetooth/hci_core.c | 16 - net/bluetooth/hci_sock.c | 49 ++- net/bluetooth/hci_sysfs.c | 3 net/bridge/br.c | 3 net/bridge/br_fdb.c | 30 + net/bridge/br_private.h | 2 net/ipv4/tcp_offload.c | 3 net/ipv4/udp_offload.c | 4 net/sched/sch_generic.c | 2 net/sctp/auth.c | 14 net/xfrm/xfrm_compat.c | 49 ++- net/xfrm/xfrm_policy.c | 17 - net/xfrm/xfrm_user.c | 10 scripts/tracing/draw_functrace.py | 6 security/selinux/ss/policydb.c | 10 sound/core/pcm_native.c | 2 sound/core/seq/seq_ports.c | 39 +- sound/pci/hda/patch_realtek.c | 2 sound/usb/card.c | 2 sound/usb/clock.c | 6 sound/usb/mixer.c | 35 +- sound/usb/quirks.c | 1 virt/kvm/kvm_main.c | 18 + 175 files changed, 1628 insertions(+), 738 deletions(-)
Aharon Landau (1):
RDMA/mlx5: Delay emptying a cache entry when a new MR is added to it recently
Alex Deucher (1):
drm/amdgpu/display: only enable aux backlight control for OLED panels
Alex Xu (Hello71) (1):
pipe: increase minimum default pipe size to 2 pages
Alexander Monakov (1):
ALSA: hda/realtek: add mic quirk for Acer SF314-42
Alexander Tsoy (1):
ALSA: usb-audio: Add registration quirk for JBL Quantum 600
Allen Pais (1):
optee: fix tee out of memory failure seen during kexec reboot
Andy Shevchenko (1):
serial: 8250_pci: Enumerate Elkhart Lake UARTs via dedicated driver
Anirudh Rayabharam (2):
firmware_loader: use -ETIMEDOUT instead of -EAGAIN in fw_load_sysfs_fallback
firmware_loader: fix use-after-free in firmware_fallback_sysfs
Antoine Tenart (1):
net: ipv6: fix returned variable type in ip6_skb_dst_mtu
Arnd Bergmann (2):
soc: ixp4xx: fix printing resources
soc: ixp4xx/qmgr: fix invalid __iomem access
Brian Norris (1):
clk: fix leak on devm_clk_bulk_get_all() unwind
Christoph Hellwig (1):
libata: fix ata_pio_sector for CONFIG_HIGHMEM
Christophe JAILLET (1):
usb: cdnsp: Fix the IMAN_IE_SET and IMAN_IE_CLEAR macro
Claudiu Beznea (1):
usb: host: ohci-at91: suspend/resume ports after/before OHCI accesses
Colin Ian King (2):
ARM: imx: fix missing 3rd argument in macro imx_mmdc_perf_init
interconnect: Fix undersized devress_alloc allocation
Dan Carpenter (1):
bnx2x: fix an error code in bnx2x_nic_load()
Daniele Palmas (1):
USB: serial: option: add Telit FD980 composition 0x1056
Dario Binacchi (2):
clk: stm32f4: fix post divisor setup for I2S/SAI PLLs
ARM: dts: am437x-l4: fix typo in can@0 node
Dave Jiang (5):
dmaengine: idxd: fix array index when int_handles are being used
dmaengine: idxd: fix setup sequence for MSIXPERM table
dmaengine: idxd: fix desc->vector that isn't being updated
dmaengine: idxd: fix sequence for pci driver remove() and shutdown()
dmaengine: idxd: fix submission race window
David Bauer (1):
USB: serial: ftdi_sio: add device ID for Auto-M3 OP-COM v2
Dmitry Osipenko (2):
clk: tegra: Implement disable_unused() of tegra_clk_sdmmc_mux_ops
usb: otg-fsm: Fix hrtimer list corruption
Dmitry Safonov (1):
net/xfrm/compat: Copy xfrm_spdattr_type_t atributes
Dongliang Mu (1):
spi: meson-spicc: fix memory leak in meson_spicc_remove
Edmund Dea (1):
drm/kmb: Enable LCD DMA for low TVDDCV
Fei Qin (1):
nfp: update ethtool reporting of pauseframe control
Filip Schauer (1):
drivers core: Fix oops when driver probe fails
Frederic Weisbecker (1):
xfrm: Fix RCU vs hash_resize_mutex lock inversion
Greg Kroah-Hartman (1):
Linux 5.13.10
Grygorii Strashko (1):
net: ethernet: ti: am65-cpsw: fix crash in am65_cpsw_port_offload_fwd_mark_update()
Guenter Roeck (1):
riscv: Disable STACKPROTECTOR_PER_TASK if GCC_PLUGIN_RANDSTRUCT is enabled
H. Nikolaus Schaller (3):
omap5-board-common: remove not physically existing vdds_1v8_main fixed-regulator x86/tools/relocs: Fix non-POSIX regexp
mips: Fix non-POSIX regexp
Hans Verkuil (1):
media: videobuf2-core: dequeue if start_streaming fails
Hao Xu (2):
io-wq: fix no lock protection of acct->nr_worker
io-wq: fix lack of acct->nr_workers < acct->max_workers judgementHarshvardhan Jha (1):
net: qede: Fix end of loop tests for list_for_each_entry
Huang Pei (1):
MIPS: check return value of pgtable_pmd_page_ctor
Hui Su (1):
scripts/tracing: fix the bug that can't parse raw_trace_func
Jakub Sitnicki (1):
net, gro: Set inner transport header offset in tcp/udp GRO hook
Jaroslav Kysela (1):
ALSA: pcm - fix mmap capability check for the snd-dummy driver
Jason Ekstrand (1):
drm/i915: Call i915_globals_exit() if pci_register_device() fails
Jens Axboe (1):
io-wq: fix race between worker exiting and activating free worker
Jens Wiklander (1):
tee: add tee_shm_alloc_kernel_buf()
Jisheng Zhang (1):
riscv: stacktrace: Fix NULL pointer dereference
Johan Hovold (4):
USB: serial: pl2303: fix HX type detection
USB: serial: pl2303: fix GT type detection
media: rtl28xxu: fix zero-length control request
serial: 8250: fix handle_irq locking
Jon Hunter (1):
serial: tegra: Only print FIFO error message when an error occurs
Juergen Borleis (1):
dmaengine: imx-dma: configure the generic DMA type to make it work
Kajol Jain (1):
fpga: dfl: fme: Fix cpu hotplug issue in performance reporting
Kamal Agrawal (1):
tracing: Fix NULL pointer dereference in start_creating
Kevin Hilman (1):
bus: ti-sysc: AM3: RNG is GP only
Kunihiko Hayashi (1):
dmaengine: uniphier-xdmac: Use readl_poll_timeout_atomic() in atomic state
Kyle Tso (1):
usb: typec: tcpm: Keep other events when receiving FRS and Sourcing_vbus events
Letu Ren (1):
net/qla3xxx: fix schedule while atomic in ql_wait_for_drvr_lock and ql_adapter_reset
Li Manyi (1):
scsi: sr: Return correct event when media event code is 3
Like Xu (1):
perf/x86/amd: Don't touch the AMD64_EVENTSEL_HOSTONLY bit inside the guest
Lucas Stach (1):
Revert "soc: imx8m: change to use platform driver"
Maciej W. Rozycki (2):
serial: 8250: Mask out floating 16/32-bit bus bits
MIPS: Malta: Do not byte-swap accesses to the CBUS UART
Marco Elver (1):
perf: Fix required permissions if sigtrap is requested
Marek Vasut (6):
ARM: dts: imx: Swap M53Menlo pinctrl_power_button/pinctrl_power_out pins
spi: imx: mx51-ecspi: Reinstate low-speed CONFIGREG delay
spi: imx: mx51-ecspi: Fix low-speed CONFIGREG delay calculation
ARM: dts: stm32: Prefer HW RTC on DHCOM SoM
ARM: dts: stm32: Disable LAN8710 EDPD on DHCOM
ARM: dts: stm32: Fix touchscreen IRQ line assignment on DHCOM
Mario Kleiner (1):
serial: 8250_pci: Avoid irq sharing for MSI(-X) interrupts.
Mark Rutland (2):
arm64: stacktrace: avoid tracing arch_stack_walk()
arm64: fix compat syscall return truncation
Masahiro Yamada (1):
kbuild: cancel sub_make_done for the install target to fix DKMS
Masami Hiramatsu (1):
tracing: Reject string operand in the histogram expression
Mathieu Desnoyers (3):
tracepoint: static call: Compare data on transition from 2->1 callees
tracepoint: Fix static call function vs data state mismatch
tracepoint: Use rcu get state and cond sync for static call updates
Matt Roper (1):
drm/i915: Correct SFC_DONE register offset
Matteo Croce (1):
virt_wifi: fix error on connect
Matthias Schiffer (1):
gpio: tqmx86: really make IRQ optional
Maxim Devaev (2):
usb: gadget: f_hid: added GET_IDLE and SET_IDLE handlers
usb: gadget: f_hid: idle uses the highest byte for duration
Maxime Chevallier (1):
ARM: dts: imx6qdl-sr-som: Increase the PHY reset duration to 10ms
Michael Walle (1):
arm64: dts: ls1028: sl28: fix networking for variant 2
Michael Zaidman (1):
HID: ft260: fix device removal due to USB disconnect
Mika Westerberg (1):
Revert "thunderbolt: Hide authorized attribute if router does not support PCIe tunnels"
Mike Tipton (3):
interconnect: Zero initial BW after sync-state
interconnect: Always call pre_aggregate before aggregate
interconnect: qcom: icc-rpmh: Ensure floor BW is enforced for all nodes
Nikos Liolios (1):
ALSA: hda/realtek: Fix headset mic for Acer SWIFT SF314-56 (ALC256)
Oleksandr Suvorov (1):
ARM: dts: colibri-imx6ull: limit SDIO clock to 25MHz
Oleksij Rempel (1):
net: dsa: qca: ar9331: reorder MDIO write sequence
Pali Rohár (1):
arm64: dts: armada-3720-turris-mox: remove mrvl,i2c-fast-mode
Paolo Bonzini (2):
KVM: x86: accept userspace interrupt only if no event is injected
KVM: Do not leak memory for duplicate debugfs directories
Pavel Skripkin (6):
net: xfrm: fix memory leak in xfrm_user_rcv_msg
net: pegasus: fix uninit-value in get_interrupt_interval
net: fec: fix use-after-free in fec_drv_remove
net: vxge: fix use-after-free in vxge_device_unregister
staging: rtl8712: get rid of flush_scheduled_work
staging: rtl8712: error handling refactoring
Pawel Laszczak (3):
usb: cdns3: Fixed incorrect gadget state
usb: cdnsp: Fixed issue with ZLP
usb: cdnsp: Fix incorrect supported maximum speed
Peter Zijlstra (1):
sched/rt: Fix double enqueue caused by rt_effective_prio
Phil Elwell (1):
usb: gadget: f_hid: fixed NULL pointer dereference
Prarit Bhargava (1):
alpha: Send stop IPI to send to online CPUs
Qiang.zhang (1):
USB: usbtmc: Fix RCU stall warning
Qiu Wenbo (1):
riscv: dts: fix memory size for the SiFive HiFive Unmatched
Rafael J. Wysocki (1):
Revert "ACPICA: Fix memory leak caused by _CID repair function"
Randy Dunlap (2):
drm/i915: fix i915_globals_exit() section mismatch error drm/amdgpu: fix checking pmops when PM_SLEEP is not enabled
Rasmus Villemoes (1):
Revert "gpio: mpc8xxx: change the gpio interrupt flags."
Sean Christopherson (2):
KVM: SVM: Fix off-by-one indexing when nullifying last used SEV VMCB
KVM: x86/mmu: Fix per-cpu counter corruption on 32-bit builds
Shirish S (1):
drm/amdgpu/display: fix DMUB firmware version info
Shreyansh Chouhan (1):
reiserfs: check directory items on read from disk
Shuo Liu (1):
virt: acrn: Do hcall_destroy_vm() before resource release
Stefan Haberland (1):
s390/dasd: fix use after free in dasd path handling
Steve Bennett (1):
net: phy: micrel: Fix detection of ksz87xx switch
Steve French (1):
smb3: rc uninitialized in one fallocate path
Steven Rostedt (VMware) (1):
tracing / histogram: Give calculation hist_fields a size
Sumit Garg (1):
tee: Correct inappropriate usage of TEE_SHM_DMA_BUF flag
Takashi Iwai (3):
ALSA: seq: Fix racy deletion of subscriber
ALSA: usb-audio: Fix superfluous autosuspend recovery
ALSA: usb-audio: Avoid unnecessary or invalid connector selection at resume
Tero Kristo (1):
ARM: omap2+: hwmod: fix potential NULL pointer access
Tetsuo Handa (1):
Bluetooth: defer cleanup of resources in hci_unregister_dev()
Theodore Ts'o (1):
ext4: fix potential htree corruption when growing large_dir directories
Thomas Gleixner (1):
timers: Move clearing of base::timer_running under base:: Lock
Thomas Weißschuh (1):
platform/x86: gigabyte-wmi: add support for B550 Aorus Elite V2
Tony Lindgren (1):
bus: ti-sysc: Fix gpt12 system timer issue with reserved status
Tyler Hicks (4):
optee: Clear stale cache entries during initialization
optee: Fix memory leak when failing to register shm pages
optee: Refuse to load the driver under the kdump kernel
tpm_ftpm_tee: Free and unregister TEE shared memory during kexec
Tyrel Datwyler (1):
scsi: ibmvfc: Fix command state accounting and stale response detection
Vladimir Oltean (8):
arm64: dts: ls1028a: fix node name for the sysclk
arm64: dts: armada-3720-turris-mox: fixed indices for the SDHC controllers
net: dsa: sja1105: overwrite dynamic FDB entries with static ones in .port_fdb_add
net: dsa: sja1105: invalidate dynamic FDB entries learned concurrently with statically added ones
net: dsa: sja1105: ignore the FDB entry for unknown multicast when adding a new address
net: dsa: sja1105: be stateless with FDB entries on SJA1105P/Q/R/S/SJA1110 too
net: dsa: sja1105: match FDB entries regardless of inner/outer VLAN tag
net: bridge: validate the NUD_PERMANENT bit when adding an extern_learn FDB entry
Wang Hai (1):
net: natsemi: Fix missing pci_disable_device() in probe and remove
Wei Shuyu (1):
md/raid10: properly indicate failure when ending a failed write request
Wesley Cheng (2):
usb: dwc3: gadget: Use list_replace_init() before traversing lists
usb: dwc3: gadget: Avoid runtime resume if disabling pullup
Willy Tarreau (1):
USB: serial: ch341: fix character loss at high transfer rates
Xiangyang Zhang (1):
staging: rtl8723bs: Fix a resource leak in sd_int_dpc
Xin Long (1):
sctp: move the active_key update after sh_keys is added
Xiu Jianfeng (1):
selinux: correct the return value when loads initial sids
Yang Yingliang (2):
ARM: imx: add missing iounmap()
ARM: imx: add missing clk_disable_unprepare()
Yangyang Li (1):
RDMA/hns: Fix the double unlock problem of poll_sem
Ye Bin (1):
ext4: fix potential uninitialized access to retval in kmmpd
Yu Kuai (2):
blk-iolatency: error out if blk_get_queue() failed in iolatency_set_limit()
reiserfs: add check for root_inode in reiserfs_fill_super
Yunsheng Lin (1):
net: sched: fix lockdep_set_class() typo error for sch->seqlock
Zhang Qilong (3):
dmaengine: stm32-dma: Fix PM usage counter imbalance in stm32 dma ops
dmaengine: stm32-dmamux: Fix PM usage counter unbalance in stm32 dmamux ops
usb: gadget: remove leaked entry from udc driver list
Zheyu Ma (1):
pcmcia: i82092: fix a null pointer dereference bug
Zhiyong Tao (1):
serial: 8250_mtk: fix uart corruption issue when rx power off
chihhao.chen (1):
ALSA: usb-audio: fix incorrect clock source setting