Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0151-5.4.52-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3547 - (hide annotations) (download)
Fri Jul 24 06:59:28 2020 UTC (3 years, 9 months ago) by niro
File size: 178185 byte(s)
-linux-5.4.52
1 niro 3547 diff --git a/Makefile b/Makefile
2     index 6ac83669e073..435d27be54c9 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 = 51
10     +SUBLEVEL = 52
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     diff --git a/arch/arc/include/asm/elf.h b/arch/arc/include/asm/elf.h
15     index c77a0e3671ac..0284ace0e1ab 100644
16     --- a/arch/arc/include/asm/elf.h
17     +++ b/arch/arc/include/asm/elf.h
18     @@ -19,7 +19,7 @@
19     #define R_ARC_32_PCREL 0x31
20    
21     /*to set parameters in the core dumps */
22     -#define ELF_ARCH EM_ARCOMPACT
23     +#define ELF_ARCH EM_ARC_INUSE
24     #define ELF_CLASS ELFCLASS32
25    
26     #ifdef CONFIG_CPU_BIG_ENDIAN
27     diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S
28     index 72be01270e24..ea74a1eee5d9 100644
29     --- a/arch/arc/kernel/entry.S
30     +++ b/arch/arc/kernel/entry.S
31     @@ -153,7 +153,6 @@ END(EV_Extension)
32     tracesys:
33     ; save EFA in case tracer wants the PC of traced task
34     ; using ERET won't work since next-PC has already committed
35     - lr r12, [efa]
36     GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
37     st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
38    
39     @@ -196,15 +195,9 @@ tracesys_exit:
40     ; Breakpoint TRAP
41     ; ---------------------------------------------
42     trap_with_param:
43     -
44     - ; stop_pc info by gdb needs this info
45     - lr r0, [efa]
46     + mov r0, r12 ; EFA in case ptracer/gdb wants stop_pc
47     mov r1, sp
48    
49     - ; Now that we have read EFA, it is safe to do "fake" rtie
50     - ; and get out of CPU exception mode
51     - FAKE_RET_FROM_EXCPN
52     -
53     ; Save callee regs in case gdb wants to have a look
54     ; SP will grow up by size of CALLEE Reg-File
55     ; NOTE: clobbers r12
56     @@ -231,6 +224,10 @@ ENTRY(EV_Trap)
57    
58     EXCEPTION_PROLOGUE
59    
60     + lr r12, [efa]
61     +
62     + FAKE_RET_FROM_EXCPN
63     +
64     ;============ TRAP 1 :breakpoints
65     ; Check ECR for trap with arg (PROLOGUE ensures r10 has ECR)
66     bmsk.f 0, r10, 7
67     @@ -238,9 +235,6 @@ ENTRY(EV_Trap)
68    
69     ;============ TRAP (no param): syscall top level
70    
71     - ; First return from Exception to pure K mode (Exception/IRQs renabled)
72     - FAKE_RET_FROM_EXCPN
73     -
74     ; If syscall tracing ongoing, invoke pre-post-hooks
75     GET_CURR_THR_INFO_FLAGS r10
76     btst r10, TIF_SYSCALL_TRACE
77     diff --git a/arch/arm/boot/dts/motorola-cpcap-mapphone.dtsi b/arch/arm/boot/dts/motorola-cpcap-mapphone.dtsi
78     index 82f7ae030600..ab91c4ebb146 100644
79     --- a/arch/arm/boot/dts/motorola-cpcap-mapphone.dtsi
80     +++ b/arch/arm/boot/dts/motorola-cpcap-mapphone.dtsi
81     @@ -13,8 +13,10 @@
82     #interrupt-cells = <2>;
83     #address-cells = <1>;
84     #size-cells = <0>;
85     - spi-max-frequency = <3000000>;
86     + spi-max-frequency = <9600000>;
87     spi-cs-high;
88     + spi-cpol;
89     + spi-cpha;
90    
91     cpcap_adc: adc {
92     compatible = "motorola,mapphone-cpcap-adc";
93     diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c
94     index 1c0ecad3620e..baf3b47601af 100644
95     --- a/arch/arm/mach-imx/pm-imx6.c
96     +++ b/arch/arm/mach-imx/pm-imx6.c
97     @@ -493,14 +493,14 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
98     if (!ocram_pool) {
99     pr_warn("%s: ocram pool unavailable!\n", __func__);
100     ret = -ENODEV;
101     - goto put_node;
102     + goto put_device;
103     }
104    
105     ocram_base = gen_pool_alloc(ocram_pool, MX6Q_SUSPEND_OCRAM_SIZE);
106     if (!ocram_base) {
107     pr_warn("%s: unable to alloc ocram!\n", __func__);
108     ret = -ENOMEM;
109     - goto put_node;
110     + goto put_device;
111     }
112    
113     ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base);
114     @@ -523,7 +523,7 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
115     ret = imx6_pm_get_base(&pm_info->mmdc_base, socdata->mmdc_compat);
116     if (ret) {
117     pr_warn("%s: failed to get mmdc base %d!\n", __func__, ret);
118     - goto put_node;
119     + goto put_device;
120     }
121    
122     ret = imx6_pm_get_base(&pm_info->src_base, socdata->src_compat);
123     @@ -570,7 +570,7 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
124     &imx6_suspend,
125     MX6Q_SUSPEND_OCRAM_SIZE - sizeof(*pm_info));
126    
127     - goto put_node;
128     + goto put_device;
129    
130     pl310_cache_map_failed:
131     iounmap(pm_info->gpc_base.vbase);
132     @@ -580,6 +580,8 @@ iomuxc_map_failed:
133     iounmap(pm_info->src_base.vbase);
134     src_map_failed:
135     iounmap(pm_info->mmdc_base.vbase);
136     +put_device:
137     + put_device(&pdev->dev);
138     put_node:
139     of_node_put(node);
140    
141     diff --git a/arch/arm64/include/asm/arch_gicv3.h b/arch/arm64/include/asm/arch_gicv3.h
142     index 89e4c8b79349..ee9bdaa40532 100644
143     --- a/arch/arm64/include/asm/arch_gicv3.h
144     +++ b/arch/arm64/include/asm/arch_gicv3.h
145     @@ -109,7 +109,7 @@ static inline u32 gic_read_pmr(void)
146     return read_sysreg_s(SYS_ICC_PMR_EL1);
147     }
148    
149     -static inline void gic_write_pmr(u32 val)
150     +static __always_inline void gic_write_pmr(u32 val)
151     {
152     write_sysreg_s(val, SYS_ICC_PMR_EL1);
153     }
154     diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
155     index 9cde5d2e768f..10d3048dec7c 100644
156     --- a/arch/arm64/include/asm/cpufeature.h
157     +++ b/arch/arm64/include/asm/cpufeature.h
158     @@ -601,7 +601,7 @@ static inline bool system_supports_generic_auth(void)
159     cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH_IMP_DEF));
160     }
161    
162     -static inline bool system_uses_irq_prio_masking(void)
163     +static __always_inline bool system_uses_irq_prio_masking(void)
164     {
165     return IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI) &&
166     cpus_have_const_cap(ARM64_HAS_IRQ_PRIO_MASKING);
167     diff --git a/arch/arm64/include/asm/pgtable-prot.h b/arch/arm64/include/asm/pgtable-prot.h
168     index baf52baaa2a5..99b0a32e25c1 100644
169     --- a/arch/arm64/include/asm/pgtable-prot.h
170     +++ b/arch/arm64/include/asm/pgtable-prot.h
171     @@ -54,7 +54,7 @@
172     #define PAGE_HYP __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_HYP_XN)
173     #define PAGE_HYP_EXEC __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_RDONLY)
174     #define PAGE_HYP_RO __pgprot(_HYP_PAGE_DEFAULT | PTE_HYP | PTE_RDONLY | PTE_HYP_XN)
175     -#define PAGE_HYP_DEVICE __pgprot(PROT_DEVICE_nGnRE | PTE_HYP)
176     +#define PAGE_HYP_DEVICE __pgprot(_PROT_DEFAULT | PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_HYP | PTE_HYP_XN)
177    
178     #define PAGE_S2_MEMATTR(attr) \
179     ({ \
180     diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c
181     index 43119922341f..1a157ca33262 100644
182     --- a/arch/arm64/kernel/kgdb.c
183     +++ b/arch/arm64/kernel/kgdb.c
184     @@ -252,7 +252,7 @@ static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr)
185     if (!kgdb_single_step)
186     return DBG_HOOK_ERROR;
187    
188     - kgdb_handle_exception(1, SIGTRAP, 0, regs);
189     + kgdb_handle_exception(0, SIGTRAP, 0, regs);
190     return DBG_HOOK_HANDLED;
191     }
192     NOKPROBE_SYMBOL(kgdb_step_brk_fn);
193     diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
194     index 160be2b4696d..dc41b505507d 100644
195     --- a/arch/arm64/kvm/hyp-init.S
196     +++ b/arch/arm64/kvm/hyp-init.S
197     @@ -136,11 +136,15 @@ ENTRY(__kvm_handle_stub_hvc)
198    
199     1: cmp x0, #HVC_RESET_VECTORS
200     b.ne 1f
201     -reset:
202     +
203     /*
204     - * Reset kvm back to the hyp stub. Do not clobber x0-x4 in
205     - * case we coming via HVC_SOFT_RESTART.
206     + * Set the HVC_RESET_VECTORS return code before entering the common
207     + * path so that we do not clobber x0-x2 in case we are coming via
208     + * HVC_SOFT_RESTART.
209     */
210     + mov x0, xzr
211     +reset:
212     + /* Reset kvm back to the hyp stub. */
213     mrs x5, sctlr_el2
214     ldr x6, =SCTLR_ELx_FLAGS
215     bic x5, x5, x6 // Clear SCTL_M and etc
216     @@ -151,7 +155,6 @@ reset:
217     /* Install stub vectors */
218     adr_l x5, __hyp_stub_vectors
219     msr vbar_el2, x5
220     - mov x0, xzr
221     eret
222    
223     1: /* Bad stub call */
224     diff --git a/arch/arm64/kvm/reset.c b/arch/arm64/kvm/reset.c
225     index f4a8ae918827..784d485218ca 100644
226     --- a/arch/arm64/kvm/reset.c
227     +++ b/arch/arm64/kvm/reset.c
228     @@ -258,7 +258,7 @@ static int kvm_vcpu_enable_ptrauth(struct kvm_vcpu *vcpu)
229     int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
230     {
231     const struct kvm_regs *cpu_reset;
232     - int ret = -EINVAL;
233     + int ret;
234     bool loaded;
235    
236     /* Reset PMU outside of the non-preemptible section */
237     @@ -281,15 +281,19 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
238    
239     if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) ||
240     test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) {
241     - if (kvm_vcpu_enable_ptrauth(vcpu))
242     + if (kvm_vcpu_enable_ptrauth(vcpu)) {
243     + ret = -EINVAL;
244     goto out;
245     + }
246     }
247    
248     switch (vcpu->arch.target) {
249     default:
250     if (test_bit(KVM_ARM_VCPU_EL1_32BIT, vcpu->arch.features)) {
251     - if (!cpu_has_32bit_el1())
252     + if (!cpu_has_32bit_el1()) {
253     + ret = -EINVAL;
254     goto out;
255     + }
256     cpu_reset = &default_regs_reset32;
257     } else {
258     cpu_reset = &default_regs_reset;
259     diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
260     index 43b56f8f6beb..da8375437d16 100644
261     --- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
262     +++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
263     @@ -38,7 +38,8 @@ unsigned long __kvmhv_copy_tofrom_guest_radix(int lpid, int pid,
264     /* Can't access quadrants 1 or 2 in non-HV mode, call the HV to do it */
265     if (kvmhv_on_pseries())
266     return plpar_hcall_norets(H_COPY_TOFROM_GUEST, lpid, pid, eaddr,
267     - __pa(to), __pa(from), n);
268     + (to != NULL) ? __pa(to): 0,
269     + (from != NULL) ? __pa(from): 0, n);
270    
271     quadrant = 1;
272     if (!pid)
273     diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h
274     index abe60268335d..0fe5600a037e 100644
275     --- a/arch/s390/include/asm/kvm_host.h
276     +++ b/arch/s390/include/asm/kvm_host.h
277     @@ -31,12 +31,12 @@
278     #define KVM_USER_MEM_SLOTS 32
279    
280     /*
281     - * These seem to be used for allocating ->chip in the routing table,
282     - * which we don't use. 4096 is an out-of-thin-air value. If we need
283     - * to look at ->chip later on, we'll need to revisit this.
284     + * These seem to be used for allocating ->chip in the routing table, which we
285     + * don't use. 1 is as small as we can get to reduce the needed memory. If we
286     + * need to look at ->chip later on, we'll need to revisit this.
287     */
288     #define KVM_NR_IRQCHIPS 1
289     -#define KVM_IRQCHIP_NUM_PINS 4096
290     +#define KVM_IRQCHIP_NUM_PINS 1
291     #define KVM_HALT_POLL_NS_DEFAULT 50000
292    
293     /* s390-specific vcpu->requests bit members */
294     diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h
295     index a470f1fa9f2a..324438889fe1 100644
296     --- a/arch/s390/include/asm/uaccess.h
297     +++ b/arch/s390/include/asm/uaccess.h
298     @@ -276,6 +276,6 @@ static inline unsigned long __must_check clear_user(void __user *to, unsigned lo
299     }
300    
301     int copy_to_user_real(void __user *dest, void *src, unsigned long count);
302     -void s390_kernel_write(void *dst, const void *src, size_t size);
303     +void *s390_kernel_write(void *dst, const void *src, size_t size);
304    
305     #endif /* __S390_UACCESS_H */
306     diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
307     index b432d63d0b37..2531776cf6cf 100644
308     --- a/arch/s390/kernel/early.c
309     +++ b/arch/s390/kernel/early.c
310     @@ -169,6 +169,8 @@ static noinline __init void setup_lowcore_early(void)
311     psw_t psw;
312    
313     psw.mask = PSW_MASK_BASE | PSW_DEFAULT_KEY | PSW_MASK_EA | PSW_MASK_BA;
314     + if (IS_ENABLED(CONFIG_KASAN))
315     + psw.mask |= PSW_MASK_DAT;
316     psw.addr = (unsigned long) s390_base_ext_handler;
317     S390_lowcore.external_new_psw = psw;
318     psw.addr = (unsigned long) s390_base_pgm_handler;
319     diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
320     index 4366962f4930..07b2b61a0289 100644
321     --- a/arch/s390/kernel/setup.c
322     +++ b/arch/s390/kernel/setup.c
323     @@ -1120,6 +1120,7 @@ void __init setup_arch(char **cmdline_p)
324     if (IS_ENABLED(CONFIG_EXPOLINE_AUTO))
325     nospec_auto_detect();
326    
327     + jump_label_init();
328     parse_early_param();
329     #ifdef CONFIG_CRASH_DUMP
330     /* Deactivate elfcorehdr= kernel parameter */
331     diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
332     index 7dfae86afa47..ff8234bca56c 100644
333     --- a/arch/s390/mm/hugetlbpage.c
334     +++ b/arch/s390/mm/hugetlbpage.c
335     @@ -117,7 +117,7 @@ static inline pte_t __rste_to_pte(unsigned long rste)
336     _PAGE_YOUNG);
337     #ifdef CONFIG_MEM_SOFT_DIRTY
338     pte_val(pte) |= move_set_bit(rste, _SEGMENT_ENTRY_SOFT_DIRTY,
339     - _PAGE_DIRTY);
340     + _PAGE_SOFT_DIRTY);
341     #endif
342     pte_val(pte) |= move_set_bit(rste, _SEGMENT_ENTRY_NOEXEC,
343     _PAGE_NOEXEC);
344     diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
345     index de7ca4b6718f..1d17413b319a 100644
346     --- a/arch/s390/mm/maccess.c
347     +++ b/arch/s390/mm/maccess.c
348     @@ -55,19 +55,26 @@ static notrace long s390_kernel_write_odd(void *dst, const void *src, size_t siz
349     */
350     static DEFINE_SPINLOCK(s390_kernel_write_lock);
351    
352     -void notrace s390_kernel_write(void *dst, const void *src, size_t size)
353     +notrace void *s390_kernel_write(void *dst, const void *src, size_t size)
354     {
355     + void *tmp = dst;
356     unsigned long flags;
357     long copied;
358    
359     spin_lock_irqsave(&s390_kernel_write_lock, flags);
360     - while (size) {
361     - copied = s390_kernel_write_odd(dst, src, size);
362     - dst += copied;
363     - src += copied;
364     - size -= copied;
365     + if (!(flags & PSW_MASK_DAT)) {
366     + memcpy(dst, src, size);
367     + } else {
368     + while (size) {
369     + copied = s390_kernel_write_odd(tmp, src, size);
370     + tmp += copied;
371     + src += copied;
372     + size -= copied;
373     + }
374     }
375     spin_unlock_irqrestore(&s390_kernel_write_lock, flags);
376     +
377     + return dst;
378     }
379    
380     static int __no_sanitize_address __memcpy_real(void *dest, void *src, size_t count)
381     diff --git a/arch/x86/events/Kconfig b/arch/x86/events/Kconfig
382     index 9a7a1446cb3a..4a809c6cbd2f 100644
383     --- a/arch/x86/events/Kconfig
384     +++ b/arch/x86/events/Kconfig
385     @@ -10,11 +10,11 @@ config PERF_EVENTS_INTEL_UNCORE
386     available on NehalemEX and more modern processors.
387    
388     config PERF_EVENTS_INTEL_RAPL
389     - tristate "Intel rapl performance events"
390     - depends on PERF_EVENTS && CPU_SUP_INTEL && PCI
391     + tristate "Intel/AMD rapl performance events"
392     + depends on PERF_EVENTS && (CPU_SUP_INTEL || CPU_SUP_AMD) && PCI
393     default y
394     ---help---
395     - Include support for Intel rapl performance events for power
396     + Include support for Intel and AMD rapl performance events for power
397     monitoring on modern processors.
398    
399     config PERF_EVENTS_INTEL_CSTATE
400     diff --git a/arch/x86/events/Makefile b/arch/x86/events/Makefile
401     index 9e07f554333f..726e83c0a31a 100644
402     --- a/arch/x86/events/Makefile
403     +++ b/arch/x86/events/Makefile
404     @@ -1,5 +1,6 @@
405     # SPDX-License-Identifier: GPL-2.0-only
406     obj-y += core.o probe.o
407     +obj-$(CONFIG_PERF_EVENTS_INTEL_RAPL) += rapl.o
408     obj-y += amd/
409     obj-$(CONFIG_X86_LOCAL_APIC) += msr.o
410     obj-$(CONFIG_CPU_SUP_INTEL) += intel/
411     diff --git a/arch/x86/events/intel/Makefile b/arch/x86/events/intel/Makefile
412     index 3468b0c1dc7c..e67a5886336c 100644
413     --- a/arch/x86/events/intel/Makefile
414     +++ b/arch/x86/events/intel/Makefile
415     @@ -2,8 +2,6 @@
416     obj-$(CONFIG_CPU_SUP_INTEL) += core.o bts.o
417     obj-$(CONFIG_CPU_SUP_INTEL) += ds.o knc.o
418     obj-$(CONFIG_CPU_SUP_INTEL) += lbr.o p4.o p6.o pt.o
419     -obj-$(CONFIG_PERF_EVENTS_INTEL_RAPL) += intel-rapl-perf.o
420     -intel-rapl-perf-objs := rapl.o
421     obj-$(CONFIG_PERF_EVENTS_INTEL_UNCORE) += intel-uncore.o
422     intel-uncore-objs := uncore.o uncore_nhmex.o uncore_snb.o uncore_snbep.o
423     obj-$(CONFIG_PERF_EVENTS_INTEL_CSTATE) += intel-cstate.o
424     diff --git a/arch/x86/events/intel/rapl.c b/arch/x86/events/intel/rapl.c
425     deleted file mode 100644
426     index 5053a403e4ae..000000000000
427     --- a/arch/x86/events/intel/rapl.c
428     +++ /dev/null
429     @@ -1,802 +0,0 @@
430     -// SPDX-License-Identifier: GPL-2.0-only
431     -/*
432     - * Support Intel RAPL energy consumption counters
433     - * Copyright (C) 2013 Google, Inc., Stephane Eranian
434     - *
435     - * Intel RAPL interface is specified in the IA-32 Manual Vol3b
436     - * section 14.7.1 (September 2013)
437     - *
438     - * RAPL provides more controls than just reporting energy consumption
439     - * however here we only expose the 3 energy consumption free running
440     - * counters (pp0, pkg, dram).
441     - *
442     - * Each of those counters increments in a power unit defined by the
443     - * RAPL_POWER_UNIT MSR. On SandyBridge, this unit is 1/(2^16) Joules
444     - * but it can vary.
445     - *
446     - * Counter to rapl events mappings:
447     - *
448     - * pp0 counter: consumption of all physical cores (power plane 0)
449     - * event: rapl_energy_cores
450     - * perf code: 0x1
451     - *
452     - * pkg counter: consumption of the whole processor package
453     - * event: rapl_energy_pkg
454     - * perf code: 0x2
455     - *
456     - * dram counter: consumption of the dram domain (servers only)
457     - * event: rapl_energy_dram
458     - * perf code: 0x3
459     - *
460     - * gpu counter: consumption of the builtin-gpu domain (client only)
461     - * event: rapl_energy_gpu
462     - * perf code: 0x4
463     - *
464     - * psys counter: consumption of the builtin-psys domain (client only)
465     - * event: rapl_energy_psys
466     - * perf code: 0x5
467     - *
468     - * We manage those counters as free running (read-only). They may be
469     - * use simultaneously by other tools, such as turbostat.
470     - *
471     - * The events only support system-wide mode counting. There is no
472     - * sampling support because it does not make sense and is not
473     - * supported by the RAPL hardware.
474     - *
475     - * Because we want to avoid floating-point operations in the kernel,
476     - * the events are all reported in fixed point arithmetic (32.32).
477     - * Tools must adjust the counts to convert them to Watts using
478     - * the duration of the measurement. Tools may use a function such as
479     - * ldexp(raw_count, -32);
480     - */
481     -
482     -#define pr_fmt(fmt) "RAPL PMU: " fmt
483     -
484     -#include <linux/module.h>
485     -#include <linux/slab.h>
486     -#include <linux/perf_event.h>
487     -#include <linux/nospec.h>
488     -#include <asm/cpu_device_id.h>
489     -#include <asm/intel-family.h>
490     -#include "../perf_event.h"
491     -#include "../probe.h"
492     -
493     -MODULE_LICENSE("GPL");
494     -
495     -/*
496     - * RAPL energy status counters
497     - */
498     -enum perf_rapl_events {
499     - PERF_RAPL_PP0 = 0, /* all cores */
500     - PERF_RAPL_PKG, /* entire package */
501     - PERF_RAPL_RAM, /* DRAM */
502     - PERF_RAPL_PP1, /* gpu */
503     - PERF_RAPL_PSYS, /* psys */
504     -
505     - PERF_RAPL_MAX,
506     - NR_RAPL_DOMAINS = PERF_RAPL_MAX,
507     -};
508     -
509     -static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = {
510     - "pp0-core",
511     - "package",
512     - "dram",
513     - "pp1-gpu",
514     - "psys",
515     -};
516     -
517     -/*
518     - * event code: LSB 8 bits, passed in attr->config
519     - * any other bit is reserved
520     - */
521     -#define RAPL_EVENT_MASK 0xFFULL
522     -
523     -#define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \
524     -static ssize_t __rapl_##_var##_show(struct kobject *kobj, \
525     - struct kobj_attribute *attr, \
526     - char *page) \
527     -{ \
528     - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
529     - return sprintf(page, _format "\n"); \
530     -} \
531     -static struct kobj_attribute format_attr_##_var = \
532     - __ATTR(_name, 0444, __rapl_##_var##_show, NULL)
533     -
534     -#define RAPL_CNTR_WIDTH 32
535     -
536     -#define RAPL_EVENT_ATTR_STR(_name, v, str) \
537     -static struct perf_pmu_events_attr event_attr_##v = { \
538     - .attr = __ATTR(_name, 0444, perf_event_sysfs_show, NULL), \
539     - .id = 0, \
540     - .event_str = str, \
541     -};
542     -
543     -struct rapl_pmu {
544     - raw_spinlock_t lock;
545     - int n_active;
546     - int cpu;
547     - struct list_head active_list;
548     - struct pmu *pmu;
549     - ktime_t timer_interval;
550     - struct hrtimer hrtimer;
551     -};
552     -
553     -struct rapl_pmus {
554     - struct pmu pmu;
555     - unsigned int maxdie;
556     - struct rapl_pmu *pmus[];
557     -};
558     -
559     -struct rapl_model {
560     - unsigned long events;
561     - bool apply_quirk;
562     -};
563     -
564     - /* 1/2^hw_unit Joule */
565     -static int rapl_hw_unit[NR_RAPL_DOMAINS] __read_mostly;
566     -static struct rapl_pmus *rapl_pmus;
567     -static cpumask_t rapl_cpu_mask;
568     -static unsigned int rapl_cntr_mask;
569     -static u64 rapl_timer_ms;
570     -static struct perf_msr rapl_msrs[];
571     -
572     -static inline struct rapl_pmu *cpu_to_rapl_pmu(unsigned int cpu)
573     -{
574     - unsigned int dieid = topology_logical_die_id(cpu);
575     -
576     - /*
577     - * The unsigned check also catches the '-1' return value for non
578     - * existent mappings in the topology map.
579     - */
580     - return dieid < rapl_pmus->maxdie ? rapl_pmus->pmus[dieid] : NULL;
581     -}
582     -
583     -static inline u64 rapl_read_counter(struct perf_event *event)
584     -{
585     - u64 raw;
586     - rdmsrl(event->hw.event_base, raw);
587     - return raw;
588     -}
589     -
590     -static inline u64 rapl_scale(u64 v, int cfg)
591     -{
592     - if (cfg > NR_RAPL_DOMAINS) {
593     - pr_warn("Invalid domain %d, failed to scale data\n", cfg);
594     - return v;
595     - }
596     - /*
597     - * scale delta to smallest unit (1/2^32)
598     - * users must then scale back: count * 1/(1e9*2^32) to get Joules
599     - * or use ldexp(count, -32).
600     - * Watts = Joules/Time delta
601     - */
602     - return v << (32 - rapl_hw_unit[cfg - 1]);
603     -}
604     -
605     -static u64 rapl_event_update(struct perf_event *event)
606     -{
607     - struct hw_perf_event *hwc = &event->hw;
608     - u64 prev_raw_count, new_raw_count;
609     - s64 delta, sdelta;
610     - int shift = RAPL_CNTR_WIDTH;
611     -
612     -again:
613     - prev_raw_count = local64_read(&hwc->prev_count);
614     - rdmsrl(event->hw.event_base, new_raw_count);
615     -
616     - if (local64_cmpxchg(&hwc->prev_count, prev_raw_count,
617     - new_raw_count) != prev_raw_count) {
618     - cpu_relax();
619     - goto again;
620     - }
621     -
622     - /*
623     - * Now we have the new raw value and have updated the prev
624     - * timestamp already. We can now calculate the elapsed delta
625     - * (event-)time and add that to the generic event.
626     - *
627     - * Careful, not all hw sign-extends above the physical width
628     - * of the count.
629     - */
630     - delta = (new_raw_count << shift) - (prev_raw_count << shift);
631     - delta >>= shift;
632     -
633     - sdelta = rapl_scale(delta, event->hw.config);
634     -
635     - local64_add(sdelta, &event->count);
636     -
637     - return new_raw_count;
638     -}
639     -
640     -static void rapl_start_hrtimer(struct rapl_pmu *pmu)
641     -{
642     - hrtimer_start(&pmu->hrtimer, pmu->timer_interval,
643     - HRTIMER_MODE_REL_PINNED);
644     -}
645     -
646     -static enum hrtimer_restart rapl_hrtimer_handle(struct hrtimer *hrtimer)
647     -{
648     - struct rapl_pmu *pmu = container_of(hrtimer, struct rapl_pmu, hrtimer);
649     - struct perf_event *event;
650     - unsigned long flags;
651     -
652     - if (!pmu->n_active)
653     - return HRTIMER_NORESTART;
654     -
655     - raw_spin_lock_irqsave(&pmu->lock, flags);
656     -
657     - list_for_each_entry(event, &pmu->active_list, active_entry)
658     - rapl_event_update(event);
659     -
660     - raw_spin_unlock_irqrestore(&pmu->lock, flags);
661     -
662     - hrtimer_forward_now(hrtimer, pmu->timer_interval);
663     -
664     - return HRTIMER_RESTART;
665     -}
666     -
667     -static void rapl_hrtimer_init(struct rapl_pmu *pmu)
668     -{
669     - struct hrtimer *hr = &pmu->hrtimer;
670     -
671     - hrtimer_init(hr, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
672     - hr->function = rapl_hrtimer_handle;
673     -}
674     -
675     -static void __rapl_pmu_event_start(struct rapl_pmu *pmu,
676     - struct perf_event *event)
677     -{
678     - if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
679     - return;
680     -
681     - event->hw.state = 0;
682     -
683     - list_add_tail(&event->active_entry, &pmu->active_list);
684     -
685     - local64_set(&event->hw.prev_count, rapl_read_counter(event));
686     -
687     - pmu->n_active++;
688     - if (pmu->n_active == 1)
689     - rapl_start_hrtimer(pmu);
690     -}
691     -
692     -static void rapl_pmu_event_start(struct perf_event *event, int mode)
693     -{
694     - struct rapl_pmu *pmu = event->pmu_private;
695     - unsigned long flags;
696     -
697     - raw_spin_lock_irqsave(&pmu->lock, flags);
698     - __rapl_pmu_event_start(pmu, event);
699     - raw_spin_unlock_irqrestore(&pmu->lock, flags);
700     -}
701     -
702     -static void rapl_pmu_event_stop(struct perf_event *event, int mode)
703     -{
704     - struct rapl_pmu *pmu = event->pmu_private;
705     - struct hw_perf_event *hwc = &event->hw;
706     - unsigned long flags;
707     -
708     - raw_spin_lock_irqsave(&pmu->lock, flags);
709     -
710     - /* mark event as deactivated and stopped */
711     - if (!(hwc->state & PERF_HES_STOPPED)) {
712     - WARN_ON_ONCE(pmu->n_active <= 0);
713     - pmu->n_active--;
714     - if (pmu->n_active == 0)
715     - hrtimer_cancel(&pmu->hrtimer);
716     -
717     - list_del(&event->active_entry);
718     -
719     - WARN_ON_ONCE(hwc->state & PERF_HES_STOPPED);
720     - hwc->state |= PERF_HES_STOPPED;
721     - }
722     -
723     - /* check if update of sw counter is necessary */
724     - if ((mode & PERF_EF_UPDATE) && !(hwc->state & PERF_HES_UPTODATE)) {
725     - /*
726     - * Drain the remaining delta count out of a event
727     - * that we are disabling:
728     - */
729     - rapl_event_update(event);
730     - hwc->state |= PERF_HES_UPTODATE;
731     - }
732     -
733     - raw_spin_unlock_irqrestore(&pmu->lock, flags);
734     -}
735     -
736     -static int rapl_pmu_event_add(struct perf_event *event, int mode)
737     -{
738     - struct rapl_pmu *pmu = event->pmu_private;
739     - struct hw_perf_event *hwc = &event->hw;
740     - unsigned long flags;
741     -
742     - raw_spin_lock_irqsave(&pmu->lock, flags);
743     -
744     - hwc->state = PERF_HES_UPTODATE | PERF_HES_STOPPED;
745     -
746     - if (mode & PERF_EF_START)
747     - __rapl_pmu_event_start(pmu, event);
748     -
749     - raw_spin_unlock_irqrestore(&pmu->lock, flags);
750     -
751     - return 0;
752     -}
753     -
754     -static void rapl_pmu_event_del(struct perf_event *event, int flags)
755     -{
756     - rapl_pmu_event_stop(event, PERF_EF_UPDATE);
757     -}
758     -
759     -static int rapl_pmu_event_init(struct perf_event *event)
760     -{
761     - u64 cfg = event->attr.config & RAPL_EVENT_MASK;
762     - int bit, ret = 0;
763     - struct rapl_pmu *pmu;
764     -
765     - /* only look at RAPL events */
766     - if (event->attr.type != rapl_pmus->pmu.type)
767     - return -ENOENT;
768     -
769     - /* check only supported bits are set */
770     - if (event->attr.config & ~RAPL_EVENT_MASK)
771     - return -EINVAL;
772     -
773     - if (event->cpu < 0)
774     - return -EINVAL;
775     -
776     - event->event_caps |= PERF_EV_CAP_READ_ACTIVE_PKG;
777     -
778     - if (!cfg || cfg >= NR_RAPL_DOMAINS + 1)
779     - return -EINVAL;
780     -
781     - cfg = array_index_nospec((long)cfg, NR_RAPL_DOMAINS + 1);
782     - bit = cfg - 1;
783     -
784     - /* check event supported */
785     - if (!(rapl_cntr_mask & (1 << bit)))
786     - return -EINVAL;
787     -
788     - /* unsupported modes and filters */
789     - if (event->attr.sample_period) /* no sampling */
790     - return -EINVAL;
791     -
792     - /* must be done before validate_group */
793     - pmu = cpu_to_rapl_pmu(event->cpu);
794     - if (!pmu)
795     - return -EINVAL;
796     - event->cpu = pmu->cpu;
797     - event->pmu_private = pmu;
798     - event->hw.event_base = rapl_msrs[bit].msr;
799     - event->hw.config = cfg;
800     - event->hw.idx = bit;
801     -
802     - return ret;
803     -}
804     -
805     -static void rapl_pmu_event_read(struct perf_event *event)
806     -{
807     - rapl_event_update(event);
808     -}
809     -
810     -static ssize_t rapl_get_attr_cpumask(struct device *dev,
811     - struct device_attribute *attr, char *buf)
812     -{
813     - return cpumap_print_to_pagebuf(true, buf, &rapl_cpu_mask);
814     -}
815     -
816     -static DEVICE_ATTR(cpumask, S_IRUGO, rapl_get_attr_cpumask, NULL);
817     -
818     -static struct attribute *rapl_pmu_attrs[] = {
819     - &dev_attr_cpumask.attr,
820     - NULL,
821     -};
822     -
823     -static struct attribute_group rapl_pmu_attr_group = {
824     - .attrs = rapl_pmu_attrs,
825     -};
826     -
827     -RAPL_EVENT_ATTR_STR(energy-cores, rapl_cores, "event=0x01");
828     -RAPL_EVENT_ATTR_STR(energy-pkg , rapl_pkg, "event=0x02");
829     -RAPL_EVENT_ATTR_STR(energy-ram , rapl_ram, "event=0x03");
830     -RAPL_EVENT_ATTR_STR(energy-gpu , rapl_gpu, "event=0x04");
831     -RAPL_EVENT_ATTR_STR(energy-psys, rapl_psys, "event=0x05");
832     -
833     -RAPL_EVENT_ATTR_STR(energy-cores.unit, rapl_cores_unit, "Joules");
834     -RAPL_EVENT_ATTR_STR(energy-pkg.unit , rapl_pkg_unit, "Joules");
835     -RAPL_EVENT_ATTR_STR(energy-ram.unit , rapl_ram_unit, "Joules");
836     -RAPL_EVENT_ATTR_STR(energy-gpu.unit , rapl_gpu_unit, "Joules");
837     -RAPL_EVENT_ATTR_STR(energy-psys.unit, rapl_psys_unit, "Joules");
838     -
839     -/*
840     - * we compute in 0.23 nJ increments regardless of MSR
841     - */
842     -RAPL_EVENT_ATTR_STR(energy-cores.scale, rapl_cores_scale, "2.3283064365386962890625e-10");
843     -RAPL_EVENT_ATTR_STR(energy-pkg.scale, rapl_pkg_scale, "2.3283064365386962890625e-10");
844     -RAPL_EVENT_ATTR_STR(energy-ram.scale, rapl_ram_scale, "2.3283064365386962890625e-10");
845     -RAPL_EVENT_ATTR_STR(energy-gpu.scale, rapl_gpu_scale, "2.3283064365386962890625e-10");
846     -RAPL_EVENT_ATTR_STR(energy-psys.scale, rapl_psys_scale, "2.3283064365386962890625e-10");
847     -
848     -/*
849     - * There are no default events, but we need to create
850     - * "events" group (with empty attrs) before updating
851     - * it with detected events.
852     - */
853     -static struct attribute *attrs_empty[] = {
854     - NULL,
855     -};
856     -
857     -static struct attribute_group rapl_pmu_events_group = {
858     - .name = "events",
859     - .attrs = attrs_empty,
860     -};
861     -
862     -DEFINE_RAPL_FORMAT_ATTR(event, event, "config:0-7");
863     -static struct attribute *rapl_formats_attr[] = {
864     - &format_attr_event.attr,
865     - NULL,
866     -};
867     -
868     -static struct attribute_group rapl_pmu_format_group = {
869     - .name = "format",
870     - .attrs = rapl_formats_attr,
871     -};
872     -
873     -static const struct attribute_group *rapl_attr_groups[] = {
874     - &rapl_pmu_attr_group,
875     - &rapl_pmu_format_group,
876     - &rapl_pmu_events_group,
877     - NULL,
878     -};
879     -
880     -static struct attribute *rapl_events_cores[] = {
881     - EVENT_PTR(rapl_cores),
882     - EVENT_PTR(rapl_cores_unit),
883     - EVENT_PTR(rapl_cores_scale),
884     - NULL,
885     -};
886     -
887     -static struct attribute_group rapl_events_cores_group = {
888     - .name = "events",
889     - .attrs = rapl_events_cores,
890     -};
891     -
892     -static struct attribute *rapl_events_pkg[] = {
893     - EVENT_PTR(rapl_pkg),
894     - EVENT_PTR(rapl_pkg_unit),
895     - EVENT_PTR(rapl_pkg_scale),
896     - NULL,
897     -};
898     -
899     -static struct attribute_group rapl_events_pkg_group = {
900     - .name = "events",
901     - .attrs = rapl_events_pkg,
902     -};
903     -
904     -static struct attribute *rapl_events_ram[] = {
905     - EVENT_PTR(rapl_ram),
906     - EVENT_PTR(rapl_ram_unit),
907     - EVENT_PTR(rapl_ram_scale),
908     - NULL,
909     -};
910     -
911     -static struct attribute_group rapl_events_ram_group = {
912     - .name = "events",
913     - .attrs = rapl_events_ram,
914     -};
915     -
916     -static struct attribute *rapl_events_gpu[] = {
917     - EVENT_PTR(rapl_gpu),
918     - EVENT_PTR(rapl_gpu_unit),
919     - EVENT_PTR(rapl_gpu_scale),
920     - NULL,
921     -};
922     -
923     -static struct attribute_group rapl_events_gpu_group = {
924     - .name = "events",
925     - .attrs = rapl_events_gpu,
926     -};
927     -
928     -static struct attribute *rapl_events_psys[] = {
929     - EVENT_PTR(rapl_psys),
930     - EVENT_PTR(rapl_psys_unit),
931     - EVENT_PTR(rapl_psys_scale),
932     - NULL,
933     -};
934     -
935     -static struct attribute_group rapl_events_psys_group = {
936     - .name = "events",
937     - .attrs = rapl_events_psys,
938     -};
939     -
940     -static bool test_msr(int idx, void *data)
941     -{
942     - return test_bit(idx, (unsigned long *) data);
943     -}
944     -
945     -static struct perf_msr rapl_msrs[] = {
946     - [PERF_RAPL_PP0] = { MSR_PP0_ENERGY_STATUS, &rapl_events_cores_group, test_msr },
947     - [PERF_RAPL_PKG] = { MSR_PKG_ENERGY_STATUS, &rapl_events_pkg_group, test_msr },
948     - [PERF_RAPL_RAM] = { MSR_DRAM_ENERGY_STATUS, &rapl_events_ram_group, test_msr },
949     - [PERF_RAPL_PP1] = { MSR_PP1_ENERGY_STATUS, &rapl_events_gpu_group, test_msr },
950     - [PERF_RAPL_PSYS] = { MSR_PLATFORM_ENERGY_STATUS, &rapl_events_psys_group, test_msr },
951     -};
952     -
953     -static int rapl_cpu_offline(unsigned int cpu)
954     -{
955     - struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
956     - int target;
957     -
958     - /* Check if exiting cpu is used for collecting rapl events */
959     - if (!cpumask_test_and_clear_cpu(cpu, &rapl_cpu_mask))
960     - return 0;
961     -
962     - pmu->cpu = -1;
963     - /* Find a new cpu to collect rapl events */
964     - target = cpumask_any_but(topology_die_cpumask(cpu), cpu);
965     -
966     - /* Migrate rapl events to the new target */
967     - if (target < nr_cpu_ids) {
968     - cpumask_set_cpu(target, &rapl_cpu_mask);
969     - pmu->cpu = target;
970     - perf_pmu_migrate_context(pmu->pmu, cpu, target);
971     - }
972     - return 0;
973     -}
974     -
975     -static int rapl_cpu_online(unsigned int cpu)
976     -{
977     - struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
978     - int target;
979     -
980     - if (!pmu) {
981     - pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu));
982     - if (!pmu)
983     - return -ENOMEM;
984     -
985     - raw_spin_lock_init(&pmu->lock);
986     - INIT_LIST_HEAD(&pmu->active_list);
987     - pmu->pmu = &rapl_pmus->pmu;
988     - pmu->timer_interval = ms_to_ktime(rapl_timer_ms);
989     - rapl_hrtimer_init(pmu);
990     -
991     - rapl_pmus->pmus[topology_logical_die_id(cpu)] = pmu;
992     - }
993     -
994     - /*
995     - * Check if there is an online cpu in the package which collects rapl
996     - * events already.
997     - */
998     - target = cpumask_any_and(&rapl_cpu_mask, topology_die_cpumask(cpu));
999     - if (target < nr_cpu_ids)
1000     - return 0;
1001     -
1002     - cpumask_set_cpu(cpu, &rapl_cpu_mask);
1003     - pmu->cpu = cpu;
1004     - return 0;
1005     -}
1006     -
1007     -static int rapl_check_hw_unit(bool apply_quirk)
1008     -{
1009     - u64 msr_rapl_power_unit_bits;
1010     - int i;
1011     -
1012     - /* protect rdmsrl() to handle virtualization */
1013     - if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &msr_rapl_power_unit_bits))
1014     - return -1;
1015     - for (i = 0; i < NR_RAPL_DOMAINS; i++)
1016     - rapl_hw_unit[i] = (msr_rapl_power_unit_bits >> 8) & 0x1FULL;
1017     -
1018     - /*
1019     - * DRAM domain on HSW server and KNL has fixed energy unit which can be
1020     - * different than the unit from power unit MSR. See
1021     - * "Intel Xeon Processor E5-1600 and E5-2600 v3 Product Families, V2
1022     - * of 2. Datasheet, September 2014, Reference Number: 330784-001 "
1023     - */
1024     - if (apply_quirk)
1025     - rapl_hw_unit[PERF_RAPL_RAM] = 16;
1026     -
1027     - /*
1028     - * Calculate the timer rate:
1029     - * Use reference of 200W for scaling the timeout to avoid counter
1030     - * overflows. 200W = 200 Joules/sec
1031     - * Divide interval by 2 to avoid lockstep (2 * 100)
1032     - * if hw unit is 32, then we use 2 ms 1/200/2
1033     - */
1034     - rapl_timer_ms = 2;
1035     - if (rapl_hw_unit[0] < 32) {
1036     - rapl_timer_ms = (1000 / (2 * 100));
1037     - rapl_timer_ms *= (1ULL << (32 - rapl_hw_unit[0] - 1));
1038     - }
1039     - return 0;
1040     -}
1041     -
1042     -static void __init rapl_advertise(void)
1043     -{
1044     - int i;
1045     -
1046     - pr_info("API unit is 2^-32 Joules, %d fixed counters, %llu ms ovfl timer\n",
1047     - hweight32(rapl_cntr_mask), rapl_timer_ms);
1048     -
1049     - for (i = 0; i < NR_RAPL_DOMAINS; i++) {
1050     - if (rapl_cntr_mask & (1 << i)) {
1051     - pr_info("hw unit of domain %s 2^-%d Joules\n",
1052     - rapl_domain_names[i], rapl_hw_unit[i]);
1053     - }
1054     - }
1055     -}
1056     -
1057     -static void cleanup_rapl_pmus(void)
1058     -{
1059     - int i;
1060     -
1061     - for (i = 0; i < rapl_pmus->maxdie; i++)
1062     - kfree(rapl_pmus->pmus[i]);
1063     - kfree(rapl_pmus);
1064     -}
1065     -
1066     -static const struct attribute_group *rapl_attr_update[] = {
1067     - &rapl_events_cores_group,
1068     - &rapl_events_pkg_group,
1069     - &rapl_events_ram_group,
1070     - &rapl_events_gpu_group,
1071     - &rapl_events_gpu_group,
1072     - NULL,
1073     -};
1074     -
1075     -static int __init init_rapl_pmus(void)
1076     -{
1077     - int maxdie = topology_max_packages() * topology_max_die_per_package();
1078     - size_t size;
1079     -
1080     - size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *);
1081     - rapl_pmus = kzalloc(size, GFP_KERNEL);
1082     - if (!rapl_pmus)
1083     - return -ENOMEM;
1084     -
1085     - rapl_pmus->maxdie = maxdie;
1086     - rapl_pmus->pmu.attr_groups = rapl_attr_groups;
1087     - rapl_pmus->pmu.attr_update = rapl_attr_update;
1088     - rapl_pmus->pmu.task_ctx_nr = perf_invalid_context;
1089     - rapl_pmus->pmu.event_init = rapl_pmu_event_init;
1090     - rapl_pmus->pmu.add = rapl_pmu_event_add;
1091     - rapl_pmus->pmu.del = rapl_pmu_event_del;
1092     - rapl_pmus->pmu.start = rapl_pmu_event_start;
1093     - rapl_pmus->pmu.stop = rapl_pmu_event_stop;
1094     - rapl_pmus->pmu.read = rapl_pmu_event_read;
1095     - rapl_pmus->pmu.module = THIS_MODULE;
1096     - rapl_pmus->pmu.capabilities = PERF_PMU_CAP_NO_EXCLUDE;
1097     - return 0;
1098     -}
1099     -
1100     -#define X86_RAPL_MODEL_MATCH(model, init) \
1101     - { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&init }
1102     -
1103     -static struct rapl_model model_snb = {
1104     - .events = BIT(PERF_RAPL_PP0) |
1105     - BIT(PERF_RAPL_PKG) |
1106     - BIT(PERF_RAPL_PP1),
1107     - .apply_quirk = false,
1108     -};
1109     -
1110     -static struct rapl_model model_snbep = {
1111     - .events = BIT(PERF_RAPL_PP0) |
1112     - BIT(PERF_RAPL_PKG) |
1113     - BIT(PERF_RAPL_RAM),
1114     - .apply_quirk = false,
1115     -};
1116     -
1117     -static struct rapl_model model_hsw = {
1118     - .events = BIT(PERF_RAPL_PP0) |
1119     - BIT(PERF_RAPL_PKG) |
1120     - BIT(PERF_RAPL_RAM) |
1121     - BIT(PERF_RAPL_PP1),
1122     - .apply_quirk = false,
1123     -};
1124     -
1125     -static struct rapl_model model_hsx = {
1126     - .events = BIT(PERF_RAPL_PP0) |
1127     - BIT(PERF_RAPL_PKG) |
1128     - BIT(PERF_RAPL_RAM),
1129     - .apply_quirk = true,
1130     -};
1131     -
1132     -static struct rapl_model model_knl = {
1133     - .events = BIT(PERF_RAPL_PKG) |
1134     - BIT(PERF_RAPL_RAM),
1135     - .apply_quirk = true,
1136     -};
1137     -
1138     -static struct rapl_model model_skl = {
1139     - .events = BIT(PERF_RAPL_PP0) |
1140     - BIT(PERF_RAPL_PKG) |
1141     - BIT(PERF_RAPL_RAM) |
1142     - BIT(PERF_RAPL_PP1) |
1143     - BIT(PERF_RAPL_PSYS),
1144     - .apply_quirk = false,
1145     -};
1146     -
1147     -static const struct x86_cpu_id rapl_model_match[] __initconst = {
1148     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE, model_snb),
1149     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE_X, model_snbep),
1150     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE, model_snb),
1151     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE_X, model_snbep),
1152     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL, model_hsw),
1153     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_X, model_hsx),
1154     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_L, model_hsw),
1155     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_G, model_hsw),
1156     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL, model_hsw),
1157     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_G, model_hsw),
1158     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_X, model_hsx),
1159     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_D, model_hsx),
1160     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNL, model_knl),
1161     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNM, model_knl),
1162     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_L, model_skl),
1163     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE, model_skl),
1164     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_X, model_hsx),
1165     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_L, model_skl),
1166     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE, model_skl),
1167     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_CANNONLAKE_L, model_skl),
1168     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT, model_hsw),
1169     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_D, model_hsw),
1170     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_PLUS, model_hsw),
1171     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE_L, model_skl),
1172     - X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE, model_skl),
1173     - {},
1174     -};
1175     -
1176     -MODULE_DEVICE_TABLE(x86cpu, rapl_model_match);
1177     -
1178     -static int __init rapl_pmu_init(void)
1179     -{
1180     - const struct x86_cpu_id *id;
1181     - struct rapl_model *rm;
1182     - int ret;
1183     -
1184     - id = x86_match_cpu(rapl_model_match);
1185     - if (!id)
1186     - return -ENODEV;
1187     -
1188     - rm = (struct rapl_model *) id->driver_data;
1189     - rapl_cntr_mask = perf_msr_probe(rapl_msrs, PERF_RAPL_MAX,
1190     - false, (void *) &rm->events);
1191     -
1192     - ret = rapl_check_hw_unit(rm->apply_quirk);
1193     - if (ret)
1194     - return ret;
1195     -
1196     - ret = init_rapl_pmus();
1197     - if (ret)
1198     - return ret;
1199     -
1200     - /*
1201     - * Install callbacks. Core will call them for each online cpu.
1202     - */
1203     - ret = cpuhp_setup_state(CPUHP_AP_PERF_X86_RAPL_ONLINE,
1204     - "perf/x86/rapl:online",
1205     - rapl_cpu_online, rapl_cpu_offline);
1206     - if (ret)
1207     - goto out;
1208     -
1209     - ret = perf_pmu_register(&rapl_pmus->pmu, "power", -1);
1210     - if (ret)
1211     - goto out1;
1212     -
1213     - rapl_advertise();
1214     - return 0;
1215     -
1216     -out1:
1217     - cpuhp_remove_state(CPUHP_AP_PERF_X86_RAPL_ONLINE);
1218     -out:
1219     - pr_warn("Initialization failed (%d), disabled\n", ret);
1220     - cleanup_rapl_pmus();
1221     - return ret;
1222     -}
1223     -module_init(rapl_pmu_init);
1224     -
1225     -static void __exit intel_rapl_exit(void)
1226     -{
1227     - cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_RAPL_ONLINE);
1228     - perf_pmu_unregister(&rapl_pmus->pmu);
1229     - cleanup_rapl_pmus();
1230     -}
1231     -module_exit(intel_rapl_exit);
1232     diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c
1233     new file mode 100644
1234     index 000000000000..3c222d6fdee3
1235     --- /dev/null
1236     +++ b/arch/x86/events/rapl.c
1237     @@ -0,0 +1,805 @@
1238     +// SPDX-License-Identifier: GPL-2.0-only
1239     +/*
1240     + * Support Intel/AMD RAPL energy consumption counters
1241     + * Copyright (C) 2013 Google, Inc., Stephane Eranian
1242     + *
1243     + * Intel RAPL interface is specified in the IA-32 Manual Vol3b
1244     + * section 14.7.1 (September 2013)
1245     + *
1246     + * AMD RAPL interface for Fam17h is described in the public PPR:
1247     + * https://bugzilla.kernel.org/show_bug.cgi?id=206537
1248     + *
1249     + * RAPL provides more controls than just reporting energy consumption
1250     + * however here we only expose the 3 energy consumption free running
1251     + * counters (pp0, pkg, dram).
1252     + *
1253     + * Each of those counters increments in a power unit defined by the
1254     + * RAPL_POWER_UNIT MSR. On SandyBridge, this unit is 1/(2^16) Joules
1255     + * but it can vary.
1256     + *
1257     + * Counter to rapl events mappings:
1258     + *
1259     + * pp0 counter: consumption of all physical cores (power plane 0)
1260     + * event: rapl_energy_cores
1261     + * perf code: 0x1
1262     + *
1263     + * pkg counter: consumption of the whole processor package
1264     + * event: rapl_energy_pkg
1265     + * perf code: 0x2
1266     + *
1267     + * dram counter: consumption of the dram domain (servers only)
1268     + * event: rapl_energy_dram
1269     + * perf code: 0x3
1270     + *
1271     + * gpu counter: consumption of the builtin-gpu domain (client only)
1272     + * event: rapl_energy_gpu
1273     + * perf code: 0x4
1274     + *
1275     + * psys counter: consumption of the builtin-psys domain (client only)
1276     + * event: rapl_energy_psys
1277     + * perf code: 0x5
1278     + *
1279     + * We manage those counters as free running (read-only). They may be
1280     + * use simultaneously by other tools, such as turbostat.
1281     + *
1282     + * The events only support system-wide mode counting. There is no
1283     + * sampling support because it does not make sense and is not
1284     + * supported by the RAPL hardware.
1285     + *
1286     + * Because we want to avoid floating-point operations in the kernel,
1287     + * the events are all reported in fixed point arithmetic (32.32).
1288     + * Tools must adjust the counts to convert them to Watts using
1289     + * the duration of the measurement. Tools may use a function such as
1290     + * ldexp(raw_count, -32);
1291     + */
1292     +
1293     +#define pr_fmt(fmt) "RAPL PMU: " fmt
1294     +
1295     +#include <linux/module.h>
1296     +#include <linux/slab.h>
1297     +#include <linux/perf_event.h>
1298     +#include <linux/nospec.h>
1299     +#include <asm/cpu_device_id.h>
1300     +#include <asm/intel-family.h>
1301     +#include "perf_event.h"
1302     +#include "probe.h"
1303     +
1304     +MODULE_LICENSE("GPL");
1305     +
1306     +/*
1307     + * RAPL energy status counters
1308     + */
1309     +enum perf_rapl_events {
1310     + PERF_RAPL_PP0 = 0, /* all cores */
1311     + PERF_RAPL_PKG, /* entire package */
1312     + PERF_RAPL_RAM, /* DRAM */
1313     + PERF_RAPL_PP1, /* gpu */
1314     + PERF_RAPL_PSYS, /* psys */
1315     +
1316     + PERF_RAPL_MAX,
1317     + NR_RAPL_DOMAINS = PERF_RAPL_MAX,
1318     +};
1319     +
1320     +static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = {
1321     + "pp0-core",
1322     + "package",
1323     + "dram",
1324     + "pp1-gpu",
1325     + "psys",
1326     +};
1327     +
1328     +/*
1329     + * event code: LSB 8 bits, passed in attr->config
1330     + * any other bit is reserved
1331     + */
1332     +#define RAPL_EVENT_MASK 0xFFULL
1333     +
1334     +#define DEFINE_RAPL_FORMAT_ATTR(_var, _name, _format) \
1335     +static ssize_t __rapl_##_var##_show(struct kobject *kobj, \
1336     + struct kobj_attribute *attr, \
1337     + char *page) \
1338     +{ \
1339     + BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \
1340     + return sprintf(page, _format "\n"); \
1341     +} \
1342     +static struct kobj_attribute format_attr_##_var = \
1343     + __ATTR(_name, 0444, __rapl_##_var##_show, NULL)
1344     +
1345     +#define RAPL_CNTR_WIDTH 32
1346     +
1347     +#define RAPL_EVENT_ATTR_STR(_name, v, str) \
1348     +static struct perf_pmu_events_attr event_attr_##v = { \
1349     + .attr = __ATTR(_name, 0444, perf_event_sysfs_show, NULL), \
1350     + .id = 0, \
1351     + .event_str = str, \
1352     +};
1353     +
1354     +struct rapl_pmu {
1355     + raw_spinlock_t lock;
1356     + int n_active;
1357     + int cpu;
1358     + struct list_head active_list;
1359     + struct pmu *pmu;
1360     + ktime_t timer_interval;
1361     + struct hrtimer hrtimer;
1362     +};
1363     +
1364     +struct rapl_pmus {
1365     + struct pmu pmu;
1366     + unsigned int maxdie;
1367     + struct rapl_pmu *pmus[];
1368     +};
1369     +
1370     +struct rapl_model {
1371     + unsigned long events;
1372     + bool apply_quirk;
1373     +};
1374     +
1375     + /* 1/2^hw_unit Joule */
1376     +static int rapl_hw_unit[NR_RAPL_DOMAINS] __read_mostly;
1377     +static struct rapl_pmus *rapl_pmus;
1378     +static cpumask_t rapl_cpu_mask;
1379     +static unsigned int rapl_cntr_mask;
1380     +static u64 rapl_timer_ms;
1381     +static struct perf_msr rapl_msrs[];
1382     +
1383     +static inline struct rapl_pmu *cpu_to_rapl_pmu(unsigned int cpu)
1384     +{
1385     + unsigned int dieid = topology_logical_die_id(cpu);
1386     +
1387     + /*
1388     + * The unsigned check also catches the '-1' return value for non
1389     + * existent mappings in the topology map.
1390     + */
1391     + return dieid < rapl_pmus->maxdie ? rapl_pmus->pmus[dieid] : NULL;
1392     +}
1393     +
1394     +static inline u64 rapl_read_counter(struct perf_event *event)
1395     +{
1396     + u64 raw;
1397     + rdmsrl(event->hw.event_base, raw);
1398     + return raw;
1399     +}
1400     +
1401     +static inline u64 rapl_scale(u64 v, int cfg)
1402     +{
1403     + if (cfg > NR_RAPL_DOMAINS) {
1404     + pr_warn("Invalid domain %d, failed to scale data\n", cfg);
1405     + return v;
1406     + }
1407     + /*
1408     + * scale delta to smallest unit (1/2^32)
1409     + * users must then scale back: count * 1/(1e9*2^32) to get Joules
1410     + * or use ldexp(count, -32).
1411     + * Watts = Joules/Time delta
1412     + */
1413     + return v << (32 - rapl_hw_unit[cfg - 1]);
1414     +}
1415     +
1416     +static u64 rapl_event_update(struct perf_event *event)
1417     +{
1418     + struct hw_perf_event *hwc = &event->hw;
1419     + u64 prev_raw_count, new_raw_count;
1420     + s64 delta, sdelta;
1421     + int shift = RAPL_CNTR_WIDTH;
1422     +
1423     +again:
1424     + prev_raw_count = local64_read(&hwc->prev_count);
1425     + rdmsrl(event->hw.event_base, new_raw_count);
1426     +
1427     + if (local64_cmpxchg(&hwc->prev_count, prev_raw_count,
1428     + new_raw_count) != prev_raw_count) {
1429     + cpu_relax();
1430     + goto again;
1431     + }
1432     +
1433     + /*
1434     + * Now we have the new raw value and have updated the prev
1435     + * timestamp already. We can now calculate the elapsed delta
1436     + * (event-)time and add that to the generic event.
1437     + *
1438     + * Careful, not all hw sign-extends above the physical width
1439     + * of the count.
1440     + */
1441     + delta = (new_raw_count << shift) - (prev_raw_count << shift);
1442     + delta >>= shift;
1443     +
1444     + sdelta = rapl_scale(delta, event->hw.config);
1445     +
1446     + local64_add(sdelta, &event->count);
1447     +
1448     + return new_raw_count;
1449     +}
1450     +
1451     +static void rapl_start_hrtimer(struct rapl_pmu *pmu)
1452     +{
1453     + hrtimer_start(&pmu->hrtimer, pmu->timer_interval,
1454     + HRTIMER_MODE_REL_PINNED);
1455     +}
1456     +
1457     +static enum hrtimer_restart rapl_hrtimer_handle(struct hrtimer *hrtimer)
1458     +{
1459     + struct rapl_pmu *pmu = container_of(hrtimer, struct rapl_pmu, hrtimer);
1460     + struct perf_event *event;
1461     + unsigned long flags;
1462     +
1463     + if (!pmu->n_active)
1464     + return HRTIMER_NORESTART;
1465     +
1466     + raw_spin_lock_irqsave(&pmu->lock, flags);
1467     +
1468     + list_for_each_entry(event, &pmu->active_list, active_entry)
1469     + rapl_event_update(event);
1470     +
1471     + raw_spin_unlock_irqrestore(&pmu->lock, flags);
1472     +
1473     + hrtimer_forward_now(hrtimer, pmu->timer_interval);
1474     +
1475     + return HRTIMER_RESTART;
1476     +}
1477     +
1478     +static void rapl_hrtimer_init(struct rapl_pmu *pmu)
1479     +{
1480     + struct hrtimer *hr = &pmu->hrtimer;
1481     +
1482     + hrtimer_init(hr, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
1483     + hr->function = rapl_hrtimer_handle;
1484     +}
1485     +
1486     +static void __rapl_pmu_event_start(struct rapl_pmu *pmu,
1487     + struct perf_event *event)
1488     +{
1489     + if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
1490     + return;
1491     +
1492     + event->hw.state = 0;
1493     +
1494     + list_add_tail(&event->active_entry, &pmu->active_list);
1495     +
1496     + local64_set(&event->hw.prev_count, rapl_read_counter(event));
1497     +
1498     + pmu->n_active++;
1499     + if (pmu->n_active == 1)
1500     + rapl_start_hrtimer(pmu);
1501     +}
1502     +
1503     +static void rapl_pmu_event_start(struct perf_event *event, int mode)
1504     +{
1505     + struct rapl_pmu *pmu = event->pmu_private;
1506     + unsigned long flags;
1507     +
1508     + raw_spin_lock_irqsave(&pmu->lock, flags);
1509     + __rapl_pmu_event_start(pmu, event);
1510     + raw_spin_unlock_irqrestore(&pmu->lock, flags);
1511     +}
1512     +
1513     +static void rapl_pmu_event_stop(struct perf_event *event, int mode)
1514     +{
1515     + struct rapl_pmu *pmu = event->pmu_private;
1516     + struct hw_perf_event *hwc = &event->hw;
1517     + unsigned long flags;
1518     +
1519     + raw_spin_lock_irqsave(&pmu->lock, flags);
1520     +
1521     + /* mark event as deactivated and stopped */
1522     + if (!(hwc->state & PERF_HES_STOPPED)) {
1523     + WARN_ON_ONCE(pmu->n_active <= 0);
1524     + pmu->n_active--;
1525     + if (pmu->n_active == 0)
1526     + hrtimer_cancel(&pmu->hrtimer);
1527     +
1528     + list_del(&event->active_entry);
1529     +
1530     + WARN_ON_ONCE(hwc->state & PERF_HES_STOPPED);
1531     + hwc->state |= PERF_HES_STOPPED;
1532     + }
1533     +
1534     + /* check if update of sw counter is necessary */
1535     + if ((mode & PERF_EF_UPDATE) && !(hwc->state & PERF_HES_UPTODATE)) {
1536     + /*
1537     + * Drain the remaining delta count out of a event
1538     + * that we are disabling:
1539     + */
1540     + rapl_event_update(event);
1541     + hwc->state |= PERF_HES_UPTODATE;
1542     + }
1543     +
1544     + raw_spin_unlock_irqrestore(&pmu->lock, flags);
1545     +}
1546     +
1547     +static int rapl_pmu_event_add(struct perf_event *event, int mode)
1548     +{
1549     + struct rapl_pmu *pmu = event->pmu_private;
1550     + struct hw_perf_event *hwc = &event->hw;
1551     + unsigned long flags;
1552     +
1553     + raw_spin_lock_irqsave(&pmu->lock, flags);
1554     +
1555     + hwc->state = PERF_HES_UPTODATE | PERF_HES_STOPPED;
1556     +
1557     + if (mode & PERF_EF_START)
1558     + __rapl_pmu_event_start(pmu, event);
1559     +
1560     + raw_spin_unlock_irqrestore(&pmu->lock, flags);
1561     +
1562     + return 0;
1563     +}
1564     +
1565     +static void rapl_pmu_event_del(struct perf_event *event, int flags)
1566     +{
1567     + rapl_pmu_event_stop(event, PERF_EF_UPDATE);
1568     +}
1569     +
1570     +static int rapl_pmu_event_init(struct perf_event *event)
1571     +{
1572     + u64 cfg = event->attr.config & RAPL_EVENT_MASK;
1573     + int bit, ret = 0;
1574     + struct rapl_pmu *pmu;
1575     +
1576     + /* only look at RAPL events */
1577     + if (event->attr.type != rapl_pmus->pmu.type)
1578     + return -ENOENT;
1579     +
1580     + /* check only supported bits are set */
1581     + if (event->attr.config & ~RAPL_EVENT_MASK)
1582     + return -EINVAL;
1583     +
1584     + if (event->cpu < 0)
1585     + return -EINVAL;
1586     +
1587     + event->event_caps |= PERF_EV_CAP_READ_ACTIVE_PKG;
1588     +
1589     + if (!cfg || cfg >= NR_RAPL_DOMAINS + 1)
1590     + return -EINVAL;
1591     +
1592     + cfg = array_index_nospec((long)cfg, NR_RAPL_DOMAINS + 1);
1593     + bit = cfg - 1;
1594     +
1595     + /* check event supported */
1596     + if (!(rapl_cntr_mask & (1 << bit)))
1597     + return -EINVAL;
1598     +
1599     + /* unsupported modes and filters */
1600     + if (event->attr.sample_period) /* no sampling */
1601     + return -EINVAL;
1602     +
1603     + /* must be done before validate_group */
1604     + pmu = cpu_to_rapl_pmu(event->cpu);
1605     + if (!pmu)
1606     + return -EINVAL;
1607     + event->cpu = pmu->cpu;
1608     + event->pmu_private = pmu;
1609     + event->hw.event_base = rapl_msrs[bit].msr;
1610     + event->hw.config = cfg;
1611     + event->hw.idx = bit;
1612     +
1613     + return ret;
1614     +}
1615     +
1616     +static void rapl_pmu_event_read(struct perf_event *event)
1617     +{
1618     + rapl_event_update(event);
1619     +}
1620     +
1621     +static ssize_t rapl_get_attr_cpumask(struct device *dev,
1622     + struct device_attribute *attr, char *buf)
1623     +{
1624     + return cpumap_print_to_pagebuf(true, buf, &rapl_cpu_mask);
1625     +}
1626     +
1627     +static DEVICE_ATTR(cpumask, S_IRUGO, rapl_get_attr_cpumask, NULL);
1628     +
1629     +static struct attribute *rapl_pmu_attrs[] = {
1630     + &dev_attr_cpumask.attr,
1631     + NULL,
1632     +};
1633     +
1634     +static struct attribute_group rapl_pmu_attr_group = {
1635     + .attrs = rapl_pmu_attrs,
1636     +};
1637     +
1638     +RAPL_EVENT_ATTR_STR(energy-cores, rapl_cores, "event=0x01");
1639     +RAPL_EVENT_ATTR_STR(energy-pkg , rapl_pkg, "event=0x02");
1640     +RAPL_EVENT_ATTR_STR(energy-ram , rapl_ram, "event=0x03");
1641     +RAPL_EVENT_ATTR_STR(energy-gpu , rapl_gpu, "event=0x04");
1642     +RAPL_EVENT_ATTR_STR(energy-psys, rapl_psys, "event=0x05");
1643     +
1644     +RAPL_EVENT_ATTR_STR(energy-cores.unit, rapl_cores_unit, "Joules");
1645     +RAPL_EVENT_ATTR_STR(energy-pkg.unit , rapl_pkg_unit, "Joules");
1646     +RAPL_EVENT_ATTR_STR(energy-ram.unit , rapl_ram_unit, "Joules");
1647     +RAPL_EVENT_ATTR_STR(energy-gpu.unit , rapl_gpu_unit, "Joules");
1648     +RAPL_EVENT_ATTR_STR(energy-psys.unit, rapl_psys_unit, "Joules");
1649     +
1650     +/*
1651     + * we compute in 0.23 nJ increments regardless of MSR
1652     + */
1653     +RAPL_EVENT_ATTR_STR(energy-cores.scale, rapl_cores_scale, "2.3283064365386962890625e-10");
1654     +RAPL_EVENT_ATTR_STR(energy-pkg.scale, rapl_pkg_scale, "2.3283064365386962890625e-10");
1655     +RAPL_EVENT_ATTR_STR(energy-ram.scale, rapl_ram_scale, "2.3283064365386962890625e-10");
1656     +RAPL_EVENT_ATTR_STR(energy-gpu.scale, rapl_gpu_scale, "2.3283064365386962890625e-10");
1657     +RAPL_EVENT_ATTR_STR(energy-psys.scale, rapl_psys_scale, "2.3283064365386962890625e-10");
1658     +
1659     +/*
1660     + * There are no default events, but we need to create
1661     + * "events" group (with empty attrs) before updating
1662     + * it with detected events.
1663     + */
1664     +static struct attribute *attrs_empty[] = {
1665     + NULL,
1666     +};
1667     +
1668     +static struct attribute_group rapl_pmu_events_group = {
1669     + .name = "events",
1670     + .attrs = attrs_empty,
1671     +};
1672     +
1673     +DEFINE_RAPL_FORMAT_ATTR(event, event, "config:0-7");
1674     +static struct attribute *rapl_formats_attr[] = {
1675     + &format_attr_event.attr,
1676     + NULL,
1677     +};
1678     +
1679     +static struct attribute_group rapl_pmu_format_group = {
1680     + .name = "format",
1681     + .attrs = rapl_formats_attr,
1682     +};
1683     +
1684     +static const struct attribute_group *rapl_attr_groups[] = {
1685     + &rapl_pmu_attr_group,
1686     + &rapl_pmu_format_group,
1687     + &rapl_pmu_events_group,
1688     + NULL,
1689     +};
1690     +
1691     +static struct attribute *rapl_events_cores[] = {
1692     + EVENT_PTR(rapl_cores),
1693     + EVENT_PTR(rapl_cores_unit),
1694     + EVENT_PTR(rapl_cores_scale),
1695     + NULL,
1696     +};
1697     +
1698     +static struct attribute_group rapl_events_cores_group = {
1699     + .name = "events",
1700     + .attrs = rapl_events_cores,
1701     +};
1702     +
1703     +static struct attribute *rapl_events_pkg[] = {
1704     + EVENT_PTR(rapl_pkg),
1705     + EVENT_PTR(rapl_pkg_unit),
1706     + EVENT_PTR(rapl_pkg_scale),
1707     + NULL,
1708     +};
1709     +
1710     +static struct attribute_group rapl_events_pkg_group = {
1711     + .name = "events",
1712     + .attrs = rapl_events_pkg,
1713     +};
1714     +
1715     +static struct attribute *rapl_events_ram[] = {
1716     + EVENT_PTR(rapl_ram),
1717     + EVENT_PTR(rapl_ram_unit),
1718     + EVENT_PTR(rapl_ram_scale),
1719     + NULL,
1720     +};
1721     +
1722     +static struct attribute_group rapl_events_ram_group = {
1723     + .name = "events",
1724     + .attrs = rapl_events_ram,
1725     +};
1726     +
1727     +static struct attribute *rapl_events_gpu[] = {
1728     + EVENT_PTR(rapl_gpu),
1729     + EVENT_PTR(rapl_gpu_unit),
1730     + EVENT_PTR(rapl_gpu_scale),
1731     + NULL,
1732     +};
1733     +
1734     +static struct attribute_group rapl_events_gpu_group = {
1735     + .name = "events",
1736     + .attrs = rapl_events_gpu,
1737     +};
1738     +
1739     +static struct attribute *rapl_events_psys[] = {
1740     + EVENT_PTR(rapl_psys),
1741     + EVENT_PTR(rapl_psys_unit),
1742     + EVENT_PTR(rapl_psys_scale),
1743     + NULL,
1744     +};
1745     +
1746     +static struct attribute_group rapl_events_psys_group = {
1747     + .name = "events",
1748     + .attrs = rapl_events_psys,
1749     +};
1750     +
1751     +static bool test_msr(int idx, void *data)
1752     +{
1753     + return test_bit(idx, (unsigned long *) data);
1754     +}
1755     +
1756     +static struct perf_msr rapl_msrs[] = {
1757     + [PERF_RAPL_PP0] = { MSR_PP0_ENERGY_STATUS, &rapl_events_cores_group, test_msr },
1758     + [PERF_RAPL_PKG] = { MSR_PKG_ENERGY_STATUS, &rapl_events_pkg_group, test_msr },
1759     + [PERF_RAPL_RAM] = { MSR_DRAM_ENERGY_STATUS, &rapl_events_ram_group, test_msr },
1760     + [PERF_RAPL_PP1] = { MSR_PP1_ENERGY_STATUS, &rapl_events_gpu_group, test_msr },
1761     + [PERF_RAPL_PSYS] = { MSR_PLATFORM_ENERGY_STATUS, &rapl_events_psys_group, test_msr },
1762     +};
1763     +
1764     +static int rapl_cpu_offline(unsigned int cpu)
1765     +{
1766     + struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
1767     + int target;
1768     +
1769     + /* Check if exiting cpu is used for collecting rapl events */
1770     + if (!cpumask_test_and_clear_cpu(cpu, &rapl_cpu_mask))
1771     + return 0;
1772     +
1773     + pmu->cpu = -1;
1774     + /* Find a new cpu to collect rapl events */
1775     + target = cpumask_any_but(topology_die_cpumask(cpu), cpu);
1776     +
1777     + /* Migrate rapl events to the new target */
1778     + if (target < nr_cpu_ids) {
1779     + cpumask_set_cpu(target, &rapl_cpu_mask);
1780     + pmu->cpu = target;
1781     + perf_pmu_migrate_context(pmu->pmu, cpu, target);
1782     + }
1783     + return 0;
1784     +}
1785     +
1786     +static int rapl_cpu_online(unsigned int cpu)
1787     +{
1788     + struct rapl_pmu *pmu = cpu_to_rapl_pmu(cpu);
1789     + int target;
1790     +
1791     + if (!pmu) {
1792     + pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu));
1793     + if (!pmu)
1794     + return -ENOMEM;
1795     +
1796     + raw_spin_lock_init(&pmu->lock);
1797     + INIT_LIST_HEAD(&pmu->active_list);
1798     + pmu->pmu = &rapl_pmus->pmu;
1799     + pmu->timer_interval = ms_to_ktime(rapl_timer_ms);
1800     + rapl_hrtimer_init(pmu);
1801     +
1802     + rapl_pmus->pmus[topology_logical_die_id(cpu)] = pmu;
1803     + }
1804     +
1805     + /*
1806     + * Check if there is an online cpu in the package which collects rapl
1807     + * events already.
1808     + */
1809     + target = cpumask_any_and(&rapl_cpu_mask, topology_die_cpumask(cpu));
1810     + if (target < nr_cpu_ids)
1811     + return 0;
1812     +
1813     + cpumask_set_cpu(cpu, &rapl_cpu_mask);
1814     + pmu->cpu = cpu;
1815     + return 0;
1816     +}
1817     +
1818     +static int rapl_check_hw_unit(bool apply_quirk)
1819     +{
1820     + u64 msr_rapl_power_unit_bits;
1821     + int i;
1822     +
1823     + /* protect rdmsrl() to handle virtualization */
1824     + if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &msr_rapl_power_unit_bits))
1825     + return -1;
1826     + for (i = 0; i < NR_RAPL_DOMAINS; i++)
1827     + rapl_hw_unit[i] = (msr_rapl_power_unit_bits >> 8) & 0x1FULL;
1828     +
1829     + /*
1830     + * DRAM domain on HSW server and KNL has fixed energy unit which can be
1831     + * different than the unit from power unit MSR. See
1832     + * "Intel Xeon Processor E5-1600 and E5-2600 v3 Product Families, V2
1833     + * of 2. Datasheet, September 2014, Reference Number: 330784-001 "
1834     + */
1835     + if (apply_quirk)
1836     + rapl_hw_unit[PERF_RAPL_RAM] = 16;
1837     +
1838     + /*
1839     + * Calculate the timer rate:
1840     + * Use reference of 200W for scaling the timeout to avoid counter
1841     + * overflows. 200W = 200 Joules/sec
1842     + * Divide interval by 2 to avoid lockstep (2 * 100)
1843     + * if hw unit is 32, then we use 2 ms 1/200/2
1844     + */
1845     + rapl_timer_ms = 2;
1846     + if (rapl_hw_unit[0] < 32) {
1847     + rapl_timer_ms = (1000 / (2 * 100));
1848     + rapl_timer_ms *= (1ULL << (32 - rapl_hw_unit[0] - 1));
1849     + }
1850     + return 0;
1851     +}
1852     +
1853     +static void __init rapl_advertise(void)
1854     +{
1855     + int i;
1856     +
1857     + pr_info("API unit is 2^-32 Joules, %d fixed counters, %llu ms ovfl timer\n",
1858     + hweight32(rapl_cntr_mask), rapl_timer_ms);
1859     +
1860     + for (i = 0; i < NR_RAPL_DOMAINS; i++) {
1861     + if (rapl_cntr_mask & (1 << i)) {
1862     + pr_info("hw unit of domain %s 2^-%d Joules\n",
1863     + rapl_domain_names[i], rapl_hw_unit[i]);
1864     + }
1865     + }
1866     +}
1867     +
1868     +static void cleanup_rapl_pmus(void)
1869     +{
1870     + int i;
1871     +
1872     + for (i = 0; i < rapl_pmus->maxdie; i++)
1873     + kfree(rapl_pmus->pmus[i]);
1874     + kfree(rapl_pmus);
1875     +}
1876     +
1877     +static const struct attribute_group *rapl_attr_update[] = {
1878     + &rapl_events_cores_group,
1879     + &rapl_events_pkg_group,
1880     + &rapl_events_ram_group,
1881     + &rapl_events_gpu_group,
1882     + &rapl_events_gpu_group,
1883     + NULL,
1884     +};
1885     +
1886     +static int __init init_rapl_pmus(void)
1887     +{
1888     + int maxdie = topology_max_packages() * topology_max_die_per_package();
1889     + size_t size;
1890     +
1891     + size = sizeof(*rapl_pmus) + maxdie * sizeof(struct rapl_pmu *);
1892     + rapl_pmus = kzalloc(size, GFP_KERNEL);
1893     + if (!rapl_pmus)
1894     + return -ENOMEM;
1895     +
1896     + rapl_pmus->maxdie = maxdie;
1897     + rapl_pmus->pmu.attr_groups = rapl_attr_groups;
1898     + rapl_pmus->pmu.attr_update = rapl_attr_update;
1899     + rapl_pmus->pmu.task_ctx_nr = perf_invalid_context;
1900     + rapl_pmus->pmu.event_init = rapl_pmu_event_init;
1901     + rapl_pmus->pmu.add = rapl_pmu_event_add;
1902     + rapl_pmus->pmu.del = rapl_pmu_event_del;
1903     + rapl_pmus->pmu.start = rapl_pmu_event_start;
1904     + rapl_pmus->pmu.stop = rapl_pmu_event_stop;
1905     + rapl_pmus->pmu.read = rapl_pmu_event_read;
1906     + rapl_pmus->pmu.module = THIS_MODULE;
1907     + rapl_pmus->pmu.capabilities = PERF_PMU_CAP_NO_EXCLUDE;
1908     + return 0;
1909     +}
1910     +
1911     +#define X86_RAPL_MODEL_MATCH(model, init) \
1912     + { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&init }
1913     +
1914     +static struct rapl_model model_snb = {
1915     + .events = BIT(PERF_RAPL_PP0) |
1916     + BIT(PERF_RAPL_PKG) |
1917     + BIT(PERF_RAPL_PP1),
1918     + .apply_quirk = false,
1919     +};
1920     +
1921     +static struct rapl_model model_snbep = {
1922     + .events = BIT(PERF_RAPL_PP0) |
1923     + BIT(PERF_RAPL_PKG) |
1924     + BIT(PERF_RAPL_RAM),
1925     + .apply_quirk = false,
1926     +};
1927     +
1928     +static struct rapl_model model_hsw = {
1929     + .events = BIT(PERF_RAPL_PP0) |
1930     + BIT(PERF_RAPL_PKG) |
1931     + BIT(PERF_RAPL_RAM) |
1932     + BIT(PERF_RAPL_PP1),
1933     + .apply_quirk = false,
1934     +};
1935     +
1936     +static struct rapl_model model_hsx = {
1937     + .events = BIT(PERF_RAPL_PP0) |
1938     + BIT(PERF_RAPL_PKG) |
1939     + BIT(PERF_RAPL_RAM),
1940     + .apply_quirk = true,
1941     +};
1942     +
1943     +static struct rapl_model model_knl = {
1944     + .events = BIT(PERF_RAPL_PKG) |
1945     + BIT(PERF_RAPL_RAM),
1946     + .apply_quirk = true,
1947     +};
1948     +
1949     +static struct rapl_model model_skl = {
1950     + .events = BIT(PERF_RAPL_PP0) |
1951     + BIT(PERF_RAPL_PKG) |
1952     + BIT(PERF_RAPL_RAM) |
1953     + BIT(PERF_RAPL_PP1) |
1954     + BIT(PERF_RAPL_PSYS),
1955     + .apply_quirk = false,
1956     +};
1957     +
1958     +static const struct x86_cpu_id rapl_model_match[] __initconst = {
1959     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE, model_snb),
1960     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_SANDYBRIDGE_X, model_snbep),
1961     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE, model_snb),
1962     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_IVYBRIDGE_X, model_snbep),
1963     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL, model_hsw),
1964     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_X, model_hsx),
1965     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_L, model_hsw),
1966     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_HASWELL_G, model_hsw),
1967     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL, model_hsw),
1968     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_G, model_hsw),
1969     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_X, model_hsx),
1970     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_BROADWELL_D, model_hsx),
1971     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNL, model_knl),
1972     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_XEON_PHI_KNM, model_knl),
1973     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_L, model_skl),
1974     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE, model_skl),
1975     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_SKYLAKE_X, model_hsx),
1976     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE_L, model_skl),
1977     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_KABYLAKE, model_skl),
1978     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_CANNONLAKE_L, model_skl),
1979     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT, model_hsw),
1980     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_D, model_hsw),
1981     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_ATOM_GOLDMONT_PLUS, model_hsw),
1982     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE_L, model_skl),
1983     + X86_RAPL_MODEL_MATCH(INTEL_FAM6_ICELAKE, model_skl),
1984     + {},
1985     +};
1986     +
1987     +MODULE_DEVICE_TABLE(x86cpu, rapl_model_match);
1988     +
1989     +static int __init rapl_pmu_init(void)
1990     +{
1991     + const struct x86_cpu_id *id;
1992     + struct rapl_model *rm;
1993     + int ret;
1994     +
1995     + id = x86_match_cpu(rapl_model_match);
1996     + if (!id)
1997     + return -ENODEV;
1998     +
1999     + rm = (struct rapl_model *) id->driver_data;
2000     + rapl_cntr_mask = perf_msr_probe(rapl_msrs, PERF_RAPL_MAX,
2001     + false, (void *) &rm->events);
2002     +
2003     + ret = rapl_check_hw_unit(rm->apply_quirk);
2004     + if (ret)
2005     + return ret;
2006     +
2007     + ret = init_rapl_pmus();
2008     + if (ret)
2009     + return ret;
2010     +
2011     + /*
2012     + * Install callbacks. Core will call them for each online cpu.
2013     + */
2014     + ret = cpuhp_setup_state(CPUHP_AP_PERF_X86_RAPL_ONLINE,
2015     + "perf/x86/rapl:online",
2016     + rapl_cpu_online, rapl_cpu_offline);
2017     + if (ret)
2018     + goto out;
2019     +
2020     + ret = perf_pmu_register(&rapl_pmus->pmu, "power", -1);
2021     + if (ret)
2022     + goto out1;
2023     +
2024     + rapl_advertise();
2025     + return 0;
2026     +
2027     +out1:
2028     + cpuhp_remove_state(CPUHP_AP_PERF_X86_RAPL_ONLINE);
2029     +out:
2030     + pr_warn("Initialization failed (%d), disabled\n", ret);
2031     + cleanup_rapl_pmus();
2032     + return ret;
2033     +}
2034     +module_init(rapl_pmu_init);
2035     +
2036     +static void __exit intel_rapl_exit(void)
2037     +{
2038     + cpuhp_remove_state_nocalls(CPUHP_AP_PERF_X86_RAPL_ONLINE);
2039     + perf_pmu_unregister(&rapl_pmus->pmu);
2040     + cleanup_rapl_pmus();
2041     +}
2042     +module_exit(intel_rapl_exit);
2043     diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
2044     index 54f5d54280f6..a07dfdf7759e 100644
2045     --- a/arch/x86/include/asm/processor.h
2046     +++ b/arch/x86/include/asm/processor.h
2047     @@ -334,7 +334,7 @@ struct x86_hw_tss {
2048     #define INVALID_IO_BITMAP_OFFSET 0x8000
2049    
2050     struct entry_stack {
2051     - unsigned long words[64];
2052     + char stack[PAGE_SIZE];
2053     };
2054    
2055     struct entry_stack_page {
2056     diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h
2057     index 1cc6c47dc77e..341f58a01de0 100644
2058     --- a/arch/x86/kvm/kvm_cache_regs.h
2059     +++ b/arch/x86/kvm/kvm_cache_regs.h
2060     @@ -7,7 +7,7 @@
2061     #define KVM_POSSIBLE_CR0_GUEST_BITS X86_CR0_TS
2062     #define KVM_POSSIBLE_CR4_GUEST_BITS \
2063     (X86_CR4_PVI | X86_CR4_DE | X86_CR4_PCE | X86_CR4_OSFXSR \
2064     - | X86_CR4_OSXMMEXCPT | X86_CR4_LA57 | X86_CR4_PGE)
2065     + | X86_CR4_OSXMMEXCPT | X86_CR4_LA57 | X86_CR4_PGE | X86_CR4_TSD)
2066    
2067     #define BUILD_KVM_GPR_ACCESSORS(lname, uname) \
2068     static __always_inline unsigned long kvm_##lname##_read(struct kvm_vcpu *vcpu)\
2069     diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
2070     index aab02ea2d2cb..342d9ddf35c3 100644
2071     --- a/arch/x86/kvm/mmu.c
2072     +++ b/arch/x86/kvm/mmu.c
2073     @@ -4580,7 +4580,7 @@ __reset_rsvds_bits_mask(struct kvm_vcpu *vcpu,
2074     nonleaf_bit8_rsvd | rsvd_bits(7, 7) |
2075     rsvd_bits(maxphyaddr, 51);
2076     rsvd_check->rsvd_bits_mask[0][2] = exb_bit_rsvd |
2077     - nonleaf_bit8_rsvd | gbpages_bit_rsvd |
2078     + gbpages_bit_rsvd |
2079     rsvd_bits(maxphyaddr, 51);
2080     rsvd_check->rsvd_bits_mask[0][1] = exb_bit_rsvd |
2081     rsvd_bits(maxphyaddr, 51);
2082     diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
2083     index 10e6471896cd..3be65495aeb8 100644
2084     --- a/arch/x86/kvm/vmx/vmx.c
2085     +++ b/arch/x86/kvm/vmx/vmx.c
2086     @@ -3913,6 +3913,8 @@ void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
2087    
2088     void set_cr4_guest_host_mask(struct vcpu_vmx *vmx)
2089     {
2090     + BUILD_BUG_ON(KVM_CR4_GUEST_OWNED_BITS & ~KVM_POSSIBLE_CR4_GUEST_BITS);
2091     +
2092     vmx->vcpu.arch.cr4_guest_owned_bits = KVM_CR4_GUEST_OWNED_BITS;
2093     if (enable_ept)
2094     vmx->vcpu.arch.cr4_guest_owned_bits |= X86_CR4_PGE;
2095     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
2096     index eed1866ae4d3..38b2df0e7109 100644
2097     --- a/arch/x86/kvm/x86.c
2098     +++ b/arch/x86/kvm/x86.c
2099     @@ -980,6 +980,8 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
2100     if (is_long_mode(vcpu)) {
2101     if (!(cr4 & X86_CR4_PAE))
2102     return 1;
2103     + if ((cr4 ^ old_cr4) & X86_CR4_LA57)
2104     + return 1;
2105     } else if (is_paging(vcpu) && (cr4 & X86_CR4_PAE)
2106     && ((cr4 ^ old_cr4) & pdptr_bits)
2107     && !load_pdptrs(vcpu, vcpu->arch.walk_mmu,
2108     diff --git a/block/bio-integrity.c b/block/bio-integrity.c
2109     index ae07dd78e951..c9dc2b17ce25 100644
2110     --- a/block/bio-integrity.c
2111     +++ b/block/bio-integrity.c
2112     @@ -24,6 +24,18 @@ void blk_flush_integrity(void)
2113     flush_workqueue(kintegrityd_wq);
2114     }
2115    
2116     +void __bio_integrity_free(struct bio_set *bs, struct bio_integrity_payload *bip)
2117     +{
2118     + if (bs && mempool_initialized(&bs->bio_integrity_pool)) {
2119     + if (bip->bip_vec)
2120     + bvec_free(&bs->bvec_integrity_pool, bip->bip_vec,
2121     + bip->bip_slab);
2122     + mempool_free(bip, &bs->bio_integrity_pool);
2123     + } else {
2124     + kfree(bip);
2125     + }
2126     +}
2127     +
2128     /**
2129     * bio_integrity_alloc - Allocate integrity payload and attach it to bio
2130     * @bio: bio to attach integrity metadata to
2131     @@ -75,7 +87,7 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio,
2132    
2133     return bip;
2134     err:
2135     - mempool_free(bip, &bs->bio_integrity_pool);
2136     + __bio_integrity_free(bs, bip);
2137     return ERR_PTR(-ENOMEM);
2138     }
2139     EXPORT_SYMBOL(bio_integrity_alloc);
2140     @@ -96,14 +108,7 @@ void bio_integrity_free(struct bio *bio)
2141     kfree(page_address(bip->bip_vec->bv_page) +
2142     bip->bip_vec->bv_offset);
2143    
2144     - if (bs && mempool_initialized(&bs->bio_integrity_pool)) {
2145     - bvec_free(&bs->bvec_integrity_pool, bip->bip_vec, bip->bip_slab);
2146     -
2147     - mempool_free(bip, &bs->bio_integrity_pool);
2148     - } else {
2149     - kfree(bip);
2150     - }
2151     -
2152     + __bio_integrity_free(bs, bip);
2153     bio->bi_integrity = NULL;
2154     bio->bi_opf &= ~REQ_INTEGRITY;
2155     }
2156     diff --git a/block/blk-mq.c b/block/blk-mq.c
2157     index f1b930a300a3..ae7d31cb5a4e 100644
2158     --- a/block/blk-mq.c
2159     +++ b/block/blk-mq.c
2160     @@ -829,10 +829,10 @@ static bool blk_mq_rq_inflight(struct blk_mq_hw_ctx *hctx, struct request *rq,
2161     void *priv, bool reserved)
2162     {
2163     /*
2164     - * If we find a request that is inflight and the queue matches,
2165     + * If we find a request that isn't idle and the queue matches,
2166     * we know the queue is busy. Return false to stop the iteration.
2167     */
2168     - if (rq->state == MQ_RQ_IN_FLIGHT && rq->q == hctx->queue) {
2169     + if (blk_mq_request_started(rq) && rq->q == hctx->queue) {
2170     bool *busy = priv;
2171    
2172     *busy = true;
2173     diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
2174     index 508bbd6ea439..320d23de02c2 100644
2175     --- a/drivers/base/regmap/regmap.c
2176     +++ b/drivers/base/regmap/regmap.c
2177     @@ -17,6 +17,7 @@
2178     #include <linux/delay.h>
2179     #include <linux/log2.h>
2180     #include <linux/hwspinlock.h>
2181     +#include <asm/unaligned.h>
2182    
2183     #define CREATE_TRACE_POINTS
2184     #include "trace.h"
2185     @@ -249,22 +250,20 @@ static void regmap_format_8(void *buf, unsigned int val, unsigned int shift)
2186    
2187     static void regmap_format_16_be(void *buf, unsigned int val, unsigned int shift)
2188     {
2189     - __be16 *b = buf;
2190     -
2191     - b[0] = cpu_to_be16(val << shift);
2192     + put_unaligned_be16(val << shift, buf);
2193     }
2194    
2195     static void regmap_format_16_le(void *buf, unsigned int val, unsigned int shift)
2196     {
2197     - __le16 *b = buf;
2198     -
2199     - b[0] = cpu_to_le16(val << shift);
2200     + put_unaligned_le16(val << shift, buf);
2201     }
2202    
2203     static void regmap_format_16_native(void *buf, unsigned int val,
2204     unsigned int shift)
2205     {
2206     - *(u16 *)buf = val << shift;
2207     + u16 v = val << shift;
2208     +
2209     + memcpy(buf, &v, sizeof(v));
2210     }
2211    
2212     static void regmap_format_24(void *buf, unsigned int val, unsigned int shift)
2213     @@ -280,43 +279,39 @@ static void regmap_format_24(void *buf, unsigned int val, unsigned int shift)
2214    
2215     static void regmap_format_32_be(void *buf, unsigned int val, unsigned int shift)
2216     {
2217     - __be32 *b = buf;
2218     -
2219     - b[0] = cpu_to_be32(val << shift);
2220     + put_unaligned_be32(val << shift, buf);
2221     }
2222    
2223     static void regmap_format_32_le(void *buf, unsigned int val, unsigned int shift)
2224     {
2225     - __le32 *b = buf;
2226     -
2227     - b[0] = cpu_to_le32(val << shift);
2228     + put_unaligned_le32(val << shift, buf);
2229     }
2230    
2231     static void regmap_format_32_native(void *buf, unsigned int val,
2232     unsigned int shift)
2233     {
2234     - *(u32 *)buf = val << shift;
2235     + u32 v = val << shift;
2236     +
2237     + memcpy(buf, &v, sizeof(v));
2238     }
2239    
2240     #ifdef CONFIG_64BIT
2241     static void regmap_format_64_be(void *buf, unsigned int val, unsigned int shift)
2242     {
2243     - __be64 *b = buf;
2244     -
2245     - b[0] = cpu_to_be64((u64)val << shift);
2246     + put_unaligned_be64((u64) val << shift, buf);
2247     }
2248    
2249     static void regmap_format_64_le(void *buf, unsigned int val, unsigned int shift)
2250     {
2251     - __le64 *b = buf;
2252     -
2253     - b[0] = cpu_to_le64((u64)val << shift);
2254     + put_unaligned_le64((u64) val << shift, buf);
2255     }
2256    
2257     static void regmap_format_64_native(void *buf, unsigned int val,
2258     unsigned int shift)
2259     {
2260     - *(u64 *)buf = (u64)val << shift;
2261     + u64 v = (u64) val << shift;
2262     +
2263     + memcpy(buf, &v, sizeof(v));
2264     }
2265     #endif
2266    
2267     @@ -333,35 +328,34 @@ static unsigned int regmap_parse_8(const void *buf)
2268    
2269     static unsigned int regmap_parse_16_be(const void *buf)
2270     {
2271     - const __be16 *b = buf;
2272     -
2273     - return be16_to_cpu(b[0]);
2274     + return get_unaligned_be16(buf);
2275     }
2276    
2277     static unsigned int regmap_parse_16_le(const void *buf)
2278     {
2279     - const __le16 *b = buf;
2280     -
2281     - return le16_to_cpu(b[0]);
2282     + return get_unaligned_le16(buf);
2283     }
2284    
2285     static void regmap_parse_16_be_inplace(void *buf)
2286     {
2287     - __be16 *b = buf;
2288     + u16 v = get_unaligned_be16(buf);
2289    
2290     - b[0] = be16_to_cpu(b[0]);
2291     + memcpy(buf, &v, sizeof(v));
2292     }
2293    
2294     static void regmap_parse_16_le_inplace(void *buf)
2295     {
2296     - __le16 *b = buf;
2297     + u16 v = get_unaligned_le16(buf);
2298    
2299     - b[0] = le16_to_cpu(b[0]);
2300     + memcpy(buf, &v, sizeof(v));
2301     }
2302    
2303     static unsigned int regmap_parse_16_native(const void *buf)
2304     {
2305     - return *(u16 *)buf;
2306     + u16 v;
2307     +
2308     + memcpy(&v, buf, sizeof(v));
2309     + return v;
2310     }
2311    
2312     static unsigned int regmap_parse_24(const void *buf)
2313     @@ -376,69 +370,67 @@ static unsigned int regmap_parse_24(const void *buf)
2314    
2315     static unsigned int regmap_parse_32_be(const void *buf)
2316     {
2317     - const __be32 *b = buf;
2318     -
2319     - return be32_to_cpu(b[0]);
2320     + return get_unaligned_be32(buf);
2321     }
2322    
2323     static unsigned int regmap_parse_32_le(const void *buf)
2324     {
2325     - const __le32 *b = buf;
2326     -
2327     - return le32_to_cpu(b[0]);
2328     + return get_unaligned_le32(buf);
2329     }
2330    
2331     static void regmap_parse_32_be_inplace(void *buf)
2332     {
2333     - __be32 *b = buf;
2334     + u32 v = get_unaligned_be32(buf);
2335    
2336     - b[0] = be32_to_cpu(b[0]);
2337     + memcpy(buf, &v, sizeof(v));
2338     }
2339    
2340     static void regmap_parse_32_le_inplace(void *buf)
2341     {
2342     - __le32 *b = buf;
2343     + u32 v = get_unaligned_le32(buf);
2344    
2345     - b[0] = le32_to_cpu(b[0]);
2346     + memcpy(buf, &v, sizeof(v));
2347     }
2348    
2349     static unsigned int regmap_parse_32_native(const void *buf)
2350     {
2351     - return *(u32 *)buf;
2352     + u32 v;
2353     +
2354     + memcpy(&v, buf, sizeof(v));
2355     + return v;
2356     }
2357    
2358     #ifdef CONFIG_64BIT
2359     static unsigned int regmap_parse_64_be(const void *buf)
2360     {
2361     - const __be64 *b = buf;
2362     -
2363     - return be64_to_cpu(b[0]);
2364     + return get_unaligned_be64(buf);
2365     }
2366    
2367     static unsigned int regmap_parse_64_le(const void *buf)
2368     {
2369     - const __le64 *b = buf;
2370     -
2371     - return le64_to_cpu(b[0]);
2372     + return get_unaligned_le64(buf);
2373     }
2374    
2375     static void regmap_parse_64_be_inplace(void *buf)
2376     {
2377     - __be64 *b = buf;
2378     + u64 v = get_unaligned_be64(buf);
2379    
2380     - b[0] = be64_to_cpu(b[0]);
2381     + memcpy(buf, &v, sizeof(v));
2382     }
2383    
2384     static void regmap_parse_64_le_inplace(void *buf)
2385     {
2386     - __le64 *b = buf;
2387     + u64 v = get_unaligned_le64(buf);
2388    
2389     - b[0] = le64_to_cpu(b[0]);
2390     + memcpy(buf, &v, sizeof(v));
2391     }
2392    
2393     static unsigned int regmap_parse_64_native(const void *buf)
2394     {
2395     - return *(u64 *)buf;
2396     + u64 v;
2397     +
2398     + memcpy(&v, buf, sizeof(v));
2399     + return v;
2400     }
2401     #endif
2402    
2403     diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
2404     index 78181908f0df..7b61d53ba050 100644
2405     --- a/drivers/block/nbd.c
2406     +++ b/drivers/block/nbd.c
2407     @@ -1022,25 +1022,26 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,
2408     test_bit(NBD_RT_BOUND, &config->runtime_flags))) {
2409     dev_err(disk_to_dev(nbd->disk),
2410     "Device being setup by another task");
2411     - sockfd_put(sock);
2412     - return -EBUSY;
2413     + err = -EBUSY;
2414     + goto put_socket;
2415     + }
2416     +
2417     + nsock = kzalloc(sizeof(*nsock), GFP_KERNEL);
2418     + if (!nsock) {
2419     + err = -ENOMEM;
2420     + goto put_socket;
2421     }
2422    
2423     socks = krealloc(config->socks, (config->num_connections + 1) *
2424     sizeof(struct nbd_sock *), GFP_KERNEL);
2425     if (!socks) {
2426     - sockfd_put(sock);
2427     - return -ENOMEM;
2428     + kfree(nsock);
2429     + err = -ENOMEM;
2430     + goto put_socket;
2431     }
2432    
2433     config->socks = socks;
2434    
2435     - nsock = kzalloc(sizeof(struct nbd_sock), GFP_KERNEL);
2436     - if (!nsock) {
2437     - sockfd_put(sock);
2438     - return -ENOMEM;
2439     - }
2440     -
2441     nsock->fallback_index = -1;
2442     nsock->dead = false;
2443     mutex_init(&nsock->tx_lock);
2444     @@ -1052,6 +1053,10 @@ static int nbd_add_socket(struct nbd_device *nbd, unsigned long arg,
2445     atomic_inc(&config->live_connections);
2446    
2447     return 0;
2448     +
2449     +put_socket:
2450     + sockfd_put(sock);
2451     + return err;
2452     }
2453    
2454     static int nbd_reconnect_socket(struct nbd_device *nbd, unsigned long arg)
2455     diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
2456     index 29ba26742c8f..81f5103dccb6 100644
2457     --- a/drivers/gpio/gpio-pca953x.c
2458     +++ b/drivers/gpio/gpio-pca953x.c
2459     @@ -107,6 +107,84 @@ static const struct i2c_device_id pca953x_id[] = {
2460     };
2461     MODULE_DEVICE_TABLE(i2c, pca953x_id);
2462    
2463     +#ifdef CONFIG_GPIO_PCA953X_IRQ
2464     +
2465     +#include <linux/dmi.h>
2466     +#include <linux/gpio.h>
2467     +#include <linux/list.h>
2468     +
2469     +static const struct dmi_system_id pca953x_dmi_acpi_irq_info[] = {
2470     + {
2471     + /*
2472     + * On Intel Galileo Gen 2 board the IRQ pin of one of
2473     + * the I²C GPIO expanders, which has GpioInt() resource,
2474     + * is provided as an absolute number instead of being
2475     + * relative. Since first controller (gpio-sch.c) and
2476     + * second (gpio-dwapb.c) are at the fixed bases, we may
2477     + * safely refer to the number in the global space to get
2478     + * an IRQ out of it.
2479     + */
2480     + .matches = {
2481     + DMI_EXACT_MATCH(DMI_BOARD_NAME, "GalileoGen2"),
2482     + },
2483     + },
2484     + {}
2485     +};
2486     +
2487     +#ifdef CONFIG_ACPI
2488     +static int pca953x_acpi_get_pin(struct acpi_resource *ares, void *data)
2489     +{
2490     + struct acpi_resource_gpio *agpio;
2491     + int *pin = data;
2492     +
2493     + if (acpi_gpio_get_irq_resource(ares, &agpio))
2494     + *pin = agpio->pin_table[0];
2495     + return 1;
2496     +}
2497     +
2498     +static int pca953x_acpi_find_pin(struct device *dev)
2499     +{
2500     + struct acpi_device *adev = ACPI_COMPANION(dev);
2501     + int pin = -ENOENT, ret;
2502     + LIST_HEAD(r);
2503     +
2504     + ret = acpi_dev_get_resources(adev, &r, pca953x_acpi_get_pin, &pin);
2505     + acpi_dev_free_resource_list(&r);
2506     + if (ret < 0)
2507     + return ret;
2508     +
2509     + return pin;
2510     +}
2511     +#else
2512     +static inline int pca953x_acpi_find_pin(struct device *dev) { return -ENXIO; }
2513     +#endif
2514     +
2515     +static int pca953x_acpi_get_irq(struct device *dev)
2516     +{
2517     + int pin, ret;
2518     +
2519     + pin = pca953x_acpi_find_pin(dev);
2520     + if (pin < 0)
2521     + return pin;
2522     +
2523     + dev_info(dev, "Applying ACPI interrupt quirk (GPIO %d)\n", pin);
2524     +
2525     + if (!gpio_is_valid(pin))
2526     + return -EINVAL;
2527     +
2528     + ret = gpio_request(pin, "pca953x interrupt");
2529     + if (ret)
2530     + return ret;
2531     +
2532     + ret = gpio_to_irq(pin);
2533     +
2534     + /* When pin is used as an IRQ, no need to keep it requested */
2535     + gpio_free(pin);
2536     +
2537     + return ret;
2538     +}
2539     +#endif
2540     +
2541     static const struct acpi_device_id pca953x_acpi_ids[] = {
2542     { "INT3491", 16 | PCA953X_TYPE | PCA_LATCH_INT, },
2543     { }
2544     @@ -772,6 +850,12 @@ static int pca953x_irq_setup(struct pca953x_chip *chip,
2545     u8 reg_direction[MAX_BANK];
2546     int ret, i;
2547    
2548     + if (dmi_first_match(pca953x_dmi_acpi_irq_info)) {
2549     + ret = pca953x_acpi_get_irq(&client->dev);
2550     + if (ret > 0)
2551     + client->irq = ret;
2552     + }
2553     +
2554     if (!client->irq)
2555     return 0;
2556    
2557     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
2558     index 96b2a31ccfed..f06a5142d66e 100644
2559     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
2560     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
2561     @@ -36,7 +36,8 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job)
2562    
2563     memset(&ti, 0, sizeof(struct amdgpu_task_info));
2564    
2565     - if (amdgpu_ring_soft_recovery(ring, job->vmid, s_job->s_fence->parent)) {
2566     + if (amdgpu_gpu_recovery &&
2567     + amdgpu_ring_soft_recovery(ring, job->vmid, s_job->s_fence->parent)) {
2568     DRM_ERROR("ring %s timeout, but soft recovered\n",
2569     s_job->sched->name);
2570     return;
2571     diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c
2572     index ffd95bfeaa94..d00ea384dcbf 100644
2573     --- a/drivers/gpu/drm/drm_panel_orientation_quirks.c
2574     +++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c
2575     @@ -30,12 +30,6 @@ struct drm_dmi_panel_orientation_data {
2576     int orientation;
2577     };
2578    
2579     -static const struct drm_dmi_panel_orientation_data acer_s1003 = {
2580     - .width = 800,
2581     - .height = 1280,
2582     - .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
2583     -};
2584     -
2585     static const struct drm_dmi_panel_orientation_data asus_t100ha = {
2586     .width = 800,
2587     .height = 1280,
2588     @@ -114,13 +108,19 @@ static const struct dmi_system_id orientation_data[] = {
2589     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"),
2590     DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"),
2591     },
2592     - .driver_data = (void *)&acer_s1003,
2593     + .driver_data = (void *)&lcd800x1280_rightside_up,
2594     }, { /* Asus T100HA */
2595     .matches = {
2596     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
2597     DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100HAN"),
2598     },
2599     .driver_data = (void *)&asus_t100ha,
2600     + }, { /* Asus T101HA */
2601     + .matches = {
2602     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
2603     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T101HA"),
2604     + },
2605     + .driver_data = (void *)&lcd800x1280_rightside_up,
2606     }, { /* GPD MicroPC (generic strings, also match on bios date) */
2607     .matches = {
2608     DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
2609     diff --git a/drivers/gpu/drm/mcde/mcde_drv.c b/drivers/gpu/drm/mcde/mcde_drv.c
2610     index 5649887d2b90..16e5fb9ec784 100644
2611     --- a/drivers/gpu/drm/mcde/mcde_drv.c
2612     +++ b/drivers/gpu/drm/mcde/mcde_drv.c
2613     @@ -215,7 +215,6 @@ static int mcde_modeset_init(struct drm_device *drm)
2614    
2615     drm_mode_config_reset(drm);
2616     drm_kms_helper_poll_init(drm);
2617     - drm_fbdev_generic_setup(drm, 32);
2618    
2619     return 0;
2620    
2621     @@ -282,6 +281,8 @@ static int mcde_drm_bind(struct device *dev)
2622     if (ret < 0)
2623     goto unbind;
2624    
2625     + drm_fbdev_generic_setup(drm, 32);
2626     +
2627     return 0;
2628    
2629     unbind:
2630     diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
2631     index 584a9ecadce6..b7592b16ea94 100644
2632     --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
2633     +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
2634     @@ -101,6 +101,16 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
2635     true, true);
2636     }
2637    
2638     +static void mtk_plane_atomic_disable(struct drm_plane *plane,
2639     + struct drm_plane_state *old_state)
2640     +{
2641     + struct mtk_plane_state *state = to_mtk_plane_state(plane->state);
2642     +
2643     + state->pending.enable = false;
2644     + wmb(); /* Make sure the above parameter is set before update */
2645     + state->pending.dirty = true;
2646     +}
2647     +
2648     static void mtk_plane_atomic_update(struct drm_plane *plane,
2649     struct drm_plane_state *old_state)
2650     {
2651     @@ -115,6 +125,11 @@ static void mtk_plane_atomic_update(struct drm_plane *plane,
2652     if (!crtc || WARN_ON(!fb))
2653     return;
2654    
2655     + if (!plane->state->visible) {
2656     + mtk_plane_atomic_disable(plane, old_state);
2657     + return;
2658     + }
2659     +
2660     gem = fb->obj[0];
2661     mtk_gem = to_mtk_gem_obj(gem);
2662     addr = mtk_gem->dma_addr;
2663     @@ -136,16 +151,6 @@ static void mtk_plane_atomic_update(struct drm_plane *plane,
2664     state->pending.dirty = true;
2665     }
2666    
2667     -static void mtk_plane_atomic_disable(struct drm_plane *plane,
2668     - struct drm_plane_state *old_state)
2669     -{
2670     - struct mtk_plane_state *state = to_mtk_plane_state(plane->state);
2671     -
2672     - state->pending.enable = false;
2673     - wmb(); /* Make sure the above parameter is set before update */
2674     - state->pending.dirty = true;
2675     -}
2676     -
2677     static const struct drm_plane_helper_funcs mtk_plane_helper_funcs = {
2678     .prepare_fb = drm_gem_fb_prepare_fb,
2679     .atomic_check = mtk_plane_atomic_check,
2680     diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
2681     index c6fd123f60b5..f9685cce1652 100644
2682     --- a/drivers/gpu/drm/radeon/ci_dpm.c
2683     +++ b/drivers/gpu/drm/radeon/ci_dpm.c
2684     @@ -5578,6 +5578,7 @@ static int ci_parse_power_table(struct radeon_device *rdev)
2685     if (!rdev->pm.dpm.ps)
2686     return -ENOMEM;
2687     power_state_offset = (u8 *)state_array->states;
2688     + rdev->pm.dpm.num_ps = 0;
2689     for (i = 0; i < state_array->ucNumEntries; i++) {
2690     u8 *idx;
2691     power_state = (union pplib_power_state *)power_state_offset;
2692     @@ -5587,10 +5588,8 @@ static int ci_parse_power_table(struct radeon_device *rdev)
2693     if (!rdev->pm.power_state[i].clock_info)
2694     return -EINVAL;
2695     ps = kzalloc(sizeof(struct ci_ps), GFP_KERNEL);
2696     - if (ps == NULL) {
2697     - kfree(rdev->pm.dpm.ps);
2698     + if (ps == NULL)
2699     return -ENOMEM;
2700     - }
2701     rdev->pm.dpm.ps[i].ps_priv = ps;
2702     ci_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i],
2703     non_clock_info,
2704     @@ -5612,8 +5611,8 @@ static int ci_parse_power_table(struct radeon_device *rdev)
2705     k++;
2706     }
2707     power_state_offset += 2 + power_state->v2.ucNumDPMLevels;
2708     + rdev->pm.dpm.num_ps = i + 1;
2709     }
2710     - rdev->pm.dpm.num_ps = state_array->ucNumEntries;
2711    
2712     /* fill in the vce power states */
2713     for (i = 0; i < RADEON_MAX_VCE_LEVELS; i++) {
2714     diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c
2715     index 839b49c40e51..767fb440a79d 100644
2716     --- a/drivers/gpu/drm/tegra/hub.c
2717     +++ b/drivers/gpu/drm/tegra/hub.c
2718     @@ -141,7 +141,9 @@ int tegra_display_hub_prepare(struct tegra_display_hub *hub)
2719     for (i = 0; i < hub->soc->num_wgrps; i++) {
2720     struct tegra_windowgroup *wgrp = &hub->wgrps[i];
2721    
2722     - tegra_windowgroup_enable(wgrp);
2723     + /* Skip orphaned window group whose parent DC is disabled */
2724     + if (wgrp->parent)
2725     + tegra_windowgroup_enable(wgrp);
2726     }
2727    
2728     return 0;
2729     @@ -158,7 +160,9 @@ void tegra_display_hub_cleanup(struct tegra_display_hub *hub)
2730     for (i = 0; i < hub->soc->num_wgrps; i++) {
2731     struct tegra_windowgroup *wgrp = &hub->wgrps[i];
2732    
2733     - tegra_windowgroup_disable(wgrp);
2734     + /* Skip orphaned window group whose parent DC is disabled */
2735     + if (wgrp->parent)
2736     + tegra_windowgroup_disable(wgrp);
2737     }
2738     }
2739    
2740     diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
2741     index abf165b2f64f..3ce8ad7603c7 100644
2742     --- a/drivers/gpu/drm/ttm/ttm_bo.c
2743     +++ b/drivers/gpu/drm/ttm/ttm_bo.c
2744     @@ -941,8 +941,10 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo,
2745     if (!fence)
2746     return 0;
2747    
2748     - if (no_wait_gpu)
2749     + if (no_wait_gpu) {
2750     + dma_fence_put(fence);
2751     return -EBUSY;
2752     + }
2753    
2754     dma_resv_add_shared_fence(bo->base.resv, fence);
2755    
2756     diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c
2757     index 742aa9ff21b8..fcda8621ae6f 100644
2758     --- a/drivers/gpu/host1x/bus.c
2759     +++ b/drivers/gpu/host1x/bus.c
2760     @@ -686,8 +686,17 @@ EXPORT_SYMBOL(host1x_driver_register_full);
2761     */
2762     void host1x_driver_unregister(struct host1x_driver *driver)
2763     {
2764     + struct host1x *host1x;
2765     +
2766     driver_unregister(&driver->driver);
2767    
2768     + mutex_lock(&devices_lock);
2769     +
2770     + list_for_each_entry(host1x, &devices, list)
2771     + host1x_detach_driver(host1x, driver);
2772     +
2773     + mutex_unlock(&devices_lock);
2774     +
2775     mutex_lock(&drivers_lock);
2776     list_del_init(&driver->list);
2777     mutex_unlock(&drivers_lock);
2778     diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
2779     index bddb5434fbed..d2d70c89193f 100644
2780     --- a/drivers/infiniband/core/sa_query.c
2781     +++ b/drivers/infiniband/core/sa_query.c
2782     @@ -829,13 +829,20 @@ static int ib_nl_get_path_rec_attrs_len(ib_sa_comp_mask comp_mask)
2783     return len;
2784     }
2785    
2786     -static int ib_nl_send_msg(struct ib_sa_query *query, gfp_t gfp_mask)
2787     +static int ib_nl_make_request(struct ib_sa_query *query, gfp_t gfp_mask)
2788     {
2789     struct sk_buff *skb = NULL;
2790     struct nlmsghdr *nlh;
2791     void *data;
2792     struct ib_sa_mad *mad;
2793     int len;
2794     + unsigned long flags;
2795     + unsigned long delay;
2796     + gfp_t gfp_flag;
2797     + int ret;
2798     +
2799     + INIT_LIST_HEAD(&query->list);
2800     + query->seq = (u32)atomic_inc_return(&ib_nl_sa_request_seq);
2801    
2802     mad = query->mad_buf->mad;
2803     len = ib_nl_get_path_rec_attrs_len(mad->sa_hdr.comp_mask);
2804     @@ -860,36 +867,25 @@ static int ib_nl_send_msg(struct ib_sa_query *query, gfp_t gfp_mask)
2805     /* Repair the nlmsg header length */
2806     nlmsg_end(skb, nlh);
2807    
2808     - return rdma_nl_multicast(&init_net, skb, RDMA_NL_GROUP_LS, gfp_mask);
2809     -}
2810     + gfp_flag = ((gfp_mask & GFP_ATOMIC) == GFP_ATOMIC) ? GFP_ATOMIC :
2811     + GFP_NOWAIT;
2812    
2813     -static int ib_nl_make_request(struct ib_sa_query *query, gfp_t gfp_mask)
2814     -{
2815     - unsigned long flags;
2816     - unsigned long delay;
2817     - int ret;
2818     + spin_lock_irqsave(&ib_nl_request_lock, flags);
2819     + ret = rdma_nl_multicast(&init_net, skb, RDMA_NL_GROUP_LS, gfp_flag);
2820    
2821     - INIT_LIST_HEAD(&query->list);
2822     - query->seq = (u32)atomic_inc_return(&ib_nl_sa_request_seq);
2823     + if (ret)
2824     + goto out;
2825    
2826     - /* Put the request on the list first.*/
2827     - spin_lock_irqsave(&ib_nl_request_lock, flags);
2828     + /* Put the request on the list.*/
2829     delay = msecs_to_jiffies(sa_local_svc_timeout_ms);
2830     query->timeout = delay + jiffies;
2831     list_add_tail(&query->list, &ib_nl_request_list);
2832     /* Start the timeout if this is the only request */
2833     if (ib_nl_request_list.next == &query->list)
2834     queue_delayed_work(ib_nl_wq, &ib_nl_timed_work, delay);
2835     - spin_unlock_irqrestore(&ib_nl_request_lock, flags);
2836    
2837     - ret = ib_nl_send_msg(query, gfp_mask);
2838     - if (ret) {
2839     - ret = -EIO;
2840     - /* Remove the request */
2841     - spin_lock_irqsave(&ib_nl_request_lock, flags);
2842     - list_del(&query->list);
2843     - spin_unlock_irqrestore(&ib_nl_request_lock, flags);
2844     - }
2845     +out:
2846     + spin_unlock_irqrestore(&ib_nl_request_lock, flags);
2847    
2848     return ret;
2849     }
2850     diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c
2851     index 26b792bb1027..fbff6b2f00e7 100644
2852     --- a/drivers/infiniband/hw/hfi1/init.c
2853     +++ b/drivers/infiniband/hw/hfi1/init.c
2854     @@ -844,6 +844,29 @@ wq_error:
2855     return -ENOMEM;
2856     }
2857    
2858     +/**
2859     + * destroy_workqueues - destroy per port workqueues
2860     + * @dd: the hfi1_ib device
2861     + */
2862     +static void destroy_workqueues(struct hfi1_devdata *dd)
2863     +{
2864     + int pidx;
2865     + struct hfi1_pportdata *ppd;
2866     +
2867     + for (pidx = 0; pidx < dd->num_pports; ++pidx) {
2868     + ppd = dd->pport + pidx;
2869     +
2870     + if (ppd->hfi1_wq) {
2871     + destroy_workqueue(ppd->hfi1_wq);
2872     + ppd->hfi1_wq = NULL;
2873     + }
2874     + if (ppd->link_wq) {
2875     + destroy_workqueue(ppd->link_wq);
2876     + ppd->link_wq = NULL;
2877     + }
2878     + }
2879     +}
2880     +
2881     /**
2882     * enable_general_intr() - Enable the IRQs that will be handled by the
2883     * general interrupt handler.
2884     @@ -1117,15 +1140,10 @@ static void shutdown_device(struct hfi1_devdata *dd)
2885     * We can't count on interrupts since we are stopping.
2886     */
2887     hfi1_quiet_serdes(ppd);
2888     -
2889     - if (ppd->hfi1_wq) {
2890     - destroy_workqueue(ppd->hfi1_wq);
2891     - ppd->hfi1_wq = NULL;
2892     - }
2893     - if (ppd->link_wq) {
2894     - destroy_workqueue(ppd->link_wq);
2895     - ppd->link_wq = NULL;
2896     - }
2897     + if (ppd->hfi1_wq)
2898     + flush_workqueue(ppd->hfi1_wq);
2899     + if (ppd->link_wq)
2900     + flush_workqueue(ppd->link_wq);
2901     }
2902     sdma_exit(dd);
2903     }
2904     @@ -1814,6 +1832,7 @@ static void remove_one(struct pci_dev *pdev)
2905     * clear dma engines, etc.
2906     */
2907     shutdown_device(dd);
2908     + destroy_workqueues(dd);
2909    
2910     stop_timers(dd);
2911    
2912     diff --git a/drivers/infiniband/hw/hfi1/qp.c b/drivers/infiniband/hw/hfi1/qp.c
2913     index f8e733aa3bb8..acd4400b0092 100644
2914     --- a/drivers/infiniband/hw/hfi1/qp.c
2915     +++ b/drivers/infiniband/hw/hfi1/qp.c
2916     @@ -381,7 +381,10 @@ bool _hfi1_schedule_send(struct rvt_qp *qp)
2917     struct hfi1_ibport *ibp =
2918     to_iport(qp->ibqp.device, qp->port_num);
2919     struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
2920     - struct hfi1_devdata *dd = dd_from_ibdev(qp->ibqp.device);
2921     + struct hfi1_devdata *dd = ppd->dd;
2922     +
2923     + if (dd->flags & HFI1_SHUTDOWN)
2924     + return true;
2925    
2926     return iowait_schedule(&priv->s_iowait, ppd->hfi1_wq,
2927     priv->s_sde ?
2928     diff --git a/drivers/infiniband/hw/hfi1/tid_rdma.c b/drivers/infiniband/hw/hfi1/tid_rdma.c
2929     index 8a2e0d9351e9..7c6fd720fb2e 100644
2930     --- a/drivers/infiniband/hw/hfi1/tid_rdma.c
2931     +++ b/drivers/infiniband/hw/hfi1/tid_rdma.c
2932     @@ -5406,7 +5406,10 @@ static bool _hfi1_schedule_tid_send(struct rvt_qp *qp)
2933     struct hfi1_ibport *ibp =
2934     to_iport(qp->ibqp.device, qp->port_num);
2935     struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
2936     - struct hfi1_devdata *dd = dd_from_ibdev(qp->ibqp.device);
2937     + struct hfi1_devdata *dd = ppd->dd;
2938     +
2939     + if ((dd->flags & HFI1_SHUTDOWN))
2940     + return true;
2941    
2942     return iowait_tid_schedule(&priv->s_iowait, ppd->hfi1_wq,
2943     priv->s_sde ?
2944     diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
2945     index 4f44a731a48e..b781ad74e6de 100644
2946     --- a/drivers/infiniband/hw/mlx5/main.c
2947     +++ b/drivers/infiniband/hw/mlx5/main.c
2948     @@ -517,7 +517,7 @@ static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
2949     mdev_port_num);
2950     if (err)
2951     goto out;
2952     - ext = MLX5_CAP_PCAM_FEATURE(dev->mdev, ptys_extended_ethernet);
2953     + ext = !!MLX5_GET_ETH_PROTO(ptys_reg, out, true, eth_proto_capability);
2954     eth_prot_oper = MLX5_GET_ETH_PROTO(ptys_reg, out, ext, eth_proto_oper);
2955    
2956     props->active_width = IB_WIDTH_4X;
2957     diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
2958     index 130b1e31b978..fb66d6757278 100644
2959     --- a/drivers/infiniband/sw/siw/siw_main.c
2960     +++ b/drivers/infiniband/sw/siw/siw_main.c
2961     @@ -66,12 +66,13 @@ static int siw_device_register(struct siw_device *sdev, const char *name)
2962     static int dev_id = 1;
2963     int rv;
2964    
2965     + sdev->vendor_part_id = dev_id++;
2966     +
2967     rv = ib_register_device(base_dev, name);
2968     if (rv) {
2969     pr_warn("siw: device registration error %d\n", rv);
2970     return rv;
2971     }
2972     - sdev->vendor_part_id = dev_id++;
2973    
2974     siw_dbg(base_dev, "HWaddr=%pM\n", sdev->netdev->dev_addr);
2975    
2976     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
2977     index 6366b5fbb3a4..cdc1f4736a11 100644
2978     --- a/drivers/iommu/intel-iommu.c
2979     +++ b/drivers/iommu/intel-iommu.c
2980     @@ -5962,6 +5962,23 @@ static bool intel_iommu_is_attach_deferred(struct iommu_domain *domain,
2981     return dev->archdata.iommu == DEFER_DEVICE_DOMAIN_INFO;
2982     }
2983    
2984     +/*
2985     + * Check that the device does not live on an external facing PCI port that is
2986     + * marked as untrusted. Such devices should not be able to apply quirks and
2987     + * thus not be able to bypass the IOMMU restrictions.
2988     + */
2989     +static bool risky_device(struct pci_dev *pdev)
2990     +{
2991     + if (pdev->untrusted) {
2992     + pci_info(pdev,
2993     + "Skipping IOMMU quirk for dev [%04X:%04X] on untrusted PCI link\n",
2994     + pdev->vendor, pdev->device);
2995     + pci_info(pdev, "Please check with your BIOS/Platform vendor about this\n");
2996     + return true;
2997     + }
2998     + return false;
2999     +}
3000     +
3001     const struct iommu_ops intel_iommu_ops = {
3002     .capable = intel_iommu_capable,
3003     .domain_alloc = intel_iommu_domain_alloc,
3004     @@ -5990,6 +6007,9 @@ const struct iommu_ops intel_iommu_ops = {
3005    
3006     static void quirk_iommu_igfx(struct pci_dev *dev)
3007     {
3008     + if (risky_device(dev))
3009     + return;
3010     +
3011     pci_info(dev, "Disabling IOMMU for graphics on this chipset\n");
3012     dmar_map_gfx = 0;
3013     }
3014     @@ -6031,6 +6051,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x163D, quirk_iommu_igfx);
3015    
3016     static void quirk_iommu_rwbf(struct pci_dev *dev)
3017     {
3018     + if (risky_device(dev))
3019     + return;
3020     +
3021     /*
3022     * Mobile 4 Series Chipset neglects to set RWBF capability,
3023     * but needs it. Same seems to hold for the desktop versions.
3024     @@ -6061,6 +6084,9 @@ static void quirk_calpella_no_shadow_gtt(struct pci_dev *dev)
3025     {
3026     unsigned short ggc;
3027    
3028     + if (risky_device(dev))
3029     + return;
3030     +
3031     if (pci_read_config_word(dev, GGC, &ggc))
3032     return;
3033    
3034     @@ -6094,6 +6120,12 @@ static void __init check_tylersburg_isoch(void)
3035     pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x3a3e, NULL);
3036     if (!pdev)
3037     return;
3038     +
3039     + if (risky_device(pdev)) {
3040     + pci_dev_put(pdev);
3041     + return;
3042     + }
3043     +
3044     pci_dev_put(pdev);
3045    
3046     /* System Management Registers. Might be hidden, in which case
3047     @@ -6103,6 +6135,11 @@ static void __init check_tylersburg_isoch(void)
3048     if (!pdev)
3049     return;
3050    
3051     + if (risky_device(pdev)) {
3052     + pci_dev_put(pdev);
3053     + return;
3054     + }
3055     +
3056     if (pci_read_config_dword(pdev, 0x188, &vtisochctrl)) {
3057     pci_dev_put(pdev);
3058     return;
3059     diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c
3060     index 67eb4e972cc3..ed2f711c24c4 100644
3061     --- a/drivers/md/dm-writecache.c
3062     +++ b/drivers/md/dm-writecache.c
3063     @@ -2104,6 +2104,12 @@ invalid_optional:
3064     }
3065    
3066     if (WC_MODE_PMEM(wc)) {
3067     + if (!dax_synchronous(wc->ssd_dev->dax_dev)) {
3068     + r = -EOPNOTSUPP;
3069     + ti->error = "Asynchronous persistent memory not supported as pmem cache";
3070     + goto bad;
3071     + }
3072     +
3073     r = persistent_memory_claim(wc);
3074     if (r) {
3075     ti->error = "Unable to map persistent memory for cache";
3076     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
3077     index 1e6e0c970e19..915019ec0e25 100644
3078     --- a/drivers/md/dm.c
3079     +++ b/drivers/md/dm.c
3080     @@ -12,6 +12,7 @@
3081     #include <linux/init.h>
3082     #include <linux/module.h>
3083     #include <linux/mutex.h>
3084     +#include <linux/sched/mm.h>
3085     #include <linux/sched/signal.h>
3086     #include <linux/blkpg.h>
3087     #include <linux/bio.h>
3088     @@ -2886,17 +2887,25 @@ EXPORT_SYMBOL_GPL(dm_internal_resume_fast);
3089     int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
3090     unsigned cookie)
3091     {
3092     + int r;
3093     + unsigned noio_flag;
3094     char udev_cookie[DM_COOKIE_LENGTH];
3095     char *envp[] = { udev_cookie, NULL };
3096    
3097     + noio_flag = memalloc_noio_save();
3098     +
3099     if (!cookie)
3100     - return kobject_uevent(&disk_to_dev(md->disk)->kobj, action);
3101     + r = kobject_uevent(&disk_to_dev(md->disk)->kobj, action);
3102     else {
3103     snprintf(udev_cookie, DM_COOKIE_LENGTH, "%s=%u",
3104     DM_COOKIE_ENV_VAR_NAME, cookie);
3105     - return kobject_uevent_env(&disk_to_dev(md->disk)->kobj,
3106     - action, envp);
3107     + r = kobject_uevent_env(&disk_to_dev(md->disk)->kobj,
3108     + action, envp);
3109     }
3110     +
3111     + memalloc_noio_restore(noio_flag);
3112     +
3113     + return r;
3114     }
3115    
3116     uint32_t dm_next_uevent_seq(struct mapped_device *md)
3117     diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
3118     index f0737c57ed5f..1491561d2e5c 100644
3119     --- a/drivers/message/fusion/mptscsih.c
3120     +++ b/drivers/message/fusion/mptscsih.c
3121     @@ -118,8 +118,6 @@ int mptscsih_suspend(struct pci_dev *pdev, pm_message_t state);
3122     int mptscsih_resume(struct pci_dev *pdev);
3123     #endif
3124    
3125     -#define SNS_LEN(scp) SCSI_SENSE_BUFFERSIZE
3126     -
3127    
3128     /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
3129     /*
3130     @@ -2422,7 +2420,7 @@ mptscsih_copy_sense_data(struct scsi_cmnd *sc, MPT_SCSI_HOST *hd, MPT_FRAME_HDR
3131     /* Copy the sense received into the scsi command block. */
3132     req_index = le16_to_cpu(mf->u.frame.hwhdr.msgctxu.fld.req_idx);
3133     sense_data = ((u8 *)ioc->sense_buf_pool + (req_index * MPT_SENSE_BUFFER_ALLOC));
3134     - memcpy(sc->sense_buffer, sense_data, SNS_LEN(sc));
3135     + memcpy(sc->sense_buffer, sense_data, MPT_SENSE_BUFFER_ALLOC);
3136    
3137     /* Log SMART data (asc = 0x5D, non-IM case only) if required.
3138     */
3139     diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c
3140     index e712315c7e8d..545c3f2f8a06 100644
3141     --- a/drivers/mmc/host/meson-gx-mmc.c
3142     +++ b/drivers/mmc/host/meson-gx-mmc.c
3143     @@ -1151,9 +1151,11 @@ static int meson_mmc_probe(struct platform_device *pdev)
3144    
3145     mmc->caps |= MMC_CAP_CMD23;
3146     if (host->dram_access_quirk) {
3147     + /* Limit segments to 1 due to low available sram memory */
3148     + mmc->max_segs = 1;
3149     /* Limit to the available sram memory */
3150     - mmc->max_segs = SD_EMMC_SRAM_DATA_BUF_LEN / mmc->max_blk_size;
3151     - mmc->max_blk_count = mmc->max_segs;
3152     + mmc->max_blk_count = SD_EMMC_SRAM_DATA_BUF_LEN /
3153     + mmc->max_blk_size;
3154     } else {
3155     mmc->max_blk_count = CMD_CFG_LENGTH_MASK;
3156     mmc->max_segs = SD_EMMC_DESC_BUF_LEN /
3157     diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c
3158     index 24a5e99f7fd5..84c4319e3b31 100644
3159     --- a/drivers/net/dsa/microchip/ksz8795.c
3160     +++ b/drivers/net/dsa/microchip/ksz8795.c
3161     @@ -1267,6 +1267,9 @@ static int ksz8795_switch_init(struct ksz_device *dev)
3162     return -ENOMEM;
3163     }
3164    
3165     + /* set the real number of ports */
3166     + dev->ds->num_ports = dev->port_cnt;
3167     +
3168     return 0;
3169     }
3170    
3171     diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
3172     index 50ffc63d6231..3afb596d8e43 100644
3173     --- a/drivers/net/dsa/microchip/ksz9477.c
3174     +++ b/drivers/net/dsa/microchip/ksz9477.c
3175     @@ -1587,6 +1587,9 @@ static int ksz9477_switch_init(struct ksz_device *dev)
3176     return -ENOMEM;
3177     }
3178    
3179     + /* set the real number of ports */
3180     + dev->ds->num_ports = dev->port_cnt;
3181     +
3182     return 0;
3183     }
3184    
3185     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
3186     index 1046b22220a3..452be9749827 100644
3187     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
3188     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
3189     @@ -398,6 +398,7 @@ static void bnxt_free_vf_resources(struct bnxt *bp)
3190     }
3191     }
3192    
3193     + bp->pf.active_vfs = 0;
3194     kfree(bp->pf.vf);
3195     bp->pf.vf = NULL;
3196     }
3197     @@ -833,7 +834,6 @@ void bnxt_sriov_disable(struct bnxt *bp)
3198    
3199     bnxt_free_vf_resources(bp);
3200    
3201     - bp->pf.active_vfs = 0;
3202     /* Reclaim all resources for the PF. */
3203     rtnl_lock();
3204     bnxt_restore_pf_fw_resources(bp);
3205     diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
3206     index 1ec19d9fab00..01ed4d4296db 100644
3207     --- a/drivers/net/ethernet/cadence/macb_main.c
3208     +++ b/drivers/net/ethernet/cadence/macb_main.c
3209     @@ -4260,7 +4260,7 @@ static int macb_probe(struct platform_device *pdev)
3210     bp->wol = 0;
3211     if (of_get_property(np, "magic-packet", NULL))
3212     bp->wol |= MACB_WOL_HAS_MAGIC_PACKET;
3213     - device_init_wakeup(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET);
3214     + device_set_wakeup_capable(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET);
3215    
3216     spin_lock_init(&bp->lock);
3217    
3218     @@ -4453,7 +4453,8 @@ static int __maybe_unused macb_suspend(struct device *dev)
3219     netif_carrier_off(netdev);
3220     if (bp->ptp_info)
3221     bp->ptp_info->ptp_remove(netdev);
3222     - pm_runtime_force_suspend(dev);
3223     + if (!device_may_wakeup(dev))
3224     + pm_runtime_force_suspend(dev);
3225    
3226     return 0;
3227     }
3228     @@ -4468,7 +4469,8 @@ static int __maybe_unused macb_resume(struct device *dev)
3229     if (!netif_running(netdev))
3230     return 0;
3231    
3232     - pm_runtime_force_resume(dev);
3233     + if (!device_may_wakeup(dev))
3234     + pm_runtime_force_resume(dev);
3235    
3236     if (bp->wol & MACB_WOL_ENABLED) {
3237     macb_writel(bp, IDR, MACB_BIT(WOL));
3238     @@ -4507,7 +4509,7 @@ static int __maybe_unused macb_runtime_suspend(struct device *dev)
3239     struct net_device *netdev = dev_get_drvdata(dev);
3240     struct macb *bp = netdev_priv(netdev);
3241    
3242     - if (!(device_may_wakeup(&bp->dev->dev))) {
3243     + if (!(device_may_wakeup(dev))) {
3244     clk_disable_unprepare(bp->tx_clk);
3245     clk_disable_unprepare(bp->hclk);
3246     clk_disable_unprepare(bp->pclk);
3247     @@ -4523,7 +4525,7 @@ static int __maybe_unused macb_runtime_resume(struct device *dev)
3248     struct net_device *netdev = dev_get_drvdata(dev);
3249     struct macb *bp = netdev_priv(netdev);
3250    
3251     - if (!(device_may_wakeup(&bp->dev->dev))) {
3252     + if (!(device_may_wakeup(dev))) {
3253     clk_prepare_enable(bp->pclk);
3254     clk_prepare_enable(bp->hclk);
3255     clk_prepare_enable(bp->tx_clk);
3256     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
3257     index 375e1be6a2d8..f459313357c7 100644
3258     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
3259     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c
3260     @@ -839,16 +839,16 @@ static bool is_addr_all_mask(u8 *ipmask, int family)
3261     struct in_addr *addr;
3262    
3263     addr = (struct in_addr *)ipmask;
3264     - if (ntohl(addr->s_addr) == 0xffffffff)
3265     + if (addr->s_addr == htonl(0xffffffff))
3266     return true;
3267     } else if (family == AF_INET6) {
3268     struct in6_addr *addr6;
3269    
3270     addr6 = (struct in6_addr *)ipmask;
3271     - if (ntohl(addr6->s6_addr32[0]) == 0xffffffff &&
3272     - ntohl(addr6->s6_addr32[1]) == 0xffffffff &&
3273     - ntohl(addr6->s6_addr32[2]) == 0xffffffff &&
3274     - ntohl(addr6->s6_addr32[3]) == 0xffffffff)
3275     + if (addr6->s6_addr32[0] == htonl(0xffffffff) &&
3276     + addr6->s6_addr32[1] == htonl(0xffffffff) &&
3277     + addr6->s6_addr32[2] == htonl(0xffffffff) &&
3278     + addr6->s6_addr32[3] == htonl(0xffffffff))
3279     return true;
3280     }
3281     return false;
3282     diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
3283     index 31fcfc58e337..588b63473c47 100644
3284     --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
3285     +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
3286     @@ -3499,7 +3499,7 @@ int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
3287     drv_fw = &fw_info->fw_hdr;
3288    
3289     /* Read the header of the firmware on the card */
3290     - ret = -t4_read_flash(adap, FLASH_FW_START,
3291     + ret = t4_read_flash(adap, FLASH_FW_START,
3292     sizeof(*card_fw) / sizeof(uint32_t),
3293     (uint32_t *)card_fw, 1);
3294     if (ret == 0) {
3295     @@ -3528,8 +3528,8 @@ int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
3296     should_install_fs_fw(adap, card_fw_usable,
3297     be32_to_cpu(fs_fw->fw_ver),
3298     be32_to_cpu(card_fw->fw_ver))) {
3299     - ret = -t4_fw_upgrade(adap, adap->mbox, fw_data,
3300     - fw_size, 0);
3301     + ret = t4_fw_upgrade(adap, adap->mbox, fw_data,
3302     + fw_size, 0);
3303     if (ret != 0) {
3304     dev_err(adap->pdev_dev,
3305     "failed to install firmware: %d\n", ret);
3306     @@ -3560,7 +3560,7 @@ int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
3307     FW_HDR_FW_VER_MICRO_G(c), FW_HDR_FW_VER_BUILD_G(c),
3308     FW_HDR_FW_VER_MAJOR_G(k), FW_HDR_FW_VER_MINOR_G(k),
3309     FW_HDR_FW_VER_MICRO_G(k), FW_HDR_FW_VER_BUILD_G(k));
3310     - ret = EINVAL;
3311     + ret = -EINVAL;
3312     goto bye;
3313     }
3314    
3315     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
3316     index 403e0f089f2a..37537c302080 100644
3317     --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
3318     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
3319     @@ -3993,9 +3993,8 @@ static void hns3_client_uninit(struct hnae3_handle *handle, bool reset)
3320    
3321     hns3_put_ring_config(priv);
3322    
3323     - hns3_dbg_uninit(handle);
3324     -
3325     out_netdev_free:
3326     + hns3_dbg_uninit(handle);
3327     free_netdev(netdev);
3328     }
3329    
3330     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
3331     index 52c9d204fe3d..34e5448d59f6 100644
3332     --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
3333     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
3334     @@ -174,18 +174,21 @@ static void hns3_lb_check_skb_data(struct hns3_enet_ring *ring,
3335     {
3336     struct hns3_enet_tqp_vector *tqp_vector = ring->tqp_vector;
3337     unsigned char *packet = skb->data;
3338     + u32 len = skb_headlen(skb);
3339     u32 i;
3340    
3341     - for (i = 0; i < skb->len; i++)
3342     + len = min_t(u32, len, HNS3_NIC_LB_TEST_PACKET_SIZE);
3343     +
3344     + for (i = 0; i < len; i++)
3345     if (packet[i] != (unsigned char)(i & 0xff))
3346     break;
3347    
3348     /* The packet is correctly received */
3349     - if (i == skb->len)
3350     + if (i == HNS3_NIC_LB_TEST_PACKET_SIZE)
3351     tqp_vector->rx_group.total_packets++;
3352     else
3353     print_hex_dump(KERN_ERR, "selftest:", DUMP_PREFIX_OFFSET, 16, 1,
3354     - skb->data, skb->len, true);
3355     + skb->data, len, true);
3356    
3357     dev_kfree_skb_any(skb);
3358     }
3359     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
3360     index 4f503b9a674c..d58597360699 100644
3361     --- a/drivers/net/ethernet/ibm/ibmvnic.c
3362     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
3363     @@ -1878,13 +1878,18 @@ static int do_reset(struct ibmvnic_adapter *adapter,
3364     release_sub_crqs(adapter, 1);
3365     } else {
3366     rc = ibmvnic_reset_crq(adapter);
3367     - if (!rc)
3368     + if (rc == H_CLOSED || rc == H_SUCCESS) {
3369     rc = vio_enable_interrupts(adapter->vdev);
3370     + if (rc)
3371     + netdev_err(adapter->netdev,
3372     + "Reset failed to enable interrupts. rc=%d\n",
3373     + rc);
3374     + }
3375     }
3376    
3377     if (rc) {
3378     netdev_err(adapter->netdev,
3379     - "Couldn't initialize crq. rc=%d\n", rc);
3380     + "Reset couldn't initialize crq. rc=%d\n", rc);
3381     goto out;
3382     }
3383    
3384     diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
3385     index a8dd0228b678..095ed81cc0ba 100644
3386     --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
3387     +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
3388     @@ -458,11 +458,15 @@ static void i40e_get_netdev_stats_struct(struct net_device *netdev,
3389     i40e_get_netdev_stats_struct_tx(ring, stats);
3390    
3391     if (i40e_enabled_xdp_vsi(vsi)) {
3392     - ring++;
3393     + ring = READ_ONCE(vsi->xdp_rings[i]);
3394     + if (!ring)
3395     + continue;
3396     i40e_get_netdev_stats_struct_tx(ring, stats);
3397     }
3398    
3399     - ring++;
3400     + ring = READ_ONCE(vsi->rx_rings[i]);
3401     + if (!ring)
3402     + continue;
3403     do {
3404     start = u64_stats_fetch_begin_irq(&ring->syncp);
3405     packets = ring->stats.packets;
3406     @@ -806,6 +810,8 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
3407     for (q = 0; q < vsi->num_queue_pairs; q++) {
3408     /* locate Tx ring */
3409     p = READ_ONCE(vsi->tx_rings[q]);
3410     + if (!p)
3411     + continue;
3412    
3413     do {
3414     start = u64_stats_fetch_begin_irq(&p->syncp);
3415     @@ -819,8 +825,11 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi)
3416     tx_linearize += p->tx_stats.tx_linearize;
3417     tx_force_wb += p->tx_stats.tx_force_wb;
3418    
3419     - /* Rx queue is part of the same block as Tx queue */
3420     - p = &p[1];
3421     + /* locate Rx ring */
3422     + p = READ_ONCE(vsi->rx_rings[q]);
3423     + if (!p)
3424     + continue;
3425     +
3426     do {
3427     start = u64_stats_fetch_begin_irq(&p->syncp);
3428     packets = p->stats.packets;
3429     @@ -10816,10 +10825,10 @@ static void i40e_vsi_clear_rings(struct i40e_vsi *vsi)
3430     if (vsi->tx_rings && vsi->tx_rings[0]) {
3431     for (i = 0; i < vsi->alloc_queue_pairs; i++) {
3432     kfree_rcu(vsi->tx_rings[i], rcu);
3433     - vsi->tx_rings[i] = NULL;
3434     - vsi->rx_rings[i] = NULL;
3435     + WRITE_ONCE(vsi->tx_rings[i], NULL);
3436     + WRITE_ONCE(vsi->rx_rings[i], NULL);
3437     if (vsi->xdp_rings)
3438     - vsi->xdp_rings[i] = NULL;
3439     + WRITE_ONCE(vsi->xdp_rings[i], NULL);
3440     }
3441     }
3442     }
3443     @@ -10853,7 +10862,7 @@ static int i40e_alloc_rings(struct i40e_vsi *vsi)
3444     if (vsi->back->hw_features & I40E_HW_WB_ON_ITR_CAPABLE)
3445     ring->flags = I40E_TXR_FLAGS_WB_ON_ITR;
3446     ring->itr_setting = pf->tx_itr_default;
3447     - vsi->tx_rings[i] = ring++;
3448     + WRITE_ONCE(vsi->tx_rings[i], ring++);
3449    
3450     if (!i40e_enabled_xdp_vsi(vsi))
3451     goto setup_rx;
3452     @@ -10871,7 +10880,7 @@ static int i40e_alloc_rings(struct i40e_vsi *vsi)
3453     ring->flags = I40E_TXR_FLAGS_WB_ON_ITR;
3454     set_ring_xdp(ring);
3455     ring->itr_setting = pf->tx_itr_default;
3456     - vsi->xdp_rings[i] = ring++;
3457     + WRITE_ONCE(vsi->xdp_rings[i], ring++);
3458    
3459     setup_rx:
3460     ring->queue_index = i;
3461     @@ -10884,7 +10893,7 @@ setup_rx:
3462     ring->size = 0;
3463     ring->dcb_tc = 0;
3464     ring->itr_setting = pf->rx_itr_default;
3465     - vsi->rx_rings[i] = ring;
3466     + WRITE_ONCE(vsi->rx_rings[i], ring);
3467     }
3468    
3469     return 0;
3470     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
3471     index cc3196ae5aea..636e6e840afa 100644
3472     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
3473     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
3474     @@ -923,7 +923,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter,
3475     ring->queue_index = txr_idx;
3476    
3477     /* assign ring to adapter */
3478     - adapter->tx_ring[txr_idx] = ring;
3479     + WRITE_ONCE(adapter->tx_ring[txr_idx], ring);
3480    
3481     /* update count and index */
3482     txr_count--;
3483     @@ -950,7 +950,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter,
3484     set_ring_xdp(ring);
3485    
3486     /* assign ring to adapter */
3487     - adapter->xdp_ring[xdp_idx] = ring;
3488     + WRITE_ONCE(adapter->xdp_ring[xdp_idx], ring);
3489    
3490     /* update count and index */
3491     xdp_count--;
3492     @@ -993,7 +993,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter,
3493     ring->queue_index = rxr_idx;
3494    
3495     /* assign ring to adapter */
3496     - adapter->rx_ring[rxr_idx] = ring;
3497     + WRITE_ONCE(adapter->rx_ring[rxr_idx], ring);
3498    
3499     /* update count and index */
3500     rxr_count--;
3501     @@ -1022,13 +1022,13 @@ static void ixgbe_free_q_vector(struct ixgbe_adapter *adapter, int v_idx)
3502    
3503     ixgbe_for_each_ring(ring, q_vector->tx) {
3504     if (ring_is_xdp(ring))
3505     - adapter->xdp_ring[ring->queue_index] = NULL;
3506     + WRITE_ONCE(adapter->xdp_ring[ring->queue_index], NULL);
3507     else
3508     - adapter->tx_ring[ring->queue_index] = NULL;
3509     + WRITE_ONCE(adapter->tx_ring[ring->queue_index], NULL);
3510     }
3511    
3512     ixgbe_for_each_ring(ring, q_vector->rx)
3513     - adapter->rx_ring[ring->queue_index] = NULL;
3514     + WRITE_ONCE(adapter->rx_ring[ring->queue_index], NULL);
3515    
3516     adapter->q_vector[v_idx] = NULL;
3517     napi_hash_del(&q_vector->napi);
3518     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
3519     index edaa0bffa5c3..5336bfcd2d70 100644
3520     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
3521     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
3522     @@ -7064,7 +7064,10 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter)
3523     }
3524    
3525     for (i = 0; i < adapter->num_rx_queues; i++) {
3526     - struct ixgbe_ring *rx_ring = adapter->rx_ring[i];
3527     + struct ixgbe_ring *rx_ring = READ_ONCE(adapter->rx_ring[i]);
3528     +
3529     + if (!rx_ring)
3530     + continue;
3531     non_eop_descs += rx_ring->rx_stats.non_eop_descs;
3532     alloc_rx_page += rx_ring->rx_stats.alloc_rx_page;
3533     alloc_rx_page_failed += rx_ring->rx_stats.alloc_rx_page_failed;
3534     @@ -7085,15 +7088,20 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter)
3535     packets = 0;
3536     /* gather some stats to the adapter struct that are per queue */
3537     for (i = 0; i < adapter->num_tx_queues; i++) {
3538     - struct ixgbe_ring *tx_ring = adapter->tx_ring[i];
3539     + struct ixgbe_ring *tx_ring = READ_ONCE(adapter->tx_ring[i]);
3540     +
3541     + if (!tx_ring)
3542     + continue;
3543     restart_queue += tx_ring->tx_stats.restart_queue;
3544     tx_busy += tx_ring->tx_stats.tx_busy;
3545     bytes += tx_ring->stats.bytes;
3546     packets += tx_ring->stats.packets;
3547     }
3548     for (i = 0; i < adapter->num_xdp_queues; i++) {
3549     - struct ixgbe_ring *xdp_ring = adapter->xdp_ring[i];
3550     + struct ixgbe_ring *xdp_ring = READ_ONCE(adapter->xdp_ring[i]);
3551    
3552     + if (!xdp_ring)
3553     + continue;
3554     restart_queue += xdp_ring->tx_stats.restart_queue;
3555     tx_busy += xdp_ring->tx_stats.tx_busy;
3556     bytes += xdp_ring->stats.bytes;
3557     diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
3558     index a10ae28ebc8a..ffdb7b113f17 100644
3559     --- a/drivers/net/ethernet/marvell/mvneta.c
3560     +++ b/drivers/net/ethernet/marvell/mvneta.c
3561     @@ -104,9 +104,11 @@
3562     #define MVNETA_TX_IN_PRGRS BIT(1)
3563     #define MVNETA_TX_FIFO_EMPTY BIT(8)
3564     #define MVNETA_RX_MIN_FRAME_SIZE 0x247c
3565     +/* Only exists on Armada XP and Armada 370 */
3566     #define MVNETA_SERDES_CFG 0x24A0
3567     #define MVNETA_SGMII_SERDES_PROTO 0x0cc7
3568     #define MVNETA_QSGMII_SERDES_PROTO 0x0667
3569     +#define MVNETA_HSGMII_SERDES_PROTO 0x1107
3570     #define MVNETA_TYPE_PRIO 0x24bc
3571     #define MVNETA_FORCE_UNI BIT(21)
3572     #define MVNETA_TXQ_CMD_1 0x24e4
3573     @@ -3164,26 +3166,60 @@ static int mvneta_setup_txqs(struct mvneta_port *pp)
3574     return 0;
3575     }
3576    
3577     -static int mvneta_comphy_init(struct mvneta_port *pp)
3578     +static int mvneta_comphy_init(struct mvneta_port *pp, phy_interface_t interface)
3579     {
3580     int ret;
3581    
3582     - if (!pp->comphy)
3583     - return 0;
3584     -
3585     - ret = phy_set_mode_ext(pp->comphy, PHY_MODE_ETHERNET,
3586     - pp->phy_interface);
3587     + ret = phy_set_mode_ext(pp->comphy, PHY_MODE_ETHERNET, interface);
3588     if (ret)
3589     return ret;
3590    
3591     return phy_power_on(pp->comphy);
3592     }
3593    
3594     +static int mvneta_config_interface(struct mvneta_port *pp,
3595     + phy_interface_t interface)
3596     +{
3597     + int ret = 0;
3598     +
3599     + if (pp->comphy) {
3600     + if (interface == PHY_INTERFACE_MODE_SGMII ||
3601     + interface == PHY_INTERFACE_MODE_1000BASEX ||
3602     + interface == PHY_INTERFACE_MODE_2500BASEX) {
3603     + ret = mvneta_comphy_init(pp, interface);
3604     + }
3605     + } else {
3606     + switch (interface) {
3607     + case PHY_INTERFACE_MODE_QSGMII:
3608     + mvreg_write(pp, MVNETA_SERDES_CFG,
3609     + MVNETA_QSGMII_SERDES_PROTO);
3610     + break;
3611     +
3612     + case PHY_INTERFACE_MODE_SGMII:
3613     + case PHY_INTERFACE_MODE_1000BASEX:
3614     + mvreg_write(pp, MVNETA_SERDES_CFG,
3615     + MVNETA_SGMII_SERDES_PROTO);
3616     + break;
3617     +
3618     + case PHY_INTERFACE_MODE_2500BASEX:
3619     + mvreg_write(pp, MVNETA_SERDES_CFG,
3620     + MVNETA_HSGMII_SERDES_PROTO);
3621     + break;
3622     + default:
3623     + return -EINVAL;
3624     + }
3625     + }
3626     +
3627     + pp->phy_interface = interface;
3628     +
3629     + return ret;
3630     +}
3631     +
3632     static void mvneta_start_dev(struct mvneta_port *pp)
3633     {
3634     int cpu;
3635    
3636     - WARN_ON(mvneta_comphy_init(pp));
3637     + WARN_ON(mvneta_config_interface(pp, pp->phy_interface));
3638    
3639     mvneta_max_rx_size_set(pp, pp->pkt_size);
3640     mvneta_txq_max_tx_size_set(pp, pp->pkt_size);
3641     @@ -3558,17 +3594,13 @@ static void mvneta_mac_config(struct phylink_config *config, unsigned int mode,
3642     /* When at 2.5G, the link partner can send frames with shortened
3643     * preambles.
3644     */
3645     - if (state->speed == SPEED_2500)
3646     + if (state->interface == PHY_INTERFACE_MODE_2500BASEX)
3647     new_ctrl4 |= MVNETA_GMAC4_SHORT_PREAMBLE_ENABLE;
3648    
3649     - if (pp->comphy && pp->phy_interface != state->interface &&
3650     - (state->interface == PHY_INTERFACE_MODE_SGMII ||
3651     - state->interface == PHY_INTERFACE_MODE_1000BASEX ||
3652     - state->interface == PHY_INTERFACE_MODE_2500BASEX)) {
3653     - pp->phy_interface = state->interface;
3654     -
3655     - WARN_ON(phy_power_off(pp->comphy));
3656     - WARN_ON(mvneta_comphy_init(pp));
3657     + if (pp->phy_interface != state->interface) {
3658     + if (pp->comphy)
3659     + WARN_ON(phy_power_off(pp->comphy));
3660     + WARN_ON(mvneta_config_interface(pp, state->interface));
3661     }
3662    
3663     if (new_ctrl0 != gmac_ctrl0)
3664     @@ -4464,20 +4496,10 @@ static void mvneta_conf_mbus_windows(struct mvneta_port *pp,
3665     }
3666    
3667     /* Power up the port */
3668     -static int mvneta_port_power_up(struct mvneta_port *pp, int phy_mode)
3669     +static void mvneta_port_power_up(struct mvneta_port *pp, int phy_mode)
3670     {
3671     /* MAC Cause register should be cleared */
3672     mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0);
3673     -
3674     - if (phy_mode == PHY_INTERFACE_MODE_QSGMII)
3675     - mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_QSGMII_SERDES_PROTO);
3676     - else if (phy_mode == PHY_INTERFACE_MODE_SGMII ||
3677     - phy_interface_mode_is_8023z(phy_mode))
3678     - mvreg_write(pp, MVNETA_SERDES_CFG, MVNETA_SGMII_SERDES_PROTO);
3679     - else if (!phy_interface_mode_is_rgmii(phy_mode))
3680     - return -EINVAL;
3681     -
3682     - return 0;
3683     }
3684    
3685     /* Device initialization routine */
3686     @@ -4661,11 +4683,7 @@ static int mvneta_probe(struct platform_device *pdev)
3687     if (err < 0)
3688     goto err_netdev;
3689    
3690     - err = mvneta_port_power_up(pp, phy_mode);
3691     - if (err < 0) {
3692     - dev_err(&pdev->dev, "can't power up port\n");
3693     - goto err_netdev;
3694     - }
3695     + mvneta_port_power_up(pp, phy_mode);
3696    
3697     /* Armada3700 network controller does not support per-cpu
3698     * operation, so only single NAPI should be initialized.
3699     @@ -4818,11 +4836,7 @@ static int mvneta_resume(struct device *device)
3700     }
3701     }
3702     mvneta_defaults_set(pp);
3703     - err = mvneta_port_power_up(pp, pp->phy_interface);
3704     - if (err < 0) {
3705     - dev_err(device, "can't power up port\n");
3706     - return err;
3707     - }
3708     + mvneta_port_power_up(pp, pp->phy_interface);
3709    
3710     netif_device_attach(dev);
3711    
3712     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/port.c b/drivers/net/ethernet/mellanox/mlx5/core/en/port.c
3713     index fce6eccdcf8b..fa81a97f6ba9 100644
3714     --- a/drivers/net/ethernet/mellanox/mlx5/core/en/port.c
3715     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/port.c
3716     @@ -78,11 +78,26 @@ static const u32 mlx5e_ext_link_speed[MLX5E_EXT_LINK_MODES_NUMBER] = {
3717     [MLX5E_400GAUI_8] = 400000,
3718     };
3719    
3720     +bool mlx5e_ptys_ext_supported(struct mlx5_core_dev *mdev)
3721     +{
3722     + struct mlx5e_port_eth_proto eproto;
3723     + int err;
3724     +
3725     + if (MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet))
3726     + return true;
3727     +
3728     + err = mlx5_port_query_eth_proto(mdev, 1, true, &eproto);
3729     + if (err)
3730     + return false;
3731     +
3732     + return !!eproto.cap;
3733     +}
3734     +
3735     static void mlx5e_port_get_speed_arr(struct mlx5_core_dev *mdev,
3736     const u32 **arr, u32 *size,
3737     bool force_legacy)
3738     {
3739     - bool ext = force_legacy ? false : MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3740     + bool ext = force_legacy ? false : mlx5e_ptys_ext_supported(mdev);
3741    
3742     *size = ext ? ARRAY_SIZE(mlx5e_ext_link_speed) :
3743     ARRAY_SIZE(mlx5e_link_speed);
3744     @@ -177,7 +192,7 @@ int mlx5e_port_linkspeed(struct mlx5_core_dev *mdev, u32 *speed)
3745     bool ext;
3746     int err;
3747    
3748     - ext = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3749     + ext = mlx5e_ptys_ext_supported(mdev);
3750     err = mlx5_port_query_eth_proto(mdev, 1, ext, &eproto);
3751     if (err)
3752     goto out;
3753     @@ -205,7 +220,7 @@ int mlx5e_port_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed)
3754     int err;
3755     int i;
3756    
3757     - ext = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3758     + ext = mlx5e_ptys_ext_supported(mdev);
3759     err = mlx5_port_query_eth_proto(mdev, 1, ext, &eproto);
3760     if (err)
3761     return err;
3762     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/port.h b/drivers/net/ethernet/mellanox/mlx5/core/en/port.h
3763     index 4a7f4497692b..e196888f7056 100644
3764     --- a/drivers/net/ethernet/mellanox/mlx5/core/en/port.h
3765     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/port.h
3766     @@ -54,7 +54,7 @@ int mlx5e_port_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);
3767     int mlx5e_port_max_linkspeed(struct mlx5_core_dev *mdev, u32 *speed);
3768     u32 mlx5e_port_speed2linkmodes(struct mlx5_core_dev *mdev, u32 speed,
3769     bool force_legacy);
3770     -
3771     +bool mlx5e_ptys_ext_supported(struct mlx5_core_dev *mdev);
3772     int mlx5e_port_query_pbmc(struct mlx5_core_dev *mdev, void *out);
3773     int mlx5e_port_set_pbmc(struct mlx5_core_dev *mdev, void *in);
3774     int mlx5e_port_query_priority2buffer(struct mlx5_core_dev *mdev, u8 *buffer);
3775     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
3776     index 39ee32518b10..8cd529556b21 100644
3777     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
3778     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
3779     @@ -200,7 +200,7 @@ static void mlx5e_ethtool_get_speed_arr(struct mlx5_core_dev *mdev,
3780     struct ptys2ethtool_config **arr,
3781     u32 *size)
3782     {
3783     - bool ext = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3784     + bool ext = mlx5e_ptys_ext_supported(mdev);
3785    
3786     *arr = ext ? ptys2ext_ethtool_table : ptys2legacy_ethtool_table;
3787     *size = ext ? ARRAY_SIZE(ptys2ext_ethtool_table) :
3788     @@ -871,7 +871,7 @@ static void get_lp_advertising(struct mlx5_core_dev *mdev, u32 eth_proto_lp,
3789     struct ethtool_link_ksettings *link_ksettings)
3790     {
3791     unsigned long *lp_advertising = link_ksettings->link_modes.lp_advertising;
3792     - bool ext = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3793     + bool ext = mlx5e_ptys_ext_supported(mdev);
3794    
3795     ptys2ethtool_adver_link(lp_advertising, eth_proto_lp, ext);
3796     }
3797     @@ -900,7 +900,7 @@ int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv,
3798     __func__, err);
3799     goto err_query_regs;
3800     }
3801     - ext = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3802     + ext = !!MLX5_GET_ETH_PROTO(ptys_reg, out, true, eth_proto_capability);
3803     eth_proto_cap = MLX5_GET_ETH_PROTO(ptys_reg, out, ext,
3804     eth_proto_capability);
3805     eth_proto_admin = MLX5_GET_ETH_PROTO(ptys_reg, out, ext,
3806     @@ -1052,7 +1052,7 @@ int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv,
3807     autoneg = link_ksettings->base.autoneg;
3808     speed = link_ksettings->base.speed;
3809    
3810     - ext_supported = MLX5_CAP_PCAM_FEATURE(mdev, ptys_extended_ethernet);
3811     + ext_supported = mlx5e_ptys_ext_supported(mdev);
3812     ext = ext_requested(autoneg, adver, ext_supported);
3813     if (!ext_supported && ext)
3814     return -EOPNOTSUPP;
3815     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/port.c b/drivers/net/ethernet/mellanox/mlx5/core/port.c
3816     index cc262b30aed5..dc589322940c 100644
3817     --- a/drivers/net/ethernet/mellanox/mlx5/core/port.c
3818     +++ b/drivers/net/ethernet/mellanox/mlx5/core/port.c
3819     @@ -293,7 +293,40 @@ static int mlx5_query_module_num(struct mlx5_core_dev *dev, int *module_num)
3820     return 0;
3821     }
3822    
3823     -static int mlx5_eeprom_page(int offset)
3824     +static int mlx5_query_module_id(struct mlx5_core_dev *dev, int module_num,
3825     + u8 *module_id)
3826     +{
3827     + u32 in[MLX5_ST_SZ_DW(mcia_reg)] = {};
3828     + u32 out[MLX5_ST_SZ_DW(mcia_reg)];
3829     + int err, status;
3830     + u8 *ptr;
3831     +
3832     + MLX5_SET(mcia_reg, in, i2c_device_address, MLX5_I2C_ADDR_LOW);
3833     + MLX5_SET(mcia_reg, in, module, module_num);
3834     + MLX5_SET(mcia_reg, in, device_address, 0);
3835     + MLX5_SET(mcia_reg, in, page_number, 0);
3836     + MLX5_SET(mcia_reg, in, size, 1);
3837     + MLX5_SET(mcia_reg, in, l, 0);
3838     +
3839     + err = mlx5_core_access_reg(dev, in, sizeof(in), out,
3840     + sizeof(out), MLX5_REG_MCIA, 0, 0);
3841     + if (err)
3842     + return err;
3843     +
3844     + status = MLX5_GET(mcia_reg, out, status);
3845     + if (status) {
3846     + mlx5_core_err(dev, "query_mcia_reg failed: status: 0x%x\n",
3847     + status);
3848     + return -EIO;
3849     + }
3850     + ptr = MLX5_ADDR_OF(mcia_reg, out, dword_0);
3851     +
3852     + *module_id = ptr[0];
3853     +
3854     + return 0;
3855     +}
3856     +
3857     +static int mlx5_qsfp_eeprom_page(u16 offset)
3858     {
3859     if (offset < MLX5_EEPROM_PAGE_LENGTH)
3860     /* Addresses between 0-255 - page 00 */
3861     @@ -307,7 +340,7 @@ static int mlx5_eeprom_page(int offset)
3862     MLX5_EEPROM_HIGH_PAGE_LENGTH);
3863     }
3864    
3865     -static int mlx5_eeprom_high_page_offset(int page_num)
3866     +static int mlx5_qsfp_eeprom_high_page_offset(int page_num)
3867     {
3868     if (!page_num) /* Page 0 always start from low page */
3869     return 0;
3870     @@ -316,35 +349,62 @@ static int mlx5_eeprom_high_page_offset(int page_num)
3871     return page_num * MLX5_EEPROM_HIGH_PAGE_LENGTH;
3872     }
3873    
3874     +static void mlx5_qsfp_eeprom_params_set(u16 *i2c_addr, int *page_num, u16 *offset)
3875     +{
3876     + *i2c_addr = MLX5_I2C_ADDR_LOW;
3877     + *page_num = mlx5_qsfp_eeprom_page(*offset);
3878     + *offset -= mlx5_qsfp_eeprom_high_page_offset(*page_num);
3879     +}
3880     +
3881     +static void mlx5_sfp_eeprom_params_set(u16 *i2c_addr, int *page_num, u16 *offset)
3882     +{
3883     + *i2c_addr = MLX5_I2C_ADDR_LOW;
3884     + *page_num = 0;
3885     +
3886     + if (*offset < MLX5_EEPROM_PAGE_LENGTH)
3887     + return;
3888     +
3889     + *i2c_addr = MLX5_I2C_ADDR_HIGH;
3890     + *offset -= MLX5_EEPROM_PAGE_LENGTH;
3891     +}
3892     +
3893     int mlx5_query_module_eeprom(struct mlx5_core_dev *dev,
3894     u16 offset, u16 size, u8 *data)
3895     {
3896     - int module_num, page_num, status, err;
3897     + int module_num, status, err, page_num = 0;
3898     + u32 in[MLX5_ST_SZ_DW(mcia_reg)] = {};
3899     u32 out[MLX5_ST_SZ_DW(mcia_reg)];
3900     - u32 in[MLX5_ST_SZ_DW(mcia_reg)];
3901     - u16 i2c_addr;
3902     - void *ptr = MLX5_ADDR_OF(mcia_reg, out, dword_0);
3903     + u16 i2c_addr = 0;
3904     + u8 module_id;
3905     + void *ptr;
3906    
3907     err = mlx5_query_module_num(dev, &module_num);
3908     if (err)
3909     return err;
3910    
3911     - memset(in, 0, sizeof(in));
3912     - size = min_t(int, size, MLX5_EEPROM_MAX_BYTES);
3913     -
3914     - /* Get the page number related to the given offset */
3915     - page_num = mlx5_eeprom_page(offset);
3916     + err = mlx5_query_module_id(dev, module_num, &module_id);
3917     + if (err)
3918     + return err;
3919    
3920     - /* Set the right offset according to the page number,
3921     - * For page_num > 0, relative offset is always >= 128 (high page).
3922     - */
3923     - offset -= mlx5_eeprom_high_page_offset(page_num);
3924     + switch (module_id) {
3925     + case MLX5_MODULE_ID_SFP:
3926     + mlx5_sfp_eeprom_params_set(&i2c_addr, &page_num, &offset);
3927     + break;
3928     + case MLX5_MODULE_ID_QSFP:
3929     + case MLX5_MODULE_ID_QSFP_PLUS:
3930     + case MLX5_MODULE_ID_QSFP28:
3931     + mlx5_qsfp_eeprom_params_set(&i2c_addr, &page_num, &offset);
3932     + break;
3933     + default:
3934     + mlx5_core_err(dev, "Module ID not recognized: 0x%x\n", module_id);
3935     + return -EINVAL;
3936     + }
3937    
3938     if (offset + size > MLX5_EEPROM_PAGE_LENGTH)
3939     /* Cross pages read, read until offset 256 in low page */
3940     size -= offset + size - MLX5_EEPROM_PAGE_LENGTH;
3941    
3942     - i2c_addr = MLX5_I2C_ADDR_LOW;
3943     + size = min_t(int, size, MLX5_EEPROM_MAX_BYTES);
3944    
3945     MLX5_SET(mcia_reg, in, l, 0);
3946     MLX5_SET(mcia_reg, in, module, module_num);
3947     @@ -365,6 +425,7 @@ int mlx5_query_module_eeprom(struct mlx5_core_dev *dev,
3948     return -EIO;
3949     }
3950    
3951     + ptr = MLX5_ADDR_OF(mcia_reg, out, dword_0);
3952     memcpy(data, ptr, size);
3953    
3954     return size;
3955     diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
3956     index f3d1f9411d10..aa4fef789084 100644
3957     --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
3958     +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
3959     @@ -1401,23 +1401,12 @@ static int mlxsw_pci_init(void *bus_priv, struct mlxsw_core *mlxsw_core,
3960     u16 num_pages;
3961     int err;
3962    
3963     - mutex_init(&mlxsw_pci->cmd.lock);
3964     - init_waitqueue_head(&mlxsw_pci->cmd.wait);
3965     -
3966     mlxsw_pci->core = mlxsw_core;
3967    
3968     mbox = mlxsw_cmd_mbox_alloc();
3969     if (!mbox)
3970     return -ENOMEM;
3971    
3972     - err = mlxsw_pci_mbox_alloc(mlxsw_pci, &mlxsw_pci->cmd.in_mbox);
3973     - if (err)
3974     - goto mbox_put;
3975     -
3976     - err = mlxsw_pci_mbox_alloc(mlxsw_pci, &mlxsw_pci->cmd.out_mbox);
3977     - if (err)
3978     - goto err_out_mbox_alloc;
3979     -
3980     err = mlxsw_pci_sw_reset(mlxsw_pci, mlxsw_pci->id);
3981     if (err)
3982     goto err_sw_reset;
3983     @@ -1524,9 +1513,6 @@ err_query_fw:
3984     mlxsw_pci_free_irq_vectors(mlxsw_pci);
3985     err_alloc_irq:
3986     err_sw_reset:
3987     - mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.out_mbox);
3988     -err_out_mbox_alloc:
3989     - mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.in_mbox);
3990     mbox_put:
3991     mlxsw_cmd_mbox_free(mbox);
3992     return err;
3993     @@ -1540,8 +1526,6 @@ static void mlxsw_pci_fini(void *bus_priv)
3994     mlxsw_pci_aqs_fini(mlxsw_pci);
3995     mlxsw_pci_fw_area_fini(mlxsw_pci);
3996     mlxsw_pci_free_irq_vectors(mlxsw_pci);
3997     - mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.out_mbox);
3998     - mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.in_mbox);
3999     }
4000    
4001     static struct mlxsw_pci_queue *
4002     @@ -1755,6 +1739,37 @@ static const struct mlxsw_bus mlxsw_pci_bus = {
4003     .features = MLXSW_BUS_F_TXRX | MLXSW_BUS_F_RESET,
4004     };
4005    
4006     +static int mlxsw_pci_cmd_init(struct mlxsw_pci *mlxsw_pci)
4007     +{
4008     + int err;
4009     +
4010     + mutex_init(&mlxsw_pci->cmd.lock);
4011     + init_waitqueue_head(&mlxsw_pci->cmd.wait);
4012     +
4013     + err = mlxsw_pci_mbox_alloc(mlxsw_pci, &mlxsw_pci->cmd.in_mbox);
4014     + if (err)
4015     + goto err_in_mbox_alloc;
4016     +
4017     + err = mlxsw_pci_mbox_alloc(mlxsw_pci, &mlxsw_pci->cmd.out_mbox);
4018     + if (err)
4019     + goto err_out_mbox_alloc;
4020     +
4021     + return 0;
4022     +
4023     +err_out_mbox_alloc:
4024     + mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.in_mbox);
4025     +err_in_mbox_alloc:
4026     + mutex_destroy(&mlxsw_pci->cmd.lock);
4027     + return err;
4028     +}
4029     +
4030     +static void mlxsw_pci_cmd_fini(struct mlxsw_pci *mlxsw_pci)
4031     +{
4032     + mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.out_mbox);
4033     + mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.in_mbox);
4034     + mutex_destroy(&mlxsw_pci->cmd.lock);
4035     +}
4036     +
4037     static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
4038     {
4039     const char *driver_name = pdev->driver->name;
4040     @@ -1810,6 +1825,10 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
4041     mlxsw_pci->pdev = pdev;
4042     pci_set_drvdata(pdev, mlxsw_pci);
4043    
4044     + err = mlxsw_pci_cmd_init(mlxsw_pci);
4045     + if (err)
4046     + goto err_pci_cmd_init;
4047     +
4048     mlxsw_pci->bus_info.device_kind = driver_name;
4049     mlxsw_pci->bus_info.device_name = pci_name(mlxsw_pci->pdev);
4050     mlxsw_pci->bus_info.dev = &pdev->dev;
4051     @@ -1827,6 +1846,8 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
4052     return 0;
4053    
4054     err_bus_device_register:
4055     + mlxsw_pci_cmd_fini(mlxsw_pci);
4056     +err_pci_cmd_init:
4057     iounmap(mlxsw_pci->hw_addr);
4058     err_ioremap:
4059     err_pci_resource_len_check:
4060     @@ -1844,6 +1865,7 @@ static void mlxsw_pci_remove(struct pci_dev *pdev)
4061     struct mlxsw_pci *mlxsw_pci = pci_get_drvdata(pdev);
4062    
4063     mlxsw_core_bus_device_unregister(mlxsw_pci->core, false);
4064     + mlxsw_pci_cmd_fini(mlxsw_pci);
4065     iounmap(mlxsw_pci->hw_addr);
4066     pci_release_regions(mlxsw_pci->pdev);
4067     pci_disable_device(mlxsw_pci->pdev);
4068     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
4069     index efdf8cb5114c..2f013fc71698 100644
4070     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
4071     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
4072     @@ -6287,7 +6287,7 @@ static int mlxsw_sp_router_fib_event(struct notifier_block *nb,
4073     }
4074    
4075     fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);
4076     - if (WARN_ON(!fib_work))
4077     + if (!fib_work)
4078     return NOTIFY_BAD;
4079    
4080     fib_work->mlxsw_sp = router->mlxsw_sp;
4081     diff --git a/drivers/net/ethernet/qlogic/qed/qed_debug.c b/drivers/net/ethernet/qlogic/qed/qed_debug.c
4082     index 859caa6c1a1f..8e7be214f959 100644
4083     --- a/drivers/net/ethernet/qlogic/qed/qed_debug.c
4084     +++ b/drivers/net/ethernet/qlogic/qed/qed_debug.c
4085     @@ -8197,6 +8197,10 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
4086     DP_ERR(cdev, "qed_dbg_mcp_trace failed. rc = %d\n", rc);
4087     }
4088    
4089     + /* Re-populate nvm attribute info */
4090     + qed_mcp_nvm_info_free(p_hwfn);
4091     + qed_mcp_nvm_info_populate(p_hwfn);
4092     +
4093     /* nvm cfg1 */
4094     rc = qed_dbg_nvm_image(cdev,
4095     (u8 *)buffer + offset + REGDUMP_HEADER_SIZE,
4096     diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
4097     index ecd14474a603..638047b937c6 100644
4098     --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
4099     +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
4100     @@ -4423,12 +4423,6 @@ static int qed_get_dev_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
4101     return 0;
4102     }
4103    
4104     -static void qed_nvm_info_free(struct qed_hwfn *p_hwfn)
4105     -{
4106     - kfree(p_hwfn->nvm_info.image_att);
4107     - p_hwfn->nvm_info.image_att = NULL;
4108     -}
4109     -
4110     static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
4111     void __iomem *p_regview,
4112     void __iomem *p_doorbells,
4113     @@ -4513,7 +4507,7 @@ static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
4114     return rc;
4115     err3:
4116     if (IS_LEAD_HWFN(p_hwfn))
4117     - qed_nvm_info_free(p_hwfn);
4118     + qed_mcp_nvm_info_free(p_hwfn);
4119     err2:
4120     if (IS_LEAD_HWFN(p_hwfn))
4121     qed_iov_free_hw_info(p_hwfn->cdev);
4122     @@ -4574,7 +4568,7 @@ int qed_hw_prepare(struct qed_dev *cdev,
4123     if (rc) {
4124     if (IS_PF(cdev)) {
4125     qed_init_free(p_hwfn);
4126     - qed_nvm_info_free(p_hwfn);
4127     + qed_mcp_nvm_info_free(p_hwfn);
4128     qed_mcp_free(p_hwfn);
4129     qed_hw_hwfn_free(p_hwfn);
4130     }
4131     @@ -4608,7 +4602,7 @@ void qed_hw_remove(struct qed_dev *cdev)
4132    
4133     qed_iov_free_hw_info(cdev);
4134    
4135     - qed_nvm_info_free(p_hwfn);
4136     + qed_mcp_nvm_info_free(p_hwfn);
4137     }
4138    
4139     static void qed_chain_free_next_ptr(struct qed_dev *cdev,
4140     diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
4141     index 36ddb89856a8..9401b49275f0 100644
4142     --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
4143     +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
4144     @@ -3149,6 +3149,13 @@ err0:
4145     return rc;
4146     }
4147    
4148     +void qed_mcp_nvm_info_free(struct qed_hwfn *p_hwfn)
4149     +{
4150     + kfree(p_hwfn->nvm_info.image_att);
4151     + p_hwfn->nvm_info.image_att = NULL;
4152     + p_hwfn->nvm_info.valid = false;
4153     +}
4154     +
4155     int
4156     qed_mcp_get_nvm_image_att(struct qed_hwfn *p_hwfn,
4157     enum qed_nvm_images image_id,
4158     diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.h b/drivers/net/ethernet/qlogic/qed/qed_mcp.h
4159     index 9c4c2763de8d..e38297383b00 100644
4160     --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h
4161     +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h
4162     @@ -1192,6 +1192,13 @@ void qed_mcp_read_ufp_config(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
4163     */
4164     int qed_mcp_nvm_info_populate(struct qed_hwfn *p_hwfn);
4165    
4166     +/**
4167     + * @brief Delete nvm info shadow in the given hardware function
4168     + *
4169     + * @param p_hwfn
4170     + */
4171     +void qed_mcp_nvm_info_free(struct qed_hwfn *p_hwfn);
4172     +
4173     /**
4174     * @brief Get the engine affinity configuration.
4175     *
4176     diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
4177     index 3cf4dc3433f9..bb4ccbda031a 100644
4178     --- a/drivers/net/usb/smsc95xx.c
4179     +++ b/drivers/net/usb/smsc95xx.c
4180     @@ -1287,11 +1287,14 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
4181    
4182     /* Init all registers */
4183     ret = smsc95xx_reset(dev);
4184     + if (ret)
4185     + goto free_pdata;
4186    
4187     /* detect device revision as different features may be available */
4188     ret = smsc95xx_read_reg(dev, ID_REV, &val);
4189     if (ret < 0)
4190     - return ret;
4191     + goto free_pdata;
4192     +
4193     val >>= 16;
4194     pdata->chip_id = val;
4195     pdata->mdix_ctrl = get_mdix_status(dev->net);
4196     @@ -1317,6 +1320,10 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
4197     schedule_delayed_work(&pdata->carrier_check, CARRIER_CHECK_DELAY);
4198    
4199     return 0;
4200     +
4201     +free_pdata:
4202     + kfree(pdata);
4203     + return ret;
4204     }
4205    
4206     static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf)
4207     diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
4208     index 4ed21dad6a8e..6049d3766c64 100644
4209     --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
4210     +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
4211     @@ -643,9 +643,9 @@ err:
4212    
4213     static void ath9k_hif_usb_rx_cb(struct urb *urb)
4214     {
4215     - struct rx_buf *rx_buf = (struct rx_buf *)urb->context;
4216     - struct hif_device_usb *hif_dev = rx_buf->hif_dev;
4217     - struct sk_buff *skb = rx_buf->skb;
4218     + struct sk_buff *skb = (struct sk_buff *) urb->context;
4219     + struct hif_device_usb *hif_dev =
4220     + usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
4221     int ret;
4222    
4223     if (!skb)
4224     @@ -685,15 +685,14 @@ resubmit:
4225     return;
4226     free:
4227     kfree_skb(skb);
4228     - kfree(rx_buf);
4229     }
4230    
4231     static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
4232     {
4233     - struct rx_buf *rx_buf = (struct rx_buf *)urb->context;
4234     - struct hif_device_usb *hif_dev = rx_buf->hif_dev;
4235     - struct sk_buff *skb = rx_buf->skb;
4236     + struct sk_buff *skb = (struct sk_buff *) urb->context;
4237     struct sk_buff *nskb;
4238     + struct hif_device_usb *hif_dev =
4239     + usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
4240     int ret;
4241    
4242     if (!skb)
4243     @@ -751,7 +750,6 @@ resubmit:
4244     return;
4245     free:
4246     kfree_skb(skb);
4247     - kfree(rx_buf);
4248     urb->context = NULL;
4249     }
4250    
4251     @@ -797,7 +795,7 @@ static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
4252     init_usb_anchor(&hif_dev->mgmt_submitted);
4253    
4254     for (i = 0; i < MAX_TX_URB_NUM; i++) {
4255     - tx_buf = kzalloc(sizeof(*tx_buf), GFP_KERNEL);
4256     + tx_buf = kzalloc(sizeof(struct tx_buf), GFP_KERNEL);
4257     if (!tx_buf)
4258     goto err;
4259    
4260     @@ -834,9 +832,8 @@ static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev)
4261    
4262     static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
4263     {
4264     - struct rx_buf *rx_buf = NULL;
4265     - struct sk_buff *skb = NULL;
4266     struct urb *urb = NULL;
4267     + struct sk_buff *skb = NULL;
4268     int i, ret;
4269    
4270     init_usb_anchor(&hif_dev->rx_submitted);
4271     @@ -844,12 +841,6 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
4272    
4273     for (i = 0; i < MAX_RX_URB_NUM; i++) {
4274    
4275     - rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
4276     - if (!rx_buf) {
4277     - ret = -ENOMEM;
4278     - goto err_rxb;
4279     - }
4280     -
4281     /* Allocate URB */
4282     urb = usb_alloc_urb(0, GFP_KERNEL);
4283     if (urb == NULL) {
4284     @@ -864,14 +855,11 @@ static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
4285     goto err_skb;
4286     }
4287    
4288     - rx_buf->hif_dev = hif_dev;
4289     - rx_buf->skb = skb;
4290     -
4291     usb_fill_bulk_urb(urb, hif_dev->udev,
4292     usb_rcvbulkpipe(hif_dev->udev,
4293     USB_WLAN_RX_PIPE),
4294     skb->data, MAX_RX_BUF_SIZE,
4295     - ath9k_hif_usb_rx_cb, rx_buf);
4296     + ath9k_hif_usb_rx_cb, skb);
4297    
4298     /* Anchor URB */
4299     usb_anchor_urb(urb, &hif_dev->rx_submitted);
4300     @@ -897,8 +885,6 @@ err_submit:
4301     err_skb:
4302     usb_free_urb(urb);
4303     err_urb:
4304     - kfree(rx_buf);
4305     -err_rxb:
4306     ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
4307     return ret;
4308     }
4309     @@ -910,21 +896,14 @@ static void ath9k_hif_usb_dealloc_reg_in_urbs(struct hif_device_usb *hif_dev)
4310    
4311     static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)
4312     {
4313     - struct rx_buf *rx_buf = NULL;
4314     - struct sk_buff *skb = NULL;
4315     struct urb *urb = NULL;
4316     + struct sk_buff *skb = NULL;
4317     int i, ret;
4318    
4319     init_usb_anchor(&hif_dev->reg_in_submitted);
4320    
4321     for (i = 0; i < MAX_REG_IN_URB_NUM; i++) {
4322    
4323     - rx_buf = kzalloc(sizeof(*rx_buf), GFP_KERNEL);
4324     - if (!rx_buf) {
4325     - ret = -ENOMEM;
4326     - goto err_rxb;
4327     - }
4328     -
4329     /* Allocate URB */
4330     urb = usb_alloc_urb(0, GFP_KERNEL);
4331     if (urb == NULL) {
4332     @@ -939,14 +918,11 @@ static int ath9k_hif_usb_alloc_reg_in_urbs(struct hif_device_usb *hif_dev)
4333     goto err_skb;
4334     }
4335    
4336     - rx_buf->hif_dev = hif_dev;
4337     - rx_buf->skb = skb;
4338     -
4339     usb_fill_int_urb(urb, hif_dev->udev,
4340     usb_rcvintpipe(hif_dev->udev,
4341     USB_REG_IN_PIPE),
4342     skb->data, MAX_REG_IN_BUF_SIZE,
4343     - ath9k_hif_usb_reg_in_cb, rx_buf, 1);
4344     + ath9k_hif_usb_reg_in_cb, skb, 1);
4345    
4346     /* Anchor URB */
4347     usb_anchor_urb(urb, &hif_dev->reg_in_submitted);
4348     @@ -972,8 +948,6 @@ err_submit:
4349     err_skb:
4350     usb_free_urb(urb);
4351     err_urb:
4352     - kfree(rx_buf);
4353     -err_rxb:
4354     ath9k_hif_usb_dealloc_reg_in_urbs(hif_dev);
4355     return ret;
4356     }
4357     diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
4358     index 5985aa15ca93..a94e7e1c86e9 100644
4359     --- a/drivers/net/wireless/ath/ath9k/hif_usb.h
4360     +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
4361     @@ -86,11 +86,6 @@ struct tx_buf {
4362     struct list_head list;
4363     };
4364    
4365     -struct rx_buf {
4366     - struct sk_buff *skb;
4367     - struct hif_device_usb *hif_dev;
4368     -};
4369     -
4370     #define HIF_USB_TX_STOP BIT(0)
4371     #define HIF_USB_TX_FLUSH BIT(1)
4372    
4373     diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
4374     index 73e8475ddc8a..cd0d49978190 100644
4375     --- a/drivers/nvme/host/rdma.c
4376     +++ b/drivers/nvme/host/rdma.c
4377     @@ -451,7 +451,7 @@ static int nvme_rdma_create_queue_ib(struct nvme_rdma_queue *queue)
4378     * Spread I/O queues completion vectors according their queue index.
4379     * Admin queues can always go on completion vector 0.
4380     */
4381     - comp_vector = idx == 0 ? idx : idx - 1;
4382     + comp_vector = (idx == 0 ? idx : idx - 1) % ibdev->num_comp_vectors;
4383    
4384     /* Polling queues need direct cq polling context */
4385     if (nvme_rdma_poll_queue(queue))
4386     diff --git a/drivers/pwm/pwm-jz4740.c b/drivers/pwm/pwm-jz4740.c
4387     index d0f5c69930d0..77c28313e95f 100644
4388     --- a/drivers/pwm/pwm-jz4740.c
4389     +++ b/drivers/pwm/pwm-jz4740.c
4390     @@ -92,11 +92,12 @@ static int jz4740_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
4391     {
4392     struct jz4740_pwm_chip *jz4740 = to_jz4740(pwm->chip);
4393     unsigned long long tmp;
4394     - unsigned long period, duty;
4395     + unsigned long rate, period, duty;
4396     unsigned int prescaler = 0;
4397     uint16_t ctrl;
4398    
4399     - tmp = (unsigned long long)clk_get_rate(jz4740->clk) * state->period;
4400     + rate = clk_get_rate(jz4740->clk);
4401     + tmp = rate * state->period;
4402     do_div(tmp, 1000000000);
4403     period = tmp;
4404    
4405     diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
4406     index 9a06818d2816..3e0e27731922 100644
4407     --- a/drivers/spi/spi-fsl-dspi.c
4408     +++ b/drivers/spi/spi-fsl-dspi.c
4409     @@ -1,6 +1,7 @@
4410     // SPDX-License-Identifier: GPL-2.0+
4411     //
4412     // Copyright 2013 Freescale Semiconductor, Inc.
4413     +// Copyright 2020 NXP
4414     //
4415     // Freescale DSPI driver
4416     // This file contains a driver for the Freescale DSPI
4417     @@ -33,6 +34,9 @@
4418     #define SPI_MCR_CLR_TXF BIT(11)
4419     #define SPI_MCR_CLR_RXF BIT(10)
4420     #define SPI_MCR_XSPI BIT(3)
4421     +#define SPI_MCR_DIS_TXF BIT(13)
4422     +#define SPI_MCR_DIS_RXF BIT(12)
4423     +#define SPI_MCR_HALT BIT(0)
4424    
4425     #define SPI_TCR 0x08
4426     #define SPI_TCR_GET_TCNT(x) (((x) & GENMASK(31, 16)) >> 16)
4427     @@ -1160,15 +1164,42 @@ static int dspi_remove(struct platform_device *pdev)
4428     struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);
4429    
4430     /* Disconnect from the SPI framework */
4431     + spi_unregister_controller(dspi->ctlr);
4432     +
4433     + /* Disable RX and TX */
4434     + regmap_update_bits(dspi->regmap, SPI_MCR,
4435     + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF,
4436     + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF);
4437     +
4438     + /* Stop Running */
4439     + regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT);
4440     +
4441     dspi_release_dma(dspi);
4442     if (dspi->irq)
4443     free_irq(dspi->irq, dspi);
4444     clk_disable_unprepare(dspi->clk);
4445     - spi_unregister_controller(dspi->ctlr);
4446    
4447     return 0;
4448     }
4449    
4450     +static void dspi_shutdown(struct platform_device *pdev)
4451     +{
4452     + struct spi_controller *ctlr = platform_get_drvdata(pdev);
4453     + struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);
4454     +
4455     + /* Disable RX and TX */
4456     + regmap_update_bits(dspi->regmap, SPI_MCR,
4457     + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF,
4458     + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF);
4459     +
4460     + /* Stop Running */
4461     + regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT);
4462     +
4463     + dspi_release_dma(dspi);
4464     + clk_disable_unprepare(dspi->clk);
4465     + spi_unregister_controller(dspi->ctlr);
4466     +}
4467     +
4468     static struct platform_driver fsl_dspi_driver = {
4469     .driver.name = DRIVER_NAME,
4470     .driver.of_match_table = fsl_dspi_dt_ids,
4471     @@ -1176,6 +1207,7 @@ static struct platform_driver fsl_dspi_driver = {
4472     .driver.pm = &dspi_pm,
4473     .probe = dspi_probe,
4474     .remove = dspi_remove,
4475     + .shutdown = dspi_shutdown,
4476     };
4477     module_platform_driver(fsl_dspi_driver);
4478    
4479     diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
4480     index ab2c3848f5bf..ac6bf1fbbfe6 100644
4481     --- a/drivers/spi/spidev.c
4482     +++ b/drivers/spi/spidev.c
4483     @@ -605,15 +605,20 @@ err_find_dev:
4484     static int spidev_release(struct inode *inode, struct file *filp)
4485     {
4486     struct spidev_data *spidev;
4487     + int dofree;
4488    
4489     mutex_lock(&device_list_lock);
4490     spidev = filp->private_data;
4491     filp->private_data = NULL;
4492    
4493     + spin_lock_irq(&spidev->spi_lock);
4494     + /* ... after we unbound from the underlying device? */
4495     + dofree = (spidev->spi == NULL);
4496     + spin_unlock_irq(&spidev->spi_lock);
4497     +
4498     /* last close? */
4499     spidev->users--;
4500     if (!spidev->users) {
4501     - int dofree;
4502    
4503     kfree(spidev->tx_buffer);
4504     spidev->tx_buffer = NULL;
4505     @@ -621,19 +626,14 @@ static int spidev_release(struct inode *inode, struct file *filp)
4506     kfree(spidev->rx_buffer);
4507     spidev->rx_buffer = NULL;
4508    
4509     - spin_lock_irq(&spidev->spi_lock);
4510     - if (spidev->spi)
4511     - spidev->speed_hz = spidev->spi->max_speed_hz;
4512     -
4513     - /* ... after we unbound from the underlying device? */
4514     - dofree = (spidev->spi == NULL);
4515     - spin_unlock_irq(&spidev->spi_lock);
4516     -
4517     if (dofree)
4518     kfree(spidev);
4519     + else
4520     + spidev->speed_hz = spidev->spi->max_speed_hz;
4521     }
4522     #ifdef CONFIG_SPI_SLAVE
4523     - spi_slave_abort(spidev->spi);
4524     + if (!dofree)
4525     + spi_slave_abort(spidev->spi);
4526     #endif
4527     mutex_unlock(&device_list_lock);
4528    
4529     @@ -783,13 +783,13 @@ static int spidev_remove(struct spi_device *spi)
4530     {
4531     struct spidev_data *spidev = spi_get_drvdata(spi);
4532    
4533     + /* prevent new opens */
4534     + mutex_lock(&device_list_lock);
4535     /* make sure ops on existing fds can abort cleanly */
4536     spin_lock_irq(&spidev->spi_lock);
4537     spidev->spi = NULL;
4538     spin_unlock_irq(&spidev->spi_lock);
4539    
4540     - /* prevent new opens */
4541     - mutex_lock(&device_list_lock);
4542     list_del(&spidev->device_entry);
4543     device_destroy(spidev_class, spidev->devt);
4544     clear_bit(MINOR(spidev->devt), minors);
4545     diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
4546     index b67372737dc9..96c05b121fac 100644
4547     --- a/drivers/usb/dwc3/dwc3-pci.c
4548     +++ b/drivers/usb/dwc3/dwc3-pci.c
4549     @@ -206,8 +206,10 @@ static void dwc3_pci_resume_work(struct work_struct *work)
4550     int ret;
4551    
4552     ret = pm_runtime_get_sync(&dwc3->dev);
4553     - if (ret)
4554     + if (ret) {
4555     + pm_runtime_put_sync_autosuspend(&dwc3->dev);
4556     return;
4557     + }
4558    
4559     pm_runtime_mark_last_busy(&dwc3->dev);
4560     pm_runtime_put_sync_autosuspend(&dwc3->dev);
4561     diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
4562     index 8aab286f2028..9b214b14a3aa 100644
4563     --- a/fs/btrfs/extent_io.c
4564     +++ b/fs/btrfs/extent_io.c
4565     @@ -5025,25 +5025,28 @@ struct extent_buffer *alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
4566     static void check_buffer_tree_ref(struct extent_buffer *eb)
4567     {
4568     int refs;
4569     - /* the ref bit is tricky. We have to make sure it is set
4570     - * if we have the buffer dirty. Otherwise the
4571     - * code to free a buffer can end up dropping a dirty
4572     - * page
4573     + /*
4574     + * The TREE_REF bit is first set when the extent_buffer is added
4575     + * to the radix tree. It is also reset, if unset, when a new reference
4576     + * is created by find_extent_buffer.
4577     *
4578     - * Once the ref bit is set, it won't go away while the
4579     - * buffer is dirty or in writeback, and it also won't
4580     - * go away while we have the reference count on the
4581     - * eb bumped.
4582     + * It is only cleared in two cases: freeing the last non-tree
4583     + * reference to the extent_buffer when its STALE bit is set or
4584     + * calling releasepage when the tree reference is the only reference.
4585     *
4586     - * We can't just set the ref bit without bumping the
4587     - * ref on the eb because free_extent_buffer might
4588     - * see the ref bit and try to clear it. If this happens
4589     - * free_extent_buffer might end up dropping our original
4590     - * ref by mistake and freeing the page before we are able
4591     - * to add one more ref.
4592     + * In both cases, care is taken to ensure that the extent_buffer's
4593     + * pages are not under io. However, releasepage can be concurrently
4594     + * called with creating new references, which is prone to race
4595     + * conditions between the calls to check_buffer_tree_ref in those
4596     + * codepaths and clearing TREE_REF in try_release_extent_buffer.
4597     *
4598     - * So bump the ref count first, then set the bit. If someone
4599     - * beat us to it, drop the ref we added.
4600     + * The actual lifetime of the extent_buffer in the radix tree is
4601     + * adequately protected by the refcount, but the TREE_REF bit and
4602     + * its corresponding reference are not. To protect against this
4603     + * class of races, we call check_buffer_tree_ref from the codepaths
4604     + * which trigger io after they set eb->io_pages. Note that once io is
4605     + * initiated, TREE_REF can no longer be cleared, so that is the
4606     + * moment at which any such race is best fixed.
4607     */
4608     refs = atomic_read(&eb->refs);
4609     if (refs >= 2 && test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags))
4610     @@ -5493,6 +5496,11 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num)
4611     clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags);
4612     eb->read_mirror = 0;
4613     atomic_set(&eb->io_pages, num_reads);
4614     + /*
4615     + * It is possible for releasepage to clear the TREE_REF bit before we
4616     + * set io_pages. See check_buffer_tree_ref for a more detailed comment.
4617     + */
4618     + check_buffer_tree_ref(eb);
4619     for (i = 0; i < num_pages; i++) {
4620     page = eb->pages[i];
4621    
4622     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
4623     index 280c45c91ddc..e408181a5eba 100644
4624     --- a/fs/btrfs/inode.c
4625     +++ b/fs/btrfs/inode.c
4626     @@ -1657,12 +1657,8 @@ out_check:
4627     ret = fallback_to_cow(inode, locked_page, cow_start,
4628     found_key.offset - 1,
4629     page_started, nr_written);
4630     - if (ret) {
4631     - if (nocow)
4632     - btrfs_dec_nocow_writers(fs_info,
4633     - disk_bytenr);
4634     + if (ret)
4635     goto error;
4636     - }
4637     cow_start = (u64)-1;
4638     }
4639    
4640     @@ -1678,9 +1674,6 @@ out_check:
4641     ram_bytes, BTRFS_COMPRESS_NONE,
4642     BTRFS_ORDERED_PREALLOC);
4643     if (IS_ERR(em)) {
4644     - if (nocow)
4645     - btrfs_dec_nocow_writers(fs_info,
4646     - disk_bytenr);
4647     ret = PTR_ERR(em);
4648     goto error;
4649     }
4650     diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
4651     index 6045b4868275..5ae458505f63 100644
4652     --- a/fs/cifs/inode.c
4653     +++ b/fs/cifs/inode.c
4654     @@ -2270,6 +2270,15 @@ set_size_out:
4655     if (rc == 0) {
4656     cifsInode->server_eof = attrs->ia_size;
4657     cifs_setsize(inode, attrs->ia_size);
4658     +
4659     + /*
4660     + * The man page of truncate says if the size changed,
4661     + * then the st_ctime and st_mtime fields for the file
4662     + * are updated.
4663     + */
4664     + attrs->ia_ctime = attrs->ia_mtime = current_time(inode);
4665     + attrs->ia_valid |= ATTR_CTIME | ATTR_MTIME;
4666     +
4667     cifs_truncate_page(inode->i_mapping, inode->i_size);
4668     }
4669    
4670     diff --git a/include/linux/filter.h b/include/linux/filter.h
4671     index 3bbc72dbc69e..79830bc9e45c 100644
4672     --- a/include/linux/filter.h
4673     +++ b/include/linux/filter.h
4674     @@ -853,12 +853,12 @@ void bpf_jit_compile(struct bpf_prog *prog);
4675     bool bpf_jit_needs_zext(void);
4676     bool bpf_helper_changes_pkt_data(void *func);
4677    
4678     -static inline bool bpf_dump_raw_ok(void)
4679     +static inline bool bpf_dump_raw_ok(const struct cred *cred)
4680     {
4681     /* Reconstruction of call-sites is dependent on kallsyms,
4682     * thus make dump the same restriction.
4683     */
4684     - return kallsyms_show_value() == 1;
4685     + return kallsyms_show_value(cred);
4686     }
4687    
4688     struct bpf_prog *bpf_patch_insn_single(struct bpf_prog *prog, u32 off,
4689     diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
4690     index 657a83b943f0..1f96ce2b47df 100644
4691     --- a/include/linux/kallsyms.h
4692     +++ b/include/linux/kallsyms.h
4693     @@ -18,6 +18,7 @@
4694     #define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \
4695     2*(BITS_PER_LONG*3/10) + (MODULE_NAME_LEN - 1) + 1)
4696    
4697     +struct cred;
4698     struct module;
4699    
4700     static inline int is_kernel_inittext(unsigned long addr)
4701     @@ -98,7 +99,7 @@ int lookup_symbol_name(unsigned long addr, char *symname);
4702     int lookup_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
4703    
4704     /* How and when do we show kallsyms values? */
4705     -extern int kallsyms_show_value(void);
4706     +extern bool kallsyms_show_value(const struct cred *cred);
4707    
4708     #else /* !CONFIG_KALLSYMS */
4709    
4710     @@ -158,7 +159,7 @@ static inline int lookup_symbol_attrs(unsigned long addr, unsigned long *size, u
4711     return -ERANGE;
4712     }
4713    
4714     -static inline int kallsyms_show_value(void)
4715     +static inline bool kallsyms_show_value(const struct cred *cred)
4716     {
4717     return false;
4718     }
4719     diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
4720     index bc88d6f964da..006f01922439 100644
4721     --- a/include/sound/compress_driver.h
4722     +++ b/include/sound/compress_driver.h
4723     @@ -59,6 +59,7 @@ struct snd_compr_runtime {
4724     * @direction: stream direction, playback/recording
4725     * @metadata_set: metadata set flag, true when set
4726     * @next_track: has userspace signal next track transition, true when set
4727     + * @partial_drain: undergoing partial_drain for stream, true when set
4728     * @private_data: pointer to DSP private data
4729     */
4730     struct snd_compr_stream {
4731     @@ -70,6 +71,7 @@ struct snd_compr_stream {
4732     enum snd_compr_direction direction;
4733     bool metadata_set;
4734     bool next_track;
4735     + bool partial_drain;
4736     void *private_data;
4737     };
4738    
4739     @@ -173,7 +175,13 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream)
4740     if (snd_BUG_ON(!stream))
4741     return;
4742    
4743     - stream->runtime->state = SNDRV_PCM_STATE_SETUP;
4744     + /* for partial_drain case we are back to running state on success */
4745     + if (stream->partial_drain) {
4746     + stream->runtime->state = SNDRV_PCM_STATE_RUNNING;
4747     + stream->partial_drain = false; /* clear this flag as well */
4748     + } else {
4749     + stream->runtime->state = SNDRV_PCM_STATE_SETUP;
4750     + }
4751    
4752     wake_up(&stream->runtime->sleep);
4753     }
4754     diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
4755     index e7af1ac69d75..8bc904f9badb 100644
4756     --- a/kernel/bpf/syscall.c
4757     +++ b/kernel/bpf/syscall.c
4758     @@ -2248,7 +2248,8 @@ static const struct bpf_map *bpf_map_from_imm(const struct bpf_prog *prog,
4759     return NULL;
4760     }
4761    
4762     -static struct bpf_insn *bpf_insn_prepare_dump(const struct bpf_prog *prog)
4763     +static struct bpf_insn *bpf_insn_prepare_dump(const struct bpf_prog *prog,
4764     + const struct cred *f_cred)
4765     {
4766     const struct bpf_map *map;
4767     struct bpf_insn *insns;
4768     @@ -2271,7 +2272,7 @@ static struct bpf_insn *bpf_insn_prepare_dump(const struct bpf_prog *prog)
4769     insns[i].code == (BPF_JMP | BPF_CALL_ARGS)) {
4770     if (insns[i].code == (BPF_JMP | BPF_CALL_ARGS))
4771     insns[i].code = BPF_JMP | BPF_CALL;
4772     - if (!bpf_dump_raw_ok())
4773     + if (!bpf_dump_raw_ok(f_cred))
4774     insns[i].imm = 0;
4775     continue;
4776     }
4777     @@ -2323,7 +2324,8 @@ static int set_info_rec_size(struct bpf_prog_info *info)
4778     return 0;
4779     }
4780    
4781     -static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
4782     +static int bpf_prog_get_info_by_fd(struct file *file,
4783     + struct bpf_prog *prog,
4784     const union bpf_attr *attr,
4785     union bpf_attr __user *uattr)
4786     {
4787     @@ -2392,11 +2394,11 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
4788     struct bpf_insn *insns_sanitized;
4789     bool fault;
4790    
4791     - if (prog->blinded && !bpf_dump_raw_ok()) {
4792     + if (prog->blinded && !bpf_dump_raw_ok(file->f_cred)) {
4793     info.xlated_prog_insns = 0;
4794     goto done;
4795     }
4796     - insns_sanitized = bpf_insn_prepare_dump(prog);
4797     + insns_sanitized = bpf_insn_prepare_dump(prog, file->f_cred);
4798     if (!insns_sanitized)
4799     return -ENOMEM;
4800     uinsns = u64_to_user_ptr(info.xlated_prog_insns);
4801     @@ -2430,7 +2432,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
4802     }
4803    
4804     if (info.jited_prog_len && ulen) {
4805     - if (bpf_dump_raw_ok()) {
4806     + if (bpf_dump_raw_ok(file->f_cred)) {
4807     uinsns = u64_to_user_ptr(info.jited_prog_insns);
4808     ulen = min_t(u32, info.jited_prog_len, ulen);
4809    
4810     @@ -2465,7 +2467,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
4811     ulen = info.nr_jited_ksyms;
4812     info.nr_jited_ksyms = prog->aux->func_cnt ? : 1;
4813     if (ulen) {
4814     - if (bpf_dump_raw_ok()) {
4815     + if (bpf_dump_raw_ok(file->f_cred)) {
4816     unsigned long ksym_addr;
4817     u64 __user *user_ksyms;
4818     u32 i;
4819     @@ -2496,7 +2498,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
4820     ulen = info.nr_jited_func_lens;
4821     info.nr_jited_func_lens = prog->aux->func_cnt ? : 1;
4822     if (ulen) {
4823     - if (bpf_dump_raw_ok()) {
4824     + if (bpf_dump_raw_ok(file->f_cred)) {
4825     u32 __user *user_lens;
4826     u32 func_len, i;
4827    
4828     @@ -2553,7 +2555,7 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
4829     else
4830     info.nr_jited_line_info = 0;
4831     if (info.nr_jited_line_info && ulen) {
4832     - if (bpf_dump_raw_ok()) {
4833     + if (bpf_dump_raw_ok(file->f_cred)) {
4834     __u64 __user *user_linfo;
4835     u32 i;
4836    
4837     @@ -2599,7 +2601,8 @@ done:
4838     return 0;
4839     }
4840    
4841     -static int bpf_map_get_info_by_fd(struct bpf_map *map,
4842     +static int bpf_map_get_info_by_fd(struct file *file,
4843     + struct bpf_map *map,
4844     const union bpf_attr *attr,
4845     union bpf_attr __user *uattr)
4846     {
4847     @@ -2641,7 +2644,8 @@ static int bpf_map_get_info_by_fd(struct bpf_map *map,
4848     return 0;
4849     }
4850    
4851     -static int bpf_btf_get_info_by_fd(struct btf *btf,
4852     +static int bpf_btf_get_info_by_fd(struct file *file,
4853     + struct btf *btf,
4854     const union bpf_attr *attr,
4855     union bpf_attr __user *uattr)
4856     {
4857     @@ -2673,13 +2677,13 @@ static int bpf_obj_get_info_by_fd(const union bpf_attr *attr,
4858     return -EBADFD;
4859    
4860     if (f.file->f_op == &bpf_prog_fops)
4861     - err = bpf_prog_get_info_by_fd(f.file->private_data, attr,
4862     + err = bpf_prog_get_info_by_fd(f.file, f.file->private_data, attr,
4863     uattr);
4864     else if (f.file->f_op == &bpf_map_fops)
4865     - err = bpf_map_get_info_by_fd(f.file->private_data, attr,
4866     + err = bpf_map_get_info_by_fd(f.file, f.file->private_data, attr,
4867     uattr);
4868     else if (f.file->f_op == &btf_fops)
4869     - err = bpf_btf_get_info_by_fd(f.file->private_data, attr, uattr);
4870     + err = bpf_btf_get_info_by_fd(f.file, f.file->private_data, attr, uattr);
4871     else
4872     err = -EINVAL;
4873    
4874     diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
4875     index 136ce049c4ad..61f9d781f70a 100644
4876     --- a/kernel/kallsyms.c
4877     +++ b/kernel/kallsyms.c
4878     @@ -645,19 +645,20 @@ static inline int kallsyms_for_perf(void)
4879     * Otherwise, require CAP_SYSLOG (assuming kptr_restrict isn't set to
4880     * block even that).
4881     */
4882     -int kallsyms_show_value(void)
4883     +bool kallsyms_show_value(const struct cred *cred)
4884     {
4885     switch (kptr_restrict) {
4886     case 0:
4887     if (kallsyms_for_perf())
4888     - return 1;
4889     + return true;
4890     /* fallthrough */
4891     case 1:
4892     - if (has_capability_noaudit(current, CAP_SYSLOG))
4893     - return 1;
4894     + if (security_capable(cred, &init_user_ns, CAP_SYSLOG,
4895     + CAP_OPT_NOAUDIT) == 0)
4896     + return true;
4897     /* fallthrough */
4898     default:
4899     - return 0;
4900     + return false;
4901     }
4902     }
4903    
4904     @@ -674,7 +675,11 @@ static int kallsyms_open(struct inode *inode, struct file *file)
4905     return -ENOMEM;
4906     reset_iter(iter, 0);
4907    
4908     - iter->show_value = kallsyms_show_value();
4909     + /*
4910     + * Instead of checking this on every s_show() call, cache
4911     + * the result here at open time.
4912     + */
4913     + iter->show_value = kallsyms_show_value(file->f_cred);
4914     return 0;
4915     }
4916    
4917     diff --git a/kernel/kprobes.c b/kernel/kprobes.c
4918     index 950a5cfd262c..0a967db226d8 100644
4919     --- a/kernel/kprobes.c
4920     +++ b/kernel/kprobes.c
4921     @@ -2362,7 +2362,7 @@ static void report_probe(struct seq_file *pi, struct kprobe *p,
4922     else
4923     kprobe_type = "k";
4924    
4925     - if (!kallsyms_show_value())
4926     + if (!kallsyms_show_value(pi->file->f_cred))
4927     addr = NULL;
4928    
4929     if (sym)
4930     @@ -2463,7 +2463,7 @@ static int kprobe_blacklist_seq_show(struct seq_file *m, void *v)
4931     * If /proc/kallsyms is not showing kernel address, we won't
4932     * show them here either.
4933     */
4934     - if (!kallsyms_show_value())
4935     + if (!kallsyms_show_value(m->file->f_cred))
4936     seq_printf(m, "0x%px-0x%px\t%ps\n", NULL, NULL,
4937     (void *)ent->start_addr);
4938     else
4939     diff --git a/kernel/module.c b/kernel/module.c
4940     index a2a47f4a33a7..6baa1080cdb7 100644
4941     --- a/kernel/module.c
4942     +++ b/kernel/module.c
4943     @@ -1507,8 +1507,7 @@ static inline bool sect_empty(const Elf_Shdr *sect)
4944     }
4945    
4946     struct module_sect_attr {
4947     - struct module_attribute mattr;
4948     - char *name;
4949     + struct bin_attribute battr;
4950     unsigned long address;
4951     };
4952    
4953     @@ -1518,13 +1517,18 @@ struct module_sect_attrs {
4954     struct module_sect_attr attrs[0];
4955     };
4956    
4957     -static ssize_t module_sect_show(struct module_attribute *mattr,
4958     - struct module_kobject *mk, char *buf)
4959     +static ssize_t module_sect_read(struct file *file, struct kobject *kobj,
4960     + struct bin_attribute *battr,
4961     + char *buf, loff_t pos, size_t count)
4962     {
4963     struct module_sect_attr *sattr =
4964     - container_of(mattr, struct module_sect_attr, mattr);
4965     - return sprintf(buf, "0x%px\n", kptr_restrict < 2 ?
4966     - (void *)sattr->address : NULL);
4967     + container_of(battr, struct module_sect_attr, battr);
4968     +
4969     + if (pos != 0)
4970     + return -EINVAL;
4971     +
4972     + return sprintf(buf, "0x%px\n",
4973     + kallsyms_show_value(file->f_cred) ? (void *)sattr->address : NULL);
4974     }
4975    
4976     static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
4977     @@ -1532,7 +1536,7 @@ static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
4978     unsigned int section;
4979    
4980     for (section = 0; section < sect_attrs->nsections; section++)
4981     - kfree(sect_attrs->attrs[section].name);
4982     + kfree(sect_attrs->attrs[section].battr.attr.name);
4983     kfree(sect_attrs);
4984     }
4985    
4986     @@ -1541,42 +1545,41 @@ static void add_sect_attrs(struct module *mod, const struct load_info *info)
4987     unsigned int nloaded = 0, i, size[2];
4988     struct module_sect_attrs *sect_attrs;
4989     struct module_sect_attr *sattr;
4990     - struct attribute **gattr;
4991     + struct bin_attribute **gattr;
4992    
4993     /* Count loaded sections and allocate structures */
4994     for (i = 0; i < info->hdr->e_shnum; i++)
4995     if (!sect_empty(&info->sechdrs[i]))
4996     nloaded++;
4997     size[0] = ALIGN(struct_size(sect_attrs, attrs, nloaded),
4998     - sizeof(sect_attrs->grp.attrs[0]));
4999     - size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.attrs[0]);
5000     + sizeof(sect_attrs->grp.bin_attrs[0]));
5001     + size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.bin_attrs[0]);
5002     sect_attrs = kzalloc(size[0] + size[1], GFP_KERNEL);
5003     if (sect_attrs == NULL)
5004     return;
5005    
5006     /* Setup section attributes. */
5007     sect_attrs->grp.name = "sections";
5008     - sect_attrs->grp.attrs = (void *)sect_attrs + size[0];
5009     + sect_attrs->grp.bin_attrs = (void *)sect_attrs + size[0];
5010    
5011     sect_attrs->nsections = 0;
5012     sattr = &sect_attrs->attrs[0];
5013     - gattr = &sect_attrs->grp.attrs[0];
5014     + gattr = &sect_attrs->grp.bin_attrs[0];
5015     for (i = 0; i < info->hdr->e_shnum; i++) {
5016     Elf_Shdr *sec = &info->sechdrs[i];
5017     if (sect_empty(sec))
5018     continue;
5019     + sysfs_bin_attr_init(&sattr->battr);
5020     sattr->address = sec->sh_addr;
5021     - sattr->name = kstrdup(info->secstrings + sec->sh_name,
5022     - GFP_KERNEL);
5023     - if (sattr->name == NULL)
5024     + sattr->battr.attr.name =
5025     + kstrdup(info->secstrings + sec->sh_name, GFP_KERNEL);
5026     + if (sattr->battr.attr.name == NULL)
5027     goto out;
5028     sect_attrs->nsections++;
5029     - sysfs_attr_init(&sattr->mattr.attr);
5030     - sattr->mattr.show = module_sect_show;
5031     - sattr->mattr.store = NULL;
5032     - sattr->mattr.attr.name = sattr->name;
5033     - sattr->mattr.attr.mode = S_IRUSR;
5034     - *(gattr++) = &(sattr++)->mattr.attr;
5035     + sattr->battr.read = module_sect_read;
5036     + sattr->battr.size = 3 /* "0x", "\n" */ + (BITS_PER_LONG / 4);
5037     + sattr->battr.attr.mode = 0400;
5038     + *(gattr++) = &(sattr++)->battr;
5039     }
5040     *gattr = NULL;
5041    
5042     @@ -1666,7 +1669,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info)
5043     continue;
5044     if (info->sechdrs[i].sh_type == SHT_NOTE) {
5045     sysfs_bin_attr_init(nattr);
5046     - nattr->attr.name = mod->sect_attrs->attrs[loaded].name;
5047     + nattr->attr.name = mod->sect_attrs->attrs[loaded].battr.attr.name;
5048     nattr->attr.mode = S_IRUGO;
5049     nattr->size = info->sechdrs[i].sh_size;
5050     nattr->private = (void *) info->sechdrs[i].sh_addr;
5051     @@ -4391,7 +4394,7 @@ static int modules_open(struct inode *inode, struct file *file)
5052    
5053     if (!err) {
5054     struct seq_file *m = file->private_data;
5055     - m->private = kallsyms_show_value() ? NULL : (void *)8ul;
5056     + m->private = kallsyms_show_value(file->f_cred) ? NULL : (void *)8ul;
5057     }
5058    
5059     return err;
5060     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
5061     index 7238ef445daf..8b3e99d095ae 100644
5062     --- a/kernel/sched/core.c
5063     +++ b/kernel/sched/core.c
5064     @@ -1649,7 +1649,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p,
5065     goto out;
5066     }
5067    
5068     - if (cpumask_equal(p->cpus_ptr, new_mask))
5069     + if (cpumask_equal(&p->cpus_mask, new_mask))
5070     goto out;
5071    
5072     dest_cpu = cpumask_any_and(cpu_valid_mask, new_mask);
5073     diff --git a/net/core/skmsg.c b/net/core/skmsg.c
5074     index 0536ea9298e4..118cf1ace43a 100644
5075     --- a/net/core/skmsg.c
5076     +++ b/net/core/skmsg.c
5077     @@ -687,7 +687,7 @@ static struct sk_psock *sk_psock_from_strp(struct strparser *strp)
5078     return container_of(parser, struct sk_psock, parser);
5079     }
5080    
5081     -static void sk_psock_skb_redirect(struct sk_psock *psock, struct sk_buff *skb)
5082     +static void sk_psock_skb_redirect(struct sk_buff *skb)
5083     {
5084     struct sk_psock *psock_other;
5085     struct sock *sk_other;
5086     @@ -719,12 +719,11 @@ static void sk_psock_skb_redirect(struct sk_psock *psock, struct sk_buff *skb)
5087     }
5088     }
5089    
5090     -static void sk_psock_tls_verdict_apply(struct sk_psock *psock,
5091     - struct sk_buff *skb, int verdict)
5092     +static void sk_psock_tls_verdict_apply(struct sk_buff *skb, int verdict)
5093     {
5094     switch (verdict) {
5095     case __SK_REDIRECT:
5096     - sk_psock_skb_redirect(psock, skb);
5097     + sk_psock_skb_redirect(skb);
5098     break;
5099     case __SK_PASS:
5100     case __SK_DROP:
5101     @@ -745,8 +744,8 @@ int sk_psock_tls_strp_read(struct sk_psock *psock, struct sk_buff *skb)
5102     ret = sk_psock_bpf_run(psock, prog, skb);
5103     ret = sk_psock_map_verd(ret, tcp_skb_bpf_redirect_fetch(skb));
5104     }
5105     + sk_psock_tls_verdict_apply(skb, ret);
5106     rcu_read_unlock();
5107     - sk_psock_tls_verdict_apply(psock, skb, ret);
5108     return ret;
5109     }
5110     EXPORT_SYMBOL_GPL(sk_psock_tls_strp_read);
5111     @@ -774,7 +773,7 @@ static void sk_psock_verdict_apply(struct sk_psock *psock,
5112     }
5113     goto out_free;
5114     case __SK_REDIRECT:
5115     - sk_psock_skb_redirect(psock, skb);
5116     + sk_psock_skb_redirect(skb);
5117     break;
5118     case __SK_DROP:
5119     /* fall-through */
5120     @@ -786,11 +785,18 @@ out_free:
5121    
5122     static void sk_psock_strp_read(struct strparser *strp, struct sk_buff *skb)
5123     {
5124     - struct sk_psock *psock = sk_psock_from_strp(strp);
5125     + struct sk_psock *psock;
5126     struct bpf_prog *prog;
5127     int ret = __SK_DROP;
5128     + struct sock *sk;
5129    
5130     rcu_read_lock();
5131     + sk = strp->sk;
5132     + psock = sk_psock(sk);
5133     + if (unlikely(!psock)) {
5134     + kfree_skb(skb);
5135     + goto out;
5136     + }
5137     prog = READ_ONCE(psock->progs.skb_verdict);
5138     if (likely(prog)) {
5139     skb_orphan(skb);
5140     @@ -798,8 +804,9 @@ static void sk_psock_strp_read(struct strparser *strp, struct sk_buff *skb)
5141     ret = sk_psock_bpf_run(psock, prog, skb);
5142     ret = sk_psock_map_verd(ret, tcp_skb_bpf_redirect_fetch(skb));
5143     }
5144     - rcu_read_unlock();
5145     sk_psock_verdict_apply(psock, skb, ret);
5146     +out:
5147     + rcu_read_unlock();
5148     }
5149    
5150     static int sk_psock_strp_read_done(struct strparser *strp, int err)
5151     diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
5152     index 9f9e00ba3ad7..669cbe1609d9 100644
5153     --- a/net/core/sysctl_net_core.c
5154     +++ b/net/core/sysctl_net_core.c
5155     @@ -277,7 +277,7 @@ static int proc_dointvec_minmax_bpf_enable(struct ctl_table *table, int write,
5156     ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
5157     if (write && !ret) {
5158     if (jit_enable < 2 ||
5159     - (jit_enable == 2 && bpf_dump_raw_ok())) {
5160     + (jit_enable == 2 && bpf_dump_raw_ok(current_cred()))) {
5161     *(int *)table->data = jit_enable;
5162     if (jit_enable == 2)
5163     pr_warn("bpf_jit_enable = 2 was set! NEVER use this in production, only for JIT debugging!\n");
5164     diff --git a/net/netfilter/ipset/ip_set_bitmap_ip.c b/net/netfilter/ipset/ip_set_bitmap_ip.c
5165     index d934384f31ad..6e3cf4d19ce8 100644
5166     --- a/net/netfilter/ipset/ip_set_bitmap_ip.c
5167     +++ b/net/netfilter/ipset/ip_set_bitmap_ip.c
5168     @@ -314,7 +314,7 @@ bitmap_ip_create(struct net *net, struct ip_set *set, struct nlattr *tb[],
5169     set->variant = &bitmap_ip;
5170     if (!init_map_ip(set, map, first_ip, last_ip,
5171     elements, hosts, netmask)) {
5172     - kfree(map);
5173     + ip_set_free(map);
5174     return -ENOMEM;
5175     }
5176     if (tb[IPSET_ATTR_TIMEOUT]) {
5177     diff --git a/net/netfilter/ipset/ip_set_bitmap_ipmac.c b/net/netfilter/ipset/ip_set_bitmap_ipmac.c
5178     index e8532783b43a..ae7cdc0d0f29 100644
5179     --- a/net/netfilter/ipset/ip_set_bitmap_ipmac.c
5180     +++ b/net/netfilter/ipset/ip_set_bitmap_ipmac.c
5181     @@ -363,7 +363,7 @@ bitmap_ipmac_create(struct net *net, struct ip_set *set, struct nlattr *tb[],
5182     map->memsize = BITS_TO_LONGS(elements) * sizeof(unsigned long);
5183     set->variant = &bitmap_ipmac;
5184     if (!init_map_ipmac(set, map, first_ip, last_ip, elements)) {
5185     - kfree(map);
5186     + ip_set_free(map);
5187     return -ENOMEM;
5188     }
5189     if (tb[IPSET_ATTR_TIMEOUT]) {
5190     diff --git a/net/netfilter/ipset/ip_set_bitmap_port.c b/net/netfilter/ipset/ip_set_bitmap_port.c
5191     index e3ac914fff1a..d4a14750f5c4 100644
5192     --- a/net/netfilter/ipset/ip_set_bitmap_port.c
5193     +++ b/net/netfilter/ipset/ip_set_bitmap_port.c
5194     @@ -247,7 +247,7 @@ bitmap_port_create(struct net *net, struct ip_set *set, struct nlattr *tb[],
5195     map->memsize = BITS_TO_LONGS(elements) * sizeof(unsigned long);
5196     set->variant = &bitmap_port;
5197     if (!init_map_port(set, map, first_port, last_port)) {
5198     - kfree(map);
5199     + ip_set_free(map);
5200     return -ENOMEM;
5201     }
5202     if (tb[IPSET_ATTR_TIMEOUT]) {
5203     diff --git a/net/netfilter/ipset/ip_set_hash_gen.h b/net/netfilter/ipset/ip_set_hash_gen.h
5204     index 2389c9f89e48..a7a982a3e676 100644
5205     --- a/net/netfilter/ipset/ip_set_hash_gen.h
5206     +++ b/net/netfilter/ipset/ip_set_hash_gen.h
5207     @@ -682,7 +682,7 @@ retry:
5208     }
5209     t->hregion = ip_set_alloc(ahash_sizeof_regions(htable_bits));
5210     if (!t->hregion) {
5211     - kfree(t);
5212     + ip_set_free(t);
5213     ret = -ENOMEM;
5214     goto out;
5215     }
5216     @@ -1533,7 +1533,7 @@ IPSET_TOKEN(HTYPE, _create)(struct net *net, struct ip_set *set,
5217     }
5218     t->hregion = ip_set_alloc(ahash_sizeof_regions(hbits));
5219     if (!t->hregion) {
5220     - kfree(t);
5221     + ip_set_free(t);
5222     kfree(h);
5223     return -ENOMEM;
5224     }
5225     diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
5226     index 48db4aec02de..200cdad3ff3a 100644
5227     --- a/net/netfilter/nf_conntrack_core.c
5228     +++ b/net/netfilter/nf_conntrack_core.c
5229     @@ -2012,6 +2012,8 @@ static int nf_conntrack_update(struct net *net, struct sk_buff *skb)
5230     err = __nf_conntrack_update(net, skb, ct, ctinfo);
5231     if (err < 0)
5232     return err;
5233     +
5234     + ct = nf_ct_get(skb, &ctinfo);
5235     }
5236    
5237     return nf_confirm_cthelper(skb, ct, ctinfo);
5238     diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
5239     index 2a4d50e04441..14c101e104ce 100644
5240     --- a/net/qrtr/qrtr.c
5241     +++ b/net/qrtr/qrtr.c
5242     @@ -259,7 +259,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
5243     unsigned int ver;
5244     size_t hdrlen;
5245    
5246     - if (len & 3)
5247     + if (len == 0 || len & 3)
5248     return -EINVAL;
5249    
5250     skb = netdev_alloc_skb(NULL, len);
5251     @@ -273,6 +273,8 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
5252    
5253     switch (ver) {
5254     case QRTR_PROTO_VER_1:
5255     + if (len < sizeof(*v1))
5256     + goto err;
5257     v1 = data;
5258     hdrlen = sizeof(*v1);
5259    
5260     @@ -286,6 +288,8 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
5261     size = le32_to_cpu(v1->size);
5262     break;
5263     case QRTR_PROTO_VER_2:
5264     + if (len < sizeof(*v2))
5265     + goto err;
5266     v2 = data;
5267     hdrlen = sizeof(*v2) + v2->optlen;
5268    
5269     diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
5270     index b65180e874fb..a34bbca80f49 100644
5271     --- a/net/wireless/nl80211.c
5272     +++ b/net/wireless/nl80211.c
5273     @@ -4798,7 +4798,8 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
5274     err = nl80211_parse_he_obss_pd(
5275     info->attrs[NL80211_ATTR_HE_OBSS_PD],
5276     &params.he_obss_pd);
5277     - goto out;
5278     + if (err)
5279     + goto out;
5280     }
5281    
5282     nl80211_calculate_ap_params(&params);
5283     diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
5284     index f34ce564d92c..1afa06b80f06 100644
5285     --- a/sound/core/compress_offload.c
5286     +++ b/sound/core/compress_offload.c
5287     @@ -722,6 +722,9 @@ static int snd_compr_stop(struct snd_compr_stream *stream)
5288    
5289     retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_STOP);
5290     if (!retval) {
5291     + /* clear flags and stop any drain wait */
5292     + stream->partial_drain = false;
5293     + stream->metadata_set = false;
5294     snd_compr_drain_notify(stream);
5295     stream->runtime->total_bytes_available = 0;
5296     stream->runtime->total_bytes_transferred = 0;
5297     @@ -879,6 +882,7 @@ static int snd_compr_partial_drain(struct snd_compr_stream *stream)
5298     if (stream->next_track == false)
5299     return -EPERM;
5300    
5301     + stream->partial_drain = true;
5302     retval = stream->ops->trigger(stream, SND_COMPR_TRIGGER_PARTIAL_DRAIN);
5303     if (retval) {
5304     pr_debug("Partial drain returned failure\n");
5305     diff --git a/sound/drivers/opl3/opl3_synth.c b/sound/drivers/opl3/opl3_synth.c
5306     index e69a4ef0d6bd..08c10ac9d6c8 100644
5307     --- a/sound/drivers/opl3/opl3_synth.c
5308     +++ b/sound/drivers/opl3/opl3_synth.c
5309     @@ -91,6 +91,8 @@ int snd_opl3_ioctl(struct snd_hwdep * hw, struct file *file,
5310     {
5311     struct snd_dm_fm_info info;
5312    
5313     + memset(&info, 0, sizeof(info));
5314     +
5315     info.fm_mode = opl3->fm_mode;
5316     info.rhythm = opl3->rhythm;
5317     if (copy_to_user(argp, &info, sizeof(struct snd_dm_fm_info)))
5318     diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
5319     index 2c6d2becfe1a..824f4ac1a8ce 100644
5320     --- a/sound/pci/hda/hda_auto_parser.c
5321     +++ b/sound/pci/hda/hda_auto_parser.c
5322     @@ -72,6 +72,12 @@ static int compare_input_type(const void *ap, const void *bp)
5323     if (a->type != b->type)
5324     return (int)(a->type - b->type);
5325    
5326     + /* If has both hs_mic and hp_mic, pick the hs_mic ahead of hp_mic. */
5327     + if (a->is_headset_mic && b->is_headphone_mic)
5328     + return -1; /* don't swap */
5329     + else if (a->is_headphone_mic && b->is_headset_mic)
5330     + return 1; /* swap */
5331     +
5332     /* In case one has boost and the other one has not,
5333     pick the one with boost first. */
5334     return (int)(b->has_boost_on_pin - a->has_boost_on_pin);
5335     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
5336     index 612441508e80..95b0fdffc504 100644
5337     --- a/sound/pci/hda/hda_intel.c
5338     +++ b/sound/pci/hda/hda_intel.c
5339     @@ -2433,6 +2433,9 @@ static const struct pci_device_id azx_ids[] = {
5340     /* Icelake */
5341     { PCI_DEVICE(0x8086, 0x34c8),
5342     .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5343     + /* Icelake-H */
5344     + { PCI_DEVICE(0x8086, 0x3dc8),
5345     + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5346     /* Jasperlake */
5347     { PCI_DEVICE(0x8086, 0x38c8),
5348     .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5349     @@ -2441,9 +2444,14 @@ static const struct pci_device_id azx_ids[] = {
5350     /* Tigerlake */
5351     { PCI_DEVICE(0x8086, 0xa0c8),
5352     .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5353     + /* Tigerlake-H */
5354     + { PCI_DEVICE(0x8086, 0x43c8),
5355     + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5356     /* Elkhart Lake */
5357     { PCI_DEVICE(0x8086, 0x4b55),
5358     .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5359     + { PCI_DEVICE(0x8086, 0x4b58),
5360     + .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
5361     /* Broxton-P(Apollolake) */
5362     { PCI_DEVICE(0x8086, 0x5a98),
5363     .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
5364     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5365     index 34868459104d..160e00e8007a 100644
5366     --- a/sound/pci/hda/patch_realtek.c
5367     +++ b/sound/pci/hda/patch_realtek.c
5368     @@ -6114,6 +6114,9 @@ enum {
5369     ALC236_FIXUP_HP_MUTE_LED,
5370     ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
5371     ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
5372     + ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS,
5373     + ALC269VC_FIXUP_ACER_HEADSET_MIC,
5374     + ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE,
5375     };
5376    
5377     static const struct hda_fixup alc269_fixups[] = {
5378     @@ -7292,6 +7295,35 @@ static const struct hda_fixup alc269_fixups[] = {
5379     .chained = true,
5380     .chain_id = ALC269_FIXUP_HEADSET_MODE
5381     },
5382     + [ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS] = {
5383     + .type = HDA_FIXUP_PINS,
5384     + .v.pins = (const struct hda_pintbl[]) {
5385     + { 0x14, 0x90100120 }, /* use as internal speaker */
5386     + { 0x18, 0x02a111f0 }, /* use as headset mic, without its own jack detect */
5387     + { 0x1a, 0x01011020 }, /* use as line out */
5388     + { },
5389     + },
5390     + .chained = true,
5391     + .chain_id = ALC269_FIXUP_HEADSET_MIC
5392     + },
5393     + [ALC269VC_FIXUP_ACER_HEADSET_MIC] = {
5394     + .type = HDA_FIXUP_PINS,
5395     + .v.pins = (const struct hda_pintbl[]) {
5396     + { 0x18, 0x02a11030 }, /* use as headset mic */
5397     + { }
5398     + },
5399     + .chained = true,
5400     + .chain_id = ALC269_FIXUP_HEADSET_MIC
5401     + },
5402     + [ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE] = {
5403     + .type = HDA_FIXUP_PINS,
5404     + .v.pins = (const struct hda_pintbl[]) {
5405     + { 0x18, 0x01a11130 }, /* use as headset mic, without its own jack detect */
5406     + { }
5407     + },
5408     + .chained = true,
5409     + .chain_id = ALC269_FIXUP_HEADSET_MIC
5410     + },
5411     };
5412    
5413     static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5414     @@ -7307,10 +7339,13 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5415     SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
5416     SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
5417     SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
5418     + SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
5419     SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK),
5420     SND_PCI_QUIRK(0x1025, 0x1099, "Acer Aspire E5-523G", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
5421     SND_PCI_QUIRK(0x1025, 0x110e, "Acer Aspire ES1-432", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
5422     SND_PCI_QUIRK(0x1025, 0x1246, "Acer Predator Helios 500", ALC299_FIXUP_PREDATOR_SPK),
5423     + SND_PCI_QUIRK(0x1025, 0x1247, "Acer vCopperbox", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
5424     + SND_PCI_QUIRK(0x1025, 0x1248, "Acer Veriton N4660G", ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE),
5425     SND_PCI_QUIRK(0x1025, 0x128f, "Acer Veriton Z6860G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
5426     SND_PCI_QUIRK(0x1025, 0x1290, "Acer Veriton Z4860G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
5427     SND_PCI_QUIRK(0x1025, 0x1291, "Acer Veriton Z4660G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
5428     @@ -7536,8 +7571,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5429     SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5430     SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
5431     SND_PCI_QUIRK(0x17aa, 0x225d, "Thinkpad T480", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
5432     - SND_PCI_QUIRK(0x17aa, 0x2292, "Thinkpad X1 Yoga 7th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
5433     - SND_PCI_QUIRK(0x17aa, 0x2293, "Thinkpad X1 Carbon 7th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
5434     + SND_PCI_QUIRK(0x17aa, 0x2292, "Thinkpad X1 Carbon 7th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
5435     SND_PCI_QUIRK(0x17aa, 0x22be, "Thinkpad X1 Carbon 8th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
5436     SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
5437     SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
5438     diff --git a/sound/soc/sof/sof-pci-dev.c b/sound/soc/sof/sof-pci-dev.c
5439     index d66412a77873..3f79cd03507c 100644
5440     --- a/sound/soc/sof/sof-pci-dev.c
5441     +++ b/sound/soc/sof/sof-pci-dev.c
5442     @@ -420,6 +420,8 @@ static const struct pci_device_id sof_pci_ids[] = {
5443     #if IS_ENABLED(CONFIG_SND_SOC_SOF_COMETLAKE_H)
5444     { PCI_DEVICE(0x8086, 0x06c8),
5445     .driver_data = (unsigned long)&cml_desc},
5446     + { PCI_DEVICE(0x8086, 0xa3f0), /* CML-S */
5447     + .driver_data = (unsigned long)&cml_desc},
5448     #endif
5449     #if IS_ENABLED(CONFIG_SND_SOC_SOF_TIGERLAKE)
5450     { PCI_DEVICE(0x8086, 0xa0c8),
5451     diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
5452     index 426c55b45e79..d5706b8b68a1 100644
5453     --- a/sound/usb/pcm.c
5454     +++ b/sound/usb/pcm.c
5455     @@ -350,6 +350,7 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
5456     goto add_sync_ep_from_ifnum;
5457     case USB_ID(0x07fd, 0x0008): /* MOTU M Series */
5458     case USB_ID(0x31e9, 0x0002): /* Solid State Logic SSL2+ */
5459     + case USB_ID(0x0d9a, 0x00df): /* RTX6001 */
5460     ep = 0x81;
5461     ifnum = 2;
5462     goto add_sync_ep_from_ifnum;
5463     diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
5464     index 042a5e8eb79d..8d1805d9e5a7 100644
5465     --- a/sound/usb/quirks-table.h
5466     +++ b/sound/usb/quirks-table.h
5467     @@ -3695,4 +3695,56 @@ ALC1220_VB_DESKTOP(0x26ce, 0x0a01), /* Asrock TRX40 Creator */
5468     }
5469     },
5470    
5471     +/*
5472     + * MacroSilicon MS2109 based HDMI capture cards
5473     + *
5474     + * These claim 96kHz 1ch in the descriptors, but are actually 48kHz 2ch.
5475     + * They also need QUIRK_AUDIO_ALIGN_TRANSFER, which makes one wonder if
5476     + * they pretend to be 96kHz mono as a workaround for stereo being broken
5477     + * by that...
5478     + *
5479     + * They also have swapped L-R channels, but that's for userspace to deal
5480     + * with.
5481     + */
5482     +{
5483     + USB_DEVICE(0x534d, 0x2109),
5484     + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
5485     + .vendor_name = "MacroSilicon",
5486     + .product_name = "MS2109",
5487     + .ifnum = QUIRK_ANY_INTERFACE,
5488     + .type = QUIRK_COMPOSITE,
5489     + .data = &(const struct snd_usb_audio_quirk[]) {
5490     + {
5491     + .ifnum = 2,
5492     + .type = QUIRK_AUDIO_ALIGN_TRANSFER,
5493     + },
5494     + {
5495     + .ifnum = 2,
5496     + .type = QUIRK_AUDIO_STANDARD_MIXER,
5497     + },
5498     + {
5499     + .ifnum = 3,
5500     + .type = QUIRK_AUDIO_FIXED_ENDPOINT,
5501     + .data = &(const struct audioformat) {
5502     + .formats = SNDRV_PCM_FMTBIT_S16_LE,
5503     + .channels = 2,
5504     + .iface = 3,
5505     + .altsetting = 1,
5506     + .altset_idx = 1,
5507     + .attributes = 0,
5508     + .endpoint = 0x82,
5509     + .ep_attr = USB_ENDPOINT_XFER_ISOC |
5510     + USB_ENDPOINT_SYNC_ASYNC,
5511     + .rates = SNDRV_PCM_RATE_CONTINUOUS,
5512     + .rate_min = 48000,
5513     + .rate_max = 48000,
5514     + }
5515     + },
5516     + {
5517     + .ifnum = -1
5518     + }
5519     + }
5520     + }
5521     +},
5522     +
5523     #undef USB_DEVICE_VENDOR_SPEC
5524     diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
5525     index d43f9dec6998..e768c02ef2ab 100644
5526     --- a/tools/perf/arch/x86/util/intel-pt.c
5527     +++ b/tools/perf/arch/x86/util/intel-pt.c
5528     @@ -596,6 +596,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
5529     }
5530     evsel->core.attr.freq = 0;
5531     evsel->core.attr.sample_period = 1;
5532     + evsel->no_aux_samples = true;
5533     intel_pt_evsel = evsel;
5534     opts->full_auxtrace = true;
5535     }
5536     diff --git a/tools/perf/scripts/python/export-to-postgresql.py b/tools/perf/scripts/python/export-to-postgresql.py
5537     index 7bd73a904b4e..d187e46c2683 100644
5538     --- a/tools/perf/scripts/python/export-to-postgresql.py
5539     +++ b/tools/perf/scripts/python/export-to-postgresql.py
5540     @@ -1055,7 +1055,7 @@ def cbr(id, raw_buf):
5541     cbr = data[0]
5542     MHz = (data[4] + 500) / 1000
5543     percent = ((cbr * 1000 / data[2]) + 5) / 10
5544     - value = struct.pack("!hiqiiiiii", 4, 8, id, 4, cbr, 4, MHz, 4, percent)
5545     + value = struct.pack("!hiqiiiiii", 4, 8, id, 4, cbr, 4, int(MHz), 4, int(percent))
5546     cbr_file.write(value)
5547    
5548     def mwait(id, raw_buf):
5549     diff --git a/tools/perf/scripts/python/exported-sql-viewer.py b/tools/perf/scripts/python/exported-sql-viewer.py
5550     index 4b28c9d08d5a..04217e8f535a 100755
5551     --- a/tools/perf/scripts/python/exported-sql-viewer.py
5552     +++ b/tools/perf/scripts/python/exported-sql-viewer.py
5553     @@ -756,7 +756,8 @@ class CallGraphModel(CallGraphModelBase):
5554     " FROM calls"
5555     " INNER JOIN call_paths ON calls.call_path_id = call_paths.id"
5556     " INNER JOIN symbols ON call_paths.symbol_id = symbols.id"
5557     - " WHERE symbols.name" + match +
5558     + " WHERE calls.id <> 0"
5559     + " AND symbols.name" + match +
5560     " GROUP BY comm_id, thread_id, call_path_id"
5561     " ORDER BY comm_id, thread_id, call_path_id")
5562    
5563     @@ -950,7 +951,8 @@ class CallTreeModel(CallGraphModelBase):
5564     " FROM calls"
5565     " INNER JOIN call_paths ON calls.call_path_id = call_paths.id"
5566     " INNER JOIN symbols ON call_paths.symbol_id = symbols.id"
5567     - " WHERE symbols.name" + match +
5568     + " WHERE calls.id <> 0"
5569     + " AND symbols.name" + match +
5570     " ORDER BY comm_id, thread_id, call_time, calls.id")
5571    
5572     def FindPath(self, query):
5573     @@ -1016,6 +1018,7 @@ class TreeWindowBase(QMdiSubWindow):
5574     child = self.model.index(row, 0, parent)
5575     if child.internalPointer().dbid == dbid:
5576     found = True
5577     + self.view.setExpanded(parent, True)
5578     self.view.setCurrentIndex(child)
5579     parent = child
5580     break
5581     diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
5582     index 88c3df24b748..514cef3a17b4 100644
5583     --- a/tools/perf/ui/browsers/hists.c
5584     +++ b/tools/perf/ui/browsers/hists.c
5585     @@ -2224,6 +2224,11 @@ static struct thread *hist_browser__selected_thread(struct hist_browser *browser
5586     return browser->he_selection->thread;
5587     }
5588    
5589     +static struct res_sample *hist_browser__selected_res_sample(struct hist_browser *browser)
5590     +{
5591     + return browser->he_selection ? browser->he_selection->res_samples : NULL;
5592     +}
5593     +
5594     /* Check whether the browser is for 'top' or 'report' */
5595     static inline bool is_report_browser(void *timer)
5596     {
5597     @@ -3170,16 +3175,16 @@ skip_annotation:
5598     &options[nr_options], NULL, NULL, evsel);
5599     nr_options += add_res_sample_opt(browser, &actions[nr_options],
5600     &options[nr_options],
5601     - hist_browser__selected_entry(browser)->res_samples,
5602     - evsel, A_NORMAL);
5603     + hist_browser__selected_res_sample(browser),
5604     + evsel, A_NORMAL);
5605     nr_options += add_res_sample_opt(browser, &actions[nr_options],
5606     &options[nr_options],
5607     - hist_browser__selected_entry(browser)->res_samples,
5608     - evsel, A_ASM);
5609     + hist_browser__selected_res_sample(browser),
5610     + evsel, A_ASM);
5611     nr_options += add_res_sample_opt(browser, &actions[nr_options],
5612     &options[nr_options],
5613     - hist_browser__selected_entry(browser)->res_samples,
5614     - evsel, A_SOURCE);
5615     + hist_browser__selected_res_sample(browser),
5616     + evsel, A_SOURCE);
5617     nr_options += add_switch_opt(browser, &actions[nr_options],
5618     &options[nr_options]);
5619     skip_scripting:
5620     diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
5621     index abc7fda4a0fe..a844715a352d 100644
5622     --- a/tools/perf/util/evsel.c
5623     +++ b/tools/perf/util/evsel.c
5624     @@ -1028,12 +1028,12 @@ void perf_evsel__config(struct evsel *evsel, struct record_opts *opts,
5625     if (callchain && callchain->enabled && !evsel->no_aux_samples)
5626     perf_evsel__config_callchain(evsel, opts, callchain);
5627    
5628     - if (opts->sample_intr_regs) {
5629     + if (opts->sample_intr_regs && !evsel->no_aux_samples) {
5630     attr->sample_regs_intr = opts->sample_intr_regs;
5631     perf_evsel__set_sample_bit(evsel, REGS_INTR);
5632     }
5633    
5634     - if (opts->sample_user_regs) {
5635     + if (opts->sample_user_regs && !evsel->no_aux_samples) {
5636     attr->sample_regs_user |= opts->sample_user_regs;
5637     perf_evsel__set_sample_bit(evsel, REGS_USER);
5638     }
5639     diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
5640     index a1c9eb6d4f40..c5cce3a60476 100644
5641     --- a/tools/perf/util/intel-pt.c
5642     +++ b/tools/perf/util/intel-pt.c
5643     @@ -1707,6 +1707,7 @@ static int intel_pt_synth_pebs_sample(struct intel_pt_queue *ptq)
5644     u64 sample_type = evsel->core.attr.sample_type;
5645     u64 id = evsel->core.id[0];
5646     u8 cpumode;
5647     + u64 regs[8 * sizeof(sample.intr_regs.mask)];
5648    
5649     if (intel_pt_skip_event(pt))
5650     return 0;
5651     @@ -1756,8 +1757,8 @@ static int intel_pt_synth_pebs_sample(struct intel_pt_queue *ptq)
5652     }
5653    
5654     if (sample_type & PERF_SAMPLE_REGS_INTR &&
5655     - items->mask[INTEL_PT_GP_REGS_POS]) {
5656     - u64 regs[sizeof(sample.intr_regs.mask)];
5657     + (items->mask[INTEL_PT_GP_REGS_POS] ||
5658     + items->mask[INTEL_PT_XMM_POS])) {
5659     u64 regs_mask = evsel->core.attr.sample_regs_intr;
5660     u64 *pos;
5661