diff options
author | Mike Pagano <mpagano@gentoo.org> | 2023-05-17 07:00:10 -0400 |
---|---|---|
committer | Mike Pagano <mpagano@gentoo.org> | 2023-05-17 07:00:10 -0400 |
commit | d73887a09bdbd4b092252229f5712929e75ff038 (patch) | |
tree | d849f90392a9b931f062d0f0d2f179cbcace0214 | |
parent | netfilter: nf_tables: deactivate anonymous set from preparation phase (diff) | |
download | linux-patches-d73887a09bdbd4b092252229f5712929e75ff038.tar.gz linux-patches-d73887a09bdbd4b092252229f5712929e75ff038.tar.bz2 linux-patches-d73887a09bdbd4b092252229f5712929e75ff038.zip |
Linuxpatch 5.4.243
Signed-off-by: Mike Pagano <mpagano@gentoo.org>
-rw-r--r-- | 0000_README | 4 | ||||
-rw-r--r-- | 1242_linux-5.4.243.patch | 10742 |
2 files changed, 10746 insertions, 0 deletions
diff --git a/0000_README b/0000_README index fbd77e14..76122730 100644 --- a/0000_README +++ b/0000_README @@ -1011,6 +1011,10 @@ Patch: 1241_linux-5.4.242.patch From: https://www.kernel.org Desc: Linux 5.4.242 +Patch: 1242_linux-5.4.243.patch +From: https://www.kernel.org +Desc: Linux 5.4.243 + Patch: 1500_XATTR_USER_PREFIX.patch From: https://bugs.gentoo.org/show_bug.cgi?id=470644 Desc: Support for namespace user.pax.* on tmpfs. diff --git a/1242_linux-5.4.243.patch b/1242_linux-5.4.243.patch new file mode 100644 index 00000000..82d80739 --- /dev/null +++ b/1242_linux-5.4.243.patch @@ -0,0 +1,10742 @@ +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 = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>; + 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 = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; + 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 = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>; + 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 = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>; + 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 <clocksource/timer-davinci.h> + + #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 <linux/dma-mapping.h> ++#include <linux/kref.h> + #include <linux/mailbox_client.h> + #include <linux/module.h> + #include <linux/of_platform.h> +@@ -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 <bobbyeshleman@gmail.com>"); + 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 <path> <addr> <mask> <data>\n"); +- return count; ++ rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG, ++ "Format is <path> <addr> <mask> <data>\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 <linux/platform_device.h> + #include <linux/pm_runtime.h> + #include <linux/rtc.h> ++#include <linux/rtc/rtc-omap.h> + + /* + * 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 <linux/moduleparam.h> + #include <linux/ioport.h> + #include <linux/init.h> ++#include <linux/irq.h> + #include <linux/console.h> + #include <linux/sysrq.h> + #include <linux/delay.h> +@@ -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 <linux/slab.h> + #include <linux/atomic.h> + #include <linux/device.h> ++#include <linux/pm_runtime.h> + #include <linux/poll.h> + #include <linux/security.h> + +@@ -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 <linux/device.h> + #include <linux/fs.h> + #include <linux/uaccess.h> +-#include <linux/rtmutex.h> + #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 <linux/string.h> + +-#if defined(CONFIG_VGA_CONSOLE) || defined(CONFIG_MDA_CONSOLE) ++#if IS_ENABLED(CONFIG_VGA_CONSOLE) || IS_ENABLED(CONFIG_MDA_CONSOLE) + #include <asm/vga.h> + #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; + } + } |