Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0180-5.4.81-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (hide annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (18 months, 2 weeks ago) by niro
File size: 127677 byte(s)
-sync kernel patches
1 niro 3635 diff --git a/Makefile b/Makefile
2     index 7c58e4ce51385..5bbb7607fa55f 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 5
8     PATCHLEVEL = 4
9     -SUBLEVEL = 80
10     +SUBLEVEL = 81
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h
15     index 7addd0301c51a..6bdcf9b495b83 100644
16     --- a/arch/arc/include/asm/pgtable.h
17     +++ b/arch/arc/include/asm/pgtable.h
18     @@ -135,8 +135,10 @@
19    
20     #ifdef CONFIG_ARC_HAS_PAE40
21     #define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE)
22     +#define MAX_POSSIBLE_PHYSMEM_BITS 40
23     #else
24     #define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE)
25     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
26     #endif
27    
28     /**************************************************************************
29     diff --git a/arch/arm/boot/dts/dra76x.dtsi b/arch/arm/boot/dts/dra76x.dtsi
30     index 9f6fbe4c1fee1..859e4382ac4bb 100644
31     --- a/arch/arm/boot/dts/dra76x.dtsi
32     +++ b/arch/arm/boot/dts/dra76x.dtsi
33     @@ -32,8 +32,8 @@
34     interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
35     <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
36     interrupt-names = "int0", "int1";
37     - clocks = <&mcan_clk>, <&l3_iclk_div>;
38     - clock-names = "cclk", "hclk";
39     + clocks = <&l3_iclk_div>, <&mcan_clk>;
40     + clock-names = "hclk", "cclk";
41     bosch,mram-cfg = <0x0 0 0 32 0 0 1 1>;
42     };
43     };
44     diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
45     index 51beec41d48c8..50b51ac91fcbe 100644
46     --- a/arch/arm/include/asm/pgtable-2level.h
47     +++ b/arch/arm/include/asm/pgtable-2level.h
48     @@ -75,6 +75,8 @@
49     #define PTE_HWTABLE_OFF (PTE_HWTABLE_PTRS * sizeof(pte_t))
50     #define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u32))
51    
52     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
53     +
54     /*
55     * PMD_SHIFT determines the size of the area a second-level page table can map
56     * PGDIR_SHIFT determines what a third-level page table entry can map
57     diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
58     index 5b18295021a03..8006a56cc2ce2 100644
59     --- a/arch/arm/include/asm/pgtable-3level.h
60     +++ b/arch/arm/include/asm/pgtable-3level.h
61     @@ -25,6 +25,8 @@
62     #define PTE_HWTABLE_OFF (0)
63     #define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u64))
64    
65     +#define MAX_POSSIBLE_PHYSMEM_BITS 40
66     +
67     /*
68     * PGDIR_SHIFT determines the size a top-level page table entry can map.
69     */
70     diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
71     index a92d277f81a08..c8d317fafe2ea 100644
72     --- a/arch/arm/mach-omap2/cpuidle44xx.c
73     +++ b/arch/arm/mach-omap2/cpuidle44xx.c
74     @@ -175,8 +175,11 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
75     if (mpuss_can_lose_context) {
76     error = cpu_cluster_pm_enter();
77     if (error) {
78     - omap_set_pwrdm_state(mpu_pd, PWRDM_POWER_ON);
79     - goto cpu_cluster_pm_out;
80     + index = 0;
81     + cx = state_ptr + index;
82     + pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state);
83     + omap_set_pwrdm_state(mpu_pd, cx->mpu_state);
84     + mpuss_can_lose_context = 0;
85     }
86     }
87     }
88     @@ -184,7 +187,6 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
89     omap4_enter_lowpower(dev->cpu, cx->cpu_state);
90     cpu_done[dev->cpu] = true;
91    
92     -cpu_cluster_pm_out:
93     /* Wakeup CPU1 only if it is not offlined */
94     if (dev->cpu == 0 && cpumask_test_cpu(1, cpu_online_mask)) {
95    
96     diff --git a/arch/arm64/boot/dts/nvidia/tegra194.dtsi b/arch/arm64/boot/dts/nvidia/tegra194.dtsi
97     index 5728255bd0c1a..78f7e6e50beb0 100644
98     --- a/arch/arm64/boot/dts/nvidia/tegra194.dtsi
99     +++ b/arch/arm64/boot/dts/nvidia/tegra194.dtsi
100     @@ -692,7 +692,7 @@
101    
102     hsp_aon: hsp@c150000 {
103     compatible = "nvidia,tegra194-hsp", "nvidia,tegra186-hsp";
104     - reg = <0x0c150000 0xa0000>;
105     + reg = <0x0c150000 0x90000>;
106     interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
107     <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
108     <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
109     diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
110     index 41dd4b1f0ccba..69dfc340e71b1 100644
111     --- a/arch/arm64/include/asm/pgtable.h
112     +++ b/arch/arm64/include/asm/pgtable.h
113     @@ -98,8 +98,6 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
114     #define pte_valid(pte) (!!(pte_val(pte) & PTE_VALID))
115     #define pte_valid_not_user(pte) \
116     ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID)
117     -#define pte_valid_young(pte) \
118     - ((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF))
119     #define pte_valid_user(pte) \
120     ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))
121    
122     @@ -107,9 +105,12 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
123     * Could the pte be present in the TLB? We must check mm_tlb_flush_pending
124     * so that we don't erroneously return false for pages that have been
125     * remapped as PROT_NONE but are yet to be flushed from the TLB.
126     + * Note that we can't make any assumptions based on the state of the access
127     + * flag, since ptep_clear_flush_young() elides a DSB when invalidating the
128     + * TLB.
129     */
130     #define pte_accessible(mm, pte) \
131     - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte))
132     + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))
133    
134     /*
135     * p??_access_permitted() is true for valid user mappings (subject to the
136     @@ -135,13 +136,6 @@ static inline pte_t set_pte_bit(pte_t pte, pgprot_t prot)
137     return pte;
138     }
139    
140     -static inline pte_t pte_wrprotect(pte_t pte)
141     -{
142     - pte = clear_pte_bit(pte, __pgprot(PTE_WRITE));
143     - pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
144     - return pte;
145     -}
146     -
147     static inline pte_t pte_mkwrite(pte_t pte)
148     {
149     pte = set_pte_bit(pte, __pgprot(PTE_WRITE));
150     @@ -167,6 +161,20 @@ static inline pte_t pte_mkdirty(pte_t pte)
151     return pte;
152     }
153    
154     +static inline pte_t pte_wrprotect(pte_t pte)
155     +{
156     + /*
157     + * If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY
158     + * clear), set the PTE_DIRTY bit.
159     + */
160     + if (pte_hw_dirty(pte))
161     + pte = pte_mkdirty(pte);
162     +
163     + pte = clear_pte_bit(pte, __pgprot(PTE_WRITE));
164     + pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
165     + return pte;
166     +}
167     +
168     static inline pte_t pte_mkold(pte_t pte)
169     {
170     return clear_pte_bit(pte, __pgprot(PTE_AF));
171     @@ -782,12 +790,6 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres
172     pte = READ_ONCE(*ptep);
173     do {
174     old_pte = pte;
175     - /*
176     - * If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY
177     - * clear), set the PTE_DIRTY bit.
178     - */
179     - if (pte_hw_dirty(pte))
180     - pte = pte_mkdirty(pte);
181     pte = pte_wrprotect(pte);
182     pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep),
183     pte_val(old_pte), pte_val(pte));
184     diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
185     index ba967148b016b..2604fab8a92dc 100644
186     --- a/arch/mips/include/asm/pgtable-32.h
187     +++ b/arch/mips/include/asm/pgtable-32.h
188     @@ -155,6 +155,7 @@ static inline void pmd_clear(pmd_t *pmdp)
189    
190     #if defined(CONFIG_XPA)
191    
192     +#define MAX_POSSIBLE_PHYSMEM_BITS 40
193     #define pte_pfn(x) (((unsigned long)((x).pte_high >> _PFN_SHIFT)) | (unsigned long)((x).pte_low << _PAGE_PRESENT_SHIFT))
194     static inline pte_t
195     pfn_pte(unsigned long pfn, pgprot_t prot)
196     @@ -170,6 +171,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot)
197    
198     #elif defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
199    
200     +#define MAX_POSSIBLE_PHYSMEM_BITS 36
201     #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6))
202    
203     static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)
204     @@ -184,6 +186,7 @@ static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)
205    
206     #else
207    
208     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
209     #ifdef CONFIG_CPU_VR41XX
210     #define pte_pfn(x) ((unsigned long)((x).pte >> (PAGE_SHIFT + 2)))
211     #define pfn_pte(pfn, prot) __pte(((pfn) << (PAGE_SHIFT + 2)) | pgprot_val(prot))
212     diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/include/asm/book3s/32/pgtable.h
213     index 0796533d37dd5..7b6349be621a3 100644
214     --- a/arch/powerpc/include/asm/book3s/32/pgtable.h
215     +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h
216     @@ -37,8 +37,10 @@ static inline bool pte_user(pte_t pte)
217     */
218     #ifdef CONFIG_PTE_64BIT
219     #define PTE_RPN_MASK (~((1ULL << PTE_RPN_SHIFT) - 1))
220     +#define MAX_POSSIBLE_PHYSMEM_BITS 36
221     #else
222     #define PTE_RPN_MASK (~((1UL << PTE_RPN_SHIFT) - 1))
223     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
224     #endif
225    
226     /*
227     diff --git a/arch/powerpc/include/asm/book3s/64/kup-radix.h b/arch/powerpc/include/asm/book3s/64/kup-radix.h
228     index c1e45f510591e..a29b64129a7d4 100644
229     --- a/arch/powerpc/include/asm/book3s/64/kup-radix.h
230     +++ b/arch/powerpc/include/asm/book3s/64/kup-radix.h
231     @@ -54,6 +54,8 @@
232    
233     #else /* !__ASSEMBLY__ */
234    
235     +#include <linux/jump_label.h>
236     +
237     DECLARE_STATIC_KEY_FALSE(uaccess_flush_key);
238    
239     #ifdef CONFIG_PPC_KUAP
240     diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/include/asm/nohash/32/pgtable.h
241     index 552b96eef0c8e..3d32d7103ec8e 100644
242     --- a/arch/powerpc/include/asm/nohash/32/pgtable.h
243     +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h
244     @@ -148,8 +148,10 @@ int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot);
245     */
246     #if defined(CONFIG_PPC32) && defined(CONFIG_PTE_64BIT)
247     #define PTE_RPN_MASK (~((1ULL << PTE_RPN_SHIFT) - 1))
248     +#define MAX_POSSIBLE_PHYSMEM_BITS 36
249     #else
250     #define PTE_RPN_MASK (~((1UL << PTE_RPN_SHIFT) - 1))
251     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
252     #endif
253    
254     /*
255     diff --git a/arch/powerpc/kvm/book3s_xive_native.c b/arch/powerpc/kvm/book3s_xive_native.c
256     index 235d57d6c205e..d78d8487c1d6b 100644
257     --- a/arch/powerpc/kvm/book3s_xive_native.c
258     +++ b/arch/powerpc/kvm/book3s_xive_native.c
259     @@ -252,6 +252,13 @@ static vm_fault_t xive_native_esb_fault(struct vm_fault *vmf)
260     }
261    
262     state = &sb->irq_state[src];
263     +
264     + /* Some sanity checking */
265     + if (!state->valid) {
266     + pr_devel("%s: source %lx invalid !\n", __func__, irq);
267     + return VM_FAULT_SIGBUS;
268     + }
269     +
270     kvmppc_xive_select_irq(state, &hw_num, &xd);
271    
272     arch_spin_lock(&sb->lock);
273     diff --git a/arch/riscv/include/asm/pgtable-32.h b/arch/riscv/include/asm/pgtable-32.h
274     index b0ab66e5fdb1d..5b2e79e5bfa5b 100644
275     --- a/arch/riscv/include/asm/pgtable-32.h
276     +++ b/arch/riscv/include/asm/pgtable-32.h
277     @@ -14,4 +14,6 @@
278     #define PGDIR_SIZE (_AC(1, UL) << PGDIR_SHIFT)
279     #define PGDIR_MASK (~(PGDIR_SIZE - 1))
280    
281     +#define MAX_POSSIBLE_PHYSMEM_BITS 34
282     +
283     #endif /* _ASM_RISCV_PGTABLE_32_H */
284     diff --git a/arch/x86/events/intel/cstate.c b/arch/x86/events/intel/cstate.c
285     index 4814c964692cb..0b50119ea12cc 100644
286     --- a/arch/x86/events/intel/cstate.c
287     +++ b/arch/x86/events/intel/cstate.c
288     @@ -107,14 +107,14 @@
289     MODULE_LICENSE("GPL");
290    
291     #define DEFINE_CSTATE_FORMAT_ATTR(_var, _name, _format) \
292     -static ssize_t __cstate_##_var##_show(struct kobject *kobj, \
293     - struct kobj_attribute *attr, \
294     +static ssize_t __cstate_##_var##_show(struct device *dev, \
295     + struct device_attribute *attr, \
296     char *page) \
297     { \
298     BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
299     return sprintf(page, _format "\n"); \
300     } \
301     -static struct kobj_attribute format_attr_##_var = \
302     +static struct device_attribute format_attr_##_var = \
303     __ATTR(_name, 0444, __cstate_##_var##_show, NULL)
304    
305     static ssize_t cstate_get_attr_cpumask(struct device *dev,
306     diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
307     index 86467f85c3831..a335be03aeef1 100644
308     --- a/arch/x86/events/intel/uncore.c
309     +++ b/arch/x86/events/intel/uncore.c
310     @@ -92,8 +92,8 @@ end:
311     return map;
312     }
313    
314     -ssize_t uncore_event_show(struct kobject *kobj,
315     - struct kobj_attribute *attr, char *buf)
316     +ssize_t uncore_event_show(struct device *dev,
317     + struct device_attribute *attr, char *buf)
318     {
319     struct uncore_event_desc *event =
320     container_of(attr, struct uncore_event_desc, attr);
321     diff --git a/arch/x86/events/intel/uncore.h b/arch/x86/events/intel/uncore.h
322     index bbfdaa720b456..7b964c63e993c 100644
323     --- a/arch/x86/events/intel/uncore.h
324     +++ b/arch/x86/events/intel/uncore.h
325     @@ -144,7 +144,7 @@ struct intel_uncore_box {
326     #define UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS 2
327    
328     struct uncore_event_desc {
329     - struct kobj_attribute attr;
330     + struct device_attribute attr;
331     const char *config;
332     };
333    
334     @@ -165,8 +165,8 @@ struct pci2phy_map {
335     struct pci2phy_map *__find_pci2phy_map(int segment);
336     int uncore_pcibus_to_physid(struct pci_bus *bus);
337    
338     -ssize_t uncore_event_show(struct kobject *kobj,
339     - struct kobj_attribute *attr, char *buf);
340     +ssize_t uncore_event_show(struct device *dev,
341     + struct device_attribute *attr, char *buf);
342    
343     #define INTEL_UNCORE_EVENT_DESC(_name, _config) \
344     { \
345     @@ -175,14 +175,14 @@ ssize_t uncore_event_show(struct kobject *kobj,
346     }
347    
348     #define DEFINE_UNCORE_FORMAT_ATTR(_var, _name, _format) \
349     -static ssize_t __uncore_##_var##_show(struct kobject *kobj, \
350     - struct kobj_attribute *attr, \
351     +static ssize_t __uncore_##_var##_show(struct device *dev, \
352     + struct device_attribute *attr, \
353     char *page) \
354     { \
355     BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
356     return sprintf(page, _format "\n"); \
357     } \
358     -static struct kobj_attribute format_attr_##_var = \
359     +static struct device_attribute format_attr_##_var = \
360     __ATTR(_name, 0444, __uncore_##_var##_show, NULL)
361    
362     static inline bool uncore_pmc_fixed(int idx)
363     diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c
364     index 187c72a58e69c..9050d7b8abc5a 100644
365     --- a/arch/x86/events/rapl.c
366     +++ b/arch/x86/events/rapl.c
367     @@ -93,18 +93,6 @@ static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = {
368     * any other bit is reserved
369     */
370     #define RAPL_EVENT_MASK 0xFFULL
371     -
372     -#define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \
373     -static ssize_t __rapl_##_var##_show(struct kobject *kobj, \
374     - struct kobj_attribute *attr, \
375     - char *page) \
376     -{ \
377     - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
378     - return sprintf(page, _format "\n"); \
379     -} \
380     -static struct kobj_attribute format_attr_##_var = \
381     - __ATTR(_name, 0444, __rapl_##_var##_show, NULL)
382     -
383     #define RAPL_CNTR_WIDTH 32
384    
385     #define RAPL_EVENT_ATTR_STR(_name, v, str) \
386     @@ -433,7 +421,7 @@ static struct attribute_group rapl_pmu_events_group = {
387     .attrs = attrs_empty,
388     };
389    
390     -DEFINE_RAPL_FORMAT_ATTR(event, event, "config:0-7");
391     +PMU_FORMAT_ATTR(event, "config:0-7");
392     static struct attribute *rapl_formats_attr[] = {
393     &format_attr_event.attr,
394     NULL,
395     diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
396     index c41686641c3fb..c52b7073a5ab5 100644
397     --- a/arch/x86/include/asm/kvm_host.h
398     +++ b/arch/x86/include/asm/kvm_host.h
399     @@ -1560,6 +1560,7 @@ int kvm_test_age_hva(struct kvm *kvm, unsigned long hva);
400     int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte);
401     int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v);
402     int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu);
403     +int kvm_cpu_has_extint(struct kvm_vcpu *v);
404     int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu);
405     int kvm_cpu_get_interrupt(struct kvm_vcpu *v);
406     void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event);
407     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
408     index bdc1ed7ff6692..fcc4238ee95f8 100644
409     --- a/arch/x86/kernel/cpu/bugs.c
410     +++ b/arch/x86/kernel/cpu/bugs.c
411     @@ -733,11 +733,13 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
412     if (boot_cpu_has(X86_FEATURE_IBPB)) {
413     setup_force_cpu_cap(X86_FEATURE_USE_IBPB);
414    
415     + spectre_v2_user_ibpb = mode;
416     switch (cmd) {
417     case SPECTRE_V2_USER_CMD_FORCE:
418     case SPECTRE_V2_USER_CMD_PRCTL_IBPB:
419     case SPECTRE_V2_USER_CMD_SECCOMP_IBPB:
420     static_branch_enable(&switch_mm_always_ibpb);
421     + spectre_v2_user_ibpb = SPECTRE_V2_USER_STRICT;
422     break;
423     case SPECTRE_V2_USER_CMD_PRCTL:
424     case SPECTRE_V2_USER_CMD_AUTO:
425     @@ -751,8 +753,6 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
426     pr_info("mitigation: Enabling %s Indirect Branch Prediction Barrier\n",
427     static_key_enabled(&switch_mm_always_ibpb) ?
428     "always-on" : "conditional");
429     -
430     - spectre_v2_user_ibpb = mode;
431     }
432    
433     /*
434     diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
435     index 92331de16d70e..c2a9762d278dd 100644
436     --- a/arch/x86/kernel/cpu/mce/core.c
437     +++ b/arch/x86/kernel/cpu/mce/core.c
438     @@ -1361,8 +1361,10 @@ void do_machine_check(struct pt_regs *regs, long error_code)
439     * When there's any problem use only local no_way_out state.
440     */
441     if (!lmce) {
442     - if (mce_end(order) < 0)
443     - no_way_out = worst >= MCE_PANIC_SEVERITY;
444     + if (mce_end(order) < 0) {
445     + if (!no_way_out)
446     + no_way_out = worst >= MCE_PANIC_SEVERITY;
447     + }
448     } else {
449     /*
450     * If there was a fatal machine check we should have
451     diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
452     index 54b711bc06073..830ccc396e26d 100644
453     --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
454     +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
455     @@ -507,6 +507,24 @@ unlock:
456     return ret ?: nbytes;
457     }
458    
459     +/**
460     + * rdtgroup_remove - the helper to remove resource group safely
461     + * @rdtgrp: resource group to remove
462     + *
463     + * On resource group creation via a mkdir, an extra kernfs_node reference is
464     + * taken to ensure that the rdtgroup structure remains accessible for the
465     + * rdtgroup_kn_unlock() calls where it is removed.
466     + *
467     + * Drop the extra reference here, then free the rdtgroup structure.
468     + *
469     + * Return: void
470     + */
471     +static void rdtgroup_remove(struct rdtgroup *rdtgrp)
472     +{
473     + kernfs_put(rdtgrp->kn);
474     + kfree(rdtgrp);
475     +}
476     +
477     struct task_move_callback {
478     struct callback_head work;
479     struct rdtgroup *rdtgrp;
480     @@ -529,7 +547,7 @@ static void move_myself(struct callback_head *head)
481     (rdtgrp->flags & RDT_DELETED)) {
482     current->closid = 0;
483     current->rmid = 0;
484     - kfree(rdtgrp);
485     + rdtgroup_remove(rdtgrp);
486     }
487    
488     preempt_disable();
489     @@ -1618,7 +1636,6 @@ static int rdtgroup_mkdir_info_resdir(struct rdt_resource *r, char *name,
490     if (IS_ERR(kn_subdir))
491     return PTR_ERR(kn_subdir);
492    
493     - kernfs_get(kn_subdir);
494     ret = rdtgroup_kn_set_ugid(kn_subdir);
495     if (ret)
496     return ret;
497     @@ -1641,7 +1658,6 @@ static int rdtgroup_create_info_dir(struct kernfs_node *parent_kn)
498     kn_info = kernfs_create_dir(parent_kn, "info", parent_kn->mode, NULL);
499     if (IS_ERR(kn_info))
500     return PTR_ERR(kn_info);
501     - kernfs_get(kn_info);
502    
503     ret = rdtgroup_add_files(kn_info, RF_TOP_INFO);
504     if (ret)
505     @@ -1662,12 +1678,6 @@ static int rdtgroup_create_info_dir(struct kernfs_node *parent_kn)
506     goto out_destroy;
507     }
508    
509     - /*
510     - * This extra ref will be put in kernfs_remove() and guarantees
511     - * that @rdtgrp->kn is always accessible.
512     - */
513     - kernfs_get(kn_info);
514     -
515     ret = rdtgroup_kn_set_ugid(kn_info);
516     if (ret)
517     goto out_destroy;
518     @@ -1696,12 +1706,6 @@ mongroup_create_dir(struct kernfs_node *parent_kn, struct rdtgroup *prgrp,
519     if (dest_kn)
520     *dest_kn = kn;
521    
522     - /*
523     - * This extra ref will be put in kernfs_remove() and guarantees
524     - * that @rdtgrp->kn is always accessible.
525     - */
526     - kernfs_get(kn);
527     -
528     ret = rdtgroup_kn_set_ugid(kn);
529     if (ret)
530     goto out_destroy;
531     @@ -1928,8 +1932,7 @@ void rdtgroup_kn_unlock(struct kernfs_node *kn)
532     rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED)
533     rdtgroup_pseudo_lock_remove(rdtgrp);
534     kernfs_unbreak_active_protection(kn);
535     - kernfs_put(rdtgrp->kn);
536     - kfree(rdtgrp);
537     + rdtgroup_remove(rdtgrp);
538     } else {
539     kernfs_unbreak_active_protection(kn);
540     }
541     @@ -1988,13 +1991,11 @@ static int rdt_get_tree(struct fs_context *fc)
542     &kn_mongrp);
543     if (ret < 0)
544     goto out_info;
545     - kernfs_get(kn_mongrp);
546    
547     ret = mkdir_mondata_all(rdtgroup_default.kn,
548     &rdtgroup_default, &kn_mondata);
549     if (ret < 0)
550     goto out_mongrp;
551     - kernfs_get(kn_mondata);
552     rdtgroup_default.mon.mon_data_kn = kn_mondata;
553     }
554    
555     @@ -2223,7 +2224,7 @@ static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp)
556     if (atomic_read(&sentry->waitcount) != 0)
557     sentry->flags = RDT_DELETED;
558     else
559     - kfree(sentry);
560     + rdtgroup_remove(sentry);
561     }
562     }
563    
564     @@ -2265,7 +2266,7 @@ static void rmdir_all_sub(void)
565     if (atomic_read(&rdtgrp->waitcount) != 0)
566     rdtgrp->flags = RDT_DELETED;
567     else
568     - kfree(rdtgrp);
569     + rdtgroup_remove(rdtgrp);
570     }
571     /* Notify online CPUs to update per cpu storage and PQR_ASSOC MSR */
572     update_closid_rmid(cpu_online_mask, &rdtgroup_default);
573     @@ -2365,11 +2366,6 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
574     if (IS_ERR(kn))
575     return PTR_ERR(kn);
576    
577     - /*
578     - * This extra ref will be put in kernfs_remove() and guarantees
579     - * that kn is always accessible.
580     - */
581     - kernfs_get(kn);
582     ret = rdtgroup_kn_set_ugid(kn);
583     if (ret)
584     goto out_destroy;
585     @@ -2705,8 +2701,8 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
586     /*
587     * kernfs_remove() will drop the reference count on "kn" which
588     * will free it. But we still need it to stick around for the
589     - * rdtgroup_kn_unlock(kn} call below. Take one extra reference
590     - * here, which will be dropped inside rdtgroup_kn_unlock().
591     + * rdtgroup_kn_unlock(kn) call. Take one extra reference here,
592     + * which will be dropped by kernfs_put() in rdtgroup_remove().
593     */
594     kernfs_get(kn);
595    
596     @@ -2747,6 +2743,7 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
597     out_idfree:
598     free_rmid(rdtgrp->mon.rmid);
599     out_destroy:
600     + kernfs_put(rdtgrp->kn);
601     kernfs_remove(rdtgrp->kn);
602     out_free_rgrp:
603     kfree(rdtgrp);
604     @@ -2759,7 +2756,7 @@ static void mkdir_rdt_prepare_clean(struct rdtgroup *rgrp)
605     {
606     kernfs_remove(rgrp->kn);
607     free_rmid(rgrp->mon.rmid);
608     - kfree(rgrp);
609     + rdtgroup_remove(rgrp);
610     }
611    
612     /*
613     @@ -2921,11 +2918,6 @@ static int rdtgroup_rmdir_mon(struct kernfs_node *kn, struct rdtgroup *rdtgrp,
614     WARN_ON(list_empty(&prdtgrp->mon.crdtgrp_list));
615     list_del(&rdtgrp->mon.crdtgrp_list);
616    
617     - /*
618     - * one extra hold on this, will drop when we kfree(rdtgrp)
619     - * in rdtgroup_kn_unlock()
620     - */
621     - kernfs_get(kn);
622     kernfs_remove(rdtgrp->kn);
623    
624     return 0;
625     @@ -2937,11 +2929,6 @@ static int rdtgroup_ctrl_remove(struct kernfs_node *kn,
626     rdtgrp->flags = RDT_DELETED;
627     list_del(&rdtgrp->rdtgroup_list);
628    
629     - /*
630     - * one extra hold on this, will drop when we kfree(rdtgrp)
631     - * in rdtgroup_kn_unlock()
632     - */
633     - kernfs_get(kn);
634     kernfs_remove(rdtgrp->kn);
635     return 0;
636     }
637     diff --git a/arch/x86/kvm/irq.c b/arch/x86/kvm/irq.c
638     index e330e7d125f72..896db1aa77e7f 100644
639     --- a/arch/x86/kvm/irq.c
640     +++ b/arch/x86/kvm/irq.c
641     @@ -40,29 +40,10 @@ static int pending_userspace_extint(struct kvm_vcpu *v)
642     * check if there is pending interrupt from
643     * non-APIC source without intack.
644     */
645     -static int kvm_cpu_has_extint(struct kvm_vcpu *v)
646     -{
647     - u8 accept = kvm_apic_accept_pic_intr(v);
648     -
649     - if (accept) {
650     - if (irqchip_split(v->kvm))
651     - return pending_userspace_extint(v);
652     - else
653     - return v->kvm->arch.vpic->output;
654     - } else
655     - return 0;
656     -}
657     -
658     -/*
659     - * check if there is injectable interrupt:
660     - * when virtual interrupt delivery enabled,
661     - * interrupt from apic will handled by hardware,
662     - * we don't need to check it here.
663     - */
664     -int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v)
665     +int kvm_cpu_has_extint(struct kvm_vcpu *v)
666     {
667     /*
668     - * FIXME: interrupt.injected represents an interrupt that it's
669     + * FIXME: interrupt.injected represents an interrupt whose
670     * side-effects have already been applied (e.g. bit from IRR
671     * already moved to ISR). Therefore, it is incorrect to rely
672     * on interrupt.injected to know if there is a pending
673     @@ -75,6 +56,23 @@ int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v)
674     if (!lapic_in_kernel(v))
675     return v->arch.interrupt.injected;
676    
677     + if (!kvm_apic_accept_pic_intr(v))
678     + return 0;
679     +
680     + if (irqchip_split(v->kvm))
681     + return pending_userspace_extint(v);
682     + else
683     + return v->kvm->arch.vpic->output;
684     +}
685     +
686     +/*
687     + * check if there is injectable interrupt:
688     + * when virtual interrupt delivery enabled,
689     + * interrupt from apic will handled by hardware,
690     + * we don't need to check it here.
691     + */
692     +int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v)
693     +{
694     if (kvm_cpu_has_extint(v))
695     return 1;
696    
697     @@ -90,20 +88,6 @@ int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v)
698     */
699     int kvm_cpu_has_interrupt(struct kvm_vcpu *v)
700     {
701     - /*
702     - * FIXME: interrupt.injected represents an interrupt that it's
703     - * side-effects have already been applied (e.g. bit from IRR
704     - * already moved to ISR). Therefore, it is incorrect to rely
705     - * on interrupt.injected to know if there is a pending
706     - * interrupt in the user-mode LAPIC.
707     - * This leads to nVMX/nSVM not be able to distinguish
708     - * if it should exit from L2 to L1 on EXTERNAL_INTERRUPT on
709     - * pending interrupt or should re-inject an injected
710     - * interrupt.
711     - */
712     - if (!lapic_in_kernel(v))
713     - return v->arch.interrupt.injected;
714     -
715     if (kvm_cpu_has_extint(v))
716     return 1;
717    
718     @@ -117,16 +101,21 @@ EXPORT_SYMBOL_GPL(kvm_cpu_has_interrupt);
719     */
720     static int kvm_cpu_get_extint(struct kvm_vcpu *v)
721     {
722     - if (kvm_cpu_has_extint(v)) {
723     - if (irqchip_split(v->kvm)) {
724     - int vector = v->arch.pending_external_vector;
725     -
726     - v->arch.pending_external_vector = -1;
727     - return vector;
728     - } else
729     - return kvm_pic_read_irq(v->kvm); /* PIC */
730     - } else
731     + if (!kvm_cpu_has_extint(v)) {
732     + WARN_ON(!lapic_in_kernel(v));
733     return -1;
734     + }
735     +
736     + if (!lapic_in_kernel(v))
737     + return v->arch.interrupt.nr;
738     +
739     + if (irqchip_split(v->kvm)) {
740     + int vector = v->arch.pending_external_vector;
741     +
742     + v->arch.pending_external_vector = -1;
743     + return vector;
744     + } else
745     + return kvm_pic_read_irq(v->kvm); /* PIC */
746     }
747    
748     /*
749     @@ -134,13 +123,7 @@ static int kvm_cpu_get_extint(struct kvm_vcpu *v)
750     */
751     int kvm_cpu_get_interrupt(struct kvm_vcpu *v)
752     {
753     - int vector;
754     -
755     - if (!lapic_in_kernel(v))
756     - return v->arch.interrupt.nr;
757     -
758     - vector = kvm_cpu_get_extint(v);
759     -
760     + int vector = kvm_cpu_get_extint(v);
761     if (vector != -1)
762     return vector; /* PIC */
763    
764     diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
765     index 9f793c9649cdf..3f6b866c644d5 100644
766     --- a/arch/x86/kvm/lapic.c
767     +++ b/arch/x86/kvm/lapic.c
768     @@ -2330,7 +2330,7 @@ int kvm_apic_has_interrupt(struct kvm_vcpu *vcpu)
769     struct kvm_lapic *apic = vcpu->arch.apic;
770     u32 ppr;
771    
772     - if (!kvm_apic_hw_enabled(apic))
773     + if (!kvm_apic_present(vcpu))
774     return -1;
775    
776     __apic_update_ppr(apic, &ppr);
777     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
778     index 880a24889291c..b7f86acb8c911 100644
779     --- a/arch/x86/kvm/x86.c
780     +++ b/arch/x86/kvm/x86.c
781     @@ -3624,21 +3624,23 @@ static int kvm_vcpu_ioctl_set_lapic(struct kvm_vcpu *vcpu,
782    
783     static int kvm_cpu_accept_dm_intr(struct kvm_vcpu *vcpu)
784     {
785     + /*
786     + * We can accept userspace's request for interrupt injection
787     + * as long as we have a place to store the interrupt number.
788     + * The actual injection will happen when the CPU is able to
789     + * deliver the interrupt.
790     + */
791     + if (kvm_cpu_has_extint(vcpu))
792     + return false;
793     +
794     + /* Acknowledging ExtINT does not happen if LINT0 is masked. */
795     return (!lapic_in_kernel(vcpu) ||
796     kvm_apic_accept_pic_intr(vcpu));
797     }
798    
799     -/*
800     - * if userspace requested an interrupt window, check that the
801     - * interrupt window is open.
802     - *
803     - * No need to exit to userspace if we already have an interrupt queued.
804     - */
805     static int kvm_vcpu_ready_for_interrupt_injection(struct kvm_vcpu *vcpu)
806     {
807     return kvm_arch_interrupt_allowed(vcpu) &&
808     - !kvm_cpu_has_interrupt(vcpu) &&
809     - !kvm_event_needs_reinjection(vcpu) &&
810     kvm_cpu_accept_dm_intr(vcpu);
811     }
812    
813     diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
814     index 6deb49094c605..d817b7c862a62 100644
815     --- a/arch/x86/xen/spinlock.c
816     +++ b/arch/x86/xen/spinlock.c
817     @@ -93,10 +93,20 @@ void xen_init_lock_cpu(int cpu)
818    
819     void xen_uninit_lock_cpu(int cpu)
820     {
821     + int irq;
822     +
823     if (!xen_pvspin)
824     return;
825    
826     - unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
827     + /*
828     + * When booting the kernel with 'mitigations=auto,nosmt', the secondary
829     + * CPUs are not activated, and lock_kicker_irq is not initialized.
830     + */
831     + irq = per_cpu(lock_kicker_irq, cpu);
832     + if (irq == -1)
833     + return;
834     +
835     + unbind_from_irqhandler(irq, NULL);
836     per_cpu(lock_kicker_irq, cpu) = -1;
837     kfree(per_cpu(irq_name, cpu));
838     per_cpu(irq_name, cpu) = NULL;
839     diff --git a/arch/xtensa/include/asm/uaccess.h b/arch/xtensa/include/asm/uaccess.h
840     index 3f80386f18838..5cb24a789e9e1 100644
841     --- a/arch/xtensa/include/asm/uaccess.h
842     +++ b/arch/xtensa/include/asm/uaccess.h
843     @@ -300,7 +300,7 @@ strncpy_from_user(char *dst, const char *src, long count)
844     return -EFAULT;
845     }
846     #else
847     -long strncpy_from_user(char *dst, const char *src, long count);
848     +long strncpy_from_user(char *dst, const char __user *src, long count);
849     #endif
850    
851     /*
852     diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
853     index 770a780dfa544..3934ce3385ac3 100644
854     --- a/drivers/bus/ti-sysc.c
855     +++ b/drivers/bus/ti-sysc.c
856     @@ -192,6 +192,9 @@ static int sysc_wait_softreset(struct sysc *ddata)
857     u32 sysc_mask, syss_done, rstval;
858     int syss_offset, error = 0;
859    
860     + if (ddata->cap->regbits->srst_shift < 0)
861     + return 0;
862     +
863     syss_offset = ddata->offsets[SYSC_SYSSTATUS];
864     sysc_mask = BIT(ddata->cap->regbits->srst_shift);
865    
866     diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
867     index cd81d10974a29..57b6555d6d042 100644
868     --- a/drivers/dma/pl330.c
869     +++ b/drivers/dma/pl330.c
870     @@ -2793,7 +2793,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,
871     * If burst size is smaller than bus width then make sure we only
872     * transfer one at a time to avoid a burst stradling an MFIFO entry.
873     */
874     - if (desc->rqcfg.brst_size * 8 < pl330->pcfg.data_bus_width)
875     + if (burst * 8 < pl330->pcfg.data_bus_width)
876     desc->rqcfg.brst_len = 1;
877    
878     desc->bytes_requested = len;
879     diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
880     index 43acba2a1c0ee..a6abfe702c5a3 100644
881     --- a/drivers/dma/xilinx/xilinx_dma.c
882     +++ b/drivers/dma/xilinx/xilinx_dma.c
883     @@ -454,8 +454,8 @@ struct xilinx_dma_device {
884     #define to_dma_tx_descriptor(tx) \
885     container_of(tx, struct xilinx_dma_tx_descriptor, async_tx)
886     #define xilinx_dma_poll_timeout(chan, reg, val, cond, delay_us, timeout_us) \
887     - readl_poll_timeout(chan->xdev->regs + chan->ctrl_offset + reg, val, \
888     - cond, delay_us, timeout_us)
889     + readl_poll_timeout_atomic(chan->xdev->regs + chan->ctrl_offset + reg, \
890     + val, cond, delay_us, timeout_us)
891    
892     /* IO accessors */
893     static inline u32 dma_read(struct xilinx_dma_chan *chan, u32 reg)
894     diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
895     index 6a6b412206ec0..3222645c95b33 100644
896     --- a/drivers/firmware/efi/Kconfig
897     +++ b/drivers/firmware/efi/Kconfig
898     @@ -216,7 +216,7 @@ config EFI_DEV_PATH_PARSER
899    
900     config EFI_EARLYCON
901     def_bool y
902     - depends on SERIAL_EARLYCON && !ARM && !IA64
903     + depends on EFI && SERIAL_EARLYCON && !ARM && !IA64
904     select FONT_SUPPORT
905     select ARCH_USE_MEMREMAP_PROT
906    
907     diff --git a/drivers/hid/hid-cypress.c b/drivers/hid/hid-cypress.c
908     index a50ba4a4a1d71..b88f889b3932e 100644
909     --- a/drivers/hid/hid-cypress.c
910     +++ b/drivers/hid/hid-cypress.c
911     @@ -23,19 +23,17 @@
912     #define CP_2WHEEL_MOUSE_HACK 0x02
913     #define CP_2WHEEL_MOUSE_HACK_ON 0x04
914    
915     +#define VA_INVAL_LOGICAL_BOUNDARY 0x08
916     +
917     /*
918     * Some USB barcode readers from cypress have usage min and usage max in
919     * the wrong order
920     */
921     -static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
922     +static __u8 *cp_rdesc_fixup(struct hid_device *hdev, __u8 *rdesc,
923     unsigned int *rsize)
924     {
925     - unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
926     unsigned int i;
927    
928     - if (!(quirks & CP_RDESC_SWAPPED_MIN_MAX))
929     - return rdesc;
930     -
931     if (*rsize < 4)
932     return rdesc;
933    
934     @@ -48,6 +46,40 @@ static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
935     return rdesc;
936     }
937    
938     +static __u8 *va_logical_boundary_fixup(struct hid_device *hdev, __u8 *rdesc,
939     + unsigned int *rsize)
940     +{
941     + /*
942     + * Varmilo VA104M (with VID Cypress and device ID 07B1) incorrectly
943     + * reports Logical Minimum of its Consumer Control device as 572
944     + * (0x02 0x3c). Fix this by setting its Logical Minimum to zero.
945     + */
946     + if (*rsize == 25 &&
947     + rdesc[0] == 0x05 && rdesc[1] == 0x0c &&
948     + rdesc[2] == 0x09 && rdesc[3] == 0x01 &&
949     + rdesc[6] == 0x19 && rdesc[7] == 0x00 &&
950     + rdesc[11] == 0x16 && rdesc[12] == 0x3c && rdesc[13] == 0x02) {
951     + hid_info(hdev,
952     + "fixing up varmilo VA104M consumer control report descriptor\n");
953     + rdesc[12] = 0x00;
954     + rdesc[13] = 0x00;
955     + }
956     + return rdesc;
957     +}
958     +
959     +static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
960     + unsigned int *rsize)
961     +{
962     + unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
963     +
964     + if (quirks & CP_RDESC_SWAPPED_MIN_MAX)
965     + rdesc = cp_rdesc_fixup(hdev, rdesc, rsize);
966     + if (quirks & VA_INVAL_LOGICAL_BOUNDARY)
967     + rdesc = va_logical_boundary_fixup(hdev, rdesc, rsize);
968     +
969     + return rdesc;
970     +}
971     +
972     static int cp_input_mapped(struct hid_device *hdev, struct hid_input *hi,
973     struct hid_field *field, struct hid_usage *usage,
974     unsigned long **bit, int *max)
975     @@ -128,6 +160,8 @@ static const struct hid_device_id cp_devices[] = {
976     .driver_data = CP_RDESC_SWAPPED_MIN_MAX },
977     { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE),
978     .driver_data = CP_2WHEEL_MOUSE_HACK },
979     + { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1),
980     + .driver_data = VA_INVAL_LOGICAL_BOUNDARY },
981     { }
982     };
983     MODULE_DEVICE_TABLE(hid, cp_devices);
984     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
985     index 7363d0b488bd8..2aa810665a78c 100644
986     --- a/drivers/hid/hid-ids.h
987     +++ b/drivers/hid/hid-ids.h
988     @@ -337,6 +337,8 @@
989     #define USB_DEVICE_ID_CYPRESS_BARCODE_4 0xed81
990     #define USB_DEVICE_ID_CYPRESS_TRUETOUCH 0xc001
991    
992     +#define USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1 0X07b1
993     +
994     #define USB_VENDOR_ID_DATA_MODUL 0x7374
995     #define USB_VENDOR_ID_DATA_MODUL_EASYMAXTOUCH 0x1201
996    
997     @@ -449,6 +451,10 @@
998     #define USB_VENDOR_ID_FRUCTEL 0x25B6
999     #define USB_DEVICE_ID_GAMETEL_MT_MODE 0x0002
1000    
1001     +#define USB_VENDOR_ID_GAMEVICE 0x27F8
1002     +#define USB_DEVICE_ID_GAMEVICE_GV186 0x0BBE
1003     +#define USB_DEVICE_ID_GAMEVICE_KISHI 0x0BBF
1004     +
1005     #define USB_VENDOR_ID_GAMERON 0x0810
1006     #define USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR 0x0001
1007     #define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR 0x0002
1008     @@ -487,6 +493,7 @@
1009     #define USB_DEVICE_ID_PENPOWER 0x00f4
1010    
1011     #define USB_VENDOR_ID_GREENASIA 0x0e8f
1012     +#define USB_DEVICE_ID_GREENASIA_DUAL_SAT_ADAPTOR 0x3010
1013     #define USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD 0x3013
1014    
1015     #define USB_VENDOR_ID_GRETAGMACBETH 0x0971
1016     @@ -743,6 +750,7 @@
1017     #define USB_VENDOR_ID_LOGITECH 0x046d
1018     #define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
1019     #define USB_DEVICE_ID_LOGITECH_T651 0xb00c
1020     +#define USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD 0xb309
1021     #define USB_DEVICE_ID_LOGITECH_C007 0xc007
1022     #define USB_DEVICE_ID_LOGITECH_C077 0xc077
1023     #define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
1024     @@ -1292,6 +1300,7 @@
1025    
1026     #define USB_VENDOR_ID_UGTIZER 0x2179
1027     #define USB_DEVICE_ID_UGTIZER_TABLET_GP0610 0x0053
1028     +#define USB_DEVICE_ID_UGTIZER_TABLET_GT5040 0x0077
1029    
1030     #define USB_VENDOR_ID_VIEWSONIC 0x0543
1031     #define USB_DEVICE_ID_VIEWSONIC_PD1011 0xe621
1032     diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
1033     index b2bff932c524f..b2da8476d0d30 100644
1034     --- a/drivers/hid/hid-input.c
1035     +++ b/drivers/hid/hid-input.c
1036     @@ -319,6 +319,9 @@ static const struct hid_device_id hid_battery_quirks[] = {
1037     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ASUSTEK,
1038     USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD),
1039     HID_BATTERY_QUIRK_IGNORE },
1040     + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH,
1041     + USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD),
1042     + HID_BATTERY_QUIRK_IGNORE },
1043     {}
1044     };
1045    
1046     diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c
1047     index 044a93f3c1178..742c052b0110a 100644
1048     --- a/drivers/hid/hid-ite.c
1049     +++ b/drivers/hid/hid-ite.c
1050     @@ -11,6 +11,48 @@
1051    
1052     #include "hid-ids.h"
1053    
1054     +#define QUIRK_TOUCHPAD_ON_OFF_REPORT BIT(0)
1055     +
1056     +static __u8 *ite_report_fixup(struct hid_device *hdev, __u8 *rdesc, unsigned int *rsize)
1057     +{
1058     + unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
1059     +
1060     + if (quirks & QUIRK_TOUCHPAD_ON_OFF_REPORT) {
1061     + if (*rsize == 188 && rdesc[162] == 0x81 && rdesc[163] == 0x02) {
1062     + hid_info(hdev, "Fixing up ITE keyboard report descriptor\n");
1063     + rdesc[163] = HID_MAIN_ITEM_RELATIVE;
1064     + }
1065     + }
1066     +
1067     + return rdesc;
1068     +}
1069     +
1070     +static int ite_input_mapping(struct hid_device *hdev,
1071     + struct hid_input *hi, struct hid_field *field,
1072     + struct hid_usage *usage, unsigned long **bit,
1073     + int *max)
1074     +{
1075     +
1076     + unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
1077     +
1078     + if ((quirks & QUIRK_TOUCHPAD_ON_OFF_REPORT) &&
1079     + (usage->hid & HID_USAGE_PAGE) == 0x00880000) {
1080     + if (usage->hid == 0x00880078) {
1081     + /* Touchpad on, userspace expects F22 for this */
1082     + hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_F22);
1083     + return 1;
1084     + }
1085     + if (usage->hid == 0x00880079) {
1086     + /* Touchpad off, userspace expects F23 for this */
1087     + hid_map_usage_clear(hi, usage, bit, max, EV_KEY, KEY_F23);
1088     + return 1;
1089     + }
1090     + return -1;
1091     + }
1092     +
1093     + return 0;
1094     +}
1095     +
1096     static int ite_event(struct hid_device *hdev, struct hid_field *field,
1097     struct hid_usage *usage, __s32 value)
1098     {
1099     @@ -37,13 +79,27 @@ static int ite_event(struct hid_device *hdev, struct hid_field *field,
1100     return 0;
1101     }
1102    
1103     +static int ite_probe(struct hid_device *hdev, const struct hid_device_id *id)
1104     +{
1105     + int ret;
1106     +
1107     + hid_set_drvdata(hdev, (void *)id->driver_data);
1108     +
1109     + ret = hid_open_report(hdev);
1110     + if (ret)
1111     + return ret;
1112     +
1113     + return hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1114     +}
1115     +
1116     static const struct hid_device_id ite_devices[] = {
1117     { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
1118     { HID_USB_DEVICE(USB_VENDOR_ID_258A, USB_DEVICE_ID_258A_6A88) },
1119     /* ITE8595 USB kbd ctlr, with Synaptics touchpad connected to it. */
1120     { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
1121     USB_VENDOR_ID_SYNAPTICS,
1122     - USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012) },
1123     + USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012),
1124     + .driver_data = QUIRK_TOUCHPAD_ON_OFF_REPORT },
1125     /* ITE8910 USB kbd ctlr, with Synaptics touchpad connected to it. */
1126     { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
1127     USB_VENDOR_ID_SYNAPTICS,
1128     @@ -55,6 +111,9 @@ MODULE_DEVICE_TABLE(hid, ite_devices);
1129     static struct hid_driver ite_driver = {
1130     .name = "itetech",
1131     .id_table = ite_devices,
1132     + .probe = ite_probe,
1133     + .report_fixup = ite_report_fixup,
1134     + .input_mapping = ite_input_mapping,
1135     .event = ite_event,
1136     };
1137     module_hid_driver(ite_driver);
1138     diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
1139     index e49d36de07968..919551ed5809c 100644
1140     --- a/drivers/hid/hid-logitech-hidpp.c
1141     +++ b/drivers/hid/hid-logitech-hidpp.c
1142     @@ -3789,6 +3789,9 @@ static const struct hid_device_id hidpp_devices[] = {
1143     { /* Keyboard MX5000 (Bluetooth-receiver in HID proxy mode) */
1144     LDJ_DEVICE(0xb305),
1145     .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
1146     + { /* Dinovo Edge (Bluetooth-receiver in HID proxy mode) */
1147     + LDJ_DEVICE(0xb309),
1148     + .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
1149     { /* Keyboard MX5500 (Bluetooth-receiver in HID proxy mode) */
1150     LDJ_DEVICE(0xb30b),
1151     .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
1152     @@ -3831,6 +3834,9 @@ static const struct hid_device_id hidpp_devices[] = {
1153     { /* MX5000 keyboard over Bluetooth */
1154     HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb305),
1155     .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
1156     + { /* Dinovo Edge keyboard over Bluetooth */
1157     + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb309),
1158     + .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
1159     { /* MX5500 keyboard over Bluetooth */
1160     HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb30b),
1161     .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
1162     diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
1163     index 0440e2f6e8a3c..60d188a704e5e 100644
1164     --- a/drivers/hid/hid-quirks.c
1165     +++ b/drivers/hid/hid-quirks.c
1166     @@ -83,7 +83,12 @@ static const struct hid_device_id hid_quirks[] = {
1167     { HID_USB_DEVICE(USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER), HID_QUIRK_NO_INIT_REPORTS },
1168     { HID_USB_DEVICE(USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28), HID_QUIRK_NOGET },
1169     { HID_USB_DEVICE(USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY), HID_QUIRK_NO_INIT_REPORTS },
1170     + { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_SAT_ADAPTOR), HID_QUIRK_MULTI_INPUT },
1171     { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD), HID_QUIRK_MULTI_INPUT },
1172     + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_GV186),
1173     + HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE },
1174     + { HID_USB_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_KISHI),
1175     + HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE },
1176     { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
1177     { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
1178     { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
1179     diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
1180     index 94c7398b5c279..3dd7d32467378 100644
1181     --- a/drivers/hid/hid-sensor-hub.c
1182     +++ b/drivers/hid/hid-sensor-hub.c
1183     @@ -483,7 +483,8 @@ static int sensor_hub_raw_event(struct hid_device *hdev,
1184     return 1;
1185    
1186     ptr = raw_data;
1187     - ptr++; /* Skip report id */
1188     + if (report->id)
1189     + ptr++; /* Skip report id */
1190    
1191     spin_lock_irqsave(&pdata->lock, flags);
1192    
1193     diff --git a/drivers/hid/hid-uclogic-core.c b/drivers/hid/hid-uclogic-core.c
1194     index 86b568037cb8a..8e9c9e646cb7d 100644
1195     --- a/drivers/hid/hid-uclogic-core.c
1196     +++ b/drivers/hid/hid-uclogic-core.c
1197     @@ -385,6 +385,8 @@ static const struct hid_device_id uclogic_devices[] = {
1198     USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) },
1199     { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER,
1200     USB_DEVICE_ID_UGTIZER_TABLET_GP0610) },
1201     + { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER,
1202     + USB_DEVICE_ID_UGTIZER_TABLET_GT5040) },
1203     { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
1204     USB_DEVICE_ID_UGEE_TABLET_G5) },
1205     { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
1206     diff --git a/drivers/hid/hid-uclogic-params.c b/drivers/hid/hid-uclogic-params.c
1207     index 78a364ae2f685..e80c812f44a77 100644
1208     --- a/drivers/hid/hid-uclogic-params.c
1209     +++ b/drivers/hid/hid-uclogic-params.c
1210     @@ -997,6 +997,8 @@ int uclogic_params_init(struct uclogic_params *params,
1211     break;
1212     case VID_PID(USB_VENDOR_ID_UGTIZER,
1213     USB_DEVICE_ID_UGTIZER_TABLET_GP0610):
1214     + case VID_PID(USB_VENDOR_ID_UGTIZER,
1215     + USB_DEVICE_ID_UGTIZER_TABLET_GT5040):
1216     case VID_PID(USB_VENDOR_ID_UGEE,
1217     USB_DEVICE_ID_UGEE_XPPEN_TABLET_G540):
1218     case VID_PID(USB_VENDOR_ID_UGEE,
1219     diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
1220     index bb75328193957..e8933daab4995 100644
1221     --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
1222     +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
1223     @@ -2423,6 +2423,7 @@ static int hns_roce_v2_mw_write_mtpt(void *mb_buf, struct hns_roce_mw *mw)
1224    
1225     roce_set_bit(mpt_entry->byte_8_mw_cnt_en, V2_MPT_BYTE_8_R_INV_EN_S, 1);
1226     roce_set_bit(mpt_entry->byte_8_mw_cnt_en, V2_MPT_BYTE_8_L_INV_EN_S, 1);
1227     + roce_set_bit(mpt_entry->byte_8_mw_cnt_en, V2_MPT_BYTE_8_LW_EN_S, 1);
1228    
1229     roce_set_bit(mpt_entry->byte_12_mw_pa, V2_MPT_BYTE_12_PA_S, 0);
1230     roce_set_bit(mpt_entry->byte_12_mw_pa, V2_MPT_BYTE_12_MR_MW_S, 1);
1231     @@ -4614,11 +4615,11 @@ static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
1232     V2_QPC_BYTE_28_AT_M,
1233     V2_QPC_BYTE_28_AT_S);
1234     qp_attr->retry_cnt = roce_get_field(context.byte_212_lsn,
1235     - V2_QPC_BYTE_212_RETRY_CNT_M,
1236     - V2_QPC_BYTE_212_RETRY_CNT_S);
1237     + V2_QPC_BYTE_212_RETRY_NUM_INIT_M,
1238     + V2_QPC_BYTE_212_RETRY_NUM_INIT_S);
1239     qp_attr->rnr_retry = roce_get_field(context.byte_244_rnr_rxack,
1240     - V2_QPC_BYTE_244_RNR_CNT_M,
1241     - V2_QPC_BYTE_244_RNR_CNT_S);
1242     + V2_QPC_BYTE_244_RNR_NUM_INIT_M,
1243     + V2_QPC_BYTE_244_RNR_NUM_INIT_S);
1244    
1245     done:
1246     qp_attr->cur_qp_state = qp_attr->qp_state;
1247     diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
1248     index c3cfea243af8c..119b2573c9a08 100644
1249     --- a/drivers/infiniband/hw/mthca/mthca_cq.c
1250     +++ b/drivers/infiniband/hw/mthca/mthca_cq.c
1251     @@ -803,8 +803,10 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
1252     }
1253    
1254     mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL);
1255     - if (IS_ERR(mailbox))
1256     + if (IS_ERR(mailbox)) {
1257     + err = PTR_ERR(mailbox);
1258     goto err_out_arm;
1259     + }
1260    
1261     cq_context = mailbox->buf;
1262    
1263     @@ -846,9 +848,9 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
1264     }
1265    
1266     spin_lock_irq(&dev->cq_table.lock);
1267     - if (mthca_array_set(&dev->cq_table.cq,
1268     - cq->cqn & (dev->limits.num_cqs - 1),
1269     - cq)) {
1270     + err = mthca_array_set(&dev->cq_table.cq,
1271     + cq->cqn & (dev->limits.num_cqs - 1), cq);
1272     + if (err) {
1273     spin_unlock_irq(&dev->cq_table.lock);
1274     goto err_out_free_mr;
1275     }
1276     diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
1277     index 20ff2bed3917a..5a89c1cfdaa97 100644
1278     --- a/drivers/input/serio/i8042.c
1279     +++ b/drivers/input/serio/i8042.c
1280     @@ -121,6 +121,7 @@ module_param_named(unmask_kbd_data, i8042_unmask_kbd_data, bool, 0600);
1281     MODULE_PARM_DESC(unmask_kbd_data, "Unconditional enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-condition: i8042.debug=1 enabled]");
1282     #endif
1283    
1284     +static bool i8042_present;
1285     static bool i8042_bypass_aux_irq_test;
1286     static char i8042_kbd_firmware_id[128];
1287     static char i8042_aux_firmware_id[128];
1288     @@ -341,6 +342,9 @@ int i8042_command(unsigned char *param, int command)
1289     unsigned long flags;
1290     int retval;
1291    
1292     + if (!i8042_present)
1293     + return -1;
1294     +
1295     spin_lock_irqsave(&i8042_lock, flags);
1296     retval = __i8042_command(param, command);
1297     spin_unlock_irqrestore(&i8042_lock, flags);
1298     @@ -1609,12 +1613,15 @@ static int __init i8042_init(void)
1299    
1300     err = i8042_platform_init();
1301     if (err)
1302     - return err;
1303     + return (err == -ENODEV) ? 0 : err;
1304    
1305     err = i8042_controller_check();
1306     if (err)
1307     goto err_platform_exit;
1308    
1309     + /* Set this before creating the dev to allow i8042_command to work right away */
1310     + i8042_present = true;
1311     +
1312     pdev = platform_create_bundle(&i8042_driver, i8042_probe, NULL, 0, NULL, 0);
1313     if (IS_ERR(pdev)) {
1314     err = PTR_ERR(pdev);
1315     @@ -1633,6 +1640,9 @@ static int __init i8042_init(void)
1316    
1317     static void __exit i8042_exit(void)
1318     {
1319     + if (!i8042_present)
1320     + return;
1321     +
1322     platform_device_unregister(i8042_platform_device);
1323     platform_driver_unregister(&i8042_driver);
1324     i8042_platform_exit();
1325     diff --git a/drivers/irqchip/irq-sni-exiu.c b/drivers/irqchip/irq-sni-exiu.c
1326     index 1d027623c7760..abd011fcecf4a 100644
1327     --- a/drivers/irqchip/irq-sni-exiu.c
1328     +++ b/drivers/irqchip/irq-sni-exiu.c
1329     @@ -136,7 +136,7 @@ static int exiu_domain_translate(struct irq_domain *domain,
1330     if (fwspec->param_count != 2)
1331     return -EINVAL;
1332     *hwirq = fwspec->param[0];
1333     - *type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
1334     + *type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK;
1335     }
1336     return 0;
1337     }
1338     diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
1339     index 246fa2657d744..f9a2a9ecbac9e 100644
1340     --- a/drivers/net/can/m_can/m_can.c
1341     +++ b/drivers/net/can/m_can/m_can.c
1342     @@ -990,7 +990,7 @@ static const struct can_bittiming_const m_can_bittiming_const_31X = {
1343     .name = KBUILD_MODNAME,
1344     .tseg1_min = 2, /* Time segment 1 = prop_seg + phase_seg1 */
1345     .tseg1_max = 256,
1346     - .tseg2_min = 1, /* Time segment 2 = phase_seg2 */
1347     + .tseg2_min = 2, /* Time segment 2 = phase_seg2 */
1348     .tseg2_max = 128,
1349     .sjw_max = 128,
1350     .brp_min = 1,
1351     @@ -1605,7 +1605,7 @@ static int m_can_open(struct net_device *dev)
1352     INIT_WORK(&cdev->tx_work, m_can_tx_work_queue);
1353    
1354     err = request_threaded_irq(dev->irq, NULL, m_can_isr,
1355     - IRQF_ONESHOT | IRQF_TRIGGER_FALLING,
1356     + IRQF_ONESHOT,
1357     dev->name, dev);
1358     } else {
1359     err = request_irq(dev->irq, m_can_isr, IRQF_SHARED, dev->name,
1360     diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
1361     index a4b4b742c80c3..0ad13d78815c5 100644
1362     --- a/drivers/net/can/usb/gs_usb.c
1363     +++ b/drivers/net/can/usb/gs_usb.c
1364     @@ -63,21 +63,27 @@ enum gs_can_identify_mode {
1365     };
1366    
1367     /* data types passed between host and device */
1368     +
1369     +/* The firmware on the original USB2CAN by Geschwister Schneider
1370     + * Technologie Entwicklungs- und Vertriebs UG exchanges all data
1371     + * between the host and the device in host byte order. This is done
1372     + * with the struct gs_host_config::byte_order member, which is sent
1373     + * first to indicate the desired byte order.
1374     + *
1375     + * The widely used open source firmware candleLight doesn't support
1376     + * this feature and exchanges the data in little endian byte order.
1377     + */
1378     struct gs_host_config {
1379     - u32 byte_order;
1380     + __le32 byte_order;
1381     } __packed;
1382     -/* All data exchanged between host and device is exchanged in host byte order,
1383     - * thanks to the struct gs_host_config byte_order member, which is sent first
1384     - * to indicate the desired byte order.
1385     - */
1386    
1387     struct gs_device_config {
1388     u8 reserved1;
1389     u8 reserved2;
1390     u8 reserved3;
1391     u8 icount;
1392     - u32 sw_version;
1393     - u32 hw_version;
1394     + __le32 sw_version;
1395     + __le32 hw_version;
1396     } __packed;
1397    
1398     #define GS_CAN_MODE_NORMAL 0
1399     @@ -87,26 +93,26 @@ struct gs_device_config {
1400     #define GS_CAN_MODE_ONE_SHOT BIT(3)
1401    
1402     struct gs_device_mode {
1403     - u32 mode;
1404     - u32 flags;
1405     + __le32 mode;
1406     + __le32 flags;
1407     } __packed;
1408    
1409     struct gs_device_state {
1410     - u32 state;
1411     - u32 rxerr;
1412     - u32 txerr;
1413     + __le32 state;
1414     + __le32 rxerr;
1415     + __le32 txerr;
1416     } __packed;
1417    
1418     struct gs_device_bittiming {
1419     - u32 prop_seg;
1420     - u32 phase_seg1;
1421     - u32 phase_seg2;
1422     - u32 sjw;
1423     - u32 brp;
1424     + __le32 prop_seg;
1425     + __le32 phase_seg1;
1426     + __le32 phase_seg2;
1427     + __le32 sjw;
1428     + __le32 brp;
1429     } __packed;
1430    
1431     struct gs_identify_mode {
1432     - u32 mode;
1433     + __le32 mode;
1434     } __packed;
1435    
1436     #define GS_CAN_FEATURE_LISTEN_ONLY BIT(0)
1437     @@ -117,23 +123,23 @@ struct gs_identify_mode {
1438     #define GS_CAN_FEATURE_IDENTIFY BIT(5)
1439    
1440     struct gs_device_bt_const {
1441     - u32 feature;
1442     - u32 fclk_can;
1443     - u32 tseg1_min;
1444     - u32 tseg1_max;
1445     - u32 tseg2_min;
1446     - u32 tseg2_max;
1447     - u32 sjw_max;
1448     - u32 brp_min;
1449     - u32 brp_max;
1450     - u32 brp_inc;
1451     + __le32 feature;
1452     + __le32 fclk_can;
1453     + __le32 tseg1_min;
1454     + __le32 tseg1_max;
1455     + __le32 tseg2_min;
1456     + __le32 tseg2_max;
1457     + __le32 sjw_max;
1458     + __le32 brp_min;
1459     + __le32 brp_max;
1460     + __le32 brp_inc;
1461     } __packed;
1462    
1463     #define GS_CAN_FLAG_OVERFLOW 1
1464    
1465     struct gs_host_frame {
1466     u32 echo_id;
1467     - u32 can_id;
1468     + __le32 can_id;
1469    
1470     u8 can_dlc;
1471     u8 channel;
1472     @@ -329,13 +335,13 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
1473     if (!skb)
1474     return;
1475    
1476     - cf->can_id = hf->can_id;
1477     + cf->can_id = le32_to_cpu(hf->can_id);
1478    
1479     cf->can_dlc = get_can_dlc(hf->can_dlc);
1480     memcpy(cf->data, hf->data, 8);
1481    
1482     /* ERROR frames tell us information about the controller */
1483     - if (hf->can_id & CAN_ERR_FLAG)
1484     + if (le32_to_cpu(hf->can_id) & CAN_ERR_FLAG)
1485     gs_update_state(dev, cf);
1486    
1487     netdev->stats.rx_packets++;
1488     @@ -418,11 +424,11 @@ static int gs_usb_set_bittiming(struct net_device *netdev)
1489     if (!dbt)
1490     return -ENOMEM;
1491    
1492     - dbt->prop_seg = bt->prop_seg;
1493     - dbt->phase_seg1 = bt->phase_seg1;
1494     - dbt->phase_seg2 = bt->phase_seg2;
1495     - dbt->sjw = bt->sjw;
1496     - dbt->brp = bt->brp;
1497     + dbt->prop_seg = cpu_to_le32(bt->prop_seg);
1498     + dbt->phase_seg1 = cpu_to_le32(bt->phase_seg1);
1499     + dbt->phase_seg2 = cpu_to_le32(bt->phase_seg2);
1500     + dbt->sjw = cpu_to_le32(bt->sjw);
1501     + dbt->brp = cpu_to_le32(bt->brp);
1502    
1503     /* request bit timings */
1504     rc = usb_control_msg(interface_to_usbdev(intf),
1505     @@ -503,7 +509,7 @@ static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,
1506    
1507     cf = (struct can_frame *)skb->data;
1508    
1509     - hf->can_id = cf->can_id;
1510     + hf->can_id = cpu_to_le32(cf->can_id);
1511     hf->can_dlc = cf->can_dlc;
1512     memcpy(hf->data, cf->data, cf->can_dlc);
1513    
1514     @@ -573,6 +579,7 @@ static int gs_can_open(struct net_device *netdev)
1515     int rc, i;
1516     struct gs_device_mode *dm;
1517     u32 ctrlmode;
1518     + u32 flags = 0;
1519    
1520     rc = open_candev(netdev);
1521     if (rc)
1522     @@ -640,24 +647,24 @@ static int gs_can_open(struct net_device *netdev)
1523    
1524     /* flags */
1525     ctrlmode = dev->can.ctrlmode;
1526     - dm->flags = 0;
1527    
1528     if (ctrlmode & CAN_CTRLMODE_LOOPBACK)
1529     - dm->flags |= GS_CAN_MODE_LOOP_BACK;
1530     + flags |= GS_CAN_MODE_LOOP_BACK;
1531     else if (ctrlmode & CAN_CTRLMODE_LISTENONLY)
1532     - dm->flags |= GS_CAN_MODE_LISTEN_ONLY;
1533     + flags |= GS_CAN_MODE_LISTEN_ONLY;
1534    
1535     /* Controller is not allowed to retry TX
1536     * this mode is unavailable on atmels uc3c hardware
1537     */
1538     if (ctrlmode & CAN_CTRLMODE_ONE_SHOT)
1539     - dm->flags |= GS_CAN_MODE_ONE_SHOT;
1540     + flags |= GS_CAN_MODE_ONE_SHOT;
1541    
1542     if (ctrlmode & CAN_CTRLMODE_3_SAMPLES)
1543     - dm->flags |= GS_CAN_MODE_TRIPLE_SAMPLE;
1544     + flags |= GS_CAN_MODE_TRIPLE_SAMPLE;
1545    
1546     /* finally start device */
1547     - dm->mode = GS_CAN_MODE_START;
1548     + dm->mode = cpu_to_le32(GS_CAN_MODE_START);
1549     + dm->flags = cpu_to_le32(flags);
1550     rc = usb_control_msg(interface_to_usbdev(dev->iface),
1551     usb_sndctrlpipe(interface_to_usbdev(dev->iface), 0),
1552     GS_USB_BREQ_MODE,
1553     @@ -737,9 +744,9 @@ static int gs_usb_set_identify(struct net_device *netdev, bool do_identify)
1554     return -ENOMEM;
1555    
1556     if (do_identify)
1557     - imode->mode = GS_CAN_IDENTIFY_ON;
1558     + imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_ON);
1559     else
1560     - imode->mode = GS_CAN_IDENTIFY_OFF;
1561     + imode->mode = cpu_to_le32(GS_CAN_IDENTIFY_OFF);
1562    
1563     rc = usb_control_msg(interface_to_usbdev(dev->iface),
1564     usb_sndctrlpipe(interface_to_usbdev(dev->iface),
1565     @@ -790,6 +797,7 @@ static struct gs_can *gs_make_candev(unsigned int channel,
1566     struct net_device *netdev;
1567     int rc;
1568     struct gs_device_bt_const *bt_const;
1569     + u32 feature;
1570    
1571     bt_const = kmalloc(sizeof(*bt_const), GFP_KERNEL);
1572     if (!bt_const)
1573     @@ -830,14 +838,14 @@ static struct gs_can *gs_make_candev(unsigned int channel,
1574    
1575     /* dev settup */
1576     strcpy(dev->bt_const.name, "gs_usb");
1577     - dev->bt_const.tseg1_min = bt_const->tseg1_min;
1578     - dev->bt_const.tseg1_max = bt_const->tseg1_max;
1579     - dev->bt_const.tseg2_min = bt_const->tseg2_min;
1580     - dev->bt_const.tseg2_max = bt_const->tseg2_max;
1581     - dev->bt_const.sjw_max = bt_const->sjw_max;
1582     - dev->bt_const.brp_min = bt_const->brp_min;
1583     - dev->bt_const.brp_max = bt_const->brp_max;
1584     - dev->bt_const.brp_inc = bt_const->brp_inc;
1585     + dev->bt_const.tseg1_min = le32_to_cpu(bt_const->tseg1_min);
1586     + dev->bt_const.tseg1_max = le32_to_cpu(bt_const->tseg1_max);
1587     + dev->bt_const.tseg2_min = le32_to_cpu(bt_const->tseg2_min);
1588     + dev->bt_const.tseg2_max = le32_to_cpu(bt_const->tseg2_max);
1589     + dev->bt_const.sjw_max = le32_to_cpu(bt_const->sjw_max);
1590     + dev->bt_const.brp_min = le32_to_cpu(bt_const->brp_min);
1591     + dev->bt_const.brp_max = le32_to_cpu(bt_const->brp_max);
1592     + dev->bt_const.brp_inc = le32_to_cpu(bt_const->brp_inc);
1593    
1594     dev->udev = interface_to_usbdev(intf);
1595     dev->iface = intf;
1596     @@ -854,28 +862,29 @@ static struct gs_can *gs_make_candev(unsigned int channel,
1597    
1598     /* can settup */
1599     dev->can.state = CAN_STATE_STOPPED;
1600     - dev->can.clock.freq = bt_const->fclk_can;
1601     + dev->can.clock.freq = le32_to_cpu(bt_const->fclk_can);
1602     dev->can.bittiming_const = &dev->bt_const;
1603     dev->can.do_set_bittiming = gs_usb_set_bittiming;
1604    
1605     dev->can.ctrlmode_supported = 0;
1606    
1607     - if (bt_const->feature & GS_CAN_FEATURE_LISTEN_ONLY)
1608     + feature = le32_to_cpu(bt_const->feature);
1609     + if (feature & GS_CAN_FEATURE_LISTEN_ONLY)
1610     dev->can.ctrlmode_supported |= CAN_CTRLMODE_LISTENONLY;
1611    
1612     - if (bt_const->feature & GS_CAN_FEATURE_LOOP_BACK)
1613     + if (feature & GS_CAN_FEATURE_LOOP_BACK)
1614     dev->can.ctrlmode_supported |= CAN_CTRLMODE_LOOPBACK;
1615    
1616     - if (bt_const->feature & GS_CAN_FEATURE_TRIPLE_SAMPLE)
1617     + if (feature & GS_CAN_FEATURE_TRIPLE_SAMPLE)
1618     dev->can.ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
1619    
1620     - if (bt_const->feature & GS_CAN_FEATURE_ONE_SHOT)
1621     + if (feature & GS_CAN_FEATURE_ONE_SHOT)
1622     dev->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT;
1623    
1624     SET_NETDEV_DEV(netdev, &intf->dev);
1625    
1626     - if (dconf->sw_version > 1)
1627     - if (bt_const->feature & GS_CAN_FEATURE_IDENTIFY)
1628     + if (le32_to_cpu(dconf->sw_version) > 1)
1629     + if (feature & GS_CAN_FEATURE_IDENTIFY)
1630     netdev->ethtool_ops = &gs_usb_ethtool_ops;
1631    
1632     kfree(bt_const);
1633     @@ -910,7 +919,7 @@ static int gs_usb_probe(struct usb_interface *intf,
1634     if (!hconf)
1635     return -ENOMEM;
1636    
1637     - hconf->byte_order = 0x0000beef;
1638     + hconf->byte_order = cpu_to_le32(0x0000beef);
1639    
1640     /* send host config */
1641     rc = usb_control_msg(interface_to_usbdev(intf),
1642     diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
1643     index 92e4d140df6fa..469b155df4885 100644
1644     --- a/drivers/net/dsa/mv88e6xxx/chip.c
1645     +++ b/drivers/net/dsa/mv88e6xxx/chip.c
1646     @@ -2143,6 +2143,8 @@ static void mv88e6xxx_hardware_reset(struct mv88e6xxx_chip *chip)
1647     usleep_range(10000, 20000);
1648     gpiod_set_value_cansleep(gpiod, 0);
1649     usleep_range(10000, 20000);
1650     +
1651     + mv88e6xxx_g1_wait_eeprom_done(chip);
1652     }
1653     }
1654    
1655     diff --git a/drivers/net/dsa/mv88e6xxx/global1.c b/drivers/net/dsa/mv88e6xxx/global1.c
1656     index 8a903624fdd7c..938dd146629f1 100644
1657     --- a/drivers/net/dsa/mv88e6xxx/global1.c
1658     +++ b/drivers/net/dsa/mv88e6xxx/global1.c
1659     @@ -75,6 +75,37 @@ static int mv88e6xxx_g1_wait_init_ready(struct mv88e6xxx_chip *chip)
1660     return mv88e6xxx_g1_wait_bit(chip, MV88E6XXX_G1_STS, bit, 1);
1661     }
1662    
1663     +void mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip)
1664     +{
1665     + const unsigned long timeout = jiffies + 1 * HZ;
1666     + u16 val;
1667     + int err;
1668     +
1669     + /* Wait up to 1 second for the switch to finish reading the
1670     + * EEPROM.
1671     + */
1672     + while (time_before(jiffies, timeout)) {
1673     + err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_STS, &val);
1674     + if (err) {
1675     + dev_err(chip->dev, "Error reading status");
1676     + return;
1677     + }
1678     +
1679     + /* If the switch is still resetting, it may not
1680     + * respond on the bus, and so MDIO read returns
1681     + * 0xffff. Differentiate between that, and waiting for
1682     + * the EEPROM to be done by bit 0 being set.
1683     + */
1684     + if (val != 0xffff &&
1685     + val & BIT(MV88E6XXX_G1_STS_IRQ_EEPROM_DONE))
1686     + return;
1687     +
1688     + usleep_range(1000, 2000);
1689     + }
1690     +
1691     + dev_err(chip->dev, "Timeout waiting for EEPROM done");
1692     +}
1693     +
1694     /* Offset 0x01: Switch MAC Address Register Bytes 0 & 1
1695     * Offset 0x02: Switch MAC Address Register Bytes 2 & 3
1696     * Offset 0x03: Switch MAC Address Register Bytes 4 & 5
1697     diff --git a/drivers/net/dsa/mv88e6xxx/global1.h b/drivers/net/dsa/mv88e6xxx/global1.h
1698     index 0ae96a1e919b6..08d66ef6aace6 100644
1699     --- a/drivers/net/dsa/mv88e6xxx/global1.h
1700     +++ b/drivers/net/dsa/mv88e6xxx/global1.h
1701     @@ -277,6 +277,7 @@ int mv88e6xxx_g1_set_switch_mac(struct mv88e6xxx_chip *chip, u8 *addr);
1702     int mv88e6185_g1_reset(struct mv88e6xxx_chip *chip);
1703     int mv88e6352_g1_reset(struct mv88e6xxx_chip *chip);
1704     int mv88e6250_g1_reset(struct mv88e6xxx_chip *chip);
1705     +void mv88e6xxx_g1_wait_eeprom_done(struct mv88e6xxx_chip *chip);
1706    
1707     int mv88e6185_g1_ppu_enable(struct mv88e6xxx_chip *chip);
1708     int mv88e6185_g1_ppu_disable(struct mv88e6xxx_chip *chip);
1709     diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
1710     index 635345bced313..2e5348ec2a2e9 100644
1711     --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
1712     +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
1713     @@ -2622,16 +2622,9 @@ static int ena_device_init(struct ena_com_dev *ena_dev, struct pci_dev *pdev,
1714     goto err_mmio_read_less;
1715     }
1716    
1717     - rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(dma_width));
1718     + rc = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(dma_width));
1719     if (rc) {
1720     - dev_err(dev, "pci_set_dma_mask failed 0x%x\n", rc);
1721     - goto err_mmio_read_less;
1722     - }
1723     -
1724     - rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(dma_width));
1725     - if (rc) {
1726     - dev_err(dev, "err_pci_set_consistent_dma_mask failed 0x%x\n",
1727     - rc);
1728     + dev_err(dev, "dma_set_mask_and_coherent failed %d\n", rc);
1729     goto err_mmio_read_less;
1730     }
1731    
1732     @@ -3450,6 +3443,12 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1733     return rc;
1734     }
1735    
1736     + rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(ENA_MAX_PHYS_ADDR_SIZE_BITS));
1737     + if (rc) {
1738     + dev_err(&pdev->dev, "dma_set_mask_and_coherent failed %d\n", rc);
1739     + goto err_disable_device;
1740     + }
1741     +
1742     pci_set_master(pdev);
1743    
1744     ena_dev = vzalloc(sizeof(*ena_dev));
1745     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1746     index 6f777e9b4b936..7c8187d386756 100644
1747     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1748     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1749     @@ -10826,7 +10826,8 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
1750     if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) != 0 &&
1751     dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)) != 0) {
1752     dev_err(&pdev->dev, "System does not support DMA, aborting\n");
1753     - goto init_err_disable;
1754     + rc = -EIO;
1755     + goto init_err_release;
1756     }
1757    
1758     pci_set_master(pdev);
1759     @@ -11892,6 +11893,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1760     create_singlethread_workqueue("bnxt_pf_wq");
1761     if (!bnxt_pf_wq) {
1762     dev_err(&pdev->dev, "Unable to create workqueue.\n");
1763     + rc = -ENOMEM;
1764     goto init_err_pci_clean;
1765     }
1766     }
1767     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
1768     index 202af8dc79662..cb50b41cd3df2 100644
1769     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
1770     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
1771     @@ -630,7 +630,8 @@ int set_filter_wr(struct adapter *adapter, int fidx)
1772     FW_FILTER_WR_OVLAN_VLD_V(f->fs.val.ovlan_vld) |
1773     FW_FILTER_WR_IVLAN_VLDM_V(f->fs.mask.ivlan_vld) |
1774     FW_FILTER_WR_OVLAN_VLDM_V(f->fs.mask.ovlan_vld));
1775     - fwr->smac_sel = f->smt->idx;
1776     + if (f->fs.newsmac)
1777     + fwr->smac_sel = f->smt->idx;
1778     fwr->rx_chan_rx_rpl_iq =
1779     htons(FW_FILTER_WR_RX_CHAN_V(0) |
1780     FW_FILTER_WR_RX_RPL_IQ_V(adapter->sge.fw_evtq.abs_id));
1781     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
1782     index f357b9cbfee72..e53994ca3142c 100644
1783     --- a/drivers/net/ethernet/ibm/ibmvnic.c
1784     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
1785     @@ -1994,8 +1994,11 @@ static int do_reset(struct ibmvnic_adapter *adapter,
1786     for (i = 0; i < adapter->req_rx_queues; i++)
1787     napi_schedule(&adapter->napi[i]);
1788    
1789     - if (adapter->reset_reason != VNIC_RESET_FAILOVER)
1790     + if (adapter->reset_reason == VNIC_RESET_FAILOVER ||
1791     + adapter->reset_reason == VNIC_RESET_MOBILITY) {
1792     call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, netdev);
1793     + call_netdevice_notifiers(NETDEV_RESEND_IGMP, netdev);
1794     + }
1795    
1796     rc = 0;
1797    
1798     @@ -2065,6 +2068,9 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter,
1799     if (rc)
1800     return IBMVNIC_OPEN_FAILED;
1801    
1802     + call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, netdev);
1803     + call_netdevice_notifiers(NETDEV_RESEND_IGMP, netdev);
1804     +
1805     return 0;
1806     }
1807    
1808     @@ -2761,6 +2767,9 @@ static int reset_sub_crq_queues(struct ibmvnic_adapter *adapter)
1809     {
1810     int i, rc;
1811    
1812     + if (!adapter->tx_scrq || !adapter->rx_scrq)
1813     + return -EINVAL;
1814     +
1815     for (i = 0; i < adapter->req_tx_queues; i++) {
1816     netdev_dbg(adapter->netdev, "Re-setting tx_scrq[%d]\n", i);
1817     rc = reset_one_sub_crq_queue(adapter, adapter->tx_scrq[i]);
1818     @@ -4768,6 +4777,9 @@ static int ibmvnic_reset_crq(struct ibmvnic_adapter *adapter)
1819     } while (rc == H_BUSY || H_IS_LONG_BUSY(rc));
1820    
1821     /* Clean out the queue */
1822     + if (!crq->msgs)
1823     + return -EINVAL;
1824     +
1825     memset(crq->msgs, 0, PAGE_SIZE);
1826     crq->cur = 0;
1827     crq->active = false;
1828     diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
1829     index 401304d4d5536..cfe99bae8e362 100644
1830     --- a/drivers/net/ethernet/intel/i40e/i40e.h
1831     +++ b/drivers/net/ethernet/intel/i40e/i40e.h
1832     @@ -150,6 +150,7 @@ enum i40e_state_t {
1833     __I40E_CLIENT_RESET,
1834     __I40E_VIRTCHNL_OP_PENDING,
1835     __I40E_RECOVERY_MODE,
1836     + __I40E_VF_RESETS_DISABLED, /* disable resets during i40e_remove */
1837     /* This must be last as it determines the size of the BITMAP */
1838     __I40E_STATE_SIZE__,
1839     };
1840     diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
1841     index b3c3911adfc2e..2b4327416457d 100644
1842     --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
1843     +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
1844     @@ -3988,8 +3988,16 @@ static irqreturn_t i40e_intr(int irq, void *data)
1845     }
1846    
1847     if (icr0 & I40E_PFINT_ICR0_VFLR_MASK) {
1848     - ena_mask &= ~I40E_PFINT_ICR0_ENA_VFLR_MASK;
1849     - set_bit(__I40E_VFLR_EVENT_PENDING, pf->state);
1850     + /* disable any further VFLR event notifications */
1851     + if (test_bit(__I40E_VF_RESETS_DISABLED, pf->state)) {
1852     + u32 reg = rd32(hw, I40E_PFINT_ICR0_ENA);
1853     +
1854     + reg &= ~I40E_PFINT_ICR0_VFLR_MASK;
1855     + wr32(hw, I40E_PFINT_ICR0_ENA, reg);
1856     + } else {
1857     + ena_mask &= ~I40E_PFINT_ICR0_ENA_VFLR_MASK;
1858     + set_bit(__I40E_VFLR_EVENT_PENDING, pf->state);
1859     + }
1860     }
1861    
1862     if (icr0 & I40E_PFINT_ICR0_GRST_MASK) {
1863     @@ -15345,6 +15353,11 @@ static void i40e_remove(struct pci_dev *pdev)
1864     while (test_bit(__I40E_RESET_RECOVERY_PENDING, pf->state))
1865     usleep_range(1000, 2000);
1866    
1867     + if (pf->flags & I40E_FLAG_SRIOV_ENABLED) {
1868     + set_bit(__I40E_VF_RESETS_DISABLED, pf->state);
1869     + i40e_free_vfs(pf);
1870     + pf->flags &= ~I40E_FLAG_SRIOV_ENABLED;
1871     + }
1872     /* no more scheduling of any task */
1873     set_bit(__I40E_SUSPENDED, pf->state);
1874     set_bit(__I40E_DOWN, pf->state);
1875     @@ -15371,11 +15384,6 @@ static void i40e_remove(struct pci_dev *pdev)
1876     */
1877     i40e_notify_client_of_netdev_close(pf->vsi[pf->lan_vsi], false);
1878    
1879     - if (pf->flags & I40E_FLAG_SRIOV_ENABLED) {
1880     - i40e_free_vfs(pf);
1881     - pf->flags &= ~I40E_FLAG_SRIOV_ENABLED;
1882     - }
1883     -
1884     i40e_fdir_teardown(pf);
1885    
1886     /* If there is a switch structure or any orphans, remove them.
1887     diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
1888     index 38042d610f82c..09ff3f335ffa6 100644
1889     --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
1890     +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
1891     @@ -1335,7 +1335,8 @@ static void i40e_cleanup_reset_vf(struct i40e_vf *vf)
1892     * @vf: pointer to the VF structure
1893     * @flr: VFLR was issued or not
1894     *
1895     - * Returns true if the VF is reset, false otherwise.
1896     + * Returns true if the VF is in reset, resets successfully, or resets
1897     + * are disabled and false otherwise.
1898     **/
1899     bool i40e_reset_vf(struct i40e_vf *vf, bool flr)
1900     {
1901     @@ -1345,11 +1346,14 @@ bool i40e_reset_vf(struct i40e_vf *vf, bool flr)
1902     u32 reg;
1903     int i;
1904    
1905     + if (test_bit(__I40E_VF_RESETS_DISABLED, pf->state))
1906     + return true;
1907     +
1908     /* If the VFs have been disabled, this means something else is
1909     * resetting the VF, so we shouldn't continue.
1910     */
1911     if (test_and_set_bit(__I40E_VF_DISABLE, pf->state))
1912     - return false;
1913     + return true;
1914    
1915     i40e_trigger_vf_reset(vf, flr);
1916    
1917     @@ -1513,6 +1517,15 @@ void i40e_free_vfs(struct i40e_pf *pf)
1918    
1919     i40e_notify_client_of_vf_enable(pf, 0);
1920    
1921     + /* Disable IOV before freeing resources. This lets any VF drivers
1922     + * running in the host get themselves cleaned up before we yank
1923     + * the carpet out from underneath their feet.
1924     + */
1925     + if (!pci_vfs_assigned(pf->pdev))
1926     + pci_disable_sriov(pf->pdev);
1927     + else
1928     + dev_warn(&pf->pdev->dev, "VFs are assigned - not disabling SR-IOV\n");
1929     +
1930     /* Amortize wait time by stopping all VFs at the same time */
1931     for (i = 0; i < pf->num_alloc_vfs; i++) {
1932     if (test_bit(I40E_VF_STATE_INIT, &pf->vf[i].vf_states))
1933     @@ -1528,15 +1541,6 @@ void i40e_free_vfs(struct i40e_pf *pf)
1934     i40e_vsi_wait_queues_disabled(pf->vsi[pf->vf[i].lan_vsi_idx]);
1935     }
1936    
1937     - /* Disable IOV before freeing resources. This lets any VF drivers
1938     - * running in the host get themselves cleaned up before we yank
1939     - * the carpet out from underneath their feet.
1940     - */
1941     - if (!pci_vfs_assigned(pf->pdev))
1942     - pci_disable_sriov(pf->pdev);
1943     - else
1944     - dev_warn(&pf->pdev->dev, "VFs are assigned - not disabling SR-IOV\n");
1945     -
1946     /* free up VF resources */
1947     tmp = pf->num_alloc_vfs;
1948     pf->num_alloc_vfs = 0;
1949     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
1950     index 01b26b3327b01..73b8bf0fbf16f 100644
1951     --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
1952     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
1953     @@ -3069,6 +3069,9 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
1954     goto out_unlock;
1955     }
1956    
1957     + if (vif->type == NL80211_IFTYPE_STATION)
1958     + vif->bss_conf.he_support = sta->he_cap.has_he;
1959     +
1960     if (sta->tdls &&
1961     (vif->p2p ||
1962     iwl_mvm_tdls_sta_count(mvm, NULL) ==
1963     diff --git a/drivers/nfc/s3fwrn5/i2c.c b/drivers/nfc/s3fwrn5/i2c.c
1964     index e4f7fa00862de..2505abc8ef281 100644
1965     --- a/drivers/nfc/s3fwrn5/i2c.c
1966     +++ b/drivers/nfc/s3fwrn5/i2c.c
1967     @@ -26,8 +26,8 @@ struct s3fwrn5_i2c_phy {
1968     struct i2c_client *i2c_dev;
1969     struct nci_dev *ndev;
1970    
1971     - unsigned int gpio_en;
1972     - unsigned int gpio_fw_wake;
1973     + int gpio_en;
1974     + int gpio_fw_wake;
1975    
1976     struct mutex mutex;
1977    
1978     diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
1979     index f5d12bf109c78..9b1fc8633cfe1 100644
1980     --- a/drivers/nvme/host/pci.c
1981     +++ b/drivers/nvme/host/pci.c
1982     @@ -271,9 +271,21 @@ static void nvme_dbbuf_init(struct nvme_dev *dev,
1983     nvmeq->dbbuf_cq_ei = &dev->dbbuf_eis[cq_idx(qid, dev->db_stride)];
1984     }
1985    
1986     +static void nvme_dbbuf_free(struct nvme_queue *nvmeq)
1987     +{
1988     + if (!nvmeq->qid)
1989     + return;
1990     +
1991     + nvmeq->dbbuf_sq_db = NULL;
1992     + nvmeq->dbbuf_cq_db = NULL;
1993     + nvmeq->dbbuf_sq_ei = NULL;
1994     + nvmeq->dbbuf_cq_ei = NULL;
1995     +}
1996     +
1997     static void nvme_dbbuf_set(struct nvme_dev *dev)
1998     {
1999     struct nvme_command c;
2000     + unsigned int i;
2001    
2002     if (!dev->dbbuf_dbs)
2003     return;
2004     @@ -287,6 +299,9 @@ static void nvme_dbbuf_set(struct nvme_dev *dev)
2005     dev_warn(dev->ctrl.device, "unable to set dbbuf\n");
2006     /* Free memory and continue on */
2007     nvme_dbbuf_dma_free(dev);
2008     +
2009     + for (i = 1; i <= dev->online_queues; i++)
2010     + nvme_dbbuf_free(&dev->queues[i]);
2011     }
2012     }
2013    
2014     diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c
2015     index 2ea8497af82a6..bf5d80b97597b 100644
2016     --- a/drivers/phy/tegra/xusb.c
2017     +++ b/drivers/phy/tegra/xusb.c
2018     @@ -949,6 +949,7 @@ power_down:
2019     reset:
2020     reset_control_assert(padctl->rst);
2021     remove:
2022     + platform_set_drvdata(pdev, NULL);
2023     soc->ops->remove(padctl);
2024     return err;
2025     }
2026     diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
2027     index abcb336a515a1..5081048f2356e 100644
2028     --- a/drivers/platform/x86/thinkpad_acpi.c
2029     +++ b/drivers/platform/x86/thinkpad_acpi.c
2030     @@ -4238,6 +4238,7 @@ static void hotkey_resume(void)
2031     pr_err("error while attempting to reset the event firmware interface\n");
2032    
2033     tpacpi_send_radiosw_update();
2034     + tpacpi_input_send_tabletsw();
2035     hotkey_tablet_mode_notify_change();
2036     hotkey_wakeup_reason_notify_change();
2037     hotkey_wakeup_hotunplug_complete_notify_change();
2038     diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
2039     index a1e6569427c34..71a969fc3b206 100644
2040     --- a/drivers/platform/x86/toshiba_acpi.c
2041     +++ b/drivers/platform/x86/toshiba_acpi.c
2042     @@ -1485,7 +1485,7 @@ static ssize_t video_proc_write(struct file *file, const char __user *buf,
2043     struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file));
2044     char *buffer;
2045     char *cmd;
2046     - int lcd_out, crt_out, tv_out;
2047     + int lcd_out = -1, crt_out = -1, tv_out = -1;
2048     int remain = count;
2049     int value;
2050     int ret;
2051     @@ -1517,7 +1517,6 @@ static ssize_t video_proc_write(struct file *file, const char __user *buf,
2052    
2053     kfree(cmd);
2054    
2055     - lcd_out = crt_out = tv_out = -1;
2056     ret = get_video_status(dev, &video_out);
2057     if (!ret) {
2058     unsigned int new_video_out = video_out;
2059     diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
2060     index 820f2c29376c0..93b4cb156b0bc 100644
2061     --- a/drivers/s390/net/qeth_core.h
2062     +++ b/drivers/s390/net/qeth_core.h
2063     @@ -436,10 +436,13 @@ enum qeth_qdio_out_buffer_state {
2064     QETH_QDIO_BUF_EMPTY,
2065     /* Filled by driver; owned by hardware in order to be sent. */
2066     QETH_QDIO_BUF_PRIMED,
2067     - /* Identified to be pending in TPQ. */
2068     + /* Discovered by the TX completion code: */
2069     QETH_QDIO_BUF_PENDING,
2070     - /* Found in completion queue. */
2071     - QETH_QDIO_BUF_IN_CQ,
2072     + /* Finished by the TX completion code: */
2073     + QETH_QDIO_BUF_NEED_QAOB,
2074     + /* Received QAOB notification on CQ: */
2075     + QETH_QDIO_BUF_QAOB_OK,
2076     + QETH_QDIO_BUF_QAOB_ERROR,
2077     /* Handled via transfer pending / completion queue. */
2078     QETH_QDIO_BUF_HANDLED_DELAYED,
2079     };
2080     diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
2081     index 5043f0fcf399a..fad1c46d4b0e1 100644
2082     --- a/drivers/s390/net/qeth_core_main.c
2083     +++ b/drivers/s390/net/qeth_core_main.c
2084     @@ -31,6 +31,7 @@
2085    
2086     #include <net/iucv/af_iucv.h>
2087     #include <net/dsfield.h>
2088     +#include <net/sock.h>
2089    
2090     #include <asm/ebcdic.h>
2091     #include <asm/chpid.h>
2092     @@ -425,18 +426,13 @@ static void qeth_cleanup_handled_pending(struct qeth_qdio_out_q *q, int bidx,
2093    
2094     }
2095     }
2096     - if (forced_cleanup && (atomic_read(&(q->bufs[bidx]->state)) ==
2097     - QETH_QDIO_BUF_HANDLED_DELAYED)) {
2098     - /* for recovery situations */
2099     - qeth_init_qdio_out_buf(q, bidx);
2100     - QETH_CARD_TEXT(q->card, 2, "clprecov");
2101     - }
2102     }
2103    
2104    
2105     static void qeth_qdio_handle_aob(struct qeth_card *card,
2106     unsigned long phys_aob_addr)
2107     {
2108     + enum qeth_qdio_out_buffer_state new_state = QETH_QDIO_BUF_QAOB_OK;
2109     struct qaob *aob;
2110     struct qeth_qdio_out_buffer *buffer;
2111     enum iucv_tx_notify notification;
2112     @@ -448,22 +444,6 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,
2113     buffer = (struct qeth_qdio_out_buffer *) aob->user1;
2114     QETH_CARD_TEXT_(card, 5, "%lx", aob->user1);
2115    
2116     - if (atomic_cmpxchg(&buffer->state, QETH_QDIO_BUF_PRIMED,
2117     - QETH_QDIO_BUF_IN_CQ) == QETH_QDIO_BUF_PRIMED) {
2118     - notification = TX_NOTIFY_OK;
2119     - } else {
2120     - WARN_ON_ONCE(atomic_read(&buffer->state) !=
2121     - QETH_QDIO_BUF_PENDING);
2122     - atomic_set(&buffer->state, QETH_QDIO_BUF_IN_CQ);
2123     - notification = TX_NOTIFY_DELAYED_OK;
2124     - }
2125     -
2126     - if (aob->aorc != 0) {
2127     - QETH_CARD_TEXT_(card, 2, "aorc%02X", aob->aorc);
2128     - notification = qeth_compute_cq_notification(aob->aorc, 1);
2129     - }
2130     - qeth_notify_skbs(buffer->q, buffer, notification);
2131     -
2132     /* Free dangling allocations. The attached skbs are handled by
2133     * qeth_cleanup_handled_pending().
2134     */
2135     @@ -474,7 +454,33 @@ static void qeth_qdio_handle_aob(struct qeth_card *card,
2136     kmem_cache_free(qeth_core_header_cache,
2137     (void *) aob->sba[i]);
2138     }
2139     - atomic_set(&buffer->state, QETH_QDIO_BUF_HANDLED_DELAYED);
2140     +
2141     + if (aob->aorc) {
2142     + QETH_CARD_TEXT_(card, 2, "aorc%02X", aob->aorc);
2143     + new_state = QETH_QDIO_BUF_QAOB_ERROR;
2144     + }
2145     +
2146     + switch (atomic_xchg(&buffer->state, new_state)) {
2147     + case QETH_QDIO_BUF_PRIMED:
2148     + /* Faster than TX completion code. */
2149     + notification = qeth_compute_cq_notification(aob->aorc, 0);
2150     + qeth_notify_skbs(buffer->q, buffer, notification);
2151     + atomic_set(&buffer->state, QETH_QDIO_BUF_HANDLED_DELAYED);
2152     + break;
2153     + case QETH_QDIO_BUF_PENDING:
2154     + /* TX completion code is active and will handle the async
2155     + * completion for us.
2156     + */
2157     + break;
2158     + case QETH_QDIO_BUF_NEED_QAOB:
2159     + /* TX completion code is already finished. */
2160     + notification = qeth_compute_cq_notification(aob->aorc, 1);
2161     + qeth_notify_skbs(buffer->q, buffer, notification);
2162     + atomic_set(&buffer->state, QETH_QDIO_BUF_HANDLED_DELAYED);
2163     + break;
2164     + default:
2165     + WARN_ON_ONCE(1);
2166     + }
2167    
2168     qdio_release_aob(aob);
2169     }
2170     @@ -1083,7 +1089,7 @@ static void qeth_notify_skbs(struct qeth_qdio_out_q *q,
2171     skb_queue_walk(&buf->skb_list, skb) {
2172     QETH_CARD_TEXT_(q->card, 5, "skbn%d", notification);
2173     QETH_CARD_TEXT_(q->card, 5, "%lx", (long) skb);
2174     - if (skb->protocol == htons(ETH_P_AF_IUCV) && skb->sk)
2175     + if (skb->sk && skb->sk->sk_family == PF_IUCV)
2176     iucv_sk(skb->sk)->sk_txnotify(skb, notification);
2177     }
2178     }
2179     @@ -1094,9 +1100,6 @@ static void qeth_tx_complete_buf(struct qeth_qdio_out_buffer *buf, bool error,
2180     struct qeth_qdio_out_q *queue = buf->q;
2181     struct sk_buff *skb;
2182    
2183     - /* release may never happen from within CQ tasklet scope */
2184     - WARN_ON_ONCE(atomic_read(&buf->state) == QETH_QDIO_BUF_IN_CQ);
2185     -
2186     if (atomic_read(&buf->state) == QETH_QDIO_BUF_PENDING)
2187     qeth_notify_skbs(queue, buf, TX_NOTIFY_GENERALERROR);
2188    
2189     @@ -5223,9 +5226,32 @@ static void qeth_iqd_tx_complete(struct qeth_qdio_out_q *queue,
2190    
2191     if (atomic_cmpxchg(&buffer->state, QETH_QDIO_BUF_PRIMED,
2192     QETH_QDIO_BUF_PENDING) ==
2193     - QETH_QDIO_BUF_PRIMED)
2194     + QETH_QDIO_BUF_PRIMED) {
2195     qeth_notify_skbs(queue, buffer, TX_NOTIFY_PENDING);
2196    
2197     + /* Handle race with qeth_qdio_handle_aob(): */
2198     + switch (atomic_xchg(&buffer->state,
2199     + QETH_QDIO_BUF_NEED_QAOB)) {
2200     + case QETH_QDIO_BUF_PENDING:
2201     + /* No concurrent QAOB notification. */
2202     + break;
2203     + case QETH_QDIO_BUF_QAOB_OK:
2204     + qeth_notify_skbs(queue, buffer,
2205     + TX_NOTIFY_DELAYED_OK);
2206     + atomic_set(&buffer->state,
2207     + QETH_QDIO_BUF_HANDLED_DELAYED);
2208     + break;
2209     + case QETH_QDIO_BUF_QAOB_ERROR:
2210     + qeth_notify_skbs(queue, buffer,
2211     + TX_NOTIFY_DELAYED_GENERALERROR);
2212     + atomic_set(&buffer->state,
2213     + QETH_QDIO_BUF_HANDLED_DELAYED);
2214     + break;
2215     + default:
2216     + WARN_ON_ONCE(1);
2217     + }
2218     + }
2219     +
2220     QETH_CARD_TEXT_(card, 5, "pel%u", bidx);
2221    
2222     /* prepare the queue slot for re-use: */
2223     diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
2224     index 70b99c0e2e678..f954be3d5ee22 100644
2225     --- a/drivers/scsi/libiscsi.c
2226     +++ b/drivers/scsi/libiscsi.c
2227     @@ -533,8 +533,8 @@ static void iscsi_complete_task(struct iscsi_task *task, int state)
2228     if (conn->task == task)
2229     conn->task = NULL;
2230    
2231     - if (conn->ping_task == task)
2232     - conn->ping_task = NULL;
2233     + if (READ_ONCE(conn->ping_task) == task)
2234     + WRITE_ONCE(conn->ping_task, NULL);
2235    
2236     /* release get from queueing */
2237     __iscsi_put_task(task);
2238     @@ -738,6 +738,9 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
2239     task->conn->session->age);
2240     }
2241    
2242     + if (unlikely(READ_ONCE(conn->ping_task) == INVALID_SCSI_TASK))
2243     + WRITE_ONCE(conn->ping_task, task);
2244     +
2245     if (!ihost->workq) {
2246     if (iscsi_prep_mgmt_task(conn, task))
2247     goto free_task;
2248     @@ -941,8 +944,11 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr)
2249     struct iscsi_nopout hdr;
2250     struct iscsi_task *task;
2251    
2252     - if (!rhdr && conn->ping_task)
2253     - return -EINVAL;
2254     + if (!rhdr) {
2255     + if (READ_ONCE(conn->ping_task))
2256     + return -EINVAL;
2257     + WRITE_ONCE(conn->ping_task, INVALID_SCSI_TASK);
2258     + }
2259    
2260     memset(&hdr, 0, sizeof(struct iscsi_nopout));
2261     hdr.opcode = ISCSI_OP_NOOP_OUT | ISCSI_OP_IMMEDIATE;
2262     @@ -957,11 +963,12 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr)
2263    
2264     task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)&hdr, NULL, 0);
2265     if (!task) {
2266     + if (!rhdr)
2267     + WRITE_ONCE(conn->ping_task, NULL);
2268     iscsi_conn_printk(KERN_ERR, conn, "Could not send nopout\n");
2269     return -EIO;
2270     } else if (!rhdr) {
2271     /* only track our nops */
2272     - conn->ping_task = task;
2273     conn->last_ping = jiffies;
2274     }
2275    
2276     @@ -984,7 +991,7 @@ static int iscsi_nop_out_rsp(struct iscsi_task *task,
2277     struct iscsi_conn *conn = task->conn;
2278     int rc = 0;
2279    
2280     - if (conn->ping_task != task) {
2281     + if (READ_ONCE(conn->ping_task) != task) {
2282     /*
2283     * If this is not in response to one of our
2284     * nops then it must be from userspace.
2285     @@ -1923,7 +1930,7 @@ static void iscsi_start_tx(struct iscsi_conn *conn)
2286     */
2287     static int iscsi_has_ping_timed_out(struct iscsi_conn *conn)
2288     {
2289     - if (conn->ping_task &&
2290     + if (READ_ONCE(conn->ping_task) &&
2291     time_before_eq(conn->last_recv + (conn->recv_timeout * HZ) +
2292     (conn->ping_timeout * HZ), jiffies))
2293     return 1;
2294     @@ -2058,7 +2065,7 @@ enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
2295     * Checking the transport already or nop from a cmd timeout still
2296     * running
2297     */
2298     - if (conn->ping_task) {
2299     + if (READ_ONCE(conn->ping_task)) {
2300     task->have_checked_conn = true;
2301     rc = BLK_EH_RESET_TIMER;
2302     goto done;
2303     diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
2304     index 0772327f87d93..b6ce880ddd153 100644
2305     --- a/drivers/scsi/ufs/ufshcd.c
2306     +++ b/drivers/scsi/ufs/ufshcd.c
2307     @@ -8160,11 +8160,7 @@ int ufshcd_shutdown(struct ufs_hba *hba)
2308     if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba))
2309     goto out;
2310    
2311     - if (pm_runtime_suspended(hba->dev)) {
2312     - ret = ufshcd_runtime_resume(hba);
2313     - if (ret)
2314     - goto out;
2315     - }
2316     + pm_runtime_get_sync(hba->dev);
2317    
2318     ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM);
2319     out:
2320     diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
2321     index d0afe0b1599fd..8a4be34bccfd2 100644
2322     --- a/drivers/spi/spi-bcm-qspi.c
2323     +++ b/drivers/spi/spi-bcm-qspi.c
2324     @@ -1213,7 +1213,7 @@ int bcm_qspi_probe(struct platform_device *pdev,
2325     if (!of_match_node(bcm_qspi_of_match, dev->of_node))
2326     return -ENODEV;
2327    
2328     - master = spi_alloc_master(dev, sizeof(struct bcm_qspi));
2329     + master = devm_spi_alloc_master(dev, sizeof(struct bcm_qspi));
2330     if (!master) {
2331     dev_err(dev, "error allocating spi_master\n");
2332     return -ENOMEM;
2333     @@ -1252,21 +1252,17 @@ int bcm_qspi_probe(struct platform_device *pdev,
2334    
2335     if (res) {
2336     qspi->base[MSPI] = devm_ioremap_resource(dev, res);
2337     - if (IS_ERR(qspi->base[MSPI])) {
2338     - ret = PTR_ERR(qspi->base[MSPI]);
2339     - goto qspi_resource_err;
2340     - }
2341     + if (IS_ERR(qspi->base[MSPI]))
2342     + return PTR_ERR(qspi->base[MSPI]);
2343     } else {
2344     - goto qspi_resource_err;
2345     + return 0;
2346     }
2347    
2348     res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "bspi");
2349     if (res) {
2350     qspi->base[BSPI] = devm_ioremap_resource(dev, res);
2351     - if (IS_ERR(qspi->base[BSPI])) {
2352     - ret = PTR_ERR(qspi->base[BSPI]);
2353     - goto qspi_resource_err;
2354     - }
2355     + if (IS_ERR(qspi->base[BSPI]))
2356     + return PTR_ERR(qspi->base[BSPI]);
2357     qspi->bspi_mode = true;
2358     } else {
2359     qspi->bspi_mode = false;
2360     @@ -1277,18 +1273,14 @@ int bcm_qspi_probe(struct platform_device *pdev,
2361     res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "cs_reg");
2362     if (res) {
2363     qspi->base[CHIP_SELECT] = devm_ioremap_resource(dev, res);
2364     - if (IS_ERR(qspi->base[CHIP_SELECT])) {
2365     - ret = PTR_ERR(qspi->base[CHIP_SELECT]);
2366     - goto qspi_resource_err;
2367     - }
2368     + if (IS_ERR(qspi->base[CHIP_SELECT]))
2369     + return PTR_ERR(qspi->base[CHIP_SELECT]);
2370     }
2371    
2372     qspi->dev_ids = kcalloc(num_irqs, sizeof(struct bcm_qspi_dev_id),
2373     GFP_KERNEL);
2374     - if (!qspi->dev_ids) {
2375     - ret = -ENOMEM;
2376     - goto qspi_resource_err;
2377     - }
2378     + if (!qspi->dev_ids)
2379     + return -ENOMEM;
2380    
2381     for (val = 0; val < num_irqs; val++) {
2382     irq = -1;
2383     @@ -1357,7 +1349,7 @@ int bcm_qspi_probe(struct platform_device *pdev,
2384     qspi->xfer_mode.addrlen = -1;
2385     qspi->xfer_mode.hp = -1;
2386    
2387     - ret = devm_spi_register_master(&pdev->dev, master);
2388     + ret = spi_register_master(master);
2389     if (ret < 0) {
2390     dev_err(dev, "can't register master\n");
2391     goto qspi_reg_err;
2392     @@ -1370,8 +1362,6 @@ qspi_reg_err:
2393     clk_disable_unprepare(qspi->clk);
2394     qspi_probe_err:
2395     kfree(qspi->dev_ids);
2396     -qspi_resource_err:
2397     - spi_master_put(master);
2398     return ret;
2399     }
2400     /* probe function to be called by SoC specific platform driver probe */
2401     @@ -1381,10 +1371,10 @@ int bcm_qspi_remove(struct platform_device *pdev)
2402     {
2403     struct bcm_qspi *qspi = platform_get_drvdata(pdev);
2404    
2405     + spi_unregister_master(qspi->master);
2406     bcm_qspi_hw_uninit(qspi);
2407     clk_disable_unprepare(qspi->clk);
2408     kfree(qspi->dev_ids);
2409     - spi_unregister_master(qspi->master);
2410    
2411     return 0;
2412     }
2413     diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
2414     index 9ae1c96f4d3d4..5bc97b22491cd 100644
2415     --- a/drivers/spi/spi-bcm2835.c
2416     +++ b/drivers/spi/spi-bcm2835.c
2417     @@ -1264,7 +1264,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
2418     struct bcm2835_spi *bs;
2419     int err;
2420    
2421     - ctlr = spi_alloc_master(&pdev->dev, ALIGN(sizeof(*bs),
2422     + ctlr = devm_spi_alloc_master(&pdev->dev, ALIGN(sizeof(*bs),
2423     dma_get_cache_alignment()));
2424     if (!ctlr)
2425     return -ENOMEM;
2426     @@ -1284,23 +1284,19 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
2427     bs = spi_controller_get_devdata(ctlr);
2428    
2429     bs->regs = devm_platform_ioremap_resource(pdev, 0);
2430     - if (IS_ERR(bs->regs)) {
2431     - err = PTR_ERR(bs->regs);
2432     - goto out_controller_put;
2433     - }
2434     + if (IS_ERR(bs->regs))
2435     + return PTR_ERR(bs->regs);
2436    
2437     bs->clk = devm_clk_get(&pdev->dev, NULL);
2438     if (IS_ERR(bs->clk)) {
2439     err = PTR_ERR(bs->clk);
2440     dev_err(&pdev->dev, "could not get clk: %d\n", err);
2441     - goto out_controller_put;
2442     + return err;
2443     }
2444    
2445     bs->irq = platform_get_irq(pdev, 0);
2446     - if (bs->irq <= 0) {
2447     - err = bs->irq ? bs->irq : -ENODEV;
2448     - goto out_controller_put;
2449     - }
2450     + if (bs->irq <= 0)
2451     + return bs->irq ? bs->irq : -ENODEV;
2452    
2453     clk_prepare_enable(bs->clk);
2454    
2455     @@ -1330,8 +1326,6 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
2456    
2457     out_clk_disable:
2458     clk_disable_unprepare(bs->clk);
2459     -out_controller_put:
2460     - spi_controller_put(ctlr);
2461     return err;
2462     }
2463    
2464     diff --git a/drivers/spi/spi-bcm2835aux.c b/drivers/spi/spi-bcm2835aux.c
2465     index 1e5aac1581aa4..8211107bfbe82 100644
2466     --- a/drivers/spi/spi-bcm2835aux.c
2467     +++ b/drivers/spi/spi-bcm2835aux.c
2468     @@ -529,8 +529,9 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)
2469    
2470     bs->clk = devm_clk_get(&pdev->dev, NULL);
2471     if (IS_ERR(bs->clk)) {
2472     + err = PTR_ERR(bs->clk);
2473     dev_err(&pdev->dev, "could not get clk: %d\n", err);
2474     - return PTR_ERR(bs->clk);
2475     + return err;
2476     }
2477    
2478     bs->irq = platform_get_irq(pdev, 0);
2479     diff --git a/drivers/staging/ralink-gdma/Kconfig b/drivers/staging/ralink-gdma/Kconfig
2480     index 54e8029e6b1af..0017376234e28 100644
2481     --- a/drivers/staging/ralink-gdma/Kconfig
2482     +++ b/drivers/staging/ralink-gdma/Kconfig
2483     @@ -2,6 +2,7 @@
2484     config DMA_RALINK
2485     tristate "RALINK DMA support"
2486     depends on RALINK && !SOC_RT288X
2487     + depends on DMADEVICES
2488     select DMA_ENGINE
2489     select DMA_VIRTUAL_CHANNELS
2490    
2491     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
2492     index bca183369ad8b..3403667a9592f 100644
2493     --- a/drivers/target/iscsi/iscsi_target.c
2494     +++ b/drivers/target/iscsi/iscsi_target.c
2495     @@ -483,8 +483,7 @@ EXPORT_SYMBOL(iscsit_queue_rsp);
2496     void iscsit_aborted_task(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
2497     {
2498     spin_lock_bh(&conn->cmd_lock);
2499     - if (!list_empty(&cmd->i_conn_node) &&
2500     - !(cmd->se_cmd.transport_state & CMD_T_FABRIC_STOP))
2501     + if (!list_empty(&cmd->i_conn_node))
2502     list_del_init(&cmd->i_conn_node);
2503     spin_unlock_bh(&conn->cmd_lock);
2504    
2505     @@ -4082,12 +4081,22 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
2506     spin_lock_bh(&conn->cmd_lock);
2507     list_splice_init(&conn->conn_cmd_list, &tmp_list);
2508    
2509     - list_for_each_entry(cmd, &tmp_list, i_conn_node) {
2510     + list_for_each_entry_safe(cmd, cmd_tmp, &tmp_list, i_conn_node) {
2511     struct se_cmd *se_cmd = &cmd->se_cmd;
2512    
2513     if (se_cmd->se_tfo != NULL) {
2514     spin_lock_irq(&se_cmd->t_state_lock);
2515     - se_cmd->transport_state |= CMD_T_FABRIC_STOP;
2516     + if (se_cmd->transport_state & CMD_T_ABORTED) {
2517     + /*
2518     + * LIO's abort path owns the cleanup for this,
2519     + * so put it back on the list and let
2520     + * aborted_task handle it.
2521     + */
2522     + list_move_tail(&cmd->i_conn_node,
2523     + &conn->conn_cmd_list);
2524     + } else {
2525     + se_cmd->transport_state |= CMD_T_FABRIC_STOP;
2526     + }
2527     spin_unlock_irq(&se_cmd->t_state_lock);
2528     }
2529     }
2530     diff --git a/drivers/tee/optee/call.c b/drivers/tee/optee/call.c
2531     index cf2367ba08d63..aadedec3bfe7b 100644
2532     --- a/drivers/tee/optee/call.c
2533     +++ b/drivers/tee/optee/call.c
2534     @@ -530,7 +530,8 @@ void optee_free_pages_list(void *list, size_t num_entries)
2535     static bool is_normal_memory(pgprot_t p)
2536     {
2537     #if defined(CONFIG_ARM)
2538     - return (pgprot_val(p) & L_PTE_MT_MASK) == L_PTE_MT_WRITEALLOC;
2539     + return (((pgprot_val(p) & L_PTE_MT_MASK) == L_PTE_MT_WRITEALLOC) ||
2540     + ((pgprot_val(p) & L_PTE_MT_MASK) == L_PTE_MT_WRITEBACK));
2541     #elif defined(CONFIG_ARM64)
2542     return (pgprot_val(p) & PTE_ATTRINDX_MASK) == PTE_ATTRINDX(MT_NORMAL);
2543     #else
2544     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
2545     index e26a6f18f4210..35e89460b9ca8 100644
2546     --- a/drivers/usb/core/devio.c
2547     +++ b/drivers/usb/core/devio.c
2548     @@ -482,11 +482,11 @@ static void snoop_urb(struct usb_device *udev,
2549    
2550     if (userurb) { /* Async */
2551     if (when == SUBMIT)
2552     - dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, "
2553     + dev_info(&udev->dev, "userurb %px, ep%d %s-%s, "
2554     "length %u\n",
2555     userurb, ep, t, d, length);
2556     else
2557     - dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, "
2558     + dev_info(&udev->dev, "userurb %px, ep%d %s-%s, "
2559     "actual_length %u status %d\n",
2560     userurb, ep, t, d, length,
2561     timeout_or_status);
2562     @@ -1992,7 +1992,7 @@ static int proc_reapurb(struct usb_dev_state *ps, void __user *arg)
2563     if (as) {
2564     int retval;
2565    
2566     - snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
2567     + snoop(&ps->dev->dev, "reap %px\n", as->userurb);
2568     retval = processcompl(as, (void __user * __user *)arg);
2569     free_async(as);
2570     return retval;
2571     @@ -2009,7 +2009,7 @@ static int proc_reapurbnonblock(struct usb_dev_state *ps, void __user *arg)
2572    
2573     as = async_getcompleted(ps);
2574     if (as) {
2575     - snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
2576     + snoop(&ps->dev->dev, "reap %px\n", as->userurb);
2577     retval = processcompl(as, (void __user * __user *)arg);
2578     free_async(as);
2579     } else {
2580     @@ -2139,7 +2139,7 @@ static int proc_reapurb_compat(struct usb_dev_state *ps, void __user *arg)
2581     if (as) {
2582     int retval;
2583    
2584     - snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
2585     + snoop(&ps->dev->dev, "reap %px\n", as->userurb);
2586     retval = processcompl_compat(as, (void __user * __user *)arg);
2587     free_async(as);
2588     return retval;
2589     @@ -2156,7 +2156,7 @@ static int proc_reapurbnonblock_compat(struct usb_dev_state *ps, void __user *ar
2590    
2591     as = async_getcompleted(ps);
2592     if (as) {
2593     - snoop(&ps->dev->dev, "reap %pK\n", as->userurb);
2594     + snoop(&ps->dev->dev, "reap %px\n", as->userurb);
2595     retval = processcompl_compat(as, (void __user * __user *)arg);
2596     free_async(as);
2597     } else {
2598     @@ -2621,7 +2621,7 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
2599     #endif
2600    
2601     case USBDEVFS_DISCARDURB:
2602     - snoop(&dev->dev, "%s: DISCARDURB %pK\n", __func__, p);
2603     + snoop(&dev->dev, "%s: DISCARDURB %px\n", __func__, p);
2604     ret = proc_unlinkurb(ps, p);
2605     break;
2606    
2607     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
2608     index 5ad14cdd97623..b55c3a699fc65 100644
2609     --- a/drivers/usb/core/quirks.c
2610     +++ b/drivers/usb/core/quirks.c
2611     @@ -348,6 +348,10 @@ static const struct usb_device_id usb_quirk_list[] = {
2612     /* Guillemot Webcam Hercules Dualpix Exchange*/
2613     { USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME },
2614    
2615     + /* Guillemot Hercules DJ Console audio card (BZ 208357) */
2616     + { USB_DEVICE(0x06f8, 0xb000), .driver_info =
2617     + USB_QUIRK_ENDPOINT_BLACKLIST },
2618     +
2619     /* Midiman M-Audio Keystation 88es */
2620     { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME },
2621    
2622     @@ -421,6 +425,10 @@ static const struct usb_device_id usb_quirk_list[] = {
2623     { USB_DEVICE(0x1532, 0x0116), .driver_info =
2624     USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
2625    
2626     + /* Lenovo ThinkCenter A630Z TI024Gen3 usb-audio */
2627     + { USB_DEVICE(0x17ef, 0xa012), .driver_info =
2628     + USB_QUIRK_DISCONNECT_SUSPEND },
2629     +
2630     /* BUILDWIN Photo Frame */
2631     { USB_DEVICE(0x1908, 0x1315), .driver_info =
2632     USB_QUIRK_HONOR_BNUMINTERFACES },
2633     @@ -521,6 +529,8 @@ static const struct usb_device_id usb_amd_resume_quirk_list[] = {
2634     * Matched for devices with USB_QUIRK_ENDPOINT_BLACKLIST.
2635     */
2636     static const struct usb_device_id usb_endpoint_blacklist[] = {
2637     + { USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x01 },
2638     + { USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x81 },
2639     { USB_DEVICE_INTERFACE_NUMBER(0x0926, 0x0202, 1), .driver_info = 0x85 },
2640     { USB_DEVICE_INTERFACE_NUMBER(0x0926, 0x0208, 1), .driver_info = 0x85 },
2641     { }
2642     diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
2643     index 46af0aa07e2e3..b2b5b0689667b 100644
2644     --- a/drivers/usb/gadget/function/f_midi.c
2645     +++ b/drivers/usb/gadget/function/f_midi.c
2646     @@ -1315,7 +1315,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
2647     midi->id = kstrdup(opts->id, GFP_KERNEL);
2648     if (opts->id && !midi->id) {
2649     status = -ENOMEM;
2650     - goto setup_fail;
2651     + goto midi_free;
2652     }
2653     midi->in_ports = opts->in_ports;
2654     midi->out_ports = opts->out_ports;
2655     @@ -1327,7 +1327,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
2656    
2657     status = kfifo_alloc(&midi->in_req_fifo, midi->qlen, GFP_KERNEL);
2658     if (status)
2659     - goto setup_fail;
2660     + goto midi_free;
2661    
2662     spin_lock_init(&midi->transmit_lock);
2663    
2664     @@ -1343,9 +1343,13 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)
2665    
2666     return &midi->func;
2667    
2668     +midi_free:
2669     + if (midi)
2670     + kfree(midi->id);
2671     + kfree(midi);
2672     setup_fail:
2673     mutex_unlock(&opts->lock);
2674     - kfree(midi);
2675     +
2676     return ERR_PTR(status);
2677     }
2678    
2679     diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
2680     index 238f555fe494a..cabcbb47f0ac1 100644
2681     --- a/drivers/usb/gadget/legacy/inode.c
2682     +++ b/drivers/usb/gadget/legacy/inode.c
2683     @@ -2040,6 +2040,9 @@ gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)
2684     return 0;
2685    
2686     Enomem:
2687     + kfree(CHIP);
2688     + CHIP = NULL;
2689     +
2690     return -ENOMEM;
2691     }
2692    
2693     diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
2694     index f63f84a257256..98c484149ac7f 100644
2695     --- a/drivers/vhost/scsi.c
2696     +++ b/drivers/vhost/scsi.c
2697     @@ -320,7 +320,7 @@ static u32 vhost_scsi_tpg_get_inst_index(struct se_portal_group *se_tpg)
2698     return 1;
2699     }
2700    
2701     -static void vhost_scsi_release_cmd(struct se_cmd *se_cmd)
2702     +static void vhost_scsi_release_cmd_res(struct se_cmd *se_cmd)
2703     {
2704     struct vhost_scsi_cmd *tv_cmd = container_of(se_cmd,
2705     struct vhost_scsi_cmd, tvc_se_cmd);
2706     @@ -340,6 +340,16 @@ static void vhost_scsi_release_cmd(struct se_cmd *se_cmd)
2707     target_free_tag(se_sess, se_cmd);
2708     }
2709    
2710     +static void vhost_scsi_release_cmd(struct se_cmd *se_cmd)
2711     +{
2712     + struct vhost_scsi_cmd *cmd = container_of(se_cmd,
2713     + struct vhost_scsi_cmd, tvc_se_cmd);
2714     + struct vhost_scsi *vs = cmd->tvc_vhost;
2715     +
2716     + llist_add(&cmd->tvc_completion_list, &vs->vs_completion_list);
2717     + vhost_work_queue(&vs->dev, &vs->vs_completion_work);
2718     +}
2719     +
2720     static u32 vhost_scsi_sess_get_index(struct se_session *se_sess)
2721     {
2722     return 0;
2723     @@ -362,28 +372,15 @@ static int vhost_scsi_get_cmd_state(struct se_cmd *se_cmd)
2724     return 0;
2725     }
2726    
2727     -static void vhost_scsi_complete_cmd(struct vhost_scsi_cmd *cmd)
2728     -{
2729     - struct vhost_scsi *vs = cmd->tvc_vhost;
2730     -
2731     - llist_add(&cmd->tvc_completion_list, &vs->vs_completion_list);
2732     -
2733     - vhost_work_queue(&vs->dev, &vs->vs_completion_work);
2734     -}
2735     -
2736     static int vhost_scsi_queue_data_in(struct se_cmd *se_cmd)
2737     {
2738     - struct vhost_scsi_cmd *cmd = container_of(se_cmd,
2739     - struct vhost_scsi_cmd, tvc_se_cmd);
2740     - vhost_scsi_complete_cmd(cmd);
2741     + transport_generic_free_cmd(se_cmd, 0);
2742     return 0;
2743     }
2744    
2745     static int vhost_scsi_queue_status(struct se_cmd *se_cmd)
2746     {
2747     - struct vhost_scsi_cmd *cmd = container_of(se_cmd,
2748     - struct vhost_scsi_cmd, tvc_se_cmd);
2749     - vhost_scsi_complete_cmd(cmd);
2750     + transport_generic_free_cmd(se_cmd, 0);
2751     return 0;
2752     }
2753    
2754     @@ -429,15 +426,6 @@ vhost_scsi_allocate_evt(struct vhost_scsi *vs,
2755     return evt;
2756     }
2757    
2758     -static void vhost_scsi_free_cmd(struct vhost_scsi_cmd *cmd)
2759     -{
2760     - struct se_cmd *se_cmd = &cmd->tvc_se_cmd;
2761     -
2762     - /* TODO locking against target/backend threads? */
2763     - transport_generic_free_cmd(se_cmd, 0);
2764     -
2765     -}
2766     -
2767     static int vhost_scsi_check_stop_free(struct se_cmd *se_cmd)
2768     {
2769     return target_put_sess_cmd(se_cmd);
2770     @@ -556,7 +544,7 @@ static void vhost_scsi_complete_cmd_work(struct vhost_work *work)
2771     } else
2772     pr_err("Faulted on virtio_scsi_cmd_resp\n");
2773    
2774     - vhost_scsi_free_cmd(cmd);
2775     + vhost_scsi_release_cmd_res(se_cmd);
2776     }
2777    
2778     vq = -1;
2779     @@ -1088,7 +1076,7 @@ vhost_scsi_handle_vq(struct vhost_scsi *vs, struct vhost_virtqueue *vq)
2780     &prot_iter, exp_data_len,
2781     &data_iter))) {
2782     vq_err(vq, "Failed to map iov to sgl\n");
2783     - vhost_scsi_release_cmd(&cmd->tvc_se_cmd);
2784     + vhost_scsi_release_cmd_res(&cmd->tvc_se_cmd);
2785     goto err;
2786     }
2787     }
2788     diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
2789     index 2dcb7c58b31e1..81671272aa58f 100644
2790     --- a/drivers/video/fbdev/hyperv_fb.c
2791     +++ b/drivers/video/fbdev/hyperv_fb.c
2792     @@ -703,7 +703,12 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
2793     goto err1;
2794     }
2795    
2796     - fb_virt = ioremap(par->mem->start, screen_fb_size);
2797     + /*
2798     + * Map the VRAM cacheable for performance. This is also required for
2799     + * VM Connect to display properly for ARM64 Linux VM, as the host also
2800     + * maps the VRAM cacheable.
2801     + */
2802     + fb_virt = ioremap_cache(par->mem->start, screen_fb_size);
2803     if (!fb_virt)
2804     goto err2;
2805    
2806     diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
2807     index 04fd02e6124dd..d9246fb8cea65 100644
2808     --- a/fs/btrfs/qgroup.c
2809     +++ b/fs/btrfs/qgroup.c
2810     @@ -488,13 +488,13 @@ next2:
2811     break;
2812     }
2813     out:
2814     + btrfs_free_path(path);
2815     fs_info->qgroup_flags |= flags;
2816     if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))
2817     clear_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags);
2818     else if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN &&
2819     ret >= 0)
2820     ret = qgroup_rescan_init(fs_info, rescan_progress, 0);
2821     - btrfs_free_path(path);
2822    
2823     if (ret < 0) {
2824     ulist_free(fs_info->qgroup_ulist);
2825     diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c
2826     index 48e46323d519c..9feb8a1793efb 100644
2827     --- a/fs/btrfs/tree-checker.c
2828     +++ b/fs/btrfs/tree-checker.c
2829     @@ -913,6 +913,7 @@ static int check_root_item(struct extent_buffer *leaf, struct btrfs_key *key,
2830     "invalid root item size, have %u expect %zu or %u",
2831     btrfs_item_size_nr(leaf, slot), sizeof(ri),
2832     btrfs_legacy_root_item_size());
2833     + return -EUCLEAN;
2834     }
2835    
2836     /*
2837     @@ -1268,6 +1269,7 @@ static int check_extent_data_ref(struct extent_buffer *leaf,
2838     "invalid item size, have %u expect aligned to %zu for key type %u",
2839     btrfs_item_size_nr(leaf, slot),
2840     sizeof(*dref), key->type);
2841     + return -EUCLEAN;
2842     }
2843     if (!IS_ALIGNED(key->objectid, leaf->fs_info->sectorsize)) {
2844     generic_err(leaf, slot,
2845     @@ -1296,6 +1298,7 @@ static int check_extent_data_ref(struct extent_buffer *leaf,
2846     extent_err(leaf, slot,
2847     "invalid extent data backref offset, have %llu expect aligned to %u",
2848     offset, leaf->fs_info->sectorsize);
2849     + return -EUCLEAN;
2850     }
2851     }
2852     return 0;
2853     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
2854     index 808c5985904ed..457f8f858a3f0 100644
2855     --- a/fs/btrfs/volumes.c
2856     +++ b/fs/btrfs/volumes.c
2857     @@ -1122,7 +1122,13 @@ static noinline struct btrfs_device *device_list_add(const char *path,
2858     if (device->bdev != path_bdev) {
2859     bdput(path_bdev);
2860     mutex_unlock(&fs_devices->device_list_mutex);
2861     - btrfs_warn_in_rcu(device->fs_info,
2862     + /*
2863     + * device->fs_info may not be reliable here, so
2864     + * pass in a NULL instead. This avoids a
2865     + * possible use-after-free when the fs_info and
2866     + * fs_info->sb are already torn down.
2867     + */
2868     + btrfs_warn_in_rcu(NULL,
2869     "duplicate device %s devid %llu generation %llu scanned by %s (%d)",
2870     path, devid, found_transid,
2871     current->comm,
2872     diff --git a/fs/cifs/cifsacl.c b/fs/cifs/cifsacl.c
2873     index 1619af216677c..1f55072aa3023 100644
2874     --- a/fs/cifs/cifsacl.c
2875     +++ b/fs/cifs/cifsacl.c
2876     @@ -1198,6 +1198,7 @@ cifs_acl_to_fattr(struct cifs_sb_info *cifs_sb, struct cifs_fattr *fattr,
2877     cifs_dbg(VFS, "%s: error %d getting sec desc\n", __func__, rc);
2878     } else if (mode_from_special_sid) {
2879     rc = parse_sec_desc(cifs_sb, pntsd, acllen, fattr, true);
2880     + kfree(pntsd);
2881     } else {
2882     /* get approximated mode from ACL */
2883     rc = parse_sec_desc(cifs_sb, pntsd, acllen, fattr, false);
2884     diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
2885     index 776029a57e717..6211f8b731a97 100644
2886     --- a/fs/cifs/smb2ops.c
2887     +++ b/fs/cifs/smb2ops.c
2888     @@ -259,7 +259,7 @@ smb2_revert_current_mid(struct TCP_Server_Info *server, const unsigned int val)
2889     }
2890    
2891     static struct mid_q_entry *
2892     -smb2_find_mid(struct TCP_Server_Info *server, char *buf)
2893     +__smb2_find_mid(struct TCP_Server_Info *server, char *buf, bool dequeue)
2894     {
2895     struct mid_q_entry *mid;
2896     struct smb2_sync_hdr *shdr = (struct smb2_sync_hdr *)buf;
2897     @@ -276,6 +276,10 @@ smb2_find_mid(struct TCP_Server_Info *server, char *buf)
2898     (mid->mid_state == MID_REQUEST_SUBMITTED) &&
2899     (mid->command == shdr->Command)) {
2900     kref_get(&mid->refcount);
2901     + if (dequeue) {
2902     + list_del_init(&mid->qhead);
2903     + mid->mid_flags |= MID_DELETED;
2904     + }
2905     spin_unlock(&GlobalMid_Lock);
2906     return mid;
2907     }
2908     @@ -284,6 +288,18 @@ smb2_find_mid(struct TCP_Server_Info *server, char *buf)
2909     return NULL;
2910     }
2911    
2912     +static struct mid_q_entry *
2913     +smb2_find_mid(struct TCP_Server_Info *server, char *buf)
2914     +{
2915     + return __smb2_find_mid(server, buf, false);
2916     +}
2917     +
2918     +static struct mid_q_entry *
2919     +smb2_find_dequeue_mid(struct TCP_Server_Info *server, char *buf)
2920     +{
2921     + return __smb2_find_mid(server, buf, true);
2922     +}
2923     +
2924     static void
2925     smb2_dump_detail(void *buf, struct TCP_Server_Info *server)
2926     {
2927     @@ -3979,7 +3995,8 @@ init_read_bvec(struct page **pages, unsigned int npages, unsigned int data_size,
2928     static int
2929     handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
2930     char *buf, unsigned int buf_len, struct page **pages,
2931     - unsigned int npages, unsigned int page_data_size)
2932     + unsigned int npages, unsigned int page_data_size,
2933     + bool is_offloaded)
2934     {
2935     unsigned int data_offset;
2936     unsigned int data_len;
2937     @@ -4001,7 +4018,8 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
2938    
2939     if (server->ops->is_session_expired &&
2940     server->ops->is_session_expired(buf)) {
2941     - cifs_reconnect(server);
2942     + if (!is_offloaded)
2943     + cifs_reconnect(server);
2944     wake_up(&server->response_q);
2945     return -1;
2946     }
2947     @@ -4026,7 +4044,10 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
2948     cifs_dbg(FYI, "%s: server returned error %d\n",
2949     __func__, rdata->result);
2950     /* normal error on read response */
2951     - dequeue_mid(mid, false);
2952     + if (is_offloaded)
2953     + mid->mid_state = MID_RESPONSE_RECEIVED;
2954     + else
2955     + dequeue_mid(mid, false);
2956     return 0;
2957     }
2958    
2959     @@ -4050,7 +4071,10 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
2960     cifs_dbg(FYI, "%s: data offset (%u) beyond end of smallbuf\n",
2961     __func__, data_offset);
2962     rdata->result = -EIO;
2963     - dequeue_mid(mid, rdata->result);
2964     + if (is_offloaded)
2965     + mid->mid_state = MID_RESPONSE_MALFORMED;
2966     + else
2967     + dequeue_mid(mid, rdata->result);
2968     return 0;
2969     }
2970    
2971     @@ -4066,21 +4090,30 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
2972     cifs_dbg(FYI, "%s: data offset (%u) beyond 1st page of response\n",
2973     __func__, data_offset);
2974     rdata->result = -EIO;
2975     - dequeue_mid(mid, rdata->result);
2976     + if (is_offloaded)
2977     + mid->mid_state = MID_RESPONSE_MALFORMED;
2978     + else
2979     + dequeue_mid(mid, rdata->result);
2980     return 0;
2981     }
2982    
2983     if (data_len > page_data_size - pad_len) {
2984     /* data_len is corrupt -- discard frame */
2985     rdata->result = -EIO;
2986     - dequeue_mid(mid, rdata->result);
2987     + if (is_offloaded)
2988     + mid->mid_state = MID_RESPONSE_MALFORMED;
2989     + else
2990     + dequeue_mid(mid, rdata->result);
2991     return 0;
2992     }
2993    
2994     rdata->result = init_read_bvec(pages, npages, page_data_size,
2995     cur_off, &bvec);
2996     if (rdata->result != 0) {
2997     - dequeue_mid(mid, rdata->result);
2998     + if (is_offloaded)
2999     + mid->mid_state = MID_RESPONSE_MALFORMED;
3000     + else
3001     + dequeue_mid(mid, rdata->result);
3002     return 0;
3003     }
3004    
3005     @@ -4095,7 +4128,10 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
3006     /* read response payload cannot be in both buf and pages */
3007     WARN_ONCE(1, "buf can not contain only a part of read data");
3008     rdata->result = -EIO;
3009     - dequeue_mid(mid, rdata->result);
3010     + if (is_offloaded)
3011     + mid->mid_state = MID_RESPONSE_MALFORMED;
3012     + else
3013     + dequeue_mid(mid, rdata->result);
3014     return 0;
3015     }
3016    
3017     @@ -4106,7 +4142,10 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
3018     if (length < 0)
3019     return length;
3020    
3021     - dequeue_mid(mid, false);
3022     + if (is_offloaded)
3023     + mid->mid_state = MID_RESPONSE_RECEIVED;
3024     + else
3025     + dequeue_mid(mid, false);
3026     return length;
3027     }
3028    
3029     @@ -4135,15 +4174,34 @@ static void smb2_decrypt_offload(struct work_struct *work)
3030     }
3031    
3032     dw->server->lstrp = jiffies;
3033     - mid = smb2_find_mid(dw->server, dw->buf);
3034     + mid = smb2_find_dequeue_mid(dw->server, dw->buf);
3035     if (mid == NULL)
3036     cifs_dbg(FYI, "mid not found\n");
3037     else {
3038     mid->decrypted = true;
3039     rc = handle_read_data(dw->server, mid, dw->buf,
3040     dw->server->vals->read_rsp_size,
3041     - dw->ppages, dw->npages, dw->len);
3042     - mid->callback(mid);
3043     + dw->ppages, dw->npages, dw->len,
3044     + true);
3045     + if (rc >= 0) {
3046     +#ifdef CONFIG_CIFS_STATS2
3047     + mid->when_received = jiffies;
3048     +#endif
3049     + mid->callback(mid);
3050     + } else {
3051     + spin_lock(&GlobalMid_Lock);
3052     + if (dw->server->tcpStatus == CifsNeedReconnect) {
3053     + mid->mid_state = MID_RETRY_NEEDED;
3054     + spin_unlock(&GlobalMid_Lock);
3055     + mid->callback(mid);
3056     + } else {
3057     + mid->mid_state = MID_REQUEST_SUBMITTED;
3058     + mid->mid_flags &= ~(MID_DELETED);
3059     + list_add_tail(&mid->qhead,
3060     + &dw->server->pending_mid_q);
3061     + spin_unlock(&GlobalMid_Lock);
3062     + }
3063     + }
3064     cifs_mid_q_entry_release(mid);
3065     }
3066    
3067     @@ -4246,7 +4304,7 @@ non_offloaded_decrypt:
3068     (*mid)->decrypted = true;
3069     rc = handle_read_data(server, *mid, buf,
3070     server->vals->read_rsp_size,
3071     - pages, npages, len);
3072     + pages, npages, len, false);
3073     }
3074    
3075     free_pages:
3076     @@ -4391,7 +4449,7 @@ smb3_handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid)
3077     char *buf = server->large_buf ? server->bigbuf : server->smallbuf;
3078    
3079     return handle_read_data(server, mid, buf, server->pdu_size,
3080     - NULL, 0, 0);
3081     + NULL, 0, 0, false);
3082     }
3083    
3084     static int
3085     diff --git a/fs/efivarfs/inode.c b/fs/efivarfs/inode.c
3086     index 96c0c86f3fffe..0297ad95eb5cc 100644
3087     --- a/fs/efivarfs/inode.c
3088     +++ b/fs/efivarfs/inode.c
3089     @@ -7,6 +7,7 @@
3090     #include <linux/efi.h>
3091     #include <linux/fs.h>
3092     #include <linux/ctype.h>
3093     +#include <linux/kmemleak.h>
3094     #include <linux/slab.h>
3095     #include <linux/uuid.h>
3096    
3097     @@ -103,6 +104,7 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
3098     var->var.VariableName[i] = '\0';
3099    
3100     inode->i_private = var;
3101     + kmemleak_ignore(var);
3102    
3103     err = efivar_entry_add(var, &efivarfs_list);
3104     if (err)
3105     diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
3106     index edcd6769a94b4..9760a52800b42 100644
3107     --- a/fs/efivarfs/super.c
3108     +++ b/fs/efivarfs/super.c
3109     @@ -21,7 +21,6 @@ LIST_HEAD(efivarfs_list);
3110     static void efivarfs_evict_inode(struct inode *inode)
3111     {
3112     clear_inode(inode);
3113     - kfree(inode->i_private);
3114     }
3115    
3116     static const struct super_operations efivarfs_ops = {
3117     diff --git a/fs/proc/self.c b/fs/proc/self.c
3118     index 32af065397f80..582336862d258 100644
3119     --- a/fs/proc/self.c
3120     +++ b/fs/proc/self.c
3121     @@ -16,6 +16,13 @@ static const char *proc_self_get_link(struct dentry *dentry,
3122     pid_t tgid = task_tgid_nr_ns(current, ns);
3123     char *name;
3124    
3125     + /*
3126     + * Not currently supported. Once we can inherit all of struct pid,
3127     + * we can allow this.
3128     + */
3129     + if (current->flags & PF_KTHREAD)
3130     + return ERR_PTR(-EOPNOTSUPP);
3131     +
3132     if (!tgid)
3133     return ERR_PTR(-ENOENT);
3134     /* max length of unsigned int in decimal + NULL term */
3135     diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
3136     index ea39a0b54c637..15f77361eb130 100644
3137     --- a/include/asm-generic/pgtable.h
3138     +++ b/include/asm-generic/pgtable.h
3139     @@ -1159,6 +1159,19 @@ static inline bool arch_has_pfn_modify_check(void)
3140    
3141     #endif /* !__ASSEMBLY__ */
3142    
3143     +#if !defined(MAX_POSSIBLE_PHYSMEM_BITS) && !defined(CONFIG_64BIT)
3144     +#ifdef CONFIG_PHYS_ADDR_T_64BIT
3145     +/*
3146     + * ZSMALLOC needs to know the highest PFN on 32-bit architectures
3147     + * with physical address space extension, but falls back to
3148     + * BITS_PER_LONG otherwise.
3149     + */
3150     +#error Missing MAX_POSSIBLE_PHYSMEM_BITS definition
3151     +#else
3152     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
3153     +#endif
3154     +#endif
3155     +
3156     #ifndef has_transparent_hugepage
3157     #ifdef CONFIG_TRANSPARENT_HUGEPAGE
3158     #define has_transparent_hugepage() 1
3159     diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
3160     index 77ebb61faf486..4c0e6539effdd 100644
3161     --- a/include/linux/netfilter.h
3162     +++ b/include/linux/netfilter.h
3163     @@ -316,7 +316,7 @@ NF_HOOK_LIST(uint8_t pf, unsigned int hook, struct net *net, struct sock *sk,
3164    
3165     INIT_LIST_HEAD(&sublist);
3166     list_for_each_entry_safe(skb, next, head, list) {
3167     - list_del(&skb->list);
3168     + skb_list_del_init(skb);
3169     if (nf_hook(pf, hook, net, sk, skb, in, out, okfn) == 1)
3170     list_add_tail(&skb->list, &sublist);
3171     }
3172     diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
3173     index c25fb86ffae95..b3bbd10eb3f07 100644
3174     --- a/include/scsi/libiscsi.h
3175     +++ b/include/scsi/libiscsi.h
3176     @@ -132,6 +132,9 @@ struct iscsi_task {
3177     void *dd_data; /* driver/transport data */
3178     };
3179    
3180     +/* invalid scsi_task pointer */
3181     +#define INVALID_SCSI_TASK (struct iscsi_task *)-1l
3182     +
3183     static inline int iscsi_task_has_unsol_data(struct iscsi_task *task)
3184     {
3185     return task->unsol_r2t.data_length > task->unsol_r2t.sent;
3186     diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h
3187     index 67434278b81dd..a8af22e469ce5 100644
3188     --- a/include/trace/events/writeback.h
3189     +++ b/include/trace/events/writeback.h
3190     @@ -192,7 +192,7 @@ TRACE_EVENT(inode_foreign_history,
3191     ),
3192    
3193     TP_fast_assign(
3194     - strncpy(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32);
3195     + strscpy_pad(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32);
3196     __entry->ino = inode->i_ino;
3197     __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
3198     __entry->history = history;
3199     @@ -221,7 +221,7 @@ TRACE_EVENT(inode_switch_wbs,
3200     ),
3201    
3202     TP_fast_assign(
3203     - strncpy(__entry->name, bdi_dev_name(old_wb->bdi), 32);
3204     + strscpy_pad(__entry->name, bdi_dev_name(old_wb->bdi), 32);
3205     __entry->ino = inode->i_ino;
3206     __entry->old_cgroup_ino = __trace_wb_assign_cgroup(old_wb);
3207     __entry->new_cgroup_ino = __trace_wb_assign_cgroup(new_wb);
3208     @@ -254,7 +254,7 @@ TRACE_EVENT(track_foreign_dirty,
3209     struct address_space *mapping = page_mapping(page);
3210     struct inode *inode = mapping ? mapping->host : NULL;
3211    
3212     - strncpy(__entry->name, bdi_dev_name(wb->bdi), 32);
3213     + strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
3214     __entry->bdi_id = wb->bdi->id;
3215     __entry->ino = inode ? inode->i_ino : 0;
3216     __entry->memcg_id = wb->memcg_css->id;
3217     @@ -287,7 +287,7 @@ TRACE_EVENT(flush_foreign,
3218     ),
3219    
3220     TP_fast_assign(
3221     - strncpy(__entry->name, bdi_dev_name(wb->bdi), 32);
3222     + strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
3223     __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
3224     __entry->frn_bdi_id = frn_bdi_id;
3225     __entry->frn_memcg_id = frn_memcg_id;
3226     diff --git a/include/uapi/linux/wireless.h b/include/uapi/linux/wireless.h
3227     index a2c006a364e0b..24f3371ad8262 100644
3228     --- a/include/uapi/linux/wireless.h
3229     +++ b/include/uapi/linux/wireless.h
3230     @@ -74,7 +74,11 @@
3231     #include <linux/socket.h> /* for "struct sockaddr" et al */
3232     #include <linux/if.h> /* for IFNAMSIZ and co... */
3233    
3234     -#include <stddef.h> /* for offsetof */
3235     +#ifdef __KERNEL__
3236     +# include <linux/stddef.h> /* for offsetof */
3237     +#else
3238     +# include <stddef.h> /* for offsetof */
3239     +#endif
3240    
3241     /***************************** VERSION *****************************/
3242     /*
3243     diff --git a/include/uapi/sound/skl-tplg-interface.h b/include/uapi/sound/skl-tplg-interface.h
3244     index 9eee32f5e4077..a93c0decfdd53 100644
3245     --- a/include/uapi/sound/skl-tplg-interface.h
3246     +++ b/include/uapi/sound/skl-tplg-interface.h
3247     @@ -18,6 +18,8 @@
3248     */
3249     #define SKL_CONTROL_TYPE_BYTE_TLV 0x100
3250     #define SKL_CONTROL_TYPE_MIC_SELECT 0x102
3251     +#define SKL_CONTROL_TYPE_MULTI_IO_SELECT 0x103
3252     +#define SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC 0x104
3253    
3254     #define HDA_SST_CFG_MAX 900 /* size of copier cfg*/
3255     #define MAX_IN_QUEUE 8
3256     diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c
3257     index 11941cf1adcc9..87f3de3d4e4ca 100644
3258     --- a/net/batman-adv/log.c
3259     +++ b/net/batman-adv/log.c
3260     @@ -180,6 +180,7 @@ static const struct file_operations batadv_log_fops = {
3261     .read = batadv_log_read,
3262     .poll = batadv_log_poll,
3263     .llseek = no_llseek,
3264     + .owner = THIS_MODULE,
3265     };
3266    
3267     /**
3268     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
3269     index 0a8220d30c992..ed2ab03cf971c 100644
3270     --- a/net/ipv4/fib_frontend.c
3271     +++ b/net/ipv4/fib_frontend.c
3272     @@ -706,7 +706,7 @@ int fib_gw_from_via(struct fib_config *cfg, struct nlattr *nla,
3273     cfg->fc_gw4 = *((__be32 *)via->rtvia_addr);
3274     break;
3275     case AF_INET6:
3276     -#ifdef CONFIG_IPV6
3277     +#if IS_ENABLED(CONFIG_IPV6)
3278     if (alen != sizeof(struct in6_addr)) {
3279     NL_SET_ERR_MSG(extack, "Invalid IPv6 address in RTA_VIA");
3280     return -EINVAL;
3281     diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c
3282     index 92a82e6b5fe62..38b9d74940835 100644
3283     --- a/sound/soc/intel/skylake/bxt-sst.c
3284     +++ b/sound/soc/intel/skylake/bxt-sst.c
3285     @@ -17,7 +17,6 @@
3286     #include "skl.h"
3287    
3288     #define BXT_BASEFW_TIMEOUT 3000
3289     -#define BXT_INIT_TIMEOUT 300
3290     #define BXT_ROM_INIT_TIMEOUT 70
3291     #define BXT_IPC_PURGE_FW 0x01004000
3292    
3293     @@ -38,8 +37,6 @@
3294     /* Delay before scheduling D0i3 entry */
3295     #define BXT_D0I3_DELAY 5000
3296    
3297     -#define BXT_FW_ROM_INIT_RETRY 3
3298     -
3299     static unsigned int bxt_get_errorcode(struct sst_dsp *ctx)
3300     {
3301     return sst_dsp_shim_read(ctx, BXT_ADSP_ERROR_CODE);
3302     diff --git a/sound/soc/intel/skylake/cnl-sst.c b/sound/soc/intel/skylake/cnl-sst.c
3303     index 4f64f097e9ae3..c6abcd5aa67b9 100644
3304     --- a/sound/soc/intel/skylake/cnl-sst.c
3305     +++ b/sound/soc/intel/skylake/cnl-sst.c
3306     @@ -57,18 +57,34 @@ static int cnl_prepare_fw(struct sst_dsp *ctx, const void *fwdata, u32 fwsize)
3307     ctx->dsp_ops.stream_tag = stream_tag;
3308     memcpy(ctx->dmab.area, fwdata, fwsize);
3309    
3310     + ret = skl_dsp_core_power_up(ctx, SKL_DSP_CORE0_MASK);
3311     + if (ret < 0) {
3312     + dev_err(ctx->dev, "dsp core0 power up failed\n");
3313     + ret = -EIO;
3314     + goto base_fw_load_failed;
3315     + }
3316     +
3317     /* purge FW request */
3318     sst_dsp_shim_write(ctx, CNL_ADSP_REG_HIPCIDR,
3319     CNL_ADSP_REG_HIPCIDR_BUSY | (CNL_IPC_PURGE |
3320     ((stream_tag - 1) << CNL_ROM_CTRL_DMA_ID)));
3321    
3322     - ret = cnl_dsp_enable_core(ctx, SKL_DSP_CORE0_MASK);
3323     + ret = skl_dsp_start_core(ctx, SKL_DSP_CORE0_MASK);
3324     if (ret < 0) {
3325     - dev_err(ctx->dev, "dsp boot core failed ret: %d\n", ret);
3326     + dev_err(ctx->dev, "Start dsp core failed ret: %d\n", ret);
3327     ret = -EIO;
3328     goto base_fw_load_failed;
3329     }
3330    
3331     + ret = sst_dsp_register_poll(ctx, CNL_ADSP_REG_HIPCIDA,
3332     + CNL_ADSP_REG_HIPCIDA_DONE,
3333     + CNL_ADSP_REG_HIPCIDA_DONE,
3334     + BXT_INIT_TIMEOUT, "HIPCIDA Done");
3335     + if (ret < 0) {
3336     + dev_err(ctx->dev, "timeout for purge request: %d\n", ret);
3337     + goto base_fw_load_failed;
3338     + }
3339     +
3340     /* enable interrupt */
3341     cnl_ipc_int_enable(ctx);
3342     cnl_ipc_op_int_enable(ctx);
3343     @@ -109,7 +125,7 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx)
3344     {
3345     struct firmware stripped_fw;
3346     struct skl_dev *cnl = ctx->thread_context;
3347     - int ret;
3348     + int ret, i;
3349    
3350     if (!ctx->fw) {
3351     ret = request_firmware(&ctx->fw, ctx->fw_name, ctx->dev);
3352     @@ -131,12 +147,16 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx)
3353     stripped_fw.size = ctx->fw->size;
3354     skl_dsp_strip_extended_manifest(&stripped_fw);
3355    
3356     - ret = cnl_prepare_fw(ctx, stripped_fw.data, stripped_fw.size);
3357     - if (ret < 0) {
3358     - dev_err(ctx->dev, "prepare firmware failed: %d\n", ret);
3359     - goto cnl_load_base_firmware_failed;
3360     + for (i = 0; i < BXT_FW_ROM_INIT_RETRY; i++) {
3361     + ret = cnl_prepare_fw(ctx, stripped_fw.data, stripped_fw.size);
3362     + if (!ret)
3363     + break;
3364     + dev_dbg(ctx->dev, "prepare firmware failed: %d\n", ret);
3365     }
3366    
3367     + if (ret < 0)
3368     + goto cnl_load_base_firmware_failed;
3369     +
3370     ret = sst_transfer_fw_host_dma(ctx);
3371     if (ret < 0) {
3372     dev_err(ctx->dev, "transfer firmware failed: %d\n", ret);
3373     @@ -158,6 +178,7 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx)
3374     return 0;
3375    
3376     cnl_load_base_firmware_failed:
3377     + dev_err(ctx->dev, "firmware load failed: %d\n", ret);
3378     release_firmware(ctx->fw);
3379     ctx->fw = NULL;
3380    
3381     diff --git a/sound/soc/intel/skylake/skl-nhlt.c b/sound/soc/intel/skylake/skl-nhlt.c
3382     index 19f328d71f244..d9c8f5cb389e3 100644
3383     --- a/sound/soc/intel/skylake/skl-nhlt.c
3384     +++ b/sound/soc/intel/skylake/skl-nhlt.c
3385     @@ -182,7 +182,8 @@ void skl_nhlt_remove_sysfs(struct skl_dev *skl)
3386     {
3387     struct device *dev = &skl->pci->dev;
3388    
3389     - sysfs_remove_file(&dev->kobj, &dev_attr_platform_id.attr);
3390     + if (skl->nhlt)
3391     + sysfs_remove_file(&dev->kobj, &dev_attr_platform_id.attr);
3392     }
3393    
3394     /*
3395     diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h
3396     index cdfec0fca5773..1df9ef422f61d 100644
3397     --- a/sound/soc/intel/skylake/skl-sst-dsp.h
3398     +++ b/sound/soc/intel/skylake/skl-sst-dsp.h
3399     @@ -67,6 +67,8 @@ struct skl_dev;
3400    
3401     #define SKL_FW_INIT 0x1
3402     #define SKL_FW_RFW_START 0xf
3403     +#define BXT_FW_ROM_INIT_RETRY 3
3404     +#define BXT_INIT_TIMEOUT 300
3405    
3406     #define SKL_ADSPIC_IPC 1
3407     #define SKL_ADSPIS_IPC 1
3408     diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
3409     index 4b114ece58c61..aa5833001fde5 100644
3410     --- a/sound/soc/intel/skylake/skl-topology.c
3411     +++ b/sound/soc/intel/skylake/skl-topology.c
3412     @@ -579,6 +579,38 @@ static int skl_tplg_unload_pipe_modules(struct skl_dev *skl,
3413     return ret;
3414     }
3415    
3416     +static bool skl_tplg_is_multi_fmt(struct skl_dev *skl, struct skl_pipe *pipe)
3417     +{
3418     + struct skl_pipe_fmt *cur_fmt;
3419     + struct skl_pipe_fmt *next_fmt;
3420     + int i;
3421     +
3422     + if (pipe->nr_cfgs <= 1)
3423     + return false;
3424     +
3425     + if (pipe->conn_type != SKL_PIPE_CONN_TYPE_FE)
3426     + return true;
3427     +
3428     + for (i = 0; i < pipe->nr_cfgs - 1; i++) {
3429     + if (pipe->direction == SNDRV_PCM_STREAM_PLAYBACK) {
3430     + cur_fmt = &pipe->configs[i].out_fmt;
3431     + next_fmt = &pipe->configs[i + 1].out_fmt;
3432     + } else {
3433     + cur_fmt = &pipe->configs[i].in_fmt;
3434     + next_fmt = &pipe->configs[i + 1].in_fmt;
3435     + }
3436     +
3437     + if (!CHECK_HW_PARAMS(cur_fmt->channels, cur_fmt->freq,
3438     + cur_fmt->bps,
3439     + next_fmt->channels,
3440     + next_fmt->freq,
3441     + next_fmt->bps))
3442     + return true;
3443     + }
3444     +
3445     + return false;
3446     +}
3447     +
3448     /*
3449     * Here, we select pipe format based on the pipe type and pipe
3450     * direction to determine the current config index for the pipeline.
3451     @@ -601,6 +633,14 @@ skl_tplg_get_pipe_config(struct skl_dev *skl, struct skl_module_cfg *mconfig)
3452     return 0;
3453     }
3454    
3455     + if (skl_tplg_is_multi_fmt(skl, pipe)) {
3456     + pipe->cur_config_idx = pipe->pipe_config_idx;
3457     + pipe->memory_pages = pconfig->mem_pages;
3458     + dev_dbg(skl->dev, "found pipe config idx:%d\n",
3459     + pipe->cur_config_idx);
3460     + return 0;
3461     + }
3462     +
3463     if (pipe->conn_type == SKL_PIPE_CONN_TYPE_NONE) {
3464     dev_dbg(skl->dev, "No conn_type detected, take 0th config\n");
3465     pipe->cur_config_idx = 0;
3466     @@ -1315,6 +1355,68 @@ static int skl_tplg_pga_event(struct snd_soc_dapm_widget *w,
3467     return 0;
3468     }
3469    
3470     +static int skl_tplg_multi_config_set_get(struct snd_kcontrol *kcontrol,
3471     + struct snd_ctl_elem_value *ucontrol,
3472     + bool is_set)
3473     +{
3474     + struct snd_soc_component *component =
3475     + snd_soc_kcontrol_component(kcontrol);
3476     + struct hdac_bus *bus = snd_soc_component_get_drvdata(component);
3477     + struct skl_dev *skl = bus_to_skl(bus);
3478     + struct skl_pipeline *ppl;
3479     + struct skl_pipe *pipe = NULL;
3480     + struct soc_enum *ec = (struct soc_enum *)kcontrol->private_value;
3481     + u32 *pipe_id;
3482     +
3483     + if (!ec)
3484     + return -EINVAL;
3485     +
3486     + if (is_set && ucontrol->value.enumerated.item[0] > ec->items)
3487     + return -EINVAL;
3488     +
3489     + pipe_id = ec->dobj.private;
3490     +
3491     + list_for_each_entry(ppl, &skl->ppl_list, node) {
3492     + if (ppl->pipe->ppl_id == *pipe_id) {
3493     + pipe = ppl->pipe;
3494     + break;
3495     + }
3496     + }
3497     + if (!pipe)
3498     + return -EIO;
3499     +
3500     + if (is_set)
3501     + pipe->pipe_config_idx = ucontrol->value.enumerated.item[0];
3502     + else
3503     + ucontrol->value.enumerated.item[0] = pipe->pipe_config_idx;
3504     +
3505     + return 0;
3506     +}
3507     +
3508     +static int skl_tplg_multi_config_get(struct snd_kcontrol *kcontrol,
3509     + struct snd_ctl_elem_value *ucontrol)
3510     +{
3511     + return skl_tplg_multi_config_set_get(kcontrol, ucontrol, false);
3512     +}
3513     +
3514     +static int skl_tplg_multi_config_set(struct snd_kcontrol *kcontrol,
3515     + struct snd_ctl_elem_value *ucontrol)
3516     +{
3517     + return skl_tplg_multi_config_set_get(kcontrol, ucontrol, true);
3518     +}
3519     +
3520     +static int skl_tplg_multi_config_get_dmic(struct snd_kcontrol *kcontrol,
3521     + struct snd_ctl_elem_value *ucontrol)
3522     +{
3523     + return skl_tplg_multi_config_set_get(kcontrol, ucontrol, false);
3524     +}
3525     +
3526     +static int skl_tplg_multi_config_set_dmic(struct snd_kcontrol *kcontrol,
3527     + struct snd_ctl_elem_value *ucontrol)
3528     +{
3529     + return skl_tplg_multi_config_set_get(kcontrol, ucontrol, true);
3530     +}
3531     +
3532     static int skl_tplg_tlv_control_get(struct snd_kcontrol *kcontrol,
3533     unsigned int __user *data, unsigned int size)
3534     {
3535     @@ -1854,6 +1956,16 @@ static const struct snd_soc_tplg_kcontrol_ops skl_tplg_kcontrol_ops[] = {
3536     .get = skl_tplg_mic_control_get,
3537     .put = skl_tplg_mic_control_set,
3538     },
3539     + {
3540     + .id = SKL_CONTROL_TYPE_MULTI_IO_SELECT,
3541     + .get = skl_tplg_multi_config_get,
3542     + .put = skl_tplg_multi_config_set,
3543     + },
3544     + {
3545     + .id = SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC,
3546     + .get = skl_tplg_multi_config_get_dmic,
3547     + .put = skl_tplg_multi_config_set_dmic,
3548     + }
3549     };
3550    
3551     static int skl_tplg_fill_pipe_cfg(struct device *dev,
3552     @@ -3014,12 +3126,21 @@ static int skl_tplg_control_load(struct snd_soc_component *cmpnt,
3553     case SND_SOC_TPLG_CTL_ENUM:
3554     tplg_ec = container_of(hdr,
3555     struct snd_soc_tplg_enum_control, hdr);
3556     - if (kctl->access & SNDRV_CTL_ELEM_ACCESS_READWRITE) {
3557     + if (kctl->access & SNDRV_CTL_ELEM_ACCESS_READ) {
3558     se = (struct soc_enum *)kctl->private_value;
3559     if (tplg_ec->priv.size)
3560     - return skl_init_enum_data(bus->dev, se,
3561     - tplg_ec);
3562     + skl_init_enum_data(bus->dev, se, tplg_ec);
3563     }
3564     +
3565     + /*
3566     + * now that the control initializations are done, remove
3567     + * write permission for the DMIC configuration enums to
3568     + * avoid conflicts between NHLT settings and user interaction
3569     + */
3570     +
3571     + if (hdr->ops.get == SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC)
3572     + kctl->access = SNDRV_CTL_ELEM_ACCESS_READ;
3573     +
3574     break;
3575    
3576     default:
3577     @@ -3489,6 +3610,37 @@ static int skl_manifest_load(struct snd_soc_component *cmpnt, int index,
3578     return 0;
3579     }
3580    
3581     +static void skl_tplg_complete(struct snd_soc_component *component)
3582     +{
3583     + struct snd_soc_dobj *dobj;
3584     + struct snd_soc_acpi_mach *mach =
3585     + dev_get_platdata(component->card->dev);
3586     + int i;
3587     +
3588     + list_for_each_entry(dobj, &component->dobj_list, list) {
3589     + struct snd_kcontrol *kcontrol = dobj->control.kcontrol;
3590     + struct soc_enum *se =
3591     + (struct soc_enum *)kcontrol->private_value;
3592     + char **texts = dobj->control.dtexts;
3593     + char chan_text[4];
3594     +
3595     + if (dobj->type != SND_SOC_DOBJ_ENUM ||
3596     + dobj->control.kcontrol->put !=
3597     + skl_tplg_multi_config_set_dmic)
3598     + continue;
3599     + sprintf(chan_text, "c%d", mach->mach_params.dmic_num);
3600     +
3601     + for (i = 0; i < se->items; i++) {
3602     + struct snd_ctl_elem_value val;
3603     +
3604     + if (strstr(texts[i], chan_text)) {
3605     + val.value.enumerated.item[0] = i;
3606     + kcontrol->put(kcontrol, &val);
3607     + }
3608     + }
3609     + }
3610     +}
3611     +
3612     static struct snd_soc_tplg_ops skl_tplg_ops = {
3613     .widget_load = skl_tplg_widget_load,
3614     .control_load = skl_tplg_control_load,
3615     @@ -3498,6 +3650,7 @@ static struct snd_soc_tplg_ops skl_tplg_ops = {
3616     .io_ops_count = ARRAY_SIZE(skl_tplg_kcontrol_ops),
3617     .manifest = skl_manifest_load,
3618     .dai_load = skl_dai_load,
3619     + .complete = skl_tplg_complete,
3620     };
3621    
3622     /*
3623     diff --git a/sound/soc/intel/skylake/skl-topology.h b/sound/soc/intel/skylake/skl-topology.h
3624     index e967800dbb623..06576147cc290 100644
3625     --- a/sound/soc/intel/skylake/skl-topology.h
3626     +++ b/sound/soc/intel/skylake/skl-topology.h
3627     @@ -306,6 +306,7 @@ struct skl_pipe {
3628     struct skl_path_config configs[SKL_MAX_PATH_CONFIGS];
3629     struct list_head w_list;
3630     bool passthru;
3631     + u32 pipe_config_idx;
3632     };
3633    
3634     enum skl_module_state {
3635     diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c
3636     index 141dbbf975acd..2e5fbd2209235 100644
3637     --- a/sound/soc/intel/skylake/skl.c
3638     +++ b/sound/soc/intel/skylake/skl.c
3639     @@ -129,6 +129,7 @@ static int skl_init_chip(struct hdac_bus *bus, bool full_reset)
3640     struct hdac_ext_link *hlink;
3641     int ret;
3642    
3643     + snd_hdac_set_codec_wakeup(bus, true);
3644     skl_enable_miscbdcge(bus->dev, false);
3645     ret = snd_hdac_bus_init_chip(bus, full_reset);
3646    
3647     @@ -137,6 +138,7 @@ static int skl_init_chip(struct hdac_bus *bus, bool full_reset)
3648     writel(0, hlink->ml_addr + AZX_REG_ML_LOSIDV);
3649    
3650     skl_enable_miscbdcge(bus->dev, true);
3651     + snd_hdac_set_codec_wakeup(bus, false);
3652    
3653     return ret;
3654     }
3655     @@ -480,13 +482,8 @@ static struct skl_ssp_clk skl_ssp_clks[] = {
3656     static struct snd_soc_acpi_mach *skl_find_hda_machine(struct skl_dev *skl,
3657     struct snd_soc_acpi_mach *machines)
3658     {
3659     - struct hdac_bus *bus = skl_to_bus(skl);
3660     struct snd_soc_acpi_mach *mach;
3661    
3662     - /* check if we have any codecs detected on bus */
3663     - if (bus->codec_mask == 0)
3664     - return NULL;
3665     -
3666     /* point to common table */
3667     mach = snd_soc_acpi_intel_hda_machines;
3668    
3669     @@ -635,6 +632,9 @@ static int skl_clock_device_register(struct skl_dev *skl)
3670     struct platform_device_info pdevinfo = {NULL};
3671     struct skl_clk_pdata *clk_pdata;
3672    
3673     + if (!skl->nhlt)
3674     + return 0;
3675     +
3676     clk_pdata = devm_kzalloc(&skl->pci->dev, sizeof(*clk_pdata),
3677     GFP_KERNEL);
3678     if (!clk_pdata)
3679     @@ -807,6 +807,9 @@ static void skl_probe_work(struct work_struct *work)
3680     return;
3681     }
3682    
3683     + skl_init_pci(skl);
3684     + skl_dum_set(bus);
3685     +
3686     err = skl_init_chip(bus, true);
3687     if (err < 0) {
3688     dev_err(bus->dev, "Init chip failed with err: %d\n", err);
3689     @@ -922,8 +925,6 @@ static int skl_first_init(struct hdac_bus *bus)
3690     return -ENXIO;
3691     }
3692    
3693     - snd_hdac_bus_reset_link(bus, true);
3694     -
3695     snd_hdac_bus_parse_capabilities(bus);
3696    
3697     /* check if PPCAP exists */
3698     @@ -971,11 +972,7 @@ static int skl_first_init(struct hdac_bus *bus)
3699     if (err < 0)
3700     return err;
3701    
3702     - /* initialize chip */
3703     - skl_init_pci(skl);
3704     - skl_dum_set(bus);
3705     -
3706     - return skl_init_chip(bus, true);
3707     + return 0;
3708     }
3709    
3710     static int skl_probe(struct pci_dev *pci,
3711     @@ -1080,8 +1077,6 @@ static int skl_probe(struct pci_dev *pci,
3712     if (bus->mlcap)
3713     snd_hdac_ext_bus_get_ml_capabilities(bus);
3714    
3715     - snd_hdac_bus_stop_chip(bus);
3716     -
3717     /* create device for soc dmic */
3718     err = skl_dmic_device_register(skl);
3719     if (err < 0) {
3720     @@ -1098,7 +1093,8 @@ out_dsp_free:
3721     out_clk_free:
3722     skl_clock_device_unregister(skl);
3723     out_nhlt_free:
3724     - intel_nhlt_free(skl->nhlt);
3725     + if (skl->nhlt)
3726     + intel_nhlt_free(skl->nhlt);
3727     out_free:
3728     skl_free(bus);
3729    
3730     @@ -1147,7 +1143,8 @@ static void skl_remove(struct pci_dev *pci)
3731     skl_dmic_device_unregister(skl);
3732     skl_clock_device_unregister(skl);
3733     skl_nhlt_remove_sysfs(skl);
3734     - intel_nhlt_free(skl->nhlt);
3735     + if (skl->nhlt)
3736     + intel_nhlt_free(skl->nhlt);
3737     skl_free(bus);
3738     dev_set_drvdata(&pci->dev, NULL);
3739     }
3740     diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
3741     index 5544bfbd0f6c0..ab34ef2c661f8 100644
3742     --- a/tools/perf/util/dwarf-aux.c
3743     +++ b/tools/perf/util/dwarf-aux.c
3744     @@ -319,6 +319,7 @@ bool die_is_func_def(Dwarf_Die *dw_die)
3745     int die_entrypc(Dwarf_Die *dw_die, Dwarf_Addr *addr)
3746     {
3747     Dwarf_Addr base, end;
3748     + Dwarf_Attribute attr;
3749    
3750     if (!addr)
3751     return -EINVAL;
3752     @@ -326,6 +327,13 @@ int die_entrypc(Dwarf_Die *dw_die, Dwarf_Addr *addr)
3753     if (dwarf_entrypc(dw_die, addr) == 0)
3754     return 0;
3755    
3756     + /*
3757     + * Since the dwarf_ranges() will return 0 if there is no
3758     + * DW_AT_ranges attribute, we should check it first.
3759     + */
3760     + if (!dwarf_attr(dw_die, DW_AT_ranges, &attr))
3761     + return -ENOENT;
3762     +
3763     return dwarf_ranges(dw_die, 0, &base, addr, &end) < 0 ? -ENOENT : 0;
3764     }
3765    
3766     diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
3767     index 373e399e57d28..93147cc40162f 100644
3768     --- a/tools/perf/util/stat-display.c
3769     +++ b/tools/perf/util/stat-display.c
3770     @@ -316,13 +316,10 @@ static int first_shadow_cpu(struct perf_stat_config *config,
3771     struct evlist *evlist = evsel->evlist;
3772     int i;
3773    
3774     - if (!config->aggr_get_id)
3775     - return 0;
3776     -
3777     if (config->aggr_mode == AGGR_NONE)
3778     return id;
3779    
3780     - if (config->aggr_mode == AGGR_GLOBAL)
3781     + if (!config->aggr_get_id)
3782     return 0;
3783    
3784     for (i = 0; i < perf_evsel__nr_cpus(evsel); i++) {
3785     diff --git a/virt/kvm/arm/vgic/vgic-mmio-v3.c b/virt/kvm/arm/vgic/vgic-mmio-v3.c
3786     index 4c5909e38f78a..b1e639ea22e9a 100644
3787     --- a/virt/kvm/arm/vgic/vgic-mmio-v3.c
3788     +++ b/virt/kvm/arm/vgic/vgic-mmio-v3.c
3789     @@ -223,6 +223,23 @@ static unsigned long vgic_mmio_read_v3r_typer(struct kvm_vcpu *vcpu,
3790     return extract_bytes(value, addr & 7, len);
3791     }
3792    
3793     +static unsigned long vgic_uaccess_read_v3r_typer(struct kvm_vcpu *vcpu,
3794     + gpa_t addr, unsigned int len)
3795     +{
3796     + unsigned long mpidr = kvm_vcpu_get_mpidr_aff(vcpu);
3797     + int target_vcpu_id = vcpu->vcpu_id;
3798     + u64 value;
3799     +
3800     + value = (u64)(mpidr & GENMASK(23, 0)) << 32;
3801     + value |= ((target_vcpu_id & 0xffff) << 8);
3802     +
3803     + if (vgic_has_its(vcpu->kvm))
3804     + value |= GICR_TYPER_PLPIS;
3805     +
3806     + /* reporting of the Last bit is not supported for userspace */
3807     + return extract_bytes(value, addr & 7, len);
3808     +}
3809     +
3810     static unsigned long vgic_mmio_read_v3r_iidr(struct kvm_vcpu *vcpu,
3811     gpa_t addr, unsigned int len)
3812     {
3813     @@ -528,8 +545,9 @@ static const struct vgic_register_region vgic_v3_rd_registers[] = {
3814     REGISTER_DESC_WITH_LENGTH(GICR_IIDR,
3815     vgic_mmio_read_v3r_iidr, vgic_mmio_write_wi, 4,
3816     VGIC_ACCESS_32bit),
3817     - REGISTER_DESC_WITH_LENGTH(GICR_TYPER,
3818     - vgic_mmio_read_v3r_typer, vgic_mmio_write_wi, 8,
3819     + REGISTER_DESC_WITH_LENGTH_UACCESS(GICR_TYPER,
3820     + vgic_mmio_read_v3r_typer, vgic_mmio_write_wi,
3821     + vgic_uaccess_read_v3r_typer, vgic_mmio_uaccess_write_wi, 8,
3822     VGIC_ACCESS_64bit | VGIC_ACCESS_32bit),
3823     REGISTER_DESC_WITH_LENGTH(GICR_WAKER,
3824     vgic_mmio_read_raz, vgic_mmio_write_wi, 4,