From 4d68d17f1166fe5c3c93adfee3ac3d94d078bfdf Mon Sep 17 00:00:00 2001 From: Julian Sikorski Date: Tue, 6 Jun 2023 11:15:45 +0000 Subject: [PATCH] Update odroidxu4-current to 5.4.245 --- .../odroidxu4-5.4/patch-5.4.242-243.patch | 10742 ---------------- .../odroidxu4-5.4/patch-5.4.243-244.patch | 6926 ++++++++++ .../odroidxu4-5.4/patch-5.4.244-245.patch | 1307 ++ 3 files changed, 8233 insertions(+), 10742 deletions(-) delete mode 100644 patch/kernel/archive/odroidxu4-5.4/patch-5.4.242-243.patch create mode 100644 patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch create mode 100644 patch/kernel/archive/odroidxu4-5.4/patch-5.4.244-245.patch diff --git a/patch/kernel/archive/odroidxu4-5.4/patch-5.4.242-243.patch b/patch/kernel/archive/odroidxu4-5.4/patch-5.4.242-243.patch deleted file mode 100644 index 82d8073937..0000000000 --- a/patch/kernel/archive/odroidxu4-5.4/patch-5.4.242-243.patch +++ /dev/null @@ -1,10742 +0,0 @@ -diff --git a/Documentation/media/uapi/v4l/subdev-formats.rst b/Documentation/media/uapi/v4l/subdev-formats.rst -index 15e11f27b4c8f..b89a2f6c91552 100644 ---- a/Documentation/media/uapi/v4l/subdev-formats.rst -+++ b/Documentation/media/uapi/v4l/subdev-formats.rst -@@ -7794,3 +7794,30 @@ formats. - - 0x5001 - - Interleaved raw UYVY and JPEG image format with embedded meta-data - used by Samsung S3C73MX camera sensors. -+ -+.. _v4l2-mbus-metadata-fmts: -+ -+Metadata Formats -+^^^^^^^^^^^^^^^^ -+ -+This section lists all metadata formats. -+ -+The following table lists the existing metadata formats. -+ -+.. tabularcolumns:: |p{8.0cm}|p{1.4cm}|p{7.7cm}| -+ -+.. flat-table:: Metadata formats -+ :header-rows: 1 -+ :stub-columns: 0 -+ -+ * - Identifier -+ - Code -+ - Comments -+ * .. _MEDIA-BUS-FMT-METADATA-FIXED: -+ -+ - MEDIA_BUS_FMT_METADATA_FIXED -+ - 0x7001 -+ - This format should be used when the same driver handles -+ both sides of the link and the bus format is a fixed -+ metadata format that is not configurable from userspace. -+ Width and height will be set to 0 for this format. -diff --git a/Makefile b/Makefile -index ab3ba43588425..f660c3e224ec0 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,7 +1,7 @@ - # SPDX-License-Identifier: GPL-2.0 - VERSION = 5 - PATCHLEVEL = 4 --SUBLEVEL = 242 -+SUBLEVEL = 243 - EXTRAVERSION = - NAME = Kleptomaniac Octopus - -diff --git a/arch/arm/boot/dts/exynos4412-itop-elite.dts b/arch/arm/boot/dts/exynos4412-itop-elite.dts -index f6d0a5f5d339e..9a2a49420d4db 100644 ---- a/arch/arm/boot/dts/exynos4412-itop-elite.dts -+++ b/arch/arm/boot/dts/exynos4412-itop-elite.dts -@@ -179,7 +179,7 @@ - compatible = "wlf,wm8960"; - reg = <0x1a>; - clocks = <&pmu_system_controller 0>; -- clock-names = "MCLK1"; -+ clock-names = "mclk"; - wlf,shared-lrclk; - #sound-dai-cells = <0>; - }; -diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi -index 338256c59ca5a..fc31ee980639a 100644 ---- a/arch/arm/boot/dts/qcom-ipq4019.dtsi -+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi -@@ -393,8 +393,8 @@ - #address-cells = <3>; - #size-cells = <2>; - -- ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000>, -- <0x82000000 0 0x40300000 0x40300000 0 0x00d00000>; -+ ranges = <0x81000000 0x0 0x00000000 0x40200000 0x0 0x00100000>, -+ <0x82000000 0x0 0x40300000 0x40300000 0x0 0x00d00000>; - - interrupts = ; - interrupt-names = "msi"; -diff --git a/arch/arm/boot/dts/qcom-ipq8064.dtsi b/arch/arm/boot/dts/qcom-ipq8064.dtsi -index 16c0da97932c1..976a8a1fa9535 100644 ---- a/arch/arm/boot/dts/qcom-ipq8064.dtsi -+++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi -@@ -451,8 +451,8 @@ - #address-cells = <3>; - #size-cells = <2>; - -- ranges = <0x81000000 0 0x0fe00000 0x0fe00000 0 0x00100000 /* downstream I/O */ -- 0x82000000 0 0x08000000 0x08000000 0 0x07e00000>; /* non-prefetchable memory */ -+ ranges = <0x81000000 0x0 0x00000000 0x0fe00000 0x0 0x00010000 /* I/O */ -+ 0x82000000 0x0 0x08000000 0x08000000 0x0 0x07e00000>; /* MEM */ - - interrupts = ; - interrupt-names = "msi"; -@@ -502,8 +502,8 @@ - #address-cells = <3>; - #size-cells = <2>; - -- ranges = <0x81000000 0 0x31e00000 0x31e00000 0 0x00100000 /* downstream I/O */ -- 0x82000000 0 0x2e000000 0x2e000000 0 0x03e00000>; /* non-prefetchable memory */ -+ ranges = <0x81000000 0x0 0x00000000 0x31e00000 0x0 0x00010000 /* I/O */ -+ 0x82000000 0x0 0x2e000000 0x2e000000 0x0 0x03e00000>; /* MEM */ - - interrupts = ; - interrupt-names = "msi"; -@@ -553,8 +553,8 @@ - #address-cells = <3>; - #size-cells = <2>; - -- ranges = <0x81000000 0 0x35e00000 0x35e00000 0 0x00100000 /* downstream I/O */ -- 0x82000000 0 0x32000000 0x32000000 0 0x03e00000>; /* non-prefetchable memory */ -+ ranges = <0x81000000 0x0 0x00000000 0x35e00000 0x0 0x00010000 /* I/O */ -+ 0x82000000 0x0 0x32000000 0x32000000 0x0 0x03e00000>; /* MEM */ - - interrupts = ; - interrupt-names = "msi"; -diff --git a/arch/arm/boot/dts/s5pv210.dtsi b/arch/arm/boot/dts/s5pv210.dtsi -index 61822afa30ab3..cd8f6e7a7f7ff 100644 ---- a/arch/arm/boot/dts/s5pv210.dtsi -+++ b/arch/arm/boot/dts/s5pv210.dtsi -@@ -571,7 +571,7 @@ - interrupts = <29>; - clocks = <&clocks CLK_CSIS>, - <&clocks SCLK_CSIS>; -- clock-names = "clk_csis", -+ clock-names = "csis", - "sclk_csis"; - bus-width = <4>; - status = "disabled"; -diff --git a/arch/arm64/boot/dts/renesas/r8a774c0.dtsi b/arch/arm64/boot/dts/renesas/r8a774c0.dtsi -index 73ded80a79ba0..1de7891c658cf 100644 ---- a/arch/arm64/boot/dts/renesas/r8a774c0.dtsi -+++ b/arch/arm64/boot/dts/renesas/r8a774c0.dtsi -@@ -49,17 +49,14 @@ - opp-shared; - opp-800000000 { - opp-hz = /bits/ 64 <800000000>; -- opp-microvolt = <820000>; - clock-latency-ns = <300000>; - }; - opp-1000000000 { - opp-hz = /bits/ 64 <1000000000>; -- opp-microvolt = <820000>; - clock-latency-ns = <300000>; - }; - opp-1200000000 { - opp-hz = /bits/ 64 <1200000000>; -- opp-microvolt = <820000>; - clock-latency-ns = <300000>; - opp-suspend; - }; -diff --git a/arch/arm64/boot/dts/renesas/r8a77990.dtsi b/arch/arm64/boot/dts/renesas/r8a77990.dtsi -index dabee157119f9..82efc8a3627d9 100644 ---- a/arch/arm64/boot/dts/renesas/r8a77990.dtsi -+++ b/arch/arm64/boot/dts/renesas/r8a77990.dtsi -@@ -60,17 +60,14 @@ - opp-shared; - opp-800000000 { - opp-hz = /bits/ 64 <800000000>; -- opp-microvolt = <820000>; - clock-latency-ns = <300000>; - }; - opp-1000000000 { - opp-hz = /bits/ 64 <1000000000>; -- opp-microvolt = <820000>; - clock-latency-ns = <300000>; - }; - opp-1200000000 { - opp-hz = /bits/ 64 <1200000000>; -- opp-microvolt = <820000>; - clock-latency-ns = <300000>; - opp-suspend; - }; -diff --git a/arch/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h -index 0253691c4b3a1..bd451732a3afb 100644 ---- a/arch/arm64/include/asm/debug-monitors.h -+++ b/arch/arm64/include/asm/debug-monitors.h -@@ -116,6 +116,7 @@ void user_regs_reset_single_step(struct user_pt_regs *regs, - void kernel_enable_single_step(struct pt_regs *regs); - void kernel_disable_single_step(void); - int kernel_active_single_step(void); -+void kernel_rewind_single_step(struct pt_regs *regs); - - #ifdef CONFIG_HAVE_HW_BREAKPOINT - int reinstall_suspended_bps(struct pt_regs *regs); -diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c -index d64a3c1e1b6ba..62ab9d4f995eb 100644 ---- a/arch/arm64/kernel/debug-monitors.c -+++ b/arch/arm64/kernel/debug-monitors.c -@@ -441,6 +441,11 @@ int kernel_active_single_step(void) - } - NOKPROBE_SYMBOL(kernel_active_single_step); - -+void kernel_rewind_single_step(struct pt_regs *regs) -+{ -+ set_regs_spsr_ss(regs); -+} -+ - /* ptrace API */ - void user_enable_single_step(struct task_struct *task) - { -diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c -index 1a157ca33262d..e4e95821b1f6c 100644 ---- a/arch/arm64/kernel/kgdb.c -+++ b/arch/arm64/kernel/kgdb.c -@@ -223,6 +223,8 @@ int kgdb_arch_handle_exception(int exception_vector, int signo, - */ - if (!kernel_active_single_step()) - kernel_enable_single_step(linux_regs); -+ else -+ kernel_rewind_single_step(linux_regs); - err = 0; - break; - default: -diff --git a/arch/ia64/kernel/salinfo.c b/arch/ia64/kernel/salinfo.c -index b392c0a503468..0ec8b55b28ac0 100644 ---- a/arch/ia64/kernel/salinfo.c -+++ b/arch/ia64/kernel/salinfo.c -@@ -581,7 +581,7 @@ static int salinfo_cpu_pre_down(unsigned int cpu) - * 'data' contains an integer that corresponds to the feature we're - * testing - */ --static int proc_salinfo_show(struct seq_file *m, void *v) -+static int __maybe_unused proc_salinfo_show(struct seq_file *m, void *v) - { - unsigned long data = (unsigned long)v; - seq_puts(m, (sal_platform_features & data) ? "1\n" : "0\n"); -diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c -index 5b00dc3898e19..f2b40bcd2495d 100644 ---- a/arch/ia64/mm/contig.c -+++ b/arch/ia64/mm/contig.c -@@ -81,7 +81,7 @@ skip: - return __per_cpu_start + __per_cpu_offset[smp_processor_id()]; - } - --static inline void -+static inline __init void - alloc_per_cpu_data(void) - { - size_t size = PERCPU_PAGE_SIZE * num_possible_cpus(); -diff --git a/arch/mips/fw/lib/cmdline.c b/arch/mips/fw/lib/cmdline.c -index 6ecda64ad1842..ed88abc40513b 100644 ---- a/arch/mips/fw/lib/cmdline.c -+++ b/arch/mips/fw/lib/cmdline.c -@@ -51,7 +51,7 @@ char *fw_getenv(char *envname) - { - char *result = NULL; - -- if (_fw_envp != NULL) { -+ if (_fw_envp != NULL && fw_envp(0) != NULL) { - /* - * Return a pointer to the given environment variable. - * YAMON uses "name", "value" pairs, while U-Boot uses -diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S -index 6b27cf4a0d786..8db433947d393 100644 ---- a/arch/openrisc/kernel/entry.S -+++ b/arch/openrisc/kernel/entry.S -@@ -173,7 +173,6 @@ handler: ;\ - l.sw PT_GPR28(r1),r28 ;\ - l.sw PT_GPR29(r1),r29 ;\ - /* r30 already save */ ;\ --/* l.sw PT_GPR30(r1),r30*/ ;\ - l.sw PT_GPR31(r1),r31 ;\ - TRACE_IRQS_OFF_ENTRY ;\ - /* Store -1 in orig_gpr11 for non-syscall exceptions */ ;\ -@@ -211,9 +210,8 @@ handler: ;\ - l.sw PT_GPR27(r1),r27 ;\ - l.sw PT_GPR28(r1),r28 ;\ - l.sw PT_GPR29(r1),r29 ;\ -- /* r31 already saved */ ;\ -- l.sw PT_GPR30(r1),r30 ;\ --/* l.sw PT_GPR31(r1),r31 */ ;\ -+ /* r30 already saved */ ;\ -+ l.sw PT_GPR31(r1),r31 ;\ - /* Store -1 in orig_gpr11 for non-syscall exceptions */ ;\ - l.addi r30,r0,-1 ;\ - l.sw PT_ORIG_GPR11(r1),r30 ;\ -diff --git a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S -index 2b16d8d6598f1..c37010a135865 100644 ---- a/arch/parisc/kernel/real2.S -+++ b/arch/parisc/kernel/real2.S -@@ -248,9 +248,6 @@ ENTRY_CFI(real64_call_asm) - /* save fn */ - copy %arg2, %r31 - -- /* set up the new ap */ -- ldo 64(%arg1), %r29 -- - /* load up the arg registers from the saved arg area */ - /* 32-bit calling convention passes first 4 args in registers */ - ldd 0*REG_SZ(%arg1), %arg0 /* note overwriting arg0 */ -@@ -262,7 +259,9 @@ ENTRY_CFI(real64_call_asm) - ldd 7*REG_SZ(%arg1), %r19 - ldd 1*REG_SZ(%arg1), %arg1 /* do this one last! */ - -+ /* set up real-mode stack and real-mode ap */ - tophys_r1 %sp -+ ldo -16(%sp), %r29 /* Reference param save area */ - - b,l rfi_virt2real,%r2 - nop -diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c -index ee810df7d522d..0793579f2bb9b 100644 ---- a/arch/powerpc/kernel/rtas.c -+++ b/arch/powerpc/kernel/rtas.c -@@ -398,7 +398,7 @@ static char *__fetch_rtas_last_error(char *altbuf) - buf = kmalloc(RTAS_ERROR_LOG_MAX, GFP_ATOMIC); - } - if (buf) -- memcpy(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX); -+ memmove(buf, rtas_err_buf, RTAS_ERROR_LOG_MAX); - } - - return buf; -diff --git a/arch/powerpc/platforms/512x/clock-commonclk.c b/arch/powerpc/platforms/512x/clock-commonclk.c -index 30342b60aa63f..42c3d40355d90 100644 ---- a/arch/powerpc/platforms/512x/clock-commonclk.c -+++ b/arch/powerpc/platforms/512x/clock-commonclk.c -@@ -984,7 +984,7 @@ static void mpc5121_clk_provide_migration_support(void) - - #define NODE_PREP do { \ - of_address_to_resource(np, 0, &res); \ -- snprintf(devname, sizeof(devname), "%08x.%s", res.start, np->name); \ -+ snprintf(devname, sizeof(devname), "%pa.%s", &res.start, np->name); \ - } while (0) - - #define NODE_CHK(clkname, clkitem, regnode, regflag) do { \ -diff --git a/arch/powerpc/platforms/embedded6xx/flipper-pic.c b/arch/powerpc/platforms/embedded6xx/flipper-pic.c -index d39a9213a3e69..7dd2e2f97aae5 100644 ---- a/arch/powerpc/platforms/embedded6xx/flipper-pic.c -+++ b/arch/powerpc/platforms/embedded6xx/flipper-pic.c -@@ -144,7 +144,7 @@ static struct irq_domain * __init flipper_pic_init(struct device_node *np) - } - io_base = ioremap(res.start, resource_size(&res)); - -- pr_info("controller at 0x%08x mapped to 0x%p\n", res.start, io_base); -+ pr_info("controller at 0x%pa mapped to 0x%p\n", &res.start, io_base); - - __flipper_quiesce(io_base); - -diff --git a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c -index de10c13de15c6..c6b492ebb7662 100644 ---- a/arch/powerpc/platforms/embedded6xx/hlwd-pic.c -+++ b/arch/powerpc/platforms/embedded6xx/hlwd-pic.c -@@ -173,7 +173,7 @@ static struct irq_domain *hlwd_pic_init(struct device_node *np) - return NULL; - } - -- pr_info("controller at 0x%08x mapped to 0x%p\n", res.start, io_base); -+ pr_info("controller at 0x%pa mapped to 0x%p\n", &res.start, io_base); - - __hlwd_quiesce(io_base); - -diff --git a/arch/powerpc/platforms/embedded6xx/wii.c b/arch/powerpc/platforms/embedded6xx/wii.c -index 67e48b0a164e3..c691453dfd3fe 100644 ---- a/arch/powerpc/platforms/embedded6xx/wii.c -+++ b/arch/powerpc/platforms/embedded6xx/wii.c -@@ -89,8 +89,8 @@ static void __iomem *wii_ioremap_hw_regs(char *name, char *compatible) - - hw_regs = ioremap(res.start, resource_size(&res)); - if (hw_regs) { -- pr_info("%s at 0x%08x mapped to 0x%p\n", name, -- res.start, hw_regs); -+ pr_info("%s at 0x%pa mapped to 0x%p\n", name, -+ &res.start, hw_regs); - } - - out_put: -diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c -index 49f9541954f8d..3664ffcbb313c 100644 ---- a/arch/powerpc/sysdev/tsi108_pci.c -+++ b/arch/powerpc/sysdev/tsi108_pci.c -@@ -216,9 +216,8 @@ int __init tsi108_setup_pci(struct device_node *dev, u32 cfg_phys, int primary) - - (hose)->ops = &tsi108_direct_pci_ops; - -- printk(KERN_INFO "Found tsi108 PCI host bridge at 0x%08x. " -- "Firmware bus number: %d->%d\n", -- rsrc.start, hose->first_busno, hose->last_busno); -+ pr_info("Found tsi108 PCI host bridge at 0x%pa. Firmware bus number: %d->%d\n", -+ &rsrc.start, hose->first_busno, hose->last_busno); - - /* Interpret the "ranges" property */ - /* This also maps the I/O region and sets isa_io/mem_base */ -diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c -index 934ff84844fa0..c633fe4d70398 100644 ---- a/arch/sh/kernel/cpu/sh4/sq.c -+++ b/arch/sh/kernel/cpu/sh4/sq.c -@@ -380,7 +380,7 @@ static int __init sq_api_init(void) - if (unlikely(!sq_cache)) - return ret; - -- sq_bitmap = kzalloc(size, GFP_KERNEL); -+ sq_bitmap = kcalloc(size, sizeof(long), GFP_KERNEL); - if (unlikely(!sq_bitmap)) - goto out; - -diff --git a/arch/sh/kernel/head_32.S b/arch/sh/kernel/head_32.S -index 4adbd4ade3194..b603b7968b388 100644 ---- a/arch/sh/kernel/head_32.S -+++ b/arch/sh/kernel/head_32.S -@@ -64,7 +64,7 @@ ENTRY(_stext) - ldc r0, r6_bank - #endif - --#ifdef CONFIG_OF_FLATTREE -+#ifdef CONFIG_OF_EARLY_FLATTREE - mov r4, r12 ! Store device tree blob pointer in r12 - #endif - -@@ -315,7 +315,7 @@ ENTRY(_stext) - 10: - #endif - --#ifdef CONFIG_OF_FLATTREE -+#ifdef CONFIG_OF_EARLY_FLATTREE - mov.l 8f, r0 ! Make flat device tree available early. - jsr @r0 - mov r12, r4 -@@ -346,7 +346,7 @@ ENTRY(stack_start) - 5: .long start_kernel - 6: .long cpu_init - 7: .long init_thread_union --#if defined(CONFIG_OF_FLATTREE) -+#if defined(CONFIG_OF_EARLY_FLATTREE) - 8: .long sh_fdt_init - #endif - -diff --git a/arch/sh/kernel/nmi_debug.c b/arch/sh/kernel/nmi_debug.c -index 11777867c6f5f..a212b645b4cf8 100644 ---- a/arch/sh/kernel/nmi_debug.c -+++ b/arch/sh/kernel/nmi_debug.c -@@ -49,7 +49,7 @@ static int __init nmi_debug_setup(char *str) - register_die_notifier(&nmi_debug_nb); - - if (*str != '=') -- return 0; -+ return 1; - - for (p = str + 1; *p; p = sep + 1) { - sep = strchr(p, ','); -@@ -70,6 +70,6 @@ static int __init nmi_debug_setup(char *str) - break; - } - -- return 0; -+ return 1; - } - __setup("nmi_debug", nmi_debug_setup); -diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c -index 2c0e0f37a318d..c25ee383cb83a 100644 ---- a/arch/sh/kernel/setup.c -+++ b/arch/sh/kernel/setup.c -@@ -243,7 +243,7 @@ void __init __weak plat_early_device_setup(void) - { - } - --#ifdef CONFIG_OF_FLATTREE -+#ifdef CONFIG_OF_EARLY_FLATTREE - void __ref sh_fdt_init(phys_addr_t dt_phys) - { - static int done = 0; -@@ -330,7 +330,7 @@ void __init setup_arch(char **cmdline_p) - /* Let earlyprintk output early console messages */ - early_platform_driver_probe("earlyprintk", 1, 1); - --#ifdef CONFIG_OF_FLATTREE -+#ifdef CONFIG_OF_EARLY_FLATTREE - #ifdef CONFIG_USE_BUILTIN_DTB - unflatten_and_copy_device_tree(); - #else -diff --git a/arch/sh/math-emu/sfp-util.h b/arch/sh/math-emu/sfp-util.h -index 784f541344f36..bda50762b3d33 100644 ---- a/arch/sh/math-emu/sfp-util.h -+++ b/arch/sh/math-emu/sfp-util.h -@@ -67,7 +67,3 @@ - } while (0) - - #define abort() return 0 -- --#define __BYTE_ORDER __LITTLE_ENDIAN -- -- -diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c -index 68c7340325233..a3b7b2fb04cb0 100644 ---- a/arch/x86/kernel/apic/apic.c -+++ b/arch/x86/kernel/apic/apic.c -@@ -410,10 +410,9 @@ static unsigned int reserve_eilvt_offset(int offset, unsigned int new) - if (vector && !eilvt_entry_is_changeable(vector, new)) - /* may not change if vectors are different */ - return rsvd; -- rsvd = atomic_cmpxchg(&eilvt_offsets[offset], rsvd, new); -- } while (rsvd != new); -+ } while (!atomic_try_cmpxchg(&eilvt_offsets[offset], &rsvd, new)); - -- rsvd &= ~APIC_EILVT_MASKED; -+ rsvd = new & ~APIC_EILVT_MASKED; - if (rsvd && rsvd != vector) - pr_info("LVT offset %d assigned for vector 0x%02x\n", - offset, rsvd); -diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c -index 1622cff009c9a..e4d63392c619e 100644 ---- a/arch/x86/kernel/apic/io_apic.c -+++ b/arch/x86/kernel/apic/io_apic.c -@@ -2455,17 +2455,21 @@ static int io_apic_get_redir_entries(int ioapic) - - unsigned int arch_dynirq_lower_bound(unsigned int from) - { -+ unsigned int ret; -+ - /* - * dmar_alloc_hwirq() may be called before setup_IO_APIC(), so use - * gsi_top if ioapic_dynirq_base hasn't been initialized yet. - */ -- if (!ioapic_initialized) -- return gsi_top; -+ ret = ioapic_dynirq_base ? : gsi_top; -+ - /* -- * For DT enabled machines ioapic_dynirq_base is irrelevant and not -- * updated. So simply return @from if ioapic_dynirq_base == 0. -+ * For DT enabled machines ioapic_dynirq_base is irrelevant and -+ * always 0. gsi_top can be 0 if there is no IO/APIC registered. -+ * 0 is an invalid interrupt number for dynamic allocations. Return -+ * @from instead. - */ -- return ioapic_dynirq_base ? : from; -+ return ret ? : from; - } - - #ifdef CONFIG_X86_32 -diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c -index e6dd6a7e86893..9bd08d2646036 100644 ---- a/arch/x86/kvm/vmx/vmx.c -+++ b/arch/x86/kvm/vmx/vmx.c -@@ -7266,6 +7266,21 @@ static int vmx_check_intercept(struct kvm_vcpu *vcpu, - /* FIXME: produce nested vmexit and return X86EMUL_INTERCEPTED. */ - break; - -+ case x86_intercept_pause: -+ /* -+ * PAUSE is a single-byte NOP with a REPE prefix, i.e. collides -+ * with vanilla NOPs in the emulator. Apply the interception -+ * check only to actual PAUSE instructions. Don't check -+ * PAUSE-loop-exiting, software can't expect a given PAUSE to -+ * exit, i.e. KVM is within its rights to allow L2 to execute -+ * the PAUSE. -+ */ -+ if ((info->rep_prefix != REPE_PREFIX) || -+ !nested_cpu_has2(vmcs12, CPU_BASED_PAUSE_EXITING)) -+ return X86EMUL_CONTINUE; -+ -+ break; -+ - /* TODO: check more intercepts... */ - default: - break; -diff --git a/crypto/drbg.c b/crypto/drbg.c -index 9329d9dcc210f..df80752fb649b 100644 ---- a/crypto/drbg.c -+++ b/crypto/drbg.c -@@ -1515,6 +1515,14 @@ static int drbg_prepare_hrng(struct drbg_state *drbg) - return 0; - - drbg->jent = crypto_alloc_rng("jitterentropy_rng", 0, 0); -+ if (IS_ERR(drbg->jent)) { -+ const int err = PTR_ERR(drbg->jent); -+ -+ drbg->jent = NULL; -+ if (fips_enabled) -+ return err; -+ pr_info("DRBG: Continuing without Jitter RNG\n"); -+ } - - return 0; - } -@@ -1570,14 +1578,6 @@ static int drbg_instantiate(struct drbg_state *drbg, struct drbg_string *pers, - if (ret) - goto free_everything; - -- if (IS_ERR(drbg->jent)) { -- ret = PTR_ERR(drbg->jent); -- drbg->jent = NULL; -- if (fips_enabled || ret != -ENOENT) -- goto free_everything; -- pr_info("DRBG: Continuing without Jitter RNG\n"); -- } -- - reseed = false; - } - -diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c -index 7000c836951c5..980e9a76e1723 100644 ---- a/drivers/base/cpu.c -+++ b/drivers/base/cpu.c -@@ -491,7 +491,8 @@ static const struct attribute_group *cpu_root_attr_groups[] = { - bool cpu_is_hotpluggable(unsigned cpu) - { - struct device *dev = get_cpu_device(cpu); -- return dev && container_of(dev, struct cpu, dev)->hotpluggable; -+ return dev && container_of(dev, struct cpu, dev)->hotpluggable -+ && tick_nohz_cpu_hotpluggable(cpu); - } - EXPORT_SYMBOL_GPL(cpu_is_hotpluggable); - -diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c -index 4f63a8bc72604..edb791354421b 100644 ---- a/drivers/base/power/domain.c -+++ b/drivers/base/power/domain.c -@@ -263,18 +263,18 @@ static int _genpd_reeval_performance_state(struct generic_pm_domain *genpd, - /* - * Traverse all sub-domains within the domain. This can be - * done without any additional locking as the link->performance_state -- * field is protected by the master genpd->lock, which is already taken. -+ * field is protected by the parent genpd->lock, which is already taken. - * - * Also note that link->performance_state (subdomain's performance state -- * requirement to master domain) is different from -- * link->slave->performance_state (current performance state requirement -+ * requirement to parent domain) is different from -+ * link->child->performance_state (current performance state requirement - * of the devices/sub-domains of the subdomain) and so can have a - * different value. - * - * Note that we also take vote from powered-off sub-domains into account - * as the same is done for devices right now. - */ -- list_for_each_entry(link, &genpd->master_links, master_node) { -+ list_for_each_entry(link, &genpd->parent_links, parent_node) { - if (link->performance_state > state) - state = link->performance_state; - } -@@ -285,40 +285,40 @@ static int _genpd_reeval_performance_state(struct generic_pm_domain *genpd, - static int _genpd_set_performance_state(struct generic_pm_domain *genpd, - unsigned int state, int depth) - { -- struct generic_pm_domain *master; -+ struct generic_pm_domain *parent; - struct gpd_link *link; -- int master_state, ret; -+ int parent_state, ret; - - if (state == genpd->performance_state) - return 0; - -- /* Propagate to masters of genpd */ -- list_for_each_entry(link, &genpd->slave_links, slave_node) { -- master = link->master; -+ /* Propagate to parents of genpd */ -+ list_for_each_entry(link, &genpd->child_links, child_node) { -+ parent = link->parent; - -- if (!master->set_performance_state) -+ if (!parent->set_performance_state) - continue; - -- /* Find master's performance state */ -+ /* Find parent's performance state */ - ret = dev_pm_opp_xlate_performance_state(genpd->opp_table, -- master->opp_table, -+ parent->opp_table, - state); - if (unlikely(ret < 0)) - goto err; - -- master_state = ret; -+ parent_state = ret; - -- genpd_lock_nested(master, depth + 1); -+ genpd_lock_nested(parent, depth + 1); - - link->prev_performance_state = link->performance_state; -- link->performance_state = master_state; -- master_state = _genpd_reeval_performance_state(master, -- master_state); -- ret = _genpd_set_performance_state(master, master_state, depth + 1); -+ link->performance_state = parent_state; -+ parent_state = _genpd_reeval_performance_state(parent, -+ parent_state); -+ ret = _genpd_set_performance_state(parent, parent_state, depth + 1); - if (ret) - link->performance_state = link->prev_performance_state; - -- genpd_unlock(master); -+ genpd_unlock(parent); - - if (ret) - goto err; -@@ -333,26 +333,26 @@ static int _genpd_set_performance_state(struct generic_pm_domain *genpd, - - err: - /* Encountered an error, lets rollback */ -- list_for_each_entry_continue_reverse(link, &genpd->slave_links, -- slave_node) { -- master = link->master; -+ list_for_each_entry_continue_reverse(link, &genpd->child_links, -+ child_node) { -+ parent = link->parent; - -- if (!master->set_performance_state) -+ if (!parent->set_performance_state) - continue; - -- genpd_lock_nested(master, depth + 1); -+ genpd_lock_nested(parent, depth + 1); - -- master_state = link->prev_performance_state; -- link->performance_state = master_state; -+ parent_state = link->prev_performance_state; -+ link->performance_state = parent_state; - -- master_state = _genpd_reeval_performance_state(master, -- master_state); -- if (_genpd_set_performance_state(master, master_state, depth + 1)) { -+ parent_state = _genpd_reeval_performance_state(parent, -+ parent_state); -+ if (_genpd_set_performance_state(parent, parent_state, depth + 1)) { - pr_err("%s: Failed to roll back to %d performance state\n", -- master->name, master_state); -+ parent->name, parent_state); - } - -- genpd_unlock(master); -+ genpd_unlock(parent); - } - - return ret; -@@ -552,7 +552,7 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, - - /* - * If sd_count > 0 at this point, one of the subdomains hasn't -- * managed to call genpd_power_on() for the master yet after -+ * managed to call genpd_power_on() for the parent yet after - * incrementing it. In that case genpd_power_on() will wait - * for us to drop the lock, so we can call .power_off() and let - * the genpd_power_on() restore power for us (this shouldn't -@@ -566,22 +566,22 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, - genpd->status = GPD_STATE_POWER_OFF; - genpd_update_accounting(genpd); - -- list_for_each_entry(link, &genpd->slave_links, slave_node) { -- genpd_sd_counter_dec(link->master); -- genpd_lock_nested(link->master, depth + 1); -- genpd_power_off(link->master, false, depth + 1); -- genpd_unlock(link->master); -+ list_for_each_entry(link, &genpd->child_links, child_node) { -+ genpd_sd_counter_dec(link->parent); -+ genpd_lock_nested(link->parent, depth + 1); -+ genpd_power_off(link->parent, false, depth + 1); -+ genpd_unlock(link->parent); - } - - return 0; - } - - /** -- * genpd_power_on - Restore power to a given PM domain and its masters. -+ * genpd_power_on - Restore power to a given PM domain and its parents. - * @genpd: PM domain to power up. - * @depth: nesting count for lockdep. - * -- * Restore power to @genpd and all of its masters so that it is possible to -+ * Restore power to @genpd and all of its parents so that it is possible to - * resume a device belonging to it. - */ - static int genpd_power_on(struct generic_pm_domain *genpd, unsigned int depth) -@@ -594,20 +594,20 @@ static int genpd_power_on(struct generic_pm_domain *genpd, unsigned int depth) - - /* - * The list is guaranteed not to change while the loop below is being -- * executed, unless one of the masters' .power_on() callbacks fiddles -+ * executed, unless one of the parents' .power_on() callbacks fiddles - * with it. - */ -- list_for_each_entry(link, &genpd->slave_links, slave_node) { -- struct generic_pm_domain *master = link->master; -+ list_for_each_entry(link, &genpd->child_links, child_node) { -+ struct generic_pm_domain *parent = link->parent; - -- genpd_sd_counter_inc(master); -+ genpd_sd_counter_inc(parent); - -- genpd_lock_nested(master, depth + 1); -- ret = genpd_power_on(master, depth + 1); -- genpd_unlock(master); -+ genpd_lock_nested(parent, depth + 1); -+ ret = genpd_power_on(parent, depth + 1); -+ genpd_unlock(parent); - - if (ret) { -- genpd_sd_counter_dec(master); -+ genpd_sd_counter_dec(parent); - goto err; - } - } -@@ -623,12 +623,12 @@ static int genpd_power_on(struct generic_pm_domain *genpd, unsigned int depth) - - err: - list_for_each_entry_continue_reverse(link, -- &genpd->slave_links, -- slave_node) { -- genpd_sd_counter_dec(link->master); -- genpd_lock_nested(link->master, depth + 1); -- genpd_power_off(link->master, false, depth + 1); -- genpd_unlock(link->master); -+ &genpd->child_links, -+ child_node) { -+ genpd_sd_counter_dec(link->parent); -+ genpd_lock_nested(link->parent, depth + 1); -+ genpd_power_off(link->parent, false, depth + 1); -+ genpd_unlock(link->parent); - } - - return ret; -@@ -943,13 +943,13 @@ static bool genpd_present(const struct generic_pm_domain *genpd) - #ifdef CONFIG_PM_SLEEP - - /** -- * genpd_sync_power_off - Synchronously power off a PM domain and its masters. -+ * genpd_sync_power_off - Synchronously power off a PM domain and its parents. - * @genpd: PM domain to power off, if possible. - * @use_lock: use the lock. - * @depth: nesting count for lockdep. - * - * Check if the given PM domain can be powered off (during system suspend or -- * hibernation) and do that if so. Also, in that case propagate to its masters. -+ * hibernation) and do that if so. Also, in that case propagate to its parents. - * - * This function is only called in "noirq" and "syscore" stages of system power - * transitions. The "noirq" callbacks may be executed asynchronously, thus in -@@ -974,21 +974,21 @@ static void genpd_sync_power_off(struct generic_pm_domain *genpd, bool use_lock, - - genpd->status = GPD_STATE_POWER_OFF; - -- list_for_each_entry(link, &genpd->slave_links, slave_node) { -- genpd_sd_counter_dec(link->master); -+ list_for_each_entry(link, &genpd->child_links, child_node) { -+ genpd_sd_counter_dec(link->parent); - - if (use_lock) -- genpd_lock_nested(link->master, depth + 1); -+ genpd_lock_nested(link->parent, depth + 1); - -- genpd_sync_power_off(link->master, use_lock, depth + 1); -+ genpd_sync_power_off(link->parent, use_lock, depth + 1); - - if (use_lock) -- genpd_unlock(link->master); -+ genpd_unlock(link->parent); - } - } - - /** -- * genpd_sync_power_on - Synchronously power on a PM domain and its masters. -+ * genpd_sync_power_on - Synchronously power on a PM domain and its parents. - * @genpd: PM domain to power on. - * @use_lock: use the lock. - * @depth: nesting count for lockdep. -@@ -1005,16 +1005,16 @@ static void genpd_sync_power_on(struct generic_pm_domain *genpd, bool use_lock, - if (genpd_status_on(genpd)) - return; - -- list_for_each_entry(link, &genpd->slave_links, slave_node) { -- genpd_sd_counter_inc(link->master); -+ list_for_each_entry(link, &genpd->child_links, child_node) { -+ genpd_sd_counter_inc(link->parent); - - if (use_lock) -- genpd_lock_nested(link->master, depth + 1); -+ genpd_lock_nested(link->parent, depth + 1); - -- genpd_sync_power_on(link->master, use_lock, depth + 1); -+ genpd_sync_power_on(link->parent, use_lock, depth + 1); - - if (use_lock) -- genpd_unlock(link->master); -+ genpd_unlock(link->parent); - } - - _genpd_power_on(genpd, false); -@@ -1454,12 +1454,12 @@ static void genpd_update_cpumask(struct generic_pm_domain *genpd, - if (!genpd_is_cpu_domain(genpd)) - return; - -- list_for_each_entry(link, &genpd->slave_links, slave_node) { -- struct generic_pm_domain *master = link->master; -+ list_for_each_entry(link, &genpd->child_links, child_node) { -+ struct generic_pm_domain *parent = link->parent; - -- genpd_lock_nested(master, depth + 1); -- genpd_update_cpumask(master, cpu, set, depth + 1); -- genpd_unlock(master); -+ genpd_lock_nested(parent, depth + 1); -+ genpd_update_cpumask(parent, cpu, set, depth + 1); -+ genpd_unlock(parent); - } - - if (set) -@@ -1647,17 +1647,17 @@ static int genpd_add_subdomain(struct generic_pm_domain *genpd, - goto out; - } - -- list_for_each_entry(itr, &genpd->master_links, master_node) { -- if (itr->slave == subdomain && itr->master == genpd) { -+ list_for_each_entry(itr, &genpd->parent_links, parent_node) { -+ if (itr->child == subdomain && itr->parent == genpd) { - ret = -EINVAL; - goto out; - } - } - -- link->master = genpd; -- list_add_tail(&link->master_node, &genpd->master_links); -- link->slave = subdomain; -- list_add_tail(&link->slave_node, &subdomain->slave_links); -+ link->parent = genpd; -+ list_add_tail(&link->parent_node, &genpd->parent_links); -+ link->child = subdomain; -+ list_add_tail(&link->child_node, &subdomain->child_links); - if (genpd_status_on(subdomain)) - genpd_sd_counter_inc(genpd); - -@@ -1671,7 +1671,7 @@ static int genpd_add_subdomain(struct generic_pm_domain *genpd, - - /** - * pm_genpd_add_subdomain - Add a subdomain to an I/O PM domain. -- * @genpd: Master PM domain to add the subdomain to. -+ * @genpd: Leader PM domain to add the subdomain to. - * @subdomain: Subdomain to be added. - */ - int pm_genpd_add_subdomain(struct generic_pm_domain *genpd, -@@ -1689,7 +1689,7 @@ EXPORT_SYMBOL_GPL(pm_genpd_add_subdomain); - - /** - * pm_genpd_remove_subdomain - Remove a subdomain from an I/O PM domain. -- * @genpd: Master PM domain to remove the subdomain from. -+ * @genpd: Leader PM domain to remove the subdomain from. - * @subdomain: Subdomain to be removed. - */ - int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, -@@ -1704,19 +1704,19 @@ int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, - genpd_lock(subdomain); - genpd_lock_nested(genpd, SINGLE_DEPTH_NESTING); - -- if (!list_empty(&subdomain->master_links) || subdomain->device_count) { -+ if (!list_empty(&subdomain->parent_links) || subdomain->device_count) { - pr_warn("%s: unable to remove subdomain %s\n", - genpd->name, subdomain->name); - ret = -EBUSY; - goto out; - } - -- list_for_each_entry_safe(link, l, &genpd->master_links, master_node) { -- if (link->slave != subdomain) -+ list_for_each_entry_safe(link, l, &genpd->parent_links, parent_node) { -+ if (link->child != subdomain) - continue; - -- list_del(&link->master_node); -- list_del(&link->slave_node); -+ list_del(&link->parent_node); -+ list_del(&link->child_node); - kfree(link); - if (genpd_status_on(subdomain)) - genpd_sd_counter_dec(genpd); -@@ -1781,8 +1781,8 @@ int pm_genpd_init(struct generic_pm_domain *genpd, - if (IS_ERR_OR_NULL(genpd)) - return -EINVAL; - -- INIT_LIST_HEAD(&genpd->master_links); -- INIT_LIST_HEAD(&genpd->slave_links); -+ INIT_LIST_HEAD(&genpd->parent_links); -+ INIT_LIST_HEAD(&genpd->child_links); - INIT_LIST_HEAD(&genpd->dev_list); - genpd_lock_init(genpd); - genpd->gov = gov; -@@ -1858,15 +1858,15 @@ static int genpd_remove(struct generic_pm_domain *genpd) - return -EBUSY; - } - -- if (!list_empty(&genpd->master_links) || genpd->device_count) { -+ if (!list_empty(&genpd->parent_links) || genpd->device_count) { - genpd_unlock(genpd); - pr_err("%s: unable to remove %s\n", __func__, genpd->name); - return -EBUSY; - } - -- list_for_each_entry_safe(link, l, &genpd->slave_links, slave_node) { -- list_del(&link->master_node); -- list_del(&link->slave_node); -+ list_for_each_entry_safe(link, l, &genpd->child_links, child_node) { -+ list_del(&link->parent_node); -+ list_del(&link->child_node); - kfree(link); - } - -@@ -2793,12 +2793,12 @@ static int genpd_summary_one(struct seq_file *s, - - /* - * Modifications on the list require holding locks on both -- * master and slave, so we are safe. -+ * parent and child, so we are safe. - * Also genpd->name is immutable. - */ -- list_for_each_entry(link, &genpd->master_links, master_node) { -- seq_printf(s, "%s", link->slave->name); -- if (!list_is_last(&link->master_node, &genpd->master_links)) -+ list_for_each_entry(link, &genpd->parent_links, parent_node) { -+ seq_printf(s, "%s", link->child->name); -+ if (!list_is_last(&link->parent_node, &genpd->parent_links)) - seq_puts(s, ", "); - } - -@@ -2826,7 +2826,7 @@ static int summary_show(struct seq_file *s, void *data) - struct generic_pm_domain *genpd; - int ret = 0; - -- seq_puts(s, "domain status slaves\n"); -+ seq_puts(s, "domain status children\n"); - seq_puts(s, " /device runtime status\n"); - seq_puts(s, "----------------------------------------------------------------------\n"); - -@@ -2881,8 +2881,8 @@ static int sub_domains_show(struct seq_file *s, void *data) - if (ret) - return -ERESTARTSYS; - -- list_for_each_entry(link, &genpd->master_links, master_node) -- seq_printf(s, "%s\n", link->slave->name); -+ list_for_each_entry(link, &genpd->parent_links, parent_node) -+ seq_printf(s, "%s\n", link->child->name); - - genpd_unlock(genpd); - return ret; -diff --git a/drivers/base/power/domain_governor.c b/drivers/base/power/domain_governor.c -index daa8c7689f7e6..490ed7deb99a7 100644 ---- a/drivers/base/power/domain_governor.c -+++ b/drivers/base/power/domain_governor.c -@@ -135,8 +135,8 @@ static bool __default_power_down_ok(struct dev_pm_domain *pd, - * - * All subdomains have been powered off already at this point. - */ -- list_for_each_entry(link, &genpd->master_links, master_node) { -- struct generic_pm_domain *sd = link->slave; -+ list_for_each_entry(link, &genpd->parent_links, parent_node) { -+ struct generic_pm_domain *sd = link->child; - s64 sd_max_off_ns = sd->max_off_time_ns; - - if (sd_max_off_ns < 0) -@@ -217,13 +217,13 @@ static bool default_power_down_ok(struct dev_pm_domain *pd) - } - - /* -- * We have to invalidate the cached results for the masters, so -+ * We have to invalidate the cached results for the parents, so - * use the observation that default_power_down_ok() is not -- * going to be called for any master until this instance -+ * going to be called for any parent until this instance - * returns. - */ -- list_for_each_entry(link, &genpd->slave_links, slave_node) -- link->master->max_off_time_changed = true; -+ list_for_each_entry(link, &genpd->child_links, child_node) -+ link->parent->max_off_time_changed = true; - - genpd->max_off_time_ns = -1; - genpd->max_off_time_changed = false; -diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c -index 2b3103c308573..d94f41a0abbee 100644 ---- a/drivers/block/drbd/drbd_receiver.c -+++ b/drivers/block/drbd/drbd_receiver.c -@@ -1298,7 +1298,7 @@ static void submit_one_flush(struct drbd_device *device, struct issue_flush_cont - bio_set_dev(bio, device->ldev->backing_bdev); - bio->bi_private = octx; - bio->bi_end_io = one_flush_endio; -- bio->bi_opf = REQ_OP_FLUSH | REQ_PREFLUSH; -+ bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH; - - device->flush_jif = jiffies; - set_bit(FLUSH_PENDING, &device->flags); -diff --git a/drivers/bluetooth/btsdio.c b/drivers/bluetooth/btsdio.c -index 81125fb180351..fd9571d5fdac9 100644 ---- a/drivers/bluetooth/btsdio.c -+++ b/drivers/bluetooth/btsdio.c -@@ -343,7 +343,6 @@ static void btsdio_remove(struct sdio_func *func) - - BT_DBG("func %p", func); - -- cancel_work_sync(&data->work); - if (!data) - return; - -diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c -index d5f068a10a5a0..2907b0bca1af0 100644 ---- a/drivers/char/ipmi/ipmi_ssif.c -+++ b/drivers/char/ipmi/ipmi_ssif.c -@@ -562,8 +562,10 @@ static void retry_timeout(struct timer_list *t) - - if (waiting) - start_get(ssif_info); -- if (resend) -+ if (resend) { - start_resend(ssif_info); -+ ssif_inc_stat(ssif_info, send_retries); -+ } - } - - static void watch_timeout(struct timer_list *t) -@@ -789,9 +791,9 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result, - } else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2 - || data[1] != IPMI_GET_MSG_FLAGS_CMD) { - /* -- * Don't abort here, maybe it was a queued -- * response to a previous command. -+ * Recv error response, give up. - */ -+ ssif_info->ssif_state = SSIF_IDLE; - ipmi_ssif_unlock_cond(ssif_info, flags); - dev_warn(&ssif_info->client->dev, - "Invalid response getting flags: %x %x\n", -diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c -index 70f7859942287..cb0660304e480 100644 ---- a/drivers/char/tpm/tpm_tis_core.c -+++ b/drivers/char/tpm/tpm_tis_core.c -@@ -613,7 +613,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id) - return IRQ_HANDLED; - } - --static int tpm_tis_gen_interrupt(struct tpm_chip *chip) -+static void tpm_tis_gen_interrupt(struct tpm_chip *chip) - { - const char *desc = "attempting to generate an interrupt"; - u32 cap2; -@@ -622,7 +622,7 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip) - - ret = request_locality(chip, 0); - if (ret < 0) -- return ret; -+ return; - - if (chip->flags & TPM_CHIP_FLAG_TPM2) - ret = tpm2_get_tpm_pt(chip, 0x100, &cap2, desc); -@@ -630,8 +630,6 @@ static int tpm_tis_gen_interrupt(struct tpm_chip *chip) - ret = tpm1_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, desc, 0); - - release_locality(chip, 0); -- -- return ret; - } - - /* Register the IRQ and issue a command that will cause an interrupt. If an -@@ -661,42 +659,37 @@ static int tpm_tis_probe_irq_single(struct tpm_chip *chip, u32 intmask, - - rc = tpm_tis_write8(priv, TPM_INT_VECTOR(priv->locality), irq); - if (rc < 0) -- return rc; -+ goto restore_irqs; - - rc = tpm_tis_read32(priv, TPM_INT_STATUS(priv->locality), &int_status); - if (rc < 0) -- return rc; -+ goto restore_irqs; - - /* Clear all existing */ - rc = tpm_tis_write32(priv, TPM_INT_STATUS(priv->locality), int_status); - if (rc < 0) -- return rc; -- -+ goto restore_irqs; - /* Turn on */ - rc = tpm_tis_write32(priv, TPM_INT_ENABLE(priv->locality), - intmask | TPM_GLOBAL_INT_ENABLE); - if (rc < 0) -- return rc; -+ goto restore_irqs; - - priv->irq_tested = false; - - /* Generate an interrupt by having the core call through to - * tpm_tis_send - */ -- rc = tpm_tis_gen_interrupt(chip); -- if (rc < 0) -- return rc; -+ tpm_tis_gen_interrupt(chip); - -+restore_irqs: - /* tpm_tis_send will either confirm the interrupt is working or it - * will call disable_irq which undoes all of the above. - */ - if (!(chip->flags & TPM_CHIP_FLAG_IRQ)) { -- rc = tpm_tis_write8(priv, original_int_vec, -- TPM_INT_VECTOR(priv->locality)); -- if (rc < 0) -- return rc; -- -- return 1; -+ tpm_tis_write8(priv, original_int_vec, -+ TPM_INT_VECTOR(priv->locality)); -+ return -1; - } - - return 0; -diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c -index 2ef819606c417..1a4e6340f95ce 100644 ---- a/drivers/clk/clk-conf.c -+++ b/drivers/clk/clk-conf.c -@@ -33,9 +33,12 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier) - else - return rc; - } -- if (clkspec.np == node && !clk_supplier) -+ if (clkspec.np == node && !clk_supplier) { -+ of_node_put(clkspec.np); - return 0; -+ } - pclk = of_clk_get_from_provider(&clkspec); -+ of_node_put(clkspec.np); - if (IS_ERR(pclk)) { - if (PTR_ERR(pclk) != -EPROBE_DEFER) - pr_warn("clk: couldn't get parent clock %d for %pOF\n", -@@ -48,10 +51,12 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier) - if (rc < 0) - goto err; - if (clkspec.np == node && !clk_supplier) { -+ of_node_put(clkspec.np); - rc = 0; - goto err; - } - clk = of_clk_get_from_provider(&clkspec); -+ of_node_put(clkspec.np); - if (IS_ERR(clk)) { - if (PTR_ERR(clk) != -EPROBE_DEFER) - pr_warn("clk: couldn't get assigned clock %d for %pOF\n", -@@ -93,10 +98,13 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier) - else - return rc; - } -- if (clkspec.np == node && !clk_supplier) -+ if (clkspec.np == node && !clk_supplier) { -+ of_node_put(clkspec.np); - return 0; -+ } - - clk = of_clk_get_from_provider(&clkspec); -+ of_node_put(clkspec.np); - if (IS_ERR(clk)) { - if (PTR_ERR(clk) != -EPROBE_DEFER) - pr_warn("clk: couldn't get clock %d for %pOF\n", -diff --git a/drivers/clk/rockchip/clk-rk3399.c b/drivers/clk/rockchip/clk-rk3399.c -index ce1d2446f142f..1a75cc9f68efd 100644 ---- a/drivers/clk/rockchip/clk-rk3399.c -+++ b/drivers/clk/rockchip/clk-rk3399.c -@@ -1259,7 +1259,7 @@ static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = { - RK3399_CLKSEL_CON(56), 6, 2, MFLAGS, - RK3399_CLKGATE_CON(10), 7, GFLAGS), - -- COMPOSITE_NOGATE(SCLK_CIF_OUT, "clk_cifout", mux_clk_cif_p, 0, -+ COMPOSITE_NOGATE(SCLK_CIF_OUT, "clk_cifout", mux_clk_cif_p, CLK_SET_RATE_PARENT, - RK3399_CLKSEL_CON(56), 5, 1, MFLAGS, 0, 5, DFLAGS), - - /* gic */ -diff --git a/drivers/clocksource/timer-davinci.c b/drivers/clocksource/timer-davinci.c -index e421946a91c5a..3dc0c6ceed027 100644 ---- a/drivers/clocksource/timer-davinci.c -+++ b/drivers/clocksource/timer-davinci.c -@@ -18,7 +18,7 @@ - #include - - #undef pr_fmt --#define pr_fmt(fmt) "%s: " fmt "\n", __func__ -+#define pr_fmt(fmt) "%s: " fmt, __func__ - - #define DAVINCI_TIMER_REG_TIM12 0x10 - #define DAVINCI_TIMER_REG_TIM34 0x14 -@@ -250,30 +250,32 @@ int __init davinci_timer_register(struct clk *clk, - - rv = clk_prepare_enable(clk); - if (rv) { -- pr_err("Unable to prepare and enable the timer clock"); -+ pr_err("Unable to prepare and enable the timer clock\n"); - return rv; - } - - if (!request_mem_region(timer_cfg->reg.start, - resource_size(&timer_cfg->reg), - "davinci-timer")) { -- pr_err("Unable to request memory region"); -- return -EBUSY; -+ pr_err("Unable to request memory region\n"); -+ rv = -EBUSY; -+ goto exit_clk_disable; - } - - base = ioremap(timer_cfg->reg.start, resource_size(&timer_cfg->reg)); - if (!base) { -- pr_err("Unable to map the register range"); -- return -ENOMEM; -+ pr_err("Unable to map the register range\n"); -+ rv = -ENOMEM; -+ goto exit_mem_region; - } - - davinci_timer_init(base); - tick_rate = clk_get_rate(clk); - -- clockevent = kzalloc(sizeof(*clockevent), GFP_KERNEL | __GFP_NOFAIL); -+ clockevent = kzalloc(sizeof(*clockevent), GFP_KERNEL); - if (!clockevent) { -- pr_err("Error allocating memory for clockevent data"); -- return -ENOMEM; -+ rv = -ENOMEM; -+ goto exit_iounmap_base; - } - - clockevent->dev.name = "tim12"; -@@ -298,8 +300,8 @@ int __init davinci_timer_register(struct clk *clk, - davinci_timer_irq_timer, IRQF_TIMER, - "clockevent/tim12", clockevent); - if (rv) { -- pr_err("Unable to request the clockevent interrupt"); -- return rv; -+ pr_err("Unable to request the clockevent interrupt\n"); -+ goto exit_free_clockevent; - } - - davinci_clocksource.dev.rating = 300; -@@ -325,14 +327,28 @@ int __init davinci_timer_register(struct clk *clk, - - rv = clocksource_register_hz(&davinci_clocksource.dev, tick_rate); - if (rv) { -- pr_err("Unable to register clocksource"); -- return rv; -+ pr_err("Unable to register clocksource\n"); -+ goto exit_free_irq; - } - - sched_clock_register(davinci_timer_read_sched_clock, - DAVINCI_TIMER_CLKSRC_BITS, tick_rate); - - return 0; -+ -+exit_free_irq: -+ free_irq(timer_cfg->irq[DAVINCI_TIMER_CLOCKEVENT_IRQ].start, -+ clockevent); -+exit_free_clockevent: -+ kfree(clockevent); -+exit_iounmap_base: -+ iounmap(base); -+exit_mem_region: -+ release_mem_region(timer_cfg->reg.start, -+ resource_size(&timer_cfg->reg)); -+exit_clk_disable: -+ clk_disable_unprepare(clk); -+ return rv; - } - - static int __init of_davinci_timer_register(struct device_node *np) -@@ -343,20 +359,20 @@ static int __init of_davinci_timer_register(struct device_node *np) - - rv = of_address_to_resource(np, 0, &timer_cfg.reg); - if (rv) { -- pr_err("Unable to get the register range for timer"); -+ pr_err("Unable to get the register range for timer\n"); - return rv; - } - - rv = of_irq_to_resource_table(np, timer_cfg.irq, - DAVINCI_TIMER_NUM_IRQS); - if (rv != DAVINCI_TIMER_NUM_IRQS) { -- pr_err("Unable to get the interrupts for timer"); -+ pr_err("Unable to get the interrupts for timer\n"); - return rv; - } - - clk = of_clk_get(np, 0); - if (IS_ERR(clk)) { -- pr_err("Unable to get the timer clock"); -+ pr_err("Unable to get the timer clock\n"); - return PTR_ERR(clk); - } - -diff --git a/drivers/counter/104-quad-8.c b/drivers/counter/104-quad-8.c -index f261a57af1c01..919d6f1ced8de 100644 ---- a/drivers/counter/104-quad-8.c -+++ b/drivers/counter/104-quad-8.c -@@ -57,10 +57,6 @@ struct quad8_iio { - - #define QUAD8_REG_CHAN_OP 0x11 - #define QUAD8_REG_INDEX_INPUT_LEVELS 0x16 --/* Borrow Toggle flip-flop */ --#define QUAD8_FLAG_BT BIT(0) --/* Carry Toggle flip-flop */ --#define QUAD8_FLAG_CT BIT(1) - /* Error flag */ - #define QUAD8_FLAG_E BIT(4) - /* Up/Down flag */ -@@ -97,9 +93,6 @@ static int quad8_read_raw(struct iio_dev *indio_dev, - { - struct quad8_iio *const priv = iio_priv(indio_dev); - const int base_offset = priv->base + 2 * chan->channel; -- unsigned int flags; -- unsigned int borrow; -- unsigned int carry; - int i; - - switch (mask) { -@@ -110,12 +103,7 @@ static int quad8_read_raw(struct iio_dev *indio_dev, - return IIO_VAL_INT; - } - -- flags = inb(base_offset + 1); -- borrow = flags & QUAD8_FLAG_BT; -- carry = !!(flags & QUAD8_FLAG_CT); -- -- /* Borrow XOR Carry effectively doubles count range */ -- *val = (borrow ^ carry) << 24; -+ *val = 0; - - mutex_lock(&priv->lock); - -@@ -639,19 +627,9 @@ static int quad8_count_read(struct counter_device *counter, - { - struct quad8_iio *const priv = counter->priv; - const int base_offset = priv->base + 2 * count->id; -- unsigned int flags; -- unsigned int borrow; -- unsigned int carry; -- unsigned long position; -+ unsigned long position = 0; - int i; - -- flags = inb(base_offset + 1); -- borrow = flags & QUAD8_FLAG_BT; -- carry = !!(flags & QUAD8_FLAG_CT); -- -- /* Borrow XOR Carry effectively doubles count range */ -- position = (unsigned long)(borrow ^ carry) << 24; -- - mutex_lock(&priv->lock); - - /* Reset Byte Pointer; transfer Counter to Output Latch */ -@@ -1204,8 +1182,8 @@ static ssize_t quad8_count_ceiling_read(struct counter_device *counter, - - mutex_unlock(&priv->lock); - -- /* By default 0x1FFFFFF (25 bits unsigned) is maximum count */ -- return sprintf(buf, "33554431\n"); -+ /* By default 0xFFFFFF (24 bits unsigned) is maximum count */ -+ return sprintf(buf, "16777215\n"); - } - - static ssize_t quad8_count_ceiling_write(struct counter_device *counter, -diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c -index 9534f52210af0..04638e1833513 100644 ---- a/drivers/crypto/inside-secure/safexcel.c -+++ b/drivers/crypto/inside-secure/safexcel.c -@@ -1090,11 +1090,12 @@ static irqreturn_t safexcel_irq_ring_thread(int irq, void *data) - - static int safexcel_request_ring_irq(void *pdev, int irqid, - int is_pci_dev, -+ int ring_id, - irq_handler_t handler, - irq_handler_t threaded_handler, - struct safexcel_ring_irq_data *ring_irq_priv) - { -- int ret, irq; -+ int ret, irq, cpu; - struct device *dev; - - if (IS_ENABLED(CONFIG_PCI) && is_pci_dev) { -@@ -1132,6 +1133,10 @@ static int safexcel_request_ring_irq(void *pdev, int irqid, - return ret; - } - -+ /* Set affinity */ -+ cpu = cpumask_local_spread(ring_id, NUMA_NO_NODE); -+ irq_set_affinity_hint(irq, get_cpu_mask(cpu)); -+ - return irq; - } - -@@ -1462,19 +1467,23 @@ static int safexcel_probe_generic(void *pdev, - &priv->ring[i].rdr); - if (ret) { - dev_err(dev, "Failed to initialize rings\n"); -- return ret; -+ goto err_cleanup_rings; - } - - priv->ring[i].rdr_req = devm_kcalloc(dev, - EIP197_DEFAULT_RING_SIZE, - sizeof(*priv->ring[i].rdr_req), - GFP_KERNEL); -- if (!priv->ring[i].rdr_req) -- return -ENOMEM; -+ if (!priv->ring[i].rdr_req) { -+ ret = -ENOMEM; -+ goto err_cleanup_rings; -+ } - - ring_irq = devm_kzalloc(dev, sizeof(*ring_irq), GFP_KERNEL); -- if (!ring_irq) -- return -ENOMEM; -+ if (!ring_irq) { -+ ret = -ENOMEM; -+ goto err_cleanup_rings; -+ } - - ring_irq->priv = priv; - ring_irq->ring = i; -@@ -1482,14 +1491,17 @@ static int safexcel_probe_generic(void *pdev, - irq = safexcel_request_ring_irq(pdev, - EIP197_IRQ_NUMBER(i, is_pci_dev), - is_pci_dev, -+ i, - safexcel_irq_ring, - safexcel_irq_ring_thread, - ring_irq); - if (irq < 0) { - dev_err(dev, "Failed to get IRQ ID for ring %d\n", i); -- return irq; -+ ret = irq; -+ goto err_cleanup_rings; - } - -+ priv->ring[i].irq = irq; - priv->ring[i].work_data.priv = priv; - priv->ring[i].work_data.ring = i; - INIT_WORK(&priv->ring[i].work_data.work, -@@ -1498,8 +1510,10 @@ static int safexcel_probe_generic(void *pdev, - snprintf(wq_name, 9, "wq_ring%d", i); - priv->ring[i].workqueue = - create_singlethread_workqueue(wq_name); -- if (!priv->ring[i].workqueue) -- return -ENOMEM; -+ if (!priv->ring[i].workqueue) { -+ ret = -ENOMEM; -+ goto err_cleanup_rings; -+ } - - priv->ring[i].requests = 0; - priv->ring[i].busy = false; -@@ -1516,16 +1530,26 @@ static int safexcel_probe_generic(void *pdev, - ret = safexcel_hw_init(priv); - if (ret) { - dev_err(dev, "HW init failed (%d)\n", ret); -- return ret; -+ goto err_cleanup_rings; - } - - ret = safexcel_register_algorithms(priv); - if (ret) { - dev_err(dev, "Failed to register algorithms (%d)\n", ret); -- return ret; -+ goto err_cleanup_rings; - } - - return 0; -+ -+err_cleanup_rings: -+ for (i = 0; i < priv->config.rings; i++) { -+ if (priv->ring[i].irq) -+ irq_set_affinity_hint(priv->ring[i].irq, NULL); -+ if (priv->ring[i].workqueue) -+ destroy_workqueue(priv->ring[i].workqueue); -+ } -+ -+ return ret; - } - - static void safexcel_hw_reset_rings(struct safexcel_crypto_priv *priv) -@@ -1627,8 +1651,10 @@ static int safexcel_remove(struct platform_device *pdev) - - clk_disable_unprepare(priv->clk); - -- for (i = 0; i < priv->config.rings; i++) -+ for (i = 0; i < priv->config.rings; i++) { -+ irq_set_affinity_hint(priv->ring[i].irq, NULL); - destroy_workqueue(priv->ring[i].workqueue); -+ } - - return 0; - } -diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h -index 930cc48a6f859..6a4d7f09bca96 100644 ---- a/drivers/crypto/inside-secure/safexcel.h -+++ b/drivers/crypto/inside-secure/safexcel.h -@@ -640,6 +640,9 @@ struct safexcel_ring { - */ - struct crypto_async_request *req; - struct crypto_async_request *backlog; -+ -+ /* irq of this ring */ -+ int irq; - }; - - /* EIP integration context flags */ -diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c -index a406b3c0d170a..fdf3b5be2d50d 100644 ---- a/drivers/dma/at_xdmac.c -+++ b/drivers/dma/at_xdmac.c -@@ -212,6 +212,7 @@ struct at_xdmac { - int irq; - struct clk *clk; - u32 save_gim; -+ u32 save_gs; - struct dma_pool *at_xdmac_desc_pool; - struct at_xdmac_chan chan[0]; - }; -@@ -1922,6 +1923,7 @@ static int atmel_xdmac_suspend(struct device *dev) - } - } - atxdmac->save_gim = at_xdmac_read(atxdmac, AT_XDMAC_GIM); -+ atxdmac->save_gs = at_xdmac_read(atxdmac, AT_XDMAC_GS); - - at_xdmac_off(atxdmac); - clk_disable_unprepare(atxdmac->clk); -@@ -1958,7 +1960,8 @@ static int atmel_xdmac_resume(struct device *dev) - at_xdmac_chan_write(atchan, AT_XDMAC_CNDC, atchan->save_cndc); - at_xdmac_chan_write(atchan, AT_XDMAC_CIE, atchan->save_cim); - wmb(); -- at_xdmac_write(atxdmac, AT_XDMAC_GE, atchan->mask); -+ if (atxdmac->save_gs & atchan->mask) -+ at_xdmac_write(atxdmac, AT_XDMAC_GE, atchan->mask); - } - } - return 0; -diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c -index afbd1a4590192..25d65f64cd507 100644 ---- a/drivers/dma/dw-edma/dw-edma-core.c -+++ b/drivers/dma/dw-edma/dw-edma-core.c -@@ -165,7 +165,7 @@ static void vchan_free_desc(struct virt_dma_desc *vdesc) - dw_edma_free_desc(vd2dw_edma_desc(vdesc)); - } - --static void dw_edma_start_transfer(struct dw_edma_chan *chan) -+static int dw_edma_start_transfer(struct dw_edma_chan *chan) - { - struct dw_edma_chunk *child; - struct dw_edma_desc *desc; -@@ -173,16 +173,16 @@ static void dw_edma_start_transfer(struct dw_edma_chan *chan) - - vd = vchan_next_desc(&chan->vc); - if (!vd) -- return; -+ return 0; - - desc = vd2dw_edma_desc(vd); - if (!desc) -- return; -+ return 0; - - child = list_first_entry_or_null(&desc->chunk->list, - struct dw_edma_chunk, list); - if (!child) -- return; -+ return 0; - - dw_edma_v0_core_start(child, !desc->xfer_sz); - desc->xfer_sz += child->ll_region.sz; -@@ -190,6 +190,8 @@ static void dw_edma_start_transfer(struct dw_edma_chan *chan) - list_del(&child->list); - kfree(child); - desc->chunks_alloc--; -+ -+ return 1; - } - - static int dw_edma_device_config(struct dma_chan *dchan, -@@ -273,9 +275,12 @@ static void dw_edma_device_issue_pending(struct dma_chan *dchan) - struct dw_edma_chan *chan = dchan2dw_edma_chan(dchan); - unsigned long flags; - -+ if (!chan->configured) -+ return; -+ - spin_lock_irqsave(&chan->vc.lock, flags); -- if (chan->configured && chan->request == EDMA_REQ_NONE && -- chan->status == EDMA_ST_IDLE && vchan_issue_pending(&chan->vc)) { -+ if (vchan_issue_pending(&chan->vc) && chan->request == EDMA_REQ_NONE && -+ chan->status == EDMA_ST_IDLE) { - chan->status = EDMA_ST_BUSY; - dw_edma_start_transfer(chan); - } -@@ -483,14 +488,14 @@ static void dw_edma_done_interrupt(struct dw_edma_chan *chan) - switch (chan->request) { - case EDMA_REQ_NONE: - desc = vd2dw_edma_desc(vd); -- if (desc->chunks_alloc) { -- chan->status = EDMA_ST_BUSY; -- dw_edma_start_transfer(chan); -- } else { -+ if (!desc->chunks_alloc) { - list_del(&vd->node); - vchan_cookie_complete(vd); -- chan->status = EDMA_ST_IDLE; - } -+ -+ /* Continue transferring if there are remaining chunks or issued requests. -+ */ -+ chan->status = dw_edma_start_transfer(chan) ? EDMA_ST_BUSY : EDMA_ST_IDLE; - break; - - case EDMA_REQ_STOP: -diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c -index 3fa884145eb1e..d5109d96ebf1b 100644 ---- a/drivers/dma/mv_xor_v2.c -+++ b/drivers/dma/mv_xor_v2.c -@@ -751,7 +751,7 @@ static int mv_xor_v2_probe(struct platform_device *pdev) - - xor_dev->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) { -- ret = EPROBE_DEFER; -+ ret = -EPROBE_DEFER; - goto disable_reg_clk; - } - if (!IS_ERR(xor_dev->clk)) { -diff --git a/drivers/edac/skx_base.c b/drivers/edac/skx_base.c -index b1d717cb8df9f..f382cc70f9aaa 100644 ---- a/drivers/edac/skx_base.c -+++ b/drivers/edac/skx_base.c -@@ -459,7 +459,7 @@ rir_found: - } - - static u8 skx_close_row[] = { -- 15, 16, 17, 18, 20, 21, 22, 28, 10, 11, 12, 13, 29, 30, 31, 32, 33 -+ 15, 16, 17, 18, 20, 21, 22, 28, 10, 11, 12, 13, 29, 30, 31, 32, 33, 34 - }; - - static u8 skx_close_column[] = { -@@ -467,7 +467,7 @@ static u8 skx_close_column[] = { - }; - - static u8 skx_open_row[] = { -- 14, 15, 16, 20, 28, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33 -+ 14, 15, 16, 20, 28, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34 - }; - - static u8 skx_open_column[] = { -diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c -index b9fdc20b4eb9b..eda25d506059b 100644 ---- a/drivers/firmware/qcom_scm.c -+++ b/drivers/firmware/qcom_scm.c -@@ -585,8 +585,7 @@ static int qcom_scm_probe(struct platform_device *pdev) - static void qcom_scm_shutdown(struct platform_device *pdev) - { - /* Clean shutdown, disable download mode to allow normal restart */ -- if (download_mode) -- qcom_scm_set_download_mode(false); -+ qcom_scm_set_download_mode(false); - } - - static const struct of_device_id qcom_scm_dt_match[] = { -diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c -index da26a584dca06..1a690b2c1e2ff 100644 ---- a/drivers/firmware/raspberrypi.c -+++ b/drivers/firmware/raspberrypi.c -@@ -7,6 +7,7 @@ - */ - - #include -+#include - #include - #include - #include -@@ -27,6 +28,8 @@ struct rpi_firmware { - struct mbox_chan *chan; /* The property channel. */ - struct completion c; - u32 enabled; -+ -+ struct kref consumers; - }; - - static DEFINE_MUTEX(transaction_lock); -@@ -214,12 +217,38 @@ static void rpi_register_clk_driver(struct device *dev) - -1, NULL, 0); - } - -+static void rpi_firmware_delete(struct kref *kref) -+{ -+ struct rpi_firmware *fw = container_of(kref, struct rpi_firmware, -+ consumers); -+ -+ mbox_free_channel(fw->chan); -+ kfree(fw); -+} -+ -+void rpi_firmware_put(struct rpi_firmware *fw) -+{ -+ kref_put(&fw->consumers, rpi_firmware_delete); -+} -+EXPORT_SYMBOL_GPL(rpi_firmware_put); -+ -+static void devm_rpi_firmware_put(void *data) -+{ -+ struct rpi_firmware *fw = data; -+ -+ rpi_firmware_put(fw); -+} -+ - static int rpi_firmware_probe(struct platform_device *pdev) - { - struct device *dev = &pdev->dev; - struct rpi_firmware *fw; - -- fw = devm_kzalloc(dev, sizeof(*fw), GFP_KERNEL); -+ /* -+ * Memory will be freed by rpi_firmware_delete() once all users have -+ * released their firmware handles. Don't use devm_kzalloc() here. -+ */ -+ fw = kzalloc(sizeof(*fw), GFP_KERNEL); - if (!fw) - return -ENOMEM; - -@@ -232,10 +261,12 @@ static int rpi_firmware_probe(struct platform_device *pdev) - int ret = PTR_ERR(fw->chan); - if (ret != -EPROBE_DEFER) - dev_err(dev, "Failed to get mbox channel: %d\n", ret); -+ kfree(fw); - return ret; - } - - init_completion(&fw->c); -+ kref_init(&fw->consumers); - - platform_set_drvdata(pdev, fw); - -@@ -264,7 +295,8 @@ static int rpi_firmware_remove(struct platform_device *pdev) - rpi_hwmon = NULL; - platform_device_unregister(rpi_clk); - rpi_clk = NULL; -- mbox_free_channel(fw->chan); -+ -+ rpi_firmware_put(fw); - - return 0; - } -@@ -273,19 +305,51 @@ static int rpi_firmware_remove(struct platform_device *pdev) - * rpi_firmware_get - Get pointer to rpi_firmware structure. - * @firmware_node: Pointer to the firmware Device Tree node. - * -+ * The reference to rpi_firmware has to be released with rpi_firmware_put(). -+ * - * Returns NULL is the firmware device is not ready. - */ - struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node) - { - struct platform_device *pdev = of_find_device_by_node(firmware_node); -+ struct rpi_firmware *fw; - - if (!pdev) - return NULL; - -- return platform_get_drvdata(pdev); -+ fw = platform_get_drvdata(pdev); -+ if (!fw) -+ return NULL; -+ -+ if (!kref_get_unless_zero(&fw->consumers)) -+ return NULL; -+ -+ return fw; - } - EXPORT_SYMBOL_GPL(rpi_firmware_get); - -+/** -+ * devm_rpi_firmware_get - Get pointer to rpi_firmware structure. -+ * @firmware_node: Pointer to the firmware Device Tree node. -+ * -+ * Returns NULL is the firmware device is not ready. -+ */ -+struct rpi_firmware *devm_rpi_firmware_get(struct device *dev, -+ struct device_node *firmware_node) -+{ -+ struct rpi_firmware *fw; -+ -+ fw = rpi_firmware_get(firmware_node); -+ if (!fw) -+ return NULL; -+ -+ if (devm_add_action_or_reset(dev, devm_rpi_firmware_put, fw)) -+ return NULL; -+ -+ return fw; -+} -+EXPORT_SYMBOL_GPL(devm_rpi_firmware_get); -+ - static const struct of_device_id rpi_firmware_of_match[] = { - { .compatible = "raspberrypi,bcm2835-firmware", }, - {}, -diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c -index 08c422380a00d..7122bc6ea796b 100644 ---- a/drivers/firmware/stratix10-svc.c -+++ b/drivers/firmware/stratix10-svc.c -@@ -981,8 +981,8 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev) - return ret; - - genpool = svc_create_memory_pool(pdev, sh_memory); -- if (!genpool) -- return -ENOMEM; -+ if (IS_ERR(genpool)) -+ return PTR_ERR(genpool); - - /* allocate service controller and supporting channel */ - controller = devm_kzalloc(dev, sizeof(*controller), GFP_KERNEL); -diff --git a/drivers/fpga/fpga-bridge.c b/drivers/fpga/fpga-bridge.c -index 4bab9028940a8..aea4ceeed5363 100644 ---- a/drivers/fpga/fpga-bridge.c -+++ b/drivers/fpga/fpga-bridge.c -@@ -115,7 +115,7 @@ static int fpga_bridge_dev_match(struct device *dev, const void *data) - /** - * fpga_bridge_get - get an exclusive reference to a fpga bridge - * @dev: parent device that fpga bridge was registered with -- * @info: fpga manager info -+ * @info: fpga image specific information - * - * Given a device, get an exclusive reference to a fpga bridge. - * -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -index c799691dfa848..94a503dc08b72 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -@@ -58,6 +58,7 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev, - { - struct fd f = fdget(fd); - struct amdgpu_fpriv *fpriv; -+ struct amdgpu_ctx_mgr *mgr; - struct amdgpu_ctx *ctx; - uint32_t id; - int r; -@@ -71,8 +72,11 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev, - return r; - } - -- idr_for_each_entry(&fpriv->ctx_mgr.ctx_handles, ctx, id) -+ mgr = &fpriv->ctx_mgr; -+ mutex_lock(&mgr->lock); -+ idr_for_each_entry(&mgr->ctx_handles, ctx, id) - amdgpu_ctx_priority_override(ctx, priority); -+ mutex_unlock(&mgr->lock); - - fdput(f); - return 0; -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c -index 685a2df01d096..762a407a4997a 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c -@@ -3908,7 +3908,8 @@ static int gfx_v9_0_hw_fini(void *handle) - { - struct amdgpu_device *adev = (struct amdgpu_device *)handle; - -- amdgpu_irq_put(adev, &adev->gfx.cp_ecc_error_irq, 0); -+ if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__GFX)) -+ amdgpu_irq_put(adev, &adev->gfx.cp_ecc_error_irq, 0); - amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0); - amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0); - -diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c -index 63205de4a5656..7a50713268b64 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c -@@ -1534,7 +1534,6 @@ static int gmc_v9_0_hw_fini(void *handle) - return 0; - } - -- amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0); - amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0); - - return 0; -diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c -index 23de332f3c6ed..7ca7a68d588ea 100644 ---- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c -@@ -1911,9 +1911,11 @@ static int sdma_v4_0_hw_fini(void *handle) - if (amdgpu_sriov_vf(adev)) - return 0; - -- for (i = 0; i < adev->sdma.num_instances; i++) { -- amdgpu_irq_put(adev, &adev->sdma.ecc_irq, -- AMDGPU_SDMA_IRQ_INSTANCE0 + i); -+ if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__SDMA)) { -+ for (i = 0; i < adev->sdma.num_instances; i++) { -+ amdgpu_irq_put(adev, &adev->sdma.ecc_irq, -+ AMDGPU_SDMA_IRQ_INSTANCE0 + i); -+ } - } - - sdma_v4_0_ctx_switch_enable(adev, false); -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -index 1e7083bc8a527..3f3242783e1c3 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -@@ -5776,6 +5776,8 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, - continue; - - dc_plane = dm_new_plane_state->dc_state; -+ if (!dc_plane) -+ continue; - - bundle->surface_updates[planes_count].surface = dc_plane; - if (new_pcrtc_state->color_mgmt_changed) { -@@ -7029,8 +7031,9 @@ static int dm_update_plane_state(struct dc *dc, - return -EINVAL; - } - -+ if (dm_old_plane_state->dc_state) -+ dc_plane_state_release(dm_old_plane_state->dc_state); - -- dc_plane_state_release(dm_old_plane_state->dc_state); - dm_new_plane_state->dc_state = NULL; - - *lock_and_validation_needed = true; -diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -index de246e183d6ba..cdcd5051dd666 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -@@ -1315,6 +1315,9 @@ bool dc_remove_plane_from_context( - struct dc_stream_status *stream_status = NULL; - struct resource_pool *pool = dc->res_pool; - -+ if (!plane_state) -+ return true; -+ - for (i = 0; i < context->stream_count; i++) - if (context->streams[i] == stream) { - stream_status = &context->stream_status[i]; -diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c -index 4ae68bf048920..9eb490a6e016d 100644 ---- a/drivers/gpu/drm/drm_fb_helper.c -+++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -1340,6 +1340,9 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var, - return -EINVAL; - } - -+ var->xres_virtual = fb->width; -+ var->yres_virtual = fb->height; -+ - /* - * Workaround for SDL 1.2, which is known to be setting all pixel format - * fields values to zero in some cases. We treat this situation as a -diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c -index d45f43feaf862..4c8bb93a89fb2 100644 ---- a/drivers/gpu/drm/drm_probe_helper.c -+++ b/drivers/gpu/drm/drm_probe_helper.c -@@ -460,8 +460,9 @@ retry: - */ - dev->mode_config.delayed_event = true; - if (dev->mode_config.poll_enabled) -- schedule_delayed_work(&dev->mode_config.output_poll_work, -- 0); -+ mod_delayed_work(system_wq, -+ &dev->mode_config.output_poll_work, -+ 0); - } - - /* Re-enable polling in case the global poll config changed. */ -diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c -index 9c262daf5816e..1061430aced21 100644 ---- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c -+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c -@@ -775,8 +775,8 @@ static int decon_conf_irq(struct decon_context *ctx, const char *name, - return irq; - } - } -- irq_set_status_flags(irq, IRQ_NOAUTOEN); -- ret = devm_request_irq(ctx->dev, irq, handler, flags, "drm_decon", ctx); -+ ret = devm_request_irq(ctx->dev, irq, handler, -+ flags | IRQF_NO_AUTOEN, "drm_decon", ctx); - if (ret < 0) { - dev_err(ctx->dev, "IRQ %s request failed\n", name); - return ret; -diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c -index babf3db82ce33..bfcbb89ff40a4 100644 ---- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c -+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c -@@ -1350,10 +1350,9 @@ static int exynos_dsi_register_te_irq(struct exynos_dsi *dsi, - } - - te_gpio_irq = gpio_to_irq(dsi->te_gpio); -- irq_set_status_flags(te_gpio_irq, IRQ_NOAUTOEN); - - ret = request_threaded_irq(te_gpio_irq, exynos_dsi_te_irq_handler, NULL, -- IRQF_TRIGGER_RISING, "TE", dsi); -+ IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN, "TE", dsi); - if (ret) { - dev_err(dsi->dev, "request interrupt failed with %d\n", ret); - gpio_free(dsi->te_gpio); -@@ -1792,9 +1791,9 @@ static int exynos_dsi_probe(struct platform_device *pdev) - return dsi->irq; - } - -- irq_set_status_flags(dsi->irq, IRQ_NOAUTOEN); - ret = devm_request_threaded_irq(dev, dsi->irq, NULL, -- exynos_dsi_irq, IRQF_ONESHOT, -+ exynos_dsi_irq, -+ IRQF_ONESHOT | IRQF_NO_AUTOEN, - dev_name(dev), dsi); - if (ret) { - dev_err(dev, "failed to request dsi irq\n"); -diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c -index 75ec703d22e03..89513c7c50d55 100644 ---- a/drivers/gpu/drm/lima/lima_drv.c -+++ b/drivers/gpu/drm/lima/lima_drv.c -@@ -300,8 +300,10 @@ static int lima_pdev_probe(struct platform_device *pdev) - - /* Allocate and initialize the DRM device. */ - ddev = drm_dev_alloc(&lima_drm_driver, &pdev->dev); -- if (IS_ERR(ddev)) -- return PTR_ERR(ddev); -+ if (IS_ERR(ddev)) { -+ err = PTR_ERR(ddev); -+ goto err_out0; -+ } - - ddev->dev_private = ldev; - ldev->ddev = ddev; -diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c -index 0888e0df660dd..2a727ab0faf75 100644 ---- a/drivers/gpu/drm/msm/adreno/adreno_device.c -+++ b/drivers/gpu/drm/msm/adreno/adreno_device.c -@@ -233,8 +233,11 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev) - if (ret) - return NULL; - -- /* Make sure pm runtime is active and reset any previous errors */ -- pm_runtime_set_active(&pdev->dev); -+ /* -+ * Now that we have firmware loaded, and are ready to begin -+ * booting the gpu, go ahead and enable runpm: -+ */ -+ pm_runtime_enable(&pdev->dev); - - ret = pm_runtime_get_sync(&pdev->dev); - if (ret < 0) { -diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c -index 3802ad38c519c..6f83253a8c585 100644 ---- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c -+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c -@@ -899,7 +899,6 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev, - pm_runtime_set_autosuspend_delay(&pdev->dev, - adreno_gpu->info->inactive_period); - pm_runtime_use_autosuspend(&pdev->dev); -- pm_runtime_enable(&pdev->dev); - - return msm_gpu_init(drm, pdev, &adreno_gpu->base, &funcs->base, - adreno_gpu->info->name, &adreno_gpu_config); -@@ -908,11 +907,15 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev, - void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu) - { - struct msm_gpu *gpu = &adreno_gpu->base; -+ struct msm_drm_private *priv = gpu->dev ? gpu->dev->dev_private : NULL; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(adreno_gpu->info->fw); i++) - release_firmware(adreno_gpu->fw[i]); - -+ if (priv && pm_runtime_enabled(&priv->gpu_pdev->dev)) -+ pm_runtime_disable(&priv->gpu_pdev->dev); -+ - icc_put(gpu->icc_path); - - msm_gpu_cleanup(&adreno_gpu->base); -diff --git a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c -index c7b48df8869a1..3ee265f1755f4 100644 ---- a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c -+++ b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c -@@ -460,7 +460,7 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi) - ctx->panel.funcs = &otm8009a_drm_funcs; - - ctx->bl_dev = devm_backlight_device_register(dev, dev_name(dev), -- dsi->host->dev, ctx, -+ dev, ctx, - &otm8009a_backlight_ops, - NULL); - if (IS_ERR(ctx->bl_dev)) { -diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c -index 291e89b4045f3..96cc794147b5f 100644 ---- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c -+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c -@@ -249,9 +249,6 @@ static int rockchip_drm_gem_object_mmap(struct drm_gem_object *obj, - else - ret = rockchip_drm_gem_object_mmap_dma(obj, vma); - -- if (ret) -- drm_gem_vm_close(vma); -- - return ret; - } - -diff --git a/drivers/gpu/drm/vgem/vgem_fence.c b/drivers/gpu/drm/vgem/vgem_fence.c -index 9268f6fc3f662..92895937aba9b 100644 ---- a/drivers/gpu/drm/vgem/vgem_fence.c -+++ b/drivers/gpu/drm/vgem/vgem_fence.c -@@ -249,4 +249,5 @@ void vgem_fence_close(struct vgem_file *vfile) - { - idr_for_each(&vfile->fence_idr, __vgem_fence_idr_fini, vfile); - idr_destroy(&vfile->fence_idr); -+ mutex_destroy(&vfile->fence_mutex); - } -diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c -index aa477a43a3123..339bc7f1fcedb 100644 ---- a/drivers/hid/wacom_wac.c -+++ b/drivers/hid/wacom_wac.c -@@ -1265,6 +1265,9 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) - - struct input_dev *pen_input = wacom->pen_input; - unsigned char *data = wacom->data; -+ int number_of_valid_frames = 0; -+ int time_interval = 15000000; -+ ktime_t time_packet_received = ktime_get(); - int i; - - if (wacom->features.type == INTUOSP2_BT || -@@ -1285,12 +1288,30 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) - wacom->id[0] |= (wacom->serial[0] >> 32) & 0xFFFFF; - } - -+ /* number of valid frames */ - for (i = 0; i < pen_frames; i++) { - unsigned char *frame = &data[i*pen_frame_len + 1]; - bool valid = frame[0] & 0x80; -+ -+ if (valid) -+ number_of_valid_frames++; -+ } -+ -+ if (number_of_valid_frames) { -+ if (wacom->hid_data.time_delayed) -+ time_interval = ktime_get() - wacom->hid_data.time_delayed; -+ time_interval /= number_of_valid_frames; -+ wacom->hid_data.time_delayed = time_packet_received; -+ } -+ -+ for (i = 0; i < number_of_valid_frames; i++) { -+ unsigned char *frame = &data[i*pen_frame_len + 1]; -+ bool valid = frame[0] & 0x80; - bool prox = frame[0] & 0x40; - bool range = frame[0] & 0x20; - bool invert = frame[0] & 0x10; -+ int frames_number_reversed = number_of_valid_frames - i - 1; -+ int event_timestamp = time_packet_received - frames_number_reversed * time_interval; - - if (!valid) - continue; -@@ -1303,6 +1324,7 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) - wacom->tool[0] = 0; - wacom->id[0] = 0; - wacom->serial[0] = 0; -+ wacom->hid_data.time_delayed = 0; - return; - } - -@@ -1339,6 +1361,7 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) - get_unaligned_le16(&frame[11])); - } - } -+ - if (wacom->tool[0]) { - input_report_abs(pen_input, ABS_PRESSURE, get_unaligned_le16(&frame[5])); - if (wacom->features.type == INTUOSP2_BT || -@@ -1362,6 +1385,9 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom) - - wacom->shared->stylus_in_proximity = prox; - -+ /* add timestamp to unpack the frames */ -+ input_set_timestamp(pen_input, event_timestamp); -+ - input_sync(pen_input); - } - } -@@ -1853,6 +1879,7 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage, - int fmax = field->logical_maximum; - unsigned int equivalent_usage = wacom_equivalent_usage(usage->hid); - int resolution_code = code; -+ int resolution = hidinput_calc_abs_res(field, resolution_code); - - if (equivalent_usage == HID_DG_TWIST) { - resolution_code = ABS_RZ; -@@ -1875,8 +1902,15 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage, - switch (type) { - case EV_ABS: - input_set_abs_params(input, code, fmin, fmax, fuzz, 0); -- input_abs_set_res(input, code, -- hidinput_calc_abs_res(field, resolution_code)); -+ -+ /* older tablet may miss physical usage */ -+ if ((code == ABS_X || code == ABS_Y) && !resolution) { -+ resolution = WACOM_INTUOS_RES; -+ hid_warn(input, -+ "Wacom usage (%d) missing resolution \n", -+ code); -+ } -+ input_abs_set_res(input, code, resolution); - break; - case EV_KEY: - input_set_capability(input, EV_KEY, code); -diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h -index ca172efcf072f..88badfbae999c 100644 ---- a/drivers/hid/wacom_wac.h -+++ b/drivers/hid/wacom_wac.h -@@ -320,6 +320,7 @@ struct hid_data { - int bat_connected; - int ps_connected; - bool pad_input_event_flag; -+ int time_delayed; - }; - - struct wacom_remote_data { -diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c -index c36522849325b..a788f2e706779 100644 ---- a/drivers/i2c/busses/i2c-omap.c -+++ b/drivers/i2c/busses/i2c-omap.c -@@ -1058,7 +1058,7 @@ omap_i2c_isr(int irq, void *dev_id) - u16 stat; - - stat = omap_i2c_read_reg(omap, OMAP_I2C_STAT_REG); -- mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG); -+ mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG) & ~OMAP_I2C_STAT_NACK; - - if (stat & mask) - ret = IRQ_WAKE_THREAD; -diff --git a/drivers/iio/adc/palmas_gpadc.c b/drivers/iio/adc/palmas_gpadc.c -index 2bd785e9e42ac..4861093b0764e 100644 ---- a/drivers/iio/adc/palmas_gpadc.c -+++ b/drivers/iio/adc/palmas_gpadc.c -@@ -630,7 +630,7 @@ out: - - static int palmas_gpadc_remove(struct platform_device *pdev) - { -- struct iio_dev *indio_dev = dev_to_iio_dev(&pdev->dev); -+ struct iio_dev *indio_dev = dev_get_drvdata(&pdev->dev); - struct palmas_gpadc *adc = iio_priv(indio_dev); - - if (adc->wakeup1_enable || adc->wakeup2_enable) -diff --git a/drivers/iio/light/max44009.c b/drivers/iio/light/max44009.c -index 00ba15499638d..5103b1061a77b 100644 ---- a/drivers/iio/light/max44009.c -+++ b/drivers/iio/light/max44009.c -@@ -529,6 +529,12 @@ static int max44009_probe(struct i2c_client *client, - return devm_iio_device_register(&client->dev, indio_dev); - } - -+static const struct of_device_id max44009_of_match[] = { -+ { .compatible = "maxim,max44009" }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, max44009_of_match); -+ - static const struct i2c_device_id max44009_id[] = { - { "max44009", 0 }, - { } -@@ -538,18 +544,13 @@ MODULE_DEVICE_TABLE(i2c, max44009_id); - static struct i2c_driver max44009_driver = { - .driver = { - .name = MAX44009_DRV_NAME, -+ .of_match_table = max44009_of_match, - }, - .probe = max44009_probe, - .id_table = max44009_id, - }; - module_i2c_driver(max44009_driver); - --static const struct of_device_id max44009_of_match[] = { -- { .compatible = "maxim,max44009" }, -- { } --}; --MODULE_DEVICE_TABLE(of, max44009_of_match); -- - MODULE_AUTHOR("Robert Eshleman "); - MODULE_LICENSE("GPL v2"); - MODULE_DESCRIPTION("MAX44009 ambient light sensor driver"); -diff --git a/drivers/infiniband/hw/hfi1/mmu_rb.c b/drivers/infiniband/hw/hfi1/mmu_rb.c -index 14d2a90964c3c..a5631286c8e05 100644 ---- a/drivers/infiniband/hw/hfi1/mmu_rb.c -+++ b/drivers/infiniband/hw/hfi1/mmu_rb.c -@@ -173,7 +173,7 @@ int hfi1_mmu_rb_insert(struct mmu_rb_handler *handler, - goto unlock; - } - __mmu_int_rb_insert(mnode, &handler->root); -- list_add(&mnode->list, &handler->lru_list); -+ list_add_tail(&mnode->list, &handler->lru_list); - - ret = handler->ops->insert(handler->ops_arg, mnode); - if (ret) { -@@ -220,8 +220,10 @@ bool hfi1_mmu_rb_remove_unless_exact(struct mmu_rb_handler *handler, - spin_lock_irqsave(&handler->lock, flags); - node = __mmu_rb_search(handler, addr, len); - if (node) { -- if (node->addr == addr && node->len == len) -+ if (node->addr == addr && node->len == len) { -+ list_move_tail(&node->list, &handler->lru_list); - goto unlock; -+ } - __mmu_int_rb_remove(node, &handler->root); - list_del(&node->list); /* remove from LRU list */ - ret = true; -@@ -242,8 +244,7 @@ void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg) - INIT_LIST_HEAD(&del_list); - - spin_lock_irqsave(&handler->lock, flags); -- list_for_each_entry_safe_reverse(rbnode, ptr, &handler->lru_list, -- list) { -+ list_for_each_entry_safe(rbnode, ptr, &handler->lru_list, list) { - if (handler->ops->evict(handler->ops_arg, rbnode, evict_arg, - &stop)) { - __mmu_int_rb_remove(rbnode, &handler->root); -@@ -255,9 +256,7 @@ void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg) - } - spin_unlock_irqrestore(&handler->lock, flags); - -- while (!list_empty(&del_list)) { -- rbnode = list_first_entry(&del_list, struct mmu_rb_node, list); -- list_del(&rbnode->list); -+ list_for_each_entry_safe(rbnode, ptr, &del_list, list) { - handler->ops->remove(handler->ops_arg, rbnode); - } - } -diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c -index bca5358f3ef29..4523eb85ec698 100644 ---- a/drivers/infiniband/hw/mlx4/qp.c -+++ b/drivers/infiniband/hw/mlx4/qp.c -@@ -438,9 +438,13 @@ static int set_user_sq_size(struct mlx4_ib_dev *dev, - struct mlx4_ib_qp *qp, - struct mlx4_ib_create_qp *ucmd) - { -+ u32 cnt; -+ - /* Sanity check SQ size before proceeding */ -- if ((1 << ucmd->log_sq_bb_count) > dev->dev->caps.max_wqes || -- ucmd->log_sq_stride > -+ if (check_shl_overflow(1, ucmd->log_sq_bb_count, &cnt) || -+ cnt > dev->dev->caps.max_wqes) -+ return -EINVAL; -+ if (ucmd->log_sq_stride > - ilog2(roundup_pow_of_two(dev->dev->caps.max_sq_desc_sz)) || - ucmd->log_sq_stride < MLX4_IB_MIN_SQ_STRIDE) - return -EINVAL; -diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c -index 6edd30c92156e..51623431b879a 100644 ---- a/drivers/infiniband/hw/mlx5/qp.c -+++ b/drivers/infiniband/hw/mlx5/qp.c -@@ -3821,7 +3821,7 @@ static int mlx5_ib_modify_dct(struct ib_qp *ibqp, struct ib_qp_attr *attr, - return -EINVAL; - - if (attr->port_num == 0 || -- attr->port_num > MLX5_CAP_GEN(dev->mdev, num_ports)) { -+ attr->port_num > dev->num_ports) { - mlx5_ib_dbg(dev, "invalid port number %d. number of ports is %d\n", - attr->port_num, dev->num_ports); - return -EINVAL; -diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c -index e97c13967174c..905e2eaed0951 100644 ---- a/drivers/infiniband/sw/rdmavt/qp.c -+++ b/drivers/infiniband/sw/rdmavt/qp.c -@@ -505,8 +505,6 @@ void rvt_qp_exit(struct rvt_dev_info *rdi) - if (qps_inuse) - rvt_pr_err(rdi, "QP memory leak! %u still in use\n", - qps_inuse); -- if (!rdi->qp_dev) -- return; - - kfree(rdi->qp_dev->qp_table); - free_qpn_table(&rdi->qp_dev->qpn_table); -diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c -index dbbf8c6c16d38..a462c2fc6f311 100644 ---- a/drivers/infiniband/sw/siw/siw_main.c -+++ b/drivers/infiniband/sw/siw/siw_main.c -@@ -472,9 +472,6 @@ static int siw_netdev_event(struct notifier_block *nb, unsigned long event, - - dev_dbg(&netdev->dev, "siw: event %lu\n", event); - -- if (dev_net(netdev) != &init_net) -- return NOTIFY_OK; -- - base_dev = ib_device_get_by_netdev(netdev, RDMA_DRIVER_SIW); - if (!base_dev) - return NOTIFY_OK; -diff --git a/drivers/infiniband/sw/siw/siw_qp_tx.c b/drivers/infiniband/sw/siw/siw_qp_tx.c -index 2b5120a13e376..42d03bd1622d5 100644 ---- a/drivers/infiniband/sw/siw/siw_qp_tx.c -+++ b/drivers/infiniband/sw/siw/siw_qp_tx.c -@@ -548,7 +548,7 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s) - data_len -= plen; - fp_off = 0; - -- if (++seg > (int)MAX_ARRAY) { -+ if (++seg >= (int)MAX_ARRAY) { - siw_dbg_qp(tx_qp(c_tx), "to many fragments\n"); - siw_unmap_pages(page_array, kmap_mask); - wqe->processed -= c_tx->bytes_unsent; -diff --git a/drivers/input/touchscreen/raspberrypi-ts.c b/drivers/input/touchscreen/raspberrypi-ts.c -index 69881265d1218..8135a80226fd6 100644 ---- a/drivers/input/touchscreen/raspberrypi-ts.c -+++ b/drivers/input/touchscreen/raspberrypi-ts.c -@@ -137,7 +137,7 @@ static int rpi_ts_probe(struct platform_device *pdev) - return -ENOENT; - } - -- fw = rpi_firmware_get(fw_node); -+ fw = devm_rpi_firmware_get(&pdev->dev, fw_node); - of_node_put(fw_node); - if (!fw) - return -EPROBE_DEFER; -@@ -164,7 +164,6 @@ static int rpi_ts_probe(struct platform_device *pdev) - touchbuf = (u32)ts->fw_regs_phys; - error = rpi_firmware_property(fw, RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF, - &touchbuf, sizeof(touchbuf)); -- - if (error || touchbuf != 0) { - dev_warn(dev, "Failed to set touchbuf, %d\n", error); - return error; -diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig -index 2cbf66d1c3000..34334adcad014 100644 ---- a/drivers/leds/Kconfig -+++ b/drivers/leds/Kconfig -@@ -802,7 +802,7 @@ config LEDS_SPI_BYTE - config LEDS_TI_LMU_COMMON - tristate "LED driver for TI LMU" - depends on LEDS_CLASS -- depends on REGMAP -+ select REGMAP - help - Say Y to enable the LED driver for TI LMU devices. - This supports common features between the TI LM3532, LM3631, LM3632, -diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig -index b5a534206eddd..1605dcaa89e30 100644 ---- a/drivers/macintosh/Kconfig -+++ b/drivers/macintosh/Kconfig -@@ -86,6 +86,7 @@ config ADB_PMU_LED - - config ADB_PMU_LED_DISK - bool "Use front LED as DISK LED by default" -+ depends on ATA - depends on ADB_PMU_LED - depends on LEDS_CLASS - select LEDS_TRIGGERS -diff --git a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c -index cb75dc0356167..30d53a535d55d 100644 ---- a/drivers/macintosh/windfarm_smu_sat.c -+++ b/drivers/macintosh/windfarm_smu_sat.c -@@ -171,6 +171,7 @@ static void wf_sat_release(struct kref *ref) - - if (sat->nr >= 0) - sats[sat->nr] = NULL; -+ of_node_put(sat->node); - kfree(sat); - } - -diff --git a/drivers/mailbox/zynqmp-ipi-mailbox.c b/drivers/mailbox/zynqmp-ipi-mailbox.c -index 1d0b8abbafc30..bb7bb17386475 100644 ---- a/drivers/mailbox/zynqmp-ipi-mailbox.c -+++ b/drivers/mailbox/zynqmp-ipi-mailbox.c -@@ -110,7 +110,7 @@ struct zynqmp_ipi_pdata { - unsigned int method; - u32 local_id; - int num_mboxes; -- struct zynqmp_ipi_mbox *ipi_mboxes; -+ struct zynqmp_ipi_mbox ipi_mboxes[]; - }; - - static struct device_driver zynqmp_ipi_mbox_driver = { -@@ -152,7 +152,7 @@ static irqreturn_t zynqmp_ipi_interrupt(int irq, void *data) - struct zynqmp_ipi_message *msg; - u64 arg0, arg3; - struct arm_smccc_res res; -- int ret, i; -+ int ret, i, status = IRQ_NONE; - - (void)irq; - arg0 = SMC_IPI_MAILBOX_STATUS_ENQUIRY; -@@ -170,11 +170,11 @@ static irqreturn_t zynqmp_ipi_interrupt(int irq, void *data) - memcpy_fromio(msg->data, mchan->req_buf, - msg->len); - mbox_chan_received_data(chan, (void *)msg); -- return IRQ_HANDLED; -+ status = IRQ_HANDLED; - } - } - } -- return IRQ_NONE; -+ return status; - } - - /** -@@ -634,8 +634,13 @@ static int zynqmp_ipi_probe(struct platform_device *pdev) - struct zynqmp_ipi_mbox *mbox; - int num_mboxes, ret = -EINVAL; - -- num_mboxes = of_get_child_count(np); -- pdata = devm_kzalloc(dev, sizeof(*pdata) + (num_mboxes * sizeof(*mbox)), -+ num_mboxes = of_get_available_child_count(np); -+ if (num_mboxes == 0) { -+ dev_err(dev, "mailbox nodes not available\n"); -+ return -EINVAL; -+ } -+ -+ pdata = devm_kzalloc(dev, struct_size(pdata, ipi_mboxes, num_mboxes), - GFP_KERNEL); - if (!pdata) - return -ENOMEM; -@@ -649,8 +654,6 @@ static int zynqmp_ipi_probe(struct platform_device *pdev) - } - - pdata->num_mboxes = num_mboxes; -- pdata->ipi_mboxes = (struct zynqmp_ipi_mbox *) -- ((char *)pdata + sizeof(*pdata)); - - mbox = pdata->ipi_mboxes; - for_each_available_child_of_node(np, nc) { -diff --git a/drivers/md/dm-clone-target.c b/drivers/md/dm-clone-target.c -index ce9d03f4e9813..355afca2969dc 100644 ---- a/drivers/md/dm-clone-target.c -+++ b/drivers/md/dm-clone-target.c -@@ -2232,6 +2232,7 @@ static int __init dm_clone_init(void) - r = dm_register_target(&clone_target); - if (r < 0) { - DMERR("Failed to register clone target"); -+ kmem_cache_destroy(_hydration_cache); - return r; - } - -diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c -index bed263267323a..967d4ad6d32ca 100644 ---- a/drivers/md/dm-flakey.c -+++ b/drivers/md/dm-flakey.c -@@ -124,9 +124,9 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc, - * Direction r or w? - */ - arg_name = dm_shift_arg(as); -- if (!strcasecmp(arg_name, "w")) -+ if (arg_name && !strcasecmp(arg_name, "w")) - fc->corrupt_bio_rw = WRITE; -- else if (!strcasecmp(arg_name, "r")) -+ else if (arg_name && !strcasecmp(arg_name, "r")) - fc->corrupt_bio_rw = READ; - else { - ti->error = "Invalid corrupt bio direction (r or w)"; -diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c -index 3c9a2be97e55c..d7911c623edde 100644 ---- a/drivers/md/dm-integrity.c -+++ b/drivers/md/dm-integrity.c -@@ -4288,11 +4288,13 @@ static int __init dm_integrity_init(void) - } - - r = dm_register_target(&integrity_target); -- -- if (r < 0) -+ if (r < 0) { - DMERR("register failed %d", r); -+ kmem_cache_destroy(journal_io_cache); -+ return r; -+ } - -- return r; -+ return 0; - } - - static void __exit dm_integrity_exit(void) -diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c -index bcb282f110531..477e616a21c74 100644 ---- a/drivers/md/dm-ioctl.c -+++ b/drivers/md/dm-ioctl.c -@@ -1435,11 +1435,12 @@ static int table_clear(struct file *filp, struct dm_ioctl *param, size_t param_s - hc->new_map = NULL; - } - -- param->flags &= ~DM_INACTIVE_PRESENT_FLAG; -- -- __dev_status(hc->md, param); - md = hc->md; - up_write(&_hash_lock); -+ -+ param->flags &= ~DM_INACTIVE_PRESENT_FLAG; -+ __dev_status(md, param); -+ - if (old_map) { - dm_sync_table(md); - dm_table_destroy(old_map); -diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c -index 9dcdf34b7e32d..965b5139c8970 100644 ---- a/drivers/md/dm-verity-target.c -+++ b/drivers/md/dm-verity-target.c -@@ -471,13 +471,14 @@ static int verity_verify_io(struct dm_verity_io *io) - struct bvec_iter start; - unsigned b; - struct crypto_wait wait; -+ struct bio *bio = dm_bio_from_per_bio_data(io, v->ti->per_io_data_size); - - for (b = 0; b < io->n_blocks; b++) { - int r; - sector_t cur_block = io->block + b; - struct ahash_request *req = verity_io_hash_req(v, io); - -- if (v->validated_blocks && -+ if (v->validated_blocks && bio->bi_status == BLK_STS_OK && - likely(test_bit(cur_block, v->validated_blocks))) { - verity_bv_skip_block(v, io, &io->iter); - continue; -@@ -525,9 +526,17 @@ static int verity_verify_io(struct dm_verity_io *io) - else if (verity_fec_decode(v, io, DM_VERITY_BLOCK_TYPE_DATA, - cur_block, NULL, &start) == 0) - continue; -- else if (verity_handle_err(v, DM_VERITY_BLOCK_TYPE_DATA, -- cur_block)) -- return -EIO; -+ else { -+ if (bio->bi_status) { -+ /* -+ * Error correction failed; Just return error -+ */ -+ return -EIO; -+ } -+ if (verity_handle_err(v, DM_VERITY_BLOCK_TYPE_DATA, -+ cur_block)) -+ return -EIO; -+ } - } - - return 0; -diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c -index 9fcc141e1ad64..aee429ab114a5 100644 ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -2229,11 +2229,22 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio) - { - struct r10conf *conf = mddev->private; - int d; -- struct bio *wbio, *wbio2; -+ struct bio *wbio = r10_bio->devs[1].bio; -+ struct bio *wbio2 = r10_bio->devs[1].repl_bio; -+ -+ /* Need to test wbio2->bi_end_io before we call -+ * generic_make_request as if the former is NULL, -+ * the latter is free to free wbio2. -+ */ -+ if (wbio2 && !wbio2->bi_end_io) -+ wbio2 = NULL; - - if (!test_bit(R10BIO_Uptodate, &r10_bio->state)) { - fix_recovery_read_error(r10_bio); -- end_sync_request(r10_bio); -+ if (wbio->bi_end_io) -+ end_sync_request(r10_bio); -+ if (wbio2) -+ end_sync_request(r10_bio); - return; - } - -@@ -2242,14 +2253,6 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio) - * and submit the write request - */ - d = r10_bio->devs[1].devnum; -- wbio = r10_bio->devs[1].bio; -- wbio2 = r10_bio->devs[1].repl_bio; -- /* Need to test wbio2->bi_end_io before we call -- * generic_make_request as if the former is NULL, -- * the latter is free to free wbio2. -- */ -- if (wbio2 && !wbio2->bi_end_io) -- wbio2 = NULL; - if (wbio->bi_end_io) { - atomic_inc(&conf->mirrors[d].rdev->nr_pending); - md_sync_acct(conf->mirrors[d].rdev->bdev, bio_sectors(wbio)); -@@ -2917,10 +2920,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, - sector_t chunk_mask = conf->geo.chunk_mask; - int page_idx = 0; - -- if (!mempool_initialized(&conf->r10buf_pool)) -- if (init_resync(conf)) -- return 0; -- - /* - * Allow skipping a full rebuild for incremental assembly - * of a clean array, like RAID1 does. -@@ -2936,6 +2935,10 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr, - return mddev->dev_sectors - sector_nr; - } - -+ if (!mempool_initialized(&conf->r10buf_pool)) -+ if (init_resync(conf)) -+ return 0; -+ - skipped: - max_sector = mddev->dev_sectors; - if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) || -@@ -3632,6 +3635,20 @@ static int setup_geo(struct geom *geo, struct mddev *mddev, enum geo_type new) - return nc*fc; - } - -+static void raid10_free_conf(struct r10conf *conf) -+{ -+ if (!conf) -+ return; -+ -+ mempool_exit(&conf->r10bio_pool); -+ kfree(conf->mirrors); -+ kfree(conf->mirrors_old); -+ kfree(conf->mirrors_new); -+ safe_put_page(conf->tmppage); -+ bioset_exit(&conf->bio_split); -+ kfree(conf); -+} -+ - static struct r10conf *setup_conf(struct mddev *mddev) - { - struct r10conf *conf = NULL; -@@ -3714,20 +3731,24 @@ static struct r10conf *setup_conf(struct mddev *mddev) - return conf; - - out: -- if (conf) { -- mempool_exit(&conf->r10bio_pool); -- kfree(conf->mirrors); -- safe_put_page(conf->tmppage); -- bioset_exit(&conf->bio_split); -- kfree(conf); -- } -+ raid10_free_conf(conf); - return ERR_PTR(err); - } - -+static void raid10_set_io_opt(struct r10conf *conf) -+{ -+ int raid_disks = conf->geo.raid_disks; -+ -+ if (!(conf->geo.raid_disks % conf->geo.near_copies)) -+ raid_disks /= conf->geo.near_copies; -+ blk_queue_io_opt(conf->mddev->queue, (conf->mddev->chunk_sectors << 9) * -+ raid_disks); -+} -+ - static int raid10_run(struct mddev *mddev) - { - struct r10conf *conf; -- int i, disk_idx, chunk_size; -+ int i, disk_idx; - struct raid10_info *disk; - struct md_rdev *rdev; - sector_t size; -@@ -3748,6 +3769,9 @@ static int raid10_run(struct mddev *mddev) - if (!conf) - goto out; - -+ mddev->thread = conf->thread; -+ conf->thread = NULL; -+ - if (mddev_is_clustered(conf->mddev)) { - int fc, fo; - -@@ -3760,21 +3784,13 @@ static int raid10_run(struct mddev *mddev) - } - } - -- mddev->thread = conf->thread; -- conf->thread = NULL; -- -- chunk_size = mddev->chunk_sectors << 9; - if (mddev->queue) { - blk_queue_max_discard_sectors(mddev->queue, - mddev->chunk_sectors); - blk_queue_max_write_same_sectors(mddev->queue, 0); - blk_queue_max_write_zeroes_sectors(mddev->queue, 0); -- blk_queue_io_min(mddev->queue, chunk_size); -- if (conf->geo.raid_disks % conf->geo.near_copies) -- blk_queue_io_opt(mddev->queue, chunk_size * conf->geo.raid_disks); -- else -- blk_queue_io_opt(mddev->queue, chunk_size * -- (conf->geo.raid_disks / conf->geo.near_copies)); -+ blk_queue_io_min(mddev->queue, mddev->chunk_sectors << 9); -+ raid10_set_io_opt(conf); - } - - rdev_for_each(rdev, mddev) { -@@ -3934,10 +3950,7 @@ static int raid10_run(struct mddev *mddev) - - out_free_conf: - md_unregister_thread(&mddev->thread); -- mempool_exit(&conf->r10bio_pool); -- safe_put_page(conf->tmppage); -- kfree(conf->mirrors); -- kfree(conf); -+ raid10_free_conf(conf); - mddev->private = NULL; - out: - return -EIO; -@@ -3945,15 +3958,7 @@ out: - - static void raid10_free(struct mddev *mddev, void *priv) - { -- struct r10conf *conf = priv; -- -- mempool_exit(&conf->r10bio_pool); -- safe_put_page(conf->tmppage); -- kfree(conf->mirrors); -- kfree(conf->mirrors_old); -- kfree(conf->mirrors_new); -- bioset_exit(&conf->bio_split); -- kfree(conf); -+ raid10_free_conf(priv); - } - - static void raid10_quiesce(struct mddev *mddev, int quiesce) -@@ -4748,6 +4753,7 @@ static void end_reshape(struct r10conf *conf) - stripe /= conf->geo.near_copies; - if (conf->mddev->queue->backing_dev_info->ra_pages < 2 * stripe) - conf->mddev->queue->backing_dev_info->ra_pages = 2 * stripe; -+ raid10_set_io_opt(conf); - } - conf->fullsync = 0; - } -diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c -index d0c3f49c8c162..113ba084fab45 100644 ---- a/drivers/md/raid5.c -+++ b/drivers/md/raid5.c -@@ -7159,6 +7159,12 @@ static int only_parity(int raid_disk, int algo, int raid_disks, int max_degraded - return 0; - } - -+static void raid5_set_io_opt(struct r5conf *conf) -+{ -+ blk_queue_io_opt(conf->mddev->queue, (conf->chunk_sectors << 9) * -+ (conf->raid_disks - conf->max_degraded)); -+} -+ - static int raid5_run(struct mddev *mddev) - { - struct r5conf *conf; -@@ -7448,8 +7454,7 @@ static int raid5_run(struct mddev *mddev) - - chunk_size = mddev->chunk_sectors << 9; - blk_queue_io_min(mddev->queue, chunk_size); -- blk_queue_io_opt(mddev->queue, chunk_size * -- (conf->raid_disks - conf->max_degraded)); -+ raid5_set_io_opt(conf); - mddev->queue->limits.raid_partial_stripes_expensive = 1; - /* - * We can only discard a whole stripe. It doesn't make sense to -@@ -8043,6 +8048,7 @@ static void end_reshape(struct r5conf *conf) - / PAGE_SIZE); - if (conf->mddev->queue->backing_dev_info->ra_pages < 2 * stripe) - conf->mddev->queue->backing_dev_info->ra_pages = 2 * stripe; -+ raid5_set_io_opt(conf); - } - } - } -diff --git a/drivers/media/pci/dm1105/dm1105.c b/drivers/media/pci/dm1105/dm1105.c -index bb3a8cc9de0cb..6dbd98a3e5b8f 100644 ---- a/drivers/media/pci/dm1105/dm1105.c -+++ b/drivers/media/pci/dm1105/dm1105.c -@@ -1179,6 +1179,7 @@ static void dm1105_remove(struct pci_dev *pdev) - struct dvb_demux *dvbdemux = &dev->demux; - struct dmx_demux *dmx = &dvbdemux->dmx; - -+ cancel_work_sync(&dev->ir.work); - dm1105_ir_exit(dev); - dmx->close(dmx); - dvb_net_release(&dev->dvbnet); -diff --git a/drivers/media/pci/saa7134/saa7134-ts.c b/drivers/media/pci/saa7134/saa7134-ts.c -index 6a5053126237f..437dbe5e75e29 100644 ---- a/drivers/media/pci/saa7134/saa7134-ts.c -+++ b/drivers/media/pci/saa7134/saa7134-ts.c -@@ -300,6 +300,7 @@ int saa7134_ts_start(struct saa7134_dev *dev) - - int saa7134_ts_fini(struct saa7134_dev *dev) - { -+ del_timer_sync(&dev->ts_q.timeout); - saa7134_pgtable_free(dev->pci, &dev->ts_q.pt); - return 0; - } -diff --git a/drivers/media/pci/saa7134/saa7134-vbi.c b/drivers/media/pci/saa7134/saa7134-vbi.c -index 3f0b0933eed69..3e773690468bd 100644 ---- a/drivers/media/pci/saa7134/saa7134-vbi.c -+++ b/drivers/media/pci/saa7134/saa7134-vbi.c -@@ -185,6 +185,7 @@ int saa7134_vbi_init1(struct saa7134_dev *dev) - int saa7134_vbi_fini(struct saa7134_dev *dev) - { - /* nothing */ -+ del_timer_sync(&dev->vbi_q.timeout); - return 0; - } - -diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c -index e454a288229b8..ea26c8c57494f 100644 ---- a/drivers/media/pci/saa7134/saa7134-video.c -+++ b/drivers/media/pci/saa7134/saa7134-video.c -@@ -2154,6 +2154,7 @@ int saa7134_video_init1(struct saa7134_dev *dev) - - void saa7134_video_fini(struct saa7134_dev *dev) - { -+ del_timer_sync(&dev->video_q.timeout); - /* free stuff */ - vb2_queue_release(&dev->video_vbq); - saa7134_pgtable_free(dev->pci, &dev->video_q.pt); -diff --git a/drivers/media/pci/ttpci/av7110_av.c b/drivers/media/pci/ttpci/av7110_av.c -index ea9f7d0058a21..e201d5a56bc65 100644 ---- a/drivers/media/pci/ttpci/av7110_av.c -+++ b/drivers/media/pci/ttpci/av7110_av.c -@@ -822,10 +822,10 @@ static int write_ts_to_decoder(struct av7110 *av7110, int type, const u8 *buf, s - av7110_ipack_flush(ipack); - - if (buf[3] & ADAPT_FIELD) { -+ if (buf[4] > len - 1 - 4) -+ return 0; - len -= buf[4] + 1; - buf += buf[4] + 1; -- if (!len) -- return 0; - } - - av7110_ipack_instant_repack(buf + 4, len - 4, ipack); -diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/rcar_fdp1.c -index 97bed45360f08..af2408b4856e6 100644 ---- a/drivers/media/platform/rcar_fdp1.c -+++ b/drivers/media/platform/rcar_fdp1.c -@@ -2121,9 +2121,7 @@ static int fdp1_open(struct file *file) - - if (ctx->hdl.error) { - ret = ctx->hdl.error; -- v4l2_ctrl_handler_free(&ctx->hdl); -- kfree(ctx); -- goto done; -+ goto error_ctx; - } - - ctx->fh.ctrl_handler = &ctx->hdl; -@@ -2137,20 +2135,27 @@ static int fdp1_open(struct file *file) - - if (IS_ERR(ctx->fh.m2m_ctx)) { - ret = PTR_ERR(ctx->fh.m2m_ctx); -- -- v4l2_ctrl_handler_free(&ctx->hdl); -- kfree(ctx); -- goto done; -+ goto error_ctx; - } - - /* Perform any power management required */ -- pm_runtime_get_sync(fdp1->dev); -+ ret = pm_runtime_resume_and_get(fdp1->dev); -+ if (ret < 0) -+ goto error_pm; - - v4l2_fh_add(&ctx->fh); - - dprintk(fdp1, "Created instance: %p, m2m_ctx: %p\n", - ctx, ctx->fh.m2m_ctx); - -+ mutex_unlock(&fdp1->dev_mutex); -+ return 0; -+ -+error_pm: -+ v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); -+error_ctx: -+ v4l2_ctrl_handler_free(&ctx->hdl); -+ kfree(ctx); - done: - mutex_unlock(&fdp1->dev_mutex); - return ret; -@@ -2255,7 +2260,6 @@ static int fdp1_probe(struct platform_device *pdev) - struct fdp1_dev *fdp1; - struct video_device *vfd; - struct device_node *fcp_node; -- struct resource *res; - struct clk *clk; - unsigned int i; - -@@ -2282,17 +2286,15 @@ static int fdp1_probe(struct platform_device *pdev) - platform_set_drvdata(pdev, fdp1); - - /* Memory-mapped registers */ -- res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -- fdp1->regs = devm_ioremap_resource(&pdev->dev, res); -+ fdp1->regs = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(fdp1->regs)) - return PTR_ERR(fdp1->regs); - - /* Interrupt service routine registration */ -- fdp1->irq = ret = platform_get_irq(pdev, 0); -- if (ret < 0) { -- dev_err(&pdev->dev, "cannot find IRQ\n"); -+ ret = platform_get_irq(pdev, 0); -+ if (ret < 0) - return ret; -- } -+ fdp1->irq = ret; - - ret = devm_request_irq(&pdev->dev, fdp1->irq, fdp1_irq_handler, 0, - dev_name(&pdev->dev), fdp1); -@@ -2315,8 +2317,10 @@ static int fdp1_probe(struct platform_device *pdev) - - /* Determine our clock rate */ - clk = clk_get(&pdev->dev, NULL); -- if (IS_ERR(clk)) -- return PTR_ERR(clk); -+ if (IS_ERR(clk)) { -+ ret = PTR_ERR(clk); -+ goto put_dev; -+ } - - fdp1->clk_rate = clk_get_rate(clk); - clk_put(clk); -@@ -2325,7 +2329,7 @@ static int fdp1_probe(struct platform_device *pdev) - ret = v4l2_device_register(&pdev->dev, &fdp1->v4l2_dev); - if (ret) { - v4l2_err(&fdp1->v4l2_dev, "Failed to register video device\n"); -- return ret; -+ goto put_dev; - } - - /* M2M registration */ -@@ -2355,7 +2359,9 @@ static int fdp1_probe(struct platform_device *pdev) - - /* Power up the cells to read HW */ - pm_runtime_enable(&pdev->dev); -- pm_runtime_get_sync(fdp1->dev); -+ ret = pm_runtime_resume_and_get(fdp1->dev); -+ if (ret < 0) -+ goto disable_pm; - - hw_version = fdp1_read(fdp1, FD1_IP_INTDATA); - switch (hw_version) { -@@ -2384,12 +2390,17 @@ static int fdp1_probe(struct platform_device *pdev) - - return 0; - -+disable_pm: -+ pm_runtime_disable(fdp1->dev); -+ - release_m2m: - v4l2_m2m_release(fdp1->m2m_dev); - - unreg_dev: - v4l2_device_unregister(&fdp1->v4l2_dev); - -+put_dev: -+ rcar_fcp_put(fdp1->fcp); - return ret; - } - -@@ -2401,6 +2412,7 @@ static int fdp1_remove(struct platform_device *pdev) - video_unregister_device(&fdp1->vfd); - v4l2_device_unregister(&fdp1->v4l2_dev); - pm_runtime_disable(&pdev->dev); -+ rcar_fcp_put(fdp1->fcp); - - return 0; - } -diff --git a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c -index 16a097f93b423..2485a3657c891 100644 ---- a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c -+++ b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c -@@ -1308,6 +1308,8 @@ static int bdisp_probe(struct platform_device *pdev) - init_waitqueue_head(&bdisp->irq_queue); - INIT_DELAYED_WORK(&bdisp->timeout_work, bdisp_irq_timeout); - bdisp->work_queue = create_workqueue(BDISP_NAME); -+ if (!bdisp->work_queue) -+ return -ENOMEM; - - spin_lock_init(&bdisp->slock); - mutex_init(&bdisp->lock); -diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c -index a20413008c3cb..f50398b3ed5f4 100644 ---- a/drivers/media/rc/gpio-ir-recv.c -+++ b/drivers/media/rc/gpio-ir-recv.c -@@ -83,6 +83,8 @@ static int gpio_ir_recv_probe(struct platform_device *pdev) - rcdev->map_name = RC_MAP_EMPTY; - - gpio_dev->rcdev = rcdev; -+ if (of_property_read_bool(np, "wakeup-source")) -+ device_init_wakeup(dev, true); - - rc = devm_rc_register_device(dev, rcdev); - if (rc < 0) { -diff --git a/drivers/misc/vmw_vmci/vmci_host.c b/drivers/misc/vmw_vmci/vmci_host.c -index 833e2bd248a57..8ff8d649d9b3a 100644 ---- a/drivers/misc/vmw_vmci/vmci_host.c -+++ b/drivers/misc/vmw_vmci/vmci_host.c -@@ -160,10 +160,16 @@ static int vmci_host_close(struct inode *inode, struct file *filp) - static __poll_t vmci_host_poll(struct file *filp, poll_table *wait) - { - struct vmci_host_dev *vmci_host_dev = filp->private_data; -- struct vmci_ctx *context = vmci_host_dev->context; -+ struct vmci_ctx *context; - __poll_t mask = 0; - - if (vmci_host_dev->ct_type == VMCIOBJ_CONTEXT) { -+ /* -+ * Read context only if ct_type == VMCIOBJ_CONTEXT to make -+ * sure that context is initialized -+ */ -+ context = vmci_host_dev->context; -+ - /* Check for VMCI calls to this VM context. */ - if (wait) - poll_wait(filp, &context->host_context.wait_queue, -diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c -index 69c133e7ced05..48765208e2953 100644 ---- a/drivers/mmc/host/sdhci-of-esdhc.c -+++ b/drivers/mmc/host/sdhci-of-esdhc.c -@@ -124,6 +124,7 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host, - return ret; - } - } -+ - /* - * The DAT[3:0] line signal levels and the CMD line signal level are - * not compatible with standard SDHC register. The line signal levels -@@ -135,6 +136,16 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host, - ret = value & 0x000fffff; - ret |= (value >> 4) & SDHCI_DATA_LVL_MASK; - ret |= (value << 1) & SDHCI_CMD_LVL; -+ -+ /* -+ * Some controllers have unreliable Data Line Active -+ * bit for commands with busy signal. This affects -+ * Command Inhibit (data) bit. Just ignore it since -+ * MMC core driver has already polled card status -+ * with CMD13 after any command with busy siganl. -+ */ -+ if (esdhc->quirk_ignore_data_inhibit) -+ ret &= ~SDHCI_DATA_INHIBIT; - return ret; - } - -@@ -149,19 +160,6 @@ static u32 esdhc_readl_fixup(struct sdhci_host *host, - return ret; - } - -- /* -- * Some controllers have unreliable Data Line Active -- * bit for commands with busy signal. This affects -- * Command Inhibit (data) bit. Just ignore it since -- * MMC core driver has already polled card status -- * with CMD13 after any command with busy siganl. -- */ -- if ((spec_reg == SDHCI_PRESENT_STATE) && -- (esdhc->quirk_ignore_data_inhibit == true)) { -- ret = value & ~SDHCI_DATA_INHIBIT; -- return ret; -- } -- - ret = value; - return ret; - } -diff --git a/drivers/mtd/spi-nor/cadence-quadspi.c b/drivers/mtd/spi-nor/cadence-quadspi.c -index 97a5e1eaeefdf..7bdc558d85601 100644 ---- a/drivers/mtd/spi-nor/cadence-quadspi.c -+++ b/drivers/mtd/spi-nor/cadence-quadspi.c -@@ -34,6 +34,7 @@ - - /* Quirks */ - #define CQSPI_NEEDS_WR_DELAY BIT(0) -+#define CQSPI_DISABLE_DAC_MODE BIT(1) - - /* Capabilities mask */ - #define CQSPI_BASE_HWCAPS_MASK \ -@@ -77,9 +78,6 @@ struct cqspi_st { - dma_addr_t mmap_phys_base; - - int current_cs; -- int current_page_size; -- int current_erase_size; -- int current_addr_width; - unsigned long master_ref_clk_hz; - bool is_decoded_cs; - u32 fifo_depth; -@@ -736,32 +734,6 @@ static void cqspi_chipselect(struct spi_nor *nor) - writel(reg, reg_base + CQSPI_REG_CONFIG); - } - --static void cqspi_configure_cs_and_sizes(struct spi_nor *nor) --{ -- struct cqspi_flash_pdata *f_pdata = nor->priv; -- struct cqspi_st *cqspi = f_pdata->cqspi; -- void __iomem *iobase = cqspi->iobase; -- unsigned int reg; -- -- /* configure page size and block size. */ -- reg = readl(iobase + CQSPI_REG_SIZE); -- reg &= ~(CQSPI_REG_SIZE_PAGE_MASK << CQSPI_REG_SIZE_PAGE_LSB); -- reg &= ~(CQSPI_REG_SIZE_BLOCK_MASK << CQSPI_REG_SIZE_BLOCK_LSB); -- reg &= ~CQSPI_REG_SIZE_ADDRESS_MASK; -- reg |= (nor->page_size << CQSPI_REG_SIZE_PAGE_LSB); -- reg |= (ilog2(nor->mtd.erasesize) << CQSPI_REG_SIZE_BLOCK_LSB); -- reg |= (nor->addr_width - 1); -- writel(reg, iobase + CQSPI_REG_SIZE); -- -- /* configure the chip select */ -- cqspi_chipselect(nor); -- -- /* Store the new configuration of the controller */ -- cqspi->current_page_size = nor->page_size; -- cqspi->current_erase_size = nor->mtd.erasesize; -- cqspi->current_addr_width = nor->addr_width; --} -- - static unsigned int calculate_ticks_for_ns(const unsigned int ref_clk_hz, - const unsigned int ns_val) - { -@@ -867,18 +839,13 @@ static void cqspi_configure(struct spi_nor *nor) - int switch_cs = (cqspi->current_cs != f_pdata->cs); - int switch_ck = (cqspi->sclk != sclk); - -- if ((cqspi->current_page_size != nor->page_size) || -- (cqspi->current_erase_size != nor->mtd.erasesize) || -- (cqspi->current_addr_width != nor->addr_width)) -- switch_cs = 1; -- - if (switch_cs || switch_ck) - cqspi_controller_enable(cqspi, 0); - - /* Switch chip select. */ - if (switch_cs) { - cqspi->current_cs = f_pdata->cs; -- cqspi_configure_cs_and_sizes(nor); -+ cqspi_chipselect(nor); - } - - /* Setup baudrate divisor and delays */ -@@ -1201,7 +1168,7 @@ static void cqspi_controller_init(struct cqspi_st *cqspi) - cqspi_controller_enable(cqspi, 1); - } - --static void cqspi_request_mmap_dma(struct cqspi_st *cqspi) -+static int cqspi_request_mmap_dma(struct cqspi_st *cqspi) - { - dma_cap_mask_t mask; - -@@ -1210,10 +1177,16 @@ static void cqspi_request_mmap_dma(struct cqspi_st *cqspi) - - cqspi->rx_chan = dma_request_chan_by_mask(&mask); - if (IS_ERR(cqspi->rx_chan)) { -- dev_err(&cqspi->pdev->dev, "No Rx DMA available\n"); -+ int ret = PTR_ERR(cqspi->rx_chan); -+ -+ if (ret != -EPROBE_DEFER) -+ dev_err(&cqspi->pdev->dev, "No Rx DMA available\n"); - cqspi->rx_chan = NULL; -+ return ret; - } - init_completion(&cqspi->rx_dma_complete); -+ -+ return 0; - } - - static int cqspi_setup_flash(struct cqspi_st *cqspi, struct device_node *np) -@@ -1291,13 +1264,17 @@ static int cqspi_setup_flash(struct cqspi_st *cqspi, struct device_node *np) - - f_pdata->registered = true; - -- if (mtd->size <= cqspi->ahb_size) { -+ if (mtd->size <= cqspi->ahb_size && -+ !(ddata->quirks & CQSPI_DISABLE_DAC_MODE)) { - f_pdata->use_direct_mode = true; - dev_dbg(nor->dev, "using direct mode for %s\n", - mtd->name); - -- if (!cqspi->rx_chan) -- cqspi_request_mmap_dma(cqspi); -+ if (!cqspi->rx_chan) { -+ ret = cqspi_request_mmap_dma(cqspi); -+ if (ret == -EPROBE_DEFER) -+ goto err; -+ } - } - } - -@@ -1464,17 +1441,30 @@ static int cqspi_remove(struct platform_device *pdev) - static int cqspi_suspend(struct device *dev) - { - struct cqspi_st *cqspi = dev_get_drvdata(dev); -+ struct spi_master *master = dev_get_drvdata(dev); -+ int ret; - -+ ret = spi_master_suspend(master); - cqspi_controller_enable(cqspi, 0); -- return 0; -+ -+ clk_disable_unprepare(cqspi->clk); -+ -+ return ret; - } - - static int cqspi_resume(struct device *dev) - { - struct cqspi_st *cqspi = dev_get_drvdata(dev); -+ struct spi_master *master = dev_get_drvdata(dev); - -- cqspi_controller_enable(cqspi, 1); -- return 0; -+ clk_prepare_enable(cqspi->clk); -+ cqspi_wait_idle(cqspi); -+ cqspi_controller_init(cqspi); -+ -+ cqspi->current_cs = -1; -+ cqspi->sclk = 0; -+ -+ return spi_master_resume(master); - } - - static const struct dev_pm_ops cqspi__dev_pm_ops = { -@@ -1489,6 +1479,7 @@ static const struct dev_pm_ops cqspi__dev_pm_ops = { - - static const struct cqspi_driver_platdata cdns_qspi = { - .hwcaps_mask = CQSPI_BASE_HWCAPS_MASK, -+ .quirks = CQSPI_DISABLE_DAC_MODE, - }; - - static const struct cqspi_driver_platdata k2g_qspi = { -diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c -index 5133e1be5331f..3243bca19b8b2 100644 ---- a/drivers/mtd/ubi/eba.c -+++ b/drivers/mtd/ubi/eba.c -@@ -947,7 +947,7 @@ static int try_write_vid_and_data(struct ubi_volume *vol, int lnum, - int offset, int len) - { - struct ubi_device *ubi = vol->ubi; -- int pnum, opnum, err, vol_id = vol->vol_id; -+ int pnum, opnum, err, err2, vol_id = vol->vol_id; - - pnum = ubi_wl_get_peb(ubi); - if (pnum < 0) { -@@ -982,10 +982,19 @@ static int try_write_vid_and_data(struct ubi_volume *vol, int lnum, - out_put: - up_read(&ubi->fm_eba_sem); - -- if (err && pnum >= 0) -- err = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1); -- else if (!err && opnum >= 0) -- err = ubi_wl_put_peb(ubi, vol_id, lnum, opnum, 0); -+ if (err && pnum >= 0) { -+ err2 = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1); -+ if (err2) { -+ ubi_warn(ubi, "failed to return physical eraseblock %d, error %d", -+ pnum, err2); -+ } -+ } else if (!err && opnum >= 0) { -+ err2 = ubi_wl_put_peb(ubi, vol_id, lnum, opnum, 0); -+ if (err2) { -+ ubi_warn(ubi, "failed to return physical eraseblock %d, error %d", -+ opnum, err2); -+ } -+ } - - return err; - } -diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c -index 2d8382eb9add3..baa994b7f78b5 100644 ---- a/drivers/net/dsa/mt7530.c -+++ b/drivers/net/dsa/mt7530.c -@@ -397,9 +397,9 @@ mt7530_pad_clk_setup(struct dsa_switch *ds, int mode) - case PHY_INTERFACE_MODE_TRGMII: - trgint = 1; - if (priv->id == ID_MT7621) { -- /* PLL frequency: 150MHz: 1.2GBit */ -+ /* PLL frequency: 125MHz: 1.0GBit */ - if (xtal == HWTRAP_XTAL_40MHZ) -- ncpo1 = 0x0780; -+ ncpo1 = 0x0640; - if (xtal == HWTRAP_XTAL_25MHZ) - ncpo1 = 0x0a00; - } else { /* PLL frequency: 250MHz: 2.0Gbit */ -diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c -index ea32be579e7b1..3a8a49b7ec3d9 100644 ---- a/drivers/net/dsa/mv88e6xxx/chip.c -+++ b/drivers/net/dsa/mv88e6xxx/chip.c -@@ -3876,6 +3876,7 @@ static const struct mv88e6xxx_ops mv88e6321_ops = { - .set_cpu_port = mv88e6095_g1_set_cpu_port, - .set_egress_port = mv88e6095_g1_set_egress_port, - .watchdog_ops = &mv88e6390_watchdog_ops, -+ .mgmt_rsvd2cpu = mv88e6352_g2_mgmt_rsvd2cpu, - .reset = mv88e6352_g1_reset, - .vtu_getnext = mv88e6185_g1_vtu_getnext, - .vtu_loadpurge = mv88e6185_g1_vtu_loadpurge, -diff --git a/drivers/net/ethernet/amd/nmclan_cs.c b/drivers/net/ethernet/amd/nmclan_cs.c -index 9c152d85840d7..c9d2a6f150624 100644 ---- a/drivers/net/ethernet/amd/nmclan_cs.c -+++ b/drivers/net/ethernet/amd/nmclan_cs.c -@@ -652,7 +652,7 @@ static int nmclan_config(struct pcmcia_device *link) - } else { - pr_notice("mace id not found: %x %x should be 0x40 0x?9\n", - sig[0], sig[1]); -- return -ENODEV; -+ goto failed; - } - } - -diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c -index 7c52ae8ac005b..a43cb7bfcccd7 100644 ---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c -+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c -@@ -2542,6 +2542,14 @@ static int ixgbe_get_rss_hash_opts(struct ixgbe_adapter *adapter, - return 0; - } - -+static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter) -+{ -+ if (adapter->hw.mac.type < ixgbe_mac_X550) -+ return 16; -+ else -+ return 64; -+} -+ - static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, - u32 *rule_locs) - { -@@ -2550,7 +2558,8 @@ static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, - - switch (cmd->cmd) { - case ETHTOOL_GRXRINGS: -- cmd->data = adapter->num_rx_queues; -+ cmd->data = min_t(int, adapter->num_rx_queues, -+ ixgbe_rss_indir_tbl_max(adapter)); - ret = 0; - break; - case ETHTOOL_GRXCLSRLCNT: -@@ -2952,14 +2961,6 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd) - return ret; - } - --static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter) --{ -- if (adapter->hw.mac.type < ixgbe_mac_X550) -- return 16; -- else -- return 64; --} -- - static u32 ixgbe_get_rxfh_key_size(struct net_device *netdev) - { - return IXGBE_RSS_KEY_SIZE; -@@ -3008,8 +3009,8 @@ static int ixgbe_set_rxfh(struct net_device *netdev, const u32 *indir, - int i; - u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter); - -- if (hfunc) -- return -EINVAL; -+ if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) -+ return -EOPNOTSUPP; - - /* Fill out the redirection table */ - if (indir) { -diff --git a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c -index b8de3784d9769..c53d2271d8abc 100644 ---- a/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c -+++ b/drivers/net/ethernet/pensando/ionic/ionic_ethtool.c -@@ -573,7 +573,7 @@ static int ionic_get_rxnfc(struct net_device *netdev, - info->data = lif->nxqs; - break; - default: -- netdev_err(netdev, "Command parameter %d is not supported\n", -+ netdev_dbg(netdev, "Command parameter %d is not supported\n", - info->cmd); - err = -EOPNOTSUPP; - } -diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c -index 59d4449450ee8..7922e833620e8 100644 ---- a/drivers/net/virtio_net.c -+++ b/drivers/net/virtio_net.c -@@ -2792,6 +2792,27 @@ static void free_receive_page_frags(struct virtnet_info *vi) - put_page(vi->rq[i].alloc_frag.page); - } - -+static void virtnet_sq_free_unused_buf(struct virtqueue *vq, void *buf) -+{ -+ if (!is_xdp_frame(buf)) -+ dev_kfree_skb(buf); -+ else -+ xdp_return_frame(ptr_to_xdp(buf)); -+} -+ -+static void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *buf) -+{ -+ struct virtnet_info *vi = vq->vdev->priv; -+ int i = vq2rxq(vq); -+ -+ if (vi->mergeable_rx_bufs) -+ put_page(virt_to_head_page(buf)); -+ else if (vi->big_packets) -+ give_pages(&vi->rq[i], buf); -+ else -+ put_page(virt_to_head_page(buf)); -+} -+ - static void free_unused_bufs(struct virtnet_info *vi) - { - void *buf; -@@ -2799,26 +2820,16 @@ static void free_unused_bufs(struct virtnet_info *vi) - - for (i = 0; i < vi->max_queue_pairs; i++) { - struct virtqueue *vq = vi->sq[i].vq; -- while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { -- if (!is_xdp_frame(buf)) -- dev_kfree_skb(buf); -- else -- xdp_return_frame(ptr_to_xdp(buf)); -- } -+ while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) -+ virtnet_sq_free_unused_buf(vq, buf); -+ cond_resched(); - } - - for (i = 0; i < vi->max_queue_pairs; i++) { - struct virtqueue *vq = vi->rq[i].vq; -- -- while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { -- if (vi->mergeable_rx_bufs) { -- put_page(virt_to_head_page(buf)); -- } else if (vi->big_packets) { -- give_pages(&vi->rq[i], buf); -- } else { -- put_page(virt_to_head_page(buf)); -- } -- } -+ while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) -+ virtnet_rq_free_unused_buf(vq, buf); -+ cond_resched(); - } - } - -diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c b/drivers/net/wireless/ath/ath5k/eeprom.c -index 01163b3339451..92f5c8e830901 100644 ---- a/drivers/net/wireless/ath/ath5k/eeprom.c -+++ b/drivers/net/wireless/ath/ath5k/eeprom.c -@@ -529,7 +529,7 @@ ath5k_eeprom_read_freq_list(struct ath5k_hw *ah, int *offset, int max, - ee->ee_n_piers[mode]++; - - freq2 = (val >> 8) & 0xff; -- if (!freq2) -+ if (!freq2 || i >= max) - break; - - pc[i++].freq = ath5k_eeprom_bin2freq(ee, -diff --git a/drivers/net/wireless/ath/ath6kl/bmi.c b/drivers/net/wireless/ath/ath6kl/bmi.c -index bde5a10d470c8..af98e871199d3 100644 ---- a/drivers/net/wireless/ath/ath6kl/bmi.c -+++ b/drivers/net/wireless/ath/ath6kl/bmi.c -@@ -246,7 +246,7 @@ int ath6kl_bmi_execute(struct ath6kl *ar, u32 addr, u32 *param) - return -EACCES; - } - -- size = sizeof(cid) + sizeof(addr) + sizeof(param); -+ size = sizeof(cid) + sizeof(addr) + sizeof(*param); - if (size > ar->bmi.max_cmd_size) { - WARN_ON(1); - return -EINVAL; -diff --git a/drivers/net/wireless/ath/ath6kl/htc_pipe.c b/drivers/net/wireless/ath/ath6kl/htc_pipe.c -index c68848819a52d..9b88d96bfe96c 100644 ---- a/drivers/net/wireless/ath/ath6kl/htc_pipe.c -+++ b/drivers/net/wireless/ath/ath6kl/htc_pipe.c -@@ -960,8 +960,8 @@ static int ath6kl_htc_pipe_rx_complete(struct ath6kl *ar, struct sk_buff *skb, - * Thus the possibility of ar->htc_target being NULL - * via ath6kl_recv_complete -> ath6kl_usb_io_comp_work. - */ -- if (WARN_ON_ONCE(!target)) { -- ath6kl_err("Target not yet initialized\n"); -+ if (!target) { -+ ath6kl_dbg(ATH6KL_DBG_HTC, "Target not yet initialized\n"); - status = -EINVAL; - goto free_skb; - } -diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c -index e23d58f83dd6f..3aa915d215545 100644 ---- a/drivers/net/wireless/ath/ath9k/hif_usb.c -+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c -@@ -534,6 +534,24 @@ static struct ath9k_htc_hif hif_usb = { - .send = hif_usb_send, - }; - -+/* Need to free remain_skb allocated in ath9k_hif_usb_rx_stream -+ * in case ath9k_hif_usb_rx_stream wasn't called next time to -+ * process the buffer and subsequently free it. -+ */ -+static void ath9k_hif_usb_free_rx_remain_skb(struct hif_device_usb *hif_dev) -+{ -+ unsigned long flags; -+ -+ spin_lock_irqsave(&hif_dev->rx_lock, flags); -+ if (hif_dev->remain_skb) { -+ dev_kfree_skb_any(hif_dev->remain_skb); -+ hif_dev->remain_skb = NULL; -+ hif_dev->rx_remain_len = 0; -+ RX_STAT_INC(hif_dev, skb_dropped); -+ } -+ spin_unlock_irqrestore(&hif_dev->rx_lock, flags); -+} -+ - static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev, - struct sk_buff *skb) - { -@@ -868,6 +886,7 @@ err: - static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev) - { - usb_kill_anchored_urbs(&hif_dev->rx_submitted); -+ ath9k_hif_usb_free_rx_remain_skb(hif_dev); - } - - static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev) -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -index cd146bbca670b..5bfff309f5474 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -5466,6 +5466,11 @@ static s32 brcmf_get_assoc_ies(struct brcmf_cfg80211_info *cfg, - (struct brcmf_cfg80211_assoc_ielen_le *)cfg->extra_buf; - req_len = le32_to_cpu(assoc_info->req_len); - resp_len = le32_to_cpu(assoc_info->resp_len); -+ if (req_len > WL_EXTRA_BUF_MAX || resp_len > WL_EXTRA_BUF_MAX) { -+ bphy_err(drvr, "invalid lengths in assoc info: req %u resp %u\n", -+ req_len, resp_len); -+ return -EINVAL; -+ } - if (req_len) { - err = brcmf_fil_iovar_data_get(ifp, "assoc_req_ies", - cfg->extra_buf, -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c -index 524f9dd2323dc..f8785c70842dc 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c -@@ -1877,6 +1877,11 @@ static ssize_t iwl_dbgfs_mem_read(struct file *file, char __user *user_buf, - if (ret < 0) - return ret; - -+ if (iwl_rx_packet_payload_len(hcmd.resp_pkt) < sizeof(*rsp)) { -+ ret = -EIO; -+ goto out; -+ } -+ - rsp = (void *)hcmd.resp_pkt->data; - if (le32_to_cpu(rsp->status) != DEBUG_MEM_STATUS_SUCCESS) { - ret = -ENXIO; -@@ -1954,6 +1959,11 @@ static ssize_t iwl_dbgfs_mem_write(struct file *file, - if (ret < 0) - return ret; - -+ if (iwl_rx_packet_payload_len(hcmd.resp_pkt) < sizeof(*rsp)) { -+ ret = -EIO; -+ goto out; -+ } -+ - rsp = (void *)hcmd.resp_pkt->data; - if (rsp->status != DEBUG_MEM_STATUS_SUCCESS) { - ret = -ENXIO; -diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -index 8915030030c4c..3a93a7b8ba0af 100644 ---- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -@@ -630,7 +630,6 @@ static int iwl_pcie_set_hw_ready(struct iwl_trans *trans) - int iwl_pcie_prepare_card_hw(struct iwl_trans *trans) - { - int ret; -- int t = 0; - int iter; - - IWL_DEBUG_INFO(trans, "iwl_trans_prepare_card_hw enter\n"); -@@ -645,6 +644,8 @@ int iwl_pcie_prepare_card_hw(struct iwl_trans *trans) - usleep_range(1000, 2000); - - for (iter = 0; iter < 10; iter++) { -+ int t = 0; -+ - /* If HW is not ready, prepare the conditions to check again */ - iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG, - CSR_HW_IF_CONFIG_REG_PREPARE); -diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8192e.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8192e.c -index edd2960c109a4..e26a722852eea 100644 ---- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8192e.c -+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8192e.c -@@ -1702,6 +1702,7 @@ struct rtl8xxxu_fileops rtl8192eu_fops = { - .rx_desc_size = sizeof(struct rtl8xxxu_rxdesc24), - .has_s0s1 = 0, - .gen2_thermal_meter = 1, -+ .needs_full_init = 1, - .adda_1t_init = 0x0fc01616, - .adda_1t_path_on = 0x0fc01616, - .adda_2t_path_on_a = 0x0fc01616, -diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c -index c9ad6761032ae..8fb0b54738ca9 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/base.c -+++ b/drivers/net/wireless/realtek/rtlwifi/base.c -@@ -195,8 +195,8 @@ static void _rtl_init_hw_ht_capab(struct ieee80211_hw *hw, - } else { - if (get_rf_type(rtlphy) == RF_1T2R || - get_rf_type(rtlphy) == RF_2T2R) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "1T2R or 2T2R\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "1T2R or 2T2R\n"); - ht_cap->mcs.rx_mask[0] = 0xFF; - ht_cap->mcs.rx_mask[1] = 0xFF; - ht_cap->mcs.rx_mask[4] = 0x01; -@@ -204,7 +204,7 @@ static void _rtl_init_hw_ht_capab(struct ieee80211_hw *hw, - ht_cap->mcs.rx_highest = - cpu_to_le16(MAX_BIT_RATE_40MHZ_MCS15); - } else if (get_rf_type(rtlphy) == RF_1T1R) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "1T1R\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "1T1R\n"); - - ht_cap->mcs.rx_mask[0] = 0xFF; - ht_cap->mcs.rx_mask[1] = 0x00; -@@ -1324,7 +1324,7 @@ bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb) - rtlpriv->cfg->ops->chk_switch_dmdp(hw); - } - if (ieee80211_is_auth(fc)) { -- RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, "MAC80211_LINKING\n"); -+ rtl_dbg(rtlpriv, COMP_SEND, DBG_DMESG, "MAC80211_LINKING\n"); - - mac->link_state = MAC80211_LINKING; - /* Dul mac */ -@@ -1385,7 +1385,7 @@ bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx) - if (mac->act_scanning) - return false; - -- RT_TRACE(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -+ rtl_dbg(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, - "%s ACT_ADDBAREQ From :%pM\n", - is_tx ? "Tx" : "Rx", hdr->addr2); - RT_PRINT_DATA(rtlpriv, COMP_INIT, DBG_DMESG, "req\n", -@@ -1400,8 +1400,8 @@ bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx) - rcu_read_lock(); - sta = rtl_find_sta(hw, hdr->addr3); - if (sta == NULL) { -- RT_TRACE(rtlpriv, COMP_SEND | COMP_RECV, -- DBG_DMESG, "sta is NULL\n"); -+ rtl_dbg(rtlpriv, COMP_SEND | COMP_RECV, -+ DBG_DMESG, "sta is NULL\n"); - rcu_read_unlock(); - return true; - } -@@ -1428,13 +1428,13 @@ bool rtl_action_proc(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx) - } - break; - case ACT_ADDBARSP: -- RT_TRACE(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -- "%s ACT_ADDBARSP From :%pM\n", -- is_tx ? "Tx" : "Rx", hdr->addr2); -+ rtl_dbg(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -+ "%s ACT_ADDBARSP From :%pM\n", -+ is_tx ? "Tx" : "Rx", hdr->addr2); - break; - case ACT_DELBA: -- RT_TRACE(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -- "ACT_ADDBADEL From :%pM\n", hdr->addr2); -+ rtl_dbg(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -+ "ACT_ADDBADEL From :%pM\n", hdr->addr2); - break; - } - break; -@@ -1519,9 +1519,9 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx, - /* 68 : UDP BOOTP client - * 67 : UDP BOOTP server - */ -- RT_TRACE(rtlpriv, (COMP_SEND | COMP_RECV), -- DBG_DMESG, "dhcp %s !!\n", -- (is_tx) ? "Tx" : "Rx"); -+ rtl_dbg(rtlpriv, (COMP_SEND | COMP_RECV), -+ DBG_DMESG, "dhcp %s !!\n", -+ (is_tx) ? "Tx" : "Rx"); - - if (is_tx) - setup_special_tx(rtlpriv, ppsc, -@@ -1540,8 +1540,8 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx, - rtlpriv->btcoexist.btc_info.in_4way = true; - rtlpriv->btcoexist.btc_info.in_4way_ts = jiffies; - -- RT_TRACE(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -- "802.1X %s EAPOL pkt!!\n", (is_tx) ? "Tx" : "Rx"); -+ rtl_dbg(rtlpriv, (COMP_SEND | COMP_RECV), DBG_DMESG, -+ "802.1X %s EAPOL pkt!!\n", (is_tx) ? "Tx" : "Rx"); - - if (is_tx) { - rtlpriv->ra.is_special_data = true; -@@ -1583,12 +1583,12 @@ static void rtl_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb, - info = IEEE80211_SKB_CB(skb); - ieee80211_tx_info_clear_status(info); - if (ack) { -- RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_LOUD, -- "tx report: ack\n"); -+ rtl_dbg(rtlpriv, COMP_TX_REPORT, DBG_LOUD, -+ "tx report: ack\n"); - info->flags |= IEEE80211_TX_STAT_ACK; - } else { -- RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_LOUD, -- "tx report: not ack\n"); -+ rtl_dbg(rtlpriv, COMP_TX_REPORT, DBG_LOUD, -+ "tx report: not ack\n"); - info->flags &= ~IEEE80211_TX_STAT_ACK; - } - ieee80211_tx_status_irqsafe(hw, skb); -@@ -1626,8 +1626,8 @@ static u16 rtl_get_tx_report_sn(struct ieee80211_hw *hw, - tx_report->last_sent_time = jiffies; - tx_info->sn = sn; - tx_info->send_time = tx_report->last_sent_time; -- RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_DMESG, -- "Send TX-Report sn=0x%X\n", sn); -+ rtl_dbg(rtlpriv, COMP_TX_REPORT, DBG_DMESG, -+ "Send TX-Report sn=0x%X\n", sn); - - return sn; - } -@@ -1674,9 +1674,9 @@ void rtl_tx_report_handler(struct ieee80211_hw *hw, u8 *tmp_buf, u8 c2h_cmd_len) - break; - } - } -- RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_DMESG, -- "Recv TX-Report st=0x%02X sn=0x%X retry=0x%X\n", -- st, sn, retry); -+ rtl_dbg(rtlpriv, COMP_TX_REPORT, DBG_DMESG, -+ "Recv TX-Report st=0x%02X sn=0x%X retry=0x%X\n", -+ st, sn, retry); - } - EXPORT_SYMBOL_GPL(rtl_tx_report_handler); - -@@ -1689,9 +1689,9 @@ bool rtl_check_tx_report_acked(struct ieee80211_hw *hw) - return true; - - if (time_before(tx_report->last_sent_time + 3 * HZ, jiffies)) { -- RT_TRACE(rtlpriv, COMP_TX_REPORT, DBG_WARNING, -- "Check TX-Report timeout!! s_sn=0x%X r_sn=0x%X\n", -- tx_report->last_sent_sn, tx_report->last_recv_sn); -+ rtl_dbg(rtlpriv, COMP_TX_REPORT, DBG_WARNING, -+ "Check TX-Report timeout!! s_sn=0x%X r_sn=0x%X\n", -+ tx_report->last_sent_sn, tx_report->last_recv_sn); - return true; /* 3 sec. (timeout) seen as acked */ - } - -@@ -1707,8 +1707,8 @@ void rtl_wait_tx_report_acked(struct ieee80211_hw *hw, u32 wait_ms) - if (rtl_check_tx_report_acked(hw)) - break; - usleep_range(1000, 2000); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "Wait 1ms (%d/%d) to disable key.\n", i, wait_ms); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "Wait 1ms (%d/%d) to disable key.\n", i, wait_ms); - } - } - -@@ -1770,9 +1770,9 @@ int rtl_tx_agg_start(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - return -ENXIO; - tid_data = &sta_entry->tids[tid]; - -- RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, -- "on ra = %pM tid = %d seq:%d\n", sta->addr, tid, -- *ssn); -+ rtl_dbg(rtlpriv, COMP_SEND, DBG_DMESG, -+ "on ra = %pM tid = %d seq:%d\n", sta->addr, tid, -+ *ssn); - - tid_data->agg.agg_state = RTL_AGG_START; - -@@ -1789,8 +1789,8 @@ int rtl_tx_agg_stop(struct ieee80211_hw *hw, struct ieee80211_vif *vif, - if (sta == NULL) - return -EINVAL; - -- RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, -- "on ra = %pM tid = %d\n", sta->addr, tid); -+ rtl_dbg(rtlpriv, COMP_SEND, DBG_DMESG, -+ "on ra = %pM tid = %d\n", sta->addr, tid); - - if (unlikely(tid >= MAX_TID_COUNT)) - return -EINVAL; -@@ -1829,8 +1829,8 @@ int rtl_rx_agg_start(struct ieee80211_hw *hw, - return -ENXIO; - tid_data = &sta_entry->tids[tid]; - -- RT_TRACE(rtlpriv, COMP_RECV, DBG_DMESG, -- "on ra = %pM tid = %d\n", sta->addr, tid); -+ rtl_dbg(rtlpriv, COMP_RECV, DBG_DMESG, -+ "on ra = %pM tid = %d\n", sta->addr, tid); - - tid_data->agg.rx_agg_state = RTL_RX_AGG_START; - return 0; -@@ -1845,8 +1845,8 @@ int rtl_rx_agg_stop(struct ieee80211_hw *hw, - if (sta == NULL) - return -EINVAL; - -- RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, -- "on ra = %pM tid = %d\n", sta->addr, tid); -+ rtl_dbg(rtlpriv, COMP_SEND, DBG_DMESG, -+ "on ra = %pM tid = %d\n", sta->addr, tid); - - if (unlikely(tid >= MAX_TID_COUNT)) - return -EINVAL; -@@ -1866,8 +1866,8 @@ int rtl_tx_agg_oper(struct ieee80211_hw *hw, - if (sta == NULL) - return -EINVAL; - -- RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, -- "on ra = %pM tid = %d\n", sta->addr, tid); -+ rtl_dbg(rtlpriv, COMP_SEND, DBG_DMESG, -+ "on ra = %pM tid = %d\n", sta->addr, tid); - - if (unlikely(tid >= MAX_TID_COUNT)) - return -EINVAL; -@@ -1887,9 +1887,9 @@ void rtl_rx_ampdu_apply(struct rtl_priv *rtlpriv) - btc_ops->btc_get_ampdu_cfg(rtlpriv, &reject_agg, - &ctrl_agg_size, &agg_size); - -- RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_DMESG, -- "Set RX AMPDU: coex - reject=%d, ctrl_agg_size=%d, size=%d", -- reject_agg, ctrl_agg_size, agg_size); -+ rtl_dbg(rtlpriv, COMP_BT_COEXIST, DBG_DMESG, -+ "Set RX AMPDU: coex - reject=%d, ctrl_agg_size=%d, size=%d", -+ reject_agg, ctrl_agg_size, agg_size); - - rtlpriv->hw->max_rx_aggregation_subframes = - (ctrl_agg_size ? agg_size : IEEE80211_MAX_AMPDU_BUF_HT); -@@ -1977,9 +1977,9 @@ void rtl_scan_list_expire(struct ieee80211_hw *hw) - list_del(&entry->list); - rtlpriv->scan_list.num--; - -- RT_TRACE(rtlpriv, COMP_SCAN, DBG_LOUD, -- "BSSID=%pM is expire in scan list (total=%d)\n", -- entry->bssid, rtlpriv->scan_list.num); -+ rtl_dbg(rtlpriv, COMP_SCAN, DBG_LOUD, -+ "BSSID=%pM is expire in scan list (total=%d)\n", -+ entry->bssid, rtlpriv->scan_list.num); - kfree(entry); - } - -@@ -2013,9 +2013,9 @@ void rtl_collect_scan_list(struct ieee80211_hw *hw, struct sk_buff *skb) - if (memcmp(entry->bssid, hdr->addr3, ETH_ALEN) == 0) { - list_del_init(&entry->list); - entry_found = true; -- RT_TRACE(rtlpriv, COMP_SCAN, DBG_LOUD, -- "Update BSSID=%pM to scan list (total=%d)\n", -- hdr->addr3, rtlpriv->scan_list.num); -+ rtl_dbg(rtlpriv, COMP_SCAN, DBG_LOUD, -+ "Update BSSID=%pM to scan list (total=%d)\n", -+ hdr->addr3, rtlpriv->scan_list.num); - break; - } - } -@@ -2029,9 +2029,9 @@ void rtl_collect_scan_list(struct ieee80211_hw *hw, struct sk_buff *skb) - memcpy(entry->bssid, hdr->addr3, ETH_ALEN); - rtlpriv->scan_list.num++; - -- RT_TRACE(rtlpriv, COMP_SCAN, DBG_LOUD, -- "Add BSSID=%pM to scan list (total=%d)\n", -- hdr->addr3, rtlpriv->scan_list.num); -+ rtl_dbg(rtlpriv, COMP_SCAN, DBG_LOUD, -+ "Add BSSID=%pM to scan list (total=%d)\n", -+ hdr->addr3, rtlpriv->scan_list.num); - } - - entry->age = jiffies; -@@ -2191,8 +2191,8 @@ label_lps_done: - if ((rtlpriv->link_info.bcn_rx_inperiod + - rtlpriv->link_info.num_rx_inperiod) == 0) { - rtlpriv->link_info.roam_times++; -- RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG, -- "AP off for %d s\n", -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG, -+ "AP off for %d s\n", - (rtlpriv->link_info.roam_times * 2)); - - /* if we can't recv beacon for 10s, -@@ -2305,11 +2305,11 @@ static void rtl_c2h_content_parsing(struct ieee80211_hw *hw, - - switch (cmd_id) { - case C2H_DBG: -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "[C2H], C2H_DBG!!\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "[C2H], C2H_DBG!!\n"); - break; - case C2H_TXBF: -- RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -- "[C2H], C2H_TXBF!!\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_TRACE, -+ "[C2H], C2H_TXBF!!\n"); - break; - case C2H_TX_REPORT: - rtl_tx_report_handler(hw, cmd_buf, cmd_len); -@@ -2319,20 +2319,20 @@ static void rtl_c2h_content_parsing(struct ieee80211_hw *hw, - hal_ops->c2h_ra_report_handler(hw, cmd_buf, cmd_len); - break; - case C2H_BT_INFO: -- RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -- "[C2H], C2H_BT_INFO!!\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_TRACE, -+ "[C2H], C2H_BT_INFO!!\n"); - if (rtlpriv->cfg->ops->get_btc_status()) - btc_ops->btc_btinfo_notify(rtlpriv, cmd_buf, cmd_len); - break; - case C2H_BT_MP: -- RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -- "[C2H], C2H_BT_MP!!\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_TRACE, -+ "[C2H], C2H_BT_MP!!\n"); - if (rtlpriv->cfg->ops->get_btc_status()) - btc_ops->btc_btmpinfo_notify(rtlpriv, cmd_buf, cmd_len); - break; - default: -- RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, -- "[C2H], Unknown packet!! cmd_id(%#X)!\n", cmd_id); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_TRACE, -+ "[C2H], Unknown packet!! cmd_id(%#X)!\n", cmd_id); - break; - } - } -@@ -2356,8 +2356,8 @@ void rtl_c2hcmd_launcher(struct ieee80211_hw *hw, int exec) - if (!skb) - break; - -- RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, "C2H rx_desc_shift=%d\n", -- *((u8 *)skb->cb)); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG, "C2H rx_desc_shift=%d\n", -+ *((u8 *)skb->cb)); - RT_PRINT_DATA(rtlpriv, COMP_FW, DBG_DMESG, - "C2H data: ", skb->data, skb->len); - -@@ -2702,29 +2702,29 @@ void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len) - (memcmp(mac->bssid, ap5_6, 3) == 0) || - vendor == PEER_ATH) { - vendor = PEER_ATH; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>ath find\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>ath find\n"); - } else if ((memcmp(mac->bssid, ap4_4, 3) == 0) || - (memcmp(mac->bssid, ap4_5, 3) == 0) || - (memcmp(mac->bssid, ap4_1, 3) == 0) || - (memcmp(mac->bssid, ap4_2, 3) == 0) || - (memcmp(mac->bssid, ap4_3, 3) == 0) || - vendor == PEER_RAL) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>ral find\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>ral find\n"); - vendor = PEER_RAL; - } else if (memcmp(mac->bssid, ap6_1, 3) == 0 || - vendor == PEER_CISCO) { - vendor = PEER_CISCO; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>cisco find\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>cisco find\n"); - } else if ((memcmp(mac->bssid, ap3_1, 3) == 0) || - (memcmp(mac->bssid, ap3_2, 3) == 0) || - (memcmp(mac->bssid, ap3_3, 3) == 0) || - vendor == PEER_BROAD) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>broad find\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>broad find\n"); - vendor = PEER_BROAD; - } else if (memcmp(mac->bssid, ap7_1, 3) == 0 || - vendor == PEER_MARV) { - vendor = PEER_MARV; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>marv find\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "=>marv find\n"); - } - - mac->vendor = vendor; -diff --git a/drivers/net/wireless/realtek/rtlwifi/cam.c b/drivers/net/wireless/realtek/rtlwifi/cam.c -index bf0e0bb1f99ba..7aa28da39409b 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/cam.c -+++ b/drivers/net/wireless/realtek/rtlwifi/cam.c -@@ -43,14 +43,14 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], - target_command); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "WRITE %x: %x\n", -- rtlpriv->cfg->maps[WCAMI], target_content); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "The Key ID is %d\n", entry_no); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "WRITE %x: %x\n", -- rtlpriv->cfg->maps[RWCAM], target_command); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "WRITE %x: %x\n", -+ rtlpriv->cfg->maps[WCAMI], target_content); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "The Key ID is %d\n", entry_no); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "WRITE %x: %x\n", -+ rtlpriv->cfg->maps[RWCAM], target_command); - - } else if (entry_i == 1) { - -@@ -64,10 +64,10 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], - target_command); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "WRITE A4: %x\n", target_content); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "WRITE A0: %x\n", target_command); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "WRITE A4: %x\n", target_content); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "WRITE A0: %x\n", target_command); - - } else { - -@@ -83,15 +83,15 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no, - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], - target_command); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "WRITE A4: %x\n", target_content); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "WRITE A0: %x\n", target_command); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "WRITE A4: %x\n", target_content); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "WRITE A0: %x\n", target_command); - } - } - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "after set key, usconfig:%x\n", us_config); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "after set key, usconfig:%x\n", us_config); - } - - u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, -@@ -101,14 +101,14 @@ u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, - u32 us_config; - struct rtl_priv *rtlpriv = rtl_priv(hw); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "EntryNo:%x, ulKeyId=%x, ulEncAlg=%x, ulUseDK=%x MacAddr %pM\n", -- ul_entry_idx, ul_key_id, ul_enc_alg, -- ul_default_key, mac_addr); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "EntryNo:%x, ulKeyId=%x, ulEncAlg=%x, ulUseDK=%x MacAddr %pM\n", -+ ul_entry_idx, ul_key_id, ul_enc_alg, -+ ul_default_key, mac_addr); - - if (ul_key_id == TOTAL_CAM_ENTRY) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "ulKeyId exceed!\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "ulKeyId exceed!\n"); - return 0; - } - -@@ -120,7 +120,7 @@ u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr, - rtl_cam_program_entry(hw, ul_entry_idx, mac_addr, - (u8 *)key_content, us_config); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "end\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "end\n"); - - return 1; - -@@ -133,7 +133,7 @@ int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, - u32 ul_command; - struct rtl_priv *rtlpriv = rtl_priv(hw); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "key_idx:%d\n", ul_key_id); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "key_idx:%d\n", ul_key_id); - - ul_command = ul_key_id * CAM_CONTENT_COUNT; - ul_command = ul_command | BIT(31) | BIT(16); -@@ -141,10 +141,10 @@ int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[WCAMI], 0); - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "rtl_cam_delete_one_entry(): WRITE A4: %x\n", 0); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "rtl_cam_delete_one_entry(): WRITE A0: %x\n", ul_command); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "%s: WRITE A4: %x\n", __func__, 0); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "%s: WRITE A0: %x\n", __func__, ul_command); - - return 0; - -@@ -195,10 +195,10 @@ void rtl_cam_mark_invalid(struct ieee80211_hw *hw, u8 uc_index) - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[WCAMI], ul_content); - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "rtl_cam_mark_invalid(): WRITE A4: %x\n", ul_content); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "rtl_cam_mark_invalid(): WRITE A0: %x\n", ul_command); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "%s: WRITE A4: %x\n", __func__, ul_content); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "%s: WRITE A0: %x\n", __func__, ul_command); - } - EXPORT_SYMBOL(rtl_cam_mark_invalid); - -@@ -245,12 +245,10 @@ void rtl_cam_empty_entry(struct ieee80211_hw *hw, u8 uc_index) - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[WCAMI], ul_content); - rtl_write_dword(rtlpriv, rtlpriv->cfg->maps[RWCAM], ul_command); - -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "rtl_cam_empty_entry(): WRITE A4: %x\n", -- ul_content); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_LOUD, -- "rtl_cam_empty_entry(): WRITE A0: %x\n", -- ul_command); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "%s: WRITE A4: %x\n", __func__, ul_content); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD, -+ "%s: WRITE A0: %x\n", __func__, ul_command); - } - - } -@@ -313,8 +311,8 @@ void rtl_cam_del_entry(struct ieee80211_hw *hw, u8 *sta_addr) - /* Remove from HW Security CAM */ - eth_zero_addr(rtlpriv->sec.hwsec_cam_sta_addr[i]); - rtlpriv->sec.hwsec_cam_bitmap &= ~(BIT(0) << i); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "&&&&&&&&&del entry %d\n", i); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "&&&&&&&&&del entry %d\n", i); - } - } - return; -diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c -index f73e690bbe8e0..c4c89aade8fbc 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/core.c -+++ b/drivers/net/wireless/realtek/rtlwifi/core.c -@@ -76,8 +76,8 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context, - struct rtl_priv *rtlpriv = rtl_priv(hw); - int err; - -- RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD, -- "Firmware callback routine entered!\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD, -+ "Firmware callback routine entered!\n"); - complete(&rtlpriv->firmware_loading_complete); - if (!firmware) { - if (rtlpriv->cfg->alt_fw_name) { -@@ -214,8 +214,8 @@ static int rtl_op_add_interface(struct ieee80211_hw *hw, - u8 retry_limit = 0x30; - - if (mac->vif) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "vif has been set!! mac->vif = 0x%p\n", mac->vif); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "vif has been set!! mac->vif = 0x%p\n", mac->vif); - return -EOPNOTSUPP; - } - -@@ -230,16 +230,16 @@ static int rtl_op_add_interface(struct ieee80211_hw *hw, - /*fall through*/ - case NL80211_IFTYPE_STATION: - if (mac->beacon_enabled == 1) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "NL80211_IFTYPE_STATION\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "NL80211_IFTYPE_STATION\n"); - mac->beacon_enabled = 0; - rtlpriv->cfg->ops->update_interrupt_mask(hw, 0, - rtlpriv->cfg->maps[RTL_IBSS_INT_MASKS]); - } - break; - case NL80211_IFTYPE_ADHOC: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "NL80211_IFTYPE_ADHOC\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "NL80211_IFTYPE_ADHOC\n"); - - mac->link_state = MAC80211_LINKED; - rtlpriv->cfg->ops->set_bcn_reg(hw); -@@ -256,8 +256,8 @@ static int rtl_op_add_interface(struct ieee80211_hw *hw, - mac->p2p = P2P_ROLE_GO; - /*fall through*/ - case NL80211_IFTYPE_AP: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "NL80211_IFTYPE_AP\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "NL80211_IFTYPE_AP\n"); - - mac->link_state = MAC80211_LINKED; - rtlpriv->cfg->ops->set_bcn_reg(hw); -@@ -271,8 +271,8 @@ static int rtl_op_add_interface(struct ieee80211_hw *hw, - retry_limit = 0x07; - break; - case NL80211_IFTYPE_MESH_POINT: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "NL80211_IFTYPE_MESH_POINT\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "NL80211_IFTYPE_MESH_POINT\n"); - - mac->link_state = MAC80211_LINKED; - rtlpriv->cfg->ops->set_bcn_reg(hw); -@@ -293,8 +293,8 @@ static int rtl_op_add_interface(struct ieee80211_hw *hw, - } - - if (mac->p2p) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "p2p role %x\n", vif->type); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "p2p role %x\n", vif->type); - mac->basic_rates = 0xff0;/*disable cck rate for p2p*/ - rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_BASIC_RATE, - (u8 *)(&mac->basic_rates)); -@@ -360,8 +360,8 @@ static int rtl_op_change_interface(struct ieee80211_hw *hw, - vif->type = new_type; - vif->p2p = p2p; - ret = rtl_op_add_interface(hw, vif); -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "p2p %x\n", p2p); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "p2p %x\n", p2p); - return ret; - } - -@@ -435,8 +435,8 @@ static void _rtl_add_wowlan_patterns(struct ieee80211_hw *hw, - memset(mask, 0, MAX_WOL_BIT_MASK_SIZE); - if (patterns[i].pattern_len < 0 || - patterns[i].pattern_len > MAX_WOL_PATTERN_SIZE) { -- RT_TRACE(rtlpriv, COMP_POWER, DBG_WARNING, -- "Pattern[%d] is too long\n", i); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_WARNING, -+ "Pattern[%d] is too long\n", i); - continue; - } - pattern_os = patterns[i].pattern; -@@ -515,8 +515,8 @@ static void _rtl_add_wowlan_patterns(struct ieee80211_hw *hw, - "pattern to hw\n", content, len); - /* 3. calculate crc */ - rtl_pattern.crc = _calculate_wol_pattern_crc(content, len); -- RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE, -- "CRC_Remainder = 0x%x\n", rtl_pattern.crc); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_TRACE, -+ "CRC_Remainder = 0x%x\n", rtl_pattern.crc); - - /* 4. write crc & mask_for_hw to hw */ - rtlpriv->cfg->ops->add_wowlan_pattern(hw, &rtl_pattern, i); -@@ -531,7 +531,7 @@ static int rtl_op_suspend(struct ieee80211_hw *hw, - struct rtl_hal *rtlhal = rtl_hal(rtlpriv); - struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); - -- RT_TRACE(rtlpriv, COMP_POWER, DBG_DMESG, "\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, "\n"); - if (WARN_ON(!wow)) - return -EINVAL; - -@@ -557,7 +557,7 @@ static int rtl_op_resume(struct ieee80211_hw *hw) - struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); - time64_t now; - -- RT_TRACE(rtlpriv, COMP_POWER, DBG_DMESG, "\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, "\n"); - rtlhal->driver_is_goingto_unload = false; - rtlhal->enter_pnp_sleep = false; - rtlhal->wake_from_pnp_sleep = true; -@@ -588,8 +588,8 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed) - - mutex_lock(&rtlpriv->locks.conf_mutex); - if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) { /* BIT(2)*/ -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "IEEE80211_CONF_CHANGE_LISTEN_INTERVAL\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "IEEE80211_CONF_CHANGE_LISTEN_INTERVAL\n"); - } - - /*For IPS */ -@@ -632,9 +632,9 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed) - } - - if (changed & IEEE80211_CONF_CHANGE_RETRY_LIMITS) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "IEEE80211_CONF_CHANGE_RETRY_LIMITS %x\n", -- hw->conf.long_frame_max_tx_count); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "IEEE80211_CONF_CHANGE_RETRY_LIMITS %x\n", -+ hw->conf.long_frame_max_tx_count); - /* brought up everything changes (changed == ~0) indicates first - * open, so use our default value instead of that of wiphy. - */ -@@ -809,13 +809,13 @@ static void rtl_op_configure_filter(struct ieee80211_hw *hw, - if (*new_flags & FIF_ALLMULTI) { - mac->rx_conf |= rtlpriv->cfg->maps[MAC_RCR_AM] | - rtlpriv->cfg->maps[MAC_RCR_AB]; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Enable receive multicast frame\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Enable receive multicast frame\n"); - } else { - mac->rx_conf &= ~(rtlpriv->cfg->maps[MAC_RCR_AM] | - rtlpriv->cfg->maps[MAC_RCR_AB]); -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Disable receive multicast frame\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Disable receive multicast frame\n"); - } - update_rcr = true; - } -@@ -823,12 +823,12 @@ static void rtl_op_configure_filter(struct ieee80211_hw *hw, - if (changed_flags & FIF_FCSFAIL) { - if (*new_flags & FIF_FCSFAIL) { - mac->rx_conf |= rtlpriv->cfg->maps[MAC_RCR_ACRC32]; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Enable receive FCS error frame\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Enable receive FCS error frame\n"); - } else { - mac->rx_conf &= ~rtlpriv->cfg->maps[MAC_RCR_ACRC32]; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Disable receive FCS error frame\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Disable receive FCS error frame\n"); - } - if (!update_rcr) - update_rcr = true; -@@ -855,12 +855,12 @@ static void rtl_op_configure_filter(struct ieee80211_hw *hw, - if (*new_flags & FIF_CONTROL) { - mac->rx_conf |= rtlpriv->cfg->maps[MAC_RCR_ACF]; - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Enable receive control frame.\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Enable receive control frame.\n"); - } else { - mac->rx_conf &= ~rtlpriv->cfg->maps[MAC_RCR_ACF]; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Disable receive control frame.\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Disable receive control frame.\n"); - } - if (!update_rcr) - update_rcr = true; -@@ -869,12 +869,12 @@ static void rtl_op_configure_filter(struct ieee80211_hw *hw, - if (changed_flags & FIF_OTHER_BSS) { - if (*new_flags & FIF_OTHER_BSS) { - mac->rx_conf |= rtlpriv->cfg->maps[MAC_RCR_AAP]; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Enable receive other BSS's frame.\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Enable receive other BSS's frame.\n"); - } else { - mac->rx_conf &= ~rtlpriv->cfg->maps[MAC_RCR_AAP]; -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "Disable receive other BSS's frame.\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "Disable receive other BSS's frame.\n"); - } - if (!update_rcr) - update_rcr = true; -@@ -923,7 +923,7 @@ static int rtl_op_sta_add(struct ieee80211_hw *hw, - sta->supp_rates[0] &= 0xfffffff0; - - memcpy(sta_entry->mac_addr, sta->addr, ETH_ALEN); -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, - "Add sta addr is %pM\n", sta->addr); - rtlpriv->cfg->ops->update_rate_tbl(hw, sta, 0, true); - } -@@ -939,8 +939,8 @@ static int rtl_op_sta_remove(struct ieee80211_hw *hw, - struct rtl_sta_info *sta_entry; - - if (sta) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "Remove sta addr is %pM\n", sta->addr); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "Remove sta addr is %pM\n", sta->addr); - sta_entry = (struct rtl_sta_info *)sta->drv_priv; - sta_entry->wireless_mode = 0; - sta_entry->ratr_index = 0; -@@ -988,8 +988,8 @@ static int rtl_op_conf_tx(struct ieee80211_hw *hw, - int aci; - - if (queue >= AC_MAX) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "queue number %d is incorrect!\n", queue); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "queue number %d is incorrect!\n", queue); - return -EINVAL; - } - -@@ -1034,8 +1034,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - (changed & BSS_CHANGED_BEACON_ENABLED && - bss_conf->enable_beacon)) { - if (mac->beacon_enabled == 0) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "BSS_CHANGED_BEACON_ENABLED\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "BSS_CHANGED_BEACON_ENABLED\n"); - - /*start hw beacon interrupt. */ - /*rtlpriv->cfg->ops->set_bcn_reg(hw); */ -@@ -1052,8 +1052,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - if ((changed & BSS_CHANGED_BEACON_ENABLED && - !bss_conf->enable_beacon)) { - if (mac->beacon_enabled == 1) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "ADHOC DISABLE BEACON\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "ADHOC DISABLE BEACON\n"); - - mac->beacon_enabled = 0; - rtlpriv->cfg->ops->update_interrupt_mask(hw, 0, -@@ -1062,8 +1062,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - } - } - if (changed & BSS_CHANGED_BEACON_INT) { -- RT_TRACE(rtlpriv, COMP_BEACON, DBG_TRACE, -- "BSS_CHANGED_BEACON_INT\n"); -+ rtl_dbg(rtlpriv, COMP_BEACON, DBG_TRACE, -+ "BSS_CHANGED_BEACON_INT\n"); - mac->beacon_interval = bss_conf->beacon_int; - rtlpriv->cfg->ops->set_bcn_intv(hw); - } -@@ -1102,8 +1102,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - rcu_read_unlock(); - goto out; - } -- RT_TRACE(rtlpriv, COMP_EASY_CONCURRENT, DBG_LOUD, -- "send PS STATIC frame\n"); -+ rtl_dbg(rtlpriv, COMP_EASY_CONCURRENT, DBG_LOUD, -+ "send PS STATIC frame\n"); - if (rtlpriv->dm.supp_phymode_switch) { - if (sta->ht_cap.ht_supported) - rtl_send_smps_action(hw, sta, -@@ -1143,8 +1143,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - HW_VAR_KEEP_ALIVE, - (u8 *)(&keep_alive)); - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "BSS_CHANGED_ASSOC\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "BSS_CHANGED_ASSOC\n"); - } else { - struct cfg80211_bss *bss = NULL; - -@@ -1161,14 +1161,14 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - IEEE80211_BSS_TYPE_ESS, - IEEE80211_PRIVACY_OFF); - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "bssid = %pMF\n", mac->bssid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "bssid = %pMF\n", mac->bssid); - - if (bss) { - cfg80211_unlink_bss(hw->wiphy, bss); - cfg80211_put_bss(hw->wiphy, bss); -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "cfg80211_unlink !!\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "cfg80211_unlink !!\n"); - } - - eth_zero_addr(mac->bssid); -@@ -1179,8 +1179,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - if (rtlpriv->cfg->ops->chk_switch_dmdp) - rtlpriv->cfg->ops->chk_switch_dmdp(hw); - } -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "BSS_CHANGED_UN_ASSOC\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "BSS_CHANGED_UN_ASSOC\n"); - } - rtlpriv->cfg->ops->set_network_type(hw, vif->type); - /* For FW LPS: -@@ -1198,14 +1198,14 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - } - - if (changed & BSS_CHANGED_ERP_CTS_PROT) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "BSS_CHANGED_ERP_CTS_PROT\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "BSS_CHANGED_ERP_CTS_PROT\n"); - mac->use_cts_protect = bss_conf->use_cts_prot; - } - - if (changed & BSS_CHANGED_ERP_PREAMBLE) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, -- "BSS_CHANGED_ERP_PREAMBLE use short preamble:%x\n", -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, -+ "BSS_CHANGED_ERP_PREAMBLE use short preamble:%x\n", - bss_conf->use_short_preamble); - - mac->short_preamble = bss_conf->use_short_preamble; -@@ -1214,8 +1214,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - } - - if (changed & BSS_CHANGED_ERP_SLOT) { -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "BSS_CHANGED_ERP_SLOT\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "BSS_CHANGED_ERP_SLOT\n"); - - if (bss_conf->use_short_slot) - mac->slot_time = RTL_SLOT_TIME_9; -@@ -1229,8 +1229,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - if (changed & BSS_CHANGED_HT) { - struct ieee80211_sta *sta = NULL; - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "BSS_CHANGED_HT\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "BSS_CHANGED_HT\n"); - - rcu_read_lock(); - sta = ieee80211_find_sta(vif, (u8 *)bss_conf->bssid); -@@ -1261,8 +1261,8 @@ static void rtl_op_bss_info_changed(struct ieee80211_hw *hw, - rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_BSSID, - (u8 *)bss_conf->bssid); - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_DMESG, -- "bssid: %pM\n", bss_conf->bssid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_DMESG, -+ "bssid: %pM\n", bss_conf->bssid); - - mac->vendor = PEER_UNKNOWN; - memcpy(mac->bssid, bss_conf->bssid, ETH_ALEN); -@@ -1393,27 +1393,27 @@ static int rtl_op_ampdu_action(struct ieee80211_hw *hw, - - switch (action) { - case IEEE80211_AMPDU_TX_START: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "IEEE80211_AMPDU_TX_START: TID:%d\n", tid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "IEEE80211_AMPDU_TX_START: TID:%d\n", tid); - return rtl_tx_agg_start(hw, vif, sta, tid, ssn); - case IEEE80211_AMPDU_TX_STOP_CONT: - case IEEE80211_AMPDU_TX_STOP_FLUSH: - case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "IEEE80211_AMPDU_TX_STOP: TID:%d\n", tid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "IEEE80211_AMPDU_TX_STOP: TID:%d\n", tid); - return rtl_tx_agg_stop(hw, vif, sta, tid); - case IEEE80211_AMPDU_TX_OPERATIONAL: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "IEEE80211_AMPDU_TX_OPERATIONAL:TID:%d\n", tid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "IEEE80211_AMPDU_TX_OPERATIONAL:TID:%d\n", tid); - rtl_tx_agg_oper(hw, sta, tid); - break; - case IEEE80211_AMPDU_RX_START: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "IEEE80211_AMPDU_RX_START:TID:%d\n", tid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "IEEE80211_AMPDU_RX_START:TID:%d\n", tid); - return rtl_rx_agg_start(hw, sta, tid); - case IEEE80211_AMPDU_RX_STOP: -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_TRACE, -- "IEEE80211_AMPDU_RX_STOP:TID:%d\n", tid); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_TRACE, -+ "IEEE80211_AMPDU_RX_STOP:TID:%d\n", tid); - return rtl_rx_agg_stop(hw, sta, tid); - default: - pr_err("IEEE80211_AMPDU_ERR!!!!:\n"); -@@ -1429,7 +1429,7 @@ static void rtl_op_sw_scan_start(struct ieee80211_hw *hw, - struct rtl_priv *rtlpriv = rtl_priv(hw); - struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "\n"); - mac->act_scanning = true; - if (rtlpriv->link_info.higher_busytraffic) { - mac->skip_scan = true; -@@ -1467,7 +1467,7 @@ static void rtl_op_sw_scan_complete(struct ieee80211_hw *hw, - struct rtl_priv *rtlpriv = rtl_priv(hw); - struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); - -- RT_TRACE(rtlpriv, COMP_MAC80211, DBG_LOUD, "\n"); -+ rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD, "\n"); - mac->act_scanning = false; - mac->skip_scan = false; - -@@ -1517,8 +1517,8 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - rtlpriv->btcoexist.btc_info.in_4way = false; - - if (rtlpriv->cfg->mod_params->sw_crypto || rtlpriv->sec.use_sw_sec) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "not open hw encryption\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "not open hw encryption\n"); - return -ENOSPC; /*User disabled HW-crypto */ - } - /* To support IBSS, use sw-crypto for GTK */ -@@ -1526,10 +1526,10 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - vif->type == NL80211_IFTYPE_MESH_POINT) && - !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) - return -ENOSPC; -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "%s hardware based encryption for keyidx: %d, mac: %pM\n", -- cmd == SET_KEY ? "Using" : "Disabling", key->keyidx, -- sta ? sta->addr : bcast_addr); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "%s hardware based encryption for keyidx: %d, mac: %pM\n", -+ cmd == SET_KEY ? "Using" : "Disabling", key->keyidx, -+ sta ? sta->addr : bcast_addr); - rtlpriv->sec.being_setkey = true; - rtl_ips_nic_on(hw); - mutex_lock(&rtlpriv->locks.conf_mutex); -@@ -1538,28 +1538,28 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - switch (key->cipher) { - case WLAN_CIPHER_SUITE_WEP40: - key_type = WEP40_ENCRYPTION; -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "alg:WEP40\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "alg:WEP40\n"); - break; - case WLAN_CIPHER_SUITE_WEP104: -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "alg:WEP104\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "alg:WEP104\n"); - key_type = WEP104_ENCRYPTION; - break; - case WLAN_CIPHER_SUITE_TKIP: - key_type = TKIP_ENCRYPTION; -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "alg:TKIP\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "alg:TKIP\n"); - break; - case WLAN_CIPHER_SUITE_CCMP: - key_type = AESCCMP_ENCRYPTION; -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "alg:CCMP\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "alg:CCMP\n"); - break; - case WLAN_CIPHER_SUITE_AES_CMAC: - /* HW don't support CMAC encryption, - * use software CMAC encryption - */ - key_type = AESCMAC_ENCRYPTION; -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "alg:CMAC\n"); -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "HW don't support CMAC encryption, use software CMAC encryption\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "alg:CMAC\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "HW don't support CMAC encryption, use software CMAC encryption\n"); - err = -EOPNOTSUPP; - goto out_unlock; - default: -@@ -1605,9 +1605,9 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - key_type == WEP104_ENCRYPTION)) - wep_only = true; - rtlpriv->sec.pairwise_enc_algorithm = key_type; -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "set enable_hw_sec, key_type:%x(OPEN:0 WEP40:1 TKIP:2 AES:4 WEP104:5)\n", -- key_type); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "set enable_hw_sec, key_type:%x(OPEN:0 WEP40:1 TKIP:2 AES:4 WEP104:5)\n", -+ key_type); - rtlpriv->cfg->ops->enable_hw_sec(hw); - } - } -@@ -1615,8 +1615,8 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - switch (cmd) { - case SET_KEY: - if (wep_only) { -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "set WEP(group/pairwise) key\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "set WEP(group/pairwise) key\n"); - /* Pairwise key with an assigned MAC address. */ - rtlpriv->sec.pairwise_enc_algorithm = key_type; - rtlpriv->sec.group_enc_algorithm = key_type; -@@ -1626,8 +1626,8 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - rtlpriv->sec.key_len[key_idx] = key->keylen; - eth_zero_addr(mac_addr); - } else if (group_key) { /* group key */ -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "set group key\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "set group key\n"); - /* group key */ - rtlpriv->sec.group_enc_algorithm = key_type; - /*set local buf about group key. */ -@@ -1636,8 +1636,8 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - rtlpriv->sec.key_len[key_idx] = key->keylen; - memcpy(mac_addr, bcast_addr, ETH_ALEN); - } else { /* pairwise key */ -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "set pairwise key\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "set pairwise key\n"); - if (!sta) { - WARN_ONCE(true, - "rtlwifi: pairwise key without mac_addr\n"); -@@ -1669,8 +1669,8 @@ static int rtl_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, - key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX; - break; - case DISABLE_KEY: -- RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, -- "disable key delete one entry\n"); -+ rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, -+ "disable key delete one entry\n"); - /*set local buf about wep key. */ - if (vif->type == NL80211_IFTYPE_AP || - vif->type == NL80211_IFTYPE_MESH_POINT) { -@@ -1718,9 +1718,9 @@ static void rtl_op_rfkill_poll(struct ieee80211_hw *hw) - if (unlikely(radio_state != rtlpriv->rfkill.rfkill_state)) { - rtlpriv->rfkill.rfkill_state = radio_state; - -- RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, -- "wireless radio switch turned %s\n", -- radio_state ? "on" : "off"); -+ rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG, -+ "wireless radio switch turned %s\n", -+ radio_state ? "on" : "off"); - - blocked = (rtlpriv->rfkill.rfkill_state == 1) ? 0 : 1; - wiphy_rfkill_set_hw_state(hw->wiphy, blocked); -@@ -1765,26 +1765,27 @@ bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version, - - do { - cfg_cmd = pwrcfgcmd[ary_idx]; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, -- "rtl_hal_pwrseqcmdparsing(): offset(%#x),cut_msk(%#x), famsk(%#x), interface_msk(%#x), base(%#x), cmd(%#x), msk(%#x), value(%#x)\n", -- GET_PWR_CFG_OFFSET(cfg_cmd), -- GET_PWR_CFG_CUT_MASK(cfg_cmd), -- GET_PWR_CFG_FAB_MASK(cfg_cmd), -- GET_PWR_CFG_INTF_MASK(cfg_cmd), -- GET_PWR_CFG_BASE(cfg_cmd), GET_PWR_CFG_CMD(cfg_cmd), -- GET_PWR_CFG_MASK(cfg_cmd), GET_PWR_CFG_VALUE(cfg_cmd)); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, -+ "%s: offset(%#x),cut_msk(%#x), famsk(%#x), interface_msk(%#x), base(%#x), cmd(%#x), msk(%#x), value(%#x)\n", -+ __func__, -+ GET_PWR_CFG_OFFSET(cfg_cmd), -+ GET_PWR_CFG_CUT_MASK(cfg_cmd), -+ GET_PWR_CFG_FAB_MASK(cfg_cmd), -+ GET_PWR_CFG_INTF_MASK(cfg_cmd), -+ GET_PWR_CFG_BASE(cfg_cmd), GET_PWR_CFG_CMD(cfg_cmd), -+ GET_PWR_CFG_MASK(cfg_cmd), GET_PWR_CFG_VALUE(cfg_cmd)); - - if ((GET_PWR_CFG_FAB_MASK(cfg_cmd)&faversion) && - (GET_PWR_CFG_CUT_MASK(cfg_cmd)&cut_version) && - (GET_PWR_CFG_INTF_MASK(cfg_cmd)&interface_type)) { - switch (GET_PWR_CFG_CMD(cfg_cmd)) { - case PWR_CMD_READ: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, - "rtl_hal_pwrseqcmdparsing(): PWR_CMD_READ\n"); - break; - case PWR_CMD_WRITE: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, -- "%s(): PWR_CMD_WRITE\n", __func__); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, -+ "%s(): PWR_CMD_WRITE\n", __func__); - offset = GET_PWR_CFG_OFFSET(cfg_cmd); - - /*Read the value from system register*/ -@@ -1797,7 +1798,7 @@ bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version, - rtl_write_byte(rtlpriv, offset, value); - break; - case PWR_CMD_POLLING: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, - "rtl_hal_pwrseqcmdparsing(): PWR_CMD_POLLING\n"); - polling_bit = false; - offset = GET_PWR_CFG_OFFSET(cfg_cmd); -@@ -1818,8 +1819,8 @@ bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version, - } while (!polling_bit); - break; - case PWR_CMD_DELAY: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, -- "rtl_hal_pwrseqcmdparsing(): PWR_CMD_DELAY\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, -+ "%s: PWR_CMD_DELAY\n", __func__); - if (GET_PWR_CFG_VALUE(cfg_cmd) == - PWRSEQ_DELAY_US) - udelay(GET_PWR_CFG_OFFSET(cfg_cmd)); -@@ -1827,8 +1828,8 @@ bool rtl_hal_pwrseqcmdparsing(struct rtl_priv *rtlpriv, u8 cut_version, - mdelay(GET_PWR_CFG_OFFSET(cfg_cmd)); - break; - case PWR_CMD_END: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, -- "rtl_hal_pwrseqcmdparsing(): PWR_CMD_END\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, -+ "%s: PWR_CMD_END\n", __func__); - return true; - default: - WARN_ONCE(true, -diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.c b/drivers/net/wireless/realtek/rtlwifi/debug.c -index ec0da33da4f89..3866ea300a70b 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/debug.c -+++ b/drivers/net/wireless/realtek/rtlwifi/debug.c -@@ -298,8 +298,8 @@ static ssize_t rtl_debugfs_set_write_reg(struct file *filp, - - tmp_len = (count > sizeof(tmp) - 1 ? sizeof(tmp) - 1 : count); - -- if (!buffer || copy_from_user(tmp, buffer, tmp_len)) -- return count; -+ if (copy_from_user(tmp, buffer, tmp_len)) -+ return -EFAULT; - - tmp[tmp_len] = '\0'; - -@@ -307,7 +307,7 @@ static ssize_t rtl_debugfs_set_write_reg(struct file *filp, - num = sscanf(tmp, "%x %x %x", &addr, &val, &len); - - if (num != 3) -- return count; -+ return -EINVAL; - - switch (len) { - case 1: -@@ -395,8 +395,8 @@ static ssize_t rtl_debugfs_set_write_rfreg(struct file *filp, - - tmp_len = (count > sizeof(tmp) - 1 ? sizeof(tmp) - 1 : count); - -- if (!buffer || copy_from_user(tmp, buffer, tmp_len)) -- return count; -+ if (copy_from_user(tmp, buffer, tmp_len)) -+ return -EFAULT; - - tmp[tmp_len] = '\0'; - -@@ -404,9 +404,9 @@ static ssize_t rtl_debugfs_set_write_rfreg(struct file *filp, - &path, &addr, &bitmask, &data); - - if (num != 4) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG, -- "Format is \n"); -- return count; -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG, -+ "Format is \n"); -+ return -EINVAL; - } - - rtl_set_rfreg(hw, path, addr, bitmask, data); -diff --git a/drivers/net/wireless/realtek/rtlwifi/debug.h b/drivers/net/wireless/realtek/rtlwifi/debug.h -index 69f169d4d4aec..dbfb4d67ca31f 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/debug.h -+++ b/drivers/net/wireless/realtek/rtlwifi/debug.h -@@ -160,6 +160,10 @@ void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level, - const char *titlestring, - const void *hexdata, int hexdatalen); - -+#define rtl_dbg(rtlpriv, comp, level, fmt, ...) \ -+ _rtl_dbg_trace(rtlpriv, comp, level, \ -+ fmt, ##__VA_ARGS__) -+ - #define RT_TRACE(rtlpriv, comp, level, fmt, ...) \ - _rtl_dbg_trace(rtlpriv, comp, level, \ - fmt, ##__VA_ARGS__) -@@ -176,6 +180,13 @@ void _rtl_dbg_print_data(struct rtl_priv *rtlpriv, u64 comp, int level, - - struct rtl_priv; - -+__printf(4, 5) -+static inline void rtl_dbg(struct rtl_priv *rtlpriv, -+ u64 comp, int level, -+ const char *fmt, ...) -+{ -+} -+ - __printf(4, 5) - static inline void RT_TRACE(struct rtl_priv *rtlpriv, - u64 comp, int level, -diff --git a/drivers/net/wireless/realtek/rtlwifi/efuse.c b/drivers/net/wireless/realtek/rtlwifi/efuse.c -index 264667203f6f1..305d438180187 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/efuse.c -+++ b/drivers/net/wireless/realtek/rtlwifi/efuse.c -@@ -120,8 +120,8 @@ void efuse_write_1byte(struct ieee80211_hw *hw, u16 address, u8 value) - const u32 efuse_len = - rtlpriv->cfg->maps[EFUSE_REAL_CONTENT_SIZE]; - -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, "Addr=%x Data =%x\n", -- address, value); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, "Addr=%x Data =%x\n", -+ address, value); - - if (address < efuse_len) { - rtl_write_byte(rtlpriv, rtlpriv->cfg->maps[EFUSE_CTRL], value); -@@ -211,9 +211,9 @@ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf) - u8 efuse_usage; - - if ((_offset + _size_byte) > rtlpriv->cfg->maps[EFUSE_HWSET_MAX_SIZE]) { -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, -- "read_efuse(): Invalid offset(%#x) with read bytes(%#x)!!\n", -- _offset, _size_byte); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, -+ "%s: Invalid offset(%#x) with read bytes(%#x)!!\n", -+ __func__, _offset, _size_byte); - return; - } - -@@ -376,9 +376,9 @@ bool efuse_shadow_update_chk(struct ieee80211_hw *hw) - (EFUSE_MAX_SIZE - rtlpriv->cfg->maps[EFUSE_OOB_PROTECT_BYTES_LEN])) - result = false; - -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, -- "efuse_shadow_update_chk(): totalbytes(%#x), hdr_num(%#x), words_need(%#x), efuse_used(%d)\n", -- totalbytes, hdr_num, words_need, efuse_used); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, -+ "%s: totalbytes(%#x), hdr_num(%#x), words_need(%#x), efuse_used(%d)\n", -+ __func__, totalbytes, hdr_num, words_need, efuse_used); - - return result; - } -@@ -416,7 +416,7 @@ bool efuse_shadow_update(struct ieee80211_hw *hw) - u8 word_en = 0x0F; - u8 first_pg = false; - -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, "\n"); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, "\n"); - - if (!efuse_shadow_update_chk(hw)) { - efuse_read_all_map(hw, &rtlefuse->efuse_map[EFUSE_INIT_MAP][0]); -@@ -424,8 +424,8 @@ bool efuse_shadow_update(struct ieee80211_hw *hw) - &rtlefuse->efuse_map[EFUSE_INIT_MAP][0], - rtlpriv->cfg->maps[EFUSE_HWSET_MAX_SIZE]); - -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, -- "efuse out of capacity!!\n"); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, -+ "efuse out of capacity!!\n"); - return false; - } - efuse_power_switch(hw, true, true); -@@ -464,8 +464,8 @@ bool efuse_shadow_update(struct ieee80211_hw *hw) - - if (!efuse_pg_packet_write(hw, (u8) offset, word_en, - tmpdata)) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "PG section(%#x) fail!!\n", offset); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "PG section(%#x) fail!!\n", offset); - break; - } - } -@@ -478,7 +478,7 @@ bool efuse_shadow_update(struct ieee80211_hw *hw) - &rtlefuse->efuse_map[EFUSE_INIT_MAP][0], - rtlpriv->cfg->maps[EFUSE_HWSET_MAX_SIZE]); - -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, "\n"); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, "\n"); - return true; - } - -@@ -616,8 +616,8 @@ static int efuse_one_byte_write(struct ieee80211_hw *hw, u16 addr, u8 data) - struct rtl_priv *rtlpriv = rtl_priv(hw); - u8 tmpidx = 0; - -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, -- "Addr = %x Data=%x\n", addr, data); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, -+ "Addr = %x Data=%x\n", addr, data); - - rtl_write_byte(rtlpriv, - rtlpriv->cfg->maps[EFUSE_CTRL] + 1, (u8) (addr & 0xff)); -@@ -997,8 +997,8 @@ static int efuse_pg_packet_write(struct ieee80211_hw *hw, - - if (efuse_addr >= (EFUSE_MAX_SIZE - - rtlpriv->cfg->maps[EFUSE_OOB_PROTECT_BYTES_LEN])) { -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, -- "efuse_addr(%#x) Out of size!!\n", efuse_addr); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, -+ "efuse_addr(%#x) Out of size!!\n", efuse_addr); - } - - return true; -@@ -1038,8 +1038,8 @@ static u8 enable_efuse_data_write(struct ieee80211_hw *hw, - u8 tmpdata[8]; - - memset(tmpdata, 0xff, PGPKT_DATA_SIZE); -- RT_TRACE(rtlpriv, COMP_EFUSE, DBG_LOUD, -- "word_en = %x efuse_addr=%x\n", word_en, efuse_addr); -+ rtl_dbg(rtlpriv, COMP_EFUSE, DBG_LOUD, -+ "word_en = %x efuse_addr=%x\n", word_en, efuse_addr); - - if (!(word_en & BIT(0))) { - tmpaddr = start_addr; -@@ -1242,11 +1242,11 @@ int rtl_get_hwinfo(struct ieee80211_hw *hw, struct rtl_priv *rtlpriv, - - eeprom_id = *((u16 *)&hwinfo[0]); - if (eeprom_id != params[0]) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "EEPROM ID(%#x) is invalid!!\n", eeprom_id); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "EEPROM ID(%#x) is invalid!!\n", eeprom_id); - rtlefuse->autoload_failflag = true; - } else { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "Autoload OK\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "Autoload OK\n"); - rtlefuse->autoload_failflag = false; - } - -@@ -1257,30 +1257,30 @@ int rtl_get_hwinfo(struct ieee80211_hw *hw, struct rtl_priv *rtlpriv, - rtlefuse->eeprom_did = *(u16 *)&hwinfo[params[2]]; - rtlefuse->eeprom_svid = *(u16 *)&hwinfo[params[3]]; - rtlefuse->eeprom_smid = *(u16 *)&hwinfo[params[4]]; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "EEPROMId = 0x%4x\n", eeprom_id); -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "EEPROM VID = 0x%4x\n", rtlefuse->eeprom_vid); -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "EEPROM DID = 0x%4x\n", rtlefuse->eeprom_did); -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "EEPROM SVID = 0x%4x\n", rtlefuse->eeprom_svid); -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "EEPROM SMID = 0x%4x\n", rtlefuse->eeprom_smid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "EEPROMId = 0x%4x\n", eeprom_id); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "EEPROM VID = 0x%4x\n", rtlefuse->eeprom_vid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "EEPROM DID = 0x%4x\n", rtlefuse->eeprom_did); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "EEPROM SVID = 0x%4x\n", rtlefuse->eeprom_svid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "EEPROM SMID = 0x%4x\n", rtlefuse->eeprom_smid); - - for (i = 0; i < 6; i += 2) { - usvalue = *(u16 *)&hwinfo[params[5] + i]; - *((u16 *)(&rtlefuse->dev_addr[i])) = usvalue; - } -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "%pM\n", rtlefuse->dev_addr); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "%pM\n", rtlefuse->dev_addr); - - rtlefuse->eeprom_channelplan = *&hwinfo[params[6]]; - rtlefuse->eeprom_version = *(u16 *)&hwinfo[params[7]]; - rtlefuse->txpwr_fromeprom = true; - rtlefuse->eeprom_oemid = *&hwinfo[params[8]]; - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "EEPROM Customer ID: 0x%2x\n", rtlefuse->eeprom_oemid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "EEPROM Customer ID: 0x%2x\n", rtlefuse->eeprom_oemid); - - /* set channel plan to world wide 13 */ - rtlefuse->channel_plan = params[9]; -diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c -index 25335bd2873b6..9006aa4446b3b 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/pci.c -+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c -@@ -204,8 +204,8 @@ static void rtl_pci_disable_aspm(struct ieee80211_hw *hw) - return; - - if (pcibridge_vendor == PCI_BRIDGE_VENDOR_UNKNOWN) { -- RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE, -- "PCI(Bridge) UNKNOWN\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_TRACE, -+ "PCI(Bridge) UNKNOWN\n"); - - return; - } -@@ -254,8 +254,8 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw) - return; - - if (pcibridge_vendor == PCI_BRIDGE_VENDOR_UNKNOWN) { -- RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE, -- "PCI(Bridge) UNKNOWN\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_TRACE, -+ "PCI(Bridge) UNKNOWN\n"); - return; - } - -@@ -271,10 +271,10 @@ static void rtl_pci_enable_aspm(struct ieee80211_hw *hw) - pci_write_config_byte(rtlpci->pdev, (num4bytes << 2), - u_pcibridge_aspmsetting); - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "PlatformEnableASPM(): Write reg[%x] = %x\n", -- (pcipriv->ndis_adapter.pcibridge_pciehdr_offset + 0x10), -- u_pcibridge_aspmsetting); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "PlatformEnableASPM(): Write reg[%x] = %x\n", -+ (pcipriv->ndis_adapter.pcibridge_pciehdr_offset + 0x10), -+ u_pcibridge_aspmsetting); - - udelay(50); - -@@ -331,11 +331,11 @@ static bool rtl_pci_check_buddy_priv(struct ieee80211_hw *hw, - list_for_each_entry(tpriv, &rtlpriv->glb_var->glb_priv_list, - list) { - tpcipriv = (struct rtl_pci_priv *)tpriv->priv; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "pcipriv->ndis_adapter.funcnumber %x\n", -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "pcipriv->ndis_adapter.funcnumber %x\n", - pcipriv->ndis_adapter.funcnumber); -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "tpcipriv->ndis_adapter.funcnumber %x\n", -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "tpcipriv->ndis_adapter.funcnumber %x\n", - tpcipriv->ndis_adapter.funcnumber); - - if (pcipriv->ndis_adapter.busnumber == -@@ -350,8 +350,8 @@ static bool rtl_pci_check_buddy_priv(struct ieee80211_hw *hw, - } - } - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "find_buddy_priv %d\n", find_buddy_priv); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "find_buddy_priv %d\n", find_buddy_priv); - - if (find_buddy_priv) - *buddy_priv = tpriv; -@@ -388,8 +388,8 @@ static void rtl_pci_parse_configuration(struct pci_dev *pdev, - pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &linkctrl_reg); - pcipriv->ndis_adapter.linkctrl_reg = (u8)linkctrl_reg; - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Link Control Register =%x\n", -- pcipriv->ndis_adapter.linkctrl_reg); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, "Link Control Register =%x\n", -+ pcipriv->ndis_adapter.linkctrl_reg); - - pci_read_config_byte(pdev, 0x98, &tmp); - tmp |= BIT(4); -@@ -557,11 +557,11 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio) - if (rtlpriv->rtlhal.earlymode_enable) - skb_pull(skb, EM_HDR_LEN); - -- RT_TRACE(rtlpriv, (COMP_INTR | COMP_SEND), DBG_TRACE, -- "new ring->idx:%d, free: skb_queue_len:%d, free: seq:%x\n", -- ring->idx, -- skb_queue_len(&ring->queue), -- *(u16 *)(skb->data + 22)); -+ rtl_dbg(rtlpriv, (COMP_INTR | COMP_SEND), DBG_TRACE, -+ "new ring->idx:%d, free: skb_queue_len:%d, free: seq:%x\n", -+ ring->idx, -+ skb_queue_len(&ring->queue), -+ *(u16 *)(skb->data + 22)); - - if (prio == TXCMD_QUEUE) { - dev_kfree_skb(skb); -@@ -608,10 +608,10 @@ static void _rtl_pci_tx_isr(struct ieee80211_hw *hw, int prio) - } - - if ((ring->entries - skb_queue_len(&ring->queue)) <= 4) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_DMESG, -- "more desc left, wake skb_queue@%d, ring->idx = %d, skb_queue_len = 0x%x\n", -- prio, ring->idx, -- skb_queue_len(&ring->queue)); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG, -+ "more desc left, wake skb_queue@%d, ring->idx = %d, skb_queue_len = 0x%x\n", -+ prio, ring->idx, -+ skb_queue_len(&ring->queue)); - - ieee80211_wake_queue(hw, skb_get_queue_mapping(skb)); - } -@@ -801,9 +801,9 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) - skb_reserve(skb, stats.rx_drvinfo_size + - stats.rx_bufshift); - } else { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "skb->end - skb->tail = %d, len is %d\n", -- skb->end - skb->tail, len); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "skb->end - skb->tail = %d, len is %d\n", -+ skb->end - skb->tail, len); - dev_kfree_skb_any(skb); - goto new_trx_end; - } -@@ -925,67 +925,67 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id) - - /*<1> beacon related */ - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_TBDOK]) -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "beacon ok interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "beacon ok interrupt!\n"); - - if (unlikely(intvec.inta & rtlpriv->cfg->maps[RTL_IMR_TBDER])) -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "beacon err interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "beacon err interrupt!\n"); - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BDOK]) -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, "beacon interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, "beacon interrupt!\n"); - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BCNINT]) { -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "prepare beacon for interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "prepare beacon for interrupt!\n"); - tasklet_schedule(&rtlpriv->works.irq_prepare_bcn_tasklet); - } - - /*<2> Tx related */ - if (unlikely(intvec.intb & rtlpriv->cfg->maps[RTL_IMR_TXFOVW])) -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, "IMR_TXFOVW!\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, "IMR_TXFOVW!\n"); - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_MGNTDOK]) { -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "Manage ok interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "Manage ok interrupt!\n"); - _rtl_pci_tx_isr(hw, MGNT_QUEUE); - } - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_HIGHDOK]) { -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "HIGH_QUEUE ok interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "HIGH_QUEUE ok interrupt!\n"); - _rtl_pci_tx_isr(hw, HIGH_QUEUE); - } - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BKDOK]) { - rtlpriv->link_info.num_tx_inperiod++; - -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "BK Tx OK interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "BK Tx OK interrupt!\n"); - _rtl_pci_tx_isr(hw, BK_QUEUE); - } - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_BEDOK]) { - rtlpriv->link_info.num_tx_inperiod++; - -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "BE TX OK interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "BE TX OK interrupt!\n"); - _rtl_pci_tx_isr(hw, BE_QUEUE); - } - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_VIDOK]) { - rtlpriv->link_info.num_tx_inperiod++; - -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "VI TX OK interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "VI TX OK interrupt!\n"); - _rtl_pci_tx_isr(hw, VI_QUEUE); - } - - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_VODOK]) { - rtlpriv->link_info.num_tx_inperiod++; - -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "Vo TX OK interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "Vo TX OK interrupt!\n"); - _rtl_pci_tx_isr(hw, VO_QUEUE); - } - -@@ -993,8 +993,8 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id) - if (intvec.intd & rtlpriv->cfg->maps[RTL_IMR_H2CDOK]) { - rtlpriv->link_info.num_tx_inperiod++; - -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "H2C TX OK interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "H2C TX OK interrupt!\n"); - _rtl_pci_tx_isr(hw, H2C_QUEUE); - } - } -@@ -1003,34 +1003,34 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id) - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_COMDOK]) { - rtlpriv->link_info.num_tx_inperiod++; - -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "CMD TX OK interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "CMD TX OK interrupt!\n"); - _rtl_pci_tx_isr(hw, TXCMD_QUEUE); - } - } - - /*<3> Rx related */ - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_ROK]) { -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, "Rx ok interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, "Rx ok interrupt!\n"); - _rtl_pci_rx_interrupt(hw); - } - - if (unlikely(intvec.inta & rtlpriv->cfg->maps[RTL_IMR_RDU])) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "rx descriptor unavailable!\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "rx descriptor unavailable!\n"); - _rtl_pci_rx_interrupt(hw); - } - - if (unlikely(intvec.intb & rtlpriv->cfg->maps[RTL_IMR_RXFOVW])) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, "rx overflow !\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, "rx overflow !\n"); - _rtl_pci_rx_interrupt(hw); - } - - /*<4> fw related*/ - if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723AE) { - if (intvec.inta & rtlpriv->cfg->maps[RTL_IMR_C2HCMD]) { -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "firmware interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "firmware interrupt!\n"); - queue_delayed_work(rtlpriv->works.rtl_wq, - &rtlpriv->works.fwevt_wq, 0); - } -@@ -1046,8 +1046,8 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id) - rtlhal->hw_type == HARDWARE_TYPE_RTL8723BE) { - if (unlikely(intvec.inta & - rtlpriv->cfg->maps[RTL_IMR_HSISR_IND])) { -- RT_TRACE(rtlpriv, COMP_INTR, DBG_TRACE, -- "hsisr interrupt!\n"); -+ rtl_dbg(rtlpriv, COMP_INTR, DBG_TRACE, -+ "hsisr interrupt!\n"); - _rtl_pci_hs_interrupt(hw); - } - } -@@ -1251,8 +1251,8 @@ static int _rtl_pci_init_tx_ring(struct ieee80211_hw *hw, - rtlpci->tx_ring[prio].entries = entries; - skb_queue_head_init(&rtlpci->tx_ring[prio].queue); - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "queue:%d, ring_addr:%p\n", -- prio, desc); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "queue:%d, ring_addr:%p\n", -+ prio, desc); - - /* init every desc in this ring */ - if (!rtlpriv->use_new_trx_flow) { -@@ -1649,10 +1649,10 @@ static int rtl_pci_tx(struct ieee80211_hw *hw, - true, HW_DESC_OWN); - - if (own == 1 && hw_queue != BEACON_QUEUE) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "No more TX desc@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%x\n", -- hw_queue, ring->idx, idx, -- skb_queue_len(&ring->queue)); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "No more TX desc@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%x\n", -+ hw_queue, ring->idx, idx, -+ skb_queue_len(&ring->queue)); - - spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, - flags); -@@ -1662,8 +1662,8 @@ static int rtl_pci_tx(struct ieee80211_hw *hw, - - if (rtlpriv->cfg->ops->get_available_desc && - rtlpriv->cfg->ops->get_available_desc(hw, hw_queue) == 0) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "get_available_desc fail\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "get_available_desc fail\n"); - spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); - return skb->len; - } -@@ -1686,8 +1686,8 @@ static int rtl_pci_tx(struct ieee80211_hw *hw, - - if ((ring->entries - skb_queue_len(&ring->queue)) < 2 && - hw_queue != BEACON_QUEUE) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD, -- "less desc left, stop skb_queue@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%x\n", -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD, -+ "less desc left, stop skb_queue@%d, ring->idx = %d, idx = %d, skb_queue_len = 0x%x\n", - hw_queue, ring->idx, idx, - skb_queue_len(&ring->queue)); - -@@ -1794,8 +1794,8 @@ static int rtl_pci_start(struct ieee80211_hw *hw) - - err = rtlpriv->cfg->ops->hw_init(hw); - if (err) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "Failed to config hardware!\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "Failed to config hardware!\n"); - kfree(rtlpriv->btcoexist.btc_context); - kfree(rtlpriv->btcoexist.wifi_only_context); - return err; -@@ -1804,7 +1804,7 @@ static int rtl_pci_start(struct ieee80211_hw *hw) - &rtlmac->retry_long); - - rtlpriv->cfg->ops->enable_interrupt(hw); -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "enable_interrupt OK\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "enable_interrupt OK\n"); - - rtl_init_rx_config(hw); - -@@ -1815,7 +1815,7 @@ static int rtl_pci_start(struct ieee80211_hw *hw) - - rtlpci->up_first_time = false; - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "%s OK\n", __func__); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "%s OK\n", __func__); - return 0; - } - -@@ -1909,71 +1909,71 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, - deviceid == RTL_PCI_8171_DID) { - switch (revisionid) { - case RTL_PCI_REVISION_ID_8192PCIE: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "8192 PCI-E is found - vid/did=%x/%x\n", -- venderid, deviceid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "8192 PCI-E is found - vid/did=%x/%x\n", -+ venderid, deviceid); - rtlhal->hw_type = HARDWARE_TYPE_RTL8192E; - return false; - case RTL_PCI_REVISION_ID_8192SE: -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "8192SE is found - vid/did=%x/%x\n", -- venderid, deviceid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "8192SE is found - vid/did=%x/%x\n", -+ venderid, deviceid); - rtlhal->hw_type = HARDWARE_TYPE_RTL8192SE; - break; - default: -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "Err: Unknown device - vid/did=%x/%x\n", -- venderid, deviceid); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "Err: Unknown device - vid/did=%x/%x\n", -+ venderid, deviceid); - rtlhal->hw_type = HARDWARE_TYPE_RTL8192SE; - break; - } - } else if (deviceid == RTL_PCI_8723AE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8723AE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "8723AE PCI-E is found - vid/did=%x/%x\n", -- venderid, deviceid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "8723AE PCI-E is found - vid/did=%x/%x\n", -+ venderid, deviceid); - } else if (deviceid == RTL_PCI_8192CET_DID || - deviceid == RTL_PCI_8192CE_DID || - deviceid == RTL_PCI_8191CE_DID || - deviceid == RTL_PCI_8188CE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8192CE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "8192C PCI-E is found - vid/did=%x/%x\n", -- venderid, deviceid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "8192C PCI-E is found - vid/did=%x/%x\n", -+ venderid, deviceid); - } else if (deviceid == RTL_PCI_8192DE_DID || - deviceid == RTL_PCI_8192DE_DID2) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8192DE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "8192D PCI-E is found - vid/did=%x/%x\n", -- venderid, deviceid); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "8192D PCI-E is found - vid/did=%x/%x\n", -+ venderid, deviceid); - } else if (deviceid == RTL_PCI_8188EE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8188EE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find adapter, Hardware type is 8188EE\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find adapter, Hardware type is 8188EE\n"); - } else if (deviceid == RTL_PCI_8723BE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8723BE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find adapter, Hardware type is 8723BE\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find adapter, Hardware type is 8723BE\n"); - } else if (deviceid == RTL_PCI_8192EE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8192EE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find adapter, Hardware type is 8192EE\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find adapter, Hardware type is 8192EE\n"); - } else if (deviceid == RTL_PCI_8821AE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8821AE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find adapter, Hardware type is 8821AE\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find adapter, Hardware type is 8821AE\n"); - } else if (deviceid == RTL_PCI_8812AE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8812AE; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find adapter, Hardware type is 8812AE\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find adapter, Hardware type is 8812AE\n"); - } else if (deviceid == RTL_PCI_8822BE_DID) { - rtlhal->hw_type = HARDWARE_TYPE_RTL8822BE; - rtlhal->bandset = BAND_ON_BOTH; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find adapter, Hardware type is 8822BE\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find adapter, Hardware type is 8822BE\n"); - } else { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "Err: Unknown device - vid/did=%x/%x\n", -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "Err: Unknown device - vid/did=%x/%x\n", - venderid, deviceid); - - rtlhal->hw_type = RTL_DEFAULT_HARDWARE_TYPE; -@@ -1982,17 +1982,17 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, - if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192DE) { - if (revisionid == 0 || revisionid == 1) { - if (revisionid == 0) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find 92DE MAC0\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find 92DE MAC0\n"); - rtlhal->interfaceindex = 0; - } else if (revisionid == 1) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Find 92DE MAC1\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Find 92DE MAC1\n"); - rtlhal->interfaceindex = 1; - } - } else { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "Unknown device - VendorID/DeviceID=%x/%x, Revision=%x\n", -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "Unknown device - VendorID/DeviceID=%x/%x, Revision=%x\n", - venderid, deviceid, revisionid); - rtlhal->interfaceindex = 0; - } -@@ -2026,9 +2026,9 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, - for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) { - if (bridge_pdev->vendor == pcibridge_vendors[tmp]) { - pcipriv->ndis_adapter.pcibridge_vendor = tmp; -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "Pci Bridge Vendor is found index: %d\n", -- tmp); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "Pci Bridge Vendor is found index: %d\n", -+ tmp); - break; - } - } -@@ -2056,22 +2056,22 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev, - } - } - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "pcidev busnumber:devnumber:funcnumber:vendor:link_ctl %d:%d:%d:%x:%x\n", -- pcipriv->ndis_adapter.busnumber, -- pcipriv->ndis_adapter.devnumber, -- pcipriv->ndis_adapter.funcnumber, -- pdev->vendor, pcipriv->ndis_adapter.linkctrl_reg); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "pcidev busnumber:devnumber:funcnumber:vendor:link_ctl %d:%d:%d:%x:%x\n", -+ pcipriv->ndis_adapter.busnumber, -+ pcipriv->ndis_adapter.devnumber, -+ pcipriv->ndis_adapter.funcnumber, -+ pdev->vendor, pcipriv->ndis_adapter.linkctrl_reg); - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "pci_bridge busnumber:devnumber:funcnumber:vendor:pcie_cap:link_ctl_reg:amd %d:%d:%d:%x:%x:%x:%x\n", -- pcipriv->ndis_adapter.pcibridge_busnum, -- pcipriv->ndis_adapter.pcibridge_devnum, -- pcipriv->ndis_adapter.pcibridge_funcnum, -- pcibridge_vendors[pcipriv->ndis_adapter.pcibridge_vendor], -- pcipriv->ndis_adapter.pcibridge_pciehdr_offset, -- pcipriv->ndis_adapter.pcibridge_linkctrlreg, -- pcipriv->ndis_adapter.amd_l1_patch); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "pci_bridge busnumber:devnumber:funcnumber:vendor:pcie_cap:link_ctl_reg:amd %d:%d:%d:%x:%x:%x:%x\n", -+ pcipriv->ndis_adapter.pcibridge_busnum, -+ pcipriv->ndis_adapter.pcibridge_devnum, -+ pcipriv->ndis_adapter.pcibridge_funcnum, -+ pcibridge_vendors[pcipriv->ndis_adapter.pcibridge_vendor], -+ pcipriv->ndis_adapter.pcibridge_pciehdr_offset, -+ pcipriv->ndis_adapter.pcibridge_linkctrlreg, -+ pcipriv->ndis_adapter.amd_l1_patch); - - rtl_pci_parse_configuration(pdev, hw); - list_add_tail(&rtlpriv->list, &rtlpriv->glb_var->glb_priv_list); -@@ -2099,8 +2099,8 @@ static int rtl_pci_intr_mode_msi(struct ieee80211_hw *hw) - - rtlpci->using_msi = true; - -- RT_TRACE(rtlpriv, COMP_INIT | COMP_INTR, DBG_DMESG, -- "MSI Interrupt Mode!\n"); -+ rtl_dbg(rtlpriv, COMP_INIT | COMP_INTR, DBG_DMESG, -+ "MSI Interrupt Mode!\n"); - return 0; - } - -@@ -2117,8 +2117,8 @@ static int rtl_pci_intr_mode_legacy(struct ieee80211_hw *hw) - return ret; - - rtlpci->using_msi = false; -- RT_TRACE(rtlpriv, COMP_INIT | COMP_INTR, DBG_DMESG, -- "Pin-based Interrupt Mode!\n"); -+ rtl_dbg(rtlpriv, COMP_INIT | COMP_INTR, DBG_DMESG, -+ "Pin-based Interrupt Mode!\n"); - return 0; - } - -@@ -2245,10 +2245,10 @@ int rtl_pci_probe(struct pci_dev *pdev, - goto fail2; - } - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "mem mapped space: start: 0x%08lx len:%08lx flags:%08lx, after map:0x%08lx\n", -- pmem_start, pmem_len, pmem_flags, -- rtlpriv->io.pci_mem_start); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "mem mapped space: start: 0x%08lx len:%08lx flags:%08lx, after map:0x%08lx\n", -+ pmem_start, pmem_len, pmem_flags, -+ rtlpriv->io.pci_mem_start); - - /* Disable Clk Request */ - pci_write_config_byte(pdev, 0x81, 0); -@@ -2310,9 +2310,9 @@ int rtl_pci_probe(struct pci_dev *pdev, - rtlpci = rtl_pcidev(pcipriv); - err = rtl_pci_intr_mode_decide(hw); - if (err) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "%s: failed to register IRQ handler\n", -- wiphy_name(hw->wiphy)); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "%s: failed to register IRQ handler\n", -+ wiphy_name(hw->wiphy)); - goto fail3; - } - rtlpci->irq_alloc = 1; -diff --git a/drivers/net/wireless/realtek/rtlwifi/ps.c b/drivers/net/wireless/realtek/rtlwifi/ps.c -index fff8dda140238..9a4601a71eae0 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/ps.c -+++ b/drivers/net/wireless/realtek/rtlwifi/ps.c -@@ -19,8 +19,8 @@ bool rtl_ps_enable_nic(struct ieee80211_hw *hw) - rtlpriv->intf_ops->reset_trx_ring(hw); - - if (is_hal_stop(rtlhal)) -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "Driver is already down!\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "Driver is already down!\n"); - - /*<2> Enable Adapter */ - if (rtlpriv->cfg->ops->hw_init(hw)) -@@ -81,9 +81,9 @@ static bool rtl_ps_set_rf_state(struct ieee80211_hw *hw, - if (ppsc->rfchange_inprogress) { - spin_unlock(&rtlpriv->locks.rf_ps_lock); - -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "RF Change in progress! Wait to set..state_toset(%d).\n", -- state_toset); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "RF Change in progress! Wait to set..state_toset(%d).\n", -+ state_toset); - - /* Set RF after the previous action is done. */ - while (ppsc->rfchange_inprogress) { -@@ -195,8 +195,8 @@ void rtl_ips_nic_off_wq_callback(void *data) - enum rf_pwrstate rtstate; - - if (mac->opmode != NL80211_IFTYPE_STATION) { -- RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING, -- "not station return\n"); -+ rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING, -+ "not station return\n"); - return; - } - -@@ -232,8 +232,8 @@ void rtl_ips_nic_off_wq_callback(void *data) - !ppsc->swrf_processing && - (mac->link_state == MAC80211_NOLINK) && - !mac->act_scanning) { -- RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE, -- "IPSEnter(): Turn off RF\n"); -+ rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE, -+ "IPSEnter(): Turn off RF\n"); - - ppsc->inactive_pwrstate = ERFOFF; - ppsc->in_powersavemode = true; -@@ -311,8 +311,8 @@ static bool rtl_get_fwlps_doze(struct ieee80211_hw *hw) - ppsc->last_delaylps_stamp_jiffies); - - if (ps_timediff < 2000) { -- RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, -- "Delay enter Fw LPS for DHCP, ARP, or EAPOL exchanging state\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, -+ "Delay enter Fw LPS for DHCP, ARP, or EAPOL exchanging state\n"); - return false; - } - -@@ -357,9 +357,9 @@ void rtl_lps_set_psmode(struct ieee80211_hw *hw, u8 rt_psmode) - - if ((ppsc->fwctrl_lps) && ppsc->report_linked) { - if (ppsc->dot11_psmode == EACTIVE) { -- RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, -- "FW LPS leave ps_mode:%x\n", -- FW_PS_ACTIVE_MODE); -+ rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG, -+ "FW LPS leave ps_mode:%x\n", -+ FW_PS_ACTIVE_MODE); - enter_fwlps = false; - ppsc->pwr_mode = FW_PS_ACTIVE_MODE; - ppsc->smart_ps = 0; -@@ -372,9 +372,9 @@ void rtl_lps_set_psmode(struct ieee80211_hw *hw, u8 rt_psmode) - rtlpriv->btcoexist.btc_ops->btc_lps_notify(rtlpriv, rt_psmode); - } else { - if (rtl_get_fwlps_doze(hw)) { -- RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, -- "FW LPS enter ps_mode:%x\n", -- ppsc->fwctrl_psmode); -+ rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG, -+ "FW LPS enter ps_mode:%x\n", -+ ppsc->fwctrl_psmode); - if (rtlpriv->cfg->ops->get_btc_status()) - rtlpriv->btcoexist.btc_ops->btc_lps_notify(rtlpriv, rt_psmode); - enter_fwlps = true; -@@ -424,8 +424,8 @@ static void rtl_lps_enter_core(struct ieee80211_hw *hw) - * bt_ccoexist may ask to enter lps. - * In normal case, this constraint move to rtl_lps_set_psmode(). - */ -- RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, -- "Enter 802.11 power save mode...\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, -+ "Enter 802.11 power save mode...\n"); - rtl_lps_set_psmode(hw, EAUTOPS); - - mutex_unlock(&rtlpriv->locks.lps_mutex); -@@ -453,8 +453,8 @@ static void rtl_lps_leave_core(struct ieee80211_hw *hw) - RT_CLEAR_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM); - } - -- RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, -- "Busy Traffic,Leave 802.11 power save..\n"); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_LOUD, -+ "Busy Traffic,Leave 802.11 power save..\n"); - - rtl_lps_set_psmode(hw, EACTIVE); - } -@@ -538,8 +538,8 @@ void rtl_swlps_beacon(struct ieee80211_hw *hw, void *data, unsigned int len) - queue_delayed_work(rtlpriv->works.rtl_wq, - &rtlpriv->works.ps_work, MSECS(5)); - } else { -- RT_TRACE(rtlpriv, COMP_POWER, DBG_DMESG, -- "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, -+ "u_bufferd: %x, m_buffered: %x\n", u_buffed, m_buffed); - } - } - EXPORT_SYMBOL_GPL(rtl_swlps_beacon); -@@ -634,9 +634,9 @@ void rtl_swlps_rf_sleep(struct ieee80211_hw *hw) - /* this print should always be dtim_conter = 0 & - * sleep = dtim_period, that meaons, we should - * awake before every dtim */ -- RT_TRACE(rtlpriv, COMP_POWER, DBG_DMESG, -- "dtim_counter:%x will sleep :%d beacon_intv\n", -- rtlpriv->psc.dtim_counter, sleep_intv); -+ rtl_dbg(rtlpriv, COMP_POWER, DBG_DMESG, -+ "dtim_counter:%x will sleep :%d beacon_intv\n", -+ rtlpriv->psc.dtim_counter, sleep_intv); - - /* we tested that 40ms is enough for sw & hw sw delay */ - queue_delayed_work(rtlpriv->works.rtl_wq, &rtlpriv->works.ps_rfon_wq, -@@ -748,9 +748,9 @@ static void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data, - if (ie[0] == 12) { - find_p2p_ps_ie = true; - if ((noa_len - 2) % 13 != 0) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, -- "P2P notice of absence: invalid length.%d\n", -- noa_len); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, -+ "P2P notice of absence: invalid length.%d\n", -+ noa_len); - return; - } else { - noa_num = (noa_len - 2) / 13; -@@ -761,8 +761,8 @@ static void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data, - noa_index = ie[3]; - if (rtlpriv->psc.p2p_ps_info.p2p_ps_mode == - P2P_PS_NONE || noa_index != p2pinfo->noa_index) { -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, -- "update NOA ie.\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, -+ "update NOA ie.\n"); - p2pinfo->noa_index = noa_index; - p2pinfo->opp_ps = (ie[4] >> 7); - p2pinfo->ctwindow = ie[4] & 0x7F; -@@ -833,7 +833,7 @@ static void rtl_p2p_action_ie(struct ieee80211_hw *hw, void *data, - if (ie == NULL) - return; - -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "action frame find P2P IE.\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "action frame find P2P IE.\n"); - /*to find noa ie*/ - while (ie + 1 < end) { - noa_len = READEF2BYTE((__le16 *)&ie[1]); -@@ -841,13 +841,13 @@ static void rtl_p2p_action_ie(struct ieee80211_hw *hw, void *data, - return; - - if (ie[0] == 12) { -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "find NOA IE.\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "find NOA IE.\n"); - RT_PRINT_DATA(rtlpriv, COMP_FW, DBG_LOUD, "noa ie ", - ie, noa_len); - if ((noa_len - 2) % 13 != 0) { -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, -- "P2P notice of absence: invalid length.%d\n", -- noa_len); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, -+ "P2P notice of absence: invalid length.%d\n", -+ noa_len); - return; - } else { - noa_num = (noa_len - 2) / 13; -@@ -905,7 +905,7 @@ void rtl_p2p_ps_cmd(struct ieee80211_hw *hw , u8 p2p_ps_state) - struct rtl_ps_ctl *rtlps = rtl_psc(rtl_priv(hw)); - struct rtl_p2p_ps_info *p2pinfo = &(rtlpriv->psc.p2p_ps_info); - -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, " p2p state %x\n" , p2p_ps_state); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, " p2p state %x\n", p2p_ps_state); - switch (p2p_ps_state) { - case P2P_PS_DISABLE: - p2pinfo->p2p_ps_state = p2p_ps_state; -@@ -957,18 +957,18 @@ void rtl_p2p_ps_cmd(struct ieee80211_hw *hw , u8 p2p_ps_state) - default: - break; - } -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, -- "ctwindow %x oppps %x\n", -- p2pinfo->ctwindow , p2pinfo->opp_ps); -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, -- "count %x duration %x index %x interval %x start time %x noa num %x\n", -- p2pinfo->noa_count_type[0], -- p2pinfo->noa_duration[0], -- p2pinfo->noa_index, -- p2pinfo->noa_interval[0], -- p2pinfo->noa_start_time[0], -- p2pinfo->noa_num); -- RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "end\n"); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, -+ "ctwindow %x oppps %x\n", -+ p2pinfo->ctwindow, p2pinfo->opp_ps); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, -+ "count %x duration %x index %x interval %x start time %x noa num %x\n", -+ p2pinfo->noa_count_type[0], -+ p2pinfo->noa_duration[0], -+ p2pinfo->noa_index, -+ p2pinfo->noa_interval[0], -+ p2pinfo->noa_start_time[0], -+ p2pinfo->noa_num); -+ rtl_dbg(rtlpriv, COMP_FW, DBG_LOUD, "end\n"); - } - - void rtl_p2p_info(struct ieee80211_hw *hw, void *data, unsigned int len) -diff --git a/drivers/net/wireless/realtek/rtlwifi/regd.c b/drivers/net/wireless/realtek/rtlwifi/regd.c -index 8be31e0ad8788..4cf8face0bbd1 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/regd.c -+++ b/drivers/net/wireless/realtek/rtlwifi/regd.c -@@ -393,13 +393,13 @@ int rtl_regd_init(struct ieee80211_hw *hw, - rtlpriv->regd.country_code = - channel_plan_to_country_code(rtlpriv->efuse.channel_plan); - -- RT_TRACE(rtlpriv, COMP_REGD, DBG_DMESG, -- "rtl: EEPROM regdomain: 0x%0x country code: %d\n", -- rtlpriv->efuse.channel_plan, rtlpriv->regd.country_code); -+ rtl_dbg(rtlpriv, COMP_REGD, DBG_DMESG, -+ "rtl: EEPROM regdomain: 0x%0x country code: %d\n", -+ rtlpriv->efuse.channel_plan, rtlpriv->regd.country_code); - - if (rtlpriv->regd.country_code >= COUNTRY_CODE_MAX) { -- RT_TRACE(rtlpriv, COMP_REGD, DBG_DMESG, -- "rtl: EEPROM indicates invalid country code, world wide 13 should be used\n"); -+ rtl_dbg(rtlpriv, COMP_REGD, DBG_DMESG, -+ "rtl: EEPROM indicates invalid country code, world wide 13 should be used\n"); - - rtlpriv->regd.country_code = COUNTRY_CODE_WORLD_WIDE_13; - } -@@ -414,9 +414,9 @@ int rtl_regd_init(struct ieee80211_hw *hw, - rtlpriv->regd.alpha2[1] = '0'; - } - -- RT_TRACE(rtlpriv, COMP_REGD, DBG_TRACE, -- "rtl: Country alpha2 being used: %c%c\n", -- rtlpriv->regd.alpha2[0], rtlpriv->regd.alpha2[1]); -+ rtl_dbg(rtlpriv, COMP_REGD, DBG_TRACE, -+ "rtl: Country alpha2 being used: %c%c\n", -+ rtlpriv->regd.alpha2[0], rtlpriv->regd.alpha2[1]); - - _rtl_regd_init_wiphy(&rtlpriv->regd, wiphy, reg_notifier); - -@@ -428,7 +428,7 @@ void rtl_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) - struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy); - struct rtl_priv *rtlpriv = rtl_priv(hw); - -- RT_TRACE(rtlpriv, COMP_REGD, DBG_LOUD, "\n"); -+ rtl_dbg(rtlpriv, COMP_REGD, DBG_LOUD, "\n"); - - _rtl_reg_notifier_apply(wiphy, request, &rtlpriv->regd); - } -diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c -index 9bcb187d37dcd..fc1548ad434f6 100644 ---- a/drivers/net/wireless/realtek/rtlwifi/usb.c -+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c -@@ -259,15 +259,15 @@ static int _rtl_usb_init_tx(struct ieee80211_hw *hw) - ? USB_HIGH_SPEED_BULK_SIZE - : USB_FULL_SPEED_BULK_SIZE; - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, "USB Max Bulk-out Size=%d\n", -- rtlusb->max_bulk_out_size); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "USB Max Bulk-out Size=%d\n", -+ rtlusb->max_bulk_out_size); - - for (i = 0; i < __RTL_TXQ_NUM; i++) { - u32 ep_num = rtlusb->ep_map.ep_mapping[i]; - - if (!ep_num) { -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "Invalid endpoint map setting!\n"); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "Invalid endpoint map setting!\n"); - return -EINVAL; - } - } -@@ -337,10 +337,10 @@ static int _rtl_usb_init(struct ieee80211_hw *hw) - else if (usb_endpoint_dir_out(pep_desc)) - rtlusb->out_ep_nums++; - -- RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, -- "USB EP(0x%02x), MaxPacketSize=%d, Interval=%d\n", -- pep_desc->bEndpointAddress, pep_desc->wMaxPacketSize, -- pep_desc->bInterval); -+ rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, -+ "USB EP(0x%02x), MaxPacketSize=%d, Interval=%d\n", -+ pep_desc->bEndpointAddress, pep_desc->wMaxPacketSize, -+ pep_desc->bInterval); - } - if (rtlusb->in_ep_nums < rtlpriv->cfg->usb_interface_cfg->in_ep_num) { - pr_err("Too few input end points found\n"); -@@ -931,7 +931,7 @@ static void _rtl_usb_tx_preprocess(struct ieee80211_hw *hw, - - memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc)); - if (ieee80211_is_auth(fc)) { -- RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG, "MAC80211_LINKING\n"); -+ rtl_dbg(rtlpriv, COMP_SEND, DBG_DMESG, "MAC80211_LINKING\n"); - } - - if (rtlpriv->psc.sw_ps_enabled) { -diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c -index b61b073031e57..94e69e97d5f5f 100644 ---- a/drivers/net/wireless/realtek/rtw88/mac.c -+++ b/drivers/net/wireless/realtek/rtw88/mac.c -@@ -210,7 +210,7 @@ static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev, - - ret = rtw_sub_pwr_seq_parser(rtwdev, intf_mask, cut_mask, cmd); - if (ret) -- return -EBUSY; -+ return ret; - - idx++; - } while (1); -@@ -224,6 +224,7 @@ static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on) - struct rtw_pwr_seq_cmd **pwr_seq; - u8 rpwm; - bool cur_pwr; -+ int ret; - - rpwm = rtw_read8(rtwdev, rtwdev->hci.rpwm_addr); - -@@ -245,8 +246,9 @@ static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on) - return -EALREADY; - - pwr_seq = pwr_on ? chip->pwr_on_seq : chip->pwr_off_seq; -- if (rtw_pwr_seq_parser(rtwdev, pwr_seq)) -- return -EINVAL; -+ ret = rtw_pwr_seq_parser(rtwdev, pwr_seq); -+ if (ret) -+ return ret; - - return 0; - } -diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index 029a89aead53e..9144ed14b0741 100644 ---- a/drivers/nvme/host/core.c -+++ b/drivers/nvme/host/core.c -@@ -3976,11 +3976,19 @@ static void nvme_fw_act_work(struct work_struct *work) - nvme_get_fw_slot_info(ctrl); - } - --static void nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result) -+static u32 nvme_aer_type(u32 result) - { -- u32 aer_notice_type = (result & 0xff00) >> 8; -+ return result & 0x7; -+} - -- trace_nvme_async_event(ctrl, aer_notice_type); -+static u32 nvme_aer_subtype(u32 result) -+{ -+ return (result & 0xff00) >> 8; -+} -+ -+static void nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result) -+{ -+ u32 aer_notice_type = nvme_aer_subtype(result); - - switch (aer_notice_type) { - case NVME_AER_NOTICE_NS_CHANGED: -@@ -4011,24 +4019,40 @@ static void nvme_handle_aen_notice(struct nvme_ctrl *ctrl, u32 result) - } - } - -+static void nvme_handle_aer_persistent_error(struct nvme_ctrl *ctrl) -+{ -+ dev_warn(ctrl->device, "resetting controller due to AER\n"); -+ nvme_reset_ctrl(ctrl); -+} -+ - void nvme_complete_async_event(struct nvme_ctrl *ctrl, __le16 status, - volatile union nvme_result *res) - { - u32 result = le32_to_cpu(res->u32); -- u32 aer_type = result & 0x07; -+ u32 aer_type = nvme_aer_type(result); -+ u32 aer_subtype = nvme_aer_subtype(result); - - if (le16_to_cpu(status) >> 1 != NVME_SC_SUCCESS) - return; - -+ trace_nvme_async_event(ctrl, result); - switch (aer_type) { - case NVME_AER_NOTICE: - nvme_handle_aen_notice(ctrl, result); - break; - case NVME_AER_ERROR: -+ /* -+ * For a persistent internal error, don't run async_event_work -+ * to submit a new AER. The controller reset will do it. -+ */ -+ if (aer_subtype == NVME_AER_ERROR_PERSIST_INT_ERR) { -+ nvme_handle_aer_persistent_error(ctrl); -+ return; -+ } -+ fallthrough; - case NVME_AER_SMART: - case NVME_AER_CSS: - case NVME_AER_VS: -- trace_nvme_async_event(ctrl, aer_type); - ctrl->aen_result = result; - break; - default: -diff --git a/drivers/nvme/host/trace.h b/drivers/nvme/host/trace.h -index 35bac7a254227..700fdce2ecf15 100644 ---- a/drivers/nvme/host/trace.h -+++ b/drivers/nvme/host/trace.h -@@ -127,15 +127,12 @@ TRACE_EVENT(nvme_async_event, - ), - TP_printk("nvme%d: NVME_AEN=%#08x [%s]", - __entry->ctrl_id, __entry->result, -- __print_symbolic(__entry->result, -- aer_name(NVME_AER_NOTICE_NS_CHANGED), -- aer_name(NVME_AER_NOTICE_ANA), -- aer_name(NVME_AER_NOTICE_FW_ACT_STARTING), -- aer_name(NVME_AER_NOTICE_DISC_CHANGED), -- aer_name(NVME_AER_ERROR), -- aer_name(NVME_AER_SMART), -- aer_name(NVME_AER_CSS), -- aer_name(NVME_AER_VS)) -+ __print_symbolic(__entry->result & 0x7, -+ aer_name(NVME_AER_ERROR), -+ aer_name(NVME_AER_SMART), -+ aer_name(NVME_AER_NOTICE), -+ aer_name(NVME_AER_CSS), -+ aer_name(NVME_AER_VS)) - ) - ); - -diff --git a/drivers/nvme/target/fcloop.c b/drivers/nvme/target/fcloop.c -index b50b53db37462..34345c45a3e52 100644 ---- a/drivers/nvme/target/fcloop.c -+++ b/drivers/nvme/target/fcloop.c -@@ -431,10 +431,11 @@ fcloop_fcp_recv_work(struct work_struct *work) - struct fcloop_fcpreq *tfcp_req = - container_of(work, struct fcloop_fcpreq, fcp_rcv_work); - struct nvmefc_fcp_req *fcpreq = tfcp_req->fcpreq; -+ unsigned long flags; - int ret = 0; - bool aborted = false; - -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - switch (tfcp_req->inistate) { - case INI_IO_START: - tfcp_req->inistate = INI_IO_ACTIVE; -@@ -443,11 +444,11 @@ fcloop_fcp_recv_work(struct work_struct *work) - aborted = true; - break; - default: -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - WARN_ON(1); - return; - } -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - if (unlikely(aborted)) - ret = -ECANCELED; -@@ -468,8 +469,9 @@ fcloop_fcp_abort_recv_work(struct work_struct *work) - container_of(work, struct fcloop_fcpreq, abort_rcv_work); - struct nvmefc_fcp_req *fcpreq; - bool completed = false; -+ unsigned long flags; - -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - fcpreq = tfcp_req->fcpreq; - switch (tfcp_req->inistate) { - case INI_IO_ABORTED: -@@ -478,11 +480,11 @@ fcloop_fcp_abort_recv_work(struct work_struct *work) - completed = true; - break; - default: -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - WARN_ON(1); - return; - } -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - if (unlikely(completed)) { - /* remove reference taken in original abort downcall */ -@@ -494,9 +496,9 @@ fcloop_fcp_abort_recv_work(struct work_struct *work) - nvmet_fc_rcv_fcp_abort(tfcp_req->tport->targetport, - &tfcp_req->tgt_fcp_req); - -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - tfcp_req->fcpreq = NULL; -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - fcloop_call_host_done(fcpreq, tfcp_req, -ECANCELED); - /* call_host_done releases reference for abort downcall */ -@@ -512,11 +514,12 @@ fcloop_tgt_fcprqst_done_work(struct work_struct *work) - struct fcloop_fcpreq *tfcp_req = - container_of(work, struct fcloop_fcpreq, tio_done_work); - struct nvmefc_fcp_req *fcpreq; -+ unsigned long flags; - -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - fcpreq = tfcp_req->fcpreq; - tfcp_req->inistate = INI_IO_COMPLETED; -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - fcloop_call_host_done(fcpreq, tfcp_req, tfcp_req->status); - } -@@ -620,13 +623,14 @@ fcloop_fcp_op(struct nvmet_fc_target_port *tgtport, - u32 rsplen = 0, xfrlen = 0; - int fcp_err = 0, active, aborted; - u8 op = tgt_fcpreq->op; -+ unsigned long flags; - -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - fcpreq = tfcp_req->fcpreq; - active = tfcp_req->active; - aborted = tfcp_req->aborted; - tfcp_req->active = true; -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - if (unlikely(active)) - /* illegal - call while i/o active */ -@@ -634,9 +638,9 @@ fcloop_fcp_op(struct nvmet_fc_target_port *tgtport, - - if (unlikely(aborted)) { - /* target transport has aborted i/o prior */ -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - tfcp_req->active = false; -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - tgt_fcpreq->transferred_length = 0; - tgt_fcpreq->fcp_error = -ECANCELED; - tgt_fcpreq->done(tgt_fcpreq); -@@ -693,9 +697,9 @@ fcloop_fcp_op(struct nvmet_fc_target_port *tgtport, - break; - } - -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - tfcp_req->active = false; -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - tgt_fcpreq->transferred_length = xfrlen; - tgt_fcpreq->fcp_error = fcp_err; -@@ -709,15 +713,16 @@ fcloop_tgt_fcp_abort(struct nvmet_fc_target_port *tgtport, - struct nvmefc_tgt_fcp_req *tgt_fcpreq) - { - struct fcloop_fcpreq *tfcp_req = tgt_fcp_req_to_fcpreq(tgt_fcpreq); -+ unsigned long flags; - - /* - * mark aborted only in case there were 2 threads in transport - * (one doing io, other doing abort) and only kills ops posted - * after the abort request - */ -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - tfcp_req->aborted = true; -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - tfcp_req->status = NVME_SC_INTERNAL; - -@@ -753,6 +758,7 @@ fcloop_fcp_abort(struct nvme_fc_local_port *localport, - struct fcloop_ini_fcpreq *inireq = fcpreq->private; - struct fcloop_fcpreq *tfcp_req; - bool abortio = true; -+ unsigned long flags; - - spin_lock(&inireq->inilock); - tfcp_req = inireq->tfcp_req; -@@ -765,7 +771,7 @@ fcloop_fcp_abort(struct nvme_fc_local_port *localport, - return; - - /* break initiator/target relationship for io */ -- spin_lock_irq(&tfcp_req->reqlock); -+ spin_lock_irqsave(&tfcp_req->reqlock, flags); - switch (tfcp_req->inistate) { - case INI_IO_START: - case INI_IO_ACTIVE: -@@ -775,11 +781,11 @@ fcloop_fcp_abort(struct nvme_fc_local_port *localport, - abortio = false; - break; - default: -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - WARN_ON(1); - return; - } -- spin_unlock_irq(&tfcp_req->reqlock); -+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags); - - if (abortio) - /* leave the reference while the work item is scheduled */ -diff --git a/drivers/of/device.c b/drivers/of/device.c -index da81583920103..7fb870097a849 100644 ---- a/drivers/of/device.c -+++ b/drivers/of/device.c -@@ -246,12 +246,15 @@ int of_device_request_module(struct device *dev) - if (size < 0) - return size; - -- str = kmalloc(size + 1, GFP_KERNEL); -+ /* Reserve an additional byte for the trailing '\0' */ -+ size++; -+ -+ str = kmalloc(size, GFP_KERNEL); - if (!str) - return -ENOMEM; - - of_device_get_modalias(dev, str, size); -- str[size] = '\0'; -+ str[size - 1] = '\0'; - ret = request_module(str); - kfree(str); - -diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c -index b34b52b364d5f..30c259f63239d 100644 ---- a/drivers/pci/controller/dwc/pci-imx6.c -+++ b/drivers/pci/controller/dwc/pci-imx6.c -@@ -1295,6 +1295,13 @@ DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_SYNOPSYS, 0xabcd, - static int __init imx6_pcie_init(void) - { - #ifdef CONFIG_ARM -+ struct device_node *np; -+ -+ np = of_find_matching_node(NULL, imx6_pcie_of_match); -+ if (!np) -+ return -ENODEV; -+ of_node_put(np); -+ - /* - * Since probe() can be deferred we need to make sure that - * hook_fault_code is not called after __init memory is freed -diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h -index aa61d4c219d7b..79a713f5dbf44 100644 ---- a/drivers/pci/hotplug/pciehp.h -+++ b/drivers/pci/hotplug/pciehp.h -@@ -72,6 +72,8 @@ extern int pciehp_poll_time; - * @reset_lock: prevents access to the Data Link Layer Link Active bit in the - * Link Status register and to the Presence Detect State bit in the Slot - * Status register during a slot reset which may cause them to flap -+ * @depth: Number of additional hotplug ports in the path to the root bus, -+ * used as lock subclass for @reset_lock - * @ist_running: flag to keep user request waiting while IRQ thread is running - * @request_result: result of last user request submitted to the IRQ thread - * @requester: wait queue to wake up on completion of user request, -@@ -102,6 +104,7 @@ struct controller { - - struct hotplug_slot hotplug_slot; /* hotplug core interface */ - struct rw_semaphore reset_lock; -+ unsigned int depth; - unsigned int ist_running; - int request_result; - wait_queue_head_t requester; -diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c -index 312cc45c44c78..f5255045b1495 100644 ---- a/drivers/pci/hotplug/pciehp_core.c -+++ b/drivers/pci/hotplug/pciehp_core.c -@@ -165,7 +165,7 @@ static void pciehp_check_presence(struct controller *ctrl) - { - int occupied; - -- down_read(&ctrl->reset_lock); -+ down_read_nested(&ctrl->reset_lock, ctrl->depth); - mutex_lock(&ctrl->state_lock); - - occupied = pciehp_card_present_or_link_active(ctrl); -diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c -index 13f3bc239c660..651664fe4058d 100644 ---- a/drivers/pci/hotplug/pciehp_hpc.c -+++ b/drivers/pci/hotplug/pciehp_hpc.c -@@ -674,7 +674,7 @@ static irqreturn_t pciehp_ist(int irq, void *dev_id) - * Disable requests have higher priority than Presence Detect Changed - * or Data Link Layer State Changed events. - */ -- down_read(&ctrl->reset_lock); -+ down_read_nested(&ctrl->reset_lock, ctrl->depth); - if (events & DISABLE_SLOT) - pciehp_handle_disable_request(ctrl); - else if (events & (PCI_EXP_SLTSTA_PDC | PCI_EXP_SLTSTA_DLLSC)) -@@ -808,7 +808,7 @@ int pciehp_reset_slot(struct hotplug_slot *hotplug_slot, int probe) - if (probe) - return 0; - -- down_write(&ctrl->reset_lock); -+ down_write_nested(&ctrl->reset_lock, ctrl->depth); - - if (!ATTN_BUTTN(ctrl)) { - ctrl_mask |= PCI_EXP_SLTCTL_PDCE; -@@ -864,6 +864,20 @@ static inline void dbg_ctrl(struct controller *ctrl) - - #define FLAG(x, y) (((x) & (y)) ? '+' : '-') - -+static inline int pcie_hotplug_depth(struct pci_dev *dev) -+{ -+ struct pci_bus *bus = dev->bus; -+ int depth = 0; -+ -+ while (bus->parent) { -+ bus = bus->parent; -+ if (bus->self && bus->self->is_hotplug_bridge) -+ depth++; -+ } -+ -+ return depth; -+} -+ - struct controller *pcie_init(struct pcie_device *dev) - { - struct controller *ctrl; -@@ -877,6 +891,7 @@ struct controller *pcie_init(struct pcie_device *dev) - return NULL; - - ctrl->pcie = dev; -+ ctrl->depth = pcie_hotplug_depth(dev->port); - pcie_capability_read_dword(pdev, PCI_EXP_SLTCAP, &slot_cap); - - if (pdev->hotplug_user_indicators) -diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c -index d17f3bf36f709..ad12515a4a121 100644 ---- a/drivers/pci/hotplug/pciehp_pci.c -+++ b/drivers/pci/hotplug/pciehp_pci.c -@@ -63,7 +63,14 @@ int pciehp_configure_device(struct controller *ctrl) - - pci_assign_unassigned_bridge_resources(bridge); - pcie_bus_configure_settings(parent); -+ -+ /* -+ * Release reset_lock during driver binding -+ * to avoid AB-BA deadlock with device_lock. -+ */ -+ up_read(&ctrl->reset_lock); - pci_bus_add_devices(parent); -+ down_read_nested(&ctrl->reset_lock, ctrl->depth); - - out: - pci_unlock_rescan_remove(); -@@ -104,7 +111,15 @@ void pciehp_unconfigure_device(struct controller *ctrl, bool presence) - list_for_each_entry_safe_reverse(dev, temp, &parent->devices, - bus_list) { - pci_dev_get(dev); -+ -+ /* -+ * Release reset_lock during driver unbinding -+ * to avoid AB-BA deadlock with device_lock. -+ */ -+ up_read(&ctrl->reset_lock); - pci_stop_and_remove_bus_device(dev); -+ down_read_nested(&ctrl->reset_lock, ctrl->depth); -+ - /* - * Ensure that no new Requests will be generated from - * the device. -diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c -index bf5d80b97597b..efe7abf459fda 100644 ---- a/drivers/phy/tegra/xusb.c -+++ b/drivers/phy/tegra/xusb.c -@@ -606,6 +606,7 @@ static int tegra_xusb_add_usb2_port(struct tegra_xusb_padctl *padctl, - usb2->base.lane = usb2->base.ops->map(&usb2->base); - if (IS_ERR(usb2->base.lane)) { - err = PTR_ERR(usb2->base.lane); -+ tegra_xusb_port_unregister(&usb2->base); - goto out; - } - -@@ -658,6 +659,7 @@ static int tegra_xusb_add_ulpi_port(struct tegra_xusb_padctl *padctl, - ulpi->base.lane = ulpi->base.ops->map(&ulpi->base); - if (IS_ERR(ulpi->base.lane)) { - err = PTR_ERR(ulpi->base.lane); -+ tegra_xusb_port_unregister(&ulpi->base); - goto out; - } - -diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c -index 61cb1a4a8257c..0346bf7515373 100644 ---- a/drivers/platform/x86/touchscreen_dmi.c -+++ b/drivers/platform/x86/touchscreen_dmi.c -@@ -232,6 +232,22 @@ static const struct ts_dmi_data dexp_ursus_7w_data = { - .properties = dexp_ursus_7w_props, - }; - -+static const struct property_entry dexp_ursus_kx210i_props[] = { -+ PROPERTY_ENTRY_U32("touchscreen-min-x", 5), -+ PROPERTY_ENTRY_U32("touchscreen-min-y", 2), -+ PROPERTY_ENTRY_U32("touchscreen-size-x", 1720), -+ PROPERTY_ENTRY_U32("touchscreen-size-y", 1137), -+ PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-dexp-ursus-kx210i.fw"), -+ PROPERTY_ENTRY_U32("silead,max-fingers", 10), -+ PROPERTY_ENTRY_BOOL("silead,home-button"), -+ { } -+}; -+ -+static const struct ts_dmi_data dexp_ursus_kx210i_data = { -+ .acpi_name = "MSSL1680:00", -+ .properties = dexp_ursus_kx210i_props, -+}; -+ - static const struct property_entry digma_citi_e200_props[] = { - PROPERTY_ENTRY_U32("touchscreen-size-x", 1980), - PROPERTY_ENTRY_U32("touchscreen-size-y", 1500), -@@ -773,6 +789,14 @@ static const struct dmi_system_id touchscreen_dmi_table[] = { - DMI_MATCH(DMI_PRODUCT_NAME, "7W"), - }, - }, -+ { -+ /* DEXP Ursus KX210i */ -+ .driver_data = (void *)&dexp_ursus_kx210i_data, -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "INSYDE Corp."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "S107I"), -+ }, -+ }, - { - /* Digma Citi E200 */ - .driver_data = (void *)&digma_citi_e200_data, -diff --git a/drivers/power/supply/generic-adc-battery.c b/drivers/power/supply/generic-adc-battery.c -index 97b0e873e87d2..c2d6378bb897d 100644 ---- a/drivers/power/supply/generic-adc-battery.c -+++ b/drivers/power/supply/generic-adc-battery.c -@@ -138,6 +138,9 @@ static int read_channel(struct gab *adc_bat, enum power_supply_property psp, - result); - if (ret < 0) - pr_err("read channel error\n"); -+ else -+ *result *= 1000; -+ - return ret; - } - -diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c -index 3c81858a8261c..9fc08d1de34c2 100644 ---- a/drivers/pwm/pwm-meson.c -+++ b/drivers/pwm/pwm-meson.c -@@ -424,7 +424,7 @@ static const struct meson_pwm_data pwm_axg_ee_data = { - }; - - static const char * const pwm_axg_ao_parent_names[] = { -- "aoclk81", "xtal", "fclk_div4", "fclk_div5" -+ "xtal", "axg_ao_clk81", "fclk_div4", "fclk_div5" - }; - - static const struct meson_pwm_data pwm_axg_ao_data = { -@@ -433,7 +433,7 @@ static const struct meson_pwm_data pwm_axg_ao_data = { - }; - - static const char * const pwm_g12a_ao_ab_parent_names[] = { -- "xtal", "aoclk81", "fclk_div4", "fclk_div5" -+ "xtal", "g12a_ao_clk81", "fclk_div4", "fclk_div5" - }; - - static const struct meson_pwm_data pwm_g12a_ao_ab_data = { -@@ -442,7 +442,7 @@ static const struct meson_pwm_data pwm_g12a_ao_ab_data = { - }; - - static const char * const pwm_g12a_ao_cd_parent_names[] = { -- "xtal", "aoclk81", -+ "xtal", "g12a_ao_clk81", - }; - - static const struct meson_pwm_data pwm_g12a_ao_cd_data = { -diff --git a/drivers/pwm/pwm-mtk-disp.c b/drivers/pwm/pwm-mtk-disp.c -index 83b8be0209b74..327c780d433da 100644 ---- a/drivers/pwm/pwm-mtk-disp.c -+++ b/drivers/pwm/pwm-mtk-disp.c -@@ -74,6 +74,19 @@ static int mtk_disp_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, - u64 div, rate; - int err; - -+ err = clk_prepare_enable(mdp->clk_main); -+ if (err < 0) { -+ dev_err(chip->dev, "Can't enable mdp->clk_main: %pe\n", ERR_PTR(err)); -+ return err; -+ } -+ -+ err = clk_prepare_enable(mdp->clk_mm); -+ if (err < 0) { -+ dev_err(chip->dev, "Can't enable mdp->clk_mm: %pe\n", ERR_PTR(err)); -+ clk_disable_unprepare(mdp->clk_main); -+ return err; -+ } -+ - /* - * Find period, high_width and clk_div to suit duty_ns and period_ns. - * Calculate proper div value to keep period value in the bound. -@@ -87,8 +100,11 @@ static int mtk_disp_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, - rate = clk_get_rate(mdp->clk_main); - clk_div = div_u64(rate * period_ns, NSEC_PER_SEC) >> - PWM_PERIOD_BIT_WIDTH; -- if (clk_div > PWM_CLKDIV_MAX) -+ if (clk_div > PWM_CLKDIV_MAX) { -+ clk_disable_unprepare(mdp->clk_mm); -+ clk_disable_unprepare(mdp->clk_main); - return -EINVAL; -+ } - - div = NSEC_PER_SEC * (clk_div + 1); - period = div64_u64(rate * period_ns, div); -@@ -98,14 +114,17 @@ static int mtk_disp_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, - high_width = div64_u64(rate * duty_ns, div); - value = period | (high_width << PWM_HIGH_WIDTH_SHIFT); - -- err = clk_enable(mdp->clk_main); -- if (err < 0) -- return err; -- -- err = clk_enable(mdp->clk_mm); -- if (err < 0) { -- clk_disable(mdp->clk_main); -- return err; -+ if (mdp->data->bls_debug && !mdp->data->has_commit) { -+ /* -+ * For MT2701, disable double buffer before writing register -+ * and select manual mode and use PWM_PERIOD/PWM_HIGH_WIDTH. -+ */ -+ mtk_disp_pwm_update_bits(mdp, mdp->data->bls_debug, -+ mdp->data->bls_debug_mask, -+ mdp->data->bls_debug_mask); -+ mtk_disp_pwm_update_bits(mdp, mdp->data->con0, -+ mdp->data->con0_sel, -+ mdp->data->con0_sel); - } - - mtk_disp_pwm_update_bits(mdp, mdp->data->con0, -@@ -124,8 +143,8 @@ static int mtk_disp_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, - 0x0); - } - -- clk_disable(mdp->clk_mm); -- clk_disable(mdp->clk_main); -+ clk_disable_unprepare(mdp->clk_mm); -+ clk_disable_unprepare(mdp->clk_main); - - return 0; - } -@@ -135,13 +154,16 @@ static int mtk_disp_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) - struct mtk_disp_pwm *mdp = to_mtk_disp_pwm(chip); - int err; - -- err = clk_enable(mdp->clk_main); -- if (err < 0) -+ err = clk_prepare_enable(mdp->clk_main); -+ if (err < 0) { -+ dev_err(chip->dev, "Can't enable mdp->clk_main: %pe\n", ERR_PTR(err)); - return err; -+ } - -- err = clk_enable(mdp->clk_mm); -+ err = clk_prepare_enable(mdp->clk_mm); - if (err < 0) { -- clk_disable(mdp->clk_main); -+ dev_err(chip->dev, "Can't enable mdp->clk_mm: %pe\n", ERR_PTR(err)); -+ clk_disable_unprepare(mdp->clk_main); - return err; - } - -@@ -158,8 +180,8 @@ static void mtk_disp_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) - mtk_disp_pwm_update_bits(mdp, DISP_PWM_EN, mdp->data->enable_mask, - 0x0); - -- clk_disable(mdp->clk_mm); -- clk_disable(mdp->clk_main); -+ clk_disable_unprepare(mdp->clk_mm); -+ clk_disable_unprepare(mdp->clk_main); - } - - static const struct pwm_ops mtk_disp_pwm_ops = { -@@ -194,14 +216,6 @@ static int mtk_disp_pwm_probe(struct platform_device *pdev) - if (IS_ERR(mdp->clk_mm)) - return PTR_ERR(mdp->clk_mm); - -- ret = clk_prepare(mdp->clk_main); -- if (ret < 0) -- return ret; -- -- ret = clk_prepare(mdp->clk_mm); -- if (ret < 0) -- goto disable_clk_main; -- - mdp->chip.dev = &pdev->dev; - mdp->chip.ops = &mtk_disp_pwm_ops; - mdp->chip.base = -1; -@@ -209,44 +223,22 @@ static int mtk_disp_pwm_probe(struct platform_device *pdev) - - ret = pwmchip_add(&mdp->chip); - if (ret < 0) { -- dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret); -- goto disable_clk_mm; -+ dev_err(&pdev->dev, "pwmchip_add() failed: %pe\n", ERR_PTR(ret)); -+ return ret; - } - - platform_set_drvdata(pdev, mdp); - -- /* -- * For MT2701, disable double buffer before writing register -- * and select manual mode and use PWM_PERIOD/PWM_HIGH_WIDTH. -- */ -- if (!mdp->data->has_commit) { -- mtk_disp_pwm_update_bits(mdp, mdp->data->bls_debug, -- mdp->data->bls_debug_mask, -- mdp->data->bls_debug_mask); -- mtk_disp_pwm_update_bits(mdp, mdp->data->con0, -- mdp->data->con0_sel, -- mdp->data->con0_sel); -- } -- - return 0; -- --disable_clk_mm: -- clk_unprepare(mdp->clk_mm); --disable_clk_main: -- clk_unprepare(mdp->clk_main); -- return ret; - } - - static int mtk_disp_pwm_remove(struct platform_device *pdev) - { - struct mtk_disp_pwm *mdp = platform_get_drvdata(pdev); -- int ret; - -- ret = pwmchip_remove(&mdp->chip); -- clk_unprepare(mdp->clk_mm); -- clk_unprepare(mdp->clk_main); -+ pwmchip_remove(&mdp->chip); - -- return ret; -+ return 0; - } - - static const struct mtk_pwm_data mt2701_pwm_data = { -diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c -index 0179716f74d74..06da271ad5dd3 100644 ---- a/drivers/regulator/core.c -+++ b/drivers/regulator/core.c -@@ -217,6 +217,78 @@ void regulator_unlock(struct regulator_dev *rdev) - } - EXPORT_SYMBOL_GPL(regulator_unlock); - -+/** -+ * regulator_lock_two - lock two regulators -+ * @rdev1: first regulator -+ * @rdev2: second regulator -+ * @ww_ctx: w/w mutex acquire context -+ * -+ * Locks both rdevs using the regulator_ww_class. -+ */ -+static void regulator_lock_two(struct regulator_dev *rdev1, -+ struct regulator_dev *rdev2, -+ struct ww_acquire_ctx *ww_ctx) -+{ -+ struct regulator_dev *tmp; -+ int ret; -+ -+ ww_acquire_init(ww_ctx, ®ulator_ww_class); -+ -+ /* Try to just grab both of them */ -+ ret = regulator_lock_nested(rdev1, ww_ctx); -+ WARN_ON(ret); -+ ret = regulator_lock_nested(rdev2, ww_ctx); -+ if (ret != -EDEADLOCK) { -+ WARN_ON(ret); -+ goto exit; -+ } -+ -+ while (true) { -+ /* -+ * Start of loop: rdev1 was locked and rdev2 was contended. -+ * Need to unlock rdev1, slowly lock rdev2, then try rdev1 -+ * again. -+ */ -+ regulator_unlock(rdev1); -+ -+ ww_mutex_lock_slow(&rdev2->mutex, ww_ctx); -+ rdev2->ref_cnt++; -+ rdev2->mutex_owner = current; -+ ret = regulator_lock_nested(rdev1, ww_ctx); -+ -+ if (ret == -EDEADLOCK) { -+ /* More contention; swap which needs to be slow */ -+ tmp = rdev1; -+ rdev1 = rdev2; -+ rdev2 = tmp; -+ } else { -+ WARN_ON(ret); -+ break; -+ } -+ } -+ -+exit: -+ ww_acquire_done(ww_ctx); -+} -+ -+/** -+ * regulator_unlock_two - unlock two regulators -+ * @rdev1: first regulator -+ * @rdev2: second regulator -+ * @ww_ctx: w/w mutex acquire context -+ * -+ * The inverse of regulator_lock_two(). -+ */ -+ -+static void regulator_unlock_two(struct regulator_dev *rdev1, -+ struct regulator_dev *rdev2, -+ struct ww_acquire_ctx *ww_ctx) -+{ -+ regulator_unlock(rdev2); -+ regulator_unlock(rdev1); -+ ww_acquire_fini(ww_ctx); -+} -+ - static bool regulator_supply_is_couple(struct regulator_dev *rdev) - { - struct regulator_dev *c_rdev; -@@ -344,6 +416,7 @@ static void regulator_lock_dependent(struct regulator_dev *rdev, - ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx); - old_contended_rdev = new_contended_rdev; - old_contended_rdev->ref_cnt++; -+ old_contended_rdev->mutex_owner = current; - } - - err = regulator_lock_recursive(rdev, -@@ -1418,8 +1491,8 @@ static int set_machine_constraints(struct regulator_dev *rdev) - - /** - * set_supply - set regulator supply regulator -- * @rdev: regulator name -- * @supply_rdev: supply regulator name -+ * @rdev: regulator (locked) -+ * @supply_rdev: supply regulator (locked)) - * - * Called by platform initialisation code to set the supply regulator for this - * regulator. This ensures that a regulators supply will also be enabled by the -@@ -1591,6 +1664,8 @@ static struct regulator *create_regulator(struct regulator_dev *rdev, - struct regulator *regulator; - int err = 0; - -+ lockdep_assert_held_once(&rdev->mutex.base); -+ - if (dev) { - char buf[REG_STR_SIZE]; - int size; -@@ -1618,9 +1693,7 @@ static struct regulator *create_regulator(struct regulator_dev *rdev, - regulator->rdev = rdev; - regulator->supply_name = supply_name; - -- regulator_lock(rdev); - list_add(®ulator->list, &rdev->consumer_list); -- regulator_unlock(rdev); - - if (dev) { - regulator->dev = dev; -@@ -1786,6 +1859,7 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) - { - struct regulator_dev *r; - struct device *dev = rdev->dev.parent; -+ struct ww_acquire_ctx ww_ctx; - int ret = 0; - - /* No supply to resolve? */ -@@ -1852,23 +1926,23 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) - * between rdev->supply null check and setting rdev->supply in - * set_supply() from concurrent tasks. - */ -- regulator_lock(rdev); -+ regulator_lock_two(rdev, r, &ww_ctx); - - /* Supply just resolved by a concurrent task? */ - if (rdev->supply) { -- regulator_unlock(rdev); -+ regulator_unlock_two(rdev, r, &ww_ctx); - put_device(&r->dev); - goto out; - } - - ret = set_supply(rdev, r); - if (ret < 0) { -- regulator_unlock(rdev); -+ regulator_unlock_two(rdev, r, &ww_ctx); - put_device(&r->dev); - goto out; - } - -- regulator_unlock(rdev); -+ regulator_unlock_two(rdev, r, &ww_ctx); - - /* - * In set_machine_constraints() we may have turned this regulator on -@@ -1983,7 +2057,9 @@ struct regulator *_regulator_get(struct device *dev, const char *id, - return regulator; - } - -+ regulator_lock(rdev); - regulator = create_regulator(rdev, dev, id); -+ regulator_unlock(rdev); - if (regulator == NULL) { - regulator = ERR_PTR(-ENOMEM); - module_put(rdev->owner); -@@ -5659,6 +5735,7 @@ static void regulator_summary_lock(struct ww_acquire_ctx *ww_ctx) - ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx); - old_contended_rdev = new_contended_rdev; - old_contended_rdev->ref_cnt++; -+ old_contended_rdev->mutex_owner = current; - } - - err = regulator_summary_lock_all(ww_ctx, -diff --git a/drivers/regulator/stm32-pwr.c b/drivers/regulator/stm32-pwr.c -index e0e627b0106e0..b94da49923767 100644 ---- a/drivers/regulator/stm32-pwr.c -+++ b/drivers/regulator/stm32-pwr.c -@@ -129,17 +129,16 @@ static const struct regulator_desc stm32_pwr_desc[] = { - - static int stm32_pwr_regulator_probe(struct platform_device *pdev) - { -- struct device_node *np = pdev->dev.of_node; - struct stm32_pwr_reg *priv; - void __iomem *base; - struct regulator_dev *rdev; - struct regulator_config config = { }; - int i, ret = 0; - -- base = of_iomap(np, 0); -- if (!base) { -+ base = devm_platform_ioremap_resource(pdev, 0); -+ if (IS_ERR(base)) { - dev_err(&pdev->dev, "Unable to map IO memory\n"); -- return -ENOMEM; -+ return PTR_ERR(base); - } - - config.dev = &pdev->dev; -diff --git a/drivers/remoteproc/st_remoteproc.c b/drivers/remoteproc/st_remoteproc.c -index ee13d23b43a97..2ed8f96efe8e1 100644 ---- a/drivers/remoteproc/st_remoteproc.c -+++ b/drivers/remoteproc/st_remoteproc.c -@@ -129,6 +129,7 @@ static int st_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) - while (of_phandle_iterator_next(&it) == 0) { - rmem = of_reserved_mem_lookup(it.node); - if (!rmem) { -+ of_node_put(it.node); - dev_err(dev, "unable to acquire memory-region\n"); - return -EINVAL; - } -@@ -150,8 +151,10 @@ static int st_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) - it.node->name); - } - -- if (!mem) -+ if (!mem) { -+ of_node_put(it.node); - return -ENOMEM; -+ } - - rproc_add_carveout(rproc, mem); - index++; -diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c -index 2cf4b2992bfcd..041dff62ddff3 100644 ---- a/drivers/remoteproc/stm32_rproc.c -+++ b/drivers/remoteproc/stm32_rproc.c -@@ -211,11 +211,13 @@ static int stm32_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) - while (of_phandle_iterator_next(&it) == 0) { - rmem = of_reserved_mem_lookup(it.node); - if (!rmem) { -+ of_node_put(it.node); - dev_err(dev, "unable to acquire memory-region\n"); - return -EINVAL; - } - - if (stm32_rproc_pa_to_da(rproc, rmem->base, &da) < 0) { -+ of_node_put(it.node); - dev_err(dev, "memory region not valid %pa\n", - &rmem->base); - return -EINVAL; -@@ -242,8 +244,10 @@ static int stm32_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) - it.node->name); - } - -- if (!mem) -+ if (!mem) { -+ of_node_put(it.node); - return -ENOMEM; -+ } - - rproc_add_carveout(rproc, mem); - index++; -diff --git a/drivers/rtc/rtc-meson-vrtc.c b/drivers/rtc/rtc-meson-vrtc.c -index 89e5ba0dae69f..1cf98542578fc 100644 ---- a/drivers/rtc/rtc-meson-vrtc.c -+++ b/drivers/rtc/rtc-meson-vrtc.c -@@ -23,7 +23,7 @@ static int meson_vrtc_read_time(struct device *dev, struct rtc_time *tm) - struct timespec64 time; - - dev_dbg(dev, "%s\n", __func__); -- ktime_get_raw_ts64(&time); -+ ktime_get_real_ts64(&time); - rtc_time64_to_tm(time.tv_sec, tm); - - return 0; -@@ -101,7 +101,7 @@ static int __maybe_unused meson_vrtc_suspend(struct device *dev) - long alarm_secs; - struct timespec64 time; - -- ktime_get_raw_ts64(&time); -+ ktime_get_real_ts64(&time); - local_time = time.tv_sec; - - dev_dbg(dev, "alarm_time = %lus, local_time=%lus\n", -diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c -index a2941c875a064..bf502fcd60772 100644 ---- a/drivers/rtc/rtc-omap.c -+++ b/drivers/rtc/rtc-omap.c -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - /* - * The OMAP RTC is a year/month/day/hours/minutes/seconds BCD clock -diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c -index 3362f235e8919..187565830b5b4 100644 ---- a/drivers/s390/block/dasd.c -+++ b/drivers/s390/block/dasd.c -@@ -3000,7 +3000,7 @@ static int _dasd_requeue_request(struct dasd_ccw_req *cqr) - return 0; - spin_lock_irq(&cqr->dq->lock); - req = (struct request *) cqr->callback_data; -- blk_mq_requeue_request(req, false); -+ blk_mq_requeue_request(req, true); - spin_unlock_irq(&cqr->dq->lock); - - return 0; -diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c -index 8930696021fbd..af5238ab63094 100644 ---- a/drivers/scsi/lpfc/lpfc_init.c -+++ b/drivers/scsi/lpfc/lpfc_init.c -@@ -10226,7 +10226,7 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) - goto out_iounmap_all; - } else { - error = -ENOMEM; -- goto out_iounmap_all; -+ goto out_iounmap_ctrl; - } - } - -@@ -10244,7 +10244,7 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) - dev_err(&pdev->dev, - "ioremap failed for SLI4 HBA dpp registers.\n"); - error = -ENOMEM; -- goto out_iounmap_ctrl; -+ goto out_iounmap_all; - } - phba->pci_bar4_memmap_p = phba->sli4_hba.dpp_regs_memmap_p; - } -@@ -10269,9 +10269,11 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) - return 0; - - out_iounmap_all: -- iounmap(phba->sli4_hba.drbl_regs_memmap_p); -+ if (phba->sli4_hba.drbl_regs_memmap_p) -+ iounmap(phba->sli4_hba.drbl_regs_memmap_p); - out_iounmap_ctrl: -- iounmap(phba->sli4_hba.ctrl_regs_memmap_p); -+ if (phba->sli4_hba.ctrl_regs_memmap_p) -+ iounmap(phba->sli4_hba.ctrl_regs_memmap_p); - out_iounmap_conf: - iounmap(phba->sli4_hba.conf_regs_memmap_p); - -diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c -index 8b1ba690039b7..8c88190673c2a 100644 ---- a/drivers/scsi/megaraid.c -+++ b/drivers/scsi/megaraid.c -@@ -1439,6 +1439,7 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status) - */ - if (cmdid == CMDID_INT_CMDS) { - scb = &adapter->int_scb; -+ cmd = scb->cmd; - - list_del_init(&scb->list); - scb->state = SCB_FREE; -diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c -index 02b999d48ca19..ae805f91eafa5 100644 ---- a/drivers/spi/spi-fsl-spi.c -+++ b/drivers/spi/spi-fsl-spi.c -@@ -208,8 +208,8 @@ static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs, - struct spi_device *spi, - int bits_per_word) - { -- /* QE uses Little Endian for words > 8 -- * so transform all words > 8 into 8 bits -+ /* CPM/QE uses Little Endian for words > 8 -+ * so transform 16 and 32 bits words into 8 bits - * Unfortnatly that doesn't work for LSB so - * reject these for now */ - /* Note: 32 bits word, LSB works iff -@@ -217,9 +217,11 @@ static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs, - if (spi->mode & SPI_LSB_FIRST && - bits_per_word > 8) - return -EINVAL; -- if (bits_per_word > 8) -+ if (bits_per_word <= 8) -+ return bits_per_word; -+ if (bits_per_word == 16 || bits_per_word == 32) - return 8; /* pretend its 8 bits */ -- return bits_per_word; -+ return -EINVAL; - } - - static int fsl_spi_setup_transfer(struct spi_device *spi, -@@ -249,7 +251,7 @@ static int fsl_spi_setup_transfer(struct spi_device *spi, - bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi, - mpc8xxx_spi, - bits_per_word); -- else if (mpc8xxx_spi->flags & SPI_QE) -+ else - bits_per_word = mspi_apply_qe_mode_quirks(cs, spi, - bits_per_word); - -diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c -index ead6c211047d5..ebcf9f4d5679e 100644 ---- a/drivers/spi/spi-qup.c -+++ b/drivers/spi/spi-qup.c -@@ -1276,18 +1276,22 @@ static int spi_qup_remove(struct platform_device *pdev) - struct spi_qup *controller = spi_master_get_devdata(master); - int ret; - -- ret = pm_runtime_resume_and_get(&pdev->dev); -- if (ret < 0) -- return ret; -+ ret = pm_runtime_get_sync(&pdev->dev); - -- ret = spi_qup_set_state(controller, QUP_STATE_RESET); -- if (ret) -- return ret; -+ if (ret >= 0) { -+ ret = spi_qup_set_state(controller, QUP_STATE_RESET); -+ if (ret) -+ dev_warn(&pdev->dev, "failed to reset controller (%pe)\n", -+ ERR_PTR(ret)); - -- spi_qup_release_dma(master); -+ clk_disable_unprepare(controller->cclk); -+ clk_disable_unprepare(controller->iclk); -+ } else { -+ dev_warn(&pdev->dev, "failed to resume, skip hw disable (%pe)\n", -+ ERR_PTR(ret)); -+ } - -- clk_disable_unprepare(controller->cclk); -- clk_disable_unprepare(controller->iclk); -+ spi_qup_release_dma(master); - - pm_runtime_put_noidle(&pdev->dev); - pm_runtime_disable(&pdev->dev); -diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c -index c16b60f645a4d..8ca7e004a53dc 100644 ---- a/drivers/spmi/spmi.c -+++ b/drivers/spmi/spmi.c -@@ -348,7 +348,8 @@ static int spmi_drv_remove(struct device *dev) - const struct spmi_driver *sdrv = to_spmi_driver(dev->driver); - - pm_runtime_get_sync(dev); -- sdrv->remove(to_spmi_device(dev)); -+ if (sdrv->remove) -+ sdrv->remove(to_spmi_device(dev)); - pm_runtime_put_noidle(dev); - - pm_runtime_disable(dev); -diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c -index ed404355ea4c6..a00693c618706 100644 ---- a/drivers/staging/iio/resolver/ad2s1210.c -+++ b/drivers/staging/iio/resolver/ad2s1210.c -@@ -101,7 +101,7 @@ struct ad2s1210_state { - static const int ad2s1210_mode_vals[4][2] = { - [MOD_POS] = { 0, 0 }, - [MOD_VEL] = { 0, 1 }, -- [MOD_CONFIG] = { 1, 0 }, -+ [MOD_CONFIG] = { 1, 1 }, - }; - - static inline void ad2s1210_set_mode(enum ad2s1210_mode mode, -diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -index bcbf0c8cd4209..be377e75703bf 100644 ---- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -@@ -767,6 +767,7 @@ static int _rtl92e_sta_up(struct net_device *dev, bool is_silent_reset) - else - netif_wake_queue(dev); - -+ priv->bfirst_after_down = false; - return 0; - } - -diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c -index 3403667a9592f..8b8afa95fbbae 100644 ---- a/drivers/target/iscsi/iscsi_target.c -+++ b/drivers/target/iscsi/iscsi_target.c -@@ -4084,9 +4084,12 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn) - list_for_each_entry_safe(cmd, cmd_tmp, &tmp_list, i_conn_node) { - struct se_cmd *se_cmd = &cmd->se_cmd; - -- if (se_cmd->se_tfo != NULL) { -- spin_lock_irq(&se_cmd->t_state_lock); -- if (se_cmd->transport_state & CMD_T_ABORTED) { -+ if (!se_cmd->se_tfo) -+ continue; -+ -+ spin_lock_irq(&se_cmd->t_state_lock); -+ if (se_cmd->transport_state & CMD_T_ABORTED) { -+ if (!(se_cmd->transport_state & CMD_T_TAS)) - /* - * LIO's abort path owns the cleanup for this, - * so put it back on the list and let -@@ -4094,11 +4097,10 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn) - */ - list_move_tail(&cmd->i_conn_node, - &conn->conn_cmd_list); -- } else { -- se_cmd->transport_state |= CMD_T_FABRIC_STOP; -- } -- spin_unlock_irq(&se_cmd->t_state_lock); -+ } else { -+ se_cmd->transport_state |= CMD_T_FABRIC_STOP; - } -+ spin_unlock_irq(&se_cmd->t_state_lock); - } - spin_unlock_bh(&conn->cmd_lock); - -diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h -index 33ad9d6de5323..e50af46f8c198 100644 ---- a/drivers/tty/serial/8250/8250.h -+++ b/drivers/tty/serial/8250/8250.h -@@ -305,6 +305,13 @@ extern int serial8250_rx_dma(struct uart_8250_port *); - extern void serial8250_rx_dma_flush(struct uart_8250_port *); - extern int serial8250_request_dma(struct uart_8250_port *); - extern void serial8250_release_dma(struct uart_8250_port *); -+ -+static inline bool serial8250_tx_dma_running(struct uart_8250_port *p) -+{ -+ struct uart_8250_dma *dma = p->dma; -+ -+ return dma && dma->tx_running; -+} - #else - static inline int serial8250_tx_dma(struct uart_8250_port *p) - { -@@ -320,6 +327,11 @@ static inline int serial8250_request_dma(struct uart_8250_port *p) - return -1; - } - static inline void serial8250_release_dma(struct uart_8250_port *p) { } -+ -+static inline bool serial8250_tx_dma_running(struct uart_8250_port *p) -+{ -+ return false; -+} - #endif - - static inline int ns16550a_goto_highspeed(struct uart_8250_port *up) -diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 907130244e1f5..96ae6c6031d4d 100644 ---- a/drivers/tty/serial/8250/8250_port.c -+++ b/drivers/tty/serial/8250/8250_port.c -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1840,6 +1841,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) - unsigned char status; - unsigned long flags; - struct uart_8250_port *up = up_to_u8250p(port); -+ struct tty_port *tport = &port->state->port; - bool skip_rx = false; - - if (iir & UART_IIR_NO_INT) -@@ -1863,6 +1865,8 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) - skip_rx = true; - - if (status & (UART_LSR_DR | UART_LSR_BI) && !skip_rx) { -+ if (irqd_is_wakeup_set(irq_get_irq_data(port->irq))) -+ pm_wakeup_event(tport->tty->dev, 0); - if (!up->dma || handle_rx_dma(up, iir)) - status = serial8250_rx_chars(up, status); - } -@@ -1918,19 +1922,25 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) - static unsigned int serial8250_tx_empty(struct uart_port *port) - { - struct uart_8250_port *up = up_to_u8250p(port); -+ unsigned int result = 0; - unsigned long flags; - unsigned int lsr; - - serial8250_rpm_get(up); - - spin_lock_irqsave(&port->lock, flags); -- lsr = serial_port_in(port, UART_LSR); -- up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; -+ if (!serial8250_tx_dma_running(up)) { -+ lsr = serial_port_in(port, UART_LSR); -+ up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; -+ -+ if ((lsr & BOTH_EMPTY) == BOTH_EMPTY) -+ result = TIOCSER_TEMT; -+ } - spin_unlock_irqrestore(&port->lock, flags); - - serial8250_rpm_put(up); - -- return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0; -+ return result; - } - - unsigned int serial8250_do_get_mctrl(struct uart_port *port) -diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c -index b722ab9415285..0b57973e7c658 100644 ---- a/drivers/tty/serial/fsl_lpuart.c -+++ b/drivers/tty/serial/fsl_lpuart.c -@@ -1172,7 +1172,7 @@ static inline int lpuart_start_rx_dma(struct lpuart_port *sport) - * 10ms at any baud rate. - */ - sport->rx_dma_rng_buf_len = (DMA_RX_TIMEOUT * baud / bits / 1000) * 2; -- sport->rx_dma_rng_buf_len = (1 << (fls(sport->rx_dma_rng_buf_len) - 1)); -+ sport->rx_dma_rng_buf_len = (1 << fls(sport->rx_dma_rng_buf_len)); - if (sport->rx_dma_rng_buf_len < 16) - sport->rx_dma_rng_buf_len = 16; - -diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c -index 37c46c65a65f4..bb14bd4f6e55d 100644 ---- a/drivers/tty/tty_io.c -+++ b/drivers/tty/tty_io.c -@@ -876,13 +876,13 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count, - return i; - } - --static void tty_write_unlock(struct tty_struct *tty) -+void tty_write_unlock(struct tty_struct *tty) - { - mutex_unlock(&tty->atomic_write_lock); - wake_up_interruptible_poll(&tty->write_wait, EPOLLOUT); - } - --static int tty_write_lock(struct tty_struct *tty, int ndelay) -+int tty_write_lock(struct tty_struct *tty, int ndelay) - { - if (!mutex_trylock(&tty->atomic_write_lock)) { - if (ndelay) -diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c -index 9245fffdbceb1..5d833f0b412d5 100644 ---- a/drivers/tty/tty_ioctl.c -+++ b/drivers/tty/tty_ioctl.c -@@ -397,21 +397,42 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt) - tmp_termios.c_ispeed = tty_termios_input_baud_rate(&tmp_termios); - tmp_termios.c_ospeed = tty_termios_baud_rate(&tmp_termios); - -- ld = tty_ldisc_ref(tty); -+ if (opt & (TERMIOS_FLUSH|TERMIOS_WAIT)) { -+retry_write_wait: -+ retval = wait_event_interruptible(tty->write_wait, !tty_chars_in_buffer(tty)); -+ if (retval < 0) -+ return retval; - -- if (ld != NULL) { -- if ((opt & TERMIOS_FLUSH) && ld->ops->flush_buffer) -- ld->ops->flush_buffer(tty); -- tty_ldisc_deref(ld); -- } -+ if (tty_write_lock(tty, 0) < 0) -+ goto retry_write_wait; - -- if (opt & TERMIOS_WAIT) { -- tty_wait_until_sent(tty, 0); -- if (signal_pending(current)) -- return -ERESTARTSYS; -- } -+ /* Racing writer? */ -+ if (tty_chars_in_buffer(tty)) { -+ tty_write_unlock(tty); -+ goto retry_write_wait; -+ } -+ -+ ld = tty_ldisc_ref(tty); -+ if (ld != NULL) { -+ if ((opt & TERMIOS_FLUSH) && ld->ops->flush_buffer) -+ ld->ops->flush_buffer(tty); -+ tty_ldisc_deref(ld); -+ } -+ -+ if ((opt & TERMIOS_WAIT) && tty->ops->wait_until_sent) { -+ tty->ops->wait_until_sent(tty, 0); -+ if (signal_pending(current)) { -+ tty_write_unlock(tty); -+ return -ERESTARTSYS; -+ } -+ } -+ -+ tty_set_termios(tty, &tmp_termios); - -- tty_set_termios(tty, &tmp_termios); -+ tty_write_unlock(tty); -+ } else { -+ tty_set_termios(tty, &tmp_termios); -+ } - - /* FIXME: Arguably if tmp_termios == tty->termios AND the - actual requested termios was not tmp_termios then we may -diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c -index 7a86979cf1406..27298ca083d14 100644 ---- a/drivers/usb/chipidea/core.c -+++ b/drivers/usb/chipidea/core.c -@@ -1084,7 +1084,7 @@ static int ci_hdrc_probe(struct platform_device *pdev) - ret = ci_usb_phy_init(ci); - if (ret) { - dev_err(dev, "unable to init phy: %d\n", ret); -- return ret; -+ goto ulpi_exit; - } - - ci->hw_bank.phys = res->start; -diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c -index db1aaed07e056..27b60623c280e 100644 ---- a/drivers/usb/dwc3/core.c -+++ b/drivers/usb/dwc3/core.c -@@ -1496,13 +1496,11 @@ static int dwc3_probe(struct platform_device *pdev) - - spin_lock_init(&dwc->lock); - -+ pm_runtime_get_noresume(dev); - pm_runtime_set_active(dev); - pm_runtime_use_autosuspend(dev); - pm_runtime_set_autosuspend_delay(dev, DWC3_DEFAULT_AUTOSUSPEND_DELAY); - pm_runtime_enable(dev); -- ret = pm_runtime_get_sync(dev); -- if (ret < 0) -- goto err1; - - pm_runtime_forbid(dev); - -@@ -1562,12 +1560,10 @@ err3: - dwc3_free_event_buffers(dwc); - - err2: -- pm_runtime_allow(&pdev->dev); -- --err1: -- pm_runtime_put_sync(&pdev->dev); -- pm_runtime_disable(&pdev->dev); -- -+ pm_runtime_allow(dev); -+ pm_runtime_disable(dev); -+ pm_runtime_set_suspended(dev); -+ pm_runtime_put_noidle(dev); - disable_clks: - clk_bulk_disable_unprepare(dwc->num_clks, dwc->clks); - assert_reset: -@@ -1588,6 +1584,7 @@ static int dwc3_remove(struct platform_device *pdev) - dwc3_core_exit(dwc); - dwc3_ulpi_exit(dwc); - -+ pm_runtime_allow(&pdev->dev); - pm_runtime_disable(&pdev->dev); - pm_runtime_put_noidle(&pdev->dev); - pm_runtime_set_suspended(&pdev->dev); -diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c -index 0bbd180022aa7..e04acf2dfa65d 100644 ---- a/drivers/usb/gadget/udc/renesas_usb3.c -+++ b/drivers/usb/gadget/udc/renesas_usb3.c -@@ -2553,6 +2553,7 @@ static int renesas_usb3_remove(struct platform_device *pdev) - debugfs_remove_recursive(usb3->dentry); - device_remove_file(&pdev->dev, &dev_attr_role); - -+ cancel_work_sync(&usb3->role_work); - usb_role_switch_unregister(usb3->role_sw); - - usb_del_gadget_udc(&usb3->gadget); -diff --git a/drivers/usb/host/xhci-debugfs.c b/drivers/usb/host/xhci-debugfs.c -index f5c8e4eb62ae6..dc332f5800ad9 100644 ---- a/drivers/usb/host/xhci-debugfs.c -+++ b/drivers/usb/host/xhci-debugfs.c -@@ -132,6 +132,7 @@ static void xhci_debugfs_regset(struct xhci_hcd *xhci, u32 base, - regset->regs = regs; - regset->nregs = nregs; - regset->base = hcd->regs + base; -+ regset->dev = hcd->self.controller; - - debugfs_create_regset32((const char *)rgs->name, 0444, parent, regset); - } -diff --git a/drivers/usb/host/xhci-rcar.c b/drivers/usb/host/xhci-rcar.c -index 3da75b367f952..5d78352992454 100644 ---- a/drivers/usb/host/xhci-rcar.c -+++ b/drivers/usb/host/xhci-rcar.c -@@ -74,7 +74,6 @@ MODULE_FIRMWARE(XHCI_RCAR_FIRMWARE_NAME_V3); - - /* For soc_device_attribute */ - #define RCAR_XHCI_FIRMWARE_V2 BIT(0) /* FIRMWARE V2 */ --#define RCAR_XHCI_FIRMWARE_V3 BIT(1) /* FIRMWARE V3 */ - - static const struct soc_device_attribute rcar_quirks_match[] = { - { -@@ -147,8 +146,6 @@ static int xhci_rcar_download_firmware(struct usb_hcd *hcd) - - if (quirks & RCAR_XHCI_FIRMWARE_V2) - firmware_name = XHCI_RCAR_FIRMWARE_NAME_V2; -- else if (quirks & RCAR_XHCI_FIRMWARE_V3) -- firmware_name = XHCI_RCAR_FIRMWARE_NAME_V3; - else - firmware_name = priv->firmware_name; - -diff --git a/drivers/usb/mtu3/mtu3_qmu.c b/drivers/usb/mtu3/mtu3_qmu.c -index 2ea3157ddb6e2..e65586147965d 100644 ---- a/drivers/usb/mtu3/mtu3_qmu.c -+++ b/drivers/usb/mtu3/mtu3_qmu.c -@@ -210,6 +210,7 @@ static struct qmu_gpd *advance_enq_gpd(struct mtu3_gpd_ring *ring) - return ring->enqueue; - } - -+/* @dequeue may be NULL if ring is unallocated or freed */ - static struct qmu_gpd *advance_deq_gpd(struct mtu3_gpd_ring *ring) - { - if (ring->dequeue < ring->end) -@@ -484,7 +485,7 @@ static void qmu_done_tx(struct mtu3 *mtu, u8 epnum) - dev_dbg(mtu->dev, "%s EP%d, last=%p, current=%p, enq=%p\n", - __func__, epnum, gpd, gpd_current, ring->enqueue); - -- while (gpd != gpd_current && !GET_GPD_HWO(gpd)) { -+ while (gpd && gpd != gpd_current && !GET_GPD_HWO(gpd)) { - - mreq = next_request(mep); - -@@ -523,7 +524,7 @@ static void qmu_done_rx(struct mtu3 *mtu, u8 epnum) - dev_dbg(mtu->dev, "%s EP%d, last=%p, current=%p, enq=%p\n", - __func__, epnum, gpd, gpd_current, ring->enqueue); - -- while (gpd != gpd_current && !GET_GPD_HWO(gpd)) { -+ while (gpd && gpd != gpd_current && !GET_GPD_HWO(gpd)) { - - mreq = next_request(mep); - -diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c -index e51ed6b45a474..972d9ddb04735 100644 ---- a/drivers/usb/serial/option.c -+++ b/drivers/usb/serial/option.c -@@ -595,6 +595,11 @@ static void option_instat_callback(struct urb *urb); - #define SIERRA_VENDOR_ID 0x1199 - #define SIERRA_PRODUCT_EM9191 0x90d3 - -+/* UNISOC (Spreadtrum) products */ -+#define UNISOC_VENDOR_ID 0x1782 -+/* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */ -+#define TOZED_PRODUCT_LT70C 0x4055 -+ - /* Device flags */ - - /* Highest interface number which can be used with NCTRL() and RSVD() */ -@@ -2225,6 +2230,7 @@ static const struct usb_device_id option_ids[] = { - { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, - { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, - { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, -+ { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, - { } /* Terminating entry */ - }; - MODULE_DEVICE_TABLE(usb, option_ids); -diff --git a/fs/afs/inode.c b/fs/afs/inode.c -index 622363af4c1bf..fd681eec49aa2 100644 ---- a/fs/afs/inode.c -+++ b/fs/afs/inode.c -@@ -227,6 +227,7 @@ static void afs_apply_status(struct afs_fs_cursor *fc, - set_bit(AFS_VNODE_ZAP_DATA, &vnode->flags); - } - change_size = true; -+ data_changed = true; - } else if (vnode->status.type == AFS_FTYPE_DIR) { - /* Expected directory change is handled elsewhere so - * that we can locally edit the directory and save on a -diff --git a/fs/btrfs/block-rsv.c b/fs/btrfs/block-rsv.c -index 343400d49bd1f..36ef3228bac86 100644 ---- a/fs/btrfs/block-rsv.c -+++ b/fs/btrfs/block-rsv.c -@@ -29,7 +29,8 @@ static u64 block_rsv_release_bytes(struct btrfs_fs_info *fs_info, - } else { - num_bytes = 0; - } -- if (block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) { -+ if (qgroup_to_release_ret && -+ block_rsv->qgroup_rsv_reserved >= block_rsv->qgroup_rsv_size) { - qgroup_to_release = block_rsv->qgroup_rsv_reserved - - block_rsv->qgroup_rsv_size; - block_rsv->qgroup_rsv_reserved = block_rsv->qgroup_rsv_size; -diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c -index 822c615840e84..1420df997485a 100644 ---- a/fs/btrfs/ctree.c -+++ b/fs/btrfs/ctree.c -@@ -5138,10 +5138,12 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, - int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) - { - struct btrfs_key key; -+ struct btrfs_key orig_key; - struct btrfs_disk_key found_key; - int ret; - - btrfs_item_key_to_cpu(path->nodes[0], &key, 0); -+ orig_key = key; - - if (key.offset > 0) { - key.offset--; -@@ -5158,8 +5160,36 @@ int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) - - btrfs_release_path(path); - ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); -- if (ret < 0) -+ if (ret <= 0) - return ret; -+ -+ /* -+ * Previous key not found. Even if we were at slot 0 of the leaf we had -+ * before releasing the path and calling btrfs_search_slot(), we now may -+ * be in a slot pointing to the same original key - this can happen if -+ * after we released the path, one of more items were moved from a -+ * sibling leaf into the front of the leaf we had due to an insertion -+ * (see push_leaf_right()). -+ * If we hit this case and our slot is > 0 and just decrement the slot -+ * so that the caller does not process the same key again, which may or -+ * may not break the caller, depending on its logic. -+ */ -+ if (path->slots[0] < btrfs_header_nritems(path->nodes[0])) { -+ btrfs_item_key(path->nodes[0], &found_key, path->slots[0]); -+ ret = comp_keys(&found_key, &orig_key); -+ if (ret == 0) { -+ if (path->slots[0] > 0) { -+ path->slots[0]--; -+ return 0; -+ } -+ /* -+ * At slot 0, same key as before, it means orig_key is -+ * the lowest, leftmost, key in the tree. We're done. -+ */ -+ return 1; -+ } -+ } -+ - btrfs_item_key(path->nodes[0], &found_key, 0); - ret = comp_keys(&found_key, &key); - /* -diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c -index 64b443aa61cae..22f95a5a58fe1 100644 ---- a/fs/btrfs/ioctl.c -+++ b/fs/btrfs/ioctl.c -@@ -4339,6 +4339,11 @@ static long btrfs_ioctl_scrub(struct file *file, void __user *arg) - if (IS_ERR(sa)) - return PTR_ERR(sa); - -+ if (sa->flags & ~BTRFS_SCRUB_SUPPORTED_FLAGS) { -+ ret = -EOPNOTSUPP; -+ goto out; -+ } -+ - if (!(sa->flags & BTRFS_SCRUB_READONLY)) { - ret = mnt_want_write_file(file); - if (ret) -diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c -index f4edadf1067f2..cec6c283a691c 100644 ---- a/fs/btrfs/print-tree.c -+++ b/fs/btrfs/print-tree.c -@@ -109,10 +109,10 @@ static void print_extent_item(struct extent_buffer *eb, int slot, int type) - pr_cont("shared data backref parent %llu count %u\n", - offset, btrfs_shared_data_ref_count(eb, sref)); - /* -- * offset is supposed to be a tree block which -- * must be aligned to nodesize. -+ * Offset is supposed to be a tree block which must be -+ * aligned to sectorsize. - */ -- if (!IS_ALIGNED(offset, eb->fs_info->nodesize)) -+ if (!IS_ALIGNED(offset, eb->fs_info->sectorsize)) - pr_info( - "\t\t\t(parent %llu not aligned to sectorsize %u)\n", - offset, eb->fs_info->sectorsize); -diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c -index a82d757a23419..cd0030533bf7a 100644 ---- a/fs/cifs/smb2ops.c -+++ b/fs/cifs/smb2ops.c -@@ -1678,7 +1678,7 @@ smb2_copychunk_range(const unsigned int xid, - pcchunk->SourceOffset = cpu_to_le64(src_off); - pcchunk->TargetOffset = cpu_to_le64(dest_off); - pcchunk->Length = -- cpu_to_le32(min_t(u32, len, tcon->max_bytes_chunk)); -+ cpu_to_le32(min_t(u64, len, tcon->max_bytes_chunk)); - - /* Request server copy to target from src identified by key */ - kfree(retbuf); -diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c -index 9efc243e991ae..3547388ad60b1 100644 ---- a/fs/debugfs/file.c -+++ b/fs/debugfs/file.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -1119,7 +1120,14 @@ static int debugfs_show_regset32(struct seq_file *s, void *data) - { - struct debugfs_regset32 *regset = s->private; - -+ if (regset->dev) -+ pm_runtime_get_sync(regset->dev); -+ - debugfs_print_regs32(s, regset->regs, regset->nregs, regset->base, ""); -+ -+ if (regset->dev) -+ pm_runtime_put(regset->dev); -+ - return 0; - } - -diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h -index 544a453f3076c..cc7a42682814c 100644 ---- a/fs/erofs/internal.h -+++ b/fs/erofs/internal.h -@@ -226,7 +226,7 @@ struct erofs_inode { - - unsigned char datalayout; - unsigned char inode_isize; -- unsigned short xattr_isize; -+ unsigned int xattr_isize; - - unsigned int xattr_shared_count; - unsigned int *xattr_shared_xattrs; -diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c -index fff5741007214..b5ee58fdd82f3 100644 ---- a/fs/erofs/zmap.c -+++ b/fs/erofs/zmap.c -@@ -179,6 +179,10 @@ static int vle_legacy_load_cluster_from_disk(struct z_erofs_maprecorder *m, - case Z_EROFS_VLE_CLUSTER_TYPE_PLAIN: - case Z_EROFS_VLE_CLUSTER_TYPE_HEAD: - m->clusterofs = le16_to_cpu(di->di_clusterofs); -+ if (m->clusterofs >= 1 << vi->z_logical_clusterbits) { -+ DBG_BUGON(1); -+ return -EFSCORRUPTED; -+ } - m->pblk = le32_to_cpu(di->di_u.blkaddr); - break; - default: -diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c -index 031ff3f190184..b68cee75f5c58 100644 ---- a/fs/ext4/balloc.c -+++ b/fs/ext4/balloc.c -@@ -303,6 +303,22 @@ struct ext4_group_desc * ext4_get_group_desc(struct super_block *sb, - return desc; - } - -+static ext4_fsblk_t ext4_valid_block_bitmap_padding(struct super_block *sb, -+ ext4_group_t block_group, -+ struct buffer_head *bh) -+{ -+ ext4_grpblk_t next_zero_bit; -+ unsigned long bitmap_size = sb->s_blocksize * 8; -+ unsigned int offset = num_clusters_in_group(sb, block_group); -+ -+ if (bitmap_size <= offset) -+ return 0; -+ -+ next_zero_bit = ext4_find_next_zero_bit(bh->b_data, bitmap_size, offset); -+ -+ return (next_zero_bit < bitmap_size ? next_zero_bit : 0); -+} -+ - /* - * Return the block number which was discovered to be invalid, or 0 if - * the block bitmap is valid. -@@ -395,6 +411,15 @@ static int ext4_validate_block_bitmap(struct super_block *sb, - EXT4_GROUP_INFO_BBITMAP_CORRUPT); - return -EFSCORRUPTED; - } -+ blk = ext4_valid_block_bitmap_padding(sb, block_group, bh); -+ if (unlikely(blk != 0)) { -+ ext4_unlock_group(sb, block_group); -+ ext4_error(sb, "bg %u: block %llu: padding at end of block bitmap is not set", -+ block_group, blk); -+ ext4_mark_group_bitmap_corrupted(sb, block_group, -+ EXT4_GROUP_INFO_BBITMAP_CORRUPT); -+ return -EFSCORRUPTED; -+ } - set_buffer_verified(bh); - verified: - ext4_unlock_group(sb, block_group); -diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c -index 27760c39f70ec..478c35d453784 100644 ---- a/fs/ext4/extents.c -+++ b/fs/ext4/extents.c -@@ -6027,7 +6027,8 @@ int ext4_clu_mapped(struct inode *inode, ext4_lblk_t lclu) - * mapped - no physical clusters have been allocated, and the - * file has no extents - */ -- if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) -+ if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA) || -+ ext4_has_inline_data(inode)) - return 0; - - /* search for the extent closest to the first block in the cluster */ -diff --git a/fs/ext4/extents_status.c b/fs/ext4/extents_status.c -index 9d0bed2e4d059..80b5288cc0e9b 100644 ---- a/fs/ext4/extents_status.c -+++ b/fs/ext4/extents_status.c -@@ -269,14 +269,12 @@ static void __es_find_extent_range(struct inode *inode, - - /* see if the extent has been cached */ - es->es_lblk = es->es_len = es->es_pblk = 0; -- if (tree->cache_es) { -- es1 = tree->cache_es; -- if (in_range(lblk, es1->es_lblk, es1->es_len)) { -- es_debug("%u cached by [%u/%u) %llu %x\n", -- lblk, es1->es_lblk, es1->es_len, -- ext4_es_pblock(es1), ext4_es_status(es1)); -- goto out; -- } -+ es1 = READ_ONCE(tree->cache_es); -+ if (es1 && in_range(lblk, es1->es_lblk, es1->es_len)) { -+ es_debug("%u cached by [%u/%u) %llu %x\n", -+ lblk, es1->es_lblk, es1->es_len, -+ ext4_es_pblock(es1), ext4_es_status(es1)); -+ goto out; - } - - es1 = __es_tree_search(&tree->root, lblk); -@@ -295,7 +293,7 @@ out: - } - - if (es1 && matching_fn(es1)) { -- tree->cache_es = es1; -+ WRITE_ONCE(tree->cache_es, es1); - es->es_lblk = es1->es_lblk; - es->es_len = es1->es_len; - es->es_pblk = es1->es_pblk; -@@ -916,14 +914,12 @@ int ext4_es_lookup_extent(struct inode *inode, ext4_lblk_t lblk, - - /* find extent in cache firstly */ - es->es_lblk = es->es_len = es->es_pblk = 0; -- if (tree->cache_es) { -- es1 = tree->cache_es; -- if (in_range(lblk, es1->es_lblk, es1->es_len)) { -- es_debug("%u cached by [%u/%u)\n", -- lblk, es1->es_lblk, es1->es_len); -- found = 1; -- goto out; -- } -+ es1 = READ_ONCE(tree->cache_es); -+ if (es1 && in_range(lblk, es1->es_lblk, es1->es_len)) { -+ es_debug("%u cached by [%u/%u)\n", -+ lblk, es1->es_lblk, es1->es_len); -+ found = 1; -+ goto out; - } - - node = tree->root.rb_node; -diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c -index 8b8f7f00b835d..549ceac9099ca 100644 ---- a/fs/ext4/inline.c -+++ b/fs/ext4/inline.c -@@ -32,6 +32,7 @@ static int get_max_inline_xattr_value_size(struct inode *inode, - struct ext4_xattr_ibody_header *header; - struct ext4_xattr_entry *entry; - struct ext4_inode *raw_inode; -+ void *end; - int free, min_offs; - - if (!EXT4_INODE_HAS_XATTR_SPACE(inode)) -@@ -55,14 +56,23 @@ static int get_max_inline_xattr_value_size(struct inode *inode, - raw_inode = ext4_raw_inode(iloc); - header = IHDR(inode, raw_inode); - entry = IFIRST(header); -+ end = (void *)raw_inode + EXT4_SB(inode->i_sb)->s_inode_size; - - /* Compute min_offs. */ -- for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) { -+ while (!IS_LAST_ENTRY(entry)) { -+ void *next = EXT4_XATTR_NEXT(entry); -+ -+ if (next >= end) { -+ EXT4_ERROR_INODE(inode, -+ "corrupt xattr in inline inode"); -+ return 0; -+ } - if (!entry->e_value_inum && entry->e_value_size) { - size_t offs = le16_to_cpu(entry->e_value_offs); - if (offs < min_offs) - min_offs = offs; - } -+ entry = next; - } - free = min_offs - - ((void *)entry - (void *)IFIRST(header)) - sizeof(__u32); -@@ -348,7 +358,7 @@ static int ext4_update_inline_data(handle_t *handle, struct inode *inode, - - error = ext4_xattr_ibody_get(inode, i.name_index, i.name, - value, len); -- if (error == -ENODATA) -+ if (error < 0) - goto out; - - BUFFER_TRACE(is.iloc.bh, "get_write_access"); -@@ -1172,6 +1182,7 @@ static int ext4_finish_convert_inline_dir(handle_t *handle, - ext4_initialize_dirent_tail(dir_block, - inode->i_sb->s_blocksize); - set_buffer_uptodate(dir_block); -+ unlock_buffer(dir_block); - err = ext4_handle_dirty_dirblock(handle, inode, dir_block); - if (err) - return err; -@@ -1245,6 +1256,7 @@ static int ext4_convert_inline_data_nolock(handle_t *handle, - if (!S_ISDIR(inode->i_mode)) { - memcpy(data_bh->b_data, buf, inline_size); - set_buffer_uptodate(data_bh); -+ unlock_buffer(data_bh); - error = ext4_handle_dirty_metadata(handle, - inode, data_bh); - } else { -@@ -1252,7 +1264,6 @@ static int ext4_convert_inline_data_nolock(handle_t *handle, - buf, inline_size); - } - -- unlock_buffer(data_bh); - out_restore: - if (error) - ext4_restore_inline_data(handle, inode, iloc, buf, inline_size); -diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c -index 3c3166ba43649..caab9781bee7d 100644 ---- a/fs/ext4/mballoc.c -+++ b/fs/ext4/mballoc.c -@@ -3895,7 +3895,11 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, - trace_ext4_mb_release_group_pa(sb, pa); - BUG_ON(pa->pa_deleted == 0); - ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit); -- BUG_ON(group != e4b->bd_group && pa->pa_len != 0); -+ if (unlikely(group != e4b->bd_group && pa->pa_len != 0)) { -+ ext4_warning(sb, "bad group: expected %u, group %u, pa_start %llu", -+ e4b->bd_group, group, pa->pa_pstart); -+ return 0; -+ } - mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len); - atomic_add(pa->pa_len, &EXT4_SB(sb)->s_mb_discarded); - trace_ext4_mballoc_discard(sb, NULL, group, bit, pa->pa_len); -diff --git a/fs/ext4/super.c b/fs/ext4/super.c -index 789a9f6a2ec6e..9bbd525086562 100644 ---- a/fs/ext4/super.c -+++ b/fs/ext4/super.c -@@ -2475,11 +2475,9 @@ static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group, - crc = crc16(crc, (__u8 *)gdp, offset); - offset += sizeof(gdp->bg_checksum); /* skip checksum */ - /* for checksum of struct ext4_group_desc do the rest...*/ -- if (ext4_has_feature_64bit(sb) && -- offset < le16_to_cpu(sbi->s_es->s_desc_size)) -+ if (ext4_has_feature_64bit(sb) && offset < sbi->s_desc_size) - crc = crc16(crc, (__u8 *)gdp + offset, -- le16_to_cpu(sbi->s_es->s_desc_size) - -- offset); -+ sbi->s_desc_size - offset); - - out: - return cpu_to_le16(crc); -@@ -5607,9 +5605,6 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) - } - - #ifdef CONFIG_QUOTA -- /* Release old quota file names */ -- for (i = 0; i < EXT4_MAXQUOTAS; i++) -- kfree(old_opts.s_qf_names[i]); - if (enable_quota) { - if (sb_any_quota_suspended(sb)) - dquot_resume(sb, -1); -@@ -5619,6 +5614,9 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) - goto restore_opts; - } - } -+ /* Release old quota file names */ -+ for (i = 0; i < EXT4_MAXQUOTAS; i++) -+ kfree(old_opts.s_qf_names[i]); - #endif - if (!test_opt(sb, BLOCK_VALIDITY) && sbi->system_blks) - ext4_release_system_zone(sb); -@@ -5635,6 +5633,13 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) - return 0; - - restore_opts: -+ /* -+ * If there was a failing r/w to ro transition, we may need to -+ * re-enable quota -+ */ -+ if ((sb->s_flags & SB_RDONLY) && !(old_sb_flags & SB_RDONLY) && -+ sb_any_quota_suspended(sb)) -+ dquot_resume(sb, -1); - sb->s_flags = old_sb_flags; - sbi->s_mount_opt = old_opts.s_mount_opt; - sbi->s_mount_opt2 = old_opts.s_mount_opt2; -diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c -index 008d9b8979878..498ef733b73c0 100644 ---- a/fs/ext4/xattr.c -+++ b/fs/ext4/xattr.c -@@ -2569,6 +2569,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode, - .in_inode = !!entry->e_value_inum, - }; - struct ext4_xattr_ibody_header *header = IHDR(inode, raw_inode); -+ int needs_kvfree = 0; - int error; - - is = kzalloc(sizeof(struct ext4_xattr_ibody_find), GFP_NOFS); -@@ -2591,7 +2592,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode, - error = -ENOMEM; - goto out; - } -- -+ needs_kvfree = 1; - error = ext4_xattr_inode_get(inode, entry, buffer, value_size); - if (error) - goto out; -@@ -2630,7 +2631,7 @@ static int ext4_xattr_move_to_block(handle_t *handle, struct inode *inode, - - out: - kfree(b_entry_name); -- if (entry->e_value_inum && buffer) -+ if (needs_kvfree && buffer) - kvfree(buffer); - if (is) - brelse(is->iloc.bh); -diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c -index ef08ef0170306..8d4e66f36cf7e 100644 ---- a/fs/f2fs/file.c -+++ b/fs/f2fs/file.c -@@ -2821,15 +2821,16 @@ int f2fs_transfer_project_quota(struct inode *inode, kprojid_t kprojid) - struct dquot *transfer_to[MAXQUOTAS] = {}; - struct f2fs_sb_info *sbi = F2FS_I_SB(inode); - struct super_block *sb = sbi->sb; -- int err = 0; -+ int err; - - transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid)); -- if (!IS_ERR(transfer_to[PRJQUOTA])) { -- err = __dquot_transfer(inode, transfer_to); -- if (err) -- set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR); -- dqput(transfer_to[PRJQUOTA]); -- } -+ if (IS_ERR(transfer_to[PRJQUOTA])) -+ return PTR_ERR(transfer_to[PRJQUOTA]); -+ -+ err = __dquot_transfer(inode, transfer_to); -+ if (err) -+ set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR); -+ dqput(transfer_to[PRJQUOTA]); - return err; - } - -diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c -index ed95c27e93026..9cb2a87247b21 100644 ---- a/fs/f2fs/namei.c -+++ b/fs/f2fs/namei.c -@@ -892,12 +892,20 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, - goto out; - } - -+ /* -+ * Copied from ext4_rename: we need to protect against old.inode -+ * directory getting converted from inline directory format into -+ * a normal one. -+ */ -+ if (S_ISDIR(old_inode->i_mode)) -+ inode_lock_nested(old_inode, I_MUTEX_NONDIR2); -+ - err = -ENOENT; - old_entry = f2fs_find_entry(old_dir, &old_dentry->d_name, &old_page); - if (!old_entry) { - if (IS_ERR(old_page)) - err = PTR_ERR(old_page); -- goto out; -+ goto out_unlock_old; - } - - if (S_ISDIR(old_inode->i_mode)) { -@@ -1025,6 +1033,9 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, - - f2fs_unlock_op(sbi); - -+ if (S_ISDIR(old_inode->i_mode)) -+ inode_unlock(old_inode); -+ - if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir)) - f2fs_sync_fs(sbi->sb, 1); - -@@ -1040,6 +1051,9 @@ out_dir: - f2fs_put_page(old_dir_page, 0); - out_old: - f2fs_put_page(old_page, 0); -+out_unlock_old: -+ if (S_ISDIR(old_inode->i_mode)) -+ inode_unlock(old_inode); - out: - if (whiteout) - iput(whiteout); -diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c -index 5b3a288e0f14b..3ec2c16abece3 100644 ---- a/fs/fs-writeback.c -+++ b/fs/fs-writeback.c -@@ -700,7 +700,7 @@ void wbc_detach_inode(struct writeback_control *wbc) - * is okay. The main goal is avoiding keeping an inode on - * the wrong wb for an extended period of time. - */ -- if (hweight32(history) > WB_FRN_HIST_THR_SLOTS) -+ if (hweight16(history) > WB_FRN_HIST_THR_SLOTS) - inode_switch_wbs(inode, max_id); - } - -diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c -index 2ee30ffeb6b97..01b1856705941 100644 ---- a/fs/nfs/nfs4state.c -+++ b/fs/nfs/nfs4state.c -@@ -66,6 +66,8 @@ - - #define OPENOWNER_POOL_SIZE 8 - -+static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp); -+ - const nfs4_stateid zero_stateid = { - { .data = { 0 } }, - .type = NFS4_SPECIAL_STATEID_TYPE, -@@ -329,6 +331,8 @@ do_confirm: - status = nfs4_proc_create_session(clp, cred); - if (status != 0) - goto out; -+ if (!(clp->cl_exchange_flags & EXCHGID4_FLAG_CONFIRMED_R)) -+ nfs4_state_start_reclaim_reboot(clp); - nfs41_finish_session_reset(clp); - nfs_mark_client_ready(clp, NFS_CS_READY); - out: -diff --git a/fs/nilfs2/bmap.c b/fs/nilfs2/bmap.c -index fb5a9a8a13cf7..2ba57e4b4f0a6 100644 ---- a/fs/nilfs2/bmap.c -+++ b/fs/nilfs2/bmap.c -@@ -67,20 +67,28 @@ int nilfs_bmap_lookup_at_level(struct nilfs_bmap *bmap, __u64 key, int level, - - down_read(&bmap->b_sem); - ret = bmap->b_ops->bop_lookup(bmap, key, level, ptrp); -- if (ret < 0) { -- ret = nilfs_bmap_convert_error(bmap, __func__, ret); -+ if (ret < 0) - goto out; -- } -+ - if (NILFS_BMAP_USE_VBN(bmap)) { - ret = nilfs_dat_translate(nilfs_bmap_get_dat(bmap), *ptrp, - &blocknr); - if (!ret) - *ptrp = blocknr; -+ else if (ret == -ENOENT) { -+ /* -+ * If there was no valid entry in DAT for the block -+ * address obtained by b_ops->bop_lookup, then pass -+ * internal code -EINVAL to nilfs_bmap_convert_error -+ * to treat it as metadata corruption. -+ */ -+ ret = -EINVAL; -+ } - } - - out: - up_read(&bmap->b_sem); -- return ret; -+ return nilfs_bmap_convert_error(bmap, __func__, ret); - } - - int nilfs_bmap_lookup_contig(struct nilfs_bmap *bmap, __u64 key, __u64 *ptrp, -diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c -index b23ed9a35e5e4..3091d1a3eddea 100644 ---- a/fs/nilfs2/segment.c -+++ b/fs/nilfs2/segment.c -@@ -2039,6 +2039,9 @@ static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode) - struct the_nilfs *nilfs = sci->sc_super->s_fs_info; - int err; - -+ if (sb_rdonly(sci->sc_super)) -+ return -EROFS; -+ - nilfs_sc_cstage_set(sci, NILFS_ST_INIT); - sci->sc_cno = nilfs->ns_cno; - -@@ -2724,7 +2727,7 @@ static void nilfs_segctor_write_out(struct nilfs_sc_info *sci) - - flush_work(&sci->sc_iput_work); - -- } while (ret && retrycount-- > 0); -+ } while (ret && ret != -EROFS && retrycount-- > 0); - } - - /** -diff --git a/fs/notify/inotify/inotify_fsnotify.c b/fs/notify/inotify/inotify_fsnotify.c -index 589dee9629938..a3cbfd38f1f63 100644 ---- a/fs/notify/inotify/inotify_fsnotify.c -+++ b/fs/notify/inotify/inotify_fsnotify.c -@@ -66,7 +66,7 @@ int inotify_handle_event(struct fsnotify_group *group, - struct inotify_event_info *event; - struct fsnotify_event *fsn_event; - int ret; -- int len = 0; -+ int len = 0, wd; - int alloc_len = sizeof(struct inotify_event_info); - - if (WARN_ON(fsnotify_iter_vfsmount_mark(iter_info))) -@@ -90,6 +90,13 @@ int inotify_handle_event(struct fsnotify_group *group, - i_mark = container_of(inode_mark, struct inotify_inode_mark, - fsn_mark); - -+ /* -+ * We can be racing with mark being detached. Don't report event with -+ * invalid wd. -+ */ -+ wd = READ_ONCE(i_mark->wd); -+ if (wd == -1) -+ return 0; - /* - * Whoever is interested in the event, pays for the allocation. Do not - * trigger OOM killer in the target monitoring memcg as it may have -@@ -120,7 +127,7 @@ int inotify_handle_event(struct fsnotify_group *group, - fsn_event = &event->fse; - fsnotify_init_event(fsn_event, (unsigned long)inode); - event->mask = mask; -- event->wd = i_mark->wd; -+ event->wd = wd; - event->sync_cookie = cookie; - event->name_len = len; - if (len) -diff --git a/fs/pstore/pmsg.c b/fs/pstore/pmsg.c -index 18cf94b597e05..d8542ec2f38c6 100644 ---- a/fs/pstore/pmsg.c -+++ b/fs/pstore/pmsg.c -@@ -7,10 +7,9 @@ - #include - #include - #include --#include - #include "internal.h" - --static DEFINE_RT_MUTEX(pmsg_lock); -+static DEFINE_MUTEX(pmsg_lock); - - static ssize_t write_pmsg(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) -@@ -29,9 +28,9 @@ static ssize_t write_pmsg(struct file *file, const char __user *buf, - if (!access_ok(buf, count)) - return -EFAULT; - -- rt_mutex_lock(&pmsg_lock); -+ mutex_lock(&pmsg_lock); - ret = psinfo->write_user(&record, buf); -- rt_mutex_unlock(&pmsg_lock); -+ mutex_unlock(&pmsg_lock); - return ret ? ret : count; - } - -diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c -index 59d87f9f72fb4..159af6c26f4bd 100644 ---- a/fs/reiserfs/xattr_security.c -+++ b/fs/reiserfs/xattr_security.c -@@ -81,11 +81,15 @@ int reiserfs_security_write(struct reiserfs_transaction_handle *th, - struct inode *inode, - struct reiserfs_security_handle *sec) - { -+ char xattr_name[XATTR_NAME_MAX + 1] = XATTR_SECURITY_PREFIX; - int error; -- if (strlen(sec->name) < sizeof(XATTR_SECURITY_PREFIX)) -+ -+ if (XATTR_SECURITY_PREFIX_LEN + strlen(sec->name) > XATTR_NAME_MAX) - return -EINVAL; - -- error = reiserfs_xattr_set_handle(th, inode, sec->name, sec->value, -+ strlcat(xattr_name, sec->name, sizeof(xattr_name)); -+ -+ error = reiserfs_xattr_set_handle(th, inode, xattr_name, sec->value, - sec->length, XATTR_CREATE); - if (error == -ENODATA || error == -EOPNOTSUPP) - error = 0; -diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c -index 332c0b02a0ade..a5294e7379099 100644 ---- a/fs/ubifs/dir.c -+++ b/fs/ubifs/dir.c -@@ -433,6 +433,7 @@ static int do_tmpfile(struct inode *dir, struct dentry *dentry, - mutex_unlock(&dir_ui->ui_mutex); - - ubifs_release_budget(c, &req); -+ fscrypt_free_filename(&nm); - - return 0; - -diff --git a/fs/ubifs/tnc.c b/fs/ubifs/tnc.c -index 6461f61449b1a..91543e3b5b3fe 100644 ---- a/fs/ubifs/tnc.c -+++ b/fs/ubifs/tnc.c -@@ -44,6 +44,33 @@ enum { - NOT_ON_MEDIA = 3, - }; - -+static void do_insert_old_idx(struct ubifs_info *c, -+ struct ubifs_old_idx *old_idx) -+{ -+ struct ubifs_old_idx *o; -+ struct rb_node **p, *parent = NULL; -+ -+ p = &c->old_idx.rb_node; -+ while (*p) { -+ parent = *p; -+ o = rb_entry(parent, struct ubifs_old_idx, rb); -+ if (old_idx->lnum < o->lnum) -+ p = &(*p)->rb_left; -+ else if (old_idx->lnum > o->lnum) -+ p = &(*p)->rb_right; -+ else if (old_idx->offs < o->offs) -+ p = &(*p)->rb_left; -+ else if (old_idx->offs > o->offs) -+ p = &(*p)->rb_right; -+ else { -+ ubifs_err(c, "old idx added twice!"); -+ kfree(old_idx); -+ } -+ } -+ rb_link_node(&old_idx->rb, parent, p); -+ rb_insert_color(&old_idx->rb, &c->old_idx); -+} -+ - /** - * insert_old_idx - record an index node obsoleted since the last commit start. - * @c: UBIFS file-system description object -@@ -69,35 +96,15 @@ enum { - */ - static int insert_old_idx(struct ubifs_info *c, int lnum, int offs) - { -- struct ubifs_old_idx *old_idx, *o; -- struct rb_node **p, *parent = NULL; -+ struct ubifs_old_idx *old_idx; - - old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS); - if (unlikely(!old_idx)) - return -ENOMEM; - old_idx->lnum = lnum; - old_idx->offs = offs; -+ do_insert_old_idx(c, old_idx); - -- p = &c->old_idx.rb_node; -- while (*p) { -- parent = *p; -- o = rb_entry(parent, struct ubifs_old_idx, rb); -- if (lnum < o->lnum) -- p = &(*p)->rb_left; -- else if (lnum > o->lnum) -- p = &(*p)->rb_right; -- else if (offs < o->offs) -- p = &(*p)->rb_left; -- else if (offs > o->offs) -- p = &(*p)->rb_right; -- else { -- ubifs_err(c, "old idx added twice!"); -- kfree(old_idx); -- return 0; -- } -- } -- rb_link_node(&old_idx->rb, parent, p); -- rb_insert_color(&old_idx->rb, &c->old_idx); - return 0; - } - -@@ -199,23 +206,6 @@ static struct ubifs_znode *copy_znode(struct ubifs_info *c, - __set_bit(DIRTY_ZNODE, &zn->flags); - __clear_bit(COW_ZNODE, &zn->flags); - -- ubifs_assert(c, !ubifs_zn_obsolete(znode)); -- __set_bit(OBSOLETE_ZNODE, &znode->flags); -- -- if (znode->level != 0) { -- int i; -- const int n = zn->child_cnt; -- -- /* The children now have new parent */ -- for (i = 0; i < n; i++) { -- struct ubifs_zbranch *zbr = &zn->zbranch[i]; -- -- if (zbr->znode) -- zbr->znode->parent = zn; -- } -- } -- -- atomic_long_inc(&c->dirty_zn_cnt); - return zn; - } - -@@ -233,6 +223,42 @@ static int add_idx_dirt(struct ubifs_info *c, int lnum, int dirt) - return ubifs_add_dirt(c, lnum, dirt); - } - -+/** -+ * replace_znode - replace old znode with new znode. -+ * @c: UBIFS file-system description object -+ * @new_zn: new znode -+ * @old_zn: old znode -+ * @zbr: the branch of parent znode -+ * -+ * Replace old znode with new znode in TNC. -+ */ -+static void replace_znode(struct ubifs_info *c, struct ubifs_znode *new_zn, -+ struct ubifs_znode *old_zn, struct ubifs_zbranch *zbr) -+{ -+ ubifs_assert(c, !ubifs_zn_obsolete(old_zn)); -+ __set_bit(OBSOLETE_ZNODE, &old_zn->flags); -+ -+ if (old_zn->level != 0) { -+ int i; -+ const int n = new_zn->child_cnt; -+ -+ /* The children now have new parent */ -+ for (i = 0; i < n; i++) { -+ struct ubifs_zbranch *child = &new_zn->zbranch[i]; -+ -+ if (child->znode) -+ child->znode->parent = new_zn; -+ } -+ } -+ -+ zbr->znode = new_zn; -+ zbr->lnum = 0; -+ zbr->offs = 0; -+ zbr->len = 0; -+ -+ atomic_long_inc(&c->dirty_zn_cnt); -+} -+ - /** - * dirty_cow_znode - ensure a znode is not being committed. - * @c: UBIFS file-system description object -@@ -265,28 +291,32 @@ static struct ubifs_znode *dirty_cow_znode(struct ubifs_info *c, - return zn; - - if (zbr->len) { -- err = insert_old_idx(c, zbr->lnum, zbr->offs); -- if (unlikely(err)) -- /* -- * Obsolete znodes will be freed by tnc_destroy_cnext() -- * or free_obsolete_znodes(), copied up znodes should -- * be added back to tnc and freed by -- * ubifs_destroy_tnc_subtree(). -- */ -+ struct ubifs_old_idx *old_idx; -+ -+ old_idx = kmalloc(sizeof(struct ubifs_old_idx), GFP_NOFS); -+ if (unlikely(!old_idx)) { -+ err = -ENOMEM; - goto out; -+ } -+ old_idx->lnum = zbr->lnum; -+ old_idx->offs = zbr->offs; -+ - err = add_idx_dirt(c, zbr->lnum, zbr->len); -- } else -- err = 0; -+ if (err) { -+ kfree(old_idx); -+ goto out; -+ } - --out: -- zbr->znode = zn; -- zbr->lnum = 0; -- zbr->offs = 0; -- zbr->len = 0; -+ do_insert_old_idx(c, old_idx); -+ } -+ -+ replace_znode(c, zn, znode, zbr); - -- if (unlikely(err)) -- return ERR_PTR(err); - return zn; -+ -+out: -+ kfree(zn); -+ return ERR_PTR(err); - } - - /** -diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h -index d02806513670c..3dd3416f1df03 100644 ---- a/include/asm-generic/io.h -+++ b/include/asm-generic/io.h -@@ -190,7 +190,7 @@ static inline u64 readq(const volatile void __iomem *addr) - u64 val; - - __io_br(); -- val = __le64_to_cpu(__raw_readq(addr)); -+ val = __le64_to_cpu((__le64 __force)__raw_readq(addr)); - __io_ar(val); - return val; - } -@@ -233,7 +233,7 @@ static inline void writel(u32 value, volatile void __iomem *addr) - static inline void writeq(u64 value, volatile void __iomem *addr) - { - __io_bw(); -- __raw_writeq(__cpu_to_le64(value), addr); -+ __raw_writeq((u64 __force)__cpu_to_le64(value), addr); - __io_aw(); - } - #endif -diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h -index d0238d3b2f31e..8565c8842cdec 100644 ---- a/include/linux/debugfs.h -+++ b/include/linux/debugfs.h -@@ -35,6 +35,7 @@ struct debugfs_regset32 { - const struct debugfs_reg32 *regs; - int nregs; - void __iomem *base; -+ struct device *dev; /* Optional device for Runtime PM */ - }; - - extern struct dentry *arch_debugfs_dir; -diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h -index 30e92536c78cc..01517747214a4 100644 ---- a/include/linux/interrupt.h -+++ b/include/linux/interrupt.h -@@ -61,6 +61,9 @@ - * interrupt handler after suspending interrupts. For system - * wakeup devices users need to implement wakeup detection in - * their interrupt handlers. -+ * IRQF_NO_AUTOEN - Don't enable IRQ or NMI automatically when users request it. -+ * Users will enable it explicitly by enable_irq() or enable_nmi() -+ * later. - */ - #define IRQF_SHARED 0x00000080 - #define IRQF_PROBE_SHARED 0x00000100 -@@ -74,6 +77,7 @@ - #define IRQF_NO_THREAD 0x00010000 - #define IRQF_EARLY_RESUME 0x00020000 - #define IRQF_COND_SUSPEND 0x00040000 -+#define IRQF_NO_AUTOEN 0x00080000 - - #define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND | IRQF_NO_THREAD) - -diff --git a/include/linux/mailbox/zynqmp-ipi-message.h b/include/linux/mailbox/zynqmp-ipi-message.h -index 9542b41eacfdc..41c6bd7119407 100644 ---- a/include/linux/mailbox/zynqmp-ipi-message.h -+++ b/include/linux/mailbox/zynqmp-ipi-message.h -@@ -9,7 +9,7 @@ - * @data: message payload - * - * This is the structure for data used in mbox_send_message -- * the maximum length of data buffer is fixed to 12 bytes. -+ * the maximum length of data buffer is fixed to 32 bytes. - * Client is supposed to be aware of this. - */ - struct zynqmp_ipi_message { -diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h -index f6267e2883f26..41de4156540a9 100644 ---- a/include/linux/netfilter/nfnetlink.h -+++ b/include/linux/netfilter/nfnetlink.h -@@ -39,7 +39,6 @@ struct nfnetlink_subsystem { - int (*commit)(struct net *net, struct sk_buff *skb); - int (*abort)(struct net *net, struct sk_buff *skb, - enum nfnl_abort_action action); -- void (*cleanup)(struct net *net); - bool (*valid_genid)(struct net *net, u32 genid); - }; - -diff --git a/include/linux/nvme.h b/include/linux/nvme.h -index ff0ee07b1e8f4..dd2801c28b99c 100644 ---- a/include/linux/nvme.h -+++ b/include/linux/nvme.h -@@ -522,6 +522,10 @@ enum { - NVME_AER_VS = 7, - }; - -+enum { -+ NVME_AER_ERROR_PERSIST_INT_ERR = 0x03, -+}; -+ - enum { - NVME_AER_NOTICE_NS_CHANGED = 0x00, - NVME_AER_NOTICE_FW_ACT_STARTING = 0x01, -diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h -index baf02ff91a31a..4476994d40c94 100644 ---- a/include/linux/pm_domain.h -+++ b/include/linux/pm_domain.h -@@ -95,8 +95,8 @@ struct generic_pm_domain { - struct device dev; - struct dev_pm_domain domain; /* PM domain operations */ - struct list_head gpd_list_node; /* Node in the global PM domains list */ -- struct list_head master_links; /* Links with PM domain as a master */ -- struct list_head slave_links; /* Links with PM domain as a slave */ -+ struct list_head parent_links; /* Links with PM domain as a parent */ -+ struct list_head child_links; /* Links with PM domain as a child */ - struct list_head dev_list; /* List of devices */ - struct dev_power_governor *gov; - struct work_struct power_off_work; -@@ -151,10 +151,10 @@ static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd) - } - - struct gpd_link { -- struct generic_pm_domain *master; -- struct list_head master_node; -- struct generic_pm_domain *slave; -- struct list_head slave_node; -+ struct generic_pm_domain *parent; -+ struct list_head parent_node; -+ struct generic_pm_domain *child; -+ struct list_head child_node; - - /* Sub-domain's per-master domain performance state */ - unsigned int performance_state; -diff --git a/include/linux/printk.h b/include/linux/printk.h -index 3b5cb66d8bc15..eb2a093ba042e 100644 ---- a/include/linux/printk.h -+++ b/include/linux/printk.h -@@ -529,4 +529,23 @@ static inline void print_hex_dump_debug(const char *prefix_str, int prefix_type, - #define print_hex_dump_bytes(prefix_str, prefix_type, buf, len) \ - print_hex_dump_debug(prefix_str, prefix_type, 16, 1, buf, len, true) - -+#ifdef CONFIG_PRINTK -+extern void __printk_safe_enter(void); -+extern void __printk_safe_exit(void); -+/* -+ * The printk_deferred_enter/exit macros are available only as a hack for -+ * some code paths that need to defer all printk console printing. Interrupts -+ * must be disabled for the deferred duration. -+ */ -+#define printk_deferred_enter __printk_safe_enter -+#define printk_deferred_exit __printk_safe_exit -+#else -+static inline void printk_deferred_enter(void) -+{ -+} -+static inline void printk_deferred_exit(void) -+{ -+} -+#endif -+ - #endif -diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h -index a6ef35184ef13..5c37fabdec103 100644 ---- a/include/linux/sunrpc/sched.h -+++ b/include/linux/sunrpc/sched.h -@@ -90,8 +90,7 @@ struct rpc_task { - #endif - unsigned char tk_priority : 2,/* Task priority */ - tk_garb_retry : 2, -- tk_cred_retry : 2, -- tk_rebind_retry : 2; -+ tk_cred_retry : 2; - }; - - typedef void (*rpc_action)(struct rpc_task *); -diff --git a/include/linux/tick.h b/include/linux/tick.h -index f92a10b5e1128..cf6c92060929e 100644 ---- a/include/linux/tick.h -+++ b/include/linux/tick.h -@@ -108,7 +108,8 @@ enum tick_dep_bits { - TICK_DEP_BIT_POSIX_TIMER = 0, - TICK_DEP_BIT_PERF_EVENTS = 1, - TICK_DEP_BIT_SCHED = 2, -- TICK_DEP_BIT_CLOCK_UNSTABLE = 3 -+ TICK_DEP_BIT_CLOCK_UNSTABLE = 3, -+ TICK_DEP_BIT_RCU = 4 - }; - - #define TICK_DEP_MASK_NONE 0 -@@ -116,6 +117,7 @@ enum tick_dep_bits { - #define TICK_DEP_MASK_PERF_EVENTS (1 << TICK_DEP_BIT_PERF_EVENTS) - #define TICK_DEP_MASK_SCHED (1 << TICK_DEP_BIT_SCHED) - #define TICK_DEP_MASK_CLOCK_UNSTABLE (1 << TICK_DEP_BIT_CLOCK_UNSTABLE) -+#define TICK_DEP_MASK_RCU (1 << TICK_DEP_BIT_RCU) - - #ifdef CONFIG_NO_HZ_COMMON - extern bool tick_nohz_enabled; -@@ -206,6 +208,7 @@ extern void tick_nohz_dep_set_signal(struct signal_struct *signal, - enum tick_dep_bits bit); - extern void tick_nohz_dep_clear_signal(struct signal_struct *signal, - enum tick_dep_bits bit); -+extern bool tick_nohz_cpu_hotpluggable(unsigned int cpu); - - /* - * The below are tick_nohz_[set,clear]_dep() wrappers that optimize off-cases -@@ -268,6 +271,10 @@ static inline bool tick_nohz_full_enabled(void) { return false; } - static inline bool tick_nohz_full_cpu(int cpu) { return false; } - static inline void tick_nohz_full_add_cpus_to(struct cpumask *mask) { } - -+static inline void tick_nohz_dep_set_cpu(int cpu, enum tick_dep_bits bit) { } -+static inline void tick_nohz_dep_clear_cpu(int cpu, enum tick_dep_bits bit) { } -+static inline bool tick_nohz_cpu_hotpluggable(unsigned int cpu) { return true; } -+ - static inline void tick_dep_set(enum tick_dep_bits bit) { } - static inline void tick_dep_clear(enum tick_dep_bits bit) { } - static inline void tick_dep_set_cpu(int cpu, enum tick_dep_bits bit) { } -diff --git a/include/linux/tty.h b/include/linux/tty.h -index eb33d948788cc..8be25caa97f67 100644 ---- a/include/linux/tty.h -+++ b/include/linux/tty.h -@@ -480,6 +480,8 @@ extern void __stop_tty(struct tty_struct *tty); - extern void stop_tty(struct tty_struct *tty); - extern void __start_tty(struct tty_struct *tty); - extern void start_tty(struct tty_struct *tty); -+void tty_write_unlock(struct tty_struct *tty); -+int tty_write_lock(struct tty_struct *tty, int ndelay); - extern int tty_register_driver(struct tty_driver *driver); - extern int tty_unregister_driver(struct tty_driver *driver); - extern struct device *tty_register_device(struct tty_driver *driver, -diff --git a/include/linux/vt_buffer.h b/include/linux/vt_buffer.h -index 848db1b1569ff..919d999a8c1db 100644 ---- a/include/linux/vt_buffer.h -+++ b/include/linux/vt_buffer.h -@@ -16,7 +16,7 @@ - - #include - --#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_MDA_CONSOLE) -+#if IS_ENABLED(CONFIG_VGA_CONSOLE) || IS_ENABLED(CONFIG_MDA_CONSOLE) - #include - #endif - -diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h -index 886866bee8b27..ad2a52a6c478b 100644 ---- a/include/net/netfilter/nf_tables.h -+++ b/include/net/netfilter/nf_tables.h -@@ -493,6 +493,7 @@ struct nft_set_binding { - }; - - enum nft_trans_phase; -+void nf_tables_activate_set(const struct nft_ctx *ctx, struct nft_set *set); - void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set, - struct nft_set_binding *binding, - enum nft_trans_phase phase); -diff --git a/include/net/scm.h b/include/net/scm.h -index 1ce365f4c2560..585adc1346bd0 100644 ---- a/include/net/scm.h -+++ b/include/net/scm.h -@@ -105,16 +105,27 @@ static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct sc - } - } - } -+ -+static inline bool scm_has_secdata(struct socket *sock) -+{ -+ return test_bit(SOCK_PASSSEC, &sock->flags); -+} - #else - static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm) - { } -+ -+static inline bool scm_has_secdata(struct socket *sock) -+{ -+ return false; -+} - #endif /* CONFIG_SECURITY_NETWORK */ - - static __inline__ void scm_recv(struct socket *sock, struct msghdr *msg, - struct scm_cookie *scm, int flags) - { - if (!msg->msg_control) { -- if (test_bit(SOCK_PASSCRED, &sock->flags) || scm->fp) -+ if (test_bit(SOCK_PASSCRED, &sock->flags) || scm->fp || -+ scm_has_secdata(sock)) - msg->msg_flags |= MSG_CTRUNC; - scm_destroy(scm); - return; -diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h -index 7800e12ee042c..cf6e58fa5266b 100644 ---- a/include/soc/bcm2835/raspberrypi-firmware.h -+++ b/include/soc/bcm2835/raspberrypi-firmware.h -@@ -140,7 +140,10 @@ int rpi_firmware_property(struct rpi_firmware *fw, - u32 tag, void *data, size_t len); - int rpi_firmware_property_list(struct rpi_firmware *fw, - void *data, size_t tag_size); -+void rpi_firmware_put(struct rpi_firmware *fw); - struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node); -+struct rpi_firmware *devm_rpi_firmware_get(struct device *dev, -+ struct device_node *firmware_node); - #else - static inline int rpi_firmware_property(struct rpi_firmware *fw, u32 tag, - void *data, size_t len) -@@ -154,10 +157,17 @@ static inline int rpi_firmware_property_list(struct rpi_firmware *fw, - return -ENOSYS; - } - -+static inline void rpi_firmware_put(struct rpi_firmware *fw) { } - static inline struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node) - { - return NULL; - } -+ -+static inline struct rpi_firmware *devm_rpi_firmware_get(struct device *dev, -+ struct device_node *firmware_node) -+{ -+ return NULL; -+} - #endif - - #endif /* __SOC_RASPBERRY_FIRMWARE_H__ */ -diff --git a/include/trace/events/timer.h b/include/trace/events/timer.h -index b7a904825e7df..295517f109d71 100644 ---- a/include/trace/events/timer.h -+++ b/include/trace/events/timer.h -@@ -367,7 +367,8 @@ TRACE_EVENT(itimer_expire, - tick_dep_name(POSIX_TIMER) \ - tick_dep_name(PERF_EVENTS) \ - tick_dep_name(SCHED) \ -- tick_dep_name_end(CLOCK_UNSTABLE) -+ tick_dep_name(CLOCK_UNSTABLE) \ -+ tick_dep_name_end(RCU) - - #undef tick_dep_name - #undef tick_dep_mask_name -diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h -index 3ee0678c0a835..72cd9f61f0548 100644 ---- a/include/uapi/linux/btrfs.h -+++ b/include/uapi/linux/btrfs.h -@@ -162,6 +162,7 @@ struct btrfs_scrub_progress { - }; - - #define BTRFS_SCRUB_READONLY 1 -+#define BTRFS_SCRUB_SUPPORTED_FLAGS (BTRFS_SCRUB_READONLY) - struct btrfs_ioctl_scrub_args { - __u64 devid; /* in */ - __u64 start; /* in */ -diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h -index af2a44c08683d..a429381e7ca50 100644 ---- a/include/uapi/linux/const.h -+++ b/include/uapi/linux/const.h -@@ -28,7 +28,7 @@ - #define _BITUL(x) (_UL(1) << (x)) - #define _BITULL(x) (_ULL(1) << (x)) - --#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) -+#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1) - #define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) - - #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) -diff --git a/include/uapi/linux/media-bus-format.h b/include/uapi/linux/media-bus-format.h -index 16c1fa2d89a42..052c8308b995c 100644 ---- a/include/uapi/linux/media-bus-format.h -+++ b/include/uapi/linux/media-bus-format.h -@@ -155,4 +155,12 @@ - /* HSV - next is 0x6002 */ - #define MEDIA_BUS_FMT_AHSV8888_1X32 0x6001 - -+/* -+ * This format should be used when the same driver handles -+ * both sides of the link and the bus format is a fixed -+ * metadata format that is not configurable from userspace. -+ * Width and height will be set to 0 for this format. -+ */ -+#define MEDIA_BUS_FMT_METADATA_FIXED 0x7001 -+ - #endif /* __LINUX_MEDIA_BUS_FORMAT_H */ -diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c -index c2f0aa818b7af..08c1246c758ea 100644 ---- a/kernel/bpf/cgroup.c -+++ b/kernel/bpf/cgroup.c -@@ -1131,7 +1131,7 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level, - goto out; - } - -- if (ctx.optlen > max_optlen || ctx.optlen < 0) { -+ if (optval && (ctx.optlen > max_optlen || ctx.optlen < 0)) { - ret = -EFAULT; - goto out; - } -@@ -1145,8 +1145,11 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level, - } - - if (ctx.optlen != 0) { -- if (copy_to_user(optval, ctx.optval, ctx.optlen) || -- put_user(ctx.optlen, optlen)) { -+ if (optval && copy_to_user(optval, ctx.optval, ctx.optlen)) { -+ ret = -EFAULT; -+ goto out; -+ } -+ if (put_user(ctx.optlen, optlen)) { - ret = -EFAULT; - goto out; - } -diff --git a/kernel/events/core.c b/kernel/events/core.c -index 1ef924d6a385e..41a8a5f749409 100644 ---- a/kernel/events/core.c -+++ b/kernel/events/core.c -@@ -8166,8 +8166,8 @@ __perf_event_account_interrupt(struct perf_event *event, int throttle) - hwc->interrupts = 1; - } else { - hwc->interrupts++; -- if (unlikely(throttle -- && hwc->interrupts >= max_samples_per_tick)) { -+ if (unlikely(throttle && -+ hwc->interrupts > max_samples_per_tick)) { - __this_cpu_inc(perf_throttled_count); - tick_dep_set_cpu(smp_processor_id(), TICK_DEP_BIT_PERF_EVENTS); - hwc->interrupts = MAX_INTERRUPTS; -diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c -index 79214f9836243..2a8a5e1779c9c 100644 ---- a/kernel/irq/manage.c -+++ b/kernel/irq/manage.c -@@ -1610,7 +1610,8 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) - irqd_set(&desc->irq_data, IRQD_NO_BALANCING); - } - -- if (irq_settings_can_autoenable(desc)) { -+ if (!(new->flags & IRQF_NO_AUTOEN) && -+ irq_settings_can_autoenable(desc)) { - irq_startup(desc, IRQ_RESEND, IRQ_START_COND); - } else { - /* -@@ -2041,10 +2042,15 @@ int request_threaded_irq(unsigned int irq, irq_handler_t handler, - * which interrupt is which (messes up the interrupt freeing - * logic etc). - * -+ * Also shared interrupts do not go well with disabling auto enable. -+ * The sharing interrupt might request it while it's still disabled -+ * and then wait for interrupts forever. -+ * - * Also IRQF_COND_SUSPEND only makes sense for shared interrupts and - * it cannot be set along with IRQF_NO_SUSPEND. - */ - if (((irqflags & IRQF_SHARED) && !dev_id) || -+ ((irqflags & IRQF_SHARED) && (irqflags & IRQF_NO_AUTOEN)) || - (!(irqflags & IRQF_SHARED) && (irqflags & IRQF_COND_SUSPEND)) || - ((irqflags & IRQF_NO_SUSPEND) && (irqflags & IRQF_COND_SUSPEND))) - return -EINVAL; -@@ -2200,7 +2206,8 @@ int request_nmi(unsigned int irq, irq_handler_t handler, - - desc = irq_to_desc(irq); - -- if (!desc || irq_settings_can_autoenable(desc) || -+ if (!desc || (irq_settings_can_autoenable(desc) && -+ !(irqflags & IRQF_NO_AUTOEN)) || - !irq_settings_can_request(desc) || - WARN_ON(irq_settings_is_per_cpu_devid(desc)) || - !irq_supports_nmi(desc)) -diff --git a/kernel/kheaders.c b/kernel/kheaders.c -index 8f69772af77b4..42163c9e94e55 100644 ---- a/kernel/kheaders.c -+++ b/kernel/kheaders.c -@@ -26,15 +26,15 @@ asm ( - " .popsection \n" - ); - --extern char kernel_headers_data; --extern char kernel_headers_data_end; -+extern char kernel_headers_data[]; -+extern char kernel_headers_data_end[]; - - static ssize_t - ikheaders_read(struct file *file, struct kobject *kobj, - struct bin_attribute *bin_attr, - char *buf, loff_t off, size_t len) - { -- memcpy(buf, &kernel_headers_data + off, len); -+ memcpy(buf, &kernel_headers_data[off], len); - return len; - } - -@@ -48,8 +48,8 @@ static struct bin_attribute kheaders_attr __ro_after_init = { - - static int __init ikheaders_init(void) - { -- kheaders_attr.size = (&kernel_headers_data_end - -- &kernel_headers_data); -+ kheaders_attr.size = (kernel_headers_data_end - -+ kernel_headers_data); - return sysfs_create_bin_file(kernel_kobj, &kheaders_attr); - } - -diff --git a/kernel/relay.c b/kernel/relay.c -index 9b1cfcd8dc6b1..1e11199c7d7cc 100644 ---- a/kernel/relay.c -+++ b/kernel/relay.c -@@ -997,14 +997,14 @@ static void relay_file_read_consume(struct rchan_buf *buf, - /* - * relay_file_read_avail - boolean, are there unconsumed bytes available? - */ --static int relay_file_read_avail(struct rchan_buf *buf, size_t read_pos) -+static int relay_file_read_avail(struct rchan_buf *buf) - { - size_t subbuf_size = buf->chan->subbuf_size; - size_t n_subbufs = buf->chan->n_subbufs; - size_t produced = buf->subbufs_produced; - size_t consumed = buf->subbufs_consumed; - -- relay_file_read_consume(buf, read_pos, 0); -+ relay_file_read_consume(buf, 0, 0); - - consumed = buf->subbufs_consumed; - -@@ -1065,23 +1065,21 @@ static size_t relay_file_read_subbuf_avail(size_t read_pos, - - /** - * relay_file_read_start_pos - find the first available byte to read -- * @read_pos: file read position - * @buf: relay channel buffer - * -- * If the @read_pos is in the middle of padding, return the -+ * If the read_pos is in the middle of padding, return the - * position of the first actually available byte, otherwise - * return the original value. - */ --static size_t relay_file_read_start_pos(size_t read_pos, -- struct rchan_buf *buf) -+static size_t relay_file_read_start_pos(struct rchan_buf *buf) - { - size_t read_subbuf, padding, padding_start, padding_end; - size_t subbuf_size = buf->chan->subbuf_size; - size_t n_subbufs = buf->chan->n_subbufs; - size_t consumed = buf->subbufs_consumed % n_subbufs; -+ size_t read_pos = (consumed * subbuf_size + buf->bytes_consumed) -+ % (n_subbufs * subbuf_size); - -- if (!read_pos) -- read_pos = consumed * subbuf_size + buf->bytes_consumed; - read_subbuf = read_pos / subbuf_size; - padding = buf->padding[read_subbuf]; - padding_start = (read_subbuf + 1) * subbuf_size - padding; -@@ -1137,10 +1135,10 @@ static ssize_t relay_file_read(struct file *filp, - do { - void *from; - -- if (!relay_file_read_avail(buf, *ppos)) -+ if (!relay_file_read_avail(buf)) - break; - -- read_start = relay_file_read_start_pos(*ppos, buf); -+ read_start = relay_file_read_start_pos(buf); - avail = relay_file_read_subbuf_avail(read_start, buf); - if (!avail) - break; -diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c -index d23b434c2ca7b..eddcf49704445 100644 ---- a/kernel/time/jiffies.c -+++ b/kernel/time/jiffies.c -@@ -58,7 +58,8 @@ static struct clocksource clocksource_jiffies = { - .max_cycles = 10, - }; - --__cacheline_aligned_in_smp DEFINE_SEQLOCK(jiffies_lock); -+__cacheline_aligned_in_smp DEFINE_RAW_SPINLOCK(jiffies_lock); -+__cacheline_aligned_in_smp seqcount_t jiffies_seq; - - #if (BITS_PER_LONG < 64) - u64 get_jiffies_64(void) -@@ -67,9 +68,9 @@ u64 get_jiffies_64(void) - u64 ret; - - do { -- seq = read_seqbegin(&jiffies_lock); -+ seq = read_seqcount_begin(&jiffies_seq); - ret = jiffies_64; -- } while (read_seqretry(&jiffies_lock, seq)); -+ } while (read_seqcount_retry(&jiffies_seq, seq)); - return ret; - } - EXPORT_SYMBOL(get_jiffies_64); -diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c -index e51778c312f1c..ce7339ff10d22 100644 ---- a/kernel/time/tick-broadcast.c -+++ b/kernel/time/tick-broadcast.c -@@ -331,7 +331,7 @@ static void tick_handle_periodic_broadcast(struct clock_event_device *dev) - bc_local = tick_do_periodic_broadcast(); - - if (clockevent_state_oneshot(dev)) { -- ktime_t next = ktime_add(dev->next_event, tick_period); -+ ktime_t next = ktime_add_ns(dev->next_event, TICK_NSEC); - - clockevents_program_event(dev, next, true); - } -diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c -index 7e5d3524e924d..2b7448ae5b478 100644 ---- a/kernel/time/tick-common.c -+++ b/kernel/time/tick-common.c -@@ -30,7 +30,6 @@ DEFINE_PER_CPU(struct tick_device, tick_cpu_device); - * Tick next event: keeps track of the tick time - */ - ktime_t tick_next_period; --ktime_t tick_period; - - /* - * tick_do_timer_cpu is a timer core internal variable which holds the CPU NR -@@ -84,13 +83,15 @@ int tick_is_oneshot_available(void) - static void tick_periodic(int cpu) - { - if (tick_do_timer_cpu == cpu) { -- write_seqlock(&jiffies_lock); -+ raw_spin_lock(&jiffies_lock); -+ write_seqcount_begin(&jiffies_seq); - - /* Keep track of the next tick event */ -- tick_next_period = ktime_add(tick_next_period, tick_period); -+ tick_next_period = ktime_add_ns(tick_next_period, TICK_NSEC); - - do_timer(1); -- write_sequnlock(&jiffies_lock); -+ write_seqcount_end(&jiffies_seq); -+ raw_spin_unlock(&jiffies_lock); - update_wall_time(); - } - -@@ -125,7 +126,7 @@ void tick_handle_periodic(struct clock_event_device *dev) - * Setup the next period for devices, which do not have - * periodic mode: - */ -- next = ktime_add(next, tick_period); -+ next = ktime_add_ns(next, TICK_NSEC); - - if (!clockevents_program_event(dev, next, false)) - return; -@@ -162,16 +163,16 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast) - ktime_t next; - - do { -- seq = read_seqbegin(&jiffies_lock); -+ seq = read_seqcount_begin(&jiffies_seq); - next = tick_next_period; -- } while (read_seqretry(&jiffies_lock, seq)); -+ } while (read_seqcount_retry(&jiffies_seq, seq)); - - clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT); - - for (;;) { - if (!clockevents_program_event(dev, next, false)) - return; -- next = ktime_add(next, tick_period); -+ next = ktime_add_ns(next, TICK_NSEC); - } - } - } -@@ -215,10 +216,19 @@ static void tick_setup_device(struct tick_device *td, - * this cpu: - */ - if (tick_do_timer_cpu == TICK_DO_TIMER_BOOT) { -+ ktime_t next_p; -+ u32 rem; -+ - tick_do_timer_cpu = cpu; - -- tick_next_period = ktime_get(); -- tick_period = NSEC_PER_SEC / HZ; -+ next_p = ktime_get(); -+ div_u64_rem(next_p, TICK_NSEC, &rem); -+ if (rem) { -+ next_p -= rem; -+ next_p += TICK_NSEC; -+ } -+ -+ tick_next_period = next_p; - #ifdef CONFIG_NO_HZ_FULL - /* - * The boot CPU may be nohz_full, in which case set -diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h -index 5294f5b1f9550..e61c1244e7d46 100644 ---- a/kernel/time/tick-internal.h -+++ b/kernel/time/tick-internal.h -@@ -15,7 +15,6 @@ - - DECLARE_PER_CPU(struct tick_device, tick_cpu_device); - extern ktime_t tick_next_period; --extern ktime_t tick_period; - extern int tick_do_timer_cpu __read_mostly; - - extern void tick_setup_periodic(struct clock_event_device *dev, int broadcast); -diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c -index 5eb04bb598026..a70c611df137c 100644 ---- a/kernel/time/tick-sched.c -+++ b/kernel/time/tick-sched.c -@@ -53,48 +53,69 @@ static ktime_t last_jiffies_update; - */ - static void tick_do_update_jiffies64(ktime_t now) - { -- unsigned long ticks = 0; -+ unsigned long ticks = 1; - ktime_t delta; - - /* -- * Do a quick check without holding jiffies_lock: -- * The READ_ONCE() pairs with two updates done later in this function. -+ * Do a quick check without holding jiffies_lock. The READ_ONCE() -+ * pairs with the update done later in this function. -+ * -+ * This is also an intentional data race which is even safe on -+ * 32bit in theory. If there is a concurrent update then the check -+ * might give a random answer. It does not matter because if it -+ * returns then the concurrent update is already taking care, if it -+ * falls through then it will pointlessly contend on jiffies_lock. -+ * -+ * Though there is one nasty case on 32bit due to store tearing of -+ * the 64bit value. If the first 32bit store makes the quick check -+ * return on all other CPUs and the writing CPU context gets -+ * delayed to complete the second store (scheduled out on virt) -+ * then jiffies can become stale for up to ~2^32 nanoseconds -+ * without noticing. After that point all CPUs will wait for -+ * jiffies lock. -+ * -+ * OTOH, this is not any different than the situation with NOHZ=off -+ * where one CPU is responsible for updating jiffies and -+ * timekeeping. If that CPU goes out for lunch then all other CPUs -+ * will operate on stale jiffies until it decides to come back. - */ -- delta = ktime_sub(now, READ_ONCE(last_jiffies_update)); -- if (delta < tick_period) -+ if (ktime_before(now, READ_ONCE(tick_next_period))) - return; - - /* Reevaluate with jiffies_lock held */ -- write_seqlock(&jiffies_lock); -- -- delta = ktime_sub(now, last_jiffies_update); -- if (delta >= tick_period) { -+ raw_spin_lock(&jiffies_lock); -+ if (ktime_before(now, tick_next_period)) { -+ raw_spin_unlock(&jiffies_lock); -+ return; -+ } - -- delta = ktime_sub(delta, tick_period); -- /* Pairs with the lockless read in this function. */ -- WRITE_ONCE(last_jiffies_update, -- ktime_add(last_jiffies_update, tick_period)); -+ write_seqcount_begin(&jiffies_seq); - -- /* Slow path for long timeouts */ -- if (unlikely(delta >= tick_period)) { -- s64 incr = ktime_to_ns(tick_period); -+ delta = ktime_sub(now, tick_next_period); -+ if (unlikely(delta >= TICK_NSEC)) { -+ /* Slow path for long idle sleep times */ -+ s64 incr = TICK_NSEC; - -- ticks = ktime_divns(delta, incr); -+ ticks += ktime_divns(delta, incr); - -- /* Pairs with the lockless read in this function. */ -- WRITE_ONCE(last_jiffies_update, -- ktime_add_ns(last_jiffies_update, -- incr * ticks)); -- } -- do_timer(++ticks); -- -- /* Keep the tick_next_period variable up to date */ -- tick_next_period = ktime_add(last_jiffies_update, tick_period); -+ last_jiffies_update = ktime_add_ns(last_jiffies_update, -+ incr * ticks); - } else { -- write_sequnlock(&jiffies_lock); -- return; -+ last_jiffies_update = ktime_add_ns(last_jiffies_update, -+ TICK_NSEC); - } -- write_sequnlock(&jiffies_lock); -+ -+ do_timer(ticks); -+ -+ /* -+ * Keep the tick_next_period variable up to date. WRITE_ONCE() -+ * pairs with the READ_ONCE() in the lockless quick check above. -+ */ -+ WRITE_ONCE(tick_next_period, -+ ktime_add_ns(last_jiffies_update, TICK_NSEC)); -+ -+ write_seqcount_end(&jiffies_seq); -+ raw_spin_unlock(&jiffies_lock); - update_wall_time(); - } - -@@ -105,12 +126,14 @@ static ktime_t tick_init_jiffy_update(void) - { - ktime_t period; - -- write_seqlock(&jiffies_lock); -+ raw_spin_lock(&jiffies_lock); -+ write_seqcount_begin(&jiffies_seq); - /* Did we start the jiffies update yet ? */ - if (last_jiffies_update == 0) - last_jiffies_update = tick_next_period; - period = last_jiffies_update; -- write_sequnlock(&jiffies_lock); -+ write_seqcount_end(&jiffies_seq); -+ raw_spin_unlock(&jiffies_lock); - return period; - } - -@@ -202,6 +225,11 @@ static bool check_tick_dependency(atomic_t *dep) - return true; - } - -+ if (val & TICK_DEP_MASK_RCU) { -+ trace_tick_stop(0, TICK_DEP_MASK_RCU); -+ return true; -+ } -+ - return false; - } - -@@ -328,6 +356,7 @@ void tick_nohz_dep_set_cpu(int cpu, enum tick_dep_bits bit) - preempt_enable(); - } - } -+EXPORT_SYMBOL_GPL(tick_nohz_dep_set_cpu); - - void tick_nohz_dep_clear_cpu(int cpu, enum tick_dep_bits bit) - { -@@ -335,6 +364,7 @@ void tick_nohz_dep_clear_cpu(int cpu, enum tick_dep_bits bit) - - atomic_andnot(BIT(bit), &ts->tick_dep_mask); - } -+EXPORT_SYMBOL_GPL(tick_nohz_dep_clear_cpu); - - /* - * Set a per-task tick dependency. Posix CPU timers need this in order to elapse -@@ -402,7 +432,7 @@ void __init tick_nohz_full_setup(cpumask_var_t cpumask) - tick_nohz_full_running = true; - } - --static int tick_nohz_cpu_down(unsigned int cpu) -+bool tick_nohz_cpu_hotpluggable(unsigned int cpu) - { - /* - * The tick_do_timer_cpu CPU handles housekeeping duty (unbound -@@ -410,8 +440,13 @@ static int tick_nohz_cpu_down(unsigned int cpu) - * CPUs. It must remain online when nohz full is enabled. - */ - if (tick_nohz_full_running && tick_do_timer_cpu == cpu) -- return -EBUSY; -- return 0; -+ return false; -+ return true; -+} -+ -+static int tick_nohz_cpu_down(unsigned int cpu) -+{ -+ return tick_nohz_cpu_hotpluggable(cpu) ? 0 : -EBUSY; - } - - void __init tick_nohz_init(void) -@@ -636,7 +671,7 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now) - hrtimer_set_expires(&ts->sched_timer, ts->last_tick); - - /* Forward the time to expire in the future */ -- hrtimer_forward(&ts->sched_timer, now, tick_period); -+ hrtimer_forward(&ts->sched_timer, now, TICK_NSEC); - - if (ts->nohz_mode == NOHZ_MODE_HIGHRES) { - hrtimer_start_expires(&ts->sched_timer, -@@ -665,10 +700,10 @@ static ktime_t tick_nohz_next_event(struct tick_sched *ts, int cpu) - - /* Read jiffies and the time when jiffies were updated last */ - do { -- seq = read_seqbegin(&jiffies_lock); -+ seq = read_seqcount_begin(&jiffies_seq); - basemono = last_jiffies_update; - basejiff = jiffies; -- } while (read_seqretry(&jiffies_lock, seq)); -+ } while (read_seqcount_retry(&jiffies_seq, seq)); - ts->last_jiffies = basejiff; - ts->timer_expires_base = basemono; - -@@ -1198,7 +1233,7 @@ static void tick_nohz_handler(struct clock_event_device *dev) - if (unlikely(ts->tick_stopped)) - return; - -- hrtimer_forward(&ts->sched_timer, now, tick_period); -+ hrtimer_forward(&ts->sched_timer, now, TICK_NSEC); - tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1); - } - -@@ -1235,7 +1270,7 @@ static void tick_nohz_switch_to_nohz(void) - next = tick_init_jiffy_update(); - - hrtimer_set_expires(&ts->sched_timer, next); -- hrtimer_forward_now(&ts->sched_timer, tick_period); -+ hrtimer_forward_now(&ts->sched_timer, TICK_NSEC); - tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1); - tick_nohz_activate(ts, NOHZ_MODE_LOWRES); - } -@@ -1301,7 +1336,7 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer) - if (unlikely(ts->tick_stopped)) - return HRTIMER_NORESTART; - -- hrtimer_forward(timer, now, tick_period); -+ hrtimer_forward(timer, now, TICK_NSEC); - - return HRTIMER_RESTART; - } -@@ -1335,13 +1370,13 @@ void tick_setup_sched_timer(void) - - /* Offset the tick to avert jiffies_lock contention. */ - if (sched_skew_tick) { -- u64 offset = ktime_to_ns(tick_period) >> 1; -+ u64 offset = TICK_NSEC >> 1; - do_div(offset, num_possible_cpus()); - offset *= smp_processor_id(); - hrtimer_add_expires_ns(&ts->sched_timer, offset); - } - -- hrtimer_forward(&ts->sched_timer, now, tick_period); -+ hrtimer_forward(&ts->sched_timer, now, TICK_NSEC); - hrtimer_start_expires(&ts->sched_timer, HRTIMER_MODE_ABS_PINNED_HARD); - tick_nohz_activate(ts, NOHZ_MODE_HIGHRES); - } -diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c -index 2bc278dd98546..105dd0b663291 100644 ---- a/kernel/time/timekeeping.c -+++ b/kernel/time/timekeeping.c -@@ -2415,8 +2415,10 @@ EXPORT_SYMBOL(hardpps); - */ - void xtime_update(unsigned long ticks) - { -- write_seqlock(&jiffies_lock); -+ raw_spin_lock(&jiffies_lock); -+ write_seqcount_begin(&jiffies_seq); - do_timer(ticks); -- write_sequnlock(&jiffies_lock); -+ write_seqcount_end(&jiffies_seq); -+ raw_spin_unlock(&jiffies_lock); - update_wall_time(); - } -diff --git a/kernel/time/timekeeping.h b/kernel/time/timekeeping.h -index 141ab3ab0354f..099737f6f10c7 100644 ---- a/kernel/time/timekeeping.h -+++ b/kernel/time/timekeeping.h -@@ -25,7 +25,8 @@ static inline void sched_clock_resume(void) { } - extern void do_timer(unsigned long ticks); - extern void update_wall_time(void); - --extern seqlock_t jiffies_lock; -+extern raw_spinlock_t jiffies_lock; -+extern seqcount_t jiffies_seq; - - #define CS_NAME_LEN 32 - -diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c -index 869eeba2005af..43f452b5deff6 100644 ---- a/kernel/trace/ring_buffer.c -+++ b/kernel/trace/ring_buffer.c -@@ -1393,6 +1393,8 @@ static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer) - struct list_head *head = cpu_buffer->pages; - struct buffer_page *bpage, *tmp; - -+ irq_work_sync(&cpu_buffer->irq_work.work); -+ - free_buffer_page(cpu_buffer->reader_page); - - if (head) { -@@ -1498,6 +1500,8 @@ ring_buffer_free(struct ring_buffer *buffer) - - cpuhp_state_remove_instance(CPUHP_TRACE_RB_PREPARE, &buffer->node); - -+ irq_work_sync(&buffer->irq_work.work); -+ - for_each_buffer_cpu(buffer, cpu) - rb_free_cpu_buffer(buffer->buffers[cpu]); - -diff --git a/lib/debugobjects.c b/lib/debugobjects.c -index 48054dbf1b51f..bfb3eb8c98004 100644 ---- a/lib/debugobjects.c -+++ b/lib/debugobjects.c -@@ -218,10 +218,6 @@ static struct debug_obj *__alloc_object(struct hlist_head *list) - return obj; - } - --/* -- * Allocate a new object. If the pool is empty, switch off the debugger. -- * Must be called with interrupts disabled. -- */ - static struct debug_obj * - alloc_object(void *addr, struct debug_bucket *b, struct debug_obj_descr *descr) - { -@@ -528,31 +524,74 @@ static void debug_object_is_on_stack(void *addr, int onstack) - WARN_ON(1); - } - -+static struct debug_obj *lookup_object_or_alloc(void *addr, struct debug_bucket *b, -+ struct debug_obj_descr *descr, -+ bool onstack, bool alloc_ifstatic) -+{ -+ struct debug_obj *obj = lookup_object(addr, b); -+ enum debug_obj_state state = ODEBUG_STATE_NONE; -+ -+ if (likely(obj)) -+ return obj; -+ -+ /* -+ * debug_object_init() unconditionally allocates untracked -+ * objects. It does not matter whether it is a static object or -+ * not. -+ * -+ * debug_object_assert_init() and debug_object_activate() allow -+ * allocation only if the descriptor callback confirms that the -+ * object is static and considered initialized. For non-static -+ * objects the allocation needs to be done from the fixup callback. -+ */ -+ if (unlikely(alloc_ifstatic)) { -+ if (!descr->is_static_object || !descr->is_static_object(addr)) -+ return ERR_PTR(-ENOENT); -+ /* Statically allocated objects are considered initialized */ -+ state = ODEBUG_STATE_INIT; -+ } -+ -+ obj = alloc_object(addr, b, descr); -+ if (likely(obj)) { -+ obj->state = state; -+ debug_object_is_on_stack(addr, onstack); -+ return obj; -+ } -+ -+ /* Out of memory. Do the cleanup outside of the locked region */ -+ debug_objects_enabled = 0; -+ return NULL; -+} -+ -+static void debug_objects_fill_pool(void) -+{ -+ /* -+ * On RT enabled kernels the pool refill must happen in preemptible -+ * context: -+ */ -+ if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible()) -+ fill_pool(); -+} -+ - static void - __debug_object_init(void *addr, struct debug_obj_descr *descr, int onstack) - { - enum debug_obj_state state; -- bool check_stack = false; - struct debug_bucket *db; - struct debug_obj *obj; - unsigned long flags; - -- fill_pool(); -+ debug_objects_fill_pool(); - - db = get_bucket((unsigned long) addr); - - raw_spin_lock_irqsave(&db->lock, flags); - -- obj = lookup_object(addr, db); -- if (!obj) { -- obj = alloc_object(addr, db, descr); -- if (!obj) { -- debug_objects_enabled = 0; -- raw_spin_unlock_irqrestore(&db->lock, flags); -- debug_objects_oom(); -- return; -- } -- check_stack = true; -+ obj = lookup_object_or_alloc(addr, db, descr, onstack, false); -+ if (unlikely(!obj)) { -+ raw_spin_unlock_irqrestore(&db->lock, flags); -+ debug_objects_oom(); -+ return; - } - - switch (obj->state) { -@@ -578,8 +617,6 @@ __debug_object_init(void *addr, struct debug_obj_descr *descr, int onstack) - } - - raw_spin_unlock_irqrestore(&db->lock, flags); -- if (check_stack) -- debug_object_is_on_stack(addr, onstack); - } - - /** -@@ -619,24 +656,24 @@ EXPORT_SYMBOL_GPL(debug_object_init_on_stack); - */ - int debug_object_activate(void *addr, struct debug_obj_descr *descr) - { -+ struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; - enum debug_obj_state state; - struct debug_bucket *db; - struct debug_obj *obj; - unsigned long flags; - int ret; -- struct debug_obj o = { .object = addr, -- .state = ODEBUG_STATE_NOTAVAILABLE, -- .descr = descr }; - - if (!debug_objects_enabled) - return 0; - -+ debug_objects_fill_pool(); -+ - db = get_bucket((unsigned long) addr); - - raw_spin_lock_irqsave(&db->lock, flags); - -- obj = lookup_object(addr, db); -- if (obj) { -+ obj = lookup_object_or_alloc(addr, db, descr, false, true); -+ if (likely(!IS_ERR_OR_NULL(obj))) { - bool print_object = false; - - switch (obj->state) { -@@ -669,24 +706,16 @@ int debug_object_activate(void *addr, struct debug_obj_descr *descr) - - raw_spin_unlock_irqrestore(&db->lock, flags); - -- /* -- * We are here when a static object is activated. We -- * let the type specific code confirm whether this is -- * true or not. if true, we just make sure that the -- * static object is tracked in the object tracker. If -- * not, this must be a bug, so we try to fix it up. -- */ -- if (descr->is_static_object && descr->is_static_object(addr)) { -- /* track this static object */ -- debug_object_init(addr, descr); -- debug_object_activate(addr, descr); -- } else { -- debug_print_object(&o, "activate"); -- ret = debug_object_fixup(descr->fixup_activate, addr, -- ODEBUG_STATE_NOTAVAILABLE); -- return ret ? 0 : -EINVAL; -+ /* If NULL the allocation has hit OOM */ -+ if (!obj) { -+ debug_objects_oom(); -+ return 0; - } -- return 0; -+ -+ /* Object is neither static nor tracked. It's not initialized */ -+ debug_print_object(&o, "activate"); -+ ret = debug_object_fixup(descr->fixup_activate, addr, ODEBUG_STATE_NOTAVAILABLE); -+ return ret ? 0 : -EINVAL; - } - EXPORT_SYMBOL_GPL(debug_object_activate); - -@@ -840,6 +869,7 @@ EXPORT_SYMBOL_GPL(debug_object_free); - */ - void debug_object_assert_init(void *addr, struct debug_obj_descr *descr) - { -+ struct debug_obj o = { .object = addr, .state = ODEBUG_STATE_NOTAVAILABLE, .descr = descr }; - struct debug_bucket *db; - struct debug_obj *obj; - unsigned long flags; -@@ -847,34 +877,25 @@ void debug_object_assert_init(void *addr, struct debug_obj_descr *descr) - if (!debug_objects_enabled) - return; - -+ debug_objects_fill_pool(); -+ - db = get_bucket((unsigned long) addr); - - raw_spin_lock_irqsave(&db->lock, flags); -+ obj = lookup_object_or_alloc(addr, db, descr, false, true); -+ raw_spin_unlock_irqrestore(&db->lock, flags); -+ if (likely(!IS_ERR_OR_NULL(obj))) -+ return; - -- obj = lookup_object(addr, db); -+ /* If NULL the allocation has hit OOM */ - if (!obj) { -- struct debug_obj o = { .object = addr, -- .state = ODEBUG_STATE_NOTAVAILABLE, -- .descr = descr }; -- -- raw_spin_unlock_irqrestore(&db->lock, flags); -- /* -- * Maybe the object is static, and we let the type specific -- * code confirm. Track this static object if true, else invoke -- * fixup. -- */ -- if (descr->is_static_object && descr->is_static_object(addr)) { -- /* Track this static object */ -- debug_object_init(addr, descr); -- } else { -- debug_print_object(&o, "assert_init"); -- debug_object_fixup(descr->fixup_assert_init, addr, -- ODEBUG_STATE_NOTAVAILABLE); -- } -+ debug_objects_oom(); - return; - } - -- raw_spin_unlock_irqrestore(&db->lock, flags); -+ /* Object is neither tracked nor static. It's not initialized. */ -+ debug_print_object(&o, "assert_init"); -+ debug_object_fixup(descr->fixup_assert_init, addr, ODEBUG_STATE_NOTAVAILABLE); - } - EXPORT_SYMBOL_GPL(debug_object_assert_init); - -diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index c30a8bac5c130..a3fca320e35a1 100644 ---- a/mm/page_alloc.c -+++ b/mm/page_alloc.c -@@ -5816,7 +5816,21 @@ static void __build_all_zonelists(void *data) - int nid; - int __maybe_unused cpu; - pg_data_t *self = data; -+ unsigned long flags; - -+ /* -+ * Explicitly disable this CPU's interrupts before taking seqlock -+ * to prevent any IRQ handler from calling into the page allocator -+ * (e.g. GFP_ATOMIC) that could hit zonelist_iter_begin and livelock. -+ */ -+ local_irq_save(flags); -+ /* -+ * Explicitly disable this CPU's synchronous printk() before taking -+ * seqlock to prevent any printk() from trying to hold port->lock, for -+ * tty_insert_flip_string_and_push_buffer() on other CPU might be -+ * calling kmalloc(GFP_ATOMIC | __GFP_NOWARN) with port->lock held. -+ */ -+ printk_deferred_enter(); - write_seqlock(&zonelist_update_seq); - - #ifdef CONFIG_NUMA -@@ -5851,6 +5865,8 @@ static void __build_all_zonelists(void *data) - } - - write_sequnlock(&zonelist_update_seq); -+ printk_deferred_exit(); -+ local_irq_restore(flags); - } - - static noinline void __init -diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c -index 589615ec490bb..b10f31f98cb87 100644 ---- a/net/8021q/vlan_dev.c -+++ b/net/8021q/vlan_dev.c -@@ -366,7 +366,7 @@ static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) - - switch (cmd) { - case SIOCSHWTSTAMP: -- if (!net_eq(dev_net(dev), &init_net)) -+ if (!net_eq(dev_net(dev), dev_net(real_dev))) - break; - /* fall through */ - case SIOCGMIIPHY: -diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c -index a5205dc95e8fb..4f8f5204ae7a0 100644 ---- a/net/bluetooth/hci_sock.c -+++ b/net/bluetooth/hci_sock.c -@@ -989,7 +989,14 @@ static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, - if (hci_sock_gen_cookie(sk)) { - struct sk_buff *skb; - -- if (capable(CAP_NET_ADMIN)) -+ /* Perform careful checks before setting the HCI_SOCK_TRUSTED -+ * flag. Make sure that not only the current task but also -+ * the socket opener has the required capability, since -+ * privileged programs can be tricked into making ioctl calls -+ * on HCI sockets, and the socket should not be marked as -+ * trusted simply because the ioctl caller is privileged. -+ */ -+ if (sk_capable(sk, CAP_NET_ADMIN)) - hci_sock_set_flag(sk, HCI_SOCK_TRUSTED); - - /* Send event to monitor */ -diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 0547aa2c8b131..291d7a9e04839 100644 ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -4632,6 +4632,9 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb, - skb = alloc_skb(0, GFP_ATOMIC); - } else { - skb = skb_clone(orig_skb, GFP_ATOMIC); -+ -+ if (skb_orphan_frags_rx(skb, GFP_ATOMIC)) -+ return; - } - if (!skb) - return; -diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c -index 418e939878004..08ccb501ff0cc 100644 ---- a/net/ipv4/ip_output.c -+++ b/net/ipv4/ip_output.c -@@ -1559,9 +1559,19 @@ struct sk_buff *__ip_make_skb(struct sock *sk, - cork->dst = NULL; - skb_dst_set(skb, &rt->dst); - -- if (iph->protocol == IPPROTO_ICMP) -- icmp_out_count(net, ((struct icmphdr *) -- skb_transport_header(skb))->type); -+ if (iph->protocol == IPPROTO_ICMP) { -+ u8 icmp_type; -+ -+ /* For such sockets, transhdrlen is zero when do ip_append_data(), -+ * so icmphdr does not in skb linear region and can not get icmp_type -+ * by icmp_hdr(skb)->type. -+ */ -+ if (sk->sk_type == SOCK_RAW && !inet_sk(sk)->hdrincl) -+ icmp_type = fl4->fl4_icmp_type; -+ else -+ icmp_type = icmp_hdr(skb)->type; -+ icmp_out_count(net, icmp_type); -+ } - - ip_cork_release(cork); - out: -diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c -index 1179608955f5f..8d704ea946933 100644 ---- a/net/ipv6/sit.c -+++ b/net/ipv6/sit.c -@@ -1054,12 +1054,13 @@ tx_err: - - static void ipip6_tunnel_bind_dev(struct net_device *dev) - { -+ struct ip_tunnel *tunnel = netdev_priv(dev); -+ int t_hlen = tunnel->hlen + sizeof(struct iphdr); - struct net_device *tdev = NULL; -- struct ip_tunnel *tunnel; -+ int hlen = LL_MAX_HEADER; - const struct iphdr *iph; - struct flowi4 fl4; - -- tunnel = netdev_priv(dev); - iph = &tunnel->parms.iph; - - if (iph->daddr) { -@@ -1082,14 +1083,15 @@ static void ipip6_tunnel_bind_dev(struct net_device *dev) - tdev = __dev_get_by_index(tunnel->net, tunnel->parms.link); - - if (tdev && !netif_is_l3_master(tdev)) { -- int t_hlen = tunnel->hlen + sizeof(struct iphdr); - int mtu; - - mtu = tdev->mtu - t_hlen; - if (mtu < IPV6_MIN_MTU) - mtu = IPV6_MIN_MTU; - WRITE_ONCE(dev->mtu, mtu); -+ hlen = tdev->hard_header_len + tdev->needed_headroom; - } -+ dev->needed_headroom = t_hlen + hlen; - } - - static void ipip6_tunnel_update(struct ip_tunnel *t, struct ip_tunnel_parm *p, -diff --git a/net/ncsi/ncsi-aen.c b/net/ncsi/ncsi-aen.c -index b635c194f0a85..62fb1031763d1 100644 ---- a/net/ncsi/ncsi-aen.c -+++ b/net/ncsi/ncsi-aen.c -@@ -165,6 +165,7 @@ static int ncsi_aen_handler_cr(struct ncsi_dev_priv *ndp, - nc->state = NCSI_CHANNEL_INACTIVE; - list_add_tail_rcu(&nc->link, &ndp->channel_queue); - spin_unlock_irqrestore(&ndp->lock, flags); -+ nc->modes[NCSI_MODE_TX_ENABLE].enable = 0; - - return ncsi_process_next_channel(ndp); - } -diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c -index 140c24f1b6c60..7794fa4c669d6 100644 ---- a/net/netfilter/nf_tables_api.c -+++ b/net/netfilter/nf_tables_api.c -@@ -3909,12 +3909,24 @@ static void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set, - } - } - -+void nf_tables_activate_set(const struct nft_ctx *ctx, struct nft_set *set) -+{ -+ if (nft_set_is_anonymous(set)) -+ nft_clear(ctx->net, set); -+ -+ set->use++; -+} -+EXPORT_SYMBOL_GPL(nf_tables_activate_set); -+ - void nf_tables_deactivate_set(const struct nft_ctx *ctx, struct nft_set *set, - struct nft_set_binding *binding, - enum nft_trans_phase phase) - { - switch (phase) { - case NFT_TRANS_PREPARE: -+ if (nft_set_is_anonymous(set)) -+ nft_deactivate_next(ctx->net, set); -+ - set->use--; - return; - case NFT_TRANS_ABORT: -@@ -6491,6 +6503,8 @@ static int nf_tables_validate(struct net *net) - if (nft_table_validate(net, table) < 0) - return -EAGAIN; - } -+ -+ nft_validate_state_update(net, NFT_VALIDATE_SKIP); - break; - } - -@@ -7172,11 +7186,6 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action) - return 0; - } - --static void nf_tables_cleanup(struct net *net) --{ -- nft_validate_state_update(net, NFT_VALIDATE_SKIP); --} -- - static int nf_tables_abort(struct net *net, struct sk_buff *skb, - enum nfnl_abort_action action) - { -@@ -7208,7 +7217,6 @@ static const struct nfnetlink_subsystem nf_tables_subsys = { - .cb = nf_tables_cb, - .commit = nf_tables_commit, - .abort = nf_tables_abort, -- .cleanup = nf_tables_cleanup, - .valid_genid = nf_tables_valid_genid, - .owner = THIS_MODULE, - }; -diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c -index 81c86a156c6c0..e3f6e27a9a06d 100644 ---- a/net/netfilter/nfnetlink.c -+++ b/net/netfilter/nfnetlink.c -@@ -512,8 +512,6 @@ done: - goto replay_abort; - } - } -- if (ss->cleanup) -- ss->cleanup(net); - - nfnl_err_deliver(&err_list, oskb); - kfree_skb(skb); -diff --git a/net/netfilter/nft_dynset.c b/net/netfilter/nft_dynset.c -index 6bcc18124e5bd..7f9e6c90f7271 100644 ---- a/net/netfilter/nft_dynset.c -+++ b/net/netfilter/nft_dynset.c -@@ -259,7 +259,7 @@ static void nft_dynset_activate(const struct nft_ctx *ctx, - { - struct nft_dynset *priv = nft_expr_priv(expr); - -- priv->set->use++; -+ nf_tables_activate_set(ctx, priv->set); - } - - static void nft_dynset_destroy(const struct nft_ctx *ctx, -diff --git a/net/netfilter/nft_lookup.c b/net/netfilter/nft_lookup.c -index 660bad688e2bc..4eb4d076927e4 100644 ---- a/net/netfilter/nft_lookup.c -+++ b/net/netfilter/nft_lookup.c -@@ -129,7 +129,7 @@ static void nft_lookup_activate(const struct nft_ctx *ctx, - { - struct nft_lookup *priv = nft_expr_priv(expr); - -- priv->set->use++; -+ nf_tables_activate_set(ctx, priv->set); - } - - static void nft_lookup_destroy(const struct nft_ctx *ctx, -diff --git a/net/netfilter/nft_objref.c b/net/netfilter/nft_objref.c -index bfd18d2b65a28..74c61278e6bd3 100644 ---- a/net/netfilter/nft_objref.c -+++ b/net/netfilter/nft_objref.c -@@ -180,7 +180,7 @@ static void nft_objref_map_activate(const struct nft_ctx *ctx, - { - struct nft_objref_map *priv = nft_expr_priv(expr); - -- priv->set->use++; -+ nf_tables_activate_set(ctx, priv->set); - } - - static void nft_objref_map_destroy(const struct nft_ctx *ctx, -diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c -index a232fcbd721c4..00f040fb46b9c 100644 ---- a/net/netlink/af_netlink.c -+++ b/net/netlink/af_netlink.c -@@ -1743,7 +1743,8 @@ static int netlink_getsockopt(struct socket *sock, int level, int optname, - { - struct sock *sk = sock->sk; - struct netlink_sock *nlk = nlk_sk(sk); -- int len, val, err; -+ unsigned int flag; -+ int len, val; - - if (level != SOL_NETLINK) - return -ENOPROTOOPT; -@@ -1755,39 +1756,17 @@ static int netlink_getsockopt(struct socket *sock, int level, int optname, - - switch (optname) { - case NETLINK_PKTINFO: -- if (len < sizeof(int)) -- return -EINVAL; -- len = sizeof(int); -- val = nlk->flags & NETLINK_F_RECV_PKTINFO ? 1 : 0; -- if (put_user(len, optlen) || -- put_user(val, optval)) -- return -EFAULT; -- err = 0; -+ flag = NETLINK_F_RECV_PKTINFO; - break; - case NETLINK_BROADCAST_ERROR: -- if (len < sizeof(int)) -- return -EINVAL; -- len = sizeof(int); -- val = nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR ? 1 : 0; -- if (put_user(len, optlen) || -- put_user(val, optval)) -- return -EFAULT; -- err = 0; -+ flag = NETLINK_F_BROADCAST_SEND_ERROR; - break; - case NETLINK_NO_ENOBUFS: -- if (len < sizeof(int)) -- return -EINVAL; -- len = sizeof(int); -- val = nlk->flags & NETLINK_F_RECV_NO_ENOBUFS ? 1 : 0; -- if (put_user(len, optlen) || -- put_user(val, optval)) -- return -EFAULT; -- err = 0; -+ flag = NETLINK_F_RECV_NO_ENOBUFS; - break; - case NETLINK_LIST_MEMBERSHIPS: { -- int pos, idx, shift; -+ int pos, idx, shift, err = 0; - -- err = 0; - netlink_lock_table(); - for (pos = 0; pos * 8 < nlk->ngroups; pos += sizeof(u32)) { - if (len - pos < sizeof(u32)) -@@ -1804,40 +1783,32 @@ static int netlink_getsockopt(struct socket *sock, int level, int optname, - if (put_user(ALIGN(nlk->ngroups / 8, sizeof(u32)), optlen)) - err = -EFAULT; - netlink_unlock_table(); -- break; -+ return err; - } - case NETLINK_CAP_ACK: -- if (len < sizeof(int)) -- return -EINVAL; -- len = sizeof(int); -- val = nlk->flags & NETLINK_F_CAP_ACK ? 1 : 0; -- if (put_user(len, optlen) || -- put_user(val, optval)) -- return -EFAULT; -- err = 0; -+ flag = NETLINK_F_CAP_ACK; - break; - case NETLINK_EXT_ACK: -- if (len < sizeof(int)) -- return -EINVAL; -- len = sizeof(int); -- val = nlk->flags & NETLINK_F_EXT_ACK ? 1 : 0; -- if (put_user(len, optlen) || put_user(val, optval)) -- return -EFAULT; -- err = 0; -+ flag = NETLINK_F_EXT_ACK; - break; - case NETLINK_GET_STRICT_CHK: -- if (len < sizeof(int)) -- return -EINVAL; -- len = sizeof(int); -- val = nlk->flags & NETLINK_F_STRICT_CHK ? 1 : 0; -- if (put_user(len, optlen) || put_user(val, optval)) -- return -EFAULT; -- err = 0; -+ flag = NETLINK_F_STRICT_CHK; - break; - default: -- err = -ENOPROTOOPT; -+ return -ENOPROTOOPT; - } -- return err; -+ -+ if (len < sizeof(int)) -+ return -EINVAL; -+ -+ len = sizeof(int); -+ val = nlk->flags & flag ? 1 : 0; -+ -+ if (put_user(len, optlen) || -+ copy_to_user(optval, &val, len)) -+ return -EFAULT; -+ -+ return 0; - } - - static void netlink_cmsg_recv_pktinfo(struct msghdr *msg, struct sk_buff *skb) -diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c -index 450dc03347725..109a848aca151 100644 ---- a/net/packet/af_packet.c -+++ b/net/packet/af_packet.c -@@ -266,7 +266,8 @@ static void packet_cached_dev_reset(struct packet_sock *po) - - static bool packet_use_direct_xmit(const struct packet_sock *po) - { -- return po->xmit == packet_direct_xmit; -+ /* Paired with WRITE_ONCE() in packet_setsockopt() */ -+ return READ_ONCE(po->xmit) == packet_direct_xmit; - } - - static u16 packet_pick_tx_queue(struct sk_buff *skb) -@@ -1974,7 +1975,7 @@ retry: - goto retry; - } - -- if (!dev_validate_header(dev, skb->data, len)) { -+ if (!dev_validate_header(dev, skb->data, len) || !skb->len) { - err = -EINVAL; - goto out_unlock; - } -@@ -2124,7 +2125,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev, - sll = &PACKET_SKB_CB(skb)->sa.ll; - sll->sll_hatype = dev->type; - sll->sll_pkttype = skb->pkt_type; -- if (unlikely(po->origdev)) -+ if (unlikely(packet_sock_flag(po, PACKET_SOCK_ORIGDEV))) - sll->sll_ifindex = orig_dev->ifindex; - else - sll->sll_ifindex = dev->ifindex; -@@ -2392,7 +2393,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, - sll->sll_hatype = dev->type; - sll->sll_protocol = skb->protocol; - sll->sll_pkttype = skb->pkt_type; -- if (unlikely(po->origdev)) -+ if (unlikely(packet_sock_flag(po, PACKET_SOCK_ORIGDEV))) - sll->sll_ifindex = orig_dev->ifindex; - else - sll->sll_ifindex = dev->ifindex; -@@ -2799,7 +2800,8 @@ tpacket_error: - packet_inc_pending(&po->tx_ring); - - status = TP_STATUS_SEND_REQUEST; -- err = po->xmit(skb); -+ /* Paired with WRITE_ONCE() in packet_setsockopt() */ -+ err = READ_ONCE(po->xmit)(skb); - if (unlikely(err != 0)) { - if (err > 0) - err = net_xmit_errno(err); -@@ -3002,7 +3004,8 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len) - virtio_net_hdr_set_proto(skb, &vnet_hdr); - } - -- err = po->xmit(skb); -+ /* Paired with WRITE_ONCE() in packet_setsockopt() */ -+ err = READ_ONCE(po->xmit)(skb); - if (unlikely(err != 0)) { - if (err > 0) - err = net_xmit_errno(err); -@@ -3453,7 +3456,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa, copy_len); - } - -- if (pkt_sk(sk)->auxdata) { -+ if (packet_sock_flag(pkt_sk(sk), PACKET_SOCK_AUXDATA)) { - struct tpacket_auxdata aux; - - aux.tp_status = TP_STATUS_USER; -@@ -3836,9 +3839,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv - if (copy_from_user(&val, optval, sizeof(val))) - return -EFAULT; - -- lock_sock(sk); -- po->auxdata = !!val; -- release_sock(sk); -+ packet_sock_flag_set(po, PACKET_SOCK_AUXDATA, val); - return 0; - } - case PACKET_ORIGDEV: -@@ -3850,9 +3851,7 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv - if (copy_from_user(&val, optval, sizeof(val))) - return -EFAULT; - -- lock_sock(sk); -- po->origdev = !!val; -- release_sock(sk); -+ packet_sock_flag_set(po, PACKET_SOCK_ORIGDEV, val); - return 0; - } - case PACKET_VNET_HDR: -@@ -3949,7 +3948,8 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv - if (copy_from_user(&val, optval, sizeof(val))) - return -EFAULT; - -- po->xmit = val ? packet_direct_xmit : dev_queue_xmit; -+ /* Paired with all lockless reads of po->xmit */ -+ WRITE_ONCE(po->xmit, val ? packet_direct_xmit : dev_queue_xmit); - return 0; - } - default: -@@ -4000,10 +4000,10 @@ static int packet_getsockopt(struct socket *sock, int level, int optname, - - break; - case PACKET_AUXDATA: -- val = po->auxdata; -+ val = packet_sock_flag(po, PACKET_SOCK_AUXDATA); - break; - case PACKET_ORIGDEV: -- val = po->origdev; -+ val = packet_sock_flag(po, PACKET_SOCK_ORIGDEV); - break; - case PACKET_VNET_HDR: - val = po->has_vnet_hdr; -diff --git a/net/packet/diag.c b/net/packet/diag.c -index 07812ae5ca073..d704c7bf51b20 100644 ---- a/net/packet/diag.c -+++ b/net/packet/diag.c -@@ -23,9 +23,9 @@ static int pdiag_put_info(const struct packet_sock *po, struct sk_buff *nlskb) - pinfo.pdi_flags = 0; - if (po->running) - pinfo.pdi_flags |= PDI_RUNNING; -- if (po->auxdata) -+ if (packet_sock_flag(po, PACKET_SOCK_AUXDATA)) - pinfo.pdi_flags |= PDI_AUXDATA; -- if (po->origdev) -+ if (packet_sock_flag(po, PACKET_SOCK_ORIGDEV)) - pinfo.pdi_flags |= PDI_ORIGDEV; - if (po->has_vnet_hdr) - pinfo.pdi_flags |= PDI_VNETHDR; -diff --git a/net/packet/internal.h b/net/packet/internal.h -index 907f4cd2a7188..2b2b85dadf8ea 100644 ---- a/net/packet/internal.h -+++ b/net/packet/internal.h -@@ -115,10 +115,9 @@ struct packet_sock { - int copy_thresh; - spinlock_t bind_lock; - struct mutex pg_vec_lock; -+ unsigned long flags; - unsigned int running; /* bind_lock must be held */ -- unsigned int auxdata:1, /* writer must hold sock lock */ -- origdev:1, -- has_vnet_hdr:1, -+ unsigned int has_vnet_hdr:1, /* writer must hold sock lock */ - tp_loss:1, - tp_tx_has_off:1; - int pressure; -@@ -143,4 +142,25 @@ static struct packet_sock *pkt_sk(struct sock *sk) - return (struct packet_sock *)sk; - } - -+enum packet_sock_flags { -+ PACKET_SOCK_ORIGDEV, -+ PACKET_SOCK_AUXDATA, -+}; -+ -+static inline void packet_sock_flag_set(struct packet_sock *po, -+ enum packet_sock_flags flag, -+ bool val) -+{ -+ if (val) -+ set_bit(flag, &po->flags); -+ else -+ clear_bit(flag, &po->flags); -+} -+ -+static inline bool packet_sock_flag(const struct packet_sock *po, -+ enum packet_sock_flags flag) -+{ -+ return test_bit(flag, &po->flags); -+} -+ - #endif -diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c -index 1cb90d32d553d..3439d14168e81 100644 ---- a/net/rxrpc/sendmsg.c -+++ b/net/rxrpc/sendmsg.c -@@ -738,7 +738,7 @@ int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len) - /* Fall through */ - case 1: - if (p.call.timeouts.hard > 0) { -- j = msecs_to_jiffies(p.call.timeouts.hard); -+ j = p.call.timeouts.hard * HZ; - now = jiffies; - j += now; - WRITE_ONCE(call->expect_term_by, j); -diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c -index b87d2a1ee0b16..e3f28cb03f7e5 100644 ---- a/net/sched/act_mirred.c -+++ b/net/sched/act_mirred.c -@@ -244,7 +244,7 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a, - goto out; - } - -- if (unlikely(!(dev->flags & IFF_UP))) { -+ if (unlikely(!(dev->flags & IFF_UP)) || !netif_carrier_ok(dev)) { - net_notice_ratelimited("tc mirred to Houston: device %s is down\n", - dev->name); - goto out; -diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c -index 77a1988d5ddc7..49777da9f2634 100644 ---- a/net/sched/cls_api.c -+++ b/net/sched/cls_api.c -@@ -1500,6 +1500,7 @@ static int tcf_block_bind(struct tcf_block *block, - - err_unroll: - list_for_each_entry_safe(block_cb, next, &bo->cb_list, list) { -+ list_del(&block_cb->driver_list); - if (i-- > 0) { - list_del(&block_cb->list); - tcf_block_playback_offloads(block, block_cb->cb, -diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c -index 012b0504264de..629c05ff1f3e6 100644 ---- a/net/sunrpc/clnt.c -+++ b/net/sunrpc/clnt.c -@@ -2003,9 +2003,6 @@ call_bind_status(struct rpc_task *task) - status = -EOPNOTSUPP; - break; - } -- if (task->tk_rebind_retry == 0) -- break; -- task->tk_rebind_retry--; - rpc_delay(task, 3*HZ); - goto retry_timeout; - case -ENOBUFS: -diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c -index 32ffa801a5b97..a5c6a3d05741a 100644 ---- a/net/sunrpc/sched.c -+++ b/net/sunrpc/sched.c -@@ -827,7 +827,6 @@ rpc_init_task_statistics(struct rpc_task *task) - /* Initialize retry counters */ - task->tk_garb_retry = 2; - task->tk_cred_retry = 2; -- task->tk_rebind_retry = 2; - - /* starting timestamp */ - task->tk_start = ktime_get(); -diff --git a/scripts/gdb/linux/clk.py b/scripts/gdb/linux/clk.py -index 061aecfa294e6..7a01fdc3e8446 100644 ---- a/scripts/gdb/linux/clk.py -+++ b/scripts/gdb/linux/clk.py -@@ -41,6 +41,8 @@ are cached and potentially out of date""" - self.show_subtree(child, level + 1) - - def invoke(self, arg, from_tty): -+ if utils.gdb_eval_or_none("clk_root_list") is None: -+ raise gdb.GdbError("No clocks registered") - gdb.write(" enable prepare protect \n") - gdb.write(" clock count count count rate \n") - gdb.write("------------------------------------------------------------------------\n") -diff --git a/scripts/gdb/linux/genpd.py b/scripts/gdb/linux/genpd.py -index 6ca93bd2949e8..b53649c0a77a6 100644 ---- a/scripts/gdb/linux/genpd.py -+++ b/scripts/gdb/linux/genpd.py -@@ -5,7 +5,7 @@ - import gdb - import sys - --from linux.utils import CachedType -+from linux.utils import CachedType, gdb_eval_or_none - from linux.lists import list_for_each_entry - - generic_pm_domain_type = CachedType('struct generic_pm_domain') -@@ -49,17 +49,17 @@ Output is similar to /sys/kernel/debug/pm_genpd/pm_genpd_summary''' - else: - status_string = 'off-{}'.format(genpd['state_idx']) - -- slave_names = [] -+ child_names = [] - for link in list_for_each_entry( -- genpd['master_links'], -+ genpd['parent_links'], - device_link_type.get_type().pointer(), -- 'master_node'): -- slave_names.apend(link['slave']['name']) -+ 'parent_node'): -+ child_names.append(link['child']['name']) - - gdb.write('%-30s %-15s %s\n' % ( - genpd['name'].string(), - status_string, -- ', '.join(slave_names))) -+ ', '.join(child_names))) - - # Print devices in domain - for pm_data in list_for_each_entry(genpd['dev_list'], -@@ -70,7 +70,9 @@ Output is similar to /sys/kernel/debug/pm_genpd/pm_genpd_summary''' - gdb.write(' %-50s %s\n' % (kobj_path, rtpm_status_str(dev))) - - def invoke(self, arg, from_tty): -- gdb.write('domain status slaves\n'); -+ if gdb_eval_or_none("&gpd_list") is None: -+ raise gdb.GdbError("No power domain(s) registered") -+ gdb.write('domain status children\n'); - gdb.write(' /device runtime status\n'); - gdb.write('----------------------------------------------------------------------\n'); - for genpd in list_for_each_entry( -diff --git a/scripts/gdb/linux/timerlist.py b/scripts/gdb/linux/timerlist.py -index 071d0dd5a6349..51def847f1ef9 100644 ---- a/scripts/gdb/linux/timerlist.py -+++ b/scripts/gdb/linux/timerlist.py -@@ -73,7 +73,7 @@ def print_cpu(hrtimer_bases, cpu, max_clock_bases): - ts = cpus.per_cpu(tick_sched_ptr, cpu) - - text = "cpu: {}\n".format(cpu) -- for i in xrange(max_clock_bases): -+ for i in range(max_clock_bases): - text += " clock {}:\n".format(i) - text += print_base(cpu_base['clock_base'][i]) - -@@ -158,6 +158,8 @@ def pr_cpumask(mask): - num_bytes = (nr_cpu_ids + 7) / 8 - buf = utils.read_memoryview(inf, bits, num_bytes).tobytes() - buf = binascii.b2a_hex(buf) -+ if type(buf) is not str: -+ buf=buf.decode() - - chunks = [] - i = num_bytes -diff --git a/scripts/gdb/linux/utils.py b/scripts/gdb/linux/utils.py -index ea94221dbd392..8c33be7985b65 100644 ---- a/scripts/gdb/linux/utils.py -+++ b/scripts/gdb/linux/utils.py -@@ -89,7 +89,10 @@ def get_target_endianness(): - - - def read_memoryview(inf, start, length): -- return memoryview(inf.read_memory(start, length)) -+ m = inf.read_memory(start, length) -+ if type(m) is memoryview: -+ return m -+ return memoryview(m) - - - def read_u16(buffer, offset): -diff --git a/security/selinux/Makefile b/security/selinux/Makefile -index ccf9504093841..c371634f35a3b 100644 ---- a/security/selinux/Makefile -+++ b/security/selinux/Makefile -@@ -19,8 +19,8 @@ ccflags-y := -I$(srctree)/security/selinux -I$(srctree)/security/selinux/include - $(addprefix $(obj)/,$(selinux-y)): $(obj)/flask.h - - quiet_cmd_flask = GEN $(obj)/flask.h $(obj)/av_permissions.h -- cmd_flask = scripts/selinux/genheaders/genheaders $(obj)/flask.h $(obj)/av_permissions.h -+ cmd_flask = $< $(obj)/flask.h $(obj)/av_permissions.h - - targets += flask.h av_permissions.h --$(obj)/flask.h: $(src)/include/classmap.h FORCE -+$(obj)/flask.h $(obj)/av_permissions.h &: scripts/selinux/genheaders/genheaders FORCE - $(call if_changed,flask) -diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c -index b781b28de0126..efeffa0bf2d78 100644 ---- a/sound/soc/codecs/es8316.c -+++ b/sound/soc/codecs/es8316.c -@@ -806,15 +806,14 @@ static int es8316_i2c_probe(struct i2c_client *i2c_client, - es8316->irq = i2c_client->irq; - mutex_init(&es8316->lock); - -- ret = devm_request_threaded_irq(dev, es8316->irq, NULL, es8316_irq, -- IRQF_TRIGGER_HIGH | IRQF_ONESHOT, -- "es8316", es8316); -- if (ret == 0) { -- /* Gets re-enabled by es8316_set_jack() */ -- disable_irq(es8316->irq); -- } else { -- dev_warn(dev, "Failed to get IRQ %d: %d\n", es8316->irq, ret); -- es8316->irq = -ENXIO; -+ if (es8316->irq > 0) { -+ ret = devm_request_threaded_irq(dev, es8316->irq, NULL, es8316_irq, -+ IRQF_TRIGGER_HIGH | IRQF_ONESHOT | IRQF_NO_AUTOEN, -+ "es8316", es8316); -+ if (ret) { -+ dev_warn(dev, "Failed to get IRQ %d: %d\n", es8316->irq, ret); -+ es8316->irq = -ENXIO; -+ } - } - - return devm_snd_soc_register_component(&i2c_client->dev, -diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c -index 6a8edb0a559de..df3b370fe7292 100644 ---- a/sound/soc/intel/boards/bytcr_rt5640.c -+++ b/sound/soc/intel/boards/bytcr_rt5640.c -@@ -391,6 +391,18 @@ static int byt_rt5640_aif1_hw_params(struct snd_pcm_substream *substream, - - /* Please keep this list alphabetically sorted */ - static const struct dmi_system_id byt_rt5640_quirk_table[] = { -+ { /* Acer Iconia One 7 B1-750 */ -+ .matches = { -+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), -+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "VESPA2"), -+ }, -+ .driver_data = (void *)(BYT_RT5640_DMIC1_MAP | -+ BYT_RT5640_JD_SRC_JD1_IN4P | -+ BYT_RT5640_OVCD_TH_1500UA | -+ BYT_RT5640_OVCD_SF_0P75 | -+ BYT_RT5640_SSP0_AIF1 | -+ BYT_RT5640_MCLK_EN), -+ }, - { /* Acer Iconia Tab 8 W1-810 */ - .matches = { - DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"), -diff --git a/sound/usb/caiaq/input.c b/sound/usb/caiaq/input.c -index 533eb69fe4e69..cd5a8584dbe32 100644 ---- a/sound/usb/caiaq/input.c -+++ b/sound/usb/caiaq/input.c -@@ -804,6 +804,7 @@ int snd_usb_caiaq_input_init(struct snd_usb_caiaqdev *cdev) - - default: - /* no input methods supported on this device */ -+ ret = -EINVAL; - goto exit_free_idev; - } - -diff --git a/tools/bpf/bpftool/json_writer.c b/tools/bpf/bpftool/json_writer.c -index 86501cd3c763e..f2be9ef2c2d50 100644 ---- a/tools/bpf/bpftool/json_writer.c -+++ b/tools/bpf/bpftool/json_writer.c -@@ -80,9 +80,6 @@ static void jsonw_puts(json_writer_t *self, const char *str) - case '"': - fputs("\\\"", self->out); - break; -- case '\'': -- fputs("\\\'", self->out); -- break; - default: - putc(*str, self->out); - } -diff --git a/tools/bpf/bpftool/xlated_dumper.c b/tools/bpf/bpftool/xlated_dumper.c -index 5b91ee65a0802..762ca450d1980 100644 ---- a/tools/bpf/bpftool/xlated_dumper.c -+++ b/tools/bpf/bpftool/xlated_dumper.c -@@ -363,8 +363,15 @@ void dump_xlated_for_graph(struct dump_data *dd, void *buf_start, void *buf_end, - struct bpf_insn *insn_start = buf_start; - struct bpf_insn *insn_end = buf_end; - struct bpf_insn *cur = insn_start; -+ bool double_insn = false; - - for (; cur <= insn_end; cur++) { -+ if (double_insn) { -+ double_insn = false; -+ continue; -+ } -+ double_insn = cur->code == (BPF_LD | BPF_IMM | BPF_DW); -+ - printf("% 4d: ", (int)(cur - insn_start + start_idx)); - print_bpf_insn(&cbs, cur, true); - if (cur != insn_end) -diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c -index 5cacc4f84c8d9..0826893098ce4 100644 ---- a/tools/perf/builtin-sched.c -+++ b/tools/perf/builtin-sched.c -@@ -666,7 +666,7 @@ static void create_tasks(struct perf_sched *sched) - err = pthread_attr_init(&attr); - BUG_ON(err); - err = pthread_attr_setstacksize(&attr, -- (size_t) max(16 * 1024, PTHREAD_STACK_MIN)); -+ (size_t) max(16 * 1024, (int)PTHREAD_STACK_MIN)); - BUG_ON(err); - err = pthread_mutex_lock(&sched->start_work_mutex); - BUG_ON(err); -diff --git a/tools/perf/pmu-events/arch/powerpc/power9/other.json b/tools/perf/pmu-events/arch/powerpc/power9/other.json -index 62b8642696237..ce75652e90516 100644 ---- a/tools/perf/pmu-events/arch/powerpc/power9/other.json -+++ b/tools/perf/pmu-events/arch/powerpc/power9/other.json -@@ -1417,7 +1417,7 @@ - {, - "EventCode": "0x45054", - "EventName": "PM_FMA_CMPL", -- "BriefDescription": "two flops operation completed (fmadd, fnmadd, fmsub, fnmsub) Scalar instructions only. " -+ "BriefDescription": "two flops operation completed (fmadd, fnmadd, fmsub, fnmsub) Scalar instructions only." - }, - {, - "EventCode": "0x201E8", -@@ -2017,7 +2017,7 @@ - {, - "EventCode": "0xC0BC", - "EventName": "PM_LSU_FLUSH_OTHER", -- "BriefDescription": "Other LSU flushes including: Sync (sync ack from L2 caused search of LRQ for oldest snooped load, This will either signal a Precise Flush of the oldest snooped loa or a Flush Next PPC); Data Valid Flush Next (several cases of this, one example is store and reload are lined up such that a store-hit-reload scenario exists and the CDF has already launched and has gotten bad/stale data); Bad Data Valid Flush Next (might be a few cases of this, one example is a larxa (D$ hit) return data and dval but can't allocate to LMQ (LMQ full or other reason). Already gave dval but can't watch it for snoop_hit_larx. Need to take the “bad dval” back and flush all younger ops)" -+ "BriefDescription": "Other LSU flushes including: Sync (sync ack from L2 caused search of LRQ for oldest snooped load, This will either signal a Precise Flush of the oldest snooped loa or a Flush Next PPC); Data Valid Flush Next (several cases of this, one example is store and reload are lined up such that a store-hit-reload scenario exists and the CDF has already launched and has gotten bad/stale data); Bad Data Valid Flush Next (might be a few cases of this, one example is a larxa (D$ hit) return data and dval but can't allocate to LMQ (LMQ full or other reason). Already gave dval but can't watch it for snoop_hit_larx. Need to take the 'bad dval' back and flush all younger ops)" - }, - {, - "EventCode": "0x5094", -diff --git a/tools/perf/pmu-events/arch/powerpc/power9/pipeline.json b/tools/perf/pmu-events/arch/powerpc/power9/pipeline.json -index b4772f54a2718..e2f2ed0a35496 100644 ---- a/tools/perf/pmu-events/arch/powerpc/power9/pipeline.json -+++ b/tools/perf/pmu-events/arch/powerpc/power9/pipeline.json -@@ -442,7 +442,7 @@ - {, - "EventCode": "0x4D052", - "EventName": "PM_2FLOP_CMPL", -- "BriefDescription": "DP vector version of fmul, fsub, fcmp, fsel, fabs, fnabs, fres ,fsqrte, fneg " -+ "BriefDescription": "DP vector version of fmul, fsub, fcmp, fsel, fabs, fnabs, fres ,fsqrte, fneg" - }, - {, - "EventCode": "0x1F142", -diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c -index df4c575a0d94e..3d5cd16ca4de1 100644 ---- a/tools/perf/util/auxtrace.c -+++ b/tools/perf/util/auxtrace.c -@@ -1825,6 +1825,7 @@ static int find_entire_kern_cb(void *arg, const char *name __maybe_unused, - char type, u64 start) - { - struct sym_args *args = arg; -+ u64 size; - - if (!kallsyms__is_function(type)) - return 0; -@@ -1834,7 +1835,9 @@ static int find_entire_kern_cb(void *arg, const char *name __maybe_unused, - args->start = start; - } - /* Don't know exactly where the kernel ends, so we add a page */ -- args->size = round_up(start, page_size) + page_size - args->start; -+ size = round_up(start, page_size) + page_size - args->start; -+ if (size > args->size) -+ args->size = size; - - return 0; - } -diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c -index eab7e8ef67899..52474e44fb28e 100644 ---- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c -+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c -@@ -1592,6 +1592,8 @@ static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder) - - decoder->cbr = cbr; - decoder->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr; -+ decoder->cyc_ref_timestamp = decoder->timestamp; -+ decoder->cycle_cnt = 0; - - intel_pt_mtc_cyc_cnt_cbr(decoder); - } -diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c -index 4027906fd3e38..baf73ca66a2bd 100644 ---- a/tools/perf/util/sort.c -+++ b/tools/perf/util/sort.c -@@ -830,8 +830,7 @@ static int hist_entry__dso_to_filter(struct hist_entry *he, int type, - static int64_t - sort__sym_from_cmp(struct hist_entry *left, struct hist_entry *right) - { -- struct addr_map_symbol *from_l = &left->branch_info->from; -- struct addr_map_symbol *from_r = &right->branch_info->from; -+ struct addr_map_symbol *from_l, *from_r; - - if (!left->branch_info || !right->branch_info) - return cmp_null(left->branch_info, right->branch_info); -diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c -index 4fef8d6bc2255..73f890664be5e 100644 ---- a/tools/perf/util/symbol-elf.c -+++ b/tools/perf/util/symbol-elf.c -@@ -546,7 +546,7 @@ static int elf_read_build_id(Elf *elf, void *bf, size_t size) - size_t sz = min(size, descsz); - memcpy(bf, ptr, sz); - memset(bf + sz, 0, size - sz); -- err = descsz; -+ err = sz; - break; - } - } diff --git a/patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch b/patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch new file mode 100644 index 0000000000..baad88e5ca --- /dev/null +++ b/patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch @@ -0,0 +1,6926 @@ +diff --git a/Makefile b/Makefile +index f660c3e224ec0..a12f1af9b03b1 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + VERSION = 5 + PATCHLEVEL = 4 +-SUBLEVEL = 243 ++SUBLEVEL = 244 + EXTRAVERSION = + NAME = Kleptomaniac Octopus + +diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c +index 1dbe98948ce30..9627c4cf3e41d 100644 +--- a/arch/arm/mach-sa1100/jornada720_ssp.c ++++ b/arch/arm/mach-sa1100/jornada720_ssp.c +@@ -1,5 +1,5 @@ + // SPDX-License-Identifier: GPL-2.0-only +-/** ++/* + * arch/arm/mac-sa1100/jornada720_ssp.c + * + * Copyright (C) 2006/2007 Kristoffer Ericson +@@ -26,6 +26,7 @@ static unsigned long jornada_ssp_flags; + + /** + * jornada_ssp_reverse - reverses input byte ++ * @byte: input byte to reverse + * + * we need to reverse all data we receive from the mcu due to its physical location + * returns : 01110111 -> 11101110 +@@ -46,6 +47,7 @@ EXPORT_SYMBOL(jornada_ssp_reverse); + + /** + * jornada_ssp_byte - waits for ready ssp bus and sends byte ++ * @byte: input byte to transmit + * + * waits for fifo buffer to clear and then transmits, if it doesn't then we will + * timeout after rounds. Needs mcu running before its called. +@@ -77,6 +79,7 @@ EXPORT_SYMBOL(jornada_ssp_byte); + + /** + * jornada_ssp_inout - decide if input is command or trading byte ++ * @byte: input byte to send (may be %TXDUMMY) + * + * returns : (jornada_ssp_byte(byte)) on success + * : %-ETIMEDOUT on timeout failure +diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c +index f7121b775e5f0..ab5fec67e541c 100644 +--- a/arch/m68k/kernel/signal.c ++++ b/arch/m68k/kernel/signal.c +@@ -883,11 +883,17 @@ static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs * + } + + static inline void __user * +-get_sigframe(struct ksignal *ksig, size_t frame_size) ++get_sigframe(struct ksignal *ksig, struct pt_regs *tregs, size_t frame_size) + { + unsigned long usp = sigsp(rdusp(), ksig); ++ unsigned long gap = 0; + +- return (void __user *)((usp - frame_size) & -8UL); ++ if (CPU_IS_020_OR_030 && tregs->format == 0xb) { ++ /* USP is unreliable so use worst-case value */ ++ gap = 256; ++ } ++ ++ return (void __user *)((usp - gap - frame_size) & -8UL); + } + + static int setup_frame(struct ksignal *ksig, sigset_t *set, +@@ -905,7 +911,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, + return -EFAULT; + } + +- frame = get_sigframe(ksig, sizeof(*frame) + fsize); ++ frame = get_sigframe(ksig, tregs, sizeof(*frame) + fsize); + + if (fsize) + err |= copy_to_user (frame + 1, regs + 1, fsize); +@@ -976,7 +982,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, + return -EFAULT; + } + +- frame = get_sigframe(ksig, sizeof(*frame)); ++ frame = get_sigframe(ksig, tregs, sizeof(*frame)); + + if (fsize) + err |= copy_to_user (&frame->uc.uc_extra, regs + 1, fsize); +diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h +index 0c83644bfa5cb..b4076ac51005e 100644 +--- a/arch/parisc/include/asm/cacheflush.h ++++ b/arch/parisc/include/asm/cacheflush.h +@@ -57,6 +57,11 @@ extern void flush_dcache_page(struct page *page); + + #define flush_dcache_mmap_lock(mapping) xa_lock_irq(&mapping->i_pages) + #define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&mapping->i_pages) ++#define flush_dcache_mmap_lock_irqsave(mapping, flags) \ ++ xa_lock_irqsave(&mapping->i_pages, flags) ++#define flush_dcache_mmap_unlock_irqrestore(mapping, flags) \ ++ xa_unlock_irqrestore(&mapping->i_pages, flags) ++ + + #define flush_icache_page(vma,page) do { \ + flush_kernel_dcache_page(page); \ +diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c +index a82b3eaa53989..fd84789b5ca4b 100644 +--- a/arch/parisc/kernel/cache.c ++++ b/arch/parisc/kernel/cache.c +@@ -328,6 +328,7 @@ void flush_dcache_page(struct page *page) + struct vm_area_struct *mpnt; + unsigned long offset; + unsigned long addr, old_addr = 0; ++ unsigned long flags; + pgoff_t pgoff; + + if (mapping && !mapping_mapped(mapping)) { +@@ -347,7 +348,7 @@ void flush_dcache_page(struct page *page) + * declared as MAP_PRIVATE or MAP_SHARED), so we only need + * to flush one address here for them all to become coherent */ + +- flush_dcache_mmap_lock(mapping); ++ flush_dcache_mmap_lock_irqsave(mapping, flags); + vma_interval_tree_foreach(mpnt, &mapping->i_mmap, pgoff, pgoff) { + offset = (pgoff - mpnt->vm_pgoff) << PAGE_SHIFT; + addr = mpnt->vm_start + offset; +@@ -370,7 +371,7 @@ void flush_dcache_page(struct page *page) + old_addr = addr; + } + } +- flush_dcache_mmap_unlock(mapping); ++ flush_dcache_mmap_unlock_irqrestore(mapping, flags); + } + EXPORT_SYMBOL(flush_dcache_page); + +diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c +index 230a6422b99f3..0e67ab681b4e9 100644 +--- a/arch/parisc/kernel/process.c ++++ b/arch/parisc/kernel/process.c +@@ -124,13 +124,18 @@ void machine_power_off(void) + /* It seems we have no way to power the system off via + * software. The user has to press the button himself. */ + +- printk(KERN_EMERG "System shut down completed.\n" +- "Please power this system off now."); ++ printk("Power off or press RETURN to reboot.\n"); + + /* prevent soft lockup/stalled CPU messages for endless loop. */ + rcu_sysrq_start(); + lockup_detector_soft_poweroff(); +- for (;;); ++ while (1) { ++ /* reboot if user presses RETURN key */ ++ if (pdc_iodc_getc() == 13) { ++ printk("Rebooting...\n"); ++ machine_restart(NULL); ++ } ++ } + } + + void (*pm_power_off)(void); +diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c +index 37988f7f3abcb..10776991296a0 100644 +--- a/arch/parisc/kernel/traps.c ++++ b/arch/parisc/kernel/traps.c +@@ -305,8 +305,8 @@ static void handle_break(struct pt_regs *regs) + #endif + + #ifdef CONFIG_KGDB +- if (unlikely(iir == PARISC_KGDB_COMPILED_BREAK_INSN || +- iir == PARISC_KGDB_BREAK_INSN)) { ++ if (unlikely((iir == PARISC_KGDB_COMPILED_BREAK_INSN || ++ iir == PARISC_KGDB_BREAK_INSN)) && !user_mode(regs)) { + kgdb_handle_exception(9, SIGTRAP, 0, regs); + return; + } +diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c +index bdcb07a98cd37..dc8f3fb02ac21 100644 +--- a/arch/powerpc/mm/book3s64/radix_pgtable.c ++++ b/arch/powerpc/mm/book3s64/radix_pgtable.c +@@ -1018,8 +1018,8 @@ void radix__ptep_set_access_flags(struct vm_area_struct *vma, pte_t *ptep, + pte_t entry, unsigned long address, int psize) + { + struct mm_struct *mm = vma->vm_mm; +- unsigned long set = pte_val(entry) & (_PAGE_DIRTY | _PAGE_ACCESSED | +- _PAGE_RW | _PAGE_EXEC); ++ unsigned long set = pte_val(entry) & (_PAGE_DIRTY | _PAGE_SOFT_DIRTY | ++ _PAGE_ACCESSED | _PAGE_RW | _PAGE_EXEC); + + unsigned long change = pte_val(entry) ^ pte_val(*ptep); + /* +diff --git a/arch/x86/include/asm/intel-family.h b/arch/x86/include/asm/intel-family.h +index c1d6d8bbb7dad..6fdd863198ec2 100644 +--- a/arch/x86/include/asm/intel-family.h ++++ b/arch/x86/include/asm/intel-family.h +@@ -96,6 +96,11 @@ + #define INTEL_FAM6_LAKEFIELD 0x8A + #define INTEL_FAM6_ALDERLAKE 0x97 + #define INTEL_FAM6_ALDERLAKE_L 0x9A ++#define INTEL_FAM6_ALDERLAKE_N 0xBE ++ ++#define INTEL_FAM6_RAPTORLAKE 0xB7 ++#define INTEL_FAM6_RAPTORLAKE_P 0xBA ++#define INTEL_FAM6_RAPTORLAKE_S 0xBF + + /* "Small Core" Processors (Atom) */ + +diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h +index 4bc476d7fa6c4..80239c84b4ddf 100644 +--- a/arch/x86/include/asm/kvm_host.h ++++ b/arch/x86/include/asm/kvm_host.h +@@ -563,6 +563,7 @@ struct kvm_vcpu_arch { + u64 ia32_misc_enable_msr; + u64 smbase; + u64 smi_count; ++ bool at_instruction_boundary; + bool tpr_access_reporting; + u64 ia32_xss; + u64 microcode_version; +@@ -981,6 +982,8 @@ struct kvm_vcpu_stat { + u64 irq_injections; + u64 nmi_injections; + u64 req_event; ++ u64 preemption_reported; ++ u64 preemption_other; + }; + + struct x86_instruction_info; +diff --git a/arch/x86/kernel/cpu/topology.c b/arch/x86/kernel/cpu/topology.c +index 24da5ee4f0220..5729ed7bb3e7d 100644 +--- a/arch/x86/kernel/cpu/topology.c ++++ b/arch/x86/kernel/cpu/topology.c +@@ -79,7 +79,7 @@ int detect_extended_topology_early(struct cpuinfo_x86 *c) + * initial apic id, which also represents 32-bit extended x2apic id. + */ + c->initial_apicid = edx; +- smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx); ++ smp_num_siblings = max_t(int, smp_num_siblings, LEVEL_MAX_SIBLINGS(ebx)); + #endif + return 0; + } +@@ -107,7 +107,8 @@ int detect_extended_topology(struct cpuinfo_x86 *c) + */ + cpuid_count(leaf, SMT_LEVEL, &eax, &ebx, &ecx, &edx); + c->initial_apicid = edx; +- core_level_siblings = smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx); ++ core_level_siblings = LEVEL_MAX_SIBLINGS(ebx); ++ smp_num_siblings = max_t(int, smp_num_siblings, LEVEL_MAX_SIBLINGS(ebx)); + core_plus_mask_width = ht_mask_width = BITS_SHIFT_NEXT_LEVEL(eax); + die_level_siblings = LEVEL_MAX_SIBLINGS(ebx); + die_plus_mask_width = BITS_SHIFT_NEXT_LEVEL(eax); +diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c +index e72042dc9487c..9b2bbb66d0c87 100644 +--- a/arch/x86/kernel/dumpstack.c ++++ b/arch/x86/kernel/dumpstack.c +@@ -171,7 +171,6 @@ void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, + printk("%sCall Trace:\n", log_lvl); + + unwind_start(&state, task, regs, stack); +- stack = stack ? : get_stack_pointer(task, regs); + regs = unwind_get_entry_regs(&state, &partial); + + /* +@@ -190,9 +189,13 @@ void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, + * - hardirq stack + * - entry stack + */ +- for ( ; stack; stack = PTR_ALIGN(stack_info.next_sp, sizeof(long))) { ++ for (stack = stack ?: get_stack_pointer(task, regs); ++ stack; ++ stack = stack_info.next_sp) { + const char *stack_name; + ++ stack = PTR_ALIGN(stack, sizeof(long)); ++ + if (get_stack_info(stack, task, &stack_info, &visit_mask)) { + /* + * We weren't on a valid stack. It's possible that +diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c +index c5a9de8d07250..e9444e202c334 100644 +--- a/arch/x86/kvm/svm.c ++++ b/arch/x86/kvm/svm.c +@@ -6246,7 +6246,8 @@ out: + + static void svm_handle_exit_irqoff(struct kvm_vcpu *vcpu) + { +- ++ if (to_svm(vcpu)->vmcb->control.exit_code == SVM_EXIT_INTR) ++ vcpu->arch.at_instruction_boundary = true; + } + + static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu) +diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c +index 9bd08d2646036..c930708297909 100644 +--- a/arch/x86/kvm/vmx/vmx.c ++++ b/arch/x86/kvm/vmx/vmx.c +@@ -6358,6 +6358,7 @@ static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu) + ); + + kvm_after_interrupt(vcpu); ++ vcpu->arch.at_instruction_boundary = true; + } + STACK_FRAME_NON_STANDARD(handle_external_interrupt_irqoff); + +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +index f5e9590a8f311..d152afdfa8b4f 100644 +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -207,6 +207,8 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { + { "nmi_injections", VCPU_STAT(nmi_injections) }, + { "req_event", VCPU_STAT(req_event) }, + { "l1d_flush", VCPU_STAT(l1d_flush) }, ++ { "preemption_reported", VCPU_STAT(preemption_reported) }, ++ { "preemption_other", VCPU_STAT(preemption_other) }, + { "mmu_shadow_zapped", VM_STAT(mmu_shadow_zapped) }, + { "mmu_pte_write", VM_STAT(mmu_pte_write) }, + { "mmu_pde_zapped", VM_STAT(mmu_pde_zapped) }, +@@ -3562,6 +3564,19 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu) + struct kvm_host_map map; + struct kvm_steal_time *st; + ++ /* ++ * The vCPU can be marked preempted if and only if the VM-Exit was on ++ * an instruction boundary and will not trigger guest emulation of any ++ * kind (see vcpu_run). Vendor specific code controls (conservatively) ++ * when this is true, for example allowing the vCPU to be marked ++ * preempted if and only if the VM-Exit was due to a host interrupt. ++ */ ++ if (!vcpu->arch.at_instruction_boundary) { ++ vcpu->stat.preemption_other++; ++ return; ++ } ++ ++ vcpu->stat.preemption_reported++; + if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED)) + return; + +@@ -8446,6 +8461,13 @@ static int vcpu_run(struct kvm_vcpu *vcpu) + vcpu->arch.l1tf_flush_l1d = true; + + for (;;) { ++ /* ++ * If another guest vCPU requests a PV TLB flush in the middle ++ * of instruction emulation, the rest of the emulation could ++ * use a stale page translation. Assume that any code after ++ * this point can start executing an instruction. ++ */ ++ vcpu->arch.at_instruction_boundary = false; + if (kvm_vcpu_running(vcpu)) { + r = vcpu_enter_guest(vcpu); + } else { +diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c +index af352e228fa2b..38e6798ce44fc 100644 +--- a/arch/x86/mm/init.c ++++ b/arch/x86/mm/init.c +@@ -9,6 +9,7 @@ + #include + + #include ++#include + #include + #include + #include +@@ -208,6 +209,24 @@ static void __init probe_page_size_mask(void) + } + } + ++#define INTEL_MATCH(_model) { .vendor = X86_VENDOR_INTEL, \ ++ .family = 6, \ ++ .model = _model, \ ++ } ++/* ++ * INVLPG may not properly flush Global entries ++ * on these CPUs when PCIDs are enabled. ++ */ ++static const struct x86_cpu_id invlpg_miss_ids[] = { ++ INTEL_MATCH(INTEL_FAM6_ALDERLAKE ), ++ INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L ), ++ INTEL_MATCH(INTEL_FAM6_ALDERLAKE_N ), ++ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE ), ++ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P), ++ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S), ++ {} ++}; ++ + static void setup_pcid(void) + { + if (!IS_ENABLED(CONFIG_X86_64)) +@@ -216,6 +235,12 @@ static void setup_pcid(void) + if (!boot_cpu_has(X86_FEATURE_PCID)) + return; + ++ if (x86_match_cpu(invlpg_miss_ids)) { ++ pr_info("Incomplete global flushes, disabling PCID"); ++ setup_clear_cpu_cap(X86_FEATURE_PCID); ++ return; ++ } ++ + if (boot_cpu_has(X86_FEATURE_PGE)) { + /* + * This can't be cr4_set_bits_and_update_boot() -- the +diff --git a/drivers/acpi/acpica/dbnames.c b/drivers/acpi/acpica/dbnames.c +index 63fe30e868075..7f14403165dd1 100644 +--- a/drivers/acpi/acpica/dbnames.c ++++ b/drivers/acpi/acpica/dbnames.c +@@ -571,6 +571,9 @@ acpi_status acpi_db_display_objects(char *obj_type_arg, char *display_count_arg) + object_info = + ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_object_info)); + ++ if (!object_info) ++ return (AE_NO_MEMORY); ++ + /* Walk the namespace from the root */ + + (void)acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, +diff --git a/drivers/acpi/acpica/dswstate.c b/drivers/acpi/acpica/dswstate.c +index de79f835a3737..7979d52dfbc96 100644 +--- a/drivers/acpi/acpica/dswstate.c ++++ b/drivers/acpi/acpica/dswstate.c +@@ -576,9 +576,14 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state, + ACPI_FUNCTION_TRACE(ds_init_aml_walk); + + walk_state->parser_state.aml = +- walk_state->parser_state.aml_start = aml_start; +- walk_state->parser_state.aml_end = +- walk_state->parser_state.pkg_end = aml_start + aml_length; ++ walk_state->parser_state.aml_start = ++ walk_state->parser_state.aml_end = ++ walk_state->parser_state.pkg_end = aml_start; ++ /* Avoid undefined behavior: applying zero offset to null pointer */ ++ if (aml_length != 0) { ++ walk_state->parser_state.aml_end += aml_length; ++ walk_state->parser_state.pkg_end += aml_length; ++ } + + /* The next_op of the next_walk will be the beginning of the method */ + +diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c +index defc5796b5084..c7baccd47b89f 100644 +--- a/drivers/acpi/ec.c ++++ b/drivers/acpi/ec.c +@@ -1118,6 +1118,7 @@ static void acpi_ec_remove_query_handlers(struct acpi_ec *ec, + void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit) + { + acpi_ec_remove_query_handlers(ec, false, query_bit); ++ flush_workqueue(ec_query_wq); + } + EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler); + +diff --git a/drivers/base/core.c b/drivers/base/core.c +index 1b016fdd1a750..f8e157ede44f8 100644 +--- a/drivers/base/core.c ++++ b/drivers/base/core.c +@@ -3474,6 +3474,13 @@ void device_set_of_node_from_dev(struct device *dev, const struct device *dev2) + } + EXPORT_SYMBOL_GPL(device_set_of_node_from_dev); + ++void device_set_node(struct device *dev, struct fwnode_handle *fwnode) ++{ ++ dev->fwnode = fwnode; ++ dev->of_node = to_of_node(fwnode); ++} ++EXPORT_SYMBOL_GPL(device_set_node); ++ + int device_match_name(struct device *dev, const void *name) + { + return sysfs_streq(dev_name(dev), name); +diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c +index 7f4b3b62492ca..7fdd702e564ae 100644 +--- a/drivers/base/regmap/regcache.c ++++ b/drivers/base/regmap/regcache.c +@@ -343,6 +343,9 @@ int regcache_sync(struct regmap *map) + const char *name; + bool bypass; + ++ if (WARN_ON(map->cache_type == REGCACHE_NONE)) ++ return -EINVAL; ++ + BUG_ON(!map->cache_ops); + + map->lock(map->lock_arg); +@@ -412,6 +415,9 @@ int regcache_sync_region(struct regmap *map, unsigned int min, + const char *name; + bool bypass; + ++ if (WARN_ON(map->cache_type == REGCACHE_NONE)) ++ return -EINVAL; ++ + BUG_ON(!map->cache_ops); + + map->lock(map->lock_arg); +diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c +index 9c61be2afca7e..5456d8e2eef28 100644 +--- a/drivers/char/tpm/tpm_tis.c ++++ b/drivers/char/tpm/tpm_tis.c +@@ -83,6 +83,22 @@ static const struct dmi_system_id tpm_tis_dmi_table[] = { + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T490s"), + }, + }, ++ { ++ .callback = tpm_tis_disable_irq, ++ .ident = "ThinkStation P360 Tiny", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkStation P360 Tiny"), ++ }, ++ }, ++ { ++ .callback = tpm_tis_disable_irq, ++ .ident = "ThinkPad L490", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L490"), ++ }, ++ }, + {} + }; + +diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c +index 3e0f04f0e16e5..3f74497d73e58 100644 +--- a/drivers/clk/tegra/clk-tegra20.c ++++ b/drivers/clk/tegra/clk-tegra20.c +@@ -18,24 +18,24 @@ + #define MISC_CLK_ENB 0x48 + + #define OSC_CTRL 0x50 +-#define OSC_CTRL_OSC_FREQ_MASK (3<<30) +-#define OSC_CTRL_OSC_FREQ_13MHZ (0<<30) +-#define OSC_CTRL_OSC_FREQ_19_2MHZ (1<<30) +-#define OSC_CTRL_OSC_FREQ_12MHZ (2<<30) +-#define OSC_CTRL_OSC_FREQ_26MHZ (3<<30) +-#define OSC_CTRL_MASK (0x3f2 | OSC_CTRL_OSC_FREQ_MASK) +- +-#define OSC_CTRL_PLL_REF_DIV_MASK (3<<28) +-#define OSC_CTRL_PLL_REF_DIV_1 (0<<28) +-#define OSC_CTRL_PLL_REF_DIV_2 (1<<28) +-#define OSC_CTRL_PLL_REF_DIV_4 (2<<28) ++#define OSC_CTRL_OSC_FREQ_MASK (3u<<30) ++#define OSC_CTRL_OSC_FREQ_13MHZ (0u<<30) ++#define OSC_CTRL_OSC_FREQ_19_2MHZ (1u<<30) ++#define OSC_CTRL_OSC_FREQ_12MHZ (2u<<30) ++#define OSC_CTRL_OSC_FREQ_26MHZ (3u<<30) ++#define OSC_CTRL_MASK (0x3f2u | OSC_CTRL_OSC_FREQ_MASK) ++ ++#define OSC_CTRL_PLL_REF_DIV_MASK (3u<<28) ++#define OSC_CTRL_PLL_REF_DIV_1 (0u<<28) ++#define OSC_CTRL_PLL_REF_DIV_2 (1u<<28) ++#define OSC_CTRL_PLL_REF_DIV_4 (2u<<28) + + #define OSC_FREQ_DET 0x58 +-#define OSC_FREQ_DET_TRIG (1<<31) ++#define OSC_FREQ_DET_TRIG (1u<<31) + + #define OSC_FREQ_DET_STATUS 0x5c +-#define OSC_FREQ_DET_BUSY (1<<31) +-#define OSC_FREQ_DET_CNT_MASK 0xFFFF ++#define OSC_FREQ_DET_BUSYu (1<<31) ++#define OSC_FREQ_DET_CNT_MASK 0xFFFFu + + #define TEGRA20_CLK_PERIPH_BANKS 3 + +diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c +index e497785cd99fe..b0e8752174c6f 100644 +--- a/drivers/firmware/arm_sdei.c ++++ b/drivers/firmware/arm_sdei.c +@@ -44,6 +44,8 @@ static asmlinkage void (*sdei_firmware_call)(unsigned long function_id, + /* entry point from firmware to arch asm code */ + static unsigned long sdei_entry_point; + ++static int sdei_hp_state; ++ + struct sdei_event { + /* These three are protected by the sdei_list_lock */ + struct list_head list; +@@ -305,8 +307,6 @@ int sdei_mask_local_cpu(void) + { + int err; + +- WARN_ON_ONCE(preemptible()); +- + err = invoke_sdei_fn(SDEI_1_0_FN_SDEI_PE_MASK, 0, 0, 0, 0, 0, NULL); + if (err && err != -EIO) { + pr_warn_once("failed to mask CPU[%u]: %d\n", +@@ -319,6 +319,7 @@ int sdei_mask_local_cpu(void) + + static void _ipi_mask_cpu(void *ignored) + { ++ WARN_ON_ONCE(preemptible()); + sdei_mask_local_cpu(); + } + +@@ -326,8 +327,6 @@ int sdei_unmask_local_cpu(void) + { + int err; + +- WARN_ON_ONCE(preemptible()); +- + err = invoke_sdei_fn(SDEI_1_0_FN_SDEI_PE_UNMASK, 0, 0, 0, 0, 0, NULL); + if (err && err != -EIO) { + pr_warn_once("failed to unmask CPU[%u]: %d\n", +@@ -340,6 +339,7 @@ int sdei_unmask_local_cpu(void) + + static void _ipi_unmask_cpu(void *ignored) + { ++ WARN_ON_ONCE(preemptible()); + sdei_unmask_local_cpu(); + } + +@@ -347,6 +347,8 @@ static void _ipi_private_reset(void *ignored) + { + int err; + ++ WARN_ON_ONCE(preemptible()); ++ + err = invoke_sdei_fn(SDEI_1_0_FN_SDEI_PRIVATE_RESET, 0, 0, 0, 0, 0, + NULL); + if (err && err != -EIO) +@@ -393,8 +395,6 @@ static void _local_event_enable(void *data) + int err; + struct sdei_crosscall_args *arg = data; + +- WARN_ON_ONCE(preemptible()); +- + err = sdei_api_event_enable(arg->event->event_num); + + sdei_cross_call_return(arg, err); +@@ -485,8 +485,6 @@ static void _local_event_unregister(void *data) + int err; + struct sdei_crosscall_args *arg = data; + +- WARN_ON_ONCE(preemptible()); +- + err = sdei_api_event_unregister(arg->event->event_num); + + sdei_cross_call_return(arg, err); +@@ -575,8 +573,6 @@ static void _local_event_register(void *data) + struct sdei_registered_event *reg; + struct sdei_crosscall_args *arg = data; + +- WARN_ON(preemptible()); +- + reg = per_cpu_ptr(arg->event->private_registered, smp_processor_id()); + err = sdei_api_event_register(arg->event->event_num, sdei_entry_point, + reg, 0, 0); +@@ -756,6 +752,8 @@ static int sdei_pm_notifier(struct notifier_block *nb, unsigned long action, + { + int rv; + ++ WARN_ON_ONCE(preemptible()); ++ + switch (action) { + case CPU_PM_ENTER: + rv = sdei_mask_local_cpu(); +@@ -804,7 +802,7 @@ static int sdei_device_freeze(struct device *dev) + int err; + + /* unregister private events */ +- cpuhp_remove_state(CPUHP_AP_ARM_SDEI_STARTING); ++ cpuhp_remove_state(sdei_entry_point); + + err = sdei_unregister_shared(); + if (err) +@@ -825,12 +823,15 @@ static int sdei_device_thaw(struct device *dev) + return err; + } + +- err = cpuhp_setup_state(CPUHP_AP_ARM_SDEI_STARTING, "SDEI", ++ err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "SDEI", + &sdei_cpuhp_up, &sdei_cpuhp_down); +- if (err) ++ if (err < 0) { + pr_warn("Failed to re-register CPU hotplug notifier...\n"); ++ return err; ++ } + +- return err; ++ sdei_hp_state = err; ++ return 0; + } + + static int sdei_device_restore(struct device *dev) +@@ -862,7 +863,7 @@ static int sdei_reboot_notifier(struct notifier_block *nb, unsigned long action, + * We are going to reset the interface, after this there is no point + * doing work when we take CPUs offline. + */ +- cpuhp_remove_state(CPUHP_AP_ARM_SDEI_STARTING); ++ cpuhp_remove_state(sdei_hp_state); + + sdei_platform_reset(); + +@@ -1044,13 +1045,15 @@ static int sdei_probe(struct platform_device *pdev) + goto remove_cpupm; + } + +- err = cpuhp_setup_state(CPUHP_AP_ARM_SDEI_STARTING, "SDEI", ++ err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "SDEI", + &sdei_cpuhp_up, &sdei_cpuhp_down); +- if (err) { ++ if (err < 0) { + pr_warn("Failed to register CPU hotplug notifier...\n"); + goto remove_reboot; + } + ++ sdei_hp_state = err; ++ + return 0; + + remove_reboot: +diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c +index 9c1c4d81aa7b6..3e983d98837b4 100644 +--- a/drivers/gpio/gpio-mockup.c ++++ b/drivers/gpio/gpio-mockup.c +@@ -339,7 +339,7 @@ static void gpio_mockup_debugfs_setup(struct device *dev, + priv->offset = i; + priv->desc = &gc->gpiodev->descs[i]; + +- debugfs_create_file(name, 0200, chip->dbg_dir, priv, ++ debugfs_create_file(name, 0600, chip->dbg_dir, priv, + &gpio_mockup_debugfs_ops); + } + +diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c +index 6fd57cfb112f5..96fdc18ecb3bf 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c +@@ -778,7 +778,7 @@ static void dce_transform_set_pixel_storage_depth( + color_depth = COLOR_DEPTH_101010; + pixel_depth = 0; + expan_mode = 1; +- BREAK_TO_DEBUGGER(); ++ DC_LOG_DC("The pixel depth %d is not valid, set COLOR_DEPTH_101010 instead.", depth); + break; + } + +@@ -792,8 +792,7 @@ static void dce_transform_set_pixel_storage_depth( + if (!(xfm_dce->lb_pixel_depth_supported & depth)) { + /*we should use unsupported capabilities + * unless it is required by w/a*/ +- DC_LOG_WARNING("%s: Capability not supported", +- __func__); ++ DC_LOG_DC("%s: Capability not supported", __func__); + } + } + +diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c +index b942c69e9b489..17a96f1d9234c 100644 +--- a/drivers/gpu/drm/drm_mipi_dsi.c ++++ b/drivers/gpu/drm/drm_mipi_dsi.c +@@ -221,7 +221,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host, + return dsi; + } + +- dsi->dev.of_node = info->node; ++ device_set_node(&dsi->dev, of_fwnode_handle(info->node)); + dsi->channel = info->channel; + strlcpy(dsi->name, info->type, sizeof(dsi->name)); + +diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.h b/drivers/gpu/drm/exynos/exynos_drm_g2d.h +index 74ea3c26deadc..1a5ae781b56c6 100644 +--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.h ++++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.h +@@ -34,11 +34,11 @@ static inline int exynos_g2d_exec_ioctl(struct drm_device *dev, void *data, + return -ENODEV; + } + +-int g2d_open(struct drm_device *drm_dev, struct drm_file *file) ++static inline int g2d_open(struct drm_device *drm_dev, struct drm_file *file) + { + return 0; + } + +-void g2d_close(struct drm_device *drm_dev, struct drm_file *file) ++static inline void g2d_close(struct drm_device *drm_dev, struct drm_file *file) + { } + #endif +diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c +index 0419b6105c8a5..ccd084abc8c94 100644 +--- a/drivers/gpu/drm/tegra/sor.c ++++ b/drivers/gpu/drm/tegra/sor.c +@@ -906,7 +906,7 @@ static int tegra_sor_compute_config(struct tegra_sor *sor, + struct drm_dp_link *link) + { + const u64 f = 100000, link_rate = link->rate * 1000; +- const u64 pclk = mode->clock * 1000; ++ const u64 pclk = (u64)mode->clock * 1000; + u64 input, output, watermark, num; + struct tegra_sor_params params; + u32 num_syms_per_line; +diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c +index 919551ed5809c..b8558292801ec 100644 +--- a/drivers/hid/hid-logitech-hidpp.c ++++ b/drivers/hid/hid-logitech-hidpp.c +@@ -809,8 +809,7 @@ static int hidpp_unifying_init(struct hidpp_device *hidpp) + if (ret) + return ret; + +- snprintf(hdev->uniq, sizeof(hdev->uniq), "%04x-%4phD", +- hdev->product, &serial); ++ snprintf(hdev->uniq, sizeof(hdev->uniq), "%4phD", &serial); + dbg_hid("HID++ Unifying: Got serial: %s\n", hdev->uniq); + + name = hidpp_unifying_get_name(hidpp); +@@ -903,6 +902,54 @@ print_version: + return 0; + } + ++/* -------------------------------------------------------------------------- */ ++/* 0x0003: Device Information */ ++/* -------------------------------------------------------------------------- */ ++ ++#define HIDPP_PAGE_DEVICE_INFORMATION 0x0003 ++ ++#define CMD_GET_DEVICE_INFO 0x00 ++ ++static int hidpp_get_serial(struct hidpp_device *hidpp, u32 *serial) ++{ ++ struct hidpp_report response; ++ u8 feature_type; ++ u8 feature_index; ++ int ret; ++ ++ ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_DEVICE_INFORMATION, ++ &feature_index, ++ &feature_type); ++ if (ret) ++ return ret; ++ ++ ret = hidpp_send_fap_command_sync(hidpp, feature_index, ++ CMD_GET_DEVICE_INFO, ++ NULL, 0, &response); ++ if (ret) ++ return ret; ++ ++ /* See hidpp_unifying_get_serial() */ ++ *serial = *((u32 *)&response.rap.params[1]); ++ return 0; ++} ++ ++static int hidpp_serial_init(struct hidpp_device *hidpp) ++{ ++ struct hid_device *hdev = hidpp->hid_dev; ++ u32 serial; ++ int ret; ++ ++ ret = hidpp_get_serial(hidpp, &serial); ++ if (ret) ++ return ret; ++ ++ snprintf(hdev->uniq, sizeof(hdev->uniq), "%4phD", &serial); ++ dbg_hid("HID++ DeviceInformation: Got serial: %s\n", hdev->uniq); ++ ++ return 0; ++} ++ + /* -------------------------------------------------------------------------- */ + /* 0x0005: GetDeviceNameType */ + /* -------------------------------------------------------------------------- */ +@@ -3651,6 +3698,8 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) + + if (hidpp->quirks & HIDPP_QUIRK_UNIFYING) + hidpp_unifying_init(hidpp); ++ else if (hid_is_usb(hidpp->hid_dev)) ++ hidpp_serial_init(hidpp); + + connected = hidpp_root_get_protocol_version(hidpp) == 0; + atomic_set(&hidpp->connected, connected); +diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h +index 203d27d198b81..3f8b24a57014b 100644 +--- a/drivers/hid/wacom.h ++++ b/drivers/hid/wacom.h +@@ -91,6 +91,7 @@ + #include + #include + #include ++#include + #include + + /* +@@ -167,6 +168,7 @@ struct wacom { + struct delayed_work init_work; + struct wacom_remote *remote; + struct work_struct mode_change_work; ++ struct timer_list idleprox_timer; + bool generic_has_leds; + struct wacom_leds { + struct wacom_group_leds *groups; +@@ -239,4 +241,5 @@ struct wacom_led *wacom_led_find(struct wacom *wacom, unsigned int group, + struct wacom_led *wacom_led_next(struct wacom *wacom, struct wacom_led *cur); + int wacom_equivalent_usage(int usage); + int wacom_initialize_leds(struct wacom *wacom); ++void wacom_idleprox_timeout(struct timer_list *list); + #endif +diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c +index b42785fdf7ed5..a93070f5b214c 100644 +--- a/drivers/hid/wacom_sys.c ++++ b/drivers/hid/wacom_sys.c +@@ -2781,6 +2781,7 @@ static int wacom_probe(struct hid_device *hdev, + INIT_WORK(&wacom->battery_work, wacom_battery_work); + INIT_WORK(&wacom->remote_work, wacom_remote_work); + INIT_WORK(&wacom->mode_change_work, wacom_mode_change_work); ++ timer_setup(&wacom->idleprox_timer, &wacom_idleprox_timeout, TIMER_DEFERRABLE); + + /* ask for the report descriptor to be loaded by HID */ + error = hid_parse(hdev); +@@ -2825,6 +2826,7 @@ static void wacom_remove(struct hid_device *hdev) + cancel_work_sync(&wacom->battery_work); + cancel_work_sync(&wacom->remote_work); + cancel_work_sync(&wacom->mode_change_work); ++ del_timer_sync(&wacom->idleprox_timer); + if (hdev->bus == BUS_BLUETOOTH) + device_remove_file(&hdev->dev, &dev_attr_speed); + +diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c +index 339bc7f1fcedb..099f7cccc3a7a 100644 +--- a/drivers/hid/wacom_wac.c ++++ b/drivers/hid/wacom_wac.c +@@ -11,6 +11,7 @@ + #include "wacom_wac.h" + #include "wacom.h" + #include ++#include + + /* resolution for penabled devices */ + #define WACOM_PL_RES 20 +@@ -41,6 +42,43 @@ static int wacom_numbered_button_to_key(int n); + + static void wacom_update_led(struct wacom *wacom, int button_count, int mask, + int group); ++ ++static void wacom_force_proxout(struct wacom_wac *wacom_wac) ++{ ++ struct input_dev *input = wacom_wac->pen_input; ++ ++ wacom_wac->shared->stylus_in_proximity = 0; ++ ++ input_report_key(input, BTN_TOUCH, 0); ++ input_report_key(input, BTN_STYLUS, 0); ++ input_report_key(input, BTN_STYLUS2, 0); ++ input_report_key(input, BTN_STYLUS3, 0); ++ input_report_key(input, wacom_wac->tool[0], 0); ++ if (wacom_wac->serial[0]) { ++ input_report_abs(input, ABS_MISC, 0); ++ } ++ input_report_abs(input, ABS_PRESSURE, 0); ++ ++ wacom_wac->tool[0] = 0; ++ wacom_wac->id[0] = 0; ++ wacom_wac->serial[0] = 0; ++ ++ input_sync(input); ++} ++ ++void wacom_idleprox_timeout(struct timer_list *list) ++{ ++ struct wacom *wacom = from_timer(wacom, list, idleprox_timer); ++ struct wacom_wac *wacom_wac = &wacom->wacom_wac; ++ ++ if (!wacom_wac->hid_data.sense_state) { ++ return; ++ } ++ ++ hid_warn(wacom->hdev, "%s: tool appears to be hung in-prox. forcing it out.\n", __func__); ++ wacom_force_proxout(wacom_wac); ++} ++ + /* + * Percent of battery capacity for Graphire. + * 8th value means AC online and show 100% capacity. +@@ -675,11 +713,14 @@ static int wacom_intuos_get_tool_type(int tool_id) + case 0x802: /* Intuos4/5 13HD/24HD General Pen */ + case 0x8e2: /* IntuosHT2 pen */ + case 0x022: ++ case 0x200: /* Pro Pen 3 */ ++ case 0x04200: /* Pro Pen 3 */ + case 0x10842: /* MobileStudio Pro Pro Pen slim */ + case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */ + case 0x16802: /* Cintiq 13HD Pro Pen */ + case 0x18802: /* DTH2242 Pen */ + case 0x10802: /* Intuos4/5 13HD/24HD General Pen */ ++ case 0x80842: /* Intuos Pro and Cintiq Pro 3D Pen */ + tool_type = BTN_TOOL_PEN; + break; + +@@ -1927,18 +1968,7 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage, + static void wacom_wac_battery_usage_mapping(struct hid_device *hdev, + struct hid_field *field, struct hid_usage *usage) + { +- struct wacom *wacom = hid_get_drvdata(hdev); +- struct wacom_wac *wacom_wac = &wacom->wacom_wac; +- struct wacom_features *features = &wacom_wac->features; +- unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); +- +- switch (equivalent_usage) { +- case HID_DG_BATTERYSTRENGTH: +- case WACOM_HID_WD_BATTERY_LEVEL: +- case WACOM_HID_WD_BATTERY_CHARGING: +- features->quirks |= WACOM_QUIRK_BATTERY; +- break; +- } ++ return; + } + + static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *field, +@@ -1959,18 +1989,21 @@ static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *f + wacom_wac->hid_data.bat_connected = 1; + wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO; + } ++ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY; + break; + case WACOM_HID_WD_BATTERY_LEVEL: + value = value * 100 / (field->logical_maximum - field->logical_minimum); + wacom_wac->hid_data.battery_capacity = value; + wacom_wac->hid_data.bat_connected = 1; + wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO; ++ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY; + break; + case WACOM_HID_WD_BATTERY_CHARGING: + wacom_wac->hid_data.bat_charging = value; + wacom_wac->hid_data.ps_connected = value; + wacom_wac->hid_data.bat_connected = 1; + wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO; ++ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY; + break; + } + } +@@ -1986,18 +2019,15 @@ static void wacom_wac_battery_report(struct hid_device *hdev, + { + struct wacom *wacom = hid_get_drvdata(hdev); + struct wacom_wac *wacom_wac = &wacom->wacom_wac; +- struct wacom_features *features = &wacom_wac->features; + +- if (features->quirks & WACOM_QUIRK_BATTERY) { +- int status = wacom_wac->hid_data.bat_status; +- int capacity = wacom_wac->hid_data.battery_capacity; +- bool charging = wacom_wac->hid_data.bat_charging; +- bool connected = wacom_wac->hid_data.bat_connected; +- bool powered = wacom_wac->hid_data.ps_connected; ++ int status = wacom_wac->hid_data.bat_status; ++ int capacity = wacom_wac->hid_data.battery_capacity; ++ bool charging = wacom_wac->hid_data.bat_charging; ++ bool connected = wacom_wac->hid_data.bat_connected; ++ bool powered = wacom_wac->hid_data.ps_connected; + +- wacom_notify_battery(wacom_wac, status, capacity, charging, +- connected, powered); +- } ++ wacom_notify_battery(wacom_wac, status, capacity, charging, ++ connected, powered); + } + + static void wacom_wac_pad_usage_mapping(struct hid_device *hdev, +@@ -2339,6 +2369,7 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field + value = field->logical_maximum - value; + break; + case HID_DG_INRANGE: ++ mod_timer(&wacom->idleprox_timer, jiffies + msecs_to_jiffies(100)); + wacom_wac->hid_data.inrange_state = value; + if (!(features->quirks & WACOM_QUIRK_SENSE)) + wacom_wac->hid_data.sense_state = value; +@@ -4812,6 +4843,10 @@ static const struct wacom_features wacom_features_0x3c6 = + static const struct wacom_features wacom_features_0x3c8 = + { "Wacom Intuos BT M", 21600, 13500, 4095, 63, + INTUOSHT3_BT, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4 }; ++static const struct wacom_features wacom_features_0x3dd = ++ { "Wacom Intuos Pro S", 31920, 19950, 8191, 63, ++ INTUOSP2S_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 7, ++ .touch_max = 10 }; + + static const struct wacom_features wacom_features_HID_ANY_ID = + { "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID }; +@@ -4991,6 +5026,7 @@ const struct hid_device_id wacom_ids[] = { + { BT_DEVICE_WACOM(0x393) }, + { BT_DEVICE_WACOM(0x3c6) }, + { BT_DEVICE_WACOM(0x3c8) }, ++ { BT_DEVICE_WACOM(0x3dd) }, + { USB_DEVICE_WACOM(0x4001) }, + { USB_DEVICE_WACOM(0x4004) }, + { USB_DEVICE_WACOM(0x5000) }, +diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c +index ed77c7f7b344b..763463776a0e1 100644 +--- a/drivers/hwtracing/coresight/coresight-tmc-etr.c ++++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c +@@ -909,7 +909,7 @@ tmc_etr_buf_insert_barrier_packet(struct etr_buf *etr_buf, u64 offset) + + len = tmc_etr_buf_get_data(etr_buf, offset, + CORESIGHT_BARRIER_PKT_SIZE, &bufp); +- if (WARN_ON(len < CORESIGHT_BARRIER_PKT_SIZE)) ++ if (WARN_ON(len < 0 || len < CORESIGHT_BARRIER_PKT_SIZE)) + return -EINVAL; + coresight_insert_barrier_packet(bufp); + return offset + CORESIGHT_BARRIER_PKT_SIZE; +diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c +index ad3a092b8b5c3..390123f87658b 100644 +--- a/drivers/infiniband/core/user_mad.c ++++ b/drivers/infiniband/core/user_mad.c +@@ -131,6 +131,11 @@ struct ib_umad_packet { + struct ib_user_mad mad; + }; + ++struct ib_rmpp_mad_hdr { ++ struct ib_mad_hdr mad_hdr; ++ struct ib_rmpp_hdr rmpp_hdr; ++} __packed; ++ + #define CREATE_TRACE_POINTS + #include + +@@ -494,11 +499,11 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, + size_t count, loff_t *pos) + { + struct ib_umad_file *file = filp->private_data; ++ struct ib_rmpp_mad_hdr *rmpp_mad_hdr; + struct ib_umad_packet *packet; + struct ib_mad_agent *agent; + struct rdma_ah_attr ah_attr; + struct ib_ah *ah; +- struct ib_rmpp_mad *rmpp_mad; + __be64 *tid; + int ret, data_len, hdr_len, copy_offset, rmpp_active; + u8 base_version; +@@ -506,7 +511,7 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, + if (count < hdr_size(file) + IB_MGMT_RMPP_HDR) + return -EINVAL; + +- packet = kzalloc(sizeof *packet + IB_MGMT_RMPP_HDR, GFP_KERNEL); ++ packet = kzalloc(sizeof(*packet) + IB_MGMT_RMPP_HDR, GFP_KERNEL); + if (!packet) + return -ENOMEM; + +@@ -560,13 +565,13 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, + goto err_up; + } + +- rmpp_mad = (struct ib_rmpp_mad *) packet->mad.data; +- hdr_len = ib_get_mad_data_offset(rmpp_mad->mad_hdr.mgmt_class); ++ rmpp_mad_hdr = (struct ib_rmpp_mad_hdr *)packet->mad.data; ++ hdr_len = ib_get_mad_data_offset(rmpp_mad_hdr->mad_hdr.mgmt_class); + +- if (ib_is_mad_class_rmpp(rmpp_mad->mad_hdr.mgmt_class) ++ if (ib_is_mad_class_rmpp(rmpp_mad_hdr->mad_hdr.mgmt_class) + && ib_mad_kernel_rmpp_agent(agent)) { + copy_offset = IB_MGMT_RMPP_HDR; +- rmpp_active = ib_get_rmpp_flags(&rmpp_mad->rmpp_hdr) & ++ rmpp_active = ib_get_rmpp_flags(&rmpp_mad_hdr->rmpp_hdr) & + IB_MGMT_RMPP_FLAG_ACTIVE; + } else { + copy_offset = IB_MGMT_MAD_HDR; +@@ -615,12 +620,12 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, + tid = &((struct ib_mad_hdr *) packet->msg->mad)->tid; + *tid = cpu_to_be64(((u64) agent->hi_tid) << 32 | + (be64_to_cpup(tid) & 0xffffffff)); +- rmpp_mad->mad_hdr.tid = *tid; ++ rmpp_mad_hdr->mad_hdr.tid = *tid; + } + + if (!ib_mad_kernel_rmpp_agent(agent) +- && ib_is_mad_class_rmpp(rmpp_mad->mad_hdr.mgmt_class) +- && (ib_get_rmpp_flags(&rmpp_mad->rmpp_hdr) & IB_MGMT_RMPP_FLAG_ACTIVE)) { ++ && ib_is_mad_class_rmpp(rmpp_mad_hdr->mad_hdr.mgmt_class) ++ && (ib_get_rmpp_flags(&rmpp_mad_hdr->rmpp_hdr) & IB_MGMT_RMPP_FLAG_ACTIVE)) { + spin_lock_irq(&file->send_lock); + list_add_tail(&packet->list, &file->send_list); + spin_unlock_irq(&file->send_lock); +diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c +index 70dedc0f7827c..0bd55e1fca372 100644 +--- a/drivers/input/joystick/xpad.c ++++ b/drivers/input/joystick/xpad.c +@@ -489,6 +489,9 @@ struct xboxone_init_packet { + } + + ++#define GIP_WIRED_INTF_DATA 0 ++#define GIP_WIRED_INTF_AUDIO 1 ++ + /* + * This packet is required for all Xbox One pads with 2015 + * or later firmware installed (or present from the factory). +@@ -1813,7 +1816,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id + } + + if (xpad->xtype == XTYPE_XBOXONE && +- intf->cur_altsetting->desc.bInterfaceNumber != 0) { ++ intf->cur_altsetting->desc.bInterfaceNumber != GIP_WIRED_INTF_DATA) { + /* + * The Xbox One controller lists three interfaces all with the + * same interface class, subclass and protocol. Differentiate by +diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c +index 4f64c3a9ee88d..b3c5d7b4547a4 100644 +--- a/drivers/iommu/arm-smmu-v3.c ++++ b/drivers/iommu/arm-smmu-v3.c +@@ -760,6 +760,18 @@ static void queue_inc_cons(struct arm_smmu_ll_queue *q) + q->cons = Q_OVF(q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons); + } + ++static void queue_sync_cons_ovf(struct arm_smmu_queue *q) ++{ ++ struct arm_smmu_ll_queue *llq = &q->llq; ++ ++ if (likely(Q_OVF(llq->prod) == Q_OVF(llq->cons))) ++ return; ++ ++ llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | ++ Q_IDX(llq, llq->cons); ++ queue_sync_cons_out(q); ++} ++ + static int queue_sync_prod_in(struct arm_smmu_queue *q) + { + int ret = 0; +@@ -1720,8 +1732,7 @@ static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev) + } while (!queue_empty(llq)); + + /* Sync our overflow flag, as we believe we're up to speed */ +- llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | +- Q_IDX(llq, llq->cons); ++ queue_sync_cons_ovf(q); + return IRQ_HANDLED; + } + +@@ -1779,9 +1790,7 @@ static irqreturn_t arm_smmu_priq_thread(int irq, void *dev) + } while (!queue_empty(llq)); + + /* Sync our overflow flag, as we believe we're up to speed */ +- llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | +- Q_IDX(llq, llq->cons); +- queue_sync_cons_out(q); ++ queue_sync_cons_ovf(q); + return IRQ_HANDLED; + } + +diff --git a/drivers/mcb/mcb-pci.c b/drivers/mcb/mcb-pci.c +index 14866aa22f753..22927c80ff469 100644 +--- a/drivers/mcb/mcb-pci.c ++++ b/drivers/mcb/mcb-pci.c +@@ -31,7 +31,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) + { + struct resource *res; + struct priv *priv; +- int ret; ++ int ret, table_size; + unsigned long flags; + + priv = devm_kzalloc(&pdev->dev, sizeof(struct priv), GFP_KERNEL); +@@ -90,7 +90,30 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) + if (ret < 0) + goto out_mcb_bus; + +- dev_dbg(&pdev->dev, "Found %d cells\n", ret); ++ table_size = ret; ++ ++ if (table_size < CHAM_HEADER_SIZE) { ++ /* Release the previous resources */ ++ devm_iounmap(&pdev->dev, priv->base); ++ devm_release_mem_region(&pdev->dev, priv->mapbase, CHAM_HEADER_SIZE); ++ ++ /* Then, allocate it again with the actual chameleon table size */ ++ res = devm_request_mem_region(&pdev->dev, priv->mapbase, ++ table_size, ++ KBUILD_MODNAME); ++ if (!res) { ++ dev_err(&pdev->dev, "Failed to request PCI memory\n"); ++ ret = -EBUSY; ++ goto out_mcb_bus; ++ } ++ ++ priv->base = devm_ioremap(&pdev->dev, priv->mapbase, table_size); ++ if (!priv->base) { ++ dev_err(&pdev->dev, "Cannot ioremap\n"); ++ ret = -ENOMEM; ++ goto out_mcb_bus; ++ } ++ } + + mcb_bus_add_devices(priv->bus); + +diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c +index eb5621c9ebf85..129acf595410d 100644 +--- a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c ++++ b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c +@@ -697,7 +697,7 @@ static void netup_unidvb_dma_fini(struct netup_unidvb_dev *ndev, int num) + netup_unidvb_dma_enable(dma, 0); + msleep(50); + cancel_work_sync(&dma->work); +- del_timer(&dma->timeout); ++ del_timer_sync(&dma->timeout); + } + + static int netup_unidvb_dma_setup(struct netup_unidvb_dev *ndev) +diff --git a/drivers/media/radio/radio-shark.c b/drivers/media/radio/radio-shark.c +index 8230da828d0ee..127a3be0e0f07 100644 +--- a/drivers/media/radio/radio-shark.c ++++ b/drivers/media/radio/radio-shark.c +@@ -316,6 +316,16 @@ static int usb_shark_probe(struct usb_interface *intf, + { + struct shark_device *shark; + int retval = -ENOMEM; ++ static const u8 ep_addresses[] = { ++ SHARK_IN_EP | USB_DIR_IN, ++ SHARK_OUT_EP | USB_DIR_OUT, ++ 0}; ++ ++ /* Are the expected endpoints present? */ ++ if (!usb_check_int_endpoints(intf, ep_addresses)) { ++ dev_err(&intf->dev, "Invalid radioSHARK device\n"); ++ return -EINVAL; ++ } + + shark = kzalloc(sizeof(struct shark_device), GFP_KERNEL); + if (!shark) +diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio-shark2.c +index d150f12382c60..f1c5c0a6a335c 100644 +--- a/drivers/media/radio/radio-shark2.c ++++ b/drivers/media/radio/radio-shark2.c +@@ -282,6 +282,16 @@ static int usb_shark_probe(struct usb_interface *intf, + { + struct shark_device *shark; + int retval = -ENOMEM; ++ static const u8 ep_addresses[] = { ++ SHARK_IN_EP | USB_DIR_IN, ++ SHARK_OUT_EP | USB_DIR_OUT, ++ 0}; ++ ++ /* Are the expected endpoints present? */ ++ if (!usb_check_int_endpoints(intf, ep_addresses)) { ++ dev_err(&intf->dev, "Invalid radioSHARK2 device\n"); ++ return -EINVAL; ++ } + + shark = kzalloc(sizeof(struct shark_device), GFP_KERNEL); + if (!shark) +diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c +index eaa2a94d18be4..dd06c18495eb6 100644 +--- a/drivers/memstick/host/r592.c ++++ b/drivers/memstick/host/r592.c +@@ -828,7 +828,7 @@ static void r592_remove(struct pci_dev *pdev) + /* Stop the processing thread. + That ensures that we won't take any more requests */ + kthread_stop(dev->io_thread); +- ++ del_timer_sync(&dev->detect_timer); + r592_enable_device(dev, false); + + while (!error && dev->req) { +diff --git a/drivers/message/fusion/mptlan.c b/drivers/message/fusion/mptlan.c +index ebc00d47abf52..624803a887d8f 100644 +--- a/drivers/message/fusion/mptlan.c ++++ b/drivers/message/fusion/mptlan.c +@@ -1430,7 +1430,9 @@ mptlan_remove(struct pci_dev *pdev) + { + MPT_ADAPTER *ioc = pci_get_drvdata(pdev); + struct net_device *dev = ioc->netdev; ++ struct mpt_lan_priv *priv = netdev_priv(dev); + ++ cancel_delayed_work_sync(&priv->post_buckets_task); + if(dev != NULL) { + unregister_netdev(dev); + free_netdev(dev); +diff --git a/drivers/mfd/dln2.c b/drivers/mfd/dln2.c +index 707f4287ab4a0..80952237e4b43 100644 +--- a/drivers/mfd/dln2.c ++++ b/drivers/mfd/dln2.c +@@ -797,6 +797,7 @@ out_stop_rx: + dln2_stop_rx_urbs(dln2); + + out_free: ++ usb_put_dev(dln2->usb_dev); + dln2_free(dln2); + + return ret; +diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c +index 0885991347d09..cdb9efae6032d 100644 +--- a/drivers/net/bonding/bond_main.c ++++ b/drivers/net/bonding/bond_main.c +@@ -3239,7 +3239,11 @@ static int bond_slave_netdev_event(unsigned long event, + unblock_netpoll_tx(); + break; + case NETDEV_FEAT_CHANGE: +- bond_compute_features(bond); ++ if (!bond->notifier_ctx) { ++ bond->notifier_ctx = true; ++ bond_compute_features(bond); ++ bond->notifier_ctx = false; ++ } + break; + case NETDEV_RESEND_IGMP: + /* Propagate to master device */ +@@ -4878,6 +4882,8 @@ static int bond_init(struct net_device *bond_dev) + if (!bond->wq) + return -ENOMEM; + ++ bond->notifier_ctx = false; ++ + spin_lock_init(&bond->stats_lock); + lockdep_register_key(&bond->stats_lock_key); + lockdep_set_class(&bond->stats_lock, &bond->stats_lock_key); +diff --git a/drivers/net/can/kvaser_pciefd.c b/drivers/net/can/kvaser_pciefd.c +index faa78d38d752b..560a0a5ba6f3f 100644 +--- a/drivers/net/can/kvaser_pciefd.c ++++ b/drivers/net/can/kvaser_pciefd.c +@@ -70,10 +70,12 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices"); + #define KVASER_PCIEFD_SYSID_BUILD_REG (KVASER_PCIEFD_SYSID_BASE + 0x14) + /* Shared receive buffer registers */ + #define KVASER_PCIEFD_SRB_BASE 0x1f200 ++#define KVASER_PCIEFD_SRB_FIFO_LAST_REG (KVASER_PCIEFD_SRB_BASE + 0x1f4) + #define KVASER_PCIEFD_SRB_CMD_REG (KVASER_PCIEFD_SRB_BASE + 0x200) + #define KVASER_PCIEFD_SRB_IEN_REG (KVASER_PCIEFD_SRB_BASE + 0x204) + #define KVASER_PCIEFD_SRB_IRQ_REG (KVASER_PCIEFD_SRB_BASE + 0x20c) + #define KVASER_PCIEFD_SRB_STAT_REG (KVASER_PCIEFD_SRB_BASE + 0x210) ++#define KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG (KVASER_PCIEFD_SRB_BASE + 0x214) + #define KVASER_PCIEFD_SRB_CTRL_REG (KVASER_PCIEFD_SRB_BASE + 0x218) + /* EPCS flash controller registers */ + #define KVASER_PCIEFD_SPI_BASE 0x1fc00 +@@ -110,6 +112,9 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices"); + /* DMA support */ + #define KVASER_PCIEFD_SRB_STAT_DMA BIT(24) + ++/* SRB current packet level */ ++#define KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK 0xff ++ + /* DMA Enable */ + #define KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE BIT(0) + +@@ -528,7 +533,7 @@ static int kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can) + KVASER_PCIEFD_KCAN_IRQ_TOF | KVASER_PCIEFD_KCAN_IRQ_ABD | + KVASER_PCIEFD_KCAN_IRQ_TAE | KVASER_PCIEFD_KCAN_IRQ_TAL | + KVASER_PCIEFD_KCAN_IRQ_FDIC | KVASER_PCIEFD_KCAN_IRQ_BPP | +- KVASER_PCIEFD_KCAN_IRQ_TAR | KVASER_PCIEFD_KCAN_IRQ_TFD; ++ KVASER_PCIEFD_KCAN_IRQ_TAR; + + iowrite32(msk, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + +@@ -556,6 +561,8 @@ static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can) + + if (can->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) + mode |= KVASER_PCIEFD_KCAN_MODE_LOM; ++ else ++ mode &= ~KVASER_PCIEFD_KCAN_MODE_LOM; + + mode |= KVASER_PCIEFD_KCAN_MODE_EEN; + mode |= KVASER_PCIEFD_KCAN_MODE_EPEN; +@@ -574,7 +581,7 @@ static void kvaser_pciefd_start_controller_flush(struct kvaser_pciefd_can *can) + + spin_lock_irqsave(&can->lock, irq); + iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG); +- iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD, ++ iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD, + can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + + status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG); +@@ -617,7 +624,7 @@ static int kvaser_pciefd_bus_on(struct kvaser_pciefd_can *can) + iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG); + +- iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD, ++ iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD, + can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + + mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG); +@@ -719,6 +726,7 @@ static int kvaser_pciefd_stop(struct net_device *netdev) + iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + del_timer(&can->bec_poll_timer); + } ++ can->can.state = CAN_STATE_STOPPED; + close_candev(netdev); + + return ret; +@@ -1001,8 +1009,7 @@ static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie) + SET_NETDEV_DEV(netdev, &pcie->pci->dev); + + iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG); +- iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | +- KVASER_PCIEFD_KCAN_IRQ_TFD, ++ iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD, + can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + + pcie->can[i] = can; +@@ -1052,6 +1059,7 @@ static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie) + { + int i; + u32 srb_status; ++ u32 srb_packet_count; + dma_addr_t dma_addr[KVASER_PCIEFD_DMA_COUNT]; + + /* Disable the DMA */ +@@ -1079,6 +1087,15 @@ static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie) + KVASER_PCIEFD_SRB_CMD_RDB1, + pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG); + ++ /* Empty Rx FIFO */ ++ srb_packet_count = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG) & ++ KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK; ++ while (srb_packet_count) { ++ /* Drop current packet in FIFO */ ++ ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_FIFO_LAST_REG); ++ srb_packet_count--; ++ } ++ + srb_status = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_STAT_REG); + if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DI)) { + dev_err(&pcie->pci->dev, "DMA not idle before enabling\n"); +@@ -1421,9 +1438,6 @@ static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie, + cmd = KVASER_PCIEFD_KCAN_CMD_AT; + cmd |= ++can->cmd_seq << KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT; + iowrite32(cmd, can->reg_base + KVASER_PCIEFD_KCAN_CMD_REG); +- +- iowrite32(KVASER_PCIEFD_KCAN_IRQ_TFD, +- can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); + } else if (p->header[0] & KVASER_PCIEFD_SPACK_IDET && + p->header[0] & KVASER_PCIEFD_SPACK_IRM && + cmdseq == (p->header[1] & KVASER_PCIEFD_PACKET_SEQ_MSK) && +@@ -1712,15 +1726,6 @@ static int kvaser_pciefd_transmit_irq(struct kvaser_pciefd_can *can) + if (irq & KVASER_PCIEFD_KCAN_IRQ_TOF) + netdev_err(can->can.dev, "Tx FIFO overflow\n"); + +- if (irq & KVASER_PCIEFD_KCAN_IRQ_TFD) { +- u8 count = ioread32(can->reg_base + +- KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff; +- +- if (count == 0) +- iowrite32(KVASER_PCIEFD_KCAN_CTRL_EFLUSH, +- can->reg_base + KVASER_PCIEFD_KCAN_CTRL_REG); +- } +- + if (irq & KVASER_PCIEFD_KCAN_IRQ_BPP) + netdev_err(can->can.dev, + "Fail to change bittiming, when not in reset mode\n"); +@@ -1822,6 +1827,11 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev, + if (err) + goto err_teardown_can_ctrls; + ++ err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler, ++ IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie); ++ if (err) ++ goto err_teardown_can_ctrls; ++ + iowrite32(KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1, + pcie->reg_base + KVASER_PCIEFD_SRB_IRQ_REG); + +@@ -1842,11 +1852,6 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev, + iowrite32(KVASER_PCIEFD_SRB_CMD_RDB1, + pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG); + +- err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler, +- IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie); +- if (err) +- goto err_teardown_can_ctrls; +- + err = kvaser_pciefd_reg_candev(pcie); + if (err) + goto err_free_irq; +@@ -1854,6 +1859,8 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev, + return 0; + + err_free_irq: ++ /* Disable PCI interrupts */ ++ iowrite32(0, pcie->reg_base + KVASER_PCIEFD_IEN_REG); + free_irq(pcie->pci->irq, pcie); + + err_teardown_can_ctrls: +diff --git a/drivers/net/ethernet/3com/3c589_cs.c b/drivers/net/ethernet/3com/3c589_cs.c +index 2b2695311bda9..aab26dbe76ff9 100644 +--- a/drivers/net/ethernet/3com/3c589_cs.c ++++ b/drivers/net/ethernet/3com/3c589_cs.c +@@ -196,6 +196,7 @@ static int tc589_probe(struct pcmcia_device *link) + { + struct el3_private *lp; + struct net_device *dev; ++ int ret; + + dev_dbg(&link->dev, "3c589_attach()\n"); + +@@ -219,7 +220,15 @@ static int tc589_probe(struct pcmcia_device *link) + + dev->ethtool_ops = &netdev_ethtool_ops; + +- return tc589_config(link); ++ ret = tc589_config(link); ++ if (ret) ++ goto err_free_netdev; ++ ++ return 0; ++ ++err_free_netdev: ++ free_netdev(dev); ++ return ret; + } + + static void tc589_detach(struct pcmcia_device *link) +diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c +index 1b725a021455b..750acbf294640 100644 +--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c ++++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c +@@ -2973,7 +2973,7 @@ err_clk_disable: + return ret; + } + +-static void bcmgenet_netif_stop(struct net_device *dev) ++static void bcmgenet_netif_stop(struct net_device *dev, bool stop_phy) + { + struct bcmgenet_priv *priv = netdev_priv(dev); + +@@ -2988,7 +2988,8 @@ static void bcmgenet_netif_stop(struct net_device *dev) + /* Disable MAC transmit. TX DMA disabled must be done before this */ + umac_enable_set(priv, CMD_TX_EN, false); + +- phy_stop(dev->phydev); ++ if (stop_phy) ++ phy_stop(dev->phydev); + bcmgenet_disable_rx_napi(priv); + bcmgenet_intr_disable(priv); + +@@ -3014,7 +3015,7 @@ static int bcmgenet_close(struct net_device *dev) + + netif_dbg(priv, ifdown, dev, "bcmgenet_close\n"); + +- bcmgenet_netif_stop(dev); ++ bcmgenet_netif_stop(dev, false); + + /* Really kill the PHY state machine and disconnect from it */ + phy_disconnect(dev->phydev); +@@ -3712,7 +3713,7 @@ static int bcmgenet_suspend(struct device *d) + + netif_device_detach(dev); + +- bcmgenet_netif_stop(dev); ++ bcmgenet_netif_stop(dev, true); + + if (!device_may_wakeup(d)) + phy_suspend(dev->phydev); +diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c +index e1b8c58c4d6b2..f67f104049dba 100644 +--- a/drivers/net/ethernet/freescale/fec_main.c ++++ b/drivers/net/ethernet/freescale/fec_main.c +@@ -3769,7 +3769,9 @@ fec_drv_remove(struct platform_device *pdev) + + ret = pm_runtime_get_sync(&pdev->dev); + if (ret < 0) +- return ret; ++ dev_err(&pdev->dev, ++ "Failed to resume device in remove callback (%pe)\n", ++ ERR_PTR(ret)); + + cancel_work_sync(&fep->tx_timeout_work); + fec_ptp_stop(pdev); +@@ -3782,8 +3784,13 @@ fec_drv_remove(struct platform_device *pdev) + of_phy_deregister_fixed_link(np); + of_node_put(fep->phy_node); + +- clk_disable_unprepare(fep->clk_ahb); +- clk_disable_unprepare(fep->clk_ipg); ++ /* After pm_runtime_get_sync() failed, the clks are still off, so skip ++ * disabling them again. ++ */ ++ if (ret >= 0) { ++ clk_disable_unprepare(fep->clk_ahb); ++ clk_disable_unprepare(fep->clk_ipg); ++ } + pm_runtime_put_noidle(&pdev->dev); + pm_runtime_disable(&pdev->dev); + +diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +index d58abdfdb9b7b..08277c3cf2806 100644 +--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c ++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +@@ -6688,12 +6688,15 @@ static void hclge_ae_stop(struct hnae3_handle *handle) + /* If it is not PF reset or FLR, the firmware will disable the MAC, + * so it only need to stop phy here. + */ +- if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) && +- hdev->reset_type != HNAE3_FUNC_RESET && +- hdev->reset_type != HNAE3_FLR_RESET) { +- hclge_mac_stop_phy(hdev); +- hclge_update_link_status(hdev); +- return; ++ if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) { ++ hclge_pfc_pause_en_cfg(hdev, HCLGE_PFC_TX_RX_DISABLE, ++ HCLGE_PFC_DISABLE); ++ if (hdev->reset_type != HNAE3_FUNC_RESET && ++ hdev->reset_type != HNAE3_FLR_RESET) { ++ hclge_mac_stop_phy(hdev); ++ hclge_update_link_status(hdev); ++ return; ++ } + } + + for (i = 0; i < handle->kinfo.num_tqps; i++) +diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c +index 8448607742a6b..2183e700f9d96 100644 +--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c ++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c +@@ -170,8 +170,8 @@ int hclge_mac_pause_en_cfg(struct hclge_dev *hdev, bool tx, bool rx) + return hclge_cmd_send(&hdev->hw, &desc, 1); + } + +-static int hclge_pfc_pause_en_cfg(struct hclge_dev *hdev, u8 tx_rx_bitmap, +- u8 pfc_bitmap) ++int hclge_pfc_pause_en_cfg(struct hclge_dev *hdev, u8 tx_rx_bitmap, ++ u8 pfc_bitmap) + { + struct hclge_desc desc; + struct hclge_pfc_en_cmd *pfc = (struct hclge_pfc_en_cmd *)desc.data; +diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h +index 260f22d19d81a..406084bb23072 100644 +--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h ++++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h +@@ -109,6 +109,9 @@ struct hclge_bp_to_qs_map_cmd { + u32 rsvd1; + }; + ++#define HCLGE_PFC_DISABLE 0 ++#define HCLGE_PFC_TX_RX_DISABLE 0 ++ + struct hclge_pfc_en_cmd { + u8 tx_rx_en_bitmap; + u8 pri_en_bitmap; +@@ -150,6 +153,8 @@ void hclge_tm_schd_info_update(struct hclge_dev *hdev, u8 num_tc); + void hclge_tm_pfc_info_update(struct hclge_dev *hdev); + int hclge_tm_dwrr_cfg(struct hclge_dev *hdev); + int hclge_tm_init_hw(struct hclge_dev *hdev, bool init); ++int hclge_pfc_pause_en_cfg(struct hclge_dev *hdev, u8 tx_rx_bitmap, ++ u8 pfc_bitmap); + int hclge_mac_pause_en_cfg(struct hclge_dev *hdev, bool tx, bool rx); + int hclge_pause_addr_cfg(struct hclge_dev *hdev, const u8 *mac_addr); + int hclge_pfc_rx_stats_get(struct hclge_dev *hdev, u64 *stats); +diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +index 48956c30d2eee..ec3d98595198e 100644 +--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c ++++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +@@ -1432,7 +1432,10 @@ static int hclgevf_reset_wait(struct hclgevf_dev *hdev) + * might happen in case reset assertion was made by PF. Yes, this also + * means we might end up waiting bit more even for VF reset. + */ +- msleep(5000); ++ if (hdev->reset_type == HNAE3_VF_FULL_RESET) ++ msleep(5000); ++ else ++ msleep(500); + + return 0; + } +diff --git a/drivers/net/ethernet/intel/igb/e1000_mac.c b/drivers/net/ethernet/intel/igb/e1000_mac.c +index 79ee0a7472608..4e69cb2c025fd 100644 +--- a/drivers/net/ethernet/intel/igb/e1000_mac.c ++++ b/drivers/net/ethernet/intel/igb/e1000_mac.c +@@ -425,7 +425,7 @@ void igb_mta_set(struct e1000_hw *hw, u32 hash_value) + static u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) + { + u32 hash_value, hash_mask; +- u8 bit_shift = 0; ++ u8 bit_shift = 1; + + /* Register count multiplied by bits per register */ + hash_mask = (hw->mac.mta_reg_count * 32) - 1; +@@ -433,7 +433,7 @@ static u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) + /* For a mc_filter_type of 0, bit_shift is the number of left-shifts + * where 0xFF would still fall within the hash mask. + */ +- while (hash_mask >> bit_shift != 0xFF) ++ while (hash_mask >> bit_shift != 0xFF && bit_shift < 4) + bit_shift++; + + /* The portion of the address that is used for the hash table +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c +index bced2efe9bef4..abd066e952286 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c +@@ -110,7 +110,8 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev) + priv->devs[idx] = dev; + devcom = mlx5_devcom_alloc(priv, idx); + if (!devcom) { +- kfree(priv); ++ if (new_priv) ++ kfree(priv); + return ERR_PTR(-ENOMEM); + } + +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c +index 83ee9429e7c65..ff9ac7cffc321 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c +@@ -887,7 +887,7 @@ static int mlx5_init_once(struct mlx5_core_dev *dev) + + dev->dm = mlx5_dm_create(dev); + if (IS_ERR(dev->dm)) +- mlx5_core_warn(dev, "Failed to init device memory%d\n", err); ++ mlx5_core_warn(dev, "Failed to init device memory %ld\n", PTR_ERR(dev->dm)); + + dev->tracer = mlx5_fw_tracer_create(dev); + dev->hv_vhca = mlx5_hv_vhca_create(dev); +diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c +index 05d2b478c99bd..d069017d43a3e 100644 +--- a/drivers/net/ethernet/nvidia/forcedeth.c ++++ b/drivers/net/ethernet/nvidia/forcedeth.c +@@ -6099,6 +6099,7 @@ static int nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) + return 0; + + out_error: ++ nv_mgmt_release_sema(dev); + if (phystate_orig) + writel(phystate|NVREG_ADAPTCTL_RUNNING, base + NvRegAdapterControl); + out_freering: +diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c b/drivers/net/ethernet/pasemi/pasemi_mac.c +index 040a15a828b41..c1d7bd168f1d1 100644 +--- a/drivers/net/ethernet/pasemi/pasemi_mac.c ++++ b/drivers/net/ethernet/pasemi/pasemi_mac.c +@@ -1423,7 +1423,7 @@ static void pasemi_mac_queue_csdesc(const struct sk_buff *skb, + write_dma_reg(PAS_DMA_TXCHAN_INCR(txring->chan.chno), 2); + } + +-static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev) ++static netdev_tx_t pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev) + { + struct pasemi_mac * const mac = netdev_priv(dev); + struct pasemi_mac_txring * const txring = tx_ring(mac); +diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c +index 6e78a33aa5e47..ecaa9beee76eb 100644 +--- a/drivers/net/ethernet/sun/cassini.c ++++ b/drivers/net/ethernet/sun/cassini.c +@@ -5138,6 +5138,8 @@ err_out_iounmap: + cas_shutdown(cp); + mutex_unlock(&cp->pm_mutex); + ++ vfree(cp->fw_data); ++ + pci_iounmap(pdev, cp->regs); + + +diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c +index a33149ee0ddcf..0a5b5ff597c6f 100644 +--- a/drivers/net/ipvlan/ipvlan_core.c ++++ b/drivers/net/ipvlan/ipvlan_core.c +@@ -437,6 +437,9 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb) + goto err; + } + skb_dst_set(skb, &rt->dst); ++ ++ memset(IPCB(skb), 0, sizeof(*IPCB(skb))); ++ + err = ip_local_out(net, skb->sk, skb); + if (unlikely(net_xmit_eval(err))) + dev->stats.tx_errors++; +@@ -475,6 +478,9 @@ static int ipvlan_process_v6_outbound(struct sk_buff *skb) + goto err; + } + skb_dst_set(skb, dst); ++ ++ memset(IP6CB(skb), 0, sizeof(*IP6CB(skb))); ++ + err = ip6_local_out(net, skb->sk, skb); + if (unlikely(net_xmit_eval(err))) + dev->stats.tx_errors++; +diff --git a/drivers/net/tap.c b/drivers/net/tap.c +index a522d1673fa87..574c17aa4b09a 100644 +--- a/drivers/net/tap.c ++++ b/drivers/net/tap.c +@@ -715,9 +715,8 @@ static ssize_t tap_get_user(struct tap_queue *q, void *msg_control, + skb_probe_transport_header(skb); + + /* Move network header to the right position for VLAN tagged packets */ +- if ((skb->protocol == htons(ETH_P_8021Q) || +- skb->protocol == htons(ETH_P_8021AD)) && +- __vlan_get_protocol(skb, skb->protocol, &depth) != 0) ++ if (eth_type_vlan(skb->protocol) && ++ vlan_get_protocol_and_depth(skb, skb->protocol, &depth) != 0) + skb_set_network_header(skb, depth); + + rcu_read_lock(); +@@ -1177,9 +1176,8 @@ static int tap_get_user_xdp(struct tap_queue *q, struct xdp_buff *xdp) + } + + /* Move network header to the right position for VLAN tagged packets */ +- if ((skb->protocol == htons(ETH_P_8021Q) || +- skb->protocol == htons(ETH_P_8021AD)) && +- __vlan_get_protocol(skb, skb->protocol, &depth) != 0) ++ if (eth_type_vlan(skb->protocol) && ++ vlan_get_protocol_and_depth(skb, skb->protocol, &depth) != 0) + skb_set_network_header(skb, depth); + + rcu_read_lock(); +diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c +index da74ec778b6e7..227d97b4dc224 100644 +--- a/drivers/net/team/team.c ++++ b/drivers/net/team/team.c +@@ -1624,6 +1624,7 @@ static int team_init(struct net_device *dev) + + team->dev = dev; + team_set_no_mode(team); ++ team->notifier_ctx = false; + + team->pcpu_stats = netdev_alloc_pcpu_stats(struct team_pcpu_stats); + if (!team->pcpu_stats) +@@ -3015,7 +3016,11 @@ static int team_device_event(struct notifier_block *unused, + team_del_slave(port->team->dev, dev); + break; + case NETDEV_FEAT_CHANGE: +- team_compute_features(port->team); ++ if (!port->team->notifier_ctx) { ++ port->team->notifier_ctx = true; ++ team_compute_features(port->team); ++ port->team->notifier_ctx = false; ++ } + break; + case NETDEV_PRECHANGEMTU: + /* Forbid to change mtu of underlaying device */ +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +index 5bfff309f5474..b7ceea0b3204d 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -1269,13 +1269,14 @@ static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len) + { + struct brcmf_pub *drvr = ifp->drvr; + struct brcmf_wsec_pmk_le pmk; +- int i, err; ++ int err; ++ ++ memset(&pmk, 0, sizeof(pmk)); + +- /* convert to firmware key format */ +- pmk.key_len = cpu_to_le16(pmk_len << 1); +- pmk.flags = cpu_to_le16(BRCMF_WSEC_PASSPHRASE); +- for (i = 0; i < pmk_len; i++) +- snprintf(&pmk.key[2 * i], 3, "%02x", pmk_data[i]); ++ /* pass pmk directly */ ++ pmk.key_len = cpu_to_le16(pmk_len); ++ pmk.flags = cpu_to_le16(0); ++ memcpy(pmk.key, pmk_data, pmk_len); + + /* store psk in firmware */ + err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_WSEC_PMK, +diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c +index 51158edce15b0..f30fdbedd7172 100644 +--- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c ++++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c +@@ -1086,6 +1086,7 @@ static int iwlagn_send_sta_key(struct iwl_priv *priv, + { + __le16 key_flags; + struct iwl_addsta_cmd sta_cmd; ++ size_t to_copy; + int i; + + spin_lock_bh(&priv->sta_lock); +@@ -1105,7 +1106,9 @@ static int iwlagn_send_sta_key(struct iwl_priv *priv, + sta_cmd.key.tkip_rx_tsc_byte2 = tkip_iv32; + for (i = 0; i < 5; i++) + sta_cmd.key.tkip_rx_ttak[i] = cpu_to_le16(tkip_p1k[i]); +- memcpy(sta_cmd.key.key, keyconf->key, keyconf->keylen); ++ /* keyconf may contain MIC rx/tx keys which iwl does not use */ ++ to_copy = min_t(size_t, sizeof(sta_cmd.key.key), keyconf->keylen); ++ memcpy(sta_cmd.key.key, keyconf->key, to_copy); + break; + case WLAN_CIPHER_SUITE_WEP104: + key_flags |= STA_KEY_FLG_KEY_SIZE_MSK; +diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +index f49887379c43f..f485c0dd75d60 100644 +--- a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c ++++ b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +@@ -508,6 +508,11 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, + struct iwl_mcc_update_resp *mcc_resp = (void *)pkt->data; + + n_channels = __le32_to_cpu(mcc_resp->n_channels); ++ if (iwl_rx_packet_payload_len(pkt) != ++ struct_size(mcc_resp, channels, n_channels)) { ++ resp_cp = ERR_PTR(-EINVAL); ++ goto exit; ++ } + resp_len = sizeof(struct iwl_mcc_update_resp) + + n_channels * sizeof(__le32); + resp_cp = kmemdup(mcc_resp, resp_len, GFP_KERNEL); +@@ -519,6 +524,11 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, + struct iwl_mcc_update_resp_v3 *mcc_resp_v3 = (void *)pkt->data; + + n_channels = __le32_to_cpu(mcc_resp_v3->n_channels); ++ if (iwl_rx_packet_payload_len(pkt) != ++ struct_size(mcc_resp_v3, channels, n_channels)) { ++ resp_cp = ERR_PTR(-EINVAL); ++ goto exit; ++ } + resp_len = sizeof(struct iwl_mcc_update_resp) + + n_channels * sizeof(__le32); + resp_cp = kzalloc(resp_len, GFP_KERNEL); +diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +index f34297fd453c0..5153314e85554 100644 +--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +@@ -1173,6 +1173,9 @@ static void iwl_pci_remove(struct pci_dev *pdev) + { + struct iwl_trans *trans = pci_get_drvdata(pdev); + ++ if (!trans) ++ return; ++ + iwl_drv_stop(trans->drv); + + iwl_trans_pcie_free(trans); +diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c +index 3a93a7b8ba0af..e7b90cf1f28cf 100644 +--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c ++++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c +@@ -2832,7 +2832,7 @@ static bool iwl_write_to_user_buf(char __user *user_buf, ssize_t count, + void *buf, ssize_t *size, + ssize_t *bytes_copied) + { +- int buf_size_left = count - *bytes_copied; ++ ssize_t buf_size_left = count - *bytes_copied; + + buf_size_left = buf_size_left - (buf_size_left % sizeof(u32)); + if (*size > buf_size_left) +diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c +index a6c530b9ceee0..0c813e2b9d29a 100644 +--- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c ++++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c +@@ -13,10 +13,7 @@ + #include "../dma.h" + #include "mac.h" + +-static inline s8 to_rssi(u32 field, u32 rxv) +-{ +- return (FIELD_GET(field, rxv) - 220) / 2; +-} ++#define to_rssi(field, rxv) ((FIELD_GET(field, rxv) - 220) / 2) + + static struct mt76_wcid *mt7615_rx_get_wcid(struct mt7615_dev *dev, + u8 idx, bool unicast) +diff --git a/drivers/phy/st/phy-miphy28lp.c b/drivers/phy/st/phy-miphy28lp.c +index 068160a34f5cc..e30305b77f0d1 100644 +--- a/drivers/phy/st/phy-miphy28lp.c ++++ b/drivers/phy/st/phy-miphy28lp.c +@@ -9,6 +9,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -484,19 +485,11 @@ static inline void miphy28lp_pcie_config_gen(struct miphy28lp_phy *miphy_phy) + + static inline int miphy28lp_wait_compensation(struct miphy28lp_phy *miphy_phy) + { +- unsigned long finish = jiffies + 5 * HZ; + u8 val; + + /* Waiting for Compensation to complete */ +- do { +- val = readb_relaxed(miphy_phy->base + MIPHY_COMP_FSM_6); +- +- if (time_after_eq(jiffies, finish)) +- return -EBUSY; +- cpu_relax(); +- } while (!(val & COMP_DONE)); +- +- return 0; ++ return readb_relaxed_poll_timeout(miphy_phy->base + MIPHY_COMP_FSM_6, ++ val, val & COMP_DONE, 1, 5 * USEC_PER_SEC); + } + + +@@ -805,7 +798,6 @@ static inline void miphy28lp_configure_usb3(struct miphy28lp_phy *miphy_phy) + + static inline int miphy_is_ready(struct miphy28lp_phy *miphy_phy) + { +- unsigned long finish = jiffies + 5 * HZ; + u8 mask = HFC_PLL | HFC_RDY; + u8 val; + +@@ -816,21 +808,14 @@ static inline int miphy_is_ready(struct miphy28lp_phy *miphy_phy) + if (miphy_phy->type == PHY_TYPE_SATA) + mask |= PHY_RDY; + +- do { +- val = readb_relaxed(miphy_phy->base + MIPHY_STATUS_1); +- if ((val & mask) != mask) +- cpu_relax(); +- else +- return 0; +- } while (!time_after_eq(jiffies, finish)); +- +- return -EBUSY; ++ return readb_relaxed_poll_timeout(miphy_phy->base + MIPHY_STATUS_1, ++ val, (val & mask) == mask, 1, ++ 5 * USEC_PER_SEC); + } + + static int miphy_osc_is_ready(struct miphy28lp_phy *miphy_phy) + { + struct miphy28lp_dev *miphy_dev = miphy_phy->phydev; +- unsigned long finish = jiffies + 5 * HZ; + u32 val; + + if (!miphy_phy->osc_rdy) +@@ -839,17 +824,10 @@ static int miphy_osc_is_ready(struct miphy28lp_phy *miphy_phy) + if (!miphy_phy->syscfg_reg[SYSCFG_STATUS]) + return -EINVAL; + +- do { +- regmap_read(miphy_dev->regmap, +- miphy_phy->syscfg_reg[SYSCFG_STATUS], &val); +- +- if ((val & MIPHY_OSC_RDY) != MIPHY_OSC_RDY) +- cpu_relax(); +- else +- return 0; +- } while (!time_after_eq(jiffies, finish)); +- +- return -EBUSY; ++ return regmap_read_poll_timeout(miphy_dev->regmap, ++ miphy_phy->syscfg_reg[SYSCFG_STATUS], ++ val, val & MIPHY_OSC_RDY, 1, ++ 5 * USEC_PER_SEC); + } + + static int miphy28lp_get_resource_byname(struct device_node *child, +diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c +index b1a37aa388800..b45cbd40294b9 100644 +--- a/drivers/power/supply/bq27xxx_battery.c ++++ b/drivers/power/supply/bq27xxx_battery.c +@@ -1547,7 +1547,7 @@ static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di) + return POWER_SUPPLY_HEALTH_GOOD; + } + +-void bq27xxx_battery_update(struct bq27xxx_device_info *di) ++static void bq27xxx_battery_update_unlocked(struct bq27xxx_device_info *di) + { + struct bq27xxx_reg_cache cache = {0, }; + bool has_ci_flag = di->opts & BQ27XXX_O_ZERO; +@@ -1597,6 +1597,16 @@ void bq27xxx_battery_update(struct bq27xxx_device_info *di) + di->cache = cache; + + di->last_update = jiffies; ++ ++ if (!di->removed && poll_interval > 0) ++ mod_delayed_work(system_wq, &di->work, poll_interval * HZ); ++} ++ ++void bq27xxx_battery_update(struct bq27xxx_device_info *di) ++{ ++ mutex_lock(&di->lock); ++ bq27xxx_battery_update_unlocked(di); ++ mutex_unlock(&di->lock); + } + EXPORT_SYMBOL_GPL(bq27xxx_battery_update); + +@@ -1607,9 +1617,6 @@ static void bq27xxx_battery_poll(struct work_struct *work) + work.work); + + bq27xxx_battery_update(di); +- +- if (poll_interval > 0) +- schedule_delayed_work(&di->work, poll_interval * HZ); + } + + /* +@@ -1770,10 +1777,8 @@ static int bq27xxx_battery_get_property(struct power_supply *psy, + struct bq27xxx_device_info *di = power_supply_get_drvdata(psy); + + mutex_lock(&di->lock); +- if (time_is_before_jiffies(di->last_update + 5 * HZ)) { +- cancel_delayed_work_sync(&di->work); +- bq27xxx_battery_poll(&di->work.work); +- } ++ if (time_is_before_jiffies(di->last_update + 5 * HZ)) ++ bq27xxx_battery_update_unlocked(di); + mutex_unlock(&di->lock); + + if (psp != POWER_SUPPLY_PROP_PRESENT && di->cache.flags < 0) +@@ -1910,22 +1915,18 @@ EXPORT_SYMBOL_GPL(bq27xxx_battery_setup); + + void bq27xxx_battery_teardown(struct bq27xxx_device_info *di) + { +- /* +- * power_supply_unregister call bq27xxx_battery_get_property which +- * call bq27xxx_battery_poll. +- * Make sure that bq27xxx_battery_poll will not call +- * schedule_delayed_work again after unregister (which cause OOPS). +- */ +- poll_interval = 0; +- +- cancel_delayed_work_sync(&di->work); +- +- power_supply_unregister(di->bat); +- + mutex_lock(&bq27xxx_list_lock); + list_del(&di->list); + mutex_unlock(&bq27xxx_list_lock); + ++ /* Set removed to avoid bq27xxx_battery_update() re-queuing the work */ ++ mutex_lock(&di->lock); ++ di->removed = true; ++ mutex_unlock(&di->lock); ++ ++ cancel_delayed_work_sync(&di->work); ++ ++ power_supply_unregister(di->bat); + mutex_destroy(&di->lock); + } + EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown); +diff --git a/drivers/power/supply/bq27xxx_battery_i2c.c b/drivers/power/supply/bq27xxx_battery_i2c.c +index 34229c1f43e31..01800cd97e3af 100644 +--- a/drivers/power/supply/bq27xxx_battery_i2c.c ++++ b/drivers/power/supply/bq27xxx_battery_i2c.c +@@ -187,7 +187,7 @@ static int bq27xxx_battery_i2c_probe(struct i2c_client *client, + i2c_set_clientdata(client, di); + + if (client->irq) { +- ret = devm_request_threaded_irq(&client->dev, client->irq, ++ ret = request_threaded_irq(client->irq, + NULL, bq27xxx_battery_irq_handler_thread, + IRQF_ONESHOT, + di->name, di); +@@ -217,6 +217,7 @@ static int bq27xxx_battery_i2c_remove(struct i2c_client *client) + { + struct bq27xxx_device_info *di = i2c_get_clientdata(client); + ++ free_irq(client->irq, di); + bq27xxx_battery_teardown(di); + + mutex_lock(&battery_mutex); +diff --git a/drivers/power/supply/power_supply_leds.c b/drivers/power/supply/power_supply_leds.c +index d69880cc35931..b7a2778f878de 100644 +--- a/drivers/power/supply/power_supply_leds.c ++++ b/drivers/power/supply/power_supply_leds.c +@@ -34,8 +34,9 @@ static void power_supply_update_bat_leds(struct power_supply *psy) + led_trigger_event(psy->charging_full_trig, LED_FULL); + led_trigger_event(psy->charging_trig, LED_OFF); + led_trigger_event(psy->full_trig, LED_FULL); +- led_trigger_event(psy->charging_blink_full_solid_trig, +- LED_FULL); ++ /* Going from blink to LED on requires a LED_OFF event to stop blink */ ++ led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF); ++ led_trigger_event(psy->charging_blink_full_solid_trig, LED_FULL); + break; + case POWER_SUPPLY_STATUS_CHARGING: + led_trigger_event(psy->charging_full_trig, LED_FULL); +diff --git a/drivers/power/supply/sbs-charger.c b/drivers/power/supply/sbs-charger.c +index fbfb6a6209617..a30eb42e379a4 100644 +--- a/drivers/power/supply/sbs-charger.c ++++ b/drivers/power/supply/sbs-charger.c +@@ -25,7 +25,7 @@ + #define SBS_CHARGER_REG_STATUS 0x13 + #define SBS_CHARGER_REG_ALARM_WARNING 0x16 + +-#define SBS_CHARGER_STATUS_CHARGE_INHIBITED BIT(1) ++#define SBS_CHARGER_STATUS_CHARGE_INHIBITED BIT(0) + #define SBS_CHARGER_STATUS_RES_COLD BIT(9) + #define SBS_CHARGER_STATUS_RES_HOT BIT(10) + #define SBS_CHARGER_STATUS_BATTERY_PRESENT BIT(14) +diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h +index 3b0a4483a2520..c78651be8d139 100644 +--- a/drivers/s390/cio/qdio.h ++++ b/drivers/s390/cio/qdio.h +@@ -88,15 +88,15 @@ enum qdio_irq_states { + static inline int do_sqbs(u64 token, unsigned char state, int queue, + int *start, int *count) + { +- register unsigned long _ccq asm ("0") = *count; +- register unsigned long _token asm ("1") = token; + unsigned long _queuestart = ((unsigned long)queue << 32) | *start; ++ unsigned long _ccq = *count; + + asm volatile( +- " .insn rsy,0xeb000000008A,%1,0,0(%2)" +- : "+d" (_ccq), "+d" (_queuestart) +- : "d" ((unsigned long)state), "d" (_token) +- : "memory", "cc"); ++ " lgr 1,%[token]\n" ++ " .insn rsy,0xeb000000008a,%[qs],%[ccq],0(%[state])" ++ : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart) ++ : [state] "a" ((unsigned long)state), [token] "d" (token) ++ : "memory", "cc", "1"); + *count = _ccq & 0xff; + *start = _queuestart & 0xff; + +@@ -106,16 +106,17 @@ static inline int do_sqbs(u64 token, unsigned char state, int queue, + static inline int do_eqbs(u64 token, unsigned char *state, int queue, + int *start, int *count, int ack) + { +- register unsigned long _ccq asm ("0") = *count; +- register unsigned long _token asm ("1") = token; + unsigned long _queuestart = ((unsigned long)queue << 32) | *start; + unsigned long _state = (unsigned long)ack << 63; ++ unsigned long _ccq = *count; + + asm volatile( +- " .insn rrf,0xB99c0000,%1,%2,0,0" +- : "+d" (_ccq), "+d" (_queuestart), "+d" (_state) +- : "d" (_token) +- : "memory", "cc"); ++ " lgr 1,%[token]\n" ++ " .insn rrf,0xb99c0000,%[qs],%[state],%[ccq],0" ++ : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart), ++ [state] "+&d" (_state) ++ : [token] "d" (token) ++ : "memory", "cc", "1"); + *count = _ccq & 0xff; + *start = _queuestart & 0xff; + *state = _state & 0xff; +diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c +index 5b63c505a2f7c..620655bcbe80d 100644 +--- a/drivers/s390/cio/qdio_main.c ++++ b/drivers/s390/cio/qdio_main.c +@@ -31,38 +31,41 @@ MODULE_DESCRIPTION("QDIO base support"); + MODULE_LICENSE("GPL"); + + static inline int do_siga_sync(unsigned long schid, +- unsigned int out_mask, unsigned int in_mask, ++ unsigned long out_mask, unsigned long in_mask, + unsigned int fc) + { +- register unsigned long __fc asm ("0") = fc; +- register unsigned long __schid asm ("1") = schid; +- register unsigned long out asm ("2") = out_mask; +- register unsigned long in asm ("3") = in_mask; + int cc; + + asm volatile( ++ " lgr 0,%[fc]\n" ++ " lgr 1,%[schid]\n" ++ " lgr 2,%[out]\n" ++ " lgr 3,%[in]\n" + " siga 0\n" +- " ipm %0\n" +- " srl %0,28\n" +- : "=d" (cc) +- : "d" (__fc), "d" (__schid), "d" (out), "d" (in) : "cc"); ++ " ipm %[cc]\n" ++ " srl %[cc],28\n" ++ : [cc] "=&d" (cc) ++ : [fc] "d" (fc), [schid] "d" (schid), ++ [out] "d" (out_mask), [in] "d" (in_mask) ++ : "cc", "0", "1", "2", "3"); + return cc; + } + +-static inline int do_siga_input(unsigned long schid, unsigned int mask, +- unsigned int fc) ++static inline int do_siga_input(unsigned long schid, unsigned long mask, ++ unsigned long fc) + { +- register unsigned long __fc asm ("0") = fc; +- register unsigned long __schid asm ("1") = schid; +- register unsigned long __mask asm ("2") = mask; + int cc; + + asm volatile( ++ " lgr 0,%[fc]\n" ++ " lgr 1,%[schid]\n" ++ " lgr 2,%[mask]\n" + " siga 0\n" +- " ipm %0\n" +- " srl %0,28\n" +- : "=d" (cc) +- : "d" (__fc), "d" (__schid), "d" (__mask) : "cc"); ++ " ipm %[cc]\n" ++ " srl %[cc],28\n" ++ : [cc] "=&d" (cc) ++ : [fc] "d" (fc), [schid] "d" (schid), [mask] "d" (mask) ++ : "cc", "0", "1", "2"); + return cc; + } + +@@ -78,23 +81,24 @@ static inline int do_siga_input(unsigned long schid, unsigned int mask, + * Note: For IQDC unicast queues only the highest priority queue is processed. + */ + static inline int do_siga_output(unsigned long schid, unsigned long mask, +- unsigned int *bb, unsigned int fc, ++ unsigned int *bb, unsigned long fc, + unsigned long aob) + { +- register unsigned long __fc asm("0") = fc; +- register unsigned long __schid asm("1") = schid; +- register unsigned long __mask asm("2") = mask; +- register unsigned long __aob asm("3") = aob; + int cc; + + asm volatile( ++ " lgr 0,%[fc]\n" ++ " lgr 1,%[schid]\n" ++ " lgr 2,%[mask]\n" ++ " lgr 3,%[aob]\n" + " siga 0\n" +- " ipm %0\n" +- " srl %0,28\n" +- : "=d" (cc), "+d" (__fc), "+d" (__aob) +- : "d" (__schid), "d" (__mask) +- : "cc"); +- *bb = __fc >> 31; ++ " lgr %[fc],0\n" ++ " ipm %[cc]\n" ++ " srl %[cc],28\n" ++ : [cc] "=&d" (cc), [fc] "+&d" (fc) ++ : [schid] "d" (schid), [mask] "d" (mask), [aob] "d" (aob) ++ : "cc", "0", "1", "2", "3"); ++ *bb = fc >> 31; + return cc; + } + +diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c +index 69551132f304c..291fccf02d453 100644 +--- a/drivers/scsi/lpfc/lpfc_debugfs.c ++++ b/drivers/scsi/lpfc/lpfc_debugfs.c +@@ -2046,6 +2046,7 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf, + char mybuf[64]; + char *pbuf; + int i; ++ size_t bsize; + + /* Protect copy from user */ + if (!access_ok(buf, nbytes)) +@@ -2053,7 +2054,9 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf, + + memset(mybuf, 0, sizeof(mybuf)); + +- if (copy_from_user(mybuf, buf, nbytes)) ++ bsize = min(nbytes, (sizeof(mybuf) - 1)); ++ ++ if (copy_from_user(mybuf, buf, bsize)) + return -EFAULT; + pbuf = &mybuf[0]; + +@@ -2074,7 +2077,7 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf, + qp->lock_conflict.wq_access = 0; + } + } +- return nbytes; ++ return bsize; + } + #endif + +diff --git a/drivers/spi/spi-fsl-cpm.c b/drivers/spi/spi-fsl-cpm.c +index 858f0544289e6..c7079a9cd577f 100644 +--- a/drivers/spi/spi-fsl-cpm.c ++++ b/drivers/spi/spi-fsl-cpm.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #include "spi-fsl-cpm.h" + #include "spi-fsl-lib.h" +@@ -120,6 +121,21 @@ int fsl_spi_cpm_bufs(struct mpc8xxx_spi *mspi, + mspi->rx_dma = mspi->dma_dummy_rx; + mspi->map_rx_dma = 0; + } ++ if (t->bits_per_word == 16 && t->tx_buf) { ++ const u16 *src = t->tx_buf; ++ u16 *dst; ++ int i; ++ ++ dst = kmalloc(t->len, GFP_KERNEL); ++ if (!dst) ++ return -ENOMEM; ++ ++ for (i = 0; i < t->len >> 1; i++) ++ dst[i] = cpu_to_le16p(src + i); ++ ++ mspi->tx = dst; ++ mspi->map_tx_dma = 1; ++ } + + if (mspi->map_tx_dma) { + void *nonconst_tx = (void *)mspi->tx; /* shut up gcc */ +@@ -173,6 +189,13 @@ void fsl_spi_cpm_bufs_complete(struct mpc8xxx_spi *mspi) + if (mspi->map_rx_dma) + dma_unmap_single(dev, mspi->rx_dma, t->len, DMA_FROM_DEVICE); + mspi->xfer_in_progress = NULL; ++ ++ if (t->bits_per_word == 16 && t->rx_buf) { ++ int i; ++ ++ for (i = 0; i < t->len; i += 2) ++ le16_to_cpus(t->rx_buf + i); ++ } + } + EXPORT_SYMBOL_GPL(fsl_spi_cpm_bufs_complete); + +diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c +index ae805f91eafa5..8006759c1a0c6 100644 +--- a/drivers/spi/spi-fsl-spi.c ++++ b/drivers/spi/spi-fsl-spi.c +@@ -204,26 +204,6 @@ static int mspi_apply_cpu_mode_quirks(struct spi_mpc8xxx_cs *cs, + return bits_per_word; + } + +-static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs, +- struct spi_device *spi, +- int bits_per_word) +-{ +- /* CPM/QE uses Little Endian for words > 8 +- * so transform 16 and 32 bits words into 8 bits +- * Unfortnatly that doesn't work for LSB so +- * reject these for now */ +- /* Note: 32 bits word, LSB works iff +- * tfcr/rfcr is set to CPMFCR_GBL */ +- if (spi->mode & SPI_LSB_FIRST && +- bits_per_word > 8) +- return -EINVAL; +- if (bits_per_word <= 8) +- return bits_per_word; +- if (bits_per_word == 16 || bits_per_word == 32) +- return 8; /* pretend its 8 bits */ +- return -EINVAL; +-} +- + static int fsl_spi_setup_transfer(struct spi_device *spi, + struct spi_transfer *t) + { +@@ -251,9 +231,6 @@ static int fsl_spi_setup_transfer(struct spi_device *spi, + bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi, + mpc8xxx_spi, + bits_per_word); +- else +- bits_per_word = mspi_apply_qe_mode_quirks(cs, spi, +- bits_per_word); + + if (bits_per_word < 0) + return bits_per_word; +@@ -371,14 +348,30 @@ static int fsl_spi_do_one_msg(struct spi_master *master, + * In CPU mode, optimize large byte transfers to use larger + * bits_per_word values to reduce number of interrupts taken. + */ +- if (!(mpc8xxx_spi->flags & SPI_CPM_MODE)) { +- list_for_each_entry(t, &m->transfers, transfer_list) { ++ list_for_each_entry(t, &m->transfers, transfer_list) { ++ if (!(mpc8xxx_spi->flags & SPI_CPM_MODE)) { + if (t->len < 256 || t->bits_per_word != 8) + continue; + if ((t->len & 3) == 0) + t->bits_per_word = 32; + else if ((t->len & 1) == 0) + t->bits_per_word = 16; ++ } else { ++ /* ++ * CPM/QE uses Little Endian for words > 8 ++ * so transform 16 and 32 bits words into 8 bits ++ * Unfortnatly that doesn't work for LSB so ++ * reject these for now ++ * Note: 32 bits word, LSB works iff ++ * tfcr/rfcr is set to CPMFCR_GBL ++ */ ++ if (m->spi->mode & SPI_LSB_FIRST && t->bits_per_word > 8) ++ return -EINVAL; ++ if (t->bits_per_word == 16 || t->bits_per_word == 32) ++ t->bits_per_word = 8; /* pretend its 8 bits */ ++ if (t->bits_per_word == 8 && t->len >= 256 && ++ (mpc8xxx_spi->flags & SPI_CPM1)) ++ t->bits_per_word = 16; + } + } + +@@ -637,8 +630,14 @@ static struct spi_master * fsl_spi_probe(struct device *dev, + if (mpc8xxx_spi->type == TYPE_GRLIB) + fsl_spi_grlib_probe(dev); + +- master->bits_per_word_mask = +- (SPI_BPW_RANGE_MASK(4, 16) | SPI_BPW_MASK(32)) & ++ if (mpc8xxx_spi->flags & SPI_CPM_MODE) ++ master->bits_per_word_mask = ++ (SPI_BPW_RANGE_MASK(4, 8) | SPI_BPW_MASK(16) | SPI_BPW_MASK(32)); ++ else ++ master->bits_per_word_mask = ++ (SPI_BPW_RANGE_MASK(4, 16) | SPI_BPW_MASK(32)); ++ ++ master->bits_per_word_mask &= + SPI_BPW_RANGE_MASK(1, mpc8xxx_spi->max_bits_per_word); + + if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) +diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c +index 9d593675257e0..67f31183c1180 100644 +--- a/drivers/spi/spi-imx.c ++++ b/drivers/spi/spi-imx.c +@@ -239,6 +239,18 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi, + return true; + } + ++/* ++ * Note the number of natively supported chip selects for MX51 is 4. Some ++ * devices may have less actual SS pins but the register map supports 4. When ++ * using gpio chip selects the cs values passed into the macros below can go ++ * outside the range 0 - 3. We therefore need to limit the cs value to avoid ++ * corrupting bits outside the allocated locations. ++ * ++ * The simplest way to do this is to just mask the cs bits to 2 bits. This ++ * still allows all 4 native chip selects to work as well as gpio chip selects ++ * (which can use any of the 4 chip select configurations). ++ */ ++ + #define MX51_ECSPI_CTRL 0x08 + #define MX51_ECSPI_CTRL_ENABLE (1 << 0) + #define MX51_ECSPI_CTRL_XCH (1 << 2) +@@ -247,16 +259,16 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi, + #define MX51_ECSPI_CTRL_DRCTL(drctl) ((drctl) << 16) + #define MX51_ECSPI_CTRL_POSTDIV_OFFSET 8 + #define MX51_ECSPI_CTRL_PREDIV_OFFSET 12 +-#define MX51_ECSPI_CTRL_CS(cs) ((cs) << 18) ++#define MX51_ECSPI_CTRL_CS(cs) ((cs & 3) << 18) + #define MX51_ECSPI_CTRL_BL_OFFSET 20 + #define MX51_ECSPI_CTRL_BL_MASK (0xfff << 20) + + #define MX51_ECSPI_CONFIG 0x0c +-#define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs) + 0)) +-#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs) + 4)) +-#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs) + 8)) +-#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs) + 12)) +-#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs) + 20)) ++#define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs & 3) + 0)) ++#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs & 3) + 4)) ++#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs & 3) + 8)) ++#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs & 3) + 12)) ++#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs & 3) + 20)) + + #define MX51_ECSPI_INT 0x10 + #define MX51_ECSPI_INT_TEEN (1 << 0) +diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c +index be377e75703bf..ca3cea27489b2 100644 +--- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c ++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c +@@ -50,9 +50,9 @@ static const struct rtl819x_ops rtl819xp_ops = { + }; + + static struct pci_device_id rtl8192_pci_id_tbl[] = { +- {RTL_PCI_DEVICE(0x10ec, 0x8192, rtl819xp_ops)}, +- {RTL_PCI_DEVICE(0x07aa, 0x0044, rtl819xp_ops)}, +- {RTL_PCI_DEVICE(0x07aa, 0x0047, rtl819xp_ops)}, ++ {PCI_DEVICE(0x10ec, 0x8192)}, ++ {PCI_DEVICE(0x07aa, 0x0044)}, ++ {PCI_DEVICE(0x07aa, 0x0047)}, + {} + }; + +diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h +index 736f1a824cd2e..7bbd884aa5f13 100644 +--- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h ++++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h +@@ -55,11 +55,6 @@ + #define IS_HARDWARE_TYPE_8192SE(_priv) \ + (((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192SE) + +-#define RTL_PCI_DEVICE(vend, dev, cfg) \ +- .vendor = (vend), .device = (dev), \ +- .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \ +- .driver_data = (kernel_ulong_t)&(cfg) +- + #define TOTAL_CAM_ENTRY 32 + #define CAM_CONTENT_COUNT 8 + +diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c +index 8b8afa95fbbae..ab2f0ceb1e23b 100644 +--- a/drivers/target/iscsi/iscsi_target.c ++++ b/drivers/target/iscsi/iscsi_target.c +@@ -4385,6 +4385,9 @@ int iscsit_close_session(struct iscsi_session *sess) + iscsit_stop_time2retain_timer(sess); + spin_unlock_bh(&se_tpg->session_lock); + ++ if (sess->sess_ops->ErrorRecoveryLevel == 2) ++ iscsit_free_connection_recovery_entries(sess); ++ + /* + * transport_deregister_session_configfs() will clear the + * struct se_node_acl->nacl_sess pointer now as a iscsi_np process context +@@ -4413,9 +4416,6 @@ int iscsit_close_session(struct iscsi_session *sess) + + transport_deregister_session(sess->se_sess); + +- if (sess->sess_ops->ErrorRecoveryLevel == 2) +- iscsit_free_connection_recovery_entries(sess); +- + iscsit_free_all_ooo_cmdsns(sess); + + spin_lock_bh(&se_tpg->session_lock); +diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c +index 2675771a03a0d..d7afff1e7685f 100644 +--- a/drivers/tty/serial/8250/8250_core.c ++++ b/drivers/tty/serial/8250/8250_core.c +@@ -1138,6 +1138,7 @@ void serial8250_unregister_port(int line) + uart->port.type = PORT_UNKNOWN; + uart->port.dev = &serial8250_isa_devs->dev; + uart->capabilities = 0; ++ serial8250_init_port(uart); + serial8250_apply_quirks(uart); + uart_add_one_port(&serial8250_reg, &uart->port); + } else { +diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c +index 92e2ee2785239..4a3991ac2dd06 100644 +--- a/drivers/tty/serial/8250/8250_pci.c ++++ b/drivers/tty/serial/8250/8250_pci.c +@@ -1837,6 +1837,8 @@ pci_moxa_setup(struct serial_private *priv, + #define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530 + #define PCI_VENDOR_ID_ADVANTECH 0x13fe + #define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66 ++#define PCI_DEVICE_ID_ADVANTECH_PCI1600 0x1600 ++#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1611 0x1611 + #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 + #define PCI_DEVICE_ID_ADVANTECH_PCI3618 0x3618 + #define PCI_DEVICE_ID_ADVANTECH_PCIf618 0xf618 +@@ -4157,6 +4159,9 @@ static SIMPLE_DEV_PM_OPS(pciserial_pm_ops, pciserial_suspend_one, + pciserial_resume_one); + + static const struct pci_device_id serial_pci_tbl[] = { ++ { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI1600, ++ PCI_DEVICE_ID_ADVANTECH_PCI1600_1611, PCI_ANY_ID, 0, 0, ++ pbn_b0_4_921600 }, + /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */ + { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620, + PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0, +diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c +index d904a3a345e74..dd4be3c8c049c 100644 +--- a/drivers/tty/serial/arc_uart.c ++++ b/drivers/tty/serial/arc_uart.c +@@ -613,10 +613,11 @@ static int arc_serial_probe(struct platform_device *pdev) + } + uart->baud = val; + +- port->membase = of_iomap(np, 0); +- if (!port->membase) ++ port->membase = devm_platform_ioremap_resource(pdev, 0); ++ if (IS_ERR(port->membase)) { + /* No point of dev_err since UART itself is hosed here */ +- return -ENXIO; ++ return PTR_ERR(port->membase); ++ } + + port->irq = irq_of_parse_and_map(np, 0); + +diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c +index 90de3331e4a51..a6813e3393ece 100644 +--- a/drivers/tty/vt/vc_screen.c ++++ b/drivers/tty/vt/vc_screen.c +@@ -200,39 +200,47 @@ vcs_vc(struct inode *inode, int *viewed) + return vc_cons[currcons].d; + } + +-/* +- * Returns size for VC carried by inode. ++/** ++ * vcs_size -- return size for a VC in @vc ++ * @vc: which VC ++ * @attr: does it use attributes? ++ * @unicode: is it unicode? ++ * + * Must be called with console_lock. + */ +-static int +-vcs_size(struct inode *inode) ++static int vcs_size(const struct vc_data *vc, bool attr, bool unicode) + { + int size; +- struct vc_data *vc; + + WARN_CONSOLE_UNLOCKED(); + +- vc = vcs_vc(inode, NULL); +- if (!vc) +- return -ENXIO; +- + size = vc->vc_rows * vc->vc_cols; + +- if (use_attributes(inode)) { +- if (use_unicode(inode)) ++ if (attr) { ++ if (unicode) + return -EOPNOTSUPP; +- size = 2*size + HEADER_SIZE; +- } else if (use_unicode(inode)) ++ ++ size = 2 * size + HEADER_SIZE; ++ } else if (unicode) + size *= 4; ++ + return size; + } + + static loff_t vcs_lseek(struct file *file, loff_t offset, int orig) + { ++ struct inode *inode = file_inode(file); ++ struct vc_data *vc; + int size; + + console_lock(); +- size = vcs_size(file_inode(file)); ++ vc = vcs_vc(inode, NULL); ++ if (!vc) { ++ console_unlock(); ++ return -ENXIO; ++ } ++ ++ size = vcs_size(vc, use_attributes(inode), use_unicode(inode)); + console_unlock(); + if (size < 0) + return size; +@@ -294,7 +302,7 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) + * as copy_to_user at the end of this loop + * could sleep. + */ +- size = vcs_size(inode); ++ size = vcs_size(vc, attr, uni_mode); + if (size < 0) { + ret = size; + break; +@@ -476,7 +484,11 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) + if (!vc) + goto unlock_out; + +- size = vcs_size(inode); ++ size = vcs_size(vc, attr, false); ++ if (size < 0) { ++ ret = size; ++ goto unlock_out; ++ } + ret = -EINVAL; + if (pos < 0 || pos > size) + goto unlock_out; +@@ -511,11 +523,18 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) + } + } + +- /* The vcs_size might have changed while we slept to grab +- * the user buffer, so recheck. ++ /* The vc might have been freed or vcs_size might have changed ++ * while we slept to grab the user buffer, so recheck. + * Return data written up to now on failure. + */ +- size = vcs_size(inode); ++ vc = vcs_vc(inode, &viewed); ++ if (!vc) { ++ if (written) ++ break; ++ ret = -ENXIO; ++ goto unlock_out; ++ } ++ size = vcs_size(vc, attr, false); + if (size < 0) { + if (written) + break; +diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c +index 77b1802f829b3..fdfa2da24287a 100644 +--- a/drivers/usb/class/usbtmc.c ++++ b/drivers/usb/class/usbtmc.c +@@ -1898,6 +1898,8 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data, + + if (request.req.wLength > USBTMC_BUFSIZE) + return -EMSGSIZE; ++ if (request.req.wLength == 0) /* Length-0 requests are never IN */ ++ request.req.bRequestType &= ~USB_DIR_IN; + + is_in = request.req.bRequestType & USB_DIR_IN; + +diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c +index f16c26dc079d7..502d911f71fa6 100644 +--- a/drivers/usb/core/usb.c ++++ b/drivers/usb/core/usb.c +@@ -208,6 +208,82 @@ int usb_find_common_endpoints_reverse(struct usb_host_interface *alt, + } + EXPORT_SYMBOL_GPL(usb_find_common_endpoints_reverse); + ++/** ++ * usb_find_endpoint() - Given an endpoint address, search for the endpoint's ++ * usb_host_endpoint structure in an interface's current altsetting. ++ * @intf: the interface whose current altsetting should be searched ++ * @ep_addr: the endpoint address (number and direction) to find ++ * ++ * Search the altsetting's list of endpoints for one with the specified address. ++ * ++ * Return: Pointer to the usb_host_endpoint if found, %NULL otherwise. ++ */ ++static const struct usb_host_endpoint *usb_find_endpoint( ++ const struct usb_interface *intf, unsigned int ep_addr) ++{ ++ int n; ++ const struct usb_host_endpoint *ep; ++ ++ n = intf->cur_altsetting->desc.bNumEndpoints; ++ ep = intf->cur_altsetting->endpoint; ++ for (; n > 0; (--n, ++ep)) { ++ if (ep->desc.bEndpointAddress == ep_addr) ++ return ep; ++ } ++ return NULL; ++} ++ ++/** ++ * usb_check_bulk_endpoints - Check whether an interface's current altsetting ++ * contains a set of bulk endpoints with the given addresses. ++ * @intf: the interface whose current altsetting should be searched ++ * @ep_addrs: 0-terminated array of the endpoint addresses (number and ++ * direction) to look for ++ * ++ * Search for endpoints with the specified addresses and check their types. ++ * ++ * Return: %true if all the endpoints are found and are bulk, %false otherwise. ++ */ ++bool usb_check_bulk_endpoints( ++ const struct usb_interface *intf, const u8 *ep_addrs) ++{ ++ const struct usb_host_endpoint *ep; ++ ++ for (; *ep_addrs; ++ep_addrs) { ++ ep = usb_find_endpoint(intf, *ep_addrs); ++ if (!ep || !usb_endpoint_xfer_bulk(&ep->desc)) ++ return false; ++ } ++ return true; ++} ++EXPORT_SYMBOL_GPL(usb_check_bulk_endpoints); ++ ++/** ++ * usb_check_int_endpoints - Check whether an interface's current altsetting ++ * contains a set of interrupt endpoints with the given addresses. ++ * @intf: the interface whose current altsetting should be searched ++ * @ep_addrs: 0-terminated array of the endpoint addresses (number and ++ * direction) to look for ++ * ++ * Search for endpoints with the specified addresses and check their types. ++ * ++ * Return: %true if all the endpoints are found and are interrupt, ++ * %false otherwise. ++ */ ++bool usb_check_int_endpoints( ++ const struct usb_interface *intf, const u8 *ep_addrs) ++{ ++ const struct usb_host_endpoint *ep; ++ ++ for (; *ep_addrs; ++ep_addrs) { ++ ep = usb_find_endpoint(intf, *ep_addrs); ++ if (!ep || !usb_endpoint_xfer_int(&ep->desc)) ++ return false; ++ } ++ return true; ++} ++EXPORT_SYMBOL_GPL(usb_check_int_endpoints); ++ + /** + * usb_find_alt_setting() - Given a configuration, find the alternate setting + * for the given interface. +diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c +index 9fb519b2efb45..9bc46aec08a39 100644 +--- a/drivers/usb/dwc3/debugfs.c ++++ b/drivers/usb/dwc3/debugfs.c +@@ -327,6 +327,11 @@ static int dwc3_lsp_show(struct seq_file *s, void *unused) + unsigned int current_mode; + unsigned long flags; + u32 reg; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + reg = dwc3_readl(dwc->regs, DWC3_GSTS); +@@ -345,6 +350,8 @@ static int dwc3_lsp_show(struct seq_file *s, void *unused) + } + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -390,6 +397,11 @@ static int dwc3_mode_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = s->private; + unsigned long flags; + u32 reg; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + reg = dwc3_readl(dwc->regs, DWC3_GCTL); +@@ -409,6 +421,8 @@ static int dwc3_mode_show(struct seq_file *s, void *unused) + seq_printf(s, "UNKNOWN %08x\n", DWC3_GCTL_PRTCAP(reg)); + } + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -455,6 +469,11 @@ static int dwc3_testmode_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = s->private; + unsigned long flags; + u32 reg; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + reg = dwc3_readl(dwc->regs, DWC3_DCTL); +@@ -485,6 +504,8 @@ static int dwc3_testmode_show(struct seq_file *s, void *unused) + seq_printf(s, "UNKNOWN %d\n", reg); + } + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -501,6 +522,7 @@ static ssize_t dwc3_testmode_write(struct file *file, + unsigned long flags; + u32 testmode = 0; + char buf[32]; ++ int ret; + + if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) + return -EFAULT; +@@ -518,10 +540,16 @@ static ssize_t dwc3_testmode_write(struct file *file, + else + testmode = 0; + ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; ++ + spin_lock_irqsave(&dwc->lock, flags); + dwc3_gadget_set_test_mode(dwc, testmode); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return count; + } + +@@ -540,12 +568,18 @@ static int dwc3_link_state_show(struct seq_file *s, void *unused) + enum dwc3_link_state state; + u32 reg; + u8 speed; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + reg = dwc3_readl(dwc->regs, DWC3_GSTS); + if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) { + seq_puts(s, "Not available\n"); + spin_unlock_irqrestore(&dwc->lock, flags); ++ pm_runtime_put_sync(dwc->dev); + return 0; + } + +@@ -558,6 +592,8 @@ static int dwc3_link_state_show(struct seq_file *s, void *unused) + dwc3_gadget_hs_link_string(state)); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -576,6 +612,7 @@ static ssize_t dwc3_link_state_write(struct file *file, + char buf[32]; + u32 reg; + u8 speed; ++ int ret; + + if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) + return -EFAULT; +@@ -595,10 +632,15 @@ static ssize_t dwc3_link_state_write(struct file *file, + else + return -EINVAL; + ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; ++ + spin_lock_irqsave(&dwc->lock, flags); + reg = dwc3_readl(dwc->regs, DWC3_GSTS); + if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) { + spin_unlock_irqrestore(&dwc->lock, flags); ++ pm_runtime_put_sync(dwc->dev); + return -EINVAL; + } + +@@ -608,12 +650,15 @@ static ssize_t dwc3_link_state_write(struct file *file, + if (speed < DWC3_DSTS_SUPERSPEED && + state != DWC3_LINK_STATE_RECOV) { + spin_unlock_irqrestore(&dwc->lock, flags); ++ pm_runtime_put_sync(dwc->dev); + return -EINVAL; + } + + dwc3_gadget_set_link_state(dwc, state); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return count; + } + +@@ -636,6 +681,11 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_TXFIFO); +@@ -646,6 +696,8 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused) + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -655,6 +707,11 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_RXFIFO); +@@ -665,6 +722,8 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused) + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -674,12 +733,19 @@ static int dwc3_tx_request_queue_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_TXREQQ); + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -689,12 +755,19 @@ static int dwc3_rx_request_queue_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_RXREQQ); + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -704,12 +777,19 @@ static int dwc3_rx_info_queue_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_RXINFOQ); + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -719,12 +799,19 @@ static int dwc3_descriptor_fetch_queue_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_DESCFETCHQ); + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -734,12 +821,19 @@ static int dwc3_event_queue_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + u32 val; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + val = dwc3_core_fifo_space(dep, DWC3_EVENTQ); + seq_printf(s, "%u\n", val); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -785,6 +879,11 @@ static int dwc3_trb_ring_show(struct seq_file *s, void *unused) + struct dwc3 *dwc = dep->dwc; + unsigned long flags; + int i; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + if (dep->number <= 1) { +@@ -814,6 +913,8 @@ static int dwc3_trb_ring_show(struct seq_file *s, void *unused) + out: + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -826,6 +927,11 @@ static int dwc3_ep_info_register_show(struct seq_file *s, void *unused) + u32 lower_32_bits; + u32 upper_32_bits; + u32 reg; ++ int ret; ++ ++ ret = pm_runtime_resume_and_get(dwc->dev); ++ if (ret < 0) ++ return ret; + + spin_lock_irqsave(&dwc->lock, flags); + reg = DWC3_GDBGLSPMUX_EPSELECT(dep->number); +@@ -838,6 +944,8 @@ static int dwc3_ep_info_register_show(struct seq_file *s, void *unused) + seq_printf(s, "0x%016llx\n", ep_info); + spin_unlock_irqrestore(&dwc->lock, flags); + ++ pm_runtime_put_sync(dwc->dev); ++ + return 0; + } + +@@ -899,6 +1007,7 @@ void dwc3_debugfs_init(struct dwc3 *dwc) + dwc->regset->regs = dwc3_regs; + dwc->regset->nregs = ARRAY_SIZE(dwc3_regs); + dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START; ++ dwc->regset->dev = dwc->dev; + + root = debugfs_create_dir(dev_name(dwc->dev), NULL); + dwc->root = root; +diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c +index 3f053b11e2cee..af3cb3bfdc29a 100644 +--- a/drivers/usb/gadget/function/u_ether.c ++++ b/drivers/usb/gadget/function/u_ether.c +@@ -17,6 +17,8 @@ + #include + #include + #include ++#include ++#include + + #include "u_ether.h" + +@@ -102,41 +104,6 @@ static inline int qlen(struct usb_gadget *gadget, unsigned qmult) + + /*-------------------------------------------------------------------------*/ + +-/* REVISIT there must be a better way than having two sets +- * of debug calls ... +- */ +- +-#undef DBG +-#undef VDBG +-#undef ERROR +-#undef INFO +- +-#define xprintk(d, level, fmt, args...) \ +- printk(level "%s: " fmt , (d)->net->name , ## args) +- +-#ifdef DEBUG +-#undef DEBUG +-#define DBG(dev, fmt, args...) \ +- xprintk(dev , KERN_DEBUG , fmt , ## args) +-#else +-#define DBG(dev, fmt, args...) \ +- do { } while (0) +-#endif /* DEBUG */ +- +-#ifdef VERBOSE_DEBUG +-#define VDBG DBG +-#else +-#define VDBG(dev, fmt, args...) \ +- do { } while (0) +-#endif /* DEBUG */ +- +-#define ERROR(dev, fmt, args...) \ +- xprintk(dev , KERN_ERR , fmt , ## args) +-#define INFO(dev, fmt, args...) \ +- xprintk(dev , KERN_INFO , fmt , ## args) +- +-/*-------------------------------------------------------------------------*/ +- + /* NETWORK DRIVER HOOKUP (to the layer above this driver) */ + + static void eth_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *p) +@@ -974,6 +941,8 @@ int gether_get_host_addr_cdc(struct net_device *net, char *host_addr, int len) + dev = netdev_priv(net); + snprintf(host_addr, len, "%pm", dev->host_mac); + ++ string_upper(host_addr, host_addr); ++ + return strlen(host_addr); + } + EXPORT_SYMBOL_GPL(gether_get_host_addr_cdc); +diff --git a/drivers/usb/host/uhci-pci.c b/drivers/usb/host/uhci-pci.c +index 0fa3d72bae261..79a6f14421606 100644 +--- a/drivers/usb/host/uhci-pci.c ++++ b/drivers/usb/host/uhci-pci.c +@@ -119,11 +119,13 @@ static int uhci_pci_init(struct usb_hcd *hcd) + + uhci->rh_numports = uhci_count_ports(hcd); + +- /* Intel controllers report the OverCurrent bit active on. +- * VIA controllers report it active off, so we'll adjust the +- * bit value. (It's not standardized in the UHCI spec.) ++ /* ++ * Intel controllers report the OverCurrent bit active on. VIA ++ * and ZHAOXIN controllers report it active off, so we'll adjust ++ * the bit value. (It's not standardized in the UHCI spec.) + */ +- if (to_pci_dev(uhci_dev(uhci))->vendor == PCI_VENDOR_ID_VIA) ++ if (to_pci_dev(uhci_dev(uhci))->vendor == PCI_VENDOR_ID_VIA || ++ to_pci_dev(uhci_dev(uhci))->vendor == PCI_VENDOR_ID_ZHAOXIN) + uhci->oc_low = 1; + + /* HP's server management chip requires a longer port reset delay. */ +diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c +index 0734e6dd93862..d242b73cfdb2e 100644 +--- a/drivers/usb/misc/sisusbvga/sisusb.c ++++ b/drivers/usb/misc/sisusbvga/sisusb.c +@@ -3014,6 +3014,20 @@ static int sisusb_probe(struct usb_interface *intf, + struct usb_device *dev = interface_to_usbdev(intf); + struct sisusb_usb_data *sisusb; + int retval = 0, i; ++ static const u8 ep_addresses[] = { ++ SISUSB_EP_GFX_IN | USB_DIR_IN, ++ SISUSB_EP_GFX_OUT | USB_DIR_OUT, ++ SISUSB_EP_GFX_BULK_OUT | USB_DIR_OUT, ++ SISUSB_EP_GFX_LBULK_OUT | USB_DIR_OUT, ++ SISUSB_EP_BRIDGE_IN | USB_DIR_IN, ++ SISUSB_EP_BRIDGE_OUT | USB_DIR_OUT, ++ 0}; ++ ++ /* Are the expected endpoints present? */ ++ if (!usb_check_bulk_endpoints(intf, ep_addresses)) { ++ dev_err(&intf->dev, "Invalid USB2VGA device\n"); ++ return -EINVAL; ++ } + + dev_info(&dev->dev, "USB2VGA dongle found at address %d\n", + dev->devnum); +diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c +index 2adcabe060c50..49d17988e2ce8 100644 +--- a/drivers/usb/storage/scsiglue.c ++++ b/drivers/usb/storage/scsiglue.c +@@ -407,22 +407,25 @@ static DEF_SCSI_QCMD(queuecommand) + ***********************************************************************/ + + /* Command timeout and abort */ +-static int command_abort(struct scsi_cmnd *srb) ++static int command_abort_matching(struct us_data *us, struct scsi_cmnd *srb_match) + { +- struct us_data *us = host_to_us(srb->device->host); +- +- usb_stor_dbg(us, "%s called\n", __func__); +- + /* + * us->srb together with the TIMED_OUT, RESETTING, and ABORTING + * bits are protected by the host lock. + */ + scsi_lock(us_to_host(us)); + +- /* Is this command still active? */ +- if (us->srb != srb) { ++ /* is there any active pending command to abort ? */ ++ if (!us->srb) { + scsi_unlock(us_to_host(us)); + usb_stor_dbg(us, "-- nothing to abort\n"); ++ return SUCCESS; ++ } ++ ++ /* Does the command match the passed srb if any ? */ ++ if (srb_match && us->srb != srb_match) { ++ scsi_unlock(us_to_host(us)); ++ usb_stor_dbg(us, "-- pending command mismatch\n"); + return FAILED; + } + +@@ -445,6 +448,14 @@ static int command_abort(struct scsi_cmnd *srb) + return SUCCESS; + } + ++static int command_abort(struct scsi_cmnd *srb) ++{ ++ struct us_data *us = host_to_us(srb->device->host); ++ ++ usb_stor_dbg(us, "%s called\n", __func__); ++ return command_abort_matching(us, srb); ++} ++ + /* + * This invokes the transport reset mechanism to reset the state of the + * device +@@ -456,6 +467,9 @@ static int device_reset(struct scsi_cmnd *srb) + + usb_stor_dbg(us, "%s called\n", __func__); + ++ /* abort any pending command before reset */ ++ command_abort_matching(us, NULL); ++ + /* lock the device pointers and do the reset */ + mutex_lock(&(us->dev_mutex)); + result = us->transport_reset(us); +diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/altmodes/displayport.c +index ca22a05179d1e..a2a1baabca933 100644 +--- a/drivers/usb/typec/altmodes/displayport.c ++++ b/drivers/usb/typec/altmodes/displayport.c +@@ -501,6 +501,10 @@ static ssize_t pin_assignment_show(struct device *dev, + + mutex_unlock(&dp->lock); + ++ /* get_current_pin_assignments can return 0 when no matching pin assignments are found */ ++ if (len == 0) ++ len++; ++ + buf[len - 1] = '\n'; + return len; + } +diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c +index fb18264b702e6..b259a4a28f81a 100644 +--- a/drivers/usb/typec/tcpm/tcpm.c ++++ b/drivers/usb/typec/tcpm/tcpm.c +@@ -1018,7 +1018,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const __le32 *payload, + pmdata->svids[pmdata->nsvids++] = svid; + tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid); + } +- return true; ++ ++ /* ++ * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table ++ * 6-43), and can be returned maximum 6 VDOs per response (see Figure ++ * 6-19). If the Respondersupports 12 or more SVID then the Discover ++ * SVIDs Command Shall be executed multiple times until a Discover ++ * SVIDs VDO is returned ending either with a SVID value of 0x0000 in ++ * the last part of the last VDO or with a VDO containing two SVIDs ++ * with values of 0x0000. ++ * ++ * However, some odd dockers support SVIDs less than 12 but without ++ * 0x0000 in the last VDO, so we need to break the Discover SVIDs ++ * request and return false here. ++ */ ++ return cnt == 7; + abort: + tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX); + return false; +diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c +index 8e8af408998ea..24e82fca19ad5 100644 +--- a/drivers/video/fbdev/udlfb.c ++++ b/drivers/video/fbdev/udlfb.c +@@ -27,6 +27,8 @@ + #include