From 8356063d0532fc04750b9afd48a75ed4e0d278b2 Mon Sep 17 00:00:00 2001 From: Igor Date: Thu, 22 Jun 2023 11:00:13 +0200 Subject: [PATCH] Remove deprecated patches --- .../odroidxu4-5.4/patch-5.4.243-244.patch | 6926 ----------------- .../odroidxu4-5.4/patch-5.4.244-245.patch | 1307 ---- .../odroidxu4-5.4/patch-5.4.245-246.patch | 6800 ---------------- 3 files changed, 15033 deletions(-) delete mode 100644 patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch delete mode 100644 patch/kernel/archive/odroidxu4-5.4/patch-5.4.244-245.patch delete mode 100644 patch/kernel/archive/odroidxu4-5.4/patch-5.4.245-246.patch diff --git a/patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch b/patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch deleted file mode 100644 index baad88e5ca..0000000000 --- a/patch/kernel/archive/odroidxu4-5.4/patch-5.4.243-244.patch +++ /dev/null @@ -1,6926 +0,0 @@ -diff --git a/Makefile b/Makefile -index f660c3e224ec0..a12f1af9b03b1 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,7 +1,7 @@ - # SPDX-License-Identifier: GPL-2.0 - VERSION = 5 - PATCHLEVEL = 4 --SUBLEVEL = 243 -+SUBLEVEL = 244 - EXTRAVERSION = - NAME = Kleptomaniac Octopus - -diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c -index 1dbe98948ce30..9627c4cf3e41d 100644 ---- a/arch/arm/mach-sa1100/jornada720_ssp.c -+++ b/arch/arm/mach-sa1100/jornada720_ssp.c -@@ -1,5 +1,5 @@ - // SPDX-License-Identifier: GPL-2.0-only --/** -+/* - * arch/arm/mac-sa1100/jornada720_ssp.c - * - * Copyright (C) 2006/2007 Kristoffer Ericson -@@ -26,6 +26,7 @@ static unsigned long jornada_ssp_flags; - - /** - * jornada_ssp_reverse - reverses input byte -+ * @byte: input byte to reverse - * - * we need to reverse all data we receive from the mcu due to its physical location - * returns : 01110111 -> 11101110 -@@ -46,6 +47,7 @@ EXPORT_SYMBOL(jornada_ssp_reverse); - - /** - * jornada_ssp_byte - waits for ready ssp bus and sends byte -+ * @byte: input byte to transmit - * - * waits for fifo buffer to clear and then transmits, if it doesn't then we will - * timeout after rounds. Needs mcu running before its called. -@@ -77,6 +79,7 @@ EXPORT_SYMBOL(jornada_ssp_byte); - - /** - * jornada_ssp_inout - decide if input is command or trading byte -+ * @byte: input byte to send (may be %TXDUMMY) - * - * returns : (jornada_ssp_byte(byte)) on success - * : %-ETIMEDOUT on timeout failure -diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c -index f7121b775e5f0..ab5fec67e541c 100644 ---- a/arch/m68k/kernel/signal.c -+++ b/arch/m68k/kernel/signal.c -@@ -883,11 +883,17 @@ static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs * - } - - static inline void __user * --get_sigframe(struct ksignal *ksig, size_t frame_size) -+get_sigframe(struct ksignal *ksig, struct pt_regs *tregs, size_t frame_size) - { - unsigned long usp = sigsp(rdusp(), ksig); -+ unsigned long gap = 0; - -- return (void __user *)((usp - frame_size) & -8UL); -+ if (CPU_IS_020_OR_030 && tregs->format == 0xb) { -+ /* USP is unreliable so use worst-case value */ -+ gap = 256; -+ } -+ -+ return (void __user *)((usp - gap - frame_size) & -8UL); - } - - static int setup_frame(struct ksignal *ksig, sigset_t *set, -@@ -905,7 +911,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, - return -EFAULT; - } - -- frame = get_sigframe(ksig, sizeof(*frame) + fsize); -+ frame = get_sigframe(ksig, tregs, sizeof(*frame) + fsize); - - if (fsize) - err |= copy_to_user (frame + 1, regs + 1, fsize); -@@ -976,7 +982,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, - return -EFAULT; - } - -- frame = get_sigframe(ksig, sizeof(*frame)); -+ frame = get_sigframe(ksig, tregs, sizeof(*frame)); - - if (fsize) - err |= copy_to_user (&frame->uc.uc_extra, regs + 1, fsize); -diff --git a/arch/parisc/include/asm/cacheflush.h b/arch/parisc/include/asm/cacheflush.h -index 0c83644bfa5cb..b4076ac51005e 100644 ---- a/arch/parisc/include/asm/cacheflush.h -+++ b/arch/parisc/include/asm/cacheflush.h -@@ -57,6 +57,11 @@ extern void flush_dcache_page(struct page *page); - - #define flush_dcache_mmap_lock(mapping) xa_lock_irq(&mapping->i_pages) - #define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&mapping->i_pages) -+#define flush_dcache_mmap_lock_irqsave(mapping, flags) \ -+ xa_lock_irqsave(&mapping->i_pages, flags) -+#define flush_dcache_mmap_unlock_irqrestore(mapping, flags) \ -+ xa_unlock_irqrestore(&mapping->i_pages, flags) -+ - - #define flush_icache_page(vma,page) do { \ - flush_kernel_dcache_page(page); \ -diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c -index a82b3eaa53989..fd84789b5ca4b 100644 ---- a/arch/parisc/kernel/cache.c -+++ b/arch/parisc/kernel/cache.c -@@ -328,6 +328,7 @@ void flush_dcache_page(struct page *page) - struct vm_area_struct *mpnt; - unsigned long offset; - unsigned long addr, old_addr = 0; -+ unsigned long flags; - pgoff_t pgoff; - - if (mapping && !mapping_mapped(mapping)) { -@@ -347,7 +348,7 @@ void flush_dcache_page(struct page *page) - * declared as MAP_PRIVATE or MAP_SHARED), so we only need - * to flush one address here for them all to become coherent */ - -- flush_dcache_mmap_lock(mapping); -+ flush_dcache_mmap_lock_irqsave(mapping, flags); - vma_interval_tree_foreach(mpnt, &mapping->i_mmap, pgoff, pgoff) { - offset = (pgoff - mpnt->vm_pgoff) << PAGE_SHIFT; - addr = mpnt->vm_start + offset; -@@ -370,7 +371,7 @@ void flush_dcache_page(struct page *page) - old_addr = addr; - } - } -- flush_dcache_mmap_unlock(mapping); -+ flush_dcache_mmap_unlock_irqrestore(mapping, flags); - } - EXPORT_SYMBOL(flush_dcache_page); - -diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c -index 230a6422b99f3..0e67ab681b4e9 100644 ---- a/arch/parisc/kernel/process.c -+++ b/arch/parisc/kernel/process.c -@@ -124,13 +124,18 @@ void machine_power_off(void) - /* It seems we have no way to power the system off via - * software. The user has to press the button himself. */ - -- printk(KERN_EMERG "System shut down completed.\n" -- "Please power this system off now."); -+ printk("Power off or press RETURN to reboot.\n"); - - /* prevent soft lockup/stalled CPU messages for endless loop. */ - rcu_sysrq_start(); - lockup_detector_soft_poweroff(); -- for (;;); -+ while (1) { -+ /* reboot if user presses RETURN key */ -+ if (pdc_iodc_getc() == 13) { -+ printk("Rebooting...\n"); -+ machine_restart(NULL); -+ } -+ } - } - - void (*pm_power_off)(void); -diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c -index 37988f7f3abcb..10776991296a0 100644 ---- a/arch/parisc/kernel/traps.c -+++ b/arch/parisc/kernel/traps.c -@@ -305,8 +305,8 @@ static void handle_break(struct pt_regs *regs) - #endif - - #ifdef CONFIG_KGDB -- if (unlikely(iir == PARISC_KGDB_COMPILED_BREAK_INSN || -- iir == PARISC_KGDB_BREAK_INSN)) { -+ if (unlikely((iir == PARISC_KGDB_COMPILED_BREAK_INSN || -+ iir == PARISC_KGDB_BREAK_INSN)) && !user_mode(regs)) { - kgdb_handle_exception(9, SIGTRAP, 0, regs); - return; - } -diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c -index bdcb07a98cd37..dc8f3fb02ac21 100644 ---- a/arch/powerpc/mm/book3s64/radix_pgtable.c -+++ b/arch/powerpc/mm/book3s64/radix_pgtable.c -@@ -1018,8 +1018,8 @@ void radix__ptep_set_access_flags(struct vm_area_struct *vma, pte_t *ptep, - pte_t entry, unsigned long address, int psize) - { - struct mm_struct *mm = vma->vm_mm; -- unsigned long set = pte_val(entry) & (_PAGE_DIRTY | _PAGE_ACCESSED | -- _PAGE_RW | _PAGE_EXEC); -+ unsigned long set = pte_val(entry) & (_PAGE_DIRTY | _PAGE_SOFT_DIRTY | -+ _PAGE_ACCESSED | _PAGE_RW | _PAGE_EXEC); - - unsigned long change = pte_val(entry) ^ pte_val(*ptep); - /* -diff --git a/arch/x86/include/asm/intel-family.h b/arch/x86/include/asm/intel-family.h -index c1d6d8bbb7dad..6fdd863198ec2 100644 ---- a/arch/x86/include/asm/intel-family.h -+++ b/arch/x86/include/asm/intel-family.h -@@ -96,6 +96,11 @@ - #define INTEL_FAM6_LAKEFIELD 0x8A - #define INTEL_FAM6_ALDERLAKE 0x97 - #define INTEL_FAM6_ALDERLAKE_L 0x9A -+#define INTEL_FAM6_ALDERLAKE_N 0xBE -+ -+#define INTEL_FAM6_RAPTORLAKE 0xB7 -+#define INTEL_FAM6_RAPTORLAKE_P 0xBA -+#define INTEL_FAM6_RAPTORLAKE_S 0xBF - - /* "Small Core" Processors (Atom) */ - -diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h -index 4bc476d7fa6c4..80239c84b4ddf 100644 ---- a/arch/x86/include/asm/kvm_host.h -+++ b/arch/x86/include/asm/kvm_host.h -@@ -563,6 +563,7 @@ struct kvm_vcpu_arch { - u64 ia32_misc_enable_msr; - u64 smbase; - u64 smi_count; -+ bool at_instruction_boundary; - bool tpr_access_reporting; - u64 ia32_xss; - u64 microcode_version; -@@ -981,6 +982,8 @@ struct kvm_vcpu_stat { - u64 irq_injections; - u64 nmi_injections; - u64 req_event; -+ u64 preemption_reported; -+ u64 preemption_other; - }; - - struct x86_instruction_info; -diff --git a/arch/x86/kernel/cpu/topology.c b/arch/x86/kernel/cpu/topology.c -index 24da5ee4f0220..5729ed7bb3e7d 100644 ---- a/arch/x86/kernel/cpu/topology.c -+++ b/arch/x86/kernel/cpu/topology.c -@@ -79,7 +79,7 @@ int detect_extended_topology_early(struct cpuinfo_x86 *c) - * initial apic id, which also represents 32-bit extended x2apic id. - */ - c->initial_apicid = edx; -- smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx); -+ smp_num_siblings = max_t(int, smp_num_siblings, LEVEL_MAX_SIBLINGS(ebx)); - #endif - return 0; - } -@@ -107,7 +107,8 @@ int detect_extended_topology(struct cpuinfo_x86 *c) - */ - cpuid_count(leaf, SMT_LEVEL, &eax, &ebx, &ecx, &edx); - c->initial_apicid = edx; -- core_level_siblings = smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx); -+ core_level_siblings = LEVEL_MAX_SIBLINGS(ebx); -+ smp_num_siblings = max_t(int, smp_num_siblings, LEVEL_MAX_SIBLINGS(ebx)); - core_plus_mask_width = ht_mask_width = BITS_SHIFT_NEXT_LEVEL(eax); - die_level_siblings = LEVEL_MAX_SIBLINGS(ebx); - die_plus_mask_width = BITS_SHIFT_NEXT_LEVEL(eax); -diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c -index e72042dc9487c..9b2bbb66d0c87 100644 ---- a/arch/x86/kernel/dumpstack.c -+++ b/arch/x86/kernel/dumpstack.c -@@ -171,7 +171,6 @@ void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, - printk("%sCall Trace:\n", log_lvl); - - unwind_start(&state, task, regs, stack); -- stack = stack ? : get_stack_pointer(task, regs); - regs = unwind_get_entry_regs(&state, &partial); - - /* -@@ -190,9 +189,13 @@ void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, - * - hardirq stack - * - entry stack - */ -- for ( ; stack; stack = PTR_ALIGN(stack_info.next_sp, sizeof(long))) { -+ for (stack = stack ?: get_stack_pointer(task, regs); -+ stack; -+ stack = stack_info.next_sp) { - const char *stack_name; - -+ stack = PTR_ALIGN(stack, sizeof(long)); -+ - if (get_stack_info(stack, task, &stack_info, &visit_mask)) { - /* - * We weren't on a valid stack. It's possible that -diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c -index c5a9de8d07250..e9444e202c334 100644 ---- a/arch/x86/kvm/svm.c -+++ b/arch/x86/kvm/svm.c -@@ -6246,7 +6246,8 @@ out: - - static void svm_handle_exit_irqoff(struct kvm_vcpu *vcpu) - { -- -+ if (to_svm(vcpu)->vmcb->control.exit_code == SVM_EXIT_INTR) -+ vcpu->arch.at_instruction_boundary = true; - } - - static void svm_sched_in(struct kvm_vcpu *vcpu, int cpu) -diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c -index 9bd08d2646036..c930708297909 100644 ---- a/arch/x86/kvm/vmx/vmx.c -+++ b/arch/x86/kvm/vmx/vmx.c -@@ -6358,6 +6358,7 @@ static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu) - ); - - kvm_after_interrupt(vcpu); -+ vcpu->arch.at_instruction_boundary = true; - } - STACK_FRAME_NON_STANDARD(handle_external_interrupt_irqoff); - -diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c -index f5e9590a8f311..d152afdfa8b4f 100644 ---- a/arch/x86/kvm/x86.c -+++ b/arch/x86/kvm/x86.c -@@ -207,6 +207,8 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { - { "nmi_injections", VCPU_STAT(nmi_injections) }, - { "req_event", VCPU_STAT(req_event) }, - { "l1d_flush", VCPU_STAT(l1d_flush) }, -+ { "preemption_reported", VCPU_STAT(preemption_reported) }, -+ { "preemption_other", VCPU_STAT(preemption_other) }, - { "mmu_shadow_zapped", VM_STAT(mmu_shadow_zapped) }, - { "mmu_pte_write", VM_STAT(mmu_pte_write) }, - { "mmu_pde_zapped", VM_STAT(mmu_pde_zapped) }, -@@ -3562,6 +3564,19 @@ static void kvm_steal_time_set_preempted(struct kvm_vcpu *vcpu) - struct kvm_host_map map; - struct kvm_steal_time *st; - -+ /* -+ * The vCPU can be marked preempted if and only if the VM-Exit was on -+ * an instruction boundary and will not trigger guest emulation of any -+ * kind (see vcpu_run). Vendor specific code controls (conservatively) -+ * when this is true, for example allowing the vCPU to be marked -+ * preempted if and only if the VM-Exit was due to a host interrupt. -+ */ -+ if (!vcpu->arch.at_instruction_boundary) { -+ vcpu->stat.preemption_other++; -+ return; -+ } -+ -+ vcpu->stat.preemption_reported++; - if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED)) - return; - -@@ -8446,6 +8461,13 @@ static int vcpu_run(struct kvm_vcpu *vcpu) - vcpu->arch.l1tf_flush_l1d = true; - - for (;;) { -+ /* -+ * If another guest vCPU requests a PV TLB flush in the middle -+ * of instruction emulation, the rest of the emulation could -+ * use a stale page translation. Assume that any code after -+ * this point can start executing an instruction. -+ */ -+ vcpu->arch.at_instruction_boundary = false; - if (kvm_vcpu_running(vcpu)) { - r = vcpu_enter_guest(vcpu); - } else { -diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c -index af352e228fa2b..38e6798ce44fc 100644 ---- a/arch/x86/mm/init.c -+++ b/arch/x86/mm/init.c -@@ -9,6 +9,7 @@ - #include - - #include -+#include - #include - #include - #include -@@ -208,6 +209,24 @@ static void __init probe_page_size_mask(void) - } - } - -+#define INTEL_MATCH(_model) { .vendor = X86_VENDOR_INTEL, \ -+ .family = 6, \ -+ .model = _model, \ -+ } -+/* -+ * INVLPG may not properly flush Global entries -+ * on these CPUs when PCIDs are enabled. -+ */ -+static const struct x86_cpu_id invlpg_miss_ids[] = { -+ INTEL_MATCH(INTEL_FAM6_ALDERLAKE ), -+ INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L ), -+ INTEL_MATCH(INTEL_FAM6_ALDERLAKE_N ), -+ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE ), -+ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P), -+ INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S), -+ {} -+}; -+ - static void setup_pcid(void) - { - if (!IS_ENABLED(CONFIG_X86_64)) -@@ -216,6 +235,12 @@ static void setup_pcid(void) - if (!boot_cpu_has(X86_FEATURE_PCID)) - return; - -+ if (x86_match_cpu(invlpg_miss_ids)) { -+ pr_info("Incomplete global flushes, disabling PCID"); -+ setup_clear_cpu_cap(X86_FEATURE_PCID); -+ return; -+ } -+ - if (boot_cpu_has(X86_FEATURE_PGE)) { - /* - * This can't be cr4_set_bits_and_update_boot() -- the -diff --git a/drivers/acpi/acpica/dbnames.c b/drivers/acpi/acpica/dbnames.c -index 63fe30e868075..7f14403165dd1 100644 ---- a/drivers/acpi/acpica/dbnames.c -+++ b/drivers/acpi/acpica/dbnames.c -@@ -571,6 +571,9 @@ acpi_status acpi_db_display_objects(char *obj_type_arg, char *display_count_arg) - object_info = - ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_object_info)); - -+ if (!object_info) -+ return (AE_NO_MEMORY); -+ - /* Walk the namespace from the root */ - - (void)acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, -diff --git a/drivers/acpi/acpica/dswstate.c b/drivers/acpi/acpica/dswstate.c -index de79f835a3737..7979d52dfbc96 100644 ---- a/drivers/acpi/acpica/dswstate.c -+++ b/drivers/acpi/acpica/dswstate.c -@@ -576,9 +576,14 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state, - ACPI_FUNCTION_TRACE(ds_init_aml_walk); - - walk_state->parser_state.aml = -- walk_state->parser_state.aml_start = aml_start; -- walk_state->parser_state.aml_end = -- walk_state->parser_state.pkg_end = aml_start + aml_length; -+ walk_state->parser_state.aml_start = -+ walk_state->parser_state.aml_end = -+ walk_state->parser_state.pkg_end = aml_start; -+ /* Avoid undefined behavior: applying zero offset to null pointer */ -+ if (aml_length != 0) { -+ walk_state->parser_state.aml_end += aml_length; -+ walk_state->parser_state.pkg_end += aml_length; -+ } - - /* The next_op of the next_walk will be the beginning of the method */ - -diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c -index defc5796b5084..c7baccd47b89f 100644 ---- a/drivers/acpi/ec.c -+++ b/drivers/acpi/ec.c -@@ -1118,6 +1118,7 @@ static void acpi_ec_remove_query_handlers(struct acpi_ec *ec, - void acpi_ec_remove_query_handler(struct acpi_ec *ec, u8 query_bit) - { - acpi_ec_remove_query_handlers(ec, false, query_bit); -+ flush_workqueue(ec_query_wq); - } - EXPORT_SYMBOL_GPL(acpi_ec_remove_query_handler); - -diff --git a/drivers/base/core.c b/drivers/base/core.c -index 1b016fdd1a750..f8e157ede44f8 100644 ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -3474,6 +3474,13 @@ void device_set_of_node_from_dev(struct device *dev, const struct device *dev2) - } - EXPORT_SYMBOL_GPL(device_set_of_node_from_dev); - -+void device_set_node(struct device *dev, struct fwnode_handle *fwnode) -+{ -+ dev->fwnode = fwnode; -+ dev->of_node = to_of_node(fwnode); -+} -+EXPORT_SYMBOL_GPL(device_set_node); -+ - int device_match_name(struct device *dev, const void *name) - { - return sysfs_streq(dev_name(dev), name); -diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c -index 7f4b3b62492ca..7fdd702e564ae 100644 ---- a/drivers/base/regmap/regcache.c -+++ b/drivers/base/regmap/regcache.c -@@ -343,6 +343,9 @@ int regcache_sync(struct regmap *map) - const char *name; - bool bypass; - -+ if (WARN_ON(map->cache_type == REGCACHE_NONE)) -+ return -EINVAL; -+ - BUG_ON(!map->cache_ops); - - map->lock(map->lock_arg); -@@ -412,6 +415,9 @@ int regcache_sync_region(struct regmap *map, unsigned int min, - const char *name; - bool bypass; - -+ if (WARN_ON(map->cache_type == REGCACHE_NONE)) -+ return -EINVAL; -+ - BUG_ON(!map->cache_ops); - - map->lock(map->lock_arg); -diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c -index 9c61be2afca7e..5456d8e2eef28 100644 ---- a/drivers/char/tpm/tpm_tis.c -+++ b/drivers/char/tpm/tpm_tis.c -@@ -83,6 +83,22 @@ static const struct dmi_system_id tpm_tis_dmi_table[] = { - DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T490s"), - }, - }, -+ { -+ .callback = tpm_tis_disable_irq, -+ .ident = "ThinkStation P360 Tiny", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkStation P360 Tiny"), -+ }, -+ }, -+ { -+ .callback = tpm_tis_disable_irq, -+ .ident = "ThinkPad L490", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L490"), -+ }, -+ }, - {} - }; - -diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c -index 3e0f04f0e16e5..3f74497d73e58 100644 ---- a/drivers/clk/tegra/clk-tegra20.c -+++ b/drivers/clk/tegra/clk-tegra20.c -@@ -18,24 +18,24 @@ - #define MISC_CLK_ENB 0x48 - - #define OSC_CTRL 0x50 --#define OSC_CTRL_OSC_FREQ_MASK (3<<30) --#define OSC_CTRL_OSC_FREQ_13MHZ (0<<30) --#define OSC_CTRL_OSC_FREQ_19_2MHZ (1<<30) --#define OSC_CTRL_OSC_FREQ_12MHZ (2<<30) --#define OSC_CTRL_OSC_FREQ_26MHZ (3<<30) --#define OSC_CTRL_MASK (0x3f2 | OSC_CTRL_OSC_FREQ_MASK) -- --#define OSC_CTRL_PLL_REF_DIV_MASK (3<<28) --#define OSC_CTRL_PLL_REF_DIV_1 (0<<28) --#define OSC_CTRL_PLL_REF_DIV_2 (1<<28) --#define OSC_CTRL_PLL_REF_DIV_4 (2<<28) -+#define OSC_CTRL_OSC_FREQ_MASK (3u<<30) -+#define OSC_CTRL_OSC_FREQ_13MHZ (0u<<30) -+#define OSC_CTRL_OSC_FREQ_19_2MHZ (1u<<30) -+#define OSC_CTRL_OSC_FREQ_12MHZ (2u<<30) -+#define OSC_CTRL_OSC_FREQ_26MHZ (3u<<30) -+#define OSC_CTRL_MASK (0x3f2u | OSC_CTRL_OSC_FREQ_MASK) -+ -+#define OSC_CTRL_PLL_REF_DIV_MASK (3u<<28) -+#define OSC_CTRL_PLL_REF_DIV_1 (0u<<28) -+#define OSC_CTRL_PLL_REF_DIV_2 (1u<<28) -+#define OSC_CTRL_PLL_REF_DIV_4 (2u<<28) - - #define OSC_FREQ_DET 0x58 --#define OSC_FREQ_DET_TRIG (1<<31) -+#define OSC_FREQ_DET_TRIG (1u<<31) - - #define OSC_FREQ_DET_STATUS 0x5c --#define OSC_FREQ_DET_BUSY (1<<31) --#define OSC_FREQ_DET_CNT_MASK 0xFFFF -+#define OSC_FREQ_DET_BUSYu (1<<31) -+#define OSC_FREQ_DET_CNT_MASK 0xFFFFu - - #define TEGRA20_CLK_PERIPH_BANKS 3 - -diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c -index e497785cd99fe..b0e8752174c6f 100644 ---- a/drivers/firmware/arm_sdei.c -+++ b/drivers/firmware/arm_sdei.c -@@ -44,6 +44,8 @@ static asmlinkage void (*sdei_firmware_call)(unsigned long function_id, - /* entry point from firmware to arch asm code */ - static unsigned long sdei_entry_point; - -+static int sdei_hp_state; -+ - struct sdei_event { - /* These three are protected by the sdei_list_lock */ - struct list_head list; -@@ -305,8 +307,6 @@ int sdei_mask_local_cpu(void) - { - int err; - -- WARN_ON_ONCE(preemptible()); -- - err = invoke_sdei_fn(SDEI_1_0_FN_SDEI_PE_MASK, 0, 0, 0, 0, 0, NULL); - if (err && err != -EIO) { - pr_warn_once("failed to mask CPU[%u]: %d\n", -@@ -319,6 +319,7 @@ int sdei_mask_local_cpu(void) - - static void _ipi_mask_cpu(void *ignored) - { -+ WARN_ON_ONCE(preemptible()); - sdei_mask_local_cpu(); - } - -@@ -326,8 +327,6 @@ int sdei_unmask_local_cpu(void) - { - int err; - -- WARN_ON_ONCE(preemptible()); -- - err = invoke_sdei_fn(SDEI_1_0_FN_SDEI_PE_UNMASK, 0, 0, 0, 0, 0, NULL); - if (err && err != -EIO) { - pr_warn_once("failed to unmask CPU[%u]: %d\n", -@@ -340,6 +339,7 @@ int sdei_unmask_local_cpu(void) - - static void _ipi_unmask_cpu(void *ignored) - { -+ WARN_ON_ONCE(preemptible()); - sdei_unmask_local_cpu(); - } - -@@ -347,6 +347,8 @@ static void _ipi_private_reset(void *ignored) - { - int err; - -+ WARN_ON_ONCE(preemptible()); -+ - err = invoke_sdei_fn(SDEI_1_0_FN_SDEI_PRIVATE_RESET, 0, 0, 0, 0, 0, - NULL); - if (err && err != -EIO) -@@ -393,8 +395,6 @@ static void _local_event_enable(void *data) - int err; - struct sdei_crosscall_args *arg = data; - -- WARN_ON_ONCE(preemptible()); -- - err = sdei_api_event_enable(arg->event->event_num); - - sdei_cross_call_return(arg, err); -@@ -485,8 +485,6 @@ static void _local_event_unregister(void *data) - int err; - struct sdei_crosscall_args *arg = data; - -- WARN_ON_ONCE(preemptible()); -- - err = sdei_api_event_unregister(arg->event->event_num); - - sdei_cross_call_return(arg, err); -@@ -575,8 +573,6 @@ static void _local_event_register(void *data) - struct sdei_registered_event *reg; - struct sdei_crosscall_args *arg = data; - -- WARN_ON(preemptible()); -- - reg = per_cpu_ptr(arg->event->private_registered, smp_processor_id()); - err = sdei_api_event_register(arg->event->event_num, sdei_entry_point, - reg, 0, 0); -@@ -756,6 +752,8 @@ static int sdei_pm_notifier(struct notifier_block *nb, unsigned long action, - { - int rv; - -+ WARN_ON_ONCE(preemptible()); -+ - switch (action) { - case CPU_PM_ENTER: - rv = sdei_mask_local_cpu(); -@@ -804,7 +802,7 @@ static int sdei_device_freeze(struct device *dev) - int err; - - /* unregister private events */ -- cpuhp_remove_state(CPUHP_AP_ARM_SDEI_STARTING); -+ cpuhp_remove_state(sdei_entry_point); - - err = sdei_unregister_shared(); - if (err) -@@ -825,12 +823,15 @@ static int sdei_device_thaw(struct device *dev) - return err; - } - -- err = cpuhp_setup_state(CPUHP_AP_ARM_SDEI_STARTING, "SDEI", -+ err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "SDEI", - &sdei_cpuhp_up, &sdei_cpuhp_down); -- if (err) -+ if (err < 0) { - pr_warn("Failed to re-register CPU hotplug notifier...\n"); -+ return err; -+ } - -- return err; -+ sdei_hp_state = err; -+ return 0; - } - - static int sdei_device_restore(struct device *dev) -@@ -862,7 +863,7 @@ static int sdei_reboot_notifier(struct notifier_block *nb, unsigned long action, - * We are going to reset the interface, after this there is no point - * doing work when we take CPUs offline. - */ -- cpuhp_remove_state(CPUHP_AP_ARM_SDEI_STARTING); -+ cpuhp_remove_state(sdei_hp_state); - - sdei_platform_reset(); - -@@ -1044,13 +1045,15 @@ static int sdei_probe(struct platform_device *pdev) - goto remove_cpupm; - } - -- err = cpuhp_setup_state(CPUHP_AP_ARM_SDEI_STARTING, "SDEI", -+ err = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "SDEI", - &sdei_cpuhp_up, &sdei_cpuhp_down); -- if (err) { -+ if (err < 0) { - pr_warn("Failed to register CPU hotplug notifier...\n"); - goto remove_reboot; - } - -+ sdei_hp_state = err; -+ - return 0; - - remove_reboot: -diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c -index 9c1c4d81aa7b6..3e983d98837b4 100644 ---- a/drivers/gpio/gpio-mockup.c -+++ b/drivers/gpio/gpio-mockup.c -@@ -339,7 +339,7 @@ static void gpio_mockup_debugfs_setup(struct device *dev, - priv->offset = i; - priv->desc = &gc->gpiodev->descs[i]; - -- debugfs_create_file(name, 0200, chip->dbg_dir, priv, -+ debugfs_create_file(name, 0600, chip->dbg_dir, priv, - &gpio_mockup_debugfs_ops); - } - -diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c -index 6fd57cfb112f5..96fdc18ecb3bf 100644 ---- a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c -+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c -@@ -778,7 +778,7 @@ static void dce_transform_set_pixel_storage_depth( - color_depth = COLOR_DEPTH_101010; - pixel_depth = 0; - expan_mode = 1; -- BREAK_TO_DEBUGGER(); -+ DC_LOG_DC("The pixel depth %d is not valid, set COLOR_DEPTH_101010 instead.", depth); - break; - } - -@@ -792,8 +792,7 @@ static void dce_transform_set_pixel_storage_depth( - if (!(xfm_dce->lb_pixel_depth_supported & depth)) { - /*we should use unsupported capabilities - * unless it is required by w/a*/ -- DC_LOG_WARNING("%s: Capability not supported", -- __func__); -+ DC_LOG_DC("%s: Capability not supported", __func__); - } - } - -diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c -index b942c69e9b489..17a96f1d9234c 100644 ---- a/drivers/gpu/drm/drm_mipi_dsi.c -+++ b/drivers/gpu/drm/drm_mipi_dsi.c -@@ -221,7 +221,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host, - return dsi; - } - -- dsi->dev.of_node = info->node; -+ device_set_node(&dsi->dev, of_fwnode_handle(info->node)); - dsi->channel = info->channel; - strlcpy(dsi->name, info->type, sizeof(dsi->name)); - -diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.h b/drivers/gpu/drm/exynos/exynos_drm_g2d.h -index 74ea3c26deadc..1a5ae781b56c6 100644 ---- a/drivers/gpu/drm/exynos/exynos_drm_g2d.h -+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.h -@@ -34,11 +34,11 @@ static inline int exynos_g2d_exec_ioctl(struct drm_device *dev, void *data, - return -ENODEV; - } - --int g2d_open(struct drm_device *drm_dev, struct drm_file *file) -+static inline int g2d_open(struct drm_device *drm_dev, struct drm_file *file) - { - return 0; - } - --void g2d_close(struct drm_device *drm_dev, struct drm_file *file) -+static inline void g2d_close(struct drm_device *drm_dev, struct drm_file *file) - { } - #endif -diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c -index 0419b6105c8a5..ccd084abc8c94 100644 ---- a/drivers/gpu/drm/tegra/sor.c -+++ b/drivers/gpu/drm/tegra/sor.c -@@ -906,7 +906,7 @@ static int tegra_sor_compute_config(struct tegra_sor *sor, - struct drm_dp_link *link) - { - const u64 f = 100000, link_rate = link->rate * 1000; -- const u64 pclk = mode->clock * 1000; -+ const u64 pclk = (u64)mode->clock * 1000; - u64 input, output, watermark, num; - struct tegra_sor_params params; - u32 num_syms_per_line; -diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c -index 919551ed5809c..b8558292801ec 100644 ---- a/drivers/hid/hid-logitech-hidpp.c -+++ b/drivers/hid/hid-logitech-hidpp.c -@@ -809,8 +809,7 @@ static int hidpp_unifying_init(struct hidpp_device *hidpp) - if (ret) - return ret; - -- snprintf(hdev->uniq, sizeof(hdev->uniq), "%04x-%4phD", -- hdev->product, &serial); -+ snprintf(hdev->uniq, sizeof(hdev->uniq), "%4phD", &serial); - dbg_hid("HID++ Unifying: Got serial: %s\n", hdev->uniq); - - name = hidpp_unifying_get_name(hidpp); -@@ -903,6 +902,54 @@ print_version: - return 0; - } - -+/* -------------------------------------------------------------------------- */ -+/* 0x0003: Device Information */ -+/* -------------------------------------------------------------------------- */ -+ -+#define HIDPP_PAGE_DEVICE_INFORMATION 0x0003 -+ -+#define CMD_GET_DEVICE_INFO 0x00 -+ -+static int hidpp_get_serial(struct hidpp_device *hidpp, u32 *serial) -+{ -+ struct hidpp_report response; -+ u8 feature_type; -+ u8 feature_index; -+ int ret; -+ -+ ret = hidpp_root_get_feature(hidpp, HIDPP_PAGE_DEVICE_INFORMATION, -+ &feature_index, -+ &feature_type); -+ if (ret) -+ return ret; -+ -+ ret = hidpp_send_fap_command_sync(hidpp, feature_index, -+ CMD_GET_DEVICE_INFO, -+ NULL, 0, &response); -+ if (ret) -+ return ret; -+ -+ /* See hidpp_unifying_get_serial() */ -+ *serial = *((u32 *)&response.rap.params[1]); -+ return 0; -+} -+ -+static int hidpp_serial_init(struct hidpp_device *hidpp) -+{ -+ struct hid_device *hdev = hidpp->hid_dev; -+ u32 serial; -+ int ret; -+ -+ ret = hidpp_get_serial(hidpp, &serial); -+ if (ret) -+ return ret; -+ -+ snprintf(hdev->uniq, sizeof(hdev->uniq), "%4phD", &serial); -+ dbg_hid("HID++ DeviceInformation: Got serial: %s\n", hdev->uniq); -+ -+ return 0; -+} -+ - /* -------------------------------------------------------------------------- */ - /* 0x0005: GetDeviceNameType */ - /* -------------------------------------------------------------------------- */ -@@ -3651,6 +3698,8 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) - - if (hidpp->quirks & HIDPP_QUIRK_UNIFYING) - hidpp_unifying_init(hidpp); -+ else if (hid_is_usb(hidpp->hid_dev)) -+ hidpp_serial_init(hidpp); - - connected = hidpp_root_get_protocol_version(hidpp) == 0; - atomic_set(&hidpp->connected, connected); -diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h -index 203d27d198b81..3f8b24a57014b 100644 ---- a/drivers/hid/wacom.h -+++ b/drivers/hid/wacom.h -@@ -91,6 +91,7 @@ - #include - #include - #include -+#include - #include - - /* -@@ -167,6 +168,7 @@ struct wacom { - struct delayed_work init_work; - struct wacom_remote *remote; - struct work_struct mode_change_work; -+ struct timer_list idleprox_timer; - bool generic_has_leds; - struct wacom_leds { - struct wacom_group_leds *groups; -@@ -239,4 +241,5 @@ struct wacom_led *wacom_led_find(struct wacom *wacom, unsigned int group, - struct wacom_led *wacom_led_next(struct wacom *wacom, struct wacom_led *cur); - int wacom_equivalent_usage(int usage); - int wacom_initialize_leds(struct wacom *wacom); -+void wacom_idleprox_timeout(struct timer_list *list); - #endif -diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c -index b42785fdf7ed5..a93070f5b214c 100644 ---- a/drivers/hid/wacom_sys.c -+++ b/drivers/hid/wacom_sys.c -@@ -2781,6 +2781,7 @@ static int wacom_probe(struct hid_device *hdev, - INIT_WORK(&wacom->battery_work, wacom_battery_work); - INIT_WORK(&wacom->remote_work, wacom_remote_work); - INIT_WORK(&wacom->mode_change_work, wacom_mode_change_work); -+ timer_setup(&wacom->idleprox_timer, &wacom_idleprox_timeout, TIMER_DEFERRABLE); - - /* ask for the report descriptor to be loaded by HID */ - error = hid_parse(hdev); -@@ -2825,6 +2826,7 @@ static void wacom_remove(struct hid_device *hdev) - cancel_work_sync(&wacom->battery_work); - cancel_work_sync(&wacom->remote_work); - cancel_work_sync(&wacom->mode_change_work); -+ del_timer_sync(&wacom->idleprox_timer); - if (hdev->bus == BUS_BLUETOOTH) - device_remove_file(&hdev->dev, &dev_attr_speed); - -diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c -index 339bc7f1fcedb..099f7cccc3a7a 100644 ---- a/drivers/hid/wacom_wac.c -+++ b/drivers/hid/wacom_wac.c -@@ -11,6 +11,7 @@ - #include "wacom_wac.h" - #include "wacom.h" - #include -+#include - - /* resolution for penabled devices */ - #define WACOM_PL_RES 20 -@@ -41,6 +42,43 @@ static int wacom_numbered_button_to_key(int n); - - static void wacom_update_led(struct wacom *wacom, int button_count, int mask, - int group); -+ -+static void wacom_force_proxout(struct wacom_wac *wacom_wac) -+{ -+ struct input_dev *input = wacom_wac->pen_input; -+ -+ wacom_wac->shared->stylus_in_proximity = 0; -+ -+ input_report_key(input, BTN_TOUCH, 0); -+ input_report_key(input, BTN_STYLUS, 0); -+ input_report_key(input, BTN_STYLUS2, 0); -+ input_report_key(input, BTN_STYLUS3, 0); -+ input_report_key(input, wacom_wac->tool[0], 0); -+ if (wacom_wac->serial[0]) { -+ input_report_abs(input, ABS_MISC, 0); -+ } -+ input_report_abs(input, ABS_PRESSURE, 0); -+ -+ wacom_wac->tool[0] = 0; -+ wacom_wac->id[0] = 0; -+ wacom_wac->serial[0] = 0; -+ -+ input_sync(input); -+} -+ -+void wacom_idleprox_timeout(struct timer_list *list) -+{ -+ struct wacom *wacom = from_timer(wacom, list, idleprox_timer); -+ struct wacom_wac *wacom_wac = &wacom->wacom_wac; -+ -+ if (!wacom_wac->hid_data.sense_state) { -+ return; -+ } -+ -+ hid_warn(wacom->hdev, "%s: tool appears to be hung in-prox. forcing it out.\n", __func__); -+ wacom_force_proxout(wacom_wac); -+} -+ - /* - * Percent of battery capacity for Graphire. - * 8th value means AC online and show 100% capacity. -@@ -675,11 +713,14 @@ static int wacom_intuos_get_tool_type(int tool_id) - case 0x802: /* Intuos4/5 13HD/24HD General Pen */ - case 0x8e2: /* IntuosHT2 pen */ - case 0x022: -+ case 0x200: /* Pro Pen 3 */ -+ case 0x04200: /* Pro Pen 3 */ - case 0x10842: /* MobileStudio Pro Pro Pen slim */ - case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */ - case 0x16802: /* Cintiq 13HD Pro Pen */ - case 0x18802: /* DTH2242 Pen */ - case 0x10802: /* Intuos4/5 13HD/24HD General Pen */ -+ case 0x80842: /* Intuos Pro and Cintiq Pro 3D Pen */ - tool_type = BTN_TOOL_PEN; - break; - -@@ -1927,18 +1968,7 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage, - static void wacom_wac_battery_usage_mapping(struct hid_device *hdev, - struct hid_field *field, struct hid_usage *usage) - { -- struct wacom *wacom = hid_get_drvdata(hdev); -- struct wacom_wac *wacom_wac = &wacom->wacom_wac; -- struct wacom_features *features = &wacom_wac->features; -- unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); -- -- switch (equivalent_usage) { -- case HID_DG_BATTERYSTRENGTH: -- case WACOM_HID_WD_BATTERY_LEVEL: -- case WACOM_HID_WD_BATTERY_CHARGING: -- features->quirks |= WACOM_QUIRK_BATTERY; -- break; -- } -+ return; - } - - static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *field, -@@ -1959,18 +1989,21 @@ static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *f - wacom_wac->hid_data.bat_connected = 1; - wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO; - } -+ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY; - break; - case WACOM_HID_WD_BATTERY_LEVEL: - value = value * 100 / (field->logical_maximum - field->logical_minimum); - wacom_wac->hid_data.battery_capacity = value; - wacom_wac->hid_data.bat_connected = 1; - wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO; -+ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY; - break; - case WACOM_HID_WD_BATTERY_CHARGING: - wacom_wac->hid_data.bat_charging = value; - wacom_wac->hid_data.ps_connected = value; - wacom_wac->hid_data.bat_connected = 1; - wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO; -+ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY; - break; - } - } -@@ -1986,18 +2019,15 @@ static void wacom_wac_battery_report(struct hid_device *hdev, - { - struct wacom *wacom = hid_get_drvdata(hdev); - struct wacom_wac *wacom_wac = &wacom->wacom_wac; -- struct wacom_features *features = &wacom_wac->features; - -- if (features->quirks & WACOM_QUIRK_BATTERY) { -- int status = wacom_wac->hid_data.bat_status; -- int capacity = wacom_wac->hid_data.battery_capacity; -- bool charging = wacom_wac->hid_data.bat_charging; -- bool connected = wacom_wac->hid_data.bat_connected; -- bool powered = wacom_wac->hid_data.ps_connected; -+ int status = wacom_wac->hid_data.bat_status; -+ int capacity = wacom_wac->hid_data.battery_capacity; -+ bool charging = wacom_wac->hid_data.bat_charging; -+ bool connected = wacom_wac->hid_data.bat_connected; -+ bool powered = wacom_wac->hid_data.ps_connected; - -- wacom_notify_battery(wacom_wac, status, capacity, charging, -- connected, powered); -- } -+ wacom_notify_battery(wacom_wac, status, capacity, charging, -+ connected, powered); - } - - static void wacom_wac_pad_usage_mapping(struct hid_device *hdev, -@@ -2339,6 +2369,7 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field - value = field->logical_maximum - value; - break; - case HID_DG_INRANGE: -+ mod_timer(&wacom->idleprox_timer, jiffies + msecs_to_jiffies(100)); - wacom_wac->hid_data.inrange_state = value; - if (!(features->quirks & WACOM_QUIRK_SENSE)) - wacom_wac->hid_data.sense_state = value; -@@ -4812,6 +4843,10 @@ static const struct wacom_features wacom_features_0x3c6 = - static const struct wacom_features wacom_features_0x3c8 = - { "Wacom Intuos BT M", 21600, 13500, 4095, 63, - INTUOSHT3_BT, WACOM_INTUOS_RES, WACOM_INTUOS_RES, 4 }; -+static const struct wacom_features wacom_features_0x3dd = -+ { "Wacom Intuos Pro S", 31920, 19950, 8191, 63, -+ INTUOSP2S_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 7, -+ .touch_max = 10 }; - - static const struct wacom_features wacom_features_HID_ANY_ID = - { "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID }; -@@ -4991,6 +5026,7 @@ const struct hid_device_id wacom_ids[] = { - { BT_DEVICE_WACOM(0x393) }, - { BT_DEVICE_WACOM(0x3c6) }, - { BT_DEVICE_WACOM(0x3c8) }, -+ { BT_DEVICE_WACOM(0x3dd) }, - { USB_DEVICE_WACOM(0x4001) }, - { USB_DEVICE_WACOM(0x4004) }, - { USB_DEVICE_WACOM(0x5000) }, -diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c -index ed77c7f7b344b..763463776a0e1 100644 ---- a/drivers/hwtracing/coresight/coresight-tmc-etr.c -+++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c -@@ -909,7 +909,7 @@ tmc_etr_buf_insert_barrier_packet(struct etr_buf *etr_buf, u64 offset) - - len = tmc_etr_buf_get_data(etr_buf, offset, - CORESIGHT_BARRIER_PKT_SIZE, &bufp); -- if (WARN_ON(len < CORESIGHT_BARRIER_PKT_SIZE)) -+ if (WARN_ON(len < 0 || len < CORESIGHT_BARRIER_PKT_SIZE)) - return -EINVAL; - coresight_insert_barrier_packet(bufp); - return offset + CORESIGHT_BARRIER_PKT_SIZE; -diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c -index ad3a092b8b5c3..390123f87658b 100644 ---- a/drivers/infiniband/core/user_mad.c -+++ b/drivers/infiniband/core/user_mad.c -@@ -131,6 +131,11 @@ struct ib_umad_packet { - struct ib_user_mad mad; - }; - -+struct ib_rmpp_mad_hdr { -+ struct ib_mad_hdr mad_hdr; -+ struct ib_rmpp_hdr rmpp_hdr; -+} __packed; -+ - #define CREATE_TRACE_POINTS - #include - -@@ -494,11 +499,11 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, - size_t count, loff_t *pos) - { - struct ib_umad_file *file = filp->private_data; -+ struct ib_rmpp_mad_hdr *rmpp_mad_hdr; - struct ib_umad_packet *packet; - struct ib_mad_agent *agent; - struct rdma_ah_attr ah_attr; - struct ib_ah *ah; -- struct ib_rmpp_mad *rmpp_mad; - __be64 *tid; - int ret, data_len, hdr_len, copy_offset, rmpp_active; - u8 base_version; -@@ -506,7 +511,7 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, - if (count < hdr_size(file) + IB_MGMT_RMPP_HDR) - return -EINVAL; - -- packet = kzalloc(sizeof *packet + IB_MGMT_RMPP_HDR, GFP_KERNEL); -+ packet = kzalloc(sizeof(*packet) + IB_MGMT_RMPP_HDR, GFP_KERNEL); - if (!packet) - return -ENOMEM; - -@@ -560,13 +565,13 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, - goto err_up; - } - -- rmpp_mad = (struct ib_rmpp_mad *) packet->mad.data; -- hdr_len = ib_get_mad_data_offset(rmpp_mad->mad_hdr.mgmt_class); -+ rmpp_mad_hdr = (struct ib_rmpp_mad_hdr *)packet->mad.data; -+ hdr_len = ib_get_mad_data_offset(rmpp_mad_hdr->mad_hdr.mgmt_class); - -- if (ib_is_mad_class_rmpp(rmpp_mad->mad_hdr.mgmt_class) -+ if (ib_is_mad_class_rmpp(rmpp_mad_hdr->mad_hdr.mgmt_class) - && ib_mad_kernel_rmpp_agent(agent)) { - copy_offset = IB_MGMT_RMPP_HDR; -- rmpp_active = ib_get_rmpp_flags(&rmpp_mad->rmpp_hdr) & -+ rmpp_active = ib_get_rmpp_flags(&rmpp_mad_hdr->rmpp_hdr) & - IB_MGMT_RMPP_FLAG_ACTIVE; - } else { - copy_offset = IB_MGMT_MAD_HDR; -@@ -615,12 +620,12 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf, - tid = &((struct ib_mad_hdr *) packet->msg->mad)->tid; - *tid = cpu_to_be64(((u64) agent->hi_tid) << 32 | - (be64_to_cpup(tid) & 0xffffffff)); -- rmpp_mad->mad_hdr.tid = *tid; -+ rmpp_mad_hdr->mad_hdr.tid = *tid; - } - - if (!ib_mad_kernel_rmpp_agent(agent) -- && ib_is_mad_class_rmpp(rmpp_mad->mad_hdr.mgmt_class) -- && (ib_get_rmpp_flags(&rmpp_mad->rmpp_hdr) & IB_MGMT_RMPP_FLAG_ACTIVE)) { -+ && ib_is_mad_class_rmpp(rmpp_mad_hdr->mad_hdr.mgmt_class) -+ && (ib_get_rmpp_flags(&rmpp_mad_hdr->rmpp_hdr) & IB_MGMT_RMPP_FLAG_ACTIVE)) { - spin_lock_irq(&file->send_lock); - list_add_tail(&packet->list, &file->send_list); - spin_unlock_irq(&file->send_lock); -diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c -index 70dedc0f7827c..0bd55e1fca372 100644 ---- a/drivers/input/joystick/xpad.c -+++ b/drivers/input/joystick/xpad.c -@@ -489,6 +489,9 @@ struct xboxone_init_packet { - } - - -+#define GIP_WIRED_INTF_DATA 0 -+#define GIP_WIRED_INTF_AUDIO 1 -+ - /* - * This packet is required for all Xbox One pads with 2015 - * or later firmware installed (or present from the factory). -@@ -1813,7 +1816,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id - } - - if (xpad->xtype == XTYPE_XBOXONE && -- intf->cur_altsetting->desc.bInterfaceNumber != 0) { -+ intf->cur_altsetting->desc.bInterfaceNumber != GIP_WIRED_INTF_DATA) { - /* - * The Xbox One controller lists three interfaces all with the - * same interface class, subclass and protocol. Differentiate by -diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c -index 4f64c3a9ee88d..b3c5d7b4547a4 100644 ---- a/drivers/iommu/arm-smmu-v3.c -+++ b/drivers/iommu/arm-smmu-v3.c -@@ -760,6 +760,18 @@ static void queue_inc_cons(struct arm_smmu_ll_queue *q) - q->cons = Q_OVF(q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons); - } - -+static void queue_sync_cons_ovf(struct arm_smmu_queue *q) -+{ -+ struct arm_smmu_ll_queue *llq = &q->llq; -+ -+ if (likely(Q_OVF(llq->prod) == Q_OVF(llq->cons))) -+ return; -+ -+ llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | -+ Q_IDX(llq, llq->cons); -+ queue_sync_cons_out(q); -+} -+ - static int queue_sync_prod_in(struct arm_smmu_queue *q) - { - int ret = 0; -@@ -1720,8 +1732,7 @@ static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev) - } while (!queue_empty(llq)); - - /* Sync our overflow flag, as we believe we're up to speed */ -- llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | -- Q_IDX(llq, llq->cons); -+ queue_sync_cons_ovf(q); - return IRQ_HANDLED; - } - -@@ -1779,9 +1790,7 @@ static irqreturn_t arm_smmu_priq_thread(int irq, void *dev) - } while (!queue_empty(llq)); - - /* Sync our overflow flag, as we believe we're up to speed */ -- llq->cons = Q_OVF(llq->prod) | Q_WRP(llq, llq->cons) | -- Q_IDX(llq, llq->cons); -- queue_sync_cons_out(q); -+ queue_sync_cons_ovf(q); - return IRQ_HANDLED; - } - -diff --git a/drivers/mcb/mcb-pci.c b/drivers/mcb/mcb-pci.c -index 14866aa22f753..22927c80ff469 100644 ---- a/drivers/mcb/mcb-pci.c -+++ b/drivers/mcb/mcb-pci.c -@@ -31,7 +31,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) - { - struct resource *res; - struct priv *priv; -- int ret; -+ int ret, table_size; - unsigned long flags; - - priv = devm_kzalloc(&pdev->dev, sizeof(struct priv), GFP_KERNEL); -@@ -90,7 +90,30 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) - if (ret < 0) - goto out_mcb_bus; - -- dev_dbg(&pdev->dev, "Found %d cells\n", ret); -+ table_size = ret; -+ -+ if (table_size < CHAM_HEADER_SIZE) { -+ /* Release the previous resources */ -+ devm_iounmap(&pdev->dev, priv->base); -+ devm_release_mem_region(&pdev->dev, priv->mapbase, CHAM_HEADER_SIZE); -+ -+ /* Then, allocate it again with the actual chameleon table size */ -+ res = devm_request_mem_region(&pdev->dev, priv->mapbase, -+ table_size, -+ KBUILD_MODNAME); -+ if (!res) { -+ dev_err(&pdev->dev, "Failed to request PCI memory\n"); -+ ret = -EBUSY; -+ goto out_mcb_bus; -+ } -+ -+ priv->base = devm_ioremap(&pdev->dev, priv->mapbase, table_size); -+ if (!priv->base) { -+ dev_err(&pdev->dev, "Cannot ioremap\n"); -+ ret = -ENOMEM; -+ goto out_mcb_bus; -+ } -+ } - - mcb_bus_add_devices(priv->bus); - -diff --git a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c -index eb5621c9ebf85..129acf595410d 100644 ---- a/drivers/media/pci/netup_unidvb/netup_unidvb_core.c -+++ b/drivers/media/pci/netup_unidvb/netup_unidvb_core.c -@@ -697,7 +697,7 @@ static void netup_unidvb_dma_fini(struct netup_unidvb_dev *ndev, int num) - netup_unidvb_dma_enable(dma, 0); - msleep(50); - cancel_work_sync(&dma->work); -- del_timer(&dma->timeout); -+ del_timer_sync(&dma->timeout); - } - - static int netup_unidvb_dma_setup(struct netup_unidvb_dev *ndev) -diff --git a/drivers/media/radio/radio-shark.c b/drivers/media/radio/radio-shark.c -index 8230da828d0ee..127a3be0e0f07 100644 ---- a/drivers/media/radio/radio-shark.c -+++ b/drivers/media/radio/radio-shark.c -@@ -316,6 +316,16 @@ static int usb_shark_probe(struct usb_interface *intf, - { - struct shark_device *shark; - int retval = -ENOMEM; -+ static const u8 ep_addresses[] = { -+ SHARK_IN_EP | USB_DIR_IN, -+ SHARK_OUT_EP | USB_DIR_OUT, -+ 0}; -+ -+ /* Are the expected endpoints present? */ -+ if (!usb_check_int_endpoints(intf, ep_addresses)) { -+ dev_err(&intf->dev, "Invalid radioSHARK device\n"); -+ return -EINVAL; -+ } - - shark = kzalloc(sizeof(struct shark_device), GFP_KERNEL); - if (!shark) -diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio-shark2.c -index d150f12382c60..f1c5c0a6a335c 100644 ---- a/drivers/media/radio/radio-shark2.c -+++ b/drivers/media/radio/radio-shark2.c -@@ -282,6 +282,16 @@ static int usb_shark_probe(struct usb_interface *intf, - { - struct shark_device *shark; - int retval = -ENOMEM; -+ static const u8 ep_addresses[] = { -+ SHARK_IN_EP | USB_DIR_IN, -+ SHARK_OUT_EP | USB_DIR_OUT, -+ 0}; -+ -+ /* Are the expected endpoints present? */ -+ if (!usb_check_int_endpoints(intf, ep_addresses)) { -+ dev_err(&intf->dev, "Invalid radioSHARK2 device\n"); -+ return -EINVAL; -+ } - - shark = kzalloc(sizeof(struct shark_device), GFP_KERNEL); - if (!shark) -diff --git a/drivers/memstick/host/r592.c b/drivers/memstick/host/r592.c -index eaa2a94d18be4..dd06c18495eb6 100644 ---- a/drivers/memstick/host/r592.c -+++ b/drivers/memstick/host/r592.c -@@ -828,7 +828,7 @@ static void r592_remove(struct pci_dev *pdev) - /* Stop the processing thread. - That ensures that we won't take any more requests */ - kthread_stop(dev->io_thread); -- -+ del_timer_sync(&dev->detect_timer); - r592_enable_device(dev, false); - - while (!error && dev->req) { -diff --git a/drivers/message/fusion/mptlan.c b/drivers/message/fusion/mptlan.c -index ebc00d47abf52..624803a887d8f 100644 ---- a/drivers/message/fusion/mptlan.c -+++ b/drivers/message/fusion/mptlan.c -@@ -1430,7 +1430,9 @@ mptlan_remove(struct pci_dev *pdev) - { - MPT_ADAPTER *ioc = pci_get_drvdata(pdev); - struct net_device *dev = ioc->netdev; -+ struct mpt_lan_priv *priv = netdev_priv(dev); - -+ cancel_delayed_work_sync(&priv->post_buckets_task); - if(dev != NULL) { - unregister_netdev(dev); - free_netdev(dev); -diff --git a/drivers/mfd/dln2.c b/drivers/mfd/dln2.c -index 707f4287ab4a0..80952237e4b43 100644 ---- a/drivers/mfd/dln2.c -+++ b/drivers/mfd/dln2.c -@@ -797,6 +797,7 @@ out_stop_rx: - dln2_stop_rx_urbs(dln2); - - out_free: -+ usb_put_dev(dln2->usb_dev); - dln2_free(dln2); - - return ret; -diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c -index 0885991347d09..cdb9efae6032d 100644 ---- a/drivers/net/bonding/bond_main.c -+++ b/drivers/net/bonding/bond_main.c -@@ -3239,7 +3239,11 @@ static int bond_slave_netdev_event(unsigned long event, - unblock_netpoll_tx(); - break; - case NETDEV_FEAT_CHANGE: -- bond_compute_features(bond); -+ if (!bond->notifier_ctx) { -+ bond->notifier_ctx = true; -+ bond_compute_features(bond); -+ bond->notifier_ctx = false; -+ } - break; - case NETDEV_RESEND_IGMP: - /* Propagate to master device */ -@@ -4878,6 +4882,8 @@ static int bond_init(struct net_device *bond_dev) - if (!bond->wq) - return -ENOMEM; - -+ bond->notifier_ctx = false; -+ - spin_lock_init(&bond->stats_lock); - lockdep_register_key(&bond->stats_lock_key); - lockdep_set_class(&bond->stats_lock, &bond->stats_lock_key); -diff --git a/drivers/net/can/kvaser_pciefd.c b/drivers/net/can/kvaser_pciefd.c -index faa78d38d752b..560a0a5ba6f3f 100644 ---- a/drivers/net/can/kvaser_pciefd.c -+++ b/drivers/net/can/kvaser_pciefd.c -@@ -70,10 +70,12 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices"); - #define KVASER_PCIEFD_SYSID_BUILD_REG (KVASER_PCIEFD_SYSID_BASE + 0x14) - /* Shared receive buffer registers */ - #define KVASER_PCIEFD_SRB_BASE 0x1f200 -+#define KVASER_PCIEFD_SRB_FIFO_LAST_REG (KVASER_PCIEFD_SRB_BASE + 0x1f4) - #define KVASER_PCIEFD_SRB_CMD_REG (KVASER_PCIEFD_SRB_BASE + 0x200) - #define KVASER_PCIEFD_SRB_IEN_REG (KVASER_PCIEFD_SRB_BASE + 0x204) - #define KVASER_PCIEFD_SRB_IRQ_REG (KVASER_PCIEFD_SRB_BASE + 0x20c) - #define KVASER_PCIEFD_SRB_STAT_REG (KVASER_PCIEFD_SRB_BASE + 0x210) -+#define KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG (KVASER_PCIEFD_SRB_BASE + 0x214) - #define KVASER_PCIEFD_SRB_CTRL_REG (KVASER_PCIEFD_SRB_BASE + 0x218) - /* EPCS flash controller registers */ - #define KVASER_PCIEFD_SPI_BASE 0x1fc00 -@@ -110,6 +112,9 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices"); - /* DMA support */ - #define KVASER_PCIEFD_SRB_STAT_DMA BIT(24) - -+/* SRB current packet level */ -+#define KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK 0xff -+ - /* DMA Enable */ - #define KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE BIT(0) - -@@ -528,7 +533,7 @@ static int kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can) - KVASER_PCIEFD_KCAN_IRQ_TOF | KVASER_PCIEFD_KCAN_IRQ_ABD | - KVASER_PCIEFD_KCAN_IRQ_TAE | KVASER_PCIEFD_KCAN_IRQ_TAL | - KVASER_PCIEFD_KCAN_IRQ_FDIC | KVASER_PCIEFD_KCAN_IRQ_BPP | -- KVASER_PCIEFD_KCAN_IRQ_TAR | KVASER_PCIEFD_KCAN_IRQ_TFD; -+ KVASER_PCIEFD_KCAN_IRQ_TAR; - - iowrite32(msk, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - -@@ -556,6 +561,8 @@ static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can) - - if (can->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) - mode |= KVASER_PCIEFD_KCAN_MODE_LOM; -+ else -+ mode &= ~KVASER_PCIEFD_KCAN_MODE_LOM; - - mode |= KVASER_PCIEFD_KCAN_MODE_EEN; - mode |= KVASER_PCIEFD_KCAN_MODE_EPEN; -@@ -574,7 +581,7 @@ static void kvaser_pciefd_start_controller_flush(struct kvaser_pciefd_can *can) - - spin_lock_irqsave(&can->lock, irq); - iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG); -- iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD, -+ iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD, - can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - - status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG); -@@ -617,7 +624,7 @@ static int kvaser_pciefd_bus_on(struct kvaser_pciefd_can *can) - iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG); - -- iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | KVASER_PCIEFD_KCAN_IRQ_TFD, -+ iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD, - can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - - mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG); -@@ -719,6 +726,7 @@ static int kvaser_pciefd_stop(struct net_device *netdev) - iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - del_timer(&can->bec_poll_timer); - } -+ can->can.state = CAN_STATE_STOPPED; - close_candev(netdev); - - return ret; -@@ -1001,8 +1009,7 @@ static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie) - SET_NETDEV_DEV(netdev, &pcie->pci->dev); - - iowrite32(-1, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG); -- iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD | -- KVASER_PCIEFD_KCAN_IRQ_TFD, -+ iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD, - can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - - pcie->can[i] = can; -@@ -1052,6 +1059,7 @@ static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie) - { - int i; - u32 srb_status; -+ u32 srb_packet_count; - dma_addr_t dma_addr[KVASER_PCIEFD_DMA_COUNT]; - - /* Disable the DMA */ -@@ -1079,6 +1087,15 @@ static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie) - KVASER_PCIEFD_SRB_CMD_RDB1, - pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG); - -+ /* Empty Rx FIFO */ -+ srb_packet_count = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG) & -+ KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK; -+ while (srb_packet_count) { -+ /* Drop current packet in FIFO */ -+ ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_FIFO_LAST_REG); -+ srb_packet_count--; -+ } -+ - srb_status = ioread32(pcie->reg_base + KVASER_PCIEFD_SRB_STAT_REG); - if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DI)) { - dev_err(&pcie->pci->dev, "DMA not idle before enabling\n"); -@@ -1421,9 +1438,6 @@ static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie, - cmd = KVASER_PCIEFD_KCAN_CMD_AT; - cmd |= ++can->cmd_seq << KVASER_PCIEFD_KCAN_CMD_SEQ_SHIFT; - iowrite32(cmd, can->reg_base + KVASER_PCIEFD_KCAN_CMD_REG); -- -- iowrite32(KVASER_PCIEFD_KCAN_IRQ_TFD, -- can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG); - } else if (p->header[0] & KVASER_PCIEFD_SPACK_IDET && - p->header[0] & KVASER_PCIEFD_SPACK_IRM && - cmdseq == (p->header[1] & KVASER_PCIEFD_PACKET_SEQ_MSK) && -@@ -1712,15 +1726,6 @@ static int kvaser_pciefd_transmit_irq(struct kvaser_pciefd_can *can) - if (irq & KVASER_PCIEFD_KCAN_IRQ_TOF) - netdev_err(can->can.dev, "Tx FIFO overflow\n"); - -- if (irq & KVASER_PCIEFD_KCAN_IRQ_TFD) { -- u8 count = ioread32(can->reg_base + -- KVASER_PCIEFD_KCAN_TX_NPACKETS_REG) & 0xff; -- -- if (count == 0) -- iowrite32(KVASER_PCIEFD_KCAN_CTRL_EFLUSH, -- can->reg_base + KVASER_PCIEFD_KCAN_CTRL_REG); -- } -- - if (irq & KVASER_PCIEFD_KCAN_IRQ_BPP) - netdev_err(can->can.dev, - "Fail to change bittiming, when not in reset mode\n"); -@@ -1822,6 +1827,11 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev, - if (err) - goto err_teardown_can_ctrls; - -+ err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler, -+ IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie); -+ if (err) -+ goto err_teardown_can_ctrls; -+ - iowrite32(KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1, - pcie->reg_base + KVASER_PCIEFD_SRB_IRQ_REG); - -@@ -1842,11 +1852,6 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev, - iowrite32(KVASER_PCIEFD_SRB_CMD_RDB1, - pcie->reg_base + KVASER_PCIEFD_SRB_CMD_REG); - -- err = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler, -- IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie); -- if (err) -- goto err_teardown_can_ctrls; -- - err = kvaser_pciefd_reg_candev(pcie); - if (err) - goto err_free_irq; -@@ -1854,6 +1859,8 @@ static int kvaser_pciefd_probe(struct pci_dev *pdev, - return 0; - - err_free_irq: -+ /* Disable PCI interrupts */ -+ iowrite32(0, pcie->reg_base + KVASER_PCIEFD_IEN_REG); - free_irq(pcie->pci->irq, pcie); - - err_teardown_can_ctrls: -diff --git a/drivers/net/ethernet/3com/3c589_cs.c b/drivers/net/ethernet/3com/3c589_cs.c -index 2b2695311bda9..aab26dbe76ff9 100644 ---- a/drivers/net/ethernet/3com/3c589_cs.c -+++ b/drivers/net/ethernet/3com/3c589_cs.c -@@ -196,6 +196,7 @@ static int tc589_probe(struct pcmcia_device *link) - { - struct el3_private *lp; - struct net_device *dev; -+ int ret; - - dev_dbg(&link->dev, "3c589_attach()\n"); - -@@ -219,7 +220,15 @@ static int tc589_probe(struct pcmcia_device *link) - - dev->ethtool_ops = &netdev_ethtool_ops; - -- return tc589_config(link); -+ ret = tc589_config(link); -+ if (ret) -+ goto err_free_netdev; -+ -+ return 0; -+ -+err_free_netdev: -+ free_netdev(dev); -+ return ret; - } - - static void tc589_detach(struct pcmcia_device *link) -diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c -index 1b725a021455b..750acbf294640 100644 ---- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c -+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c -@@ -2973,7 +2973,7 @@ err_clk_disable: - return ret; - } - --static void bcmgenet_netif_stop(struct net_device *dev) -+static void bcmgenet_netif_stop(struct net_device *dev, bool stop_phy) - { - struct bcmgenet_priv *priv = netdev_priv(dev); - -@@ -2988,7 +2988,8 @@ static void bcmgenet_netif_stop(struct net_device *dev) - /* Disable MAC transmit. TX DMA disabled must be done before this */ - umac_enable_set(priv, CMD_TX_EN, false); - -- phy_stop(dev->phydev); -+ if (stop_phy) -+ phy_stop(dev->phydev); - bcmgenet_disable_rx_napi(priv); - bcmgenet_intr_disable(priv); - -@@ -3014,7 +3015,7 @@ static int bcmgenet_close(struct net_device *dev) - - netif_dbg(priv, ifdown, dev, "bcmgenet_close\n"); - -- bcmgenet_netif_stop(dev); -+ bcmgenet_netif_stop(dev, false); - - /* Really kill the PHY state machine and disconnect from it */ - phy_disconnect(dev->phydev); -@@ -3712,7 +3713,7 @@ static int bcmgenet_suspend(struct device *d) - - netif_device_detach(dev); - -- bcmgenet_netif_stop(dev); -+ bcmgenet_netif_stop(dev, true); - - if (!device_may_wakeup(d)) - phy_suspend(dev->phydev); -diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c -index e1b8c58c4d6b2..f67f104049dba 100644 ---- a/drivers/net/ethernet/freescale/fec_main.c -+++ b/drivers/net/ethernet/freescale/fec_main.c -@@ -3769,7 +3769,9 @@ fec_drv_remove(struct platform_device *pdev) - - ret = pm_runtime_get_sync(&pdev->dev); - if (ret < 0) -- return ret; -+ dev_err(&pdev->dev, -+ "Failed to resume device in remove callback (%pe)\n", -+ ERR_PTR(ret)); - - cancel_work_sync(&fep->tx_timeout_work); - fec_ptp_stop(pdev); -@@ -3782,8 +3784,13 @@ fec_drv_remove(struct platform_device *pdev) - of_phy_deregister_fixed_link(np); - of_node_put(fep->phy_node); - -- clk_disable_unprepare(fep->clk_ahb); -- clk_disable_unprepare(fep->clk_ipg); -+ /* After pm_runtime_get_sync() failed, the clks are still off, so skip -+ * disabling them again. -+ */ -+ if (ret >= 0) { -+ clk_disable_unprepare(fep->clk_ahb); -+ clk_disable_unprepare(fep->clk_ipg); -+ } - pm_runtime_put_noidle(&pdev->dev); - pm_runtime_disable(&pdev->dev); - -diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c -index d58abdfdb9b7b..08277c3cf2806 100644 ---- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c -+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c -@@ -6688,12 +6688,15 @@ static void hclge_ae_stop(struct hnae3_handle *handle) - /* If it is not PF reset or FLR, the firmware will disable the MAC, - * so it only need to stop phy here. - */ -- if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) && -- hdev->reset_type != HNAE3_FUNC_RESET && -- hdev->reset_type != HNAE3_FLR_RESET) { -- hclge_mac_stop_phy(hdev); -- hclge_update_link_status(hdev); -- return; -+ if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state)) { -+ hclge_pfc_pause_en_cfg(hdev, HCLGE_PFC_TX_RX_DISABLE, -+ HCLGE_PFC_DISABLE); -+ if (hdev->reset_type != HNAE3_FUNC_RESET && -+ hdev->reset_type != HNAE3_FLR_RESET) { -+ hclge_mac_stop_phy(hdev); -+ hclge_update_link_status(hdev); -+ return; -+ } - } - - for (i = 0; i < handle->kinfo.num_tqps; i++) -diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c -index 8448607742a6b..2183e700f9d96 100644 ---- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c -+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c -@@ -170,8 +170,8 @@ int hclge_mac_pause_en_cfg(struct hclge_dev *hdev, bool tx, bool rx) - return hclge_cmd_send(&hdev->hw, &desc, 1); - } - --static int hclge_pfc_pause_en_cfg(struct hclge_dev *hdev, u8 tx_rx_bitmap, -- u8 pfc_bitmap) -+int hclge_pfc_pause_en_cfg(struct hclge_dev *hdev, u8 tx_rx_bitmap, -+ u8 pfc_bitmap) - { - struct hclge_desc desc; - struct hclge_pfc_en_cmd *pfc = (struct hclge_pfc_en_cmd *)desc.data; -diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h -index 260f22d19d81a..406084bb23072 100644 ---- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h -+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.h -@@ -109,6 +109,9 @@ struct hclge_bp_to_qs_map_cmd { - u32 rsvd1; - }; - -+#define HCLGE_PFC_DISABLE 0 -+#define HCLGE_PFC_TX_RX_DISABLE 0 -+ - struct hclge_pfc_en_cmd { - u8 tx_rx_en_bitmap; - u8 pri_en_bitmap; -@@ -150,6 +153,8 @@ void hclge_tm_schd_info_update(struct hclge_dev *hdev, u8 num_tc); - void hclge_tm_pfc_info_update(struct hclge_dev *hdev); - int hclge_tm_dwrr_cfg(struct hclge_dev *hdev); - int hclge_tm_init_hw(struct hclge_dev *hdev, bool init); -+int hclge_pfc_pause_en_cfg(struct hclge_dev *hdev, u8 tx_rx_bitmap, -+ u8 pfc_bitmap); - int hclge_mac_pause_en_cfg(struct hclge_dev *hdev, bool tx, bool rx); - int hclge_pause_addr_cfg(struct hclge_dev *hdev, const u8 *mac_addr); - int hclge_pfc_rx_stats_get(struct hclge_dev *hdev, u64 *stats); -diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c -index 48956c30d2eee..ec3d98595198e 100644 ---- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c -+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c -@@ -1432,7 +1432,10 @@ static int hclgevf_reset_wait(struct hclgevf_dev *hdev) - * might happen in case reset assertion was made by PF. Yes, this also - * means we might end up waiting bit more even for VF reset. - */ -- msleep(5000); -+ if (hdev->reset_type == HNAE3_VF_FULL_RESET) -+ msleep(5000); -+ else -+ msleep(500); - - return 0; - } -diff --git a/drivers/net/ethernet/intel/igb/e1000_mac.c b/drivers/net/ethernet/intel/igb/e1000_mac.c -index 79ee0a7472608..4e69cb2c025fd 100644 ---- a/drivers/net/ethernet/intel/igb/e1000_mac.c -+++ b/drivers/net/ethernet/intel/igb/e1000_mac.c -@@ -425,7 +425,7 @@ void igb_mta_set(struct e1000_hw *hw, u32 hash_value) - static u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) - { - u32 hash_value, hash_mask; -- u8 bit_shift = 0; -+ u8 bit_shift = 1; - - /* Register count multiplied by bits per register */ - hash_mask = (hw->mac.mta_reg_count * 32) - 1; -@@ -433,7 +433,7 @@ static u32 igb_hash_mc_addr(struct e1000_hw *hw, u8 *mc_addr) - /* For a mc_filter_type of 0, bit_shift is the number of left-shifts - * where 0xFF would still fall within the hash mask. - */ -- while (hash_mask >> bit_shift != 0xFF) -+ while (hash_mask >> bit_shift != 0xFF && bit_shift < 4) - bit_shift++; - - /* The portion of the address that is used for the hash table -diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c -index bced2efe9bef4..abd066e952286 100644 ---- a/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c -+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c -@@ -110,7 +110,8 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev) - priv->devs[idx] = dev; - devcom = mlx5_devcom_alloc(priv, idx); - if (!devcom) { -- kfree(priv); -+ if (new_priv) -+ kfree(priv); - return ERR_PTR(-ENOMEM); - } - -diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c -index 83ee9429e7c65..ff9ac7cffc321 100644 ---- a/drivers/net/ethernet/mellanox/mlx5/core/main.c -+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c -@@ -887,7 +887,7 @@ static int mlx5_init_once(struct mlx5_core_dev *dev) - - dev->dm = mlx5_dm_create(dev); - if (IS_ERR(dev->dm)) -- mlx5_core_warn(dev, "Failed to init device memory%d\n", err); -+ mlx5_core_warn(dev, "Failed to init device memory %ld\n", PTR_ERR(dev->dm)); - - dev->tracer = mlx5_fw_tracer_create(dev); - dev->hv_vhca = mlx5_hv_vhca_create(dev); -diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c -index 05d2b478c99bd..d069017d43a3e 100644 ---- a/drivers/net/ethernet/nvidia/forcedeth.c -+++ b/drivers/net/ethernet/nvidia/forcedeth.c -@@ -6099,6 +6099,7 @@ static int nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) - return 0; - - out_error: -+ nv_mgmt_release_sema(dev); - if (phystate_orig) - writel(phystate|NVREG_ADAPTCTL_RUNNING, base + NvRegAdapterControl); - out_freering: -diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c b/drivers/net/ethernet/pasemi/pasemi_mac.c -index 040a15a828b41..c1d7bd168f1d1 100644 ---- a/drivers/net/ethernet/pasemi/pasemi_mac.c -+++ b/drivers/net/ethernet/pasemi/pasemi_mac.c -@@ -1423,7 +1423,7 @@ static void pasemi_mac_queue_csdesc(const struct sk_buff *skb, - write_dma_reg(PAS_DMA_TXCHAN_INCR(txring->chan.chno), 2); - } - --static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev) -+static netdev_tx_t pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev) - { - struct pasemi_mac * const mac = netdev_priv(dev); - struct pasemi_mac_txring * const txring = tx_ring(mac); -diff --git a/drivers/net/ethernet/sun/cassini.c b/drivers/net/ethernet/sun/cassini.c -index 6e78a33aa5e47..ecaa9beee76eb 100644 ---- a/drivers/net/ethernet/sun/cassini.c -+++ b/drivers/net/ethernet/sun/cassini.c -@@ -5138,6 +5138,8 @@ err_out_iounmap: - cas_shutdown(cp); - mutex_unlock(&cp->pm_mutex); - -+ vfree(cp->fw_data); -+ - pci_iounmap(pdev, cp->regs); - - -diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c -index a33149ee0ddcf..0a5b5ff597c6f 100644 ---- a/drivers/net/ipvlan/ipvlan_core.c -+++ b/drivers/net/ipvlan/ipvlan_core.c -@@ -437,6 +437,9 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb) - goto err; - } - skb_dst_set(skb, &rt->dst); -+ -+ memset(IPCB(skb), 0, sizeof(*IPCB(skb))); -+ - err = ip_local_out(net, skb->sk, skb); - if (unlikely(net_xmit_eval(err))) - dev->stats.tx_errors++; -@@ -475,6 +478,9 @@ static int ipvlan_process_v6_outbound(struct sk_buff *skb) - goto err; - } - skb_dst_set(skb, dst); -+ -+ memset(IP6CB(skb), 0, sizeof(*IP6CB(skb))); -+ - err = ip6_local_out(net, skb->sk, skb); - if (unlikely(net_xmit_eval(err))) - dev->stats.tx_errors++; -diff --git a/drivers/net/tap.c b/drivers/net/tap.c -index a522d1673fa87..574c17aa4b09a 100644 ---- a/drivers/net/tap.c -+++ b/drivers/net/tap.c -@@ -715,9 +715,8 @@ static ssize_t tap_get_user(struct tap_queue *q, void *msg_control, - skb_probe_transport_header(skb); - - /* Move network header to the right position for VLAN tagged packets */ -- if ((skb->protocol == htons(ETH_P_8021Q) || -- skb->protocol == htons(ETH_P_8021AD)) && -- __vlan_get_protocol(skb, skb->protocol, &depth) != 0) -+ if (eth_type_vlan(skb->protocol) && -+ vlan_get_protocol_and_depth(skb, skb->protocol, &depth) != 0) - skb_set_network_header(skb, depth); - - rcu_read_lock(); -@@ -1177,9 +1176,8 @@ static int tap_get_user_xdp(struct tap_queue *q, struct xdp_buff *xdp) - } - - /* Move network header to the right position for VLAN tagged packets */ -- if ((skb->protocol == htons(ETH_P_8021Q) || -- skb->protocol == htons(ETH_P_8021AD)) && -- __vlan_get_protocol(skb, skb->protocol, &depth) != 0) -+ if (eth_type_vlan(skb->protocol) && -+ vlan_get_protocol_and_depth(skb, skb->protocol, &depth) != 0) - skb_set_network_header(skb, depth); - - rcu_read_lock(); -diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c -index da74ec778b6e7..227d97b4dc224 100644 ---- a/drivers/net/team/team.c -+++ b/drivers/net/team/team.c -@@ -1624,6 +1624,7 @@ static int team_init(struct net_device *dev) - - team->dev = dev; - team_set_no_mode(team); -+ team->notifier_ctx = false; - - team->pcpu_stats = netdev_alloc_pcpu_stats(struct team_pcpu_stats); - if (!team->pcpu_stats) -@@ -3015,7 +3016,11 @@ static int team_device_event(struct notifier_block *unused, - team_del_slave(port->team->dev, dev); - break; - case NETDEV_FEAT_CHANGE: -- team_compute_features(port->team); -+ if (!port->team->notifier_ctx) { -+ port->team->notifier_ctx = true; -+ team_compute_features(port->team); -+ port->team->notifier_ctx = false; -+ } - break; - case NETDEV_PRECHANGEMTU: - /* Forbid to change mtu of underlaying device */ -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -index 5bfff309f5474..b7ceea0b3204d 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -1269,13 +1269,14 @@ static int brcmf_set_pmk(struct brcmf_if *ifp, const u8 *pmk_data, u16 pmk_len) - { - struct brcmf_pub *drvr = ifp->drvr; - struct brcmf_wsec_pmk_le pmk; -- int i, err; -+ int err; -+ -+ memset(&pmk, 0, sizeof(pmk)); - -- /* convert to firmware key format */ -- pmk.key_len = cpu_to_le16(pmk_len << 1); -- pmk.flags = cpu_to_le16(BRCMF_WSEC_PASSPHRASE); -- for (i = 0; i < pmk_len; i++) -- snprintf(&pmk.key[2 * i], 3, "%02x", pmk_data[i]); -+ /* pass pmk directly */ -+ pmk.key_len = cpu_to_le16(pmk_len); -+ pmk.flags = cpu_to_le16(0); -+ memcpy(pmk.key, pmk_data, pmk_len); - - /* store psk in firmware */ - err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SET_WSEC_PMK, -diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c -index 51158edce15b0..f30fdbedd7172 100644 ---- a/drivers/net/wireless/intel/iwlwifi/dvm/sta.c -+++ b/drivers/net/wireless/intel/iwlwifi/dvm/sta.c -@@ -1086,6 +1086,7 @@ static int iwlagn_send_sta_key(struct iwl_priv *priv, - { - __le16 key_flags; - struct iwl_addsta_cmd sta_cmd; -+ size_t to_copy; - int i; - - spin_lock_bh(&priv->sta_lock); -@@ -1105,7 +1106,9 @@ static int iwlagn_send_sta_key(struct iwl_priv *priv, - sta_cmd.key.tkip_rx_tsc_byte2 = tkip_iv32; - for (i = 0; i < 5; i++) - sta_cmd.key.tkip_rx_ttak[i] = cpu_to_le16(tkip_p1k[i]); -- memcpy(sta_cmd.key.key, keyconf->key, keyconf->keylen); -+ /* keyconf may contain MIC rx/tx keys which iwl does not use */ -+ to_copy = min_t(size_t, sizeof(sta_cmd.key.key), keyconf->keylen); -+ memcpy(sta_cmd.key.key, keyconf->key, to_copy); - break; - case WLAN_CIPHER_SUITE_WEP104: - key_flags |= STA_KEY_FLG_KEY_SIZE_MSK; -diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c -index f49887379c43f..f485c0dd75d60 100644 ---- a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c -+++ b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c -@@ -508,6 +508,11 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, - struct iwl_mcc_update_resp *mcc_resp = (void *)pkt->data; - - n_channels = __le32_to_cpu(mcc_resp->n_channels); -+ if (iwl_rx_packet_payload_len(pkt) != -+ struct_size(mcc_resp, channels, n_channels)) { -+ resp_cp = ERR_PTR(-EINVAL); -+ goto exit; -+ } - resp_len = sizeof(struct iwl_mcc_update_resp) + - n_channels * sizeof(__le32); - resp_cp = kmemdup(mcc_resp, resp_len, GFP_KERNEL); -@@ -519,6 +524,11 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2, - struct iwl_mcc_update_resp_v3 *mcc_resp_v3 = (void *)pkt->data; - - n_channels = __le32_to_cpu(mcc_resp_v3->n_channels); -+ if (iwl_rx_packet_payload_len(pkt) != -+ struct_size(mcc_resp_v3, channels, n_channels)) { -+ resp_cp = ERR_PTR(-EINVAL); -+ goto exit; -+ } - resp_len = sizeof(struct iwl_mcc_update_resp) + - n_channels * sizeof(__le32); - resp_cp = kzalloc(resp_len, GFP_KERNEL); -diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c -index f34297fd453c0..5153314e85554 100644 ---- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c -+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c -@@ -1173,6 +1173,9 @@ static void iwl_pci_remove(struct pci_dev *pdev) - { - struct iwl_trans *trans = pci_get_drvdata(pdev); - -+ if (!trans) -+ return; -+ - iwl_drv_stop(trans->drv); - - iwl_trans_pcie_free(trans); -diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -index 3a93a7b8ba0af..e7b90cf1f28cf 100644 ---- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c -@@ -2832,7 +2832,7 @@ static bool iwl_write_to_user_buf(char __user *user_buf, ssize_t count, - void *buf, ssize_t *size, - ssize_t *bytes_copied) - { -- int buf_size_left = count - *bytes_copied; -+ ssize_t buf_size_left = count - *bytes_copied; - - buf_size_left = buf_size_left - (buf_size_left % sizeof(u32)); - if (*size > buf_size_left) -diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c -index a6c530b9ceee0..0c813e2b9d29a 100644 ---- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c -+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c -@@ -13,10 +13,7 @@ - #include "../dma.h" - #include "mac.h" - --static inline s8 to_rssi(u32 field, u32 rxv) --{ -- return (FIELD_GET(field, rxv) - 220) / 2; --} -+#define to_rssi(field, rxv) ((FIELD_GET(field, rxv) - 220) / 2) - - static struct mt76_wcid *mt7615_rx_get_wcid(struct mt7615_dev *dev, - u8 idx, bool unicast) -diff --git a/drivers/phy/st/phy-miphy28lp.c b/drivers/phy/st/phy-miphy28lp.c -index 068160a34f5cc..e30305b77f0d1 100644 ---- a/drivers/phy/st/phy-miphy28lp.c -+++ b/drivers/phy/st/phy-miphy28lp.c -@@ -9,6 +9,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -484,19 +485,11 @@ static inline void miphy28lp_pcie_config_gen(struct miphy28lp_phy *miphy_phy) - - static inline int miphy28lp_wait_compensation(struct miphy28lp_phy *miphy_phy) - { -- unsigned long finish = jiffies + 5 * HZ; - u8 val; - - /* Waiting for Compensation to complete */ -- do { -- val = readb_relaxed(miphy_phy->base + MIPHY_COMP_FSM_6); -- -- if (time_after_eq(jiffies, finish)) -- return -EBUSY; -- cpu_relax(); -- } while (!(val & COMP_DONE)); -- -- return 0; -+ return readb_relaxed_poll_timeout(miphy_phy->base + MIPHY_COMP_FSM_6, -+ val, val & COMP_DONE, 1, 5 * USEC_PER_SEC); - } - - -@@ -805,7 +798,6 @@ static inline void miphy28lp_configure_usb3(struct miphy28lp_phy *miphy_phy) - - static inline int miphy_is_ready(struct miphy28lp_phy *miphy_phy) - { -- unsigned long finish = jiffies + 5 * HZ; - u8 mask = HFC_PLL | HFC_RDY; - u8 val; - -@@ -816,21 +808,14 @@ static inline int miphy_is_ready(struct miphy28lp_phy *miphy_phy) - if (miphy_phy->type == PHY_TYPE_SATA) - mask |= PHY_RDY; - -- do { -- val = readb_relaxed(miphy_phy->base + MIPHY_STATUS_1); -- if ((val & mask) != mask) -- cpu_relax(); -- else -- return 0; -- } while (!time_after_eq(jiffies, finish)); -- -- return -EBUSY; -+ return readb_relaxed_poll_timeout(miphy_phy->base + MIPHY_STATUS_1, -+ val, (val & mask) == mask, 1, -+ 5 * USEC_PER_SEC); - } - - static int miphy_osc_is_ready(struct miphy28lp_phy *miphy_phy) - { - struct miphy28lp_dev *miphy_dev = miphy_phy->phydev; -- unsigned long finish = jiffies + 5 * HZ; - u32 val; - - if (!miphy_phy->osc_rdy) -@@ -839,17 +824,10 @@ static int miphy_osc_is_ready(struct miphy28lp_phy *miphy_phy) - if (!miphy_phy->syscfg_reg[SYSCFG_STATUS]) - return -EINVAL; - -- do { -- regmap_read(miphy_dev->regmap, -- miphy_phy->syscfg_reg[SYSCFG_STATUS], &val); -- -- if ((val & MIPHY_OSC_RDY) != MIPHY_OSC_RDY) -- cpu_relax(); -- else -- return 0; -- } while (!time_after_eq(jiffies, finish)); -- -- return -EBUSY; -+ return regmap_read_poll_timeout(miphy_dev->regmap, -+ miphy_phy->syscfg_reg[SYSCFG_STATUS], -+ val, val & MIPHY_OSC_RDY, 1, -+ 5 * USEC_PER_SEC); - } - - static int miphy28lp_get_resource_byname(struct device_node *child, -diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c -index b1a37aa388800..b45cbd40294b9 100644 ---- a/drivers/power/supply/bq27xxx_battery.c -+++ b/drivers/power/supply/bq27xxx_battery.c -@@ -1547,7 +1547,7 @@ static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di) - return POWER_SUPPLY_HEALTH_GOOD; - } - --void bq27xxx_battery_update(struct bq27xxx_device_info *di) -+static void bq27xxx_battery_update_unlocked(struct bq27xxx_device_info *di) - { - struct bq27xxx_reg_cache cache = {0, }; - bool has_ci_flag = di->opts & BQ27XXX_O_ZERO; -@@ -1597,6 +1597,16 @@ void bq27xxx_battery_update(struct bq27xxx_device_info *di) - di->cache = cache; - - di->last_update = jiffies; -+ -+ if (!di->removed && poll_interval > 0) -+ mod_delayed_work(system_wq, &di->work, poll_interval * HZ); -+} -+ -+void bq27xxx_battery_update(struct bq27xxx_device_info *di) -+{ -+ mutex_lock(&di->lock); -+ bq27xxx_battery_update_unlocked(di); -+ mutex_unlock(&di->lock); - } - EXPORT_SYMBOL_GPL(bq27xxx_battery_update); - -@@ -1607,9 +1617,6 @@ static void bq27xxx_battery_poll(struct work_struct *work) - work.work); - - bq27xxx_battery_update(di); -- -- if (poll_interval > 0) -- schedule_delayed_work(&di->work, poll_interval * HZ); - } - - /* -@@ -1770,10 +1777,8 @@ static int bq27xxx_battery_get_property(struct power_supply *psy, - struct bq27xxx_device_info *di = power_supply_get_drvdata(psy); - - mutex_lock(&di->lock); -- if (time_is_before_jiffies(di->last_update + 5 * HZ)) { -- cancel_delayed_work_sync(&di->work); -- bq27xxx_battery_poll(&di->work.work); -- } -+ if (time_is_before_jiffies(di->last_update + 5 * HZ)) -+ bq27xxx_battery_update_unlocked(di); - mutex_unlock(&di->lock); - - if (psp != POWER_SUPPLY_PROP_PRESENT && di->cache.flags < 0) -@@ -1910,22 +1915,18 @@ EXPORT_SYMBOL_GPL(bq27xxx_battery_setup); - - void bq27xxx_battery_teardown(struct bq27xxx_device_info *di) - { -- /* -- * power_supply_unregister call bq27xxx_battery_get_property which -- * call bq27xxx_battery_poll. -- * Make sure that bq27xxx_battery_poll will not call -- * schedule_delayed_work again after unregister (which cause OOPS). -- */ -- poll_interval = 0; -- -- cancel_delayed_work_sync(&di->work); -- -- power_supply_unregister(di->bat); -- - mutex_lock(&bq27xxx_list_lock); - list_del(&di->list); - mutex_unlock(&bq27xxx_list_lock); - -+ /* Set removed to avoid bq27xxx_battery_update() re-queuing the work */ -+ mutex_lock(&di->lock); -+ di->removed = true; -+ mutex_unlock(&di->lock); -+ -+ cancel_delayed_work_sync(&di->work); -+ -+ power_supply_unregister(di->bat); - mutex_destroy(&di->lock); - } - EXPORT_SYMBOL_GPL(bq27xxx_battery_teardown); -diff --git a/drivers/power/supply/bq27xxx_battery_i2c.c b/drivers/power/supply/bq27xxx_battery_i2c.c -index 34229c1f43e31..01800cd97e3af 100644 ---- a/drivers/power/supply/bq27xxx_battery_i2c.c -+++ b/drivers/power/supply/bq27xxx_battery_i2c.c -@@ -187,7 +187,7 @@ static int bq27xxx_battery_i2c_probe(struct i2c_client *client, - i2c_set_clientdata(client, di); - - if (client->irq) { -- ret = devm_request_threaded_irq(&client->dev, client->irq, -+ ret = request_threaded_irq(client->irq, - NULL, bq27xxx_battery_irq_handler_thread, - IRQF_ONESHOT, - di->name, di); -@@ -217,6 +217,7 @@ static int bq27xxx_battery_i2c_remove(struct i2c_client *client) - { - struct bq27xxx_device_info *di = i2c_get_clientdata(client); - -+ free_irq(client->irq, di); - bq27xxx_battery_teardown(di); - - mutex_lock(&battery_mutex); -diff --git a/drivers/power/supply/power_supply_leds.c b/drivers/power/supply/power_supply_leds.c -index d69880cc35931..b7a2778f878de 100644 ---- a/drivers/power/supply/power_supply_leds.c -+++ b/drivers/power/supply/power_supply_leds.c -@@ -34,8 +34,9 @@ static void power_supply_update_bat_leds(struct power_supply *psy) - led_trigger_event(psy->charging_full_trig, LED_FULL); - led_trigger_event(psy->charging_trig, LED_OFF); - led_trigger_event(psy->full_trig, LED_FULL); -- led_trigger_event(psy->charging_blink_full_solid_trig, -- LED_FULL); -+ /* Going from blink to LED on requires a LED_OFF event to stop blink */ -+ led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF); -+ led_trigger_event(psy->charging_blink_full_solid_trig, LED_FULL); - break; - case POWER_SUPPLY_STATUS_CHARGING: - led_trigger_event(psy->charging_full_trig, LED_FULL); -diff --git a/drivers/power/supply/sbs-charger.c b/drivers/power/supply/sbs-charger.c -index fbfb6a6209617..a30eb42e379a4 100644 ---- a/drivers/power/supply/sbs-charger.c -+++ b/drivers/power/supply/sbs-charger.c -@@ -25,7 +25,7 @@ - #define SBS_CHARGER_REG_STATUS 0x13 - #define SBS_CHARGER_REG_ALARM_WARNING 0x16 - --#define SBS_CHARGER_STATUS_CHARGE_INHIBITED BIT(1) -+#define SBS_CHARGER_STATUS_CHARGE_INHIBITED BIT(0) - #define SBS_CHARGER_STATUS_RES_COLD BIT(9) - #define SBS_CHARGER_STATUS_RES_HOT BIT(10) - #define SBS_CHARGER_STATUS_BATTERY_PRESENT BIT(14) -diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h -index 3b0a4483a2520..c78651be8d139 100644 ---- a/drivers/s390/cio/qdio.h -+++ b/drivers/s390/cio/qdio.h -@@ -88,15 +88,15 @@ enum qdio_irq_states { - static inline int do_sqbs(u64 token, unsigned char state, int queue, - int *start, int *count) - { -- register unsigned long _ccq asm ("0") = *count; -- register unsigned long _token asm ("1") = token; - unsigned long _queuestart = ((unsigned long)queue << 32) | *start; -+ unsigned long _ccq = *count; - - asm volatile( -- " .insn rsy,0xeb000000008A,%1,0,0(%2)" -- : "+d" (_ccq), "+d" (_queuestart) -- : "d" ((unsigned long)state), "d" (_token) -- : "memory", "cc"); -+ " lgr 1,%[token]\n" -+ " .insn rsy,0xeb000000008a,%[qs],%[ccq],0(%[state])" -+ : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart) -+ : [state] "a" ((unsigned long)state), [token] "d" (token) -+ : "memory", "cc", "1"); - *count = _ccq & 0xff; - *start = _queuestart & 0xff; - -@@ -106,16 +106,17 @@ static inline int do_sqbs(u64 token, unsigned char state, int queue, - static inline int do_eqbs(u64 token, unsigned char *state, int queue, - int *start, int *count, int ack) - { -- register unsigned long _ccq asm ("0") = *count; -- register unsigned long _token asm ("1") = token; - unsigned long _queuestart = ((unsigned long)queue << 32) | *start; - unsigned long _state = (unsigned long)ack << 63; -+ unsigned long _ccq = *count; - - asm volatile( -- " .insn rrf,0xB99c0000,%1,%2,0,0" -- : "+d" (_ccq), "+d" (_queuestart), "+d" (_state) -- : "d" (_token) -- : "memory", "cc"); -+ " lgr 1,%[token]\n" -+ " .insn rrf,0xb99c0000,%[qs],%[state],%[ccq],0" -+ : [ccq] "+&d" (_ccq), [qs] "+&d" (_queuestart), -+ [state] "+&d" (_state) -+ : [token] "d" (token) -+ : "memory", "cc", "1"); - *count = _ccq & 0xff; - *start = _queuestart & 0xff; - *state = _state & 0xff; -diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c -index 5b63c505a2f7c..620655bcbe80d 100644 ---- a/drivers/s390/cio/qdio_main.c -+++ b/drivers/s390/cio/qdio_main.c -@@ -31,38 +31,41 @@ MODULE_DESCRIPTION("QDIO base support"); - MODULE_LICENSE("GPL"); - - static inline int do_siga_sync(unsigned long schid, -- unsigned int out_mask, unsigned int in_mask, -+ unsigned long out_mask, unsigned long in_mask, - unsigned int fc) - { -- register unsigned long __fc asm ("0") = fc; -- register unsigned long __schid asm ("1") = schid; -- register unsigned long out asm ("2") = out_mask; -- register unsigned long in asm ("3") = in_mask; - int cc; - - asm volatile( -+ " lgr 0,%[fc]\n" -+ " lgr 1,%[schid]\n" -+ " lgr 2,%[out]\n" -+ " lgr 3,%[in]\n" - " siga 0\n" -- " ipm %0\n" -- " srl %0,28\n" -- : "=d" (cc) -- : "d" (__fc), "d" (__schid), "d" (out), "d" (in) : "cc"); -+ " ipm %[cc]\n" -+ " srl %[cc],28\n" -+ : [cc] "=&d" (cc) -+ : [fc] "d" (fc), [schid] "d" (schid), -+ [out] "d" (out_mask), [in] "d" (in_mask) -+ : "cc", "0", "1", "2", "3"); - return cc; - } - --static inline int do_siga_input(unsigned long schid, unsigned int mask, -- unsigned int fc) -+static inline int do_siga_input(unsigned long schid, unsigned long mask, -+ unsigned long fc) - { -- register unsigned long __fc asm ("0") = fc; -- register unsigned long __schid asm ("1") = schid; -- register unsigned long __mask asm ("2") = mask; - int cc; - - asm volatile( -+ " lgr 0,%[fc]\n" -+ " lgr 1,%[schid]\n" -+ " lgr 2,%[mask]\n" - " siga 0\n" -- " ipm %0\n" -- " srl %0,28\n" -- : "=d" (cc) -- : "d" (__fc), "d" (__schid), "d" (__mask) : "cc"); -+ " ipm %[cc]\n" -+ " srl %[cc],28\n" -+ : [cc] "=&d" (cc) -+ : [fc] "d" (fc), [schid] "d" (schid), [mask] "d" (mask) -+ : "cc", "0", "1", "2"); - return cc; - } - -@@ -78,23 +81,24 @@ static inline int do_siga_input(unsigned long schid, unsigned int mask, - * Note: For IQDC unicast queues only the highest priority queue is processed. - */ - static inline int do_siga_output(unsigned long schid, unsigned long mask, -- unsigned int *bb, unsigned int fc, -+ unsigned int *bb, unsigned long fc, - unsigned long aob) - { -- register unsigned long __fc asm("0") = fc; -- register unsigned long __schid asm("1") = schid; -- register unsigned long __mask asm("2") = mask; -- register unsigned long __aob asm("3") = aob; - int cc; - - asm volatile( -+ " lgr 0,%[fc]\n" -+ " lgr 1,%[schid]\n" -+ " lgr 2,%[mask]\n" -+ " lgr 3,%[aob]\n" - " siga 0\n" -- " ipm %0\n" -- " srl %0,28\n" -- : "=d" (cc), "+d" (__fc), "+d" (__aob) -- : "d" (__schid), "d" (__mask) -- : "cc"); -- *bb = __fc >> 31; -+ " lgr %[fc],0\n" -+ " ipm %[cc]\n" -+ " srl %[cc],28\n" -+ : [cc] "=&d" (cc), [fc] "+&d" (fc) -+ : [schid] "d" (schid), [mask] "d" (mask), [aob] "d" (aob) -+ : "cc", "0", "1", "2", "3"); -+ *bb = fc >> 31; - return cc; - } - -diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c -index 69551132f304c..291fccf02d453 100644 ---- a/drivers/scsi/lpfc/lpfc_debugfs.c -+++ b/drivers/scsi/lpfc/lpfc_debugfs.c -@@ -2046,6 +2046,7 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf, - char mybuf[64]; - char *pbuf; - int i; -+ size_t bsize; - - /* Protect copy from user */ - if (!access_ok(buf, nbytes)) -@@ -2053,7 +2054,9 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf, - - memset(mybuf, 0, sizeof(mybuf)); - -- if (copy_from_user(mybuf, buf, nbytes)) -+ bsize = min(nbytes, (sizeof(mybuf) - 1)); -+ -+ if (copy_from_user(mybuf, buf, bsize)) - return -EFAULT; - pbuf = &mybuf[0]; - -@@ -2074,7 +2077,7 @@ lpfc_debugfs_lockstat_write(struct file *file, const char __user *buf, - qp->lock_conflict.wq_access = 0; - } - } -- return nbytes; -+ return bsize; - } - #endif - -diff --git a/drivers/spi/spi-fsl-cpm.c b/drivers/spi/spi-fsl-cpm.c -index 858f0544289e6..c7079a9cd577f 100644 ---- a/drivers/spi/spi-fsl-cpm.c -+++ b/drivers/spi/spi-fsl-cpm.c -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - - #include "spi-fsl-cpm.h" - #include "spi-fsl-lib.h" -@@ -120,6 +121,21 @@ int fsl_spi_cpm_bufs(struct mpc8xxx_spi *mspi, - mspi->rx_dma = mspi->dma_dummy_rx; - mspi->map_rx_dma = 0; - } -+ if (t->bits_per_word == 16 && t->tx_buf) { -+ const u16 *src = t->tx_buf; -+ u16 *dst; -+ int i; -+ -+ dst = kmalloc(t->len, GFP_KERNEL); -+ if (!dst) -+ return -ENOMEM; -+ -+ for (i = 0; i < t->len >> 1; i++) -+ dst[i] = cpu_to_le16p(src + i); -+ -+ mspi->tx = dst; -+ mspi->map_tx_dma = 1; -+ } - - if (mspi->map_tx_dma) { - void *nonconst_tx = (void *)mspi->tx; /* shut up gcc */ -@@ -173,6 +189,13 @@ void fsl_spi_cpm_bufs_complete(struct mpc8xxx_spi *mspi) - if (mspi->map_rx_dma) - dma_unmap_single(dev, mspi->rx_dma, t->len, DMA_FROM_DEVICE); - mspi->xfer_in_progress = NULL; -+ -+ if (t->bits_per_word == 16 && t->rx_buf) { -+ int i; -+ -+ for (i = 0; i < t->len; i += 2) -+ le16_to_cpus(t->rx_buf + i); -+ } - } - EXPORT_SYMBOL_GPL(fsl_spi_cpm_bufs_complete); - -diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c -index ae805f91eafa5..8006759c1a0c6 100644 ---- a/drivers/spi/spi-fsl-spi.c -+++ b/drivers/spi/spi-fsl-spi.c -@@ -204,26 +204,6 @@ static int mspi_apply_cpu_mode_quirks(struct spi_mpc8xxx_cs *cs, - return bits_per_word; - } - --static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs, -- struct spi_device *spi, -- int bits_per_word) --{ -- /* CPM/QE uses Little Endian for words > 8 -- * so transform 16 and 32 bits words into 8 bits -- * Unfortnatly that doesn't work for LSB so -- * reject these for now */ -- /* Note: 32 bits word, LSB works iff -- * tfcr/rfcr is set to CPMFCR_GBL */ -- if (spi->mode & SPI_LSB_FIRST && -- bits_per_word > 8) -- return -EINVAL; -- if (bits_per_word <= 8) -- return bits_per_word; -- if (bits_per_word == 16 || bits_per_word == 32) -- return 8; /* pretend its 8 bits */ -- return -EINVAL; --} -- - static int fsl_spi_setup_transfer(struct spi_device *spi, - struct spi_transfer *t) - { -@@ -251,9 +231,6 @@ static int fsl_spi_setup_transfer(struct spi_device *spi, - bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi, - mpc8xxx_spi, - bits_per_word); -- else -- bits_per_word = mspi_apply_qe_mode_quirks(cs, spi, -- bits_per_word); - - if (bits_per_word < 0) - return bits_per_word; -@@ -371,14 +348,30 @@ static int fsl_spi_do_one_msg(struct spi_master *master, - * In CPU mode, optimize large byte transfers to use larger - * bits_per_word values to reduce number of interrupts taken. - */ -- if (!(mpc8xxx_spi->flags & SPI_CPM_MODE)) { -- list_for_each_entry(t, &m->transfers, transfer_list) { -+ list_for_each_entry(t, &m->transfers, transfer_list) { -+ if (!(mpc8xxx_spi->flags & SPI_CPM_MODE)) { - if (t->len < 256 || t->bits_per_word != 8) - continue; - if ((t->len & 3) == 0) - t->bits_per_word = 32; - else if ((t->len & 1) == 0) - t->bits_per_word = 16; -+ } else { -+ /* -+ * CPM/QE uses Little Endian for words > 8 -+ * so transform 16 and 32 bits words into 8 bits -+ * Unfortnatly that doesn't work for LSB so -+ * reject these for now -+ * Note: 32 bits word, LSB works iff -+ * tfcr/rfcr is set to CPMFCR_GBL -+ */ -+ if (m->spi->mode & SPI_LSB_FIRST && t->bits_per_word > 8) -+ return -EINVAL; -+ if (t->bits_per_word == 16 || t->bits_per_word == 32) -+ t->bits_per_word = 8; /* pretend its 8 bits */ -+ if (t->bits_per_word == 8 && t->len >= 256 && -+ (mpc8xxx_spi->flags & SPI_CPM1)) -+ t->bits_per_word = 16; - } - } - -@@ -637,8 +630,14 @@ static struct spi_master * fsl_spi_probe(struct device *dev, - if (mpc8xxx_spi->type == TYPE_GRLIB) - fsl_spi_grlib_probe(dev); - -- master->bits_per_word_mask = -- (SPI_BPW_RANGE_MASK(4, 16) | SPI_BPW_MASK(32)) & -+ if (mpc8xxx_spi->flags & SPI_CPM_MODE) -+ master->bits_per_word_mask = -+ (SPI_BPW_RANGE_MASK(4, 8) | SPI_BPW_MASK(16) | SPI_BPW_MASK(32)); -+ else -+ master->bits_per_word_mask = -+ (SPI_BPW_RANGE_MASK(4, 16) | SPI_BPW_MASK(32)); -+ -+ master->bits_per_word_mask &= - SPI_BPW_RANGE_MASK(1, mpc8xxx_spi->max_bits_per_word); - - if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) -diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c -index 9d593675257e0..67f31183c1180 100644 ---- a/drivers/spi/spi-imx.c -+++ b/drivers/spi/spi-imx.c -@@ -239,6 +239,18 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi, - return true; - } - -+/* -+ * Note the number of natively supported chip selects for MX51 is 4. Some -+ * devices may have less actual SS pins but the register map supports 4. When -+ * using gpio chip selects the cs values passed into the macros below can go -+ * outside the range 0 - 3. We therefore need to limit the cs value to avoid -+ * corrupting bits outside the allocated locations. -+ * -+ * The simplest way to do this is to just mask the cs bits to 2 bits. This -+ * still allows all 4 native chip selects to work as well as gpio chip selects -+ * (which can use any of the 4 chip select configurations). -+ */ -+ - #define MX51_ECSPI_CTRL 0x08 - #define MX51_ECSPI_CTRL_ENABLE (1 << 0) - #define MX51_ECSPI_CTRL_XCH (1 << 2) -@@ -247,16 +259,16 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi, - #define MX51_ECSPI_CTRL_DRCTL(drctl) ((drctl) << 16) - #define MX51_ECSPI_CTRL_POSTDIV_OFFSET 8 - #define MX51_ECSPI_CTRL_PREDIV_OFFSET 12 --#define MX51_ECSPI_CTRL_CS(cs) ((cs) << 18) -+#define MX51_ECSPI_CTRL_CS(cs) ((cs & 3) << 18) - #define MX51_ECSPI_CTRL_BL_OFFSET 20 - #define MX51_ECSPI_CTRL_BL_MASK (0xfff << 20) - - #define MX51_ECSPI_CONFIG 0x0c --#define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs) + 0)) --#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs) + 4)) --#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs) + 8)) --#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs) + 12)) --#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs) + 20)) -+#define MX51_ECSPI_CONFIG_SCLKPHA(cs) (1 << ((cs & 3) + 0)) -+#define MX51_ECSPI_CONFIG_SCLKPOL(cs) (1 << ((cs & 3) + 4)) -+#define MX51_ECSPI_CONFIG_SBBCTRL(cs) (1 << ((cs & 3) + 8)) -+#define MX51_ECSPI_CONFIG_SSBPOL(cs) (1 << ((cs & 3) + 12)) -+#define MX51_ECSPI_CONFIG_SCLKCTL(cs) (1 << ((cs & 3) + 20)) - - #define MX51_ECSPI_INT 0x10 - #define MX51_ECSPI_INT_TEEN (1 << 0) -diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -index be377e75703bf..ca3cea27489b2 100644 ---- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c -@@ -50,9 +50,9 @@ static const struct rtl819x_ops rtl819xp_ops = { - }; - - static struct pci_device_id rtl8192_pci_id_tbl[] = { -- {RTL_PCI_DEVICE(0x10ec, 0x8192, rtl819xp_ops)}, -- {RTL_PCI_DEVICE(0x07aa, 0x0044, rtl819xp_ops)}, -- {RTL_PCI_DEVICE(0x07aa, 0x0047, rtl819xp_ops)}, -+ {PCI_DEVICE(0x10ec, 0x8192)}, -+ {PCI_DEVICE(0x07aa, 0x0044)}, -+ {PCI_DEVICE(0x07aa, 0x0047)}, - {} - }; - -diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h -index 736f1a824cd2e..7bbd884aa5f13 100644 ---- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h -+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h -@@ -55,11 +55,6 @@ - #define IS_HARDWARE_TYPE_8192SE(_priv) \ - (((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192SE) - --#define RTL_PCI_DEVICE(vend, dev, cfg) \ -- .vendor = (vend), .device = (dev), \ -- .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \ -- .driver_data = (kernel_ulong_t)&(cfg) -- - #define TOTAL_CAM_ENTRY 32 - #define CAM_CONTENT_COUNT 8 - -diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c -index 8b8afa95fbbae..ab2f0ceb1e23b 100644 ---- a/drivers/target/iscsi/iscsi_target.c -+++ b/drivers/target/iscsi/iscsi_target.c -@@ -4385,6 +4385,9 @@ int iscsit_close_session(struct iscsi_session *sess) - iscsit_stop_time2retain_timer(sess); - spin_unlock_bh(&se_tpg->session_lock); - -+ if (sess->sess_ops->ErrorRecoveryLevel == 2) -+ iscsit_free_connection_recovery_entries(sess); -+ - /* - * transport_deregister_session_configfs() will clear the - * struct se_node_acl->nacl_sess pointer now as a iscsi_np process context -@@ -4413,9 +4416,6 @@ int iscsit_close_session(struct iscsi_session *sess) - - transport_deregister_session(sess->se_sess); - -- if (sess->sess_ops->ErrorRecoveryLevel == 2) -- iscsit_free_connection_recovery_entries(sess); -- - iscsit_free_all_ooo_cmdsns(sess); - - spin_lock_bh(&se_tpg->session_lock); -diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index 2675771a03a0d..d7afff1e7685f 100644 ---- a/drivers/tty/serial/8250/8250_core.c -+++ b/drivers/tty/serial/8250/8250_core.c -@@ -1138,6 +1138,7 @@ void serial8250_unregister_port(int line) - uart->port.type = PORT_UNKNOWN; - uart->port.dev = &serial8250_isa_devs->dev; - uart->capabilities = 0; -+ serial8250_init_port(uart); - serial8250_apply_quirks(uart); - uart_add_one_port(&serial8250_reg, &uart->port); - } else { -diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c -index 92e2ee2785239..4a3991ac2dd06 100644 ---- a/drivers/tty/serial/8250/8250_pci.c -+++ b/drivers/tty/serial/8250/8250_pci.c -@@ -1837,6 +1837,8 @@ pci_moxa_setup(struct serial_private *priv, - #define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530 - #define PCI_VENDOR_ID_ADVANTECH 0x13fe - #define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66 -+#define PCI_DEVICE_ID_ADVANTECH_PCI1600 0x1600 -+#define PCI_DEVICE_ID_ADVANTECH_PCI1600_1611 0x1611 - #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620 - #define PCI_DEVICE_ID_ADVANTECH_PCI3618 0x3618 - #define PCI_DEVICE_ID_ADVANTECH_PCIf618 0xf618 -@@ -4157,6 +4159,9 @@ static SIMPLE_DEV_PM_OPS(pciserial_pm_ops, pciserial_suspend_one, - pciserial_resume_one); - - static const struct pci_device_id serial_pci_tbl[] = { -+ { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI1600, -+ PCI_DEVICE_ID_ADVANTECH_PCI1600_1611, PCI_ANY_ID, 0, 0, -+ pbn_b0_4_921600 }, - /* Advantech use PCI_DEVICE_ID_ADVANTECH_PCI3620 (0x3620) as 'PCI_SUBVENDOR_ID' */ - { PCI_VENDOR_ID_ADVANTECH, PCI_DEVICE_ID_ADVANTECH_PCI3620, - PCI_DEVICE_ID_ADVANTECH_PCI3620, 0x0001, 0, 0, -diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c -index d904a3a345e74..dd4be3c8c049c 100644 ---- a/drivers/tty/serial/arc_uart.c -+++ b/drivers/tty/serial/arc_uart.c -@@ -613,10 +613,11 @@ static int arc_serial_probe(struct platform_device *pdev) - } - uart->baud = val; - -- port->membase = of_iomap(np, 0); -- if (!port->membase) -+ port->membase = devm_platform_ioremap_resource(pdev, 0); -+ if (IS_ERR(port->membase)) { - /* No point of dev_err since UART itself is hosed here */ -- return -ENXIO; -+ return PTR_ERR(port->membase); -+ } - - port->irq = irq_of_parse_and_map(np, 0); - -diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c -index 90de3331e4a51..a6813e3393ece 100644 ---- a/drivers/tty/vt/vc_screen.c -+++ b/drivers/tty/vt/vc_screen.c -@@ -200,39 +200,47 @@ vcs_vc(struct inode *inode, int *viewed) - return vc_cons[currcons].d; - } - --/* -- * Returns size for VC carried by inode. -+/** -+ * vcs_size -- return size for a VC in @vc -+ * @vc: which VC -+ * @attr: does it use attributes? -+ * @unicode: is it unicode? -+ * - * Must be called with console_lock. - */ --static int --vcs_size(struct inode *inode) -+static int vcs_size(const struct vc_data *vc, bool attr, bool unicode) - { - int size; -- struct vc_data *vc; - - WARN_CONSOLE_UNLOCKED(); - -- vc = vcs_vc(inode, NULL); -- if (!vc) -- return -ENXIO; -- - size = vc->vc_rows * vc->vc_cols; - -- if (use_attributes(inode)) { -- if (use_unicode(inode)) -+ if (attr) { -+ if (unicode) - return -EOPNOTSUPP; -- size = 2*size + HEADER_SIZE; -- } else if (use_unicode(inode)) -+ -+ size = 2 * size + HEADER_SIZE; -+ } else if (unicode) - size *= 4; -+ - return size; - } - - static loff_t vcs_lseek(struct file *file, loff_t offset, int orig) - { -+ struct inode *inode = file_inode(file); -+ struct vc_data *vc; - int size; - - console_lock(); -- size = vcs_size(file_inode(file)); -+ vc = vcs_vc(inode, NULL); -+ if (!vc) { -+ console_unlock(); -+ return -ENXIO; -+ } -+ -+ size = vcs_size(vc, use_attributes(inode), use_unicode(inode)); - console_unlock(); - if (size < 0) - return size; -@@ -294,7 +302,7 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) - * as copy_to_user at the end of this loop - * could sleep. - */ -- size = vcs_size(inode); -+ size = vcs_size(vc, attr, uni_mode); - if (size < 0) { - ret = size; - break; -@@ -476,7 +484,11 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) - if (!vc) - goto unlock_out; - -- size = vcs_size(inode); -+ size = vcs_size(vc, attr, false); -+ if (size < 0) { -+ ret = size; -+ goto unlock_out; -+ } - ret = -EINVAL; - if (pos < 0 || pos > size) - goto unlock_out; -@@ -511,11 +523,18 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) - } - } - -- /* The vcs_size might have changed while we slept to grab -- * the user buffer, so recheck. -+ /* The vc might have been freed or vcs_size might have changed -+ * while we slept to grab the user buffer, so recheck. - * Return data written up to now on failure. - */ -- size = vcs_size(inode); -+ vc = vcs_vc(inode, &viewed); -+ if (!vc) { -+ if (written) -+ break; -+ ret = -ENXIO; -+ goto unlock_out; -+ } -+ size = vcs_size(vc, attr, false); - if (size < 0) { - if (written) - break; -diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c -index 77b1802f829b3..fdfa2da24287a 100644 ---- a/drivers/usb/class/usbtmc.c -+++ b/drivers/usb/class/usbtmc.c -@@ -1898,6 +1898,8 @@ static int usbtmc_ioctl_request(struct usbtmc_device_data *data, - - if (request.req.wLength > USBTMC_BUFSIZE) - return -EMSGSIZE; -+ if (request.req.wLength == 0) /* Length-0 requests are never IN */ -+ request.req.bRequestType &= ~USB_DIR_IN; - - is_in = request.req.bRequestType & USB_DIR_IN; - -diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c -index f16c26dc079d7..502d911f71fa6 100644 ---- a/drivers/usb/core/usb.c -+++ b/drivers/usb/core/usb.c -@@ -208,6 +208,82 @@ int usb_find_common_endpoints_reverse(struct usb_host_interface *alt, - } - EXPORT_SYMBOL_GPL(usb_find_common_endpoints_reverse); - -+/** -+ * usb_find_endpoint() - Given an endpoint address, search for the endpoint's -+ * usb_host_endpoint structure in an interface's current altsetting. -+ * @intf: the interface whose current altsetting should be searched -+ * @ep_addr: the endpoint address (number and direction) to find -+ * -+ * Search the altsetting's list of endpoints for one with the specified address. -+ * -+ * Return: Pointer to the usb_host_endpoint if found, %NULL otherwise. -+ */ -+static const struct usb_host_endpoint *usb_find_endpoint( -+ const struct usb_interface *intf, unsigned int ep_addr) -+{ -+ int n; -+ const struct usb_host_endpoint *ep; -+ -+ n = intf->cur_altsetting->desc.bNumEndpoints; -+ ep = intf->cur_altsetting->endpoint; -+ for (; n > 0; (--n, ++ep)) { -+ if (ep->desc.bEndpointAddress == ep_addr) -+ return ep; -+ } -+ return NULL; -+} -+ -+/** -+ * usb_check_bulk_endpoints - Check whether an interface's current altsetting -+ * contains a set of bulk endpoints with the given addresses. -+ * @intf: the interface whose current altsetting should be searched -+ * @ep_addrs: 0-terminated array of the endpoint addresses (number and -+ * direction) to look for -+ * -+ * Search for endpoints with the specified addresses and check their types. -+ * -+ * Return: %true if all the endpoints are found and are bulk, %false otherwise. -+ */ -+bool usb_check_bulk_endpoints( -+ const struct usb_interface *intf, const u8 *ep_addrs) -+{ -+ const struct usb_host_endpoint *ep; -+ -+ for (; *ep_addrs; ++ep_addrs) { -+ ep = usb_find_endpoint(intf, *ep_addrs); -+ if (!ep || !usb_endpoint_xfer_bulk(&ep->desc)) -+ return false; -+ } -+ return true; -+} -+EXPORT_SYMBOL_GPL(usb_check_bulk_endpoints); -+ -+/** -+ * usb_check_int_endpoints - Check whether an interface's current altsetting -+ * contains a set of interrupt endpoints with the given addresses. -+ * @intf: the interface whose current altsetting should be searched -+ * @ep_addrs: 0-terminated array of the endpoint addresses (number and -+ * direction) to look for -+ * -+ * Search for endpoints with the specified addresses and check their types. -+ * -+ * Return: %true if all the endpoints are found and are interrupt, -+ * %false otherwise. -+ */ -+bool usb_check_int_endpoints( -+ const struct usb_interface *intf, const u8 *ep_addrs) -+{ -+ const struct usb_host_endpoint *ep; -+ -+ for (; *ep_addrs; ++ep_addrs) { -+ ep = usb_find_endpoint(intf, *ep_addrs); -+ if (!ep || !usb_endpoint_xfer_int(&ep->desc)) -+ return false; -+ } -+ return true; -+} -+EXPORT_SYMBOL_GPL(usb_check_int_endpoints); -+ - /** - * usb_find_alt_setting() - Given a configuration, find the alternate setting - * for the given interface. -diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c -index 9fb519b2efb45..9bc46aec08a39 100644 ---- a/drivers/usb/dwc3/debugfs.c -+++ b/drivers/usb/dwc3/debugfs.c -@@ -327,6 +327,11 @@ static int dwc3_lsp_show(struct seq_file *s, void *unused) - unsigned int current_mode; - unsigned long flags; - u32 reg; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - reg = dwc3_readl(dwc->regs, DWC3_GSTS); -@@ -345,6 +350,8 @@ static int dwc3_lsp_show(struct seq_file *s, void *unused) - } - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -390,6 +397,11 @@ static int dwc3_mode_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = s->private; - unsigned long flags; - u32 reg; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - reg = dwc3_readl(dwc->regs, DWC3_GCTL); -@@ -409,6 +421,8 @@ static int dwc3_mode_show(struct seq_file *s, void *unused) - seq_printf(s, "UNKNOWN %08x\n", DWC3_GCTL_PRTCAP(reg)); - } - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -455,6 +469,11 @@ static int dwc3_testmode_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = s->private; - unsigned long flags; - u32 reg; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - reg = dwc3_readl(dwc->regs, DWC3_DCTL); -@@ -485,6 +504,8 @@ static int dwc3_testmode_show(struct seq_file *s, void *unused) - seq_printf(s, "UNKNOWN %d\n", reg); - } - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -501,6 +522,7 @@ static ssize_t dwc3_testmode_write(struct file *file, - unsigned long flags; - u32 testmode = 0; - char buf[32]; -+ int ret; - - if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) - return -EFAULT; -@@ -518,10 +540,16 @@ static ssize_t dwc3_testmode_write(struct file *file, - else - testmode = 0; - -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; -+ - spin_lock_irqsave(&dwc->lock, flags); - dwc3_gadget_set_test_mode(dwc, testmode); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return count; - } - -@@ -540,12 +568,18 @@ static int dwc3_link_state_show(struct seq_file *s, void *unused) - enum dwc3_link_state state; - u32 reg; - u8 speed; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - reg = dwc3_readl(dwc->regs, DWC3_GSTS); - if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) { - seq_puts(s, "Not available\n"); - spin_unlock_irqrestore(&dwc->lock, flags); -+ pm_runtime_put_sync(dwc->dev); - return 0; - } - -@@ -558,6 +592,8 @@ static int dwc3_link_state_show(struct seq_file *s, void *unused) - dwc3_gadget_hs_link_string(state)); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -576,6 +612,7 @@ static ssize_t dwc3_link_state_write(struct file *file, - char buf[32]; - u32 reg; - u8 speed; -+ int ret; - - if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) - return -EFAULT; -@@ -595,10 +632,15 @@ static ssize_t dwc3_link_state_write(struct file *file, - else - return -EINVAL; - -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; -+ - spin_lock_irqsave(&dwc->lock, flags); - reg = dwc3_readl(dwc->regs, DWC3_GSTS); - if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) { - spin_unlock_irqrestore(&dwc->lock, flags); -+ pm_runtime_put_sync(dwc->dev); - return -EINVAL; - } - -@@ -608,12 +650,15 @@ static ssize_t dwc3_link_state_write(struct file *file, - if (speed < DWC3_DSTS_SUPERSPEED && - state != DWC3_LINK_STATE_RECOV) { - spin_unlock_irqrestore(&dwc->lock, flags); -+ pm_runtime_put_sync(dwc->dev); - return -EINVAL; - } - - dwc3_gadget_set_link_state(dwc, state); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return count; - } - -@@ -636,6 +681,11 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_TXFIFO); -@@ -646,6 +696,8 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused) - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -655,6 +707,11 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_RXFIFO); -@@ -665,6 +722,8 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused) - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -674,12 +733,19 @@ static int dwc3_tx_request_queue_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_TXREQQ); - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -689,12 +755,19 @@ static int dwc3_rx_request_queue_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_RXREQQ); - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -704,12 +777,19 @@ static int dwc3_rx_info_queue_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_RXINFOQ); - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -719,12 +799,19 @@ static int dwc3_descriptor_fetch_queue_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_DESCFETCHQ); - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -734,12 +821,19 @@ static int dwc3_event_queue_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - u32 val; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - val = dwc3_core_fifo_space(dep, DWC3_EVENTQ); - seq_printf(s, "%u\n", val); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -785,6 +879,11 @@ static int dwc3_trb_ring_show(struct seq_file *s, void *unused) - struct dwc3 *dwc = dep->dwc; - unsigned long flags; - int i; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - if (dep->number <= 1) { -@@ -814,6 +913,8 @@ static int dwc3_trb_ring_show(struct seq_file *s, void *unused) - out: - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -826,6 +927,11 @@ static int dwc3_ep_info_register_show(struct seq_file *s, void *unused) - u32 lower_32_bits; - u32 upper_32_bits; - u32 reg; -+ int ret; -+ -+ ret = pm_runtime_resume_and_get(dwc->dev); -+ if (ret < 0) -+ return ret; - - spin_lock_irqsave(&dwc->lock, flags); - reg = DWC3_GDBGLSPMUX_EPSELECT(dep->number); -@@ -838,6 +944,8 @@ static int dwc3_ep_info_register_show(struct seq_file *s, void *unused) - seq_printf(s, "0x%016llx\n", ep_info); - spin_unlock_irqrestore(&dwc->lock, flags); - -+ pm_runtime_put_sync(dwc->dev); -+ - return 0; - } - -@@ -899,6 +1007,7 @@ void dwc3_debugfs_init(struct dwc3 *dwc) - dwc->regset->regs = dwc3_regs; - dwc->regset->nregs = ARRAY_SIZE(dwc3_regs); - dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START; -+ dwc->regset->dev = dwc->dev; - - root = debugfs_create_dir(dev_name(dwc->dev), NULL); - dwc->root = root; -diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c -index 3f053b11e2cee..af3cb3bfdc29a 100644 ---- a/drivers/usb/gadget/function/u_ether.c -+++ b/drivers/usb/gadget/function/u_ether.c -@@ -17,6 +17,8 @@ - #include - #include - #include -+#include -+#include - - #include "u_ether.h" - -@@ -102,41 +104,6 @@ static inline int qlen(struct usb_gadget *gadget, unsigned qmult) - - /*-------------------------------------------------------------------------*/ - --/* REVISIT there must be a better way than having two sets -- * of debug calls ... -- */ -- --#undef DBG --#undef VDBG --#undef ERROR --#undef INFO -- --#define xprintk(d, level, fmt, args...) \ -- printk(level "%s: " fmt , (d)->net->name , ## args) -- --#ifdef DEBUG --#undef DEBUG --#define DBG(dev, fmt, args...) \ -- xprintk(dev , KERN_DEBUG , fmt , ## args) --#else --#define DBG(dev, fmt, args...) \ -- do { } while (0) --#endif /* DEBUG */ -- --#ifdef VERBOSE_DEBUG --#define VDBG DBG --#else --#define VDBG(dev, fmt, args...) \ -- do { } while (0) --#endif /* DEBUG */ -- --#define ERROR(dev, fmt, args...) \ -- xprintk(dev , KERN_ERR , fmt , ## args) --#define INFO(dev, fmt, args...) \ -- xprintk(dev , KERN_INFO , fmt , ## args) -- --/*-------------------------------------------------------------------------*/ -- - /* NETWORK DRIVER HOOKUP (to the layer above this driver) */ - - static void eth_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *p) -@@ -974,6 +941,8 @@ int gether_get_host_addr_cdc(struct net_device *net, char *host_addr, int len) - dev = netdev_priv(net); - snprintf(host_addr, len, "%pm", dev->host_mac); - -+ string_upper(host_addr, host_addr); -+ - return strlen(host_addr); - } - EXPORT_SYMBOL_GPL(gether_get_host_addr_cdc); -diff --git a/drivers/usb/host/uhci-pci.c b/drivers/usb/host/uhci-pci.c -index 0fa3d72bae261..79a6f14421606 100644 ---- a/drivers/usb/host/uhci-pci.c -+++ b/drivers/usb/host/uhci-pci.c -@@ -119,11 +119,13 @@ static int uhci_pci_init(struct usb_hcd *hcd) - - uhci->rh_numports = uhci_count_ports(hcd); - -- /* Intel controllers report the OverCurrent bit active on. -- * VIA controllers report it active off, so we'll adjust the -- * bit value. (It's not standardized in the UHCI spec.) -+ /* -+ * Intel controllers report the OverCurrent bit active on. VIA -+ * and ZHAOXIN controllers report it active off, so we'll adjust -+ * the bit value. (It's not standardized in the UHCI spec.) - */ -- if (to_pci_dev(uhci_dev(uhci))->vendor == PCI_VENDOR_ID_VIA) -+ if (to_pci_dev(uhci_dev(uhci))->vendor == PCI_VENDOR_ID_VIA || -+ to_pci_dev(uhci_dev(uhci))->vendor == PCI_VENDOR_ID_ZHAOXIN) - uhci->oc_low = 1; - - /* HP's server management chip requires a longer port reset delay. */ -diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c -index 0734e6dd93862..d242b73cfdb2e 100644 ---- a/drivers/usb/misc/sisusbvga/sisusb.c -+++ b/drivers/usb/misc/sisusbvga/sisusb.c -@@ -3014,6 +3014,20 @@ static int sisusb_probe(struct usb_interface *intf, - struct usb_device *dev = interface_to_usbdev(intf); - struct sisusb_usb_data *sisusb; - int retval = 0, i; -+ static const u8 ep_addresses[] = { -+ SISUSB_EP_GFX_IN | USB_DIR_IN, -+ SISUSB_EP_GFX_OUT | USB_DIR_OUT, -+ SISUSB_EP_GFX_BULK_OUT | USB_DIR_OUT, -+ SISUSB_EP_GFX_LBULK_OUT | USB_DIR_OUT, -+ SISUSB_EP_BRIDGE_IN | USB_DIR_IN, -+ SISUSB_EP_BRIDGE_OUT | USB_DIR_OUT, -+ 0}; -+ -+ /* Are the expected endpoints present? */ -+ if (!usb_check_bulk_endpoints(intf, ep_addresses)) { -+ dev_err(&intf->dev, "Invalid USB2VGA device\n"); -+ return -EINVAL; -+ } - - dev_info(&dev->dev, "USB2VGA dongle found at address %d\n", - dev->devnum); -diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c -index 2adcabe060c50..49d17988e2ce8 100644 ---- a/drivers/usb/storage/scsiglue.c -+++ b/drivers/usb/storage/scsiglue.c -@@ -407,22 +407,25 @@ static DEF_SCSI_QCMD(queuecommand) - ***********************************************************************/ - - /* Command timeout and abort */ --static int command_abort(struct scsi_cmnd *srb) -+static int command_abort_matching(struct us_data *us, struct scsi_cmnd *srb_match) - { -- struct us_data *us = host_to_us(srb->device->host); -- -- usb_stor_dbg(us, "%s called\n", __func__); -- - /* - * us->srb together with the TIMED_OUT, RESETTING, and ABORTING - * bits are protected by the host lock. - */ - scsi_lock(us_to_host(us)); - -- /* Is this command still active? */ -- if (us->srb != srb) { -+ /* is there any active pending command to abort ? */ -+ if (!us->srb) { - scsi_unlock(us_to_host(us)); - usb_stor_dbg(us, "-- nothing to abort\n"); -+ return SUCCESS; -+ } -+ -+ /* Does the command match the passed srb if any ? */ -+ if (srb_match && us->srb != srb_match) { -+ scsi_unlock(us_to_host(us)); -+ usb_stor_dbg(us, "-- pending command mismatch\n"); - return FAILED; - } - -@@ -445,6 +448,14 @@ static int command_abort(struct scsi_cmnd *srb) - return SUCCESS; - } - -+static int command_abort(struct scsi_cmnd *srb) -+{ -+ struct us_data *us = host_to_us(srb->device->host); -+ -+ usb_stor_dbg(us, "%s called\n", __func__); -+ return command_abort_matching(us, srb); -+} -+ - /* - * This invokes the transport reset mechanism to reset the state of the - * device -@@ -456,6 +467,9 @@ static int device_reset(struct scsi_cmnd *srb) - - usb_stor_dbg(us, "%s called\n", __func__); - -+ /* abort any pending command before reset */ -+ command_abort_matching(us, NULL); -+ - /* lock the device pointers and do the reset */ - mutex_lock(&(us->dev_mutex)); - result = us->transport_reset(us); -diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/altmodes/displayport.c -index ca22a05179d1e..a2a1baabca933 100644 ---- a/drivers/usb/typec/altmodes/displayport.c -+++ b/drivers/usb/typec/altmodes/displayport.c -@@ -501,6 +501,10 @@ static ssize_t pin_assignment_show(struct device *dev, - - mutex_unlock(&dp->lock); - -+ /* get_current_pin_assignments can return 0 when no matching pin assignments are found */ -+ if (len == 0) -+ len++; -+ - buf[len - 1] = '\n'; - return len; - } -diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c -index fb18264b702e6..b259a4a28f81a 100644 ---- a/drivers/usb/typec/tcpm/tcpm.c -+++ b/drivers/usb/typec/tcpm/tcpm.c -@@ -1018,7 +1018,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const __le32 *payload, - pmdata->svids[pmdata->nsvids++] = svid; - tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid); - } -- return true; -+ -+ /* -+ * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table -+ * 6-43), and can be returned maximum 6 VDOs per response (see Figure -+ * 6-19). If the Respondersupports 12 or more SVID then the Discover -+ * SVIDs Command Shall be executed multiple times until a Discover -+ * SVIDs VDO is returned ending either with a SVID value of 0x0000 in -+ * the last part of the last VDO or with a VDO containing two SVIDs -+ * with values of 0x0000. -+ * -+ * However, some odd dockers support SVIDs less than 12 but without -+ * 0x0000 in the last VDO, so we need to break the Discover SVIDs -+ * request and return false here. -+ */ -+ return cnt == 7; - abort: - tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX); - return false; -diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c -index 8e8af408998ea..24e82fca19ad5 100644 ---- a/drivers/video/fbdev/udlfb.c -+++ b/drivers/video/fbdev/udlfb.c -@@ -27,6 +27,8 @@ - #include