Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0142-5.4.43-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3523 - (hide annotations) (download)
Thu Jun 25 11:14:55 2020 UTC (3 years, 11 months ago) by niro
File size: 162926 byte(s)
-linux-5.4.43
1 niro 3523 diff --git a/Makefile b/Makefile
2     index 1bd1b17cd207..7d7cf0082443 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 = 42
10     +SUBLEVEL = 43
11     EXTRAVERSION =
12     NAME = Kleptomaniac Octopus
13    
14     @@ -1246,11 +1246,15 @@ ifneq ($(dtstree),)
15     $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
16    
17     PHONY += dtbs dtbs_install dtbs_check
18     -dtbs dtbs_check: include/config/kernel.release scripts_dtc
19     +dtbs: include/config/kernel.release scripts_dtc
20     $(Q)$(MAKE) $(build)=$(dtstree)
21    
22     +ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
23     +dtbs: dt_binding_check
24     +endif
25     +
26     dtbs_check: export CHECK_DTBS=1
27     -dtbs_check: dt_binding_check
28     +dtbs_check: dtbs
29    
30     dtbs_install:
31     $(Q)$(MAKE) $(dtbinst)=$(dtstree)
32     diff --git a/arch/arm/include/asm/futex.h b/arch/arm/include/asm/futex.h
33     index 83c391b597d4..fdc4ae3e7378 100644
34     --- a/arch/arm/include/asm/futex.h
35     +++ b/arch/arm/include/asm/futex.h
36     @@ -164,8 +164,13 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr)
37     preempt_enable();
38     #endif
39    
40     - if (!ret)
41     - *oval = oldval;
42     + /*
43     + * Store unconditionally. If ret != 0 the extra store is the least
44     + * of the worries but GCC cannot figure out that __futex_atomic_op()
45     + * is either setting ret to -EFAULT or storing the old value in
46     + * oldval which results in a uninitialized warning at the call site.
47     + */
48     + *oval = oldval;
49    
50     return ret;
51     }
52     diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
53     index 9168c4f1a37f..8d2d9d5b418f 100644
54     --- a/arch/arm64/kernel/ptrace.c
55     +++ b/arch/arm64/kernel/ptrace.c
56     @@ -1829,10 +1829,11 @@ static void tracehook_report_syscall(struct pt_regs *regs,
57    
58     int syscall_trace_enter(struct pt_regs *regs)
59     {
60     - if (test_thread_flag(TIF_SYSCALL_TRACE) ||
61     - test_thread_flag(TIF_SYSCALL_EMU)) {
62     + unsigned long flags = READ_ONCE(current_thread_info()->flags);
63     +
64     + if (flags & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE)) {
65     tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER);
66     - if (!in_syscall(regs) || test_thread_flag(TIF_SYSCALL_EMU))
67     + if (!in_syscall(regs) || (flags & _TIF_SYSCALL_EMU))
68     return -1;
69     }
70    
71     diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
72     index 2b1033f13210..3dc5aecdd853 100644
73     --- a/arch/powerpc/Kconfig
74     +++ b/arch/powerpc/Kconfig
75     @@ -133,7 +133,7 @@ config PPC
76     select ARCH_HAS_PTE_SPECIAL
77     select ARCH_HAS_MEMBARRIER_CALLBACKS
78     select ARCH_HAS_SCALED_CPUTIME if VIRT_CPU_ACCOUNTING_NATIVE && PPC_BOOK3S_64
79     - select ARCH_HAS_STRICT_KERNEL_RWX if ((PPC_BOOK3S_64 || PPC32) && !RELOCATABLE && !HIBERNATION)
80     + select ARCH_HAS_STRICT_KERNEL_RWX if (PPC32 && !HIBERNATION)
81     select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
82     select ARCH_HAS_UACCESS_FLUSHCACHE
83     select ARCH_HAS_UACCESS_MCSAFE if PPC64
84     diff --git a/arch/s390/include/asm/pci_io.h b/arch/s390/include/asm/pci_io.h
85     index cd060b5dd8fd..e4dc64cc9c55 100644
86     --- a/arch/s390/include/asm/pci_io.h
87     +++ b/arch/s390/include/asm/pci_io.h
88     @@ -8,6 +8,10 @@
89     #include <linux/slab.h>
90     #include <asm/pci_insn.h>
91    
92     +/* I/O size constraints */
93     +#define ZPCI_MAX_READ_SIZE 8
94     +#define ZPCI_MAX_WRITE_SIZE 128
95     +
96     /* I/O Map */
97     #define ZPCI_IOMAP_SHIFT 48
98     #define ZPCI_IOMAP_ADDR_BASE 0x8000000000000000UL
99     @@ -140,7 +144,8 @@ static inline int zpci_memcpy_fromio(void *dst,
100    
101     while (n > 0) {
102     size = zpci_get_max_write_size((u64 __force) src,
103     - (u64) dst, n, 8);
104     + (u64) dst, n,
105     + ZPCI_MAX_READ_SIZE);
106     rc = zpci_read_single(dst, src, size);
107     if (rc)
108     break;
109     @@ -161,7 +166,8 @@ static inline int zpci_memcpy_toio(volatile void __iomem *dst,
110    
111     while (n > 0) {
112     size = zpci_get_max_write_size((u64 __force) dst,
113     - (u64) src, n, 128);
114     + (u64) src, n,
115     + ZPCI_MAX_WRITE_SIZE);
116     if (size > 8) /* main path */
117     rc = zpci_write_block(dst, src, size);
118     else
119     diff --git a/arch/s390/kernel/machine_kexec_file.c b/arch/s390/kernel/machine_kexec_file.c
120     index 8415ae7d2a23..f9e4baa64b67 100644
121     --- a/arch/s390/kernel/machine_kexec_file.c
122     +++ b/arch/s390/kernel/machine_kexec_file.c
123     @@ -151,7 +151,7 @@ static int kexec_file_add_initrd(struct kimage *image,
124     buf.mem += crashk_res.start;
125     buf.memsz = buf.bufsz;
126    
127     - data->parm->initrd_start = buf.mem;
128     + data->parm->initrd_start = data->memsz;
129     data->parm->initrd_size = buf.memsz;
130     data->memsz += buf.memsz;
131    
132     diff --git a/arch/s390/kernel/machine_kexec_reloc.c b/arch/s390/kernel/machine_kexec_reloc.c
133     index d5035de9020e..b7182cec48dc 100644
134     --- a/arch/s390/kernel/machine_kexec_reloc.c
135     +++ b/arch/s390/kernel/machine_kexec_reloc.c
136     @@ -28,6 +28,7 @@ int arch_kexec_do_relocs(int r_type, void *loc, unsigned long val,
137     break;
138     case R_390_64: /* Direct 64 bit. */
139     case R_390_GLOB_DAT:
140     + case R_390_JMP_SLOT:
141     *(u64 *)loc = val;
142     break;
143     case R_390_PC16: /* PC relative 16 bit. */
144     diff --git a/arch/s390/pci/pci_mmio.c b/arch/s390/pci/pci_mmio.c
145     index 7d42a8794f10..020a2c514d96 100644
146     --- a/arch/s390/pci/pci_mmio.c
147     +++ b/arch/s390/pci/pci_mmio.c
148     @@ -11,6 +11,113 @@
149     #include <linux/mm.h>
150     #include <linux/errno.h>
151     #include <linux/pci.h>
152     +#include <asm/pci_io.h>
153     +#include <asm/pci_debug.h>
154     +
155     +static inline void zpci_err_mmio(u8 cc, u8 status, u64 offset)
156     +{
157     + struct {
158     + u64 offset;
159     + u8 cc;
160     + u8 status;
161     + } data = {offset, cc, status};
162     +
163     + zpci_err_hex(&data, sizeof(data));
164     +}
165     +
166     +static inline int __pcistb_mio_inuser(
167     + void __iomem *ioaddr, const void __user *src,
168     + u64 len, u8 *status)
169     +{
170     + int cc = -ENXIO;
171     +
172     + asm volatile (
173     + " sacf 256\n"
174     + "0: .insn rsy,0xeb00000000d4,%[len],%[ioaddr],%[src]\n"
175     + "1: ipm %[cc]\n"
176     + " srl %[cc],28\n"
177     + "2: sacf 768\n"
178     + EX_TABLE(0b, 2b) EX_TABLE(1b, 2b)
179     + : [cc] "+d" (cc), [len] "+d" (len)
180     + : [ioaddr] "a" (ioaddr), [src] "Q" (*((u8 __force *)src))
181     + : "cc", "memory");
182     + *status = len >> 24 & 0xff;
183     + return cc;
184     +}
185     +
186     +static inline int __pcistg_mio_inuser(
187     + void __iomem *ioaddr, const void __user *src,
188     + u64 ulen, u8 *status)
189     +{
190     + register u64 addr asm("2") = (u64 __force) ioaddr;
191     + register u64 len asm("3") = ulen;
192     + int cc = -ENXIO;
193     + u64 val = 0;
194     + u64 cnt = ulen;
195     + u8 tmp;
196     +
197     + /*
198     + * copy 0 < @len <= 8 bytes from @src into the right most bytes of
199     + * a register, then store it to PCI at @ioaddr while in secondary
200     + * address space. pcistg then uses the user mappings.
201     + */
202     + asm volatile (
203     + " sacf 256\n"
204     + "0: llgc %[tmp],0(%[src])\n"
205     + " sllg %[val],%[val],8\n"
206     + " aghi %[src],1\n"
207     + " ogr %[val],%[tmp]\n"
208     + " brctg %[cnt],0b\n"
209     + "1: .insn rre,0xb9d40000,%[val],%[ioaddr]\n"
210     + "2: ipm %[cc]\n"
211     + " srl %[cc],28\n"
212     + "3: sacf 768\n"
213     + EX_TABLE(0b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b)
214     + :
215     + [src] "+a" (src), [cnt] "+d" (cnt),
216     + [val] "+d" (val), [tmp] "=d" (tmp),
217     + [len] "+d" (len), [cc] "+d" (cc),
218     + [ioaddr] "+a" (addr)
219     + :: "cc", "memory");
220     + *status = len >> 24 & 0xff;
221     +
222     + /* did we read everything from user memory? */
223     + if (!cc && cnt != 0)
224     + cc = -EFAULT;
225     +
226     + return cc;
227     +}
228     +
229     +static inline int __memcpy_toio_inuser(void __iomem *dst,
230     + const void __user *src, size_t n)
231     +{
232     + int size, rc = 0;
233     + u8 status = 0;
234     + mm_segment_t old_fs;
235     +
236     + if (!src)
237     + return -EINVAL;
238     +
239     + old_fs = enable_sacf_uaccess();
240     + while (n > 0) {
241     + size = zpci_get_max_write_size((u64 __force) dst,
242     + (u64 __force) src, n,
243     + ZPCI_MAX_WRITE_SIZE);
244     + if (size > 8) /* main path */
245     + rc = __pcistb_mio_inuser(dst, src, size, &status);
246     + else
247     + rc = __pcistg_mio_inuser(dst, src, size, &status);
248     + if (rc)
249     + break;
250     + src += size;
251     + dst += size;
252     + n -= size;
253     + }
254     + disable_sacf_uaccess(old_fs);
255     + if (rc)
256     + zpci_err_mmio(rc, status, (__force u64) dst);
257     + return rc;
258     +}
259    
260     static long get_pfn(unsigned long user_addr, unsigned long access,
261     unsigned long *pfn)
262     @@ -46,6 +153,20 @@ SYSCALL_DEFINE3(s390_pci_mmio_write, unsigned long, mmio_addr,
263    
264     if (length <= 0 || PAGE_SIZE - (mmio_addr & ~PAGE_MASK) < length)
265     return -EINVAL;
266     +
267     + /*
268     + * Only support read access to MIO capable devices on a MIO enabled
269     + * system. Otherwise we would have to check for every address if it is
270     + * a special ZPCI_ADDR and we would have to do a get_pfn() which we
271     + * don't need for MIO capable devices.
272     + */
273     + if (static_branch_likely(&have_mio)) {
274     + ret = __memcpy_toio_inuser((void __iomem *) mmio_addr,
275     + user_buffer,
276     + length);
277     + return ret;
278     + }
279     +
280     if (length > 64) {
281     buf = kmalloc(length, GFP_KERNEL);
282     if (!buf)
283     @@ -56,7 +177,8 @@ SYSCALL_DEFINE3(s390_pci_mmio_write, unsigned long, mmio_addr,
284     ret = get_pfn(mmio_addr, VM_WRITE, &pfn);
285     if (ret)
286     goto out;
287     - io_addr = (void __iomem *)((pfn << PAGE_SHIFT) | (mmio_addr & ~PAGE_MASK));
288     + io_addr = (void __iomem *)((pfn << PAGE_SHIFT) |
289     + (mmio_addr & ~PAGE_MASK));
290    
291     ret = -EFAULT;
292     if ((unsigned long) io_addr < ZPCI_IOMAP_ADDR_BASE)
293     @@ -72,6 +194,78 @@ out:
294     return ret;
295     }
296    
297     +static inline int __pcilg_mio_inuser(
298     + void __user *dst, const void __iomem *ioaddr,
299     + u64 ulen, u8 *status)
300     +{
301     + register u64 addr asm("2") = (u64 __force) ioaddr;
302     + register u64 len asm("3") = ulen;
303     + u64 cnt = ulen;
304     + int shift = ulen * 8;
305     + int cc = -ENXIO;
306     + u64 val, tmp;
307     +
308     + /*
309     + * read 0 < @len <= 8 bytes from the PCI memory mapped at @ioaddr (in
310     + * user space) into a register using pcilg then store these bytes at
311     + * user address @dst
312     + */
313     + asm volatile (
314     + " sacf 256\n"
315     + "0: .insn rre,0xb9d60000,%[val],%[ioaddr]\n"
316     + "1: ipm %[cc]\n"
317     + " srl %[cc],28\n"
318     + " ltr %[cc],%[cc]\n"
319     + " jne 4f\n"
320     + "2: ahi %[shift],-8\n"
321     + " srlg %[tmp],%[val],0(%[shift])\n"
322     + "3: stc %[tmp],0(%[dst])\n"
323     + " aghi %[dst],1\n"
324     + " brctg %[cnt],2b\n"
325     + "4: sacf 768\n"
326     + EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b)
327     + :
328     + [cc] "+d" (cc), [val] "=d" (val), [len] "+d" (len),
329     + [dst] "+a" (dst), [cnt] "+d" (cnt), [tmp] "=d" (tmp),
330     + [shift] "+d" (shift)
331     + :
332     + [ioaddr] "a" (addr)
333     + : "cc", "memory");
334     +
335     + /* did we write everything to the user space buffer? */
336     + if (!cc && cnt != 0)
337     + cc = -EFAULT;
338     +
339     + *status = len >> 24 & 0xff;
340     + return cc;
341     +}
342     +
343     +static inline int __memcpy_fromio_inuser(void __user *dst,
344     + const void __iomem *src,
345     + unsigned long n)
346     +{
347     + int size, rc = 0;
348     + u8 status;
349     + mm_segment_t old_fs;
350     +
351     + old_fs = enable_sacf_uaccess();
352     + while (n > 0) {
353     + size = zpci_get_max_write_size((u64 __force) src,
354     + (u64 __force) dst, n,
355     + ZPCI_MAX_READ_SIZE);
356     + rc = __pcilg_mio_inuser(dst, src, size, &status);
357     + if (rc)
358     + break;
359     + src += size;
360     + dst += size;
361     + n -= size;
362     + }
363     + disable_sacf_uaccess(old_fs);
364     + if (rc)
365     + zpci_err_mmio(rc, status, (__force u64) dst);
366     + return rc;
367     +}
368     +
369     SYSCALL_DEFINE3(s390_pci_mmio_read, unsigned long, mmio_addr,
370     void __user *, user_buffer, size_t, length)
371     {
372     @@ -86,12 +280,27 @@ SYSCALL_DEFINE3(s390_pci_mmio_read, unsigned long, mmio_addr,
373    
374     if (length <= 0 || PAGE_SIZE - (mmio_addr & ~PAGE_MASK) < length)
375     return -EINVAL;
376     +
377     + /*
378     + * Only support write access to MIO capable devices on a MIO enabled
379     + * system. Otherwise we would have to check for every address if it is
380     + * a special ZPCI_ADDR and we would have to do a get_pfn() which we
381     + * don't need for MIO capable devices.
382     + */
383     + if (static_branch_likely(&have_mio)) {
384     + ret = __memcpy_fromio_inuser(
385     + user_buffer, (const void __iomem *)mmio_addr,
386     + length);
387     + return ret;
388     + }
389     +
390     if (length > 64) {
391     buf = kmalloc(length, GFP_KERNEL);
392     if (!buf)
393     return -ENOMEM;
394     - } else
395     + } else {
396     buf = local_buf;
397     + }
398    
399     ret = get_pfn(mmio_addr, VM_READ, &pfn);
400     if (ret)
401     diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
402     index f5341edbfa16..7d91a3f5b26a 100644
403     --- a/arch/x86/include/asm/kvm_host.h
404     +++ b/arch/x86/include/asm/kvm_host.h
405     @@ -550,6 +550,7 @@ struct kvm_vcpu_arch {
406     unsigned long cr4;
407     unsigned long cr4_guest_owned_bits;
408     unsigned long cr8;
409     + u32 host_pkru;
410     u32 pkru;
411     u32 hflags;
412     u64 efer;
413     diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
414     index df891f874614..25b8c45467fc 100644
415     --- a/arch/x86/kernel/apic/apic.c
416     +++ b/arch/x86/kernel/apic/apic.c
417     @@ -352,8 +352,6 @@ static void __setup_APIC_LVTT(unsigned int clocks, int oneshot, int irqen)
418     * According to Intel, MFENCE can do the serialization here.
419     */
420     asm volatile("mfence" : : : "memory");
421     -
422     - printk_once(KERN_DEBUG "TSC deadline timer enabled\n");
423     return;
424     }
425    
426     @@ -552,7 +550,7 @@ static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
427     #define DEADLINE_MODEL_MATCH_REV(model, rev) \
428     { X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)rev }
429    
430     -static u32 hsx_deadline_rev(void)
431     +static __init u32 hsx_deadline_rev(void)
432     {
433     switch (boot_cpu_data.x86_stepping) {
434     case 0x02: return 0x3a; /* EP */
435     @@ -562,7 +560,7 @@ static u32 hsx_deadline_rev(void)
436     return ~0U;
437     }
438    
439     -static u32 bdx_deadline_rev(void)
440     +static __init u32 bdx_deadline_rev(void)
441     {
442     switch (boot_cpu_data.x86_stepping) {
443     case 0x02: return 0x00000011;
444     @@ -574,7 +572,7 @@ static u32 bdx_deadline_rev(void)
445     return ~0U;
446     }
447    
448     -static u32 skx_deadline_rev(void)
449     +static __init u32 skx_deadline_rev(void)
450     {
451     switch (boot_cpu_data.x86_stepping) {
452     case 0x03: return 0x01000136;
453     @@ -587,7 +585,7 @@ static u32 skx_deadline_rev(void)
454     return ~0U;
455     }
456    
457     -static const struct x86_cpu_id deadline_match[] = {
458     +static const struct x86_cpu_id deadline_match[] __initconst = {
459     DEADLINE_MODEL_MATCH_FUNC( INTEL_FAM6_HASWELL_X, hsx_deadline_rev),
460     DEADLINE_MODEL_MATCH_REV ( INTEL_FAM6_BROADWELL_X, 0x0b000020),
461     DEADLINE_MODEL_MATCH_FUNC( INTEL_FAM6_BROADWELL_D, bdx_deadline_rev),
462     @@ -609,18 +607,19 @@ static const struct x86_cpu_id deadline_match[] = {
463     {},
464     };
465    
466     -static void apic_check_deadline_errata(void)
467     +static __init bool apic_validate_deadline_timer(void)
468     {
469     const struct x86_cpu_id *m;
470     u32 rev;
471    
472     - if (!boot_cpu_has(X86_FEATURE_TSC_DEADLINE_TIMER) ||
473     - boot_cpu_has(X86_FEATURE_HYPERVISOR))
474     - return;
475     + if (!boot_cpu_has(X86_FEATURE_TSC_DEADLINE_TIMER))
476     + return false;
477     + if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
478     + return true;
479    
480     m = x86_match_cpu(deadline_match);
481     if (!m)
482     - return;
483     + return true;
484    
485     /*
486     * Function pointers will have the MSB set due to address layout,
487     @@ -632,11 +631,12 @@ static void apic_check_deadline_errata(void)
488     rev = (u32)m->driver_data;
489    
490     if (boot_cpu_data.microcode >= rev)
491     - return;
492     + return true;
493    
494     setup_clear_cpu_cap(X86_FEATURE_TSC_DEADLINE_TIMER);
495     pr_err(FW_BUG "TSC_DEADLINE disabled due to Errata; "
496     "please update microcode to version: 0x%x (or later)\n", rev);
497     + return false;
498     }
499    
500     /*
501     @@ -2098,7 +2098,8 @@ void __init init_apic_mappings(void)
502     {
503     unsigned int new_apicid;
504    
505     - apic_check_deadline_errata();
506     + if (apic_validate_deadline_timer())
507     + pr_debug("TSC deadline timer available\n");
508    
509     if (x2apic_mode) {
510     boot_cpu_physical_apicid = read_apic_id();
511     diff --git a/arch/x86/kernel/unwind_orc.c b/arch/x86/kernel/unwind_orc.c
512     index 647e6af0883d..aa0f39dc8129 100644
513     --- a/arch/x86/kernel/unwind_orc.c
514     +++ b/arch/x86/kernel/unwind_orc.c
515     @@ -311,12 +311,19 @@ EXPORT_SYMBOL_GPL(unwind_get_return_address);
516    
517     unsigned long *unwind_get_return_address_ptr(struct unwind_state *state)
518     {
519     + struct task_struct *task = state->task;
520     +
521     if (unwind_done(state))
522     return NULL;
523    
524     if (state->regs)
525     return &state->regs->ip;
526    
527     + if (task != current && state->sp == task->thread.sp) {
528     + struct inactive_task_frame *frame = (void *)task->thread.sp;
529     + return &frame->ret_addr;
530     + }
531     +
532     if (state->sp)
533     return (unsigned long *)state->sp - 1;
534    
535     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
536     index fda2126f9a97..cc7da664fd39 100644
537     --- a/arch/x86/kvm/svm.c
538     +++ b/arch/x86/kvm/svm.c
539     @@ -998,33 +998,32 @@ static void svm_cpu_uninit(int cpu)
540     static int svm_cpu_init(int cpu)
541     {
542     struct svm_cpu_data *sd;
543     - int r;
544    
545     sd = kzalloc(sizeof(struct svm_cpu_data), GFP_KERNEL);
546     if (!sd)
547     return -ENOMEM;
548     sd->cpu = cpu;
549     - r = -ENOMEM;
550     sd->save_area = alloc_page(GFP_KERNEL);
551     if (!sd->save_area)
552     - goto err_1;
553     + goto free_cpu_data;
554    
555     if (svm_sev_enabled()) {
556     - r = -ENOMEM;
557     sd->sev_vmcbs = kmalloc_array(max_sev_asid + 1,
558     sizeof(void *),
559     GFP_KERNEL);
560     if (!sd->sev_vmcbs)
561     - goto err_1;
562     + goto free_save_area;
563     }
564    
565     per_cpu(svm_data, cpu) = sd;
566    
567     return 0;
568    
569     -err_1:
570     +free_save_area:
571     + __free_page(sd->save_area);
572     +free_cpu_data:
573     kfree(sd);
574     - return r;
575     + return -ENOMEM;
576    
577     }
578    
579     diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
580     index 72f51275247e..7a2c05277f4c 100644
581     --- a/arch/x86/kvm/vmx/vmx.c
582     +++ b/arch/x86/kvm/vmx/vmx.c
583     @@ -1360,7 +1360,6 @@ void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
584    
585     vmx_vcpu_pi_load(vcpu, cpu);
586    
587     - vmx->host_pkru = read_pkru();
588     vmx->host_debugctlmsr = get_debugctlmsr();
589     }
590    
591     @@ -6521,11 +6520,6 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
592    
593     kvm_load_guest_xcr0(vcpu);
594    
595     - if (static_cpu_has(X86_FEATURE_PKU) &&
596     - kvm_read_cr4_bits(vcpu, X86_CR4_PKE) &&
597     - vcpu->arch.pkru != vmx->host_pkru)
598     - __write_pkru(vcpu->arch.pkru);
599     -
600     pt_guest_enter(vmx);
601    
602     atomic_switch_perf_msrs(vmx);
603     @@ -6614,18 +6608,6 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
604    
605     pt_guest_exit(vmx);
606    
607     - /*
608     - * eager fpu is enabled if PKEY is supported and CR4 is switched
609     - * back on host, so it is safe to read guest PKRU from current
610     - * XSAVE.
611     - */
612     - if (static_cpu_has(X86_FEATURE_PKU) &&
613     - kvm_read_cr4_bits(vcpu, X86_CR4_PKE)) {
614     - vcpu->arch.pkru = rdpkru();
615     - if (vcpu->arch.pkru != vmx->host_pkru)
616     - __write_pkru(vmx->host_pkru);
617     - }
618     -
619     kvm_put_guest_xcr0(vcpu);
620    
621     vmx->nested.nested_run_pending = 0;
622     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
623     index 41408065574f..c6d9e363dfc0 100644
624     --- a/arch/x86/kvm/x86.c
625     +++ b/arch/x86/kvm/x86.c
626     @@ -832,11 +832,25 @@ void kvm_load_guest_xcr0(struct kvm_vcpu *vcpu)
627     xsetbv(XCR_XFEATURE_ENABLED_MASK, vcpu->arch.xcr0);
628     vcpu->guest_xcr0_loaded = 1;
629     }
630     +
631     + if (static_cpu_has(X86_FEATURE_PKU) &&
632     + (kvm_read_cr4_bits(vcpu, X86_CR4_PKE) ||
633     + (vcpu->arch.xcr0 & XFEATURE_MASK_PKRU)) &&
634     + vcpu->arch.pkru != vcpu->arch.host_pkru)
635     + __write_pkru(vcpu->arch.pkru);
636     }
637     EXPORT_SYMBOL_GPL(kvm_load_guest_xcr0);
638    
639     void kvm_put_guest_xcr0(struct kvm_vcpu *vcpu)
640     {
641     + if (static_cpu_has(X86_FEATURE_PKU) &&
642     + (kvm_read_cr4_bits(vcpu, X86_CR4_PKE) ||
643     + (vcpu->arch.xcr0 & XFEATURE_MASK_PKRU))) {
644     + vcpu->arch.pkru = rdpkru();
645     + if (vcpu->arch.pkru != vcpu->arch.host_pkru)
646     + __write_pkru(vcpu->arch.host_pkru);
647     + }
648     +
649     if (vcpu->guest_xcr0_loaded) {
650     if (vcpu->arch.xcr0 != host_xcr0)
651     xsetbv(XCR_XFEATURE_ENABLED_MASK, host_xcr0);
652     @@ -8222,6 +8236,9 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
653     trace_kvm_entry(vcpu->vcpu_id);
654     guest_enter_irqoff();
655    
656     + /* Save host pkru register if supported */
657     + vcpu->arch.host_pkru = read_pkru();
658     +
659     fpregs_assert_state_consistent();
660     if (test_thread_flag(TIF_NEED_FPU_LOAD))
661     switch_fpu_return();
662     diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
663     index a19a71b4d185..281e584cfe39 100644
664     --- a/arch/x86/mm/pageattr.c
665     +++ b/arch/x86/mm/pageattr.c
666     @@ -42,7 +42,8 @@ struct cpa_data {
667     unsigned long pfn;
668     unsigned int flags;
669     unsigned int force_split : 1,
670     - force_static_prot : 1;
671     + force_static_prot : 1,
672     + force_flush_all : 1;
673     struct page **pages;
674     };
675    
676     @@ -352,10 +353,10 @@ static void cpa_flush(struct cpa_data *data, int cache)
677     return;
678     }
679    
680     - if (cpa->numpages <= tlb_single_page_flush_ceiling)
681     - on_each_cpu(__cpa_flush_tlb, cpa, 1);
682     - else
683     + if (cpa->force_flush_all || cpa->numpages > tlb_single_page_flush_ceiling)
684     flush_tlb_all();
685     + else
686     + on_each_cpu(__cpa_flush_tlb, cpa, 1);
687    
688     if (!cache)
689     return;
690     @@ -1584,6 +1585,8 @@ static int cpa_process_alias(struct cpa_data *cpa)
691     alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY);
692     alias_cpa.curpage = 0;
693    
694     + cpa->force_flush_all = 1;
695     +
696     ret = __change_page_attr_set_clr(&alias_cpa, 0);
697     if (ret)
698     return ret;
699     @@ -1604,6 +1607,7 @@ static int cpa_process_alias(struct cpa_data *cpa)
700     alias_cpa.flags &= ~(CPA_PAGES_ARRAY | CPA_ARRAY);
701     alias_cpa.curpage = 0;
702    
703     + cpa->force_flush_all = 1;
704     /*
705     * The high mapping range is imprecise, so ignore the
706     * return value.
707     diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
708     index 5b53a66d403d..57eacdcbf820 100644
709     --- a/drivers/acpi/ec.c
710     +++ b/drivers/acpi/ec.c
711     @@ -1984,9 +1984,13 @@ bool acpi_ec_dispatch_gpe(void)
712     * to allow the caller to process events properly after that.
713     */
714     ret = acpi_dispatch_gpe(NULL, first_ec->gpe);
715     - if (ret == ACPI_INTERRUPT_HANDLED)
716     + if (ret == ACPI_INTERRUPT_HANDLED) {
717     pm_pr_dbg("EC GPE dispatched\n");
718    
719     + /* Flush the event and query workqueues. */
720     + acpi_ec_flush_work();
721     + }
722     +
723     return false;
724     }
725     #endif /* CONFIG_PM_SLEEP */
726     diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
727     index 85514c0f3aa5..d1b74179d217 100644
728     --- a/drivers/acpi/sleep.c
729     +++ b/drivers/acpi/sleep.c
730     @@ -977,13 +977,6 @@ static int acpi_s2idle_prepare_late(void)
731     return 0;
732     }
733    
734     -static void acpi_s2idle_sync(void)
735     -{
736     - /* The EC driver uses special workqueues that need to be flushed. */
737     - acpi_ec_flush_work();
738     - acpi_os_wait_events_complete(); /* synchronize Notify handling */
739     -}
740     -
741     static bool acpi_s2idle_wake(void)
742     {
743     if (!acpi_sci_irq_valid())
744     @@ -1015,7 +1008,7 @@ static bool acpi_s2idle_wake(void)
745     return true;
746    
747     /*
748     - * Cancel the wakeup and process all pending events in case
749     + * Cancel the SCI wakeup and process all pending events in case
750     * there are any wakeup ones in there.
751     *
752     * Note that if any non-EC GPEs are active at this point, the
753     @@ -1023,8 +1016,7 @@ static bool acpi_s2idle_wake(void)
754     * should be missed by canceling the wakeup here.
755     */
756     pm_system_cancel_wakeup();
757     -
758     - acpi_s2idle_sync();
759     + acpi_os_wait_events_complete();
760    
761     /*
762     * The SCI is in the "suspended" state now and it cannot produce
763     @@ -1057,7 +1049,8 @@ static void acpi_s2idle_restore(void)
764     * of GPEs.
765     */
766     acpi_os_wait_events_complete(); /* synchronize GPE processing */
767     - acpi_s2idle_sync();
768     + acpi_ec_flush_work(); /* flush the EC driver's workqueues */
769     + acpi_os_wait_events_complete(); /* synchronize Notify handling */
770    
771     s2idle_wakeup = false;
772    
773     diff --git a/drivers/base/component.c b/drivers/base/component.c
774     index 1fdbd6ff2058..b9f20ada68b0 100644
775     --- a/drivers/base/component.c
776     +++ b/drivers/base/component.c
777     @@ -257,7 +257,8 @@ static int try_to_bring_up_master(struct master *master,
778     ret = master->ops->bind(master->dev);
779     if (ret < 0) {
780     devres_release_group(master->dev, NULL);
781     - dev_info(master->dev, "master bind failed: %d\n", ret);
782     + if (ret != -EPROBE_DEFER)
783     + dev_info(master->dev, "master bind failed: %d\n", ret);
784     return ret;
785     }
786    
787     @@ -611,8 +612,9 @@ static int component_bind(struct component *component, struct master *master,
788     devres_release_group(component->dev, NULL);
789     devres_release_group(master->dev, NULL);
790    
791     - dev_err(master->dev, "failed to bind %s (ops %ps): %d\n",
792     - dev_name(component->dev), component->ops, ret);
793     + if (ret != -EPROBE_DEFER)
794     + dev_err(master->dev, "failed to bind %s (ops %ps): %d\n",
795     + dev_name(component->dev), component->ops, ret);
796     }
797    
798     return ret;
799     diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c
800     index 3d0a7e702c94..1e678bdf5aed 100644
801     --- a/drivers/dax/kmem.c
802     +++ b/drivers/dax/kmem.c
803     @@ -22,6 +22,7 @@ int dev_dax_kmem_probe(struct device *dev)
804     resource_size_t kmem_size;
805     resource_size_t kmem_end;
806     struct resource *new_res;
807     + const char *new_res_name;
808     int numa_node;
809     int rc;
810    
811     @@ -48,11 +49,16 @@ int dev_dax_kmem_probe(struct device *dev)
812     kmem_size &= ~(memory_block_size_bytes() - 1);
813     kmem_end = kmem_start + kmem_size;
814    
815     - /* Region is permanently reserved. Hot-remove not yet implemented. */
816     - new_res = request_mem_region(kmem_start, kmem_size, dev_name(dev));
817     + new_res_name = kstrdup(dev_name(dev), GFP_KERNEL);
818     + if (!new_res_name)
819     + return -ENOMEM;
820     +
821     + /* Region is permanently reserved if hotremove fails. */
822     + new_res = request_mem_region(kmem_start, kmem_size, new_res_name);
823     if (!new_res) {
824     dev_warn(dev, "could not reserve region [%pa-%pa]\n",
825     &kmem_start, &kmem_end);
826     + kfree(new_res_name);
827     return -EBUSY;
828     }
829    
830     @@ -63,12 +69,12 @@ int dev_dax_kmem_probe(struct device *dev)
831     * unknown to us that will break add_memory() below.
832     */
833     new_res->flags = IORESOURCE_SYSTEM_RAM;
834     - new_res->name = dev_name(dev);
835    
836     rc = add_memory(numa_node, new_res->start, resource_size(new_res));
837     if (rc) {
838     release_resource(new_res);
839     kfree(new_res);
840     + kfree(new_res_name);
841     return rc;
842     }
843     dev_dax->dax_kmem_res = new_res;
844     @@ -83,6 +89,7 @@ static int dev_dax_kmem_remove(struct device *dev)
845     struct resource *res = dev_dax->dax_kmem_res;
846     resource_size_t kmem_start = res->start;
847     resource_size_t kmem_size = resource_size(res);
848     + const char *res_name = res->name;
849     int rc;
850    
851     /*
852     @@ -102,6 +109,7 @@ static int dev_dax_kmem_remove(struct device *dev)
853     /* Release and free dax resources */
854     release_resource(res);
855     kfree(res);
856     + kfree(res_name);
857     dev_dax->dax_kmem_res = NULL;
858    
859     return 0;
860     diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
861     index 364dd34799d4..0425984db118 100644
862     --- a/drivers/dma/dmatest.c
863     +++ b/drivers/dma/dmatest.c
864     @@ -1166,10 +1166,11 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp)
865     mutex_unlock(&info->lock);
866     return ret;
867     } else if (dmatest_run) {
868     - if (is_threaded_test_pending(info))
869     - start_threaded_tests(info);
870     - else
871     - pr_info("Could not start test, no channels configured\n");
872     + if (!is_threaded_test_pending(info)) {
873     + pr_info("No channels configured, continue with any\n");
874     + add_threaded_test(info);
875     + }
876     + start_threaded_tests(info);
877     } else {
878     stop_threaded_test(info);
879     }
880     diff --git a/drivers/dma/owl-dma.c b/drivers/dma/owl-dma.c
881     index 90bbcef99ef8..af20e9a790a2 100644
882     --- a/drivers/dma/owl-dma.c
883     +++ b/drivers/dma/owl-dma.c
884     @@ -175,13 +175,11 @@ struct owl_dma_txd {
885     * @id: physical index to this channel
886     * @base: virtual memory base for the dma channel
887     * @vchan: the virtual channel currently being served by this physical channel
888     - * @lock: a lock to use when altering an instance of this struct
889     */
890     struct owl_dma_pchan {
891     u32 id;
892     void __iomem *base;
893     struct owl_dma_vchan *vchan;
894     - spinlock_t lock;
895     };
896    
897     /**
898     @@ -437,14 +435,14 @@ static struct owl_dma_pchan *owl_dma_get_pchan(struct owl_dma *od,
899     for (i = 0; i < od->nr_pchans; i++) {
900     pchan = &od->pchans[i];
901    
902     - spin_lock_irqsave(&pchan->lock, flags);
903     + spin_lock_irqsave(&od->lock, flags);
904     if (!pchan->vchan) {
905     pchan->vchan = vchan;
906     - spin_unlock_irqrestore(&pchan->lock, flags);
907     + spin_unlock_irqrestore(&od->lock, flags);
908     break;
909     }
910    
911     - spin_unlock_irqrestore(&pchan->lock, flags);
912     + spin_unlock_irqrestore(&od->lock, flags);
913     }
914    
915     return pchan;
916     diff --git a/drivers/dma/tegra210-adma.c b/drivers/dma/tegra210-adma.c
917     index 6e1268552f74..914901a680c8 100644
918     --- a/drivers/dma/tegra210-adma.c
919     +++ b/drivers/dma/tegra210-adma.c
920     @@ -900,7 +900,7 @@ static int tegra_adma_probe(struct platform_device *pdev)
921     ret = dma_async_device_register(&tdma->dma_dev);
922     if (ret < 0) {
923     dev_err(&pdev->dev, "ADMA registration failed: %d\n", ret);
924     - goto irq_dispose;
925     + goto rpm_put;
926     }
927    
928     ret = of_dma_controller_register(pdev->dev.of_node,
929     diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c
930     index eb9af83e4d59..aeeb1b2d8ede 100644
931     --- a/drivers/firmware/efi/libstub/tpm.c
932     +++ b/drivers/firmware/efi/libstub/tpm.c
933     @@ -64,7 +64,7 @@ void efi_retrieve_tpm2_eventlog(efi_system_table_t *sys_table_arg)
934     efi_status_t status;
935     efi_physical_addr_t log_location = 0, log_last_entry = 0;
936     struct linux_efi_tpm_eventlog *log_tbl = NULL;
937     - struct efi_tcg2_final_events_table *final_events_table;
938     + struct efi_tcg2_final_events_table *final_events_table = NULL;
939     unsigned long first_entry_addr, last_entry_addr;
940     size_t log_size, last_entry_size;
941     efi_bool_t truncated;
942     @@ -140,7 +140,8 @@ void efi_retrieve_tpm2_eventlog(efi_system_table_t *sys_table_arg)
943     * Figure out whether any events have already been logged to the
944     * final events structure, and if so how much space they take up
945     */
946     - final_events_table = get_efi_config_table(sys_table_arg,
947     + if (version == EFI_TCG2_EVENT_LOG_FORMAT_TCG_2)
948     + final_events_table = get_efi_config_table(sys_table_arg,
949     LINUX_EFI_TPM_FINAL_LOG_GUID);
950     if (final_events_table && final_events_table->nr_events) {
951     struct tcg_pcr_event2_head *header;
952     diff --git a/drivers/firmware/efi/tpm.c b/drivers/firmware/efi/tpm.c
953     index 55b031d2c989..c1955d320fec 100644
954     --- a/drivers/firmware/efi/tpm.c
955     +++ b/drivers/firmware/efi/tpm.c
956     @@ -62,8 +62,11 @@ int __init efi_tpm_eventlog_init(void)
957     tbl_size = sizeof(*log_tbl) + log_tbl->size;
958     memblock_reserve(efi.tpm_log, tbl_size);
959    
960     - if (efi.tpm_final_log == EFI_INVALID_TABLE_ADDR)
961     + if (efi.tpm_final_log == EFI_INVALID_TABLE_ADDR ||
962     + log_tbl->version != EFI_TCG2_EVENT_LOG_FORMAT_TCG_2) {
963     + pr_warn(FW_BUG "TPM Final Events table missing or invalid\n");
964     goto out;
965     + }
966    
967     final_tbl = early_memremap(efi.tpm_final_log, sizeof(*final_tbl));
968    
969     diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
970     index 99906435dcf7..9f30343262f3 100644
971     --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
972     +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
973     @@ -1422,17 +1422,22 @@ amdgpu_dm_update_connector_after_detect(struct amdgpu_dm_connector *aconnector)
974     dc_sink_retain(aconnector->dc_sink);
975     if (sink->dc_edid.length == 0) {
976     aconnector->edid = NULL;
977     - drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux);
978     + if (aconnector->dc_link->aux_mode) {
979     + drm_dp_cec_unset_edid(
980     + &aconnector->dm_dp_aux.aux);
981     + }
982     } else {
983     aconnector->edid =
984     - (struct edid *) sink->dc_edid.raw_edid;
985     -
986     + (struct edid *)sink->dc_edid.raw_edid;
987    
988     drm_connector_update_edid_property(connector,
989     - aconnector->edid);
990     - drm_dp_cec_set_edid(&aconnector->dm_dp_aux.aux,
991     - aconnector->edid);
992     + aconnector->edid);
993     +
994     + if (aconnector->dc_link->aux_mode)
995     + drm_dp_cec_set_edid(&aconnector->dm_dp_aux.aux,
996     + aconnector->edid);
997     }
998     +
999     amdgpu_dm_update_freesync_caps(connector, aconnector->edid);
1000    
1001     } else {
1002     diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
1003     index aa3e4c3b063a..1ba83a90cdef 100644
1004     --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
1005     +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
1006     @@ -240,8 +240,10 @@ static int submit_pin_objects(struct etnaviv_gem_submit *submit)
1007     }
1008    
1009     if ((submit->flags & ETNA_SUBMIT_SOFTPIN) &&
1010     - submit->bos[i].va != mapping->iova)
1011     + submit->bos[i].va != mapping->iova) {
1012     + etnaviv_gem_mapping_unreference(mapping);
1013     return -EINVAL;
1014     + }
1015    
1016     atomic_inc(&etnaviv_obj->gpu_active);
1017    
1018     diff --git a/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c b/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c
1019     index e6795bafcbb9..75f9db8f7bec 100644
1020     --- a/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c
1021     +++ b/drivers/gpu/drm/etnaviv/etnaviv_perfmon.c
1022     @@ -453,7 +453,7 @@ static const struct etnaviv_pm_domain *pm_domain(const struct etnaviv_gpu *gpu,
1023     if (!(gpu->identity.features & meta->feature))
1024     continue;
1025    
1026     - if (meta->nr_domains < (index - offset)) {
1027     + if (index - offset >= meta->nr_domains) {
1028     offset += meta->nr_domains;
1029     continue;
1030     }
1031     diff --git a/drivers/gpu/drm/i915/gvt/display.c b/drivers/gpu/drm/i915/gvt/display.c
1032     index a62bdf9be682..59aa5e64acb0 100644
1033     --- a/drivers/gpu/drm/i915/gvt/display.c
1034     +++ b/drivers/gpu/drm/i915/gvt/display.c
1035     @@ -207,14 +207,41 @@ static void emulate_monitor_status_change(struct intel_vgpu *vgpu)
1036     SKL_FUSE_PG_DIST_STATUS(SKL_PG0) |
1037     SKL_FUSE_PG_DIST_STATUS(SKL_PG1) |
1038     SKL_FUSE_PG_DIST_STATUS(SKL_PG2);
1039     - vgpu_vreg_t(vgpu, LCPLL1_CTL) |=
1040     - LCPLL_PLL_ENABLE |
1041     - LCPLL_PLL_LOCK;
1042     - vgpu_vreg_t(vgpu, LCPLL2_CTL) |= LCPLL_PLL_ENABLE;
1043     -
1044     + /*
1045     + * Only 1 PIPE enabled in current vGPU display and PIPE_A is
1046     + * tied to TRANSCODER_A in HW, so it's safe to assume PIPE_A,
1047     + * TRANSCODER_A can be enabled. PORT_x depends on the input of
1048     + * setup_virtual_dp_monitor, we can bind DPLL0 to any PORT_x
1049     + * so we fixed to DPLL0 here.
1050     + * Setup DPLL0: DP link clk 1620 MHz, non SSC, DP Mode
1051     + */
1052     + vgpu_vreg_t(vgpu, DPLL_CTRL1) =
1053     + DPLL_CTRL1_OVERRIDE(DPLL_ID_SKL_DPLL0);
1054     + vgpu_vreg_t(vgpu, DPLL_CTRL1) |=
1055     + DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1620, DPLL_ID_SKL_DPLL0);
1056     + vgpu_vreg_t(vgpu, LCPLL1_CTL) =
1057     + LCPLL_PLL_ENABLE | LCPLL_PLL_LOCK;
1058     + vgpu_vreg_t(vgpu, DPLL_STATUS) = DPLL_LOCK(DPLL_ID_SKL_DPLL0);
1059     + /*
1060     + * Golden M/N are calculated based on:
1061     + * 24 bpp, 4 lanes, 154000 pixel clk (from virtual EDID),
1062     + * DP link clk 1620 MHz and non-constant_n.
1063     + * TODO: calculate DP link symbol clk and stream clk m/n.
1064     + */
1065     + vgpu_vreg_t(vgpu, PIPE_DATA_M1(TRANSCODER_A)) = 63 << TU_SIZE_SHIFT;
1066     + vgpu_vreg_t(vgpu, PIPE_DATA_M1(TRANSCODER_A)) |= 0x5b425e;
1067     + vgpu_vreg_t(vgpu, PIPE_DATA_N1(TRANSCODER_A)) = 0x800000;
1068     + vgpu_vreg_t(vgpu, PIPE_LINK_M1(TRANSCODER_A)) = 0x3cd6e;
1069     + vgpu_vreg_t(vgpu, PIPE_LINK_N1(TRANSCODER_A)) = 0x80000;
1070     }
1071    
1072     if (intel_vgpu_has_monitor_on_port(vgpu, PORT_B)) {
1073     + vgpu_vreg_t(vgpu, DPLL_CTRL2) &=
1074     + ~DPLL_CTRL2_DDI_CLK_OFF(PORT_B);
1075     + vgpu_vreg_t(vgpu, DPLL_CTRL2) |=
1076     + DPLL_CTRL2_DDI_CLK_SEL(DPLL_ID_SKL_DPLL0, PORT_B);
1077     + vgpu_vreg_t(vgpu, DPLL_CTRL2) |=
1078     + DPLL_CTRL2_DDI_SEL_OVERRIDE(PORT_B);
1079     vgpu_vreg_t(vgpu, SFUSE_STRAP) |= SFUSE_STRAP_DDIB_DETECTED;
1080     vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_A)) &=
1081     ~(TRANS_DDI_BPC_MASK | TRANS_DDI_MODE_SELECT_MASK |
1082     @@ -235,6 +262,12 @@ static void emulate_monitor_status_change(struct intel_vgpu *vgpu)
1083     }
1084    
1085     if (intel_vgpu_has_monitor_on_port(vgpu, PORT_C)) {
1086     + vgpu_vreg_t(vgpu, DPLL_CTRL2) &=
1087     + ~DPLL_CTRL2_DDI_CLK_OFF(PORT_C);
1088     + vgpu_vreg_t(vgpu, DPLL_CTRL2) |=
1089     + DPLL_CTRL2_DDI_CLK_SEL(DPLL_ID_SKL_DPLL0, PORT_C);
1090     + vgpu_vreg_t(vgpu, DPLL_CTRL2) |=
1091     + DPLL_CTRL2_DDI_SEL_OVERRIDE(PORT_C);
1092     vgpu_vreg_t(vgpu, SDEISR) |= SDE_PORTC_HOTPLUG_CPT;
1093     vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_A)) &=
1094     ~(TRANS_DDI_BPC_MASK | TRANS_DDI_MODE_SELECT_MASK |
1095     @@ -255,6 +288,12 @@ static void emulate_monitor_status_change(struct intel_vgpu *vgpu)
1096     }
1097    
1098     if (intel_vgpu_has_monitor_on_port(vgpu, PORT_D)) {
1099     + vgpu_vreg_t(vgpu, DPLL_CTRL2) &=
1100     + ~DPLL_CTRL2_DDI_CLK_OFF(PORT_D);
1101     + vgpu_vreg_t(vgpu, DPLL_CTRL2) |=
1102     + DPLL_CTRL2_DDI_CLK_SEL(DPLL_ID_SKL_DPLL0, PORT_D);
1103     + vgpu_vreg_t(vgpu, DPLL_CTRL2) |=
1104     + DPLL_CTRL2_DDI_SEL_OVERRIDE(PORT_D);
1105     vgpu_vreg_t(vgpu, SDEISR) |= SDE_PORTD_HOTPLUG_CPT;
1106     vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_A)) &=
1107     ~(TRANS_DDI_BPC_MASK | TRANS_DDI_MODE_SELECT_MASK |
1108     diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
1109     index 0d39038898d4..49d498882cf6 100644
1110     --- a/drivers/gpu/drm/i915/i915_request.c
1111     +++ b/drivers/gpu/drm/i915/i915_request.c
1112     @@ -894,8 +894,10 @@ i915_request_await_request(struct i915_request *to, struct i915_request *from)
1113     GEM_BUG_ON(to == from);
1114     GEM_BUG_ON(to->timeline == from->timeline);
1115    
1116     - if (i915_request_completed(from))
1117     + if (i915_request_completed(from)) {
1118     + i915_sw_fence_set_error_once(&to->submit, from->fence.error);
1119     return 0;
1120     + }
1121    
1122     if (to->engine->schedule) {
1123     ret = i915_sched_node_add_dependency(&to->sched, &from->sched);
1124     diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
1125     index fa704153cb00..b2ad319a74b9 100644
1126     --- a/drivers/hid/hid-alps.c
1127     +++ b/drivers/hid/hid-alps.c
1128     @@ -802,6 +802,7 @@ static int alps_probe(struct hid_device *hdev, const struct hid_device_id *id)
1129     break;
1130     case HID_DEVICE_ID_ALPS_U1_DUAL:
1131     case HID_DEVICE_ID_ALPS_U1:
1132     + case HID_DEVICE_ID_ALPS_U1_UNICORN_LEGACY:
1133     data->dev_type = U1;
1134     break;
1135     default:
1136     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
1137     index 646b98809ed3..13b7222ef2c9 100644
1138     --- a/drivers/hid/hid-ids.h
1139     +++ b/drivers/hid/hid-ids.h
1140     @@ -79,10 +79,10 @@
1141     #define HID_DEVICE_ID_ALPS_U1_DUAL_PTP 0x121F
1142     #define HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP 0x1220
1143     #define HID_DEVICE_ID_ALPS_U1 0x1215
1144     +#define HID_DEVICE_ID_ALPS_U1_UNICORN_LEGACY 0x121E
1145     #define HID_DEVICE_ID_ALPS_T4_BTNLESS 0x120C
1146     #define HID_DEVICE_ID_ALPS_1222 0x1222
1147    
1148     -
1149     #define USB_VENDOR_ID_AMI 0x046b
1150     #define USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_MOUSE 0xff10
1151    
1152     @@ -385,6 +385,7 @@
1153     #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349 0x7349
1154     #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7 0x73f7
1155     #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001 0xa001
1156     +#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002 0xc002
1157    
1158     #define USB_VENDOR_ID_ELAN 0x04f3
1159     #define USB_DEVICE_ID_TOSHIBA_CLICK_L9W 0x0401
1160     @@ -1088,6 +1089,9 @@
1161     #define USB_DEVICE_ID_SYMBOL_SCANNER_2 0x1300
1162     #define USB_DEVICE_ID_SYMBOL_SCANNER_3 0x1200
1163    
1164     +#define I2C_VENDOR_ID_SYNAPTICS 0x06cb
1165     +#define I2C_PRODUCT_ID_SYNAPTICS_SYNA2393 0x7a13
1166     +
1167     #define USB_VENDOR_ID_SYNAPTICS 0x06cb
1168     #define USB_DEVICE_ID_SYNAPTICS_TP 0x0001
1169     #define USB_DEVICE_ID_SYNAPTICS_INT_TP 0x0002
1170     @@ -1102,6 +1106,7 @@
1171     #define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
1172     #define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3
1173     #define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3
1174     +#define USB_DEVICE_ID_SYNAPTICS_DELL_K12A 0x2819
1175     #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 0x2968
1176     #define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710
1177     #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5 0x81a7
1178     diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
1179     index 362805ddf377..03c720b47306 100644
1180     --- a/drivers/hid/hid-multitouch.c
1181     +++ b/drivers/hid/hid-multitouch.c
1182     @@ -1922,6 +1922,9 @@ static const struct hid_device_id mt_devices[] = {
1183     { .driver_data = MT_CLS_EGALAX_SERIAL,
1184     MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1185     USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1186     + { .driver_data = MT_CLS_EGALAX,
1187     + MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1188     + USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002) },
1189    
1190     /* Elitegroup panel */
1191     { .driver_data = MT_CLS_SERIAL,
1192     diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
1193     index ae64a286a68f..90ec2390ef68 100644
1194     --- a/drivers/hid/hid-quirks.c
1195     +++ b/drivers/hid/hid-quirks.c
1196     @@ -163,6 +163,7 @@ static const struct hid_device_id hid_quirks[] = {
1197     { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2), HID_QUIRK_NO_INIT_REPORTS },
1198     { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD), HID_QUIRK_NO_INIT_REPORTS },
1199     { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103), HID_QUIRK_NO_INIT_REPORTS },
1200     + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DELL_K12A), HID_QUIRK_NO_INIT_REPORTS },
1201     { HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), HID_QUIRK_BADPAD },
1202     { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
1203     { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
1204     diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c
1205     index 479934f7d241..b525b2715e07 100644
1206     --- a/drivers/hid/i2c-hid/i2c-hid-core.c
1207     +++ b/drivers/hid/i2c-hid/i2c-hid-core.c
1208     @@ -179,6 +179,8 @@ static const struct i2c_hid_quirks {
1209     I2C_HID_QUIRK_BOGUS_IRQ },
1210     { USB_VENDOR_ID_ALPS_JP, HID_ANY_ID,
1211     I2C_HID_QUIRK_RESET_ON_RESUME },
1212     + { I2C_VENDOR_ID_SYNAPTICS, I2C_PRODUCT_ID_SYNAPTICS_SYNA2393,
1213     + I2C_HID_QUIRK_RESET_ON_RESUME },
1214     { USB_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720,
1215     I2C_HID_QUIRK_BAD_INPUT_SIZE },
1216     { 0, 0 }
1217     diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
1218     index 810a942eaa8e..cc193f2ba5d3 100644
1219     --- a/drivers/i2c/i2c-core-base.c
1220     +++ b/drivers/i2c/i2c-core-base.c
1221     @@ -338,8 +338,10 @@ static int i2c_device_probe(struct device *dev)
1222     } else if (ACPI_COMPANION(dev)) {
1223     irq = i2c_acpi_get_irq(client);
1224     }
1225     - if (irq == -EPROBE_DEFER)
1226     - return irq;
1227     + if (irq == -EPROBE_DEFER) {
1228     + status = irq;
1229     + goto put_sync_adapter;
1230     + }
1231    
1232     if (irq < 0)
1233     irq = 0;
1234     @@ -353,15 +355,19 @@ static int i2c_device_probe(struct device *dev)
1235     */
1236     if (!driver->id_table &&
1237     !i2c_acpi_match_device(dev->driver->acpi_match_table, client) &&
1238     - !i2c_of_match_device(dev->driver->of_match_table, client))
1239     - return -ENODEV;
1240     + !i2c_of_match_device(dev->driver->of_match_table, client)) {
1241     + status = -ENODEV;
1242     + goto put_sync_adapter;
1243     + }
1244    
1245     if (client->flags & I2C_CLIENT_WAKE) {
1246     int wakeirq;
1247    
1248     wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
1249     - if (wakeirq == -EPROBE_DEFER)
1250     - return wakeirq;
1251     + if (wakeirq == -EPROBE_DEFER) {
1252     + status = wakeirq;
1253     + goto put_sync_adapter;
1254     + }
1255    
1256     device_init_wakeup(&client->dev, true);
1257    
1258     @@ -408,6 +414,10 @@ err_detach_pm_domain:
1259     err_clear_wakeup_irq:
1260     dev_pm_clear_wake_irq(&client->dev);
1261     device_init_wakeup(&client->dev, false);
1262     +put_sync_adapter:
1263     + if (client->flags & I2C_CLIENT_HOST_NOTIFY)
1264     + pm_runtime_put_sync(&client->adapter->dev);
1265     +
1266     return status;
1267     }
1268    
1269     diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
1270     index 2ea4585d18c5..94beacc41302 100644
1271     --- a/drivers/i2c/i2c-dev.c
1272     +++ b/drivers/i2c/i2c-dev.c
1273     @@ -40,7 +40,7 @@
1274     struct i2c_dev {
1275     struct list_head list;
1276     struct i2c_adapter *adap;
1277     - struct device *dev;
1278     + struct device dev;
1279     struct cdev cdev;
1280     };
1281    
1282     @@ -84,12 +84,14 @@ static struct i2c_dev *get_free_i2c_dev(struct i2c_adapter *adap)
1283     return i2c_dev;
1284     }
1285    
1286     -static void put_i2c_dev(struct i2c_dev *i2c_dev)
1287     +static void put_i2c_dev(struct i2c_dev *i2c_dev, bool del_cdev)
1288     {
1289     spin_lock(&i2c_dev_list_lock);
1290     list_del(&i2c_dev->list);
1291     spin_unlock(&i2c_dev_list_lock);
1292     - kfree(i2c_dev);
1293     + if (del_cdev)
1294     + cdev_device_del(&i2c_dev->cdev, &i2c_dev->dev);
1295     + put_device(&i2c_dev->dev);
1296     }
1297    
1298     static ssize_t name_show(struct device *dev,
1299     @@ -628,6 +630,14 @@ static const struct file_operations i2cdev_fops = {
1300    
1301     static struct class *i2c_dev_class;
1302    
1303     +static void i2cdev_dev_release(struct device *dev)
1304     +{
1305     + struct i2c_dev *i2c_dev;
1306     +
1307     + i2c_dev = container_of(dev, struct i2c_dev, dev);
1308     + kfree(i2c_dev);
1309     +}
1310     +
1311     static int i2cdev_attach_adapter(struct device *dev, void *dummy)
1312     {
1313     struct i2c_adapter *adap;
1314     @@ -644,27 +654,23 @@ static int i2cdev_attach_adapter(struct device *dev, void *dummy)
1315    
1316     cdev_init(&i2c_dev->cdev, &i2cdev_fops);
1317     i2c_dev->cdev.owner = THIS_MODULE;
1318     - res = cdev_add(&i2c_dev->cdev, MKDEV(I2C_MAJOR, adap->nr), 1);
1319     - if (res)
1320     - goto error_cdev;
1321     -
1322     - /* register this i2c device with the driver core */
1323     - i2c_dev->dev = device_create(i2c_dev_class, &adap->dev,
1324     - MKDEV(I2C_MAJOR, adap->nr), NULL,
1325     - "i2c-%d", adap->nr);
1326     - if (IS_ERR(i2c_dev->dev)) {
1327     - res = PTR_ERR(i2c_dev->dev);
1328     - goto error;
1329     +
1330     + device_initialize(&i2c_dev->dev);
1331     + i2c_dev->dev.devt = MKDEV(I2C_MAJOR, adap->nr);
1332     + i2c_dev->dev.class = i2c_dev_class;
1333     + i2c_dev->dev.parent = &adap->dev;
1334     + i2c_dev->dev.release = i2cdev_dev_release;
1335     + dev_set_name(&i2c_dev->dev, "i2c-%d", adap->nr);
1336     +
1337     + res = cdev_device_add(&i2c_dev->cdev, &i2c_dev->dev);
1338     + if (res) {
1339     + put_i2c_dev(i2c_dev, false);
1340     + return res;
1341     }
1342    
1343     pr_debug("i2c-dev: adapter [%s] registered as minor %d\n",
1344     adap->name, adap->nr);
1345     return 0;
1346     -error:
1347     - cdev_del(&i2c_dev->cdev);
1348     -error_cdev:
1349     - put_i2c_dev(i2c_dev);
1350     - return res;
1351     }
1352    
1353     static int i2cdev_detach_adapter(struct device *dev, void *dummy)
1354     @@ -680,9 +686,7 @@ static int i2cdev_detach_adapter(struct device *dev, void *dummy)
1355     if (!i2c_dev) /* attach_adapter must have failed */
1356     return 0;
1357    
1358     - cdev_del(&i2c_dev->cdev);
1359     - put_i2c_dev(i2c_dev);
1360     - device_destroy(i2c_dev_class, MKDEV(I2C_MAJOR, adap->nr));
1361     + put_i2c_dev(i2c_dev, true);
1362    
1363     pr_debug("i2c-dev: adapter [%s] unregistered\n", adap->name);
1364     return 0;
1365     diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c
1366     index 0e16490eb3a1..5365199a31f4 100644
1367     --- a/drivers/i2c/muxes/i2c-demux-pinctrl.c
1368     +++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c
1369     @@ -272,6 +272,7 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev)
1370     err_rollback_available:
1371     device_remove_file(&pdev->dev, &dev_attr_available_masters);
1372     err_rollback:
1373     + i2c_demux_deactivate_master(priv);
1374     for (j = 0; j < i; j++) {
1375     of_node_put(priv->chan[j].parent_np);
1376     of_changeset_destroy(&priv->chan[j].chgset);
1377     diff --git a/drivers/iio/accel/sca3000.c b/drivers/iio/accel/sca3000.c
1378     index 66d768d971e1..6e429072e44a 100644
1379     --- a/drivers/iio/accel/sca3000.c
1380     +++ b/drivers/iio/accel/sca3000.c
1381     @@ -980,7 +980,7 @@ static int sca3000_read_data(struct sca3000_state *st,
1382     st->tx[0] = SCA3000_READ_REG(reg_address_high);
1383     ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer));
1384     if (ret) {
1385     - dev_err(get_device(&st->us->dev), "problem reading register");
1386     + dev_err(&st->us->dev, "problem reading register\n");
1387     return ret;
1388     }
1389    
1390     diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c
1391     index 9f63ceb15865..94fde39d9ff7 100644
1392     --- a/drivers/iio/adc/stm32-adc.c
1393     +++ b/drivers/iio/adc/stm32-adc.c
1394     @@ -1757,15 +1757,27 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
1395     return 0;
1396     }
1397    
1398     -static int stm32_adc_dma_request(struct iio_dev *indio_dev)
1399     +static int stm32_adc_dma_request(struct device *dev, struct iio_dev *indio_dev)
1400     {
1401     struct stm32_adc *adc = iio_priv(indio_dev);
1402     struct dma_slave_config config;
1403     int ret;
1404    
1405     - adc->dma_chan = dma_request_slave_channel(&indio_dev->dev, "rx");
1406     - if (!adc->dma_chan)
1407     + adc->dma_chan = dma_request_chan(dev, "rx");
1408     + if (IS_ERR(adc->dma_chan)) {
1409     + ret = PTR_ERR(adc->dma_chan);
1410     + if (ret != -ENODEV) {
1411     + if (ret != -EPROBE_DEFER)
1412     + dev_err(dev,
1413     + "DMA channel request failed with %d\n",
1414     + ret);
1415     + return ret;
1416     + }
1417     +
1418     + /* DMA is optional: fall back to IRQ mode */
1419     + adc->dma_chan = NULL;
1420     return 0;
1421     + }
1422    
1423     adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
1424     STM32_DMA_BUFFER_SIZE,
1425     @@ -1862,7 +1874,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
1426     if (ret < 0)
1427     return ret;
1428    
1429     - ret = stm32_adc_dma_request(indio_dev);
1430     + ret = stm32_adc_dma_request(dev, indio_dev);
1431     if (ret < 0)
1432     return ret;
1433    
1434     diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
1435     index 3ae0366a7b58..c2948defa785 100644
1436     --- a/drivers/iio/adc/stm32-dfsdm-adc.c
1437     +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
1438     @@ -62,7 +62,7 @@ enum sd_converter_type {
1439    
1440     struct stm32_dfsdm_dev_data {
1441     int type;
1442     - int (*init)(struct iio_dev *indio_dev);
1443     + int (*init)(struct device *dev, struct iio_dev *indio_dev);
1444     unsigned int num_channels;
1445     const struct regmap_config *regmap_cfg;
1446     };
1447     @@ -1359,13 +1359,18 @@ static void stm32_dfsdm_dma_release(struct iio_dev *indio_dev)
1448     }
1449     }
1450    
1451     -static int stm32_dfsdm_dma_request(struct iio_dev *indio_dev)
1452     +static int stm32_dfsdm_dma_request(struct device *dev,
1453     + struct iio_dev *indio_dev)
1454     {
1455     struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1456    
1457     - adc->dma_chan = dma_request_slave_channel(&indio_dev->dev, "rx");
1458     - if (!adc->dma_chan)
1459     - return -EINVAL;
1460     + adc->dma_chan = dma_request_chan(dev, "rx");
1461     + if (IS_ERR(adc->dma_chan)) {
1462     + int ret = PTR_ERR(adc->dma_chan);
1463     +
1464     + adc->dma_chan = NULL;
1465     + return ret;
1466     + }
1467    
1468     adc->rx_buf = dma_alloc_coherent(adc->dma_chan->device->dev,
1469     DFSDM_DMA_BUFFER_SIZE,
1470     @@ -1415,7 +1420,7 @@ static int stm32_dfsdm_adc_chan_init_one(struct iio_dev *indio_dev,
1471     &adc->dfsdm->ch_list[ch->channel]);
1472     }
1473    
1474     -static int stm32_dfsdm_audio_init(struct iio_dev *indio_dev)
1475     +static int stm32_dfsdm_audio_init(struct device *dev, struct iio_dev *indio_dev)
1476     {
1477     struct iio_chan_spec *ch;
1478     struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1479     @@ -1442,10 +1447,10 @@ static int stm32_dfsdm_audio_init(struct iio_dev *indio_dev)
1480     indio_dev->num_channels = 1;
1481     indio_dev->channels = ch;
1482    
1483     - return stm32_dfsdm_dma_request(indio_dev);
1484     + return stm32_dfsdm_dma_request(dev, indio_dev);
1485     }
1486    
1487     -static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
1488     +static int stm32_dfsdm_adc_init(struct device *dev, struct iio_dev *indio_dev)
1489     {
1490     struct iio_chan_spec *ch;
1491     struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
1492     @@ -1489,8 +1494,17 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
1493     init_completion(&adc->completion);
1494    
1495     /* Optionally request DMA */
1496     - if (stm32_dfsdm_dma_request(indio_dev)) {
1497     - dev_dbg(&indio_dev->dev, "No DMA support\n");
1498     + ret = stm32_dfsdm_dma_request(dev, indio_dev);
1499     + if (ret) {
1500     + if (ret != -ENODEV) {
1501     + if (ret != -EPROBE_DEFER)
1502     + dev_err(dev,
1503     + "DMA channel request failed with %d\n",
1504     + ret);
1505     + return ret;
1506     + }
1507     +
1508     + dev_dbg(dev, "No DMA support\n");
1509     return 0;
1510     }
1511    
1512     @@ -1603,7 +1617,7 @@ static int stm32_dfsdm_adc_probe(struct platform_device *pdev)
1513     adc->dfsdm->fl_list[adc->fl_id].sync_mode = val;
1514    
1515     adc->dev_data = dev_data;
1516     - ret = dev_data->init(iio);
1517     + ret = dev_data->init(dev, iio);
1518     if (ret < 0)
1519     return ret;
1520    
1521     diff --git a/drivers/iio/adc/ti-ads8344.c b/drivers/iio/adc/ti-ads8344.c
1522     index abe4b56c847c..8a8792010c20 100644
1523     --- a/drivers/iio/adc/ti-ads8344.c
1524     +++ b/drivers/iio/adc/ti-ads8344.c
1525     @@ -32,16 +32,17 @@ struct ads8344 {
1526     u8 rx_buf[3];
1527     };
1528    
1529     -#define ADS8344_VOLTAGE_CHANNEL(chan, si) \
1530     +#define ADS8344_VOLTAGE_CHANNEL(chan, addr) \
1531     { \
1532     .type = IIO_VOLTAGE, \
1533     .indexed = 1, \
1534     .channel = chan, \
1535     .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
1536     .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
1537     + .address = addr, \
1538     }
1539    
1540     -#define ADS8344_VOLTAGE_CHANNEL_DIFF(chan1, chan2, si) \
1541     +#define ADS8344_VOLTAGE_CHANNEL_DIFF(chan1, chan2, addr) \
1542     { \
1543     .type = IIO_VOLTAGE, \
1544     .indexed = 1, \
1545     @@ -50,6 +51,7 @@ struct ads8344 {
1546     .differential = 1, \
1547     .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
1548     .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
1549     + .address = addr, \
1550     }
1551    
1552     static const struct iio_chan_spec ads8344_channels[] = {
1553     @@ -105,7 +107,7 @@ static int ads8344_read_raw(struct iio_dev *iio,
1554     switch (mask) {
1555     case IIO_CHAN_INFO_RAW:
1556     mutex_lock(&adc->lock);
1557     - *value = ads8344_adc_conversion(adc, channel->scan_index,
1558     + *value = ads8344_adc_conversion(adc, channel->address,
1559     channel->differential);
1560     mutex_unlock(&adc->lock);
1561     if (*value < 0)
1562     diff --git a/drivers/iio/dac/vf610_dac.c b/drivers/iio/dac/vf610_dac.c
1563     index 0ec4d2609ef9..364925d703db 100644
1564     --- a/drivers/iio/dac/vf610_dac.c
1565     +++ b/drivers/iio/dac/vf610_dac.c
1566     @@ -225,6 +225,7 @@ static int vf610_dac_probe(struct platform_device *pdev)
1567     return 0;
1568    
1569     error_iio_device_register:
1570     + vf610_dac_exit(info);
1571     clk_disable_unprepare(info->clk);
1572    
1573     return ret;
1574     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
1575     index bc7771498342..32de8e7bb8b4 100644
1576     --- a/drivers/iommu/amd_iommu.c
1577     +++ b/drivers/iommu/amd_iommu.c
1578     @@ -2386,6 +2386,7 @@ static void update_domain(struct protection_domain *domain)
1579    
1580     domain_flush_devices(domain);
1581     domain_flush_tlb_pde(domain);
1582     + domain_flush_complete(domain);
1583     }
1584    
1585     static int dir2prot(enum dma_data_direction direction)
1586     diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
1587     index ef14b00fa94b..135ae5222cf3 100644
1588     --- a/drivers/iommu/amd_iommu_init.c
1589     +++ b/drivers/iommu/amd_iommu_init.c
1590     @@ -1331,8 +1331,8 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,
1591     }
1592     case IVHD_DEV_ACPI_HID: {
1593     u16 devid;
1594     - u8 hid[ACPIHID_HID_LEN] = {0};
1595     - u8 uid[ACPIHID_UID_LEN] = {0};
1596     + u8 hid[ACPIHID_HID_LEN];
1597     + u8 uid[ACPIHID_UID_LEN];
1598     int ret;
1599    
1600     if (h->type != 0x40) {
1601     @@ -1349,6 +1349,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,
1602     break;
1603     }
1604    
1605     + uid[0] = '\0';
1606     switch (e->uidf) {
1607     case UID_NOT_PRESENT:
1608    
1609     @@ -1363,8 +1364,8 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,
1610     break;
1611     case UID_IS_CHARACTER:
1612    
1613     - memcpy(uid, (u8 *)(&e->uid), ACPIHID_UID_LEN - 1);
1614     - uid[ACPIHID_UID_LEN - 1] = '\0';
1615     + memcpy(uid, &e->uid, e->uidl);
1616     + uid[e->uidl] = '\0';
1617    
1618     break;
1619     default:
1620     diff --git a/drivers/ipack/carriers/tpci200.c b/drivers/ipack/carriers/tpci200.c
1621     index d246d74ec3a5..fdcf2bcae164 100644
1622     --- a/drivers/ipack/carriers/tpci200.c
1623     +++ b/drivers/ipack/carriers/tpci200.c
1624     @@ -306,6 +306,7 @@ static int tpci200_register(struct tpci200_board *tpci200)
1625     "(bn 0x%X, sn 0x%X) failed to map driver user space!",
1626     tpci200->info->pdev->bus->number,
1627     tpci200->info->pdev->devfn);
1628     + res = -ENOMEM;
1629     goto out_release_mem8_space;
1630     }
1631    
1632     diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/rcar_fdp1.c
1633     index cb93a13e1777..97bed45360f0 100644
1634     --- a/drivers/media/platform/rcar_fdp1.c
1635     +++ b/drivers/media/platform/rcar_fdp1.c
1636     @@ -2369,7 +2369,7 @@ static int fdp1_probe(struct platform_device *pdev)
1637     dprintk(fdp1, "FDP1 Version R-Car H3\n");
1638     break;
1639     case FD1_IP_M3N:
1640     - dprintk(fdp1, "FDP1 Version R-Car M3N\n");
1641     + dprintk(fdp1, "FDP1 Version R-Car M3-N\n");
1642     break;
1643     case FD1_IP_E3:
1644     dprintk(fdp1, "FDP1 Version R-Car E3\n");
1645     diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
1646     index b4a66b64f742..1958833b3b74 100644
1647     --- a/drivers/misc/cardreader/rtsx_pcr.c
1648     +++ b/drivers/misc/cardreader/rtsx_pcr.c
1649     @@ -143,6 +143,9 @@ static void rtsx_comm_pm_full_on(struct rtsx_pcr *pcr)
1650    
1651     rtsx_disable_aspm(pcr);
1652    
1653     + /* Fixes DMA transfer timout issue after disabling ASPM on RTS5260 */
1654     + msleep(1);
1655     +
1656     if (option->ltr_enabled)
1657     rtsx_set_ltr_latency(pcr, option->ltr_active_latency);
1658    
1659     diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
1660     index 1e3edbbacb1e..c6b163060c76 100644
1661     --- a/drivers/misc/mei/client.c
1662     +++ b/drivers/misc/mei/client.c
1663     @@ -266,6 +266,7 @@ void mei_me_cl_rm_by_uuid(struct mei_device *dev, const uuid_le *uuid)
1664     down_write(&dev->me_clients_rwsem);
1665     me_cl = __mei_me_cl_by_uuid(dev, uuid);
1666     __mei_me_cl_del(dev, me_cl);
1667     + mei_me_cl_put(me_cl);
1668     up_write(&dev->me_clients_rwsem);
1669     }
1670    
1671     @@ -287,6 +288,7 @@ void mei_me_cl_rm_by_uuid_id(struct mei_device *dev, const uuid_le *uuid, u8 id)
1672     down_write(&dev->me_clients_rwsem);
1673     me_cl = __mei_me_cl_by_uuid_id(dev, uuid, id);
1674     __mei_me_cl_del(dev, me_cl);
1675     + mei_me_cl_put(me_cl);
1676     up_write(&dev->me_clients_rwsem);
1677     }
1678    
1679     diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
1680     index 6cc7ecb0c788..036b9452b19f 100644
1681     --- a/drivers/mtd/mtdcore.c
1682     +++ b/drivers/mtd/mtdcore.c
1683     @@ -563,7 +563,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd)
1684    
1685     config.id = -1;
1686     config.dev = &mtd->dev;
1687     - config.name = mtd->name;
1688     + config.name = dev_name(&mtd->dev);
1689     config.owner = THIS_MODULE;
1690     config.reg_read = mtd_nvmem_reg_read;
1691     config.size = mtd->size;
1692     diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
1693     index 8dda51bbdd11..0d21c68bfe24 100644
1694     --- a/drivers/mtd/nand/spi/core.c
1695     +++ b/drivers/mtd/nand/spi/core.c
1696     @@ -1049,6 +1049,10 @@ static int spinand_init(struct spinand_device *spinand)
1697    
1698     mtd->oobavail = ret;
1699    
1700     + /* Propagate ECC information to mtd_info */
1701     + mtd->ecc_strength = nand->eccreq.strength;
1702     + mtd->ecc_step_size = nand->eccreq.step_size;
1703     +
1704     return 0;
1705    
1706     err_cleanup_nanddev:
1707     diff --git a/drivers/mtd/ubi/debug.c b/drivers/mtd/ubi/debug.c
1708     index a1dff92ceedf..8a83072401a7 100644
1709     --- a/drivers/mtd/ubi/debug.c
1710     +++ b/drivers/mtd/ubi/debug.c
1711     @@ -392,9 +392,6 @@ static void *eraseblk_count_seq_start(struct seq_file *s, loff_t *pos)
1712     {
1713     struct ubi_device *ubi = s->private;
1714    
1715     - if (*pos == 0)
1716     - return SEQ_START_TOKEN;
1717     -
1718     if (*pos < ubi->peb_count)
1719     return pos;
1720    
1721     @@ -408,8 +405,6 @@ static void *eraseblk_count_seq_next(struct seq_file *s, void *v, loff_t *pos)
1722     {
1723     struct ubi_device *ubi = s->private;
1724    
1725     - if (v == SEQ_START_TOKEN)
1726     - return pos;
1727     (*pos)++;
1728    
1729     if (*pos < ubi->peb_count)
1730     @@ -431,11 +426,8 @@ static int eraseblk_count_seq_show(struct seq_file *s, void *iter)
1731     int err;
1732    
1733     /* If this is the start, print a header */
1734     - if (iter == SEQ_START_TOKEN) {
1735     - seq_puts(s,
1736     - "physical_block_number\terase_count\tblock_status\tread_status\n");
1737     - return 0;
1738     - }
1739     + if (*block_number == 0)
1740     + seq_puts(s, "physical_block_number\terase_count\n");
1741    
1742     err = ubi_io_is_bad(ubi, *block_number);
1743     if (err)
1744     diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.h b/drivers/net/ethernet/amazon/ena/ena_netdev.h
1745     index dc02950a96b8..28412f11a9ca 100644
1746     --- a/drivers/net/ethernet/amazon/ena/ena_netdev.h
1747     +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.h
1748     @@ -68,7 +68,7 @@
1749     * 16kB.
1750     */
1751     #if PAGE_SIZE > SZ_16K
1752     -#define ENA_PAGE_SIZE SZ_16K
1753     +#define ENA_PAGE_SIZE (_AC(SZ_16K, UL))
1754     #else
1755     #define ENA_PAGE_SIZE PAGE_SIZE
1756     #endif
1757     diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
1758     index 74b9f3f1da81..0e8264c0b308 100644
1759     --- a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
1760     +++ b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
1761     @@ -56,7 +56,7 @@ static const struct aq_board_revision_s hw_atl_boards[] = {
1762     { AQ_DEVICE_ID_D108, AQ_HWREV_2, &hw_atl_ops_b0, &hw_atl_b0_caps_aqc108, },
1763     { AQ_DEVICE_ID_D109, AQ_HWREV_2, &hw_atl_ops_b0, &hw_atl_b0_caps_aqc109, },
1764    
1765     - { AQ_DEVICE_ID_AQC100, AQ_HWREV_ANY, &hw_atl_ops_b1, &hw_atl_b0_caps_aqc107, },
1766     + { AQ_DEVICE_ID_AQC100, AQ_HWREV_ANY, &hw_atl_ops_b1, &hw_atl_b0_caps_aqc100, },
1767     { AQ_DEVICE_ID_AQC107, AQ_HWREV_ANY, &hw_atl_ops_b1, &hw_atl_b0_caps_aqc107, },
1768     { AQ_DEVICE_ID_AQC108, AQ_HWREV_ANY, &hw_atl_ops_b1, &hw_atl_b0_caps_aqc108, },
1769     { AQ_DEVICE_ID_AQC109, AQ_HWREV_ANY, &hw_atl_ops_b1, &hw_atl_b0_caps_aqc109, },
1770     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
1771     index e1ab2feeae53..aaa03ce5796f 100644
1772     --- a/drivers/net/ethernet/ibm/ibmvnic.c
1773     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
1774     @@ -2086,7 +2086,8 @@ static void __ibmvnic_reset(struct work_struct *work)
1775     rc = do_hard_reset(adapter, rwi, reset_state);
1776     rtnl_unlock();
1777     }
1778     - } else {
1779     + } else if (!(rwi->reset_reason == VNIC_RESET_FATAL &&
1780     + adapter->from_passive_init)) {
1781     rc = do_reset(adapter, rwi, reset_state);
1782     }
1783     kfree(rwi);
1784     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1785     index 89a6ae2b17e3..1623516efb17 100644
1786     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1787     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1788     @@ -3832,7 +3832,7 @@ static int stmmac_set_features(struct net_device *netdev,
1789     /**
1790     * stmmac_interrupt - main ISR
1791     * @irq: interrupt number.
1792     - * @dev_id: to pass the net device pointer.
1793     + * @dev_id: to pass the net device pointer (must be valid).
1794     * Description: this is the main driver interrupt service routine.
1795     * It can call:
1796     * o DMA service routine (to manage incoming frame reception and transmission
1797     @@ -3856,11 +3856,6 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id)
1798     if (priv->irq_wake)
1799     pm_wakeup_event(priv->device, 0);
1800    
1801     - if (unlikely(!dev)) {
1802     - netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__);
1803     - return IRQ_NONE;
1804     - }
1805     -
1806     /* Check if adapter is up */
1807     if (test_bit(STMMAC_DOWN, &priv->state))
1808     return IRQ_HANDLED;
1809     diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
1810     index 3a53d222bfcc..d89ec99abcd6 100644
1811     --- a/drivers/net/gtp.c
1812     +++ b/drivers/net/gtp.c
1813     @@ -1172,11 +1172,11 @@ out_unlock:
1814     static struct genl_family gtp_genl_family;
1815    
1816     static int gtp_genl_fill_info(struct sk_buff *skb, u32 snd_portid, u32 snd_seq,
1817     - u32 type, struct pdp_ctx *pctx)
1818     + int flags, u32 type, struct pdp_ctx *pctx)
1819     {
1820     void *genlh;
1821    
1822     - genlh = genlmsg_put(skb, snd_portid, snd_seq, &gtp_genl_family, 0,
1823     + genlh = genlmsg_put(skb, snd_portid, snd_seq, &gtp_genl_family, flags,
1824     type);
1825     if (genlh == NULL)
1826     goto nlmsg_failure;
1827     @@ -1230,8 +1230,8 @@ static int gtp_genl_get_pdp(struct sk_buff *skb, struct genl_info *info)
1828     goto err_unlock;
1829     }
1830    
1831     - err = gtp_genl_fill_info(skb2, NETLINK_CB(skb).portid,
1832     - info->snd_seq, info->nlhdr->nlmsg_type, pctx);
1833     + err = gtp_genl_fill_info(skb2, NETLINK_CB(skb).portid, info->snd_seq,
1834     + 0, info->nlhdr->nlmsg_type, pctx);
1835     if (err < 0)
1836     goto err_unlock_free;
1837    
1838     @@ -1274,6 +1274,7 @@ static int gtp_genl_dump_pdp(struct sk_buff *skb,
1839     gtp_genl_fill_info(skb,
1840     NETLINK_CB(cb->skb).portid,
1841     cb->nlh->nlmsg_seq,
1842     + NLM_F_MULTI,
1843     cb->nlh->nlmsg_type, pctx)) {
1844     cb->args[0] = i;
1845     cb->args[1] = j;
1846     diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c
1847     index b361c73636a4..0d42477946f3 100644
1848     --- a/drivers/platform/x86/asus-nb-wmi.c
1849     +++ b/drivers/platform/x86/asus-nb-wmi.c
1850     @@ -514,9 +514,33 @@ static struct asus_wmi_driver asus_nb_wmi_driver = {
1851     .detect_quirks = asus_nb_wmi_quirks,
1852     };
1853    
1854     +static const struct dmi_system_id asus_nb_wmi_blacklist[] __initconst = {
1855     + {
1856     + /*
1857     + * asus-nb-wm adds no functionality. The T100TA has a detachable
1858     + * USB kbd, so no hotkeys and it has no WMI rfkill; and loading
1859     + * asus-nb-wm causes the camera LED to turn and _stay_ on.
1860     + */
1861     + .matches = {
1862     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1863     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100TA"),
1864     + },
1865     + },
1866     + {
1867     + /* The Asus T200TA has the same issue as the T100TA */
1868     + .matches = {
1869     + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
1870     + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T200TA"),
1871     + },
1872     + },
1873     + {} /* Terminating entry */
1874     +};
1875    
1876     static int __init asus_nb_wmi_init(void)
1877     {
1878     + if (dmi_check_system(asus_nb_wmi_blacklist))
1879     + return -ENODEV;
1880     +
1881     return asus_wmi_register_driver(&asus_nb_wmi_driver);
1882     }
1883    
1884     diff --git a/drivers/rapidio/devices/rio_mport_cdev.c b/drivers/rapidio/devices/rio_mport_cdev.c
1885     index 8155f59ece38..10af330153b5 100644
1886     --- a/drivers/rapidio/devices/rio_mport_cdev.c
1887     +++ b/drivers/rapidio/devices/rio_mport_cdev.c
1888     @@ -877,6 +877,11 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode,
1889     rmcd_error("pinned %ld out of %ld pages",
1890     pinned, nr_pages);
1891     ret = -EFAULT;
1892     + /*
1893     + * Set nr_pages up to mean "how many pages to unpin, in
1894     + * the error handler:
1895     + */
1896     + nr_pages = pinned;
1897     goto err_pg;
1898     }
1899    
1900     diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
1901     index 7f66a7783209..59f0f1030c54 100644
1902     --- a/drivers/scsi/ibmvscsi/ibmvscsi.c
1903     +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
1904     @@ -2320,16 +2320,12 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1905     static int ibmvscsi_remove(struct vio_dev *vdev)
1906     {
1907     struct ibmvscsi_host_data *hostdata = dev_get_drvdata(&vdev->dev);
1908     - unsigned long flags;
1909    
1910     srp_remove_host(hostdata->host);
1911     scsi_remove_host(hostdata->host);
1912    
1913     purge_requests(hostdata, DID_ERROR);
1914     -
1915     - spin_lock_irqsave(hostdata->host->host_lock, flags);
1916     release_event_pool(&hostdata->pool, hostdata);
1917     - spin_unlock_irqrestore(hostdata->host->host_lock, flags);
1918    
1919     ibmvscsi_release_crq_queue(&hostdata->queue, hostdata,
1920     max_events);
1921     diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
1922     index 1fbc5c6c6c14..bed7e8637217 100644
1923     --- a/drivers/scsi/qla2xxx/qla_attr.c
1924     +++ b/drivers/scsi/qla2xxx/qla_attr.c
1925     @@ -1775,9 +1775,6 @@ qla2x00_port_speed_show(struct device *dev, struct device_attribute *attr,
1926     return -EINVAL;
1927     }
1928    
1929     - ql_log(ql_log_info, vha, 0x70d6,
1930     - "port speed:%d\n", ha->link_data_rate);
1931     -
1932     return scnprintf(buf, PAGE_SIZE, "%s\n", spd[ha->link_data_rate]);
1933     }
1934    
1935     @@ -2926,11 +2923,11 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
1936     test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags))
1937     msleep(1000);
1938    
1939     - qla_nvme_delete(vha);
1940    
1941     qla24xx_disable_vp(vha);
1942     qla2x00_wait_for_sess_deletion(vha);
1943    
1944     + qla_nvme_delete(vha);
1945     vha->flags.delete_progress = 1;
1946    
1947     qlt_remove_target(ha, vha);
1948     diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
1949     index 1ef8907314e5..62a16463f025 100644
1950     --- a/drivers/scsi/qla2xxx/qla_mbx.c
1951     +++ b/drivers/scsi/qla2xxx/qla_mbx.c
1952     @@ -3117,7 +3117,7 @@ qla24xx_abort_command(srb_t *sp)
1953     ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x108c,
1954     "Entered %s.\n", __func__);
1955    
1956     - if (vha->flags.qpairs_available && sp->qpair)
1957     + if (sp->qpair)
1958     req = sp->qpair->req;
1959     else
1960     return QLA_FUNCTION_FAILED;
1961     diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
1962     index 55c51143bb09..4ffb334cd5cd 100644
1963     --- a/drivers/staging/greybus/uart.c
1964     +++ b/drivers/staging/greybus/uart.c
1965     @@ -537,9 +537,9 @@ static void gb_tty_set_termios(struct tty_struct *tty,
1966     }
1967    
1968     if (C_CRTSCTS(tty) && C_BAUD(tty) != B0)
1969     - newline.flow_control |= GB_SERIAL_AUTO_RTSCTS_EN;
1970     + newline.flow_control = GB_SERIAL_AUTO_RTSCTS_EN;
1971     else
1972     - newline.flow_control &= ~GB_SERIAL_AUTO_RTSCTS_EN;
1973     + newline.flow_control = 0;
1974    
1975     if (memcmp(&gb_tty->line_coding, &newline, sizeof(newline))) {
1976     memcpy(&gb_tty->line_coding, &newline, sizeof(newline));
1977     diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c
1978     index 4b25a3a314ed..ed404355ea4c 100644
1979     --- a/drivers/staging/iio/resolver/ad2s1210.c
1980     +++ b/drivers/staging/iio/resolver/ad2s1210.c
1981     @@ -130,17 +130,24 @@ static int ad2s1210_config_write(struct ad2s1210_state *st, u8 data)
1982     static int ad2s1210_config_read(struct ad2s1210_state *st,
1983     unsigned char address)
1984     {
1985     - struct spi_transfer xfer = {
1986     - .len = 2,
1987     - .rx_buf = st->rx,
1988     - .tx_buf = st->tx,
1989     + struct spi_transfer xfers[] = {
1990     + {
1991     + .len = 1,
1992     + .rx_buf = &st->rx[0],
1993     + .tx_buf = &st->tx[0],
1994     + .cs_change = 1,
1995     + }, {
1996     + .len = 1,
1997     + .rx_buf = &st->rx[1],
1998     + .tx_buf = &st->tx[1],
1999     + },
2000     };
2001     int ret = 0;
2002    
2003     ad2s1210_set_mode(MOD_CONFIG, st);
2004     st->tx[0] = address | AD2S1210_MSB_IS_HIGH;
2005     st->tx[1] = AD2S1210_REG_FAULT;
2006     - ret = spi_sync_transfer(st->sdev, &xfer, 1);
2007     + ret = spi_sync_transfer(st->sdev, xfers, 2);
2008     if (ret < 0)
2009     return ret;
2010    
2011     diff --git a/drivers/staging/kpc2000/kpc2000/core.c b/drivers/staging/kpc2000/kpc2000/core.c
2012     index 871441658f0e..9c67852b19e1 100644
2013     --- a/drivers/staging/kpc2000/kpc2000/core.c
2014     +++ b/drivers/staging/kpc2000/kpc2000/core.c
2015     @@ -298,7 +298,6 @@ static int kp2000_pcie_probe(struct pci_dev *pdev,
2016     {
2017     int err = 0;
2018     struct kp2000_device *pcard;
2019     - int rv;
2020     unsigned long reg_bar_phys_addr;
2021     unsigned long reg_bar_phys_len;
2022     unsigned long dma_bar_phys_addr;
2023     @@ -445,11 +444,11 @@ static int kp2000_pcie_probe(struct pci_dev *pdev,
2024     if (err < 0)
2025     goto err_release_dma;
2026    
2027     - rv = request_irq(pcard->pdev->irq, kp2000_irq_handler, IRQF_SHARED,
2028     - pcard->name, pcard);
2029     - if (rv) {
2030     + err = request_irq(pcard->pdev->irq, kp2000_irq_handler, IRQF_SHARED,
2031     + pcard->name, pcard);
2032     + if (err) {
2033     dev_err(&pcard->pdev->dev,
2034     - "%s: failed to request_irq: %d\n", __func__, rv);
2035     + "%s: failed to request_irq: %d\n", __func__, err);
2036     goto err_disable_msi;
2037     }
2038    
2039     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
2040     index d542e26ca56a..7c78a5d02c08 100644
2041     --- a/drivers/target/target_core_transport.c
2042     +++ b/drivers/target/target_core_transport.c
2043     @@ -3336,6 +3336,7 @@ static void target_tmr_work(struct work_struct *work)
2044    
2045     cmd->se_tfo->queue_tm_rsp(cmd);
2046    
2047     + transport_lun_remove_cmd(cmd);
2048     transport_cmd_check_stop_to_fabric(cmd);
2049     return;
2050    
2051     diff --git a/drivers/tty/serial/sifive.c b/drivers/tty/serial/sifive.c
2052     index d5f81b98e4d7..38133eba83a8 100644
2053     --- a/drivers/tty/serial/sifive.c
2054     +++ b/drivers/tty/serial/sifive.c
2055     @@ -840,6 +840,7 @@ console_initcall(sifive_console_init);
2056    
2057     static void __ssp_add_console_port(struct sifive_serial_port *ssp)
2058     {
2059     + spin_lock_init(&ssp->port.lock);
2060     sifive_serial_console_ports[ssp->port.line] = ssp;
2061     }
2062    
2063     diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
2064     index 02eaac7e1e34..a1ac2f0723b0 100644
2065     --- a/drivers/usb/core/message.c
2066     +++ b/drivers/usb/core/message.c
2067     @@ -1143,11 +1143,11 @@ void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
2068    
2069     if (usb_endpoint_out(epaddr)) {
2070     ep = dev->ep_out[epnum];
2071     - if (reset_hardware)
2072     + if (reset_hardware && epnum != 0)
2073     dev->ep_out[epnum] = NULL;
2074     } else {
2075     ep = dev->ep_in[epnum];
2076     - if (reset_hardware)
2077     + if (reset_hardware && epnum != 0)
2078     dev->ep_in[epnum] = NULL;
2079     }
2080     if (ep) {
2081     diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
2082     index 6c089f655707..ca68a27b98ed 100644
2083     --- a/drivers/vhost/vsock.c
2084     +++ b/drivers/vhost/vsock.c
2085     @@ -181,14 +181,14 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock,
2086     break;
2087     }
2088    
2089     - vhost_add_used(vq, head, sizeof(pkt->hdr) + payload_len);
2090     - added = true;
2091     -
2092     - /* Deliver to monitoring devices all correctly transmitted
2093     - * packets.
2094     + /* Deliver to monitoring devices all packets that we
2095     + * will transmit.
2096     */
2097     virtio_transport_deliver_tap_pkt(pkt);
2098    
2099     + vhost_add_used(vq, head, sizeof(pkt->hdr) + payload_len);
2100     + added = true;
2101     +
2102     pkt->off += payload_len;
2103     total_len += payload_len;
2104    
2105     diff --git a/fs/afs/fs_probe.c b/fs/afs/fs_probe.c
2106     index e1b9ed679045..02e976ca5732 100644
2107     --- a/fs/afs/fs_probe.c
2108     +++ b/fs/afs/fs_probe.c
2109     @@ -32,9 +32,8 @@ void afs_fileserver_probe_result(struct afs_call *call)
2110     struct afs_server *server = call->server;
2111     unsigned int server_index = call->server_index;
2112     unsigned int index = call->addr_ix;
2113     - unsigned int rtt = UINT_MAX;
2114     + unsigned int rtt_us;
2115     bool have_result = false;
2116     - u64 _rtt;
2117     int ret = call->error;
2118    
2119     _enter("%pU,%u", &server->uuid, index);
2120     @@ -93,15 +92,9 @@ responded:
2121     }
2122     }
2123    
2124     - /* Get the RTT and scale it to fit into a 32-bit value that represents
2125     - * over a minute of time so that we can access it with one instruction
2126     - * on a 32-bit system.
2127     - */
2128     - _rtt = rxrpc_kernel_get_rtt(call->net->socket, call->rxcall);
2129     - _rtt /= 64;
2130     - rtt = (_rtt > UINT_MAX) ? UINT_MAX : _rtt;
2131     - if (rtt < server->probe.rtt) {
2132     - server->probe.rtt = rtt;
2133     + rtt_us = rxrpc_kernel_get_srtt(call->net->socket, call->rxcall);
2134     + if (rtt_us < server->probe.rtt) {
2135     + server->probe.rtt = rtt_us;
2136     alist->preferred = index;
2137     have_result = true;
2138     }
2139     @@ -113,8 +106,7 @@ out:
2140     spin_unlock(&server->probe_lock);
2141    
2142     _debug("probe [%u][%u] %pISpc rtt=%u ret=%d",
2143     - server_index, index, &alist->addrs[index].transport,
2144     - (unsigned int)rtt, ret);
2145     + server_index, index, &alist->addrs[index].transport, rtt_us, ret);
2146    
2147     have_result |= afs_fs_probe_done(server);
2148     if (have_result) {
2149     diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c
2150     index 6805a469d13c..0a4fed9e706b 100644
2151     --- a/fs/afs/fsclient.c
2152     +++ b/fs/afs/fsclient.c
2153     @@ -385,8 +385,6 @@ static int afs_deliver_fs_fetch_data(struct afs_call *call)
2154     ASSERTCMP(req->offset, <=, PAGE_SIZE);
2155     if (req->offset == PAGE_SIZE) {
2156     req->offset = 0;
2157     - if (req->page_done)
2158     - req->page_done(req);
2159     req->index++;
2160     if (req->remain > 0)
2161     goto begin_page;
2162     @@ -440,11 +438,13 @@ static int afs_deliver_fs_fetch_data(struct afs_call *call)
2163     if (req->offset < PAGE_SIZE)
2164     zero_user_segment(req->pages[req->index],
2165     req->offset, PAGE_SIZE);
2166     - if (req->page_done)
2167     - req->page_done(req);
2168     req->offset = 0;
2169     }
2170    
2171     + if (req->page_done)
2172     + for (req->index = 0; req->index < req->nr_pages; req->index++)
2173     + req->page_done(req);
2174     +
2175     _leave(" = 0 [done]");
2176     return 0;
2177     }
2178     diff --git a/fs/afs/vl_probe.c b/fs/afs/vl_probe.c
2179     index 858498cc1b05..e3aa013c2177 100644
2180     --- a/fs/afs/vl_probe.c
2181     +++ b/fs/afs/vl_probe.c
2182     @@ -31,10 +31,9 @@ void afs_vlserver_probe_result(struct afs_call *call)
2183     struct afs_addr_list *alist = call->alist;
2184     struct afs_vlserver *server = call->vlserver;
2185     unsigned int server_index = call->server_index;
2186     + unsigned int rtt_us = 0;
2187     unsigned int index = call->addr_ix;
2188     - unsigned int rtt = UINT_MAX;
2189     bool have_result = false;
2190     - u64 _rtt;
2191     int ret = call->error;
2192    
2193     _enter("%s,%u,%u,%d,%d", server->name, server_index, index, ret, call->abort_code);
2194     @@ -93,15 +92,9 @@ responded:
2195     }
2196     }
2197    
2198     - /* Get the RTT and scale it to fit into a 32-bit value that represents
2199     - * over a minute of time so that we can access it with one instruction
2200     - * on a 32-bit system.
2201     - */
2202     - _rtt = rxrpc_kernel_get_rtt(call->net->socket, call->rxcall);
2203     - _rtt /= 64;
2204     - rtt = (_rtt > UINT_MAX) ? UINT_MAX : _rtt;
2205     - if (rtt < server->probe.rtt) {
2206     - server->probe.rtt = rtt;
2207     + rtt_us = rxrpc_kernel_get_srtt(call->net->socket, call->rxcall);
2208     + if (rtt_us < server->probe.rtt) {
2209     + server->probe.rtt = rtt_us;
2210     alist->preferred = index;
2211     have_result = true;
2212     }
2213     @@ -113,8 +106,7 @@ out:
2214     spin_unlock(&server->probe_lock);
2215    
2216     _debug("probe [%u][%u] %pISpc rtt=%u ret=%d",
2217     - server_index, index, &alist->addrs[index].transport,
2218     - (unsigned int)rtt, ret);
2219     + server_index, index, &alist->addrs[index].transport, rtt_us, ret);
2220    
2221     have_result |= afs_vl_probe_done(server);
2222     if (have_result) {
2223     diff --git a/fs/afs/yfsclient.c b/fs/afs/yfsclient.c
2224     index 39230880f372..8af7f093305d 100644
2225     --- a/fs/afs/yfsclient.c
2226     +++ b/fs/afs/yfsclient.c
2227     @@ -497,8 +497,6 @@ static int yfs_deliver_fs_fetch_data64(struct afs_call *call)
2228     ASSERTCMP(req->offset, <=, PAGE_SIZE);
2229     if (req->offset == PAGE_SIZE) {
2230     req->offset = 0;
2231     - if (req->page_done)
2232     - req->page_done(req);
2233     req->index++;
2234     if (req->remain > 0)
2235     goto begin_page;
2236     @@ -556,11 +554,13 @@ static int yfs_deliver_fs_fetch_data64(struct afs_call *call)
2237     if (req->offset < PAGE_SIZE)
2238     zero_user_segment(req->pages[req->index],
2239     req->offset, PAGE_SIZE);
2240     - if (req->page_done)
2241     - req->page_done(req);
2242     req->offset = 0;
2243     }
2244    
2245     + if (req->page_done)
2246     + for (req->index = 0; req->index < req->nr_pages; req->index++)
2247     + req->page_done(req);
2248     +
2249     _leave(" = 0 [done]");
2250     return 0;
2251     }
2252     diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
2253     index 703945cce0e5..2d602c2b0ff6 100644
2254     --- a/fs/ceph/caps.c
2255     +++ b/fs/ceph/caps.c
2256     @@ -3693,6 +3693,7 @@ retry:
2257     WARN_ON(1);
2258     tsession = NULL;
2259     target = -1;
2260     + mutex_lock(&session->s_mutex);
2261     }
2262     goto retry;
2263    
2264     diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
2265     index cf7b7e1d5bd7..cb733652ecca 100644
2266     --- a/fs/configfs/dir.c
2267     +++ b/fs/configfs/dir.c
2268     @@ -1519,6 +1519,7 @@ static int configfs_rmdir(struct inode *dir, struct dentry *dentry)
2269     spin_lock(&configfs_dirent_lock);
2270     configfs_detach_rollback(dentry);
2271     spin_unlock(&configfs_dirent_lock);
2272     + config_item_put(parent_item);
2273     return -EINTR;
2274     }
2275     frag->frag_dead = true;
2276     diff --git a/fs/file.c b/fs/file.c
2277     index 3da91a112bab..e5d328335f88 100644
2278     --- a/fs/file.c
2279     +++ b/fs/file.c
2280     @@ -70,7 +70,7 @@ static void copy_fd_bitmaps(struct fdtable *nfdt, struct fdtable *ofdt,
2281     */
2282     static void copy_fdtable(struct fdtable *nfdt, struct fdtable *ofdt)
2283     {
2284     - unsigned int cpy, set;
2285     + size_t cpy, set;
2286    
2287     BUG_ON(nfdt->max_fds < ofdt->max_fds);
2288    
2289     diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
2290     index 21820a5b388f..0290a22ebccf 100644
2291     --- a/fs/gfs2/glock.c
2292     +++ b/fs/gfs2/glock.c
2293     @@ -639,9 +639,6 @@ __acquires(&gl->gl_lockref.lock)
2294     goto out_unlock;
2295     if (nonblock)
2296     goto out_sched;
2297     - smp_mb();
2298     - if (atomic_read(&gl->gl_revokes) != 0)
2299     - goto out_sched;
2300     set_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
2301     GLOCK_BUG_ON(gl, gl->gl_demote_state == LM_ST_EXCLUSIVE);
2302     gl->gl_target = gl->gl_demote_state;
2303     diff --git a/fs/ubifs/auth.c b/fs/ubifs/auth.c
2304     index 8cdbd53d780c..f985a3fbbb36 100644
2305     --- a/fs/ubifs/auth.c
2306     +++ b/fs/ubifs/auth.c
2307     @@ -79,13 +79,9 @@ int ubifs_prepare_auth_node(struct ubifs_info *c, void *node,
2308     struct shash_desc *inhash)
2309     {
2310     struct ubifs_auth_node *auth = node;
2311     - u8 *hash;
2312     + u8 hash[UBIFS_HASH_ARR_SZ];
2313     int err;
2314    
2315     - hash = kmalloc(crypto_shash_descsize(c->hash_tfm), GFP_NOFS);
2316     - if (!hash)
2317     - return -ENOMEM;
2318     -
2319     {
2320     SHASH_DESC_ON_STACK(hash_desc, c->hash_tfm);
2321    
2322     @@ -94,21 +90,16 @@ int ubifs_prepare_auth_node(struct ubifs_info *c, void *node,
2323    
2324     err = crypto_shash_final(hash_desc, hash);
2325     if (err)
2326     - goto out;
2327     + return err;
2328     }
2329    
2330     err = ubifs_hash_calc_hmac(c, hash, auth->hmac);
2331     if (err)
2332     - goto out;
2333     + return err;
2334    
2335     auth->ch.node_type = UBIFS_AUTH_NODE;
2336     ubifs_prepare_node(c, auth, ubifs_auth_node_sz(c), 0);
2337     -
2338     - err = 0;
2339     -out:
2340     - kfree(hash);
2341     -
2342     - return err;
2343     + return 0;
2344     }
2345    
2346     static struct shash_desc *ubifs_get_desc(const struct ubifs_info *c,
2347     diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
2348     index a771273fba7e..8dada89bbe4d 100644
2349     --- a/fs/ubifs/file.c
2350     +++ b/fs/ubifs/file.c
2351     @@ -1375,7 +1375,6 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time,
2352     struct ubifs_info *c = inode->i_sb->s_fs_info;
2353     struct ubifs_budget_req req = { .dirtied_ino = 1,
2354     .dirtied_ino_d = ALIGN(ui->data_len, 8) };
2355     - int iflags = I_DIRTY_TIME;
2356     int err, release;
2357    
2358     if (!IS_ENABLED(CONFIG_UBIFS_ATIME_SUPPORT))
2359     @@ -1393,11 +1392,8 @@ int ubifs_update_time(struct inode *inode, struct timespec64 *time,
2360     if (flags & S_MTIME)
2361     inode->i_mtime = *time;
2362    
2363     - if (!(inode->i_sb->s_flags & SB_LAZYTIME))
2364     - iflags |= I_DIRTY_SYNC;
2365     -
2366     release = ui->dirty;
2367     - __mark_inode_dirty(inode, iflags);
2368     + __mark_inode_dirty(inode, I_DIRTY_SYNC);
2369     mutex_unlock(&ui->ui_mutex);
2370     if (release)
2371     ubifs_release_budget(c, &req);
2372     diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c
2373     index b28ac4dfb407..01fcf7975047 100644
2374     --- a/fs/ubifs/replay.c
2375     +++ b/fs/ubifs/replay.c
2376     @@ -601,18 +601,12 @@ static int authenticate_sleb(struct ubifs_info *c, struct ubifs_scan_leb *sleb,
2377     struct ubifs_scan_node *snod;
2378     int n_nodes = 0;
2379     int err;
2380     - u8 *hash, *hmac;
2381     + u8 hash[UBIFS_HASH_ARR_SZ];
2382     + u8 hmac[UBIFS_HMAC_ARR_SZ];
2383    
2384     if (!ubifs_authenticated(c))
2385     return sleb->nodes_cnt;
2386    
2387     - hash = kmalloc(crypto_shash_descsize(c->hash_tfm), GFP_NOFS);
2388     - hmac = kmalloc(c->hmac_desc_len, GFP_NOFS);
2389     - if (!hash || !hmac) {
2390     - err = -ENOMEM;
2391     - goto out;
2392     - }
2393     -
2394     list_for_each_entry(snod, &sleb->nodes, list) {
2395    
2396     n_nodes++;
2397     @@ -662,9 +656,6 @@ static int authenticate_sleb(struct ubifs_info *c, struct ubifs_scan_leb *sleb,
2398     err = 0;
2399     }
2400     out:
2401     - kfree(hash);
2402     - kfree(hmac);
2403     -
2404     return err ? err : n_nodes - n_not_auth;
2405     }
2406    
2407     diff --git a/include/linux/filter.h b/include/linux/filter.h
2408     index 0367a75f873b..3bbc72dbc69e 100644
2409     --- a/include/linux/filter.h
2410     +++ b/include/linux/filter.h
2411     @@ -770,8 +770,12 @@ bpf_ctx_narrow_access_offset(u32 off, u32 size, u32 size_default)
2412    
2413     static inline void bpf_prog_lock_ro(struct bpf_prog *fp)
2414     {
2415     - set_vm_flush_reset_perms(fp);
2416     - set_memory_ro((unsigned long)fp, fp->pages);
2417     +#ifndef CONFIG_BPF_JIT_ALWAYS_ON
2418     + if (!fp->jited) {
2419     + set_vm_flush_reset_perms(fp);
2420     + set_memory_ro((unsigned long)fp, fp->pages);
2421     + }
2422     +#endif
2423     }
2424    
2425     static inline void bpf_jit_binary_lock_ro(struct bpf_binary_header *hdr)
2426     diff --git a/include/net/af_rxrpc.h b/include/net/af_rxrpc.h
2427     index 04e97bab6f28..ab988940bf04 100644
2428     --- a/include/net/af_rxrpc.h
2429     +++ b/include/net/af_rxrpc.h
2430     @@ -59,7 +59,7 @@ bool rxrpc_kernel_abort_call(struct socket *, struct rxrpc_call *,
2431     void rxrpc_kernel_end_call(struct socket *, struct rxrpc_call *);
2432     void rxrpc_kernel_get_peer(struct socket *, struct rxrpc_call *,
2433     struct sockaddr_rxrpc *);
2434     -u64 rxrpc_kernel_get_rtt(struct socket *, struct rxrpc_call *);
2435     +u32 rxrpc_kernel_get_srtt(struct socket *, struct rxrpc_call *);
2436     int rxrpc_kernel_charge_accept(struct socket *, rxrpc_notify_rx_t,
2437     rxrpc_user_attach_call_t, unsigned long, gfp_t,
2438     unsigned int);
2439     diff --git a/include/net/drop_monitor.h b/include/net/drop_monitor.h
2440     index 2ab668461463..f68bc373544a 100644
2441     --- a/include/net/drop_monitor.h
2442     +++ b/include/net/drop_monitor.h
2443     @@ -19,7 +19,7 @@ struct net_dm_hw_metadata {
2444     struct net_device *input_dev;
2445     };
2446    
2447     -#if IS_ENABLED(CONFIG_NET_DROP_MONITOR)
2448     +#if IS_REACHABLE(CONFIG_NET_DROP_MONITOR)
2449     void net_dm_hw_report(struct sk_buff *skb,
2450     const struct net_dm_hw_metadata *hw_metadata);
2451     #else
2452     diff --git a/include/sound/hda_regmap.h b/include/sound/hda_regmap.h
2453     index 5141f8ffbb12..4c1b9bebbd60 100644
2454     --- a/include/sound/hda_regmap.h
2455     +++ b/include/sound/hda_regmap.h
2456     @@ -24,6 +24,9 @@ int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg,
2457     unsigned int val);
2458     int snd_hdac_regmap_update_raw(struct hdac_device *codec, unsigned int reg,
2459     unsigned int mask, unsigned int val);
2460     +int snd_hdac_regmap_update_raw_once(struct hdac_device *codec, unsigned int reg,
2461     + unsigned int mask, unsigned int val);
2462     +void snd_hdac_regmap_sync(struct hdac_device *codec);
2463    
2464     /**
2465     * snd_hdac_regmap_encode_verb - encode the verb to a pseudo register
2466     diff --git a/include/sound/hdaudio.h b/include/sound/hdaudio.h
2467     index fb9dce4c6928..44e57bcc4a57 100644
2468     --- a/include/sound/hdaudio.h
2469     +++ b/include/sound/hdaudio.h
2470     @@ -87,6 +87,7 @@ struct hdac_device {
2471    
2472     /* regmap */
2473     struct regmap *regmap;
2474     + struct mutex regmap_lock;
2475     struct snd_array vendor_verbs;
2476     bool lazy_cache:1; /* don't wake up for writes */
2477     bool caps_overwriting:1; /* caps overwrite being in process */
2478     diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
2479     index 191fe447f990..ba9efdc848f9 100644
2480     --- a/include/trace/events/rxrpc.h
2481     +++ b/include/trace/events/rxrpc.h
2482     @@ -1112,18 +1112,17 @@ TRACE_EVENT(rxrpc_rtt_tx,
2483     TRACE_EVENT(rxrpc_rtt_rx,
2484     TP_PROTO(struct rxrpc_call *call, enum rxrpc_rtt_rx_trace why,
2485     rxrpc_serial_t send_serial, rxrpc_serial_t resp_serial,
2486     - s64 rtt, u8 nr, s64 avg),
2487     + u32 rtt, u32 rto),
2488    
2489     - TP_ARGS(call, why, send_serial, resp_serial, rtt, nr, avg),
2490     + TP_ARGS(call, why, send_serial, resp_serial, rtt, rto),
2491    
2492     TP_STRUCT__entry(
2493     __field(unsigned int, call )
2494     __field(enum rxrpc_rtt_rx_trace, why )
2495     - __field(u8, nr )
2496     __field(rxrpc_serial_t, send_serial )
2497     __field(rxrpc_serial_t, resp_serial )
2498     - __field(s64, rtt )
2499     - __field(u64, avg )
2500     + __field(u32, rtt )
2501     + __field(u32, rto )
2502     ),
2503    
2504     TP_fast_assign(
2505     @@ -1132,18 +1131,16 @@ TRACE_EVENT(rxrpc_rtt_rx,
2506     __entry->send_serial = send_serial;
2507     __entry->resp_serial = resp_serial;
2508     __entry->rtt = rtt;
2509     - __entry->nr = nr;
2510     - __entry->avg = avg;
2511     + __entry->rto = rto;
2512     ),
2513    
2514     - TP_printk("c=%08x %s sr=%08x rr=%08x rtt=%lld nr=%u avg=%lld",
2515     + TP_printk("c=%08x %s sr=%08x rr=%08x rtt=%u rto=%u",
2516     __entry->call,
2517     __print_symbolic(__entry->why, rxrpc_rtt_rx_traces),
2518     __entry->send_serial,
2519     __entry->resp_serial,
2520     __entry->rtt,
2521     - __entry->nr,
2522     - __entry->avg)
2523     + __entry->rto)
2524     );
2525    
2526     TRACE_EVENT(rxrpc_timer,
2527     @@ -1544,6 +1541,41 @@ TRACE_EVENT(rxrpc_notify_socket,
2528     __entry->serial)
2529     );
2530    
2531     +TRACE_EVENT(rxrpc_rx_discard_ack,
2532     + TP_PROTO(unsigned int debug_id, rxrpc_serial_t serial,
2533     + rxrpc_seq_t first_soft_ack, rxrpc_seq_t call_ackr_first,
2534     + rxrpc_seq_t prev_pkt, rxrpc_seq_t call_ackr_prev),
2535     +
2536     + TP_ARGS(debug_id, serial, first_soft_ack, call_ackr_first,
2537     + prev_pkt, call_ackr_prev),
2538     +
2539     + TP_STRUCT__entry(
2540     + __field(unsigned int, debug_id )
2541     + __field(rxrpc_serial_t, serial )
2542     + __field(rxrpc_seq_t, first_soft_ack)
2543     + __field(rxrpc_seq_t, call_ackr_first)
2544     + __field(rxrpc_seq_t, prev_pkt)
2545     + __field(rxrpc_seq_t, call_ackr_prev)
2546     + ),
2547     +
2548     + TP_fast_assign(
2549     + __entry->debug_id = debug_id;
2550     + __entry->serial = serial;
2551     + __entry->first_soft_ack = first_soft_ack;
2552     + __entry->call_ackr_first = call_ackr_first;
2553     + __entry->prev_pkt = prev_pkt;
2554     + __entry->call_ackr_prev = call_ackr_prev;
2555     + ),
2556     +
2557     + TP_printk("c=%08x r=%08x %08x<%08x %08x<%08x",
2558     + __entry->debug_id,
2559     + __entry->serial,
2560     + __entry->first_soft_ack,
2561     + __entry->call_ackr_first,
2562     + __entry->prev_pkt,
2563     + __entry->call_ackr_prev)
2564     + );
2565     +
2566     #endif /* _TRACE_RXRPC_H */
2567    
2568     /* This part must be outside protection */
2569     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
2570     index eeaf34d65742..193b6ab74d7f 100644
2571     --- a/kernel/sched/fair.c
2572     +++ b/kernel/sched/fair.c
2573     @@ -5232,32 +5232,38 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
2574     cfs_rq = cfs_rq_of(se);
2575     enqueue_entity(cfs_rq, se, flags);
2576    
2577     - /*
2578     - * end evaluation on encountering a throttled cfs_rq
2579     - *
2580     - * note: in the case of encountering a throttled cfs_rq we will
2581     - * post the final h_nr_running increment below.
2582     - */
2583     - if (cfs_rq_throttled(cfs_rq))
2584     - break;
2585     cfs_rq->h_nr_running++;
2586     cfs_rq->idle_h_nr_running += idle_h_nr_running;
2587    
2588     + /* end evaluation on encountering a throttled cfs_rq */
2589     + if (cfs_rq_throttled(cfs_rq))
2590     + goto enqueue_throttle;
2591     +
2592     flags = ENQUEUE_WAKEUP;
2593     }
2594    
2595     for_each_sched_entity(se) {
2596     cfs_rq = cfs_rq_of(se);
2597     +
2598     + update_load_avg(cfs_rq, se, UPDATE_TG);
2599     + update_cfs_group(se);
2600     +
2601     cfs_rq->h_nr_running++;
2602     cfs_rq->idle_h_nr_running += idle_h_nr_running;
2603    
2604     + /* end evaluation on encountering a throttled cfs_rq */
2605     if (cfs_rq_throttled(cfs_rq))
2606     - break;
2607     + goto enqueue_throttle;
2608    
2609     - update_load_avg(cfs_rq, se, UPDATE_TG);
2610     - update_cfs_group(se);
2611     + /*
2612     + * One parent has been throttled and cfs_rq removed from the
2613     + * list. Add it back to not break the leaf list.
2614     + */
2615     + if (throttled_hierarchy(cfs_rq))
2616     + list_add_leaf_cfs_rq(cfs_rq);
2617     }
2618    
2619     +enqueue_throttle:
2620     if (!se) {
2621     add_nr_running(rq, 1);
2622     /*
2623     @@ -5317,17 +5323,13 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
2624     cfs_rq = cfs_rq_of(se);
2625     dequeue_entity(cfs_rq, se, flags);
2626    
2627     - /*
2628     - * end evaluation on encountering a throttled cfs_rq
2629     - *
2630     - * note: in the case of encountering a throttled cfs_rq we will
2631     - * post the final h_nr_running decrement below.
2632     - */
2633     - if (cfs_rq_throttled(cfs_rq))
2634     - break;
2635     cfs_rq->h_nr_running--;
2636     cfs_rq->idle_h_nr_running -= idle_h_nr_running;
2637    
2638     + /* end evaluation on encountering a throttled cfs_rq */
2639     + if (cfs_rq_throttled(cfs_rq))
2640     + goto dequeue_throttle;
2641     +
2642     /* Don't dequeue parent if it has other entities besides us */
2643     if (cfs_rq->load.weight) {
2644     /* Avoid re-evaluating load for this entity: */
2645     @@ -5345,16 +5347,20 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
2646    
2647     for_each_sched_entity(se) {
2648     cfs_rq = cfs_rq_of(se);
2649     +
2650     + update_load_avg(cfs_rq, se, UPDATE_TG);
2651     + update_cfs_group(se);
2652     +
2653     cfs_rq->h_nr_running--;
2654     cfs_rq->idle_h_nr_running -= idle_h_nr_running;
2655    
2656     + /* end evaluation on encountering a throttled cfs_rq */
2657     if (cfs_rq_throttled(cfs_rq))
2658     - break;
2659     + goto dequeue_throttle;
2660    
2661     - update_load_avg(cfs_rq, se, UPDATE_TG);
2662     - update_cfs_group(se);
2663     }
2664    
2665     +dequeue_throttle:
2666     if (!se)
2667     sub_nr_running(rq, 1);
2668    
2669     diff --git a/lib/test_printf.c b/lib/test_printf.c
2670     index 5d94cbff2120..d4b711b53942 100644
2671     --- a/lib/test_printf.c
2672     +++ b/lib/test_printf.c
2673     @@ -212,6 +212,7 @@ test_string(void)
2674     #define PTR_STR "ffff0123456789ab"
2675     #define PTR_VAL_NO_CRNG "(____ptrval____)"
2676     #define ZEROS "00000000" /* hex 32 zero bits */
2677     +#define ONES "ffffffff" /* hex 32 one bits */
2678    
2679     static int __init
2680     plain_format(void)
2681     @@ -243,6 +244,7 @@ plain_format(void)
2682     #define PTR_STR "456789ab"
2683     #define PTR_VAL_NO_CRNG "(ptrval)"
2684     #define ZEROS ""
2685     +#define ONES ""
2686    
2687     static int __init
2688     plain_format(void)
2689     @@ -328,14 +330,28 @@ test_hashed(const char *fmt, const void *p)
2690     test(buf, fmt, p);
2691     }
2692    
2693     +/*
2694     + * NULL pointers aren't hashed.
2695     + */
2696     static void __init
2697     null_pointer(void)
2698     {
2699     - test_hashed("%p", NULL);
2700     + test(ZEROS "00000000", "%p", NULL);
2701     test(ZEROS "00000000", "%px", NULL);
2702     test("(null)", "%pE", NULL);
2703     }
2704    
2705     +/*
2706     + * Error pointers aren't hashed.
2707     + */
2708     +static void __init
2709     +error_pointer(void)
2710     +{
2711     + test(ONES "fffffff5", "%p", ERR_PTR(-11));
2712     + test(ONES "fffffff5", "%px", ERR_PTR(-11));
2713     + test("(efault)", "%pE", ERR_PTR(-11));
2714     +}
2715     +
2716     #define PTR_INVALID ((void *)0x000000ab)
2717    
2718     static void __init
2719     @@ -598,6 +614,7 @@ test_pointer(void)
2720     {
2721     plain();
2722     null_pointer();
2723     + error_pointer();
2724     invalid_pointer();
2725     symbol_ptr();
2726     kernel_ptr();
2727     diff --git a/lib/vsprintf.c b/lib/vsprintf.c
2728     index e78017a3e1bd..fb4af73142b4 100644
2729     --- a/lib/vsprintf.c
2730     +++ b/lib/vsprintf.c
2731     @@ -746,6 +746,13 @@ static char *ptr_to_id(char *buf, char *end, const void *ptr,
2732     const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
2733     unsigned long hashval;
2734    
2735     + /*
2736     + * Print the real pointer value for NULL and error pointers,
2737     + * as they are not actual addresses.
2738     + */
2739     + if (IS_ERR_OR_NULL(ptr))
2740     + return pointer_string(buf, end, ptr, spec);
2741     +
2742     /* When debugging early boot use non-cryptographically secure hash. */
2743     if (unlikely(debug_boot_weak_hash)) {
2744     hashval = hash_long((unsigned long)ptr, 32);
2745     diff --git a/mm/kasan/Makefile b/mm/kasan/Makefile
2746     index 08b43de2383b..f36ffc090f5f 100644
2747     --- a/mm/kasan/Makefile
2748     +++ b/mm/kasan/Makefile
2749     @@ -14,10 +14,10 @@ CFLAGS_REMOVE_tags.o = $(CC_FLAGS_FTRACE)
2750     # Function splitter causes unnecessary splits in __asan_load1/__asan_store1
2751     # see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63533
2752    
2753     -CFLAGS_common.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
2754     -CFLAGS_generic.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
2755     -CFLAGS_generic_report.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
2756     -CFLAGS_tags.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector)
2757     +CFLAGS_common.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector) -DDISABLE_BRANCH_PROFILING
2758     +CFLAGS_generic.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector) -DDISABLE_BRANCH_PROFILING
2759     +CFLAGS_generic_report.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector) -DDISABLE_BRANCH_PROFILING
2760     +CFLAGS_tags.o := $(call cc-option, -fno-conserve-stack -fno-stack-protector) -DDISABLE_BRANCH_PROFILING
2761    
2762     obj-$(CONFIG_KASAN) := common.o init.o report.o
2763     obj-$(CONFIG_KASAN_GENERIC) += generic.o generic_report.o quarantine.o
2764     diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c
2765     index 616f9dd82d12..76a80033e0b7 100644
2766     --- a/mm/kasan/generic.c
2767     +++ b/mm/kasan/generic.c
2768     @@ -15,7 +15,6 @@
2769     */
2770    
2771     #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2772     -#define DISABLE_BRANCH_PROFILING
2773    
2774     #include <linux/export.h>
2775     #include <linux/interrupt.h>
2776     diff --git a/mm/kasan/tags.c b/mm/kasan/tags.c
2777     index 0e987c9ca052..caf4efd9888c 100644
2778     --- a/mm/kasan/tags.c
2779     +++ b/mm/kasan/tags.c
2780     @@ -12,7 +12,6 @@
2781     */
2782    
2783     #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2784     -#define DISABLE_BRANCH_PROFILING
2785    
2786     #include <linux/export.h>
2787     #include <linux/interrupt.h>
2788     diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
2789     index 96b2566c298d..e3bdd859c895 100644
2790     --- a/net/core/flow_dissector.c
2791     +++ b/net/core/flow_dissector.c
2792     @@ -129,12 +129,10 @@ int skb_flow_dissector_bpf_prog_attach(const union bpf_attr *attr,
2793     return 0;
2794     }
2795    
2796     -int skb_flow_dissector_bpf_prog_detach(const union bpf_attr *attr)
2797     +static int flow_dissector_bpf_prog_detach(struct net *net)
2798     {
2799     struct bpf_prog *attached;
2800     - struct net *net;
2801    
2802     - net = current->nsproxy->net_ns;
2803     mutex_lock(&flow_dissector_mutex);
2804     attached = rcu_dereference_protected(net->flow_dissector_prog,
2805     lockdep_is_held(&flow_dissector_mutex));
2806     @@ -169,6 +167,24 @@ static __be16 skb_flow_get_be16(const struct sk_buff *skb, int poff,
2807     return 0;
2808     }
2809    
2810     +int skb_flow_dissector_bpf_prog_detach(const union bpf_attr *attr)
2811     +{
2812     + return flow_dissector_bpf_prog_detach(current->nsproxy->net_ns);
2813     +}
2814     +
2815     +static void __net_exit flow_dissector_pernet_pre_exit(struct net *net)
2816     +{
2817     + /* We're not racing with attach/detach because there are no
2818     + * references to netns left when pre_exit gets called.
2819     + */
2820     + if (rcu_access_pointer(net->flow_dissector_prog))
2821     + flow_dissector_bpf_prog_detach(net);
2822     +}
2823     +
2824     +static struct pernet_operations flow_dissector_pernet_ops __net_initdata = {
2825     + .pre_exit = flow_dissector_pernet_pre_exit,
2826     +};
2827     +
2828     /**
2829     * __skb_flow_get_ports - extract the upper layer ports and return them
2830     * @skb: sk_buff to extract the ports from
2831     @@ -1759,7 +1775,7 @@ static int __init init_default_flow_dissectors(void)
2832     skb_flow_dissector_init(&flow_keys_basic_dissector,
2833     flow_keys_basic_dissector_keys,
2834     ARRAY_SIZE(flow_keys_basic_dissector_keys));
2835     - return 0;
2836     -}
2837    
2838     + return register_pernet_subsys(&flow_dissector_pernet_ops);
2839     +}
2840     core_initcall(init_default_flow_dissectors);
2841     diff --git a/net/rxrpc/Makefile b/net/rxrpc/Makefile
2842     index 6ffb7e9887ce..ddd0f95713a9 100644
2843     --- a/net/rxrpc/Makefile
2844     +++ b/net/rxrpc/Makefile
2845     @@ -25,6 +25,7 @@ rxrpc-y := \
2846     peer_event.o \
2847     peer_object.o \
2848     recvmsg.o \
2849     + rtt.o \
2850     security.o \
2851     sendmsg.o \
2852     skbuff.o \
2853     diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
2854     index 3eb1ab40ca5c..9fe264bec70c 100644
2855     --- a/net/rxrpc/ar-internal.h
2856     +++ b/net/rxrpc/ar-internal.h
2857     @@ -7,6 +7,7 @@
2858    
2859     #include <linux/atomic.h>
2860     #include <linux/seqlock.h>
2861     +#include <linux/win_minmax.h>
2862     #include <net/net_namespace.h>
2863     #include <net/netns/generic.h>
2864     #include <net/sock.h>
2865     @@ -311,11 +312,14 @@ struct rxrpc_peer {
2866     #define RXRPC_RTT_CACHE_SIZE 32
2867     spinlock_t rtt_input_lock; /* RTT lock for input routine */
2868     ktime_t rtt_last_req; /* Time of last RTT request */
2869     - u64 rtt; /* Current RTT estimate (in nS) */
2870     - u64 rtt_sum; /* Sum of cache contents */
2871     - u64 rtt_cache[RXRPC_RTT_CACHE_SIZE]; /* Determined RTT cache */
2872     - u8 rtt_cursor; /* next entry at which to insert */
2873     - u8 rtt_usage; /* amount of cache actually used */
2874     + unsigned int rtt_count; /* Number of samples we've got */
2875     +
2876     + u32 srtt_us; /* smoothed round trip time << 3 in usecs */
2877     + u32 mdev_us; /* medium deviation */
2878     + u32 mdev_max_us; /* maximal mdev for the last rtt period */
2879     + u32 rttvar_us; /* smoothed mdev_max */
2880     + u32 rto_j; /* Retransmission timeout in jiffies */
2881     + u8 backoff; /* Backoff timeout */
2882    
2883     u8 cong_cwnd; /* Congestion window size */
2884     };
2885     @@ -1041,7 +1045,6 @@ extern unsigned long rxrpc_idle_ack_delay;
2886     extern unsigned int rxrpc_rx_window_size;
2887     extern unsigned int rxrpc_rx_mtu;
2888     extern unsigned int rxrpc_rx_jumbo_max;
2889     -extern unsigned long rxrpc_resend_timeout;
2890    
2891     extern const s8 rxrpc_ack_priority[];
2892    
2893     @@ -1069,8 +1072,6 @@ void rxrpc_send_keepalive(struct rxrpc_peer *);
2894     * peer_event.c
2895     */
2896     void rxrpc_error_report(struct sock *);
2897     -void rxrpc_peer_add_rtt(struct rxrpc_call *, enum rxrpc_rtt_rx_trace,
2898     - rxrpc_serial_t, rxrpc_serial_t, ktime_t, ktime_t);
2899     void rxrpc_peer_keepalive_worker(struct work_struct *);
2900    
2901     /*
2902     @@ -1102,6 +1103,14 @@ extern const struct seq_operations rxrpc_peer_seq_ops;
2903     void rxrpc_notify_socket(struct rxrpc_call *);
2904     int rxrpc_recvmsg(struct socket *, struct msghdr *, size_t, int);
2905    
2906     +/*
2907     + * rtt.c
2908     + */
2909     +void rxrpc_peer_add_rtt(struct rxrpc_call *, enum rxrpc_rtt_rx_trace,
2910     + rxrpc_serial_t, rxrpc_serial_t, ktime_t, ktime_t);
2911     +unsigned long rxrpc_get_rto_backoff(struct rxrpc_peer *, bool);
2912     +void rxrpc_peer_init_rtt(struct rxrpc_peer *);
2913     +
2914     /*
2915     * rxkad.c
2916     */
2917     diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
2918     index 70e44abf106c..b7611cc159e5 100644
2919     --- a/net/rxrpc/call_accept.c
2920     +++ b/net/rxrpc/call_accept.c
2921     @@ -248,7 +248,7 @@ static void rxrpc_send_ping(struct rxrpc_call *call, struct sk_buff *skb)
2922     struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
2923     ktime_t now = skb->tstamp;
2924    
2925     - if (call->peer->rtt_usage < 3 ||
2926     + if (call->peer->rtt_count < 3 ||
2927     ktime_before(ktime_add_ms(call->peer->rtt_last_req, 1000), now))
2928     rxrpc_propose_ACK(call, RXRPC_ACK_PING, sp->hdr.serial,
2929     true, true,
2930     diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
2931     index cedbbb3a7c2e..2a65ac41055f 100644
2932     --- a/net/rxrpc/call_event.c
2933     +++ b/net/rxrpc/call_event.c
2934     @@ -111,8 +111,8 @@ static void __rxrpc_propose_ACK(struct rxrpc_call *call, u8 ack_reason,
2935     } else {
2936     unsigned long now = jiffies, ack_at;
2937    
2938     - if (call->peer->rtt_usage > 0)
2939     - ack_at = nsecs_to_jiffies(call->peer->rtt);
2940     + if (call->peer->srtt_us != 0)
2941     + ack_at = usecs_to_jiffies(call->peer->srtt_us >> 3);
2942     else
2943     ack_at = expiry;
2944    
2945     @@ -157,24 +157,18 @@ static void rxrpc_congestion_timeout(struct rxrpc_call *call)
2946     static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
2947     {
2948     struct sk_buff *skb;
2949     - unsigned long resend_at;
2950     + unsigned long resend_at, rto_j;
2951     rxrpc_seq_t cursor, seq, top;
2952     - ktime_t now, max_age, oldest, ack_ts, timeout, min_timeo;
2953     + ktime_t now, max_age, oldest, ack_ts;
2954     int ix;
2955     u8 annotation, anno_type, retrans = 0, unacked = 0;
2956    
2957     _enter("{%d,%d}", call->tx_hard_ack, call->tx_top);
2958    
2959     - if (call->peer->rtt_usage > 1)
2960     - timeout = ns_to_ktime(call->peer->rtt * 3 / 2);
2961     - else
2962     - timeout = ms_to_ktime(rxrpc_resend_timeout);
2963     - min_timeo = ns_to_ktime((1000000000 / HZ) * 4);
2964     - if (ktime_before(timeout, min_timeo))
2965     - timeout = min_timeo;
2966     + rto_j = call->peer->rto_j;
2967    
2968     now = ktime_get_real();
2969     - max_age = ktime_sub(now, timeout);
2970     + max_age = ktime_sub(now, jiffies_to_usecs(rto_j));
2971    
2972     spin_lock_bh(&call->lock);
2973    
2974     @@ -219,7 +213,7 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
2975     }
2976    
2977     resend_at = nsecs_to_jiffies(ktime_to_ns(ktime_sub(now, oldest)));
2978     - resend_at += jiffies + rxrpc_resend_timeout;
2979     + resend_at += jiffies + rto_j;
2980     WRITE_ONCE(call->resend_at, resend_at);
2981    
2982     if (unacked)
2983     @@ -234,7 +228,7 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)
2984     rxrpc_timer_set_for_resend);
2985     spin_unlock_bh(&call->lock);
2986     ack_ts = ktime_sub(now, call->acks_latest_ts);
2987     - if (ktime_to_ns(ack_ts) < call->peer->rtt)
2988     + if (ktime_to_us(ack_ts) < (call->peer->srtt_us >> 3))
2989     goto out;
2990     rxrpc_propose_ACK(call, RXRPC_ACK_PING, 0, true, false,
2991     rxrpc_propose_ack_ping_for_lost_ack);
2992     diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
2993     index 69e09d69c896..3be4177baf70 100644
2994     --- a/net/rxrpc/input.c
2995     +++ b/net/rxrpc/input.c
2996     @@ -91,11 +91,11 @@ static void rxrpc_congestion_management(struct rxrpc_call *call,
2997     /* We analyse the number of packets that get ACK'd per RTT
2998     * period and increase the window if we managed to fill it.
2999     */
3000     - if (call->peer->rtt_usage == 0)
3001     + if (call->peer->rtt_count == 0)
3002     goto out;
3003     if (ktime_before(skb->tstamp,
3004     - ktime_add_ns(call->cong_tstamp,
3005     - call->peer->rtt)))
3006     + ktime_add_us(call->cong_tstamp,
3007     + call->peer->srtt_us >> 3)))
3008     goto out_no_clear_ca;
3009     change = rxrpc_cong_rtt_window_end;
3010     call->cong_tstamp = skb->tstamp;
3011     @@ -802,6 +802,30 @@ static void rxrpc_input_soft_acks(struct rxrpc_call *call, u8 *acks,
3012     }
3013     }
3014    
3015     +/*
3016     + * Return true if the ACK is valid - ie. it doesn't appear to have regressed
3017     + * with respect to the ack state conveyed by preceding ACKs.
3018     + */
3019     +static bool rxrpc_is_ack_valid(struct rxrpc_call *call,
3020     + rxrpc_seq_t first_pkt, rxrpc_seq_t prev_pkt)
3021     +{
3022     + rxrpc_seq_t base = READ_ONCE(call->ackr_first_seq);
3023     +
3024     + if (after(first_pkt, base))
3025     + return true; /* The window advanced */
3026     +
3027     + if (before(first_pkt, base))
3028     + return false; /* firstPacket regressed */
3029     +
3030     + if (after_eq(prev_pkt, call->ackr_prev_seq))
3031     + return true; /* previousPacket hasn't regressed. */
3032     +
3033     + /* Some rx implementations put a serial number in previousPacket. */
3034     + if (after_eq(prev_pkt, base + call->tx_winsize))
3035     + return false;
3036     + return true;
3037     +}
3038     +
3039     /*
3040     * Process an ACK packet.
3041     *
3042     @@ -865,9 +889,12 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
3043     }
3044    
3045     /* Discard any out-of-order or duplicate ACKs (outside lock). */
3046     - if (before(first_soft_ack, call->ackr_first_seq) ||
3047     - before(prev_pkt, call->ackr_prev_seq))
3048     + if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
3049     + trace_rxrpc_rx_discard_ack(call->debug_id, sp->hdr.serial,
3050     + first_soft_ack, call->ackr_first_seq,
3051     + prev_pkt, call->ackr_prev_seq);
3052     return;
3053     + }
3054    
3055     buf.info.rxMTU = 0;
3056     ioffset = offset + nr_acks + 3;
3057     @@ -878,9 +905,12 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb)
3058     spin_lock(&call->input_lock);
3059    
3060     /* Discard any out-of-order or duplicate ACKs (inside lock). */
3061     - if (before(first_soft_ack, call->ackr_first_seq) ||
3062     - before(prev_pkt, call->ackr_prev_seq))
3063     + if (!rxrpc_is_ack_valid(call, first_soft_ack, prev_pkt)) {
3064     + trace_rxrpc_rx_discard_ack(call->debug_id, sp->hdr.serial,
3065     + first_soft_ack, call->ackr_first_seq,
3066     + prev_pkt, call->ackr_prev_seq);
3067     goto out;
3068     + }
3069     call->acks_latest_ts = skb->tstamp;
3070    
3071     call->ackr_first_seq = first_soft_ack;
3072     diff --git a/net/rxrpc/misc.c b/net/rxrpc/misc.c
3073     index 214405f75346..d4144fd86f84 100644
3074     --- a/net/rxrpc/misc.c
3075     +++ b/net/rxrpc/misc.c
3076     @@ -63,11 +63,6 @@ unsigned int rxrpc_rx_mtu = 5692;
3077     */
3078     unsigned int rxrpc_rx_jumbo_max = 4;
3079    
3080     -/*
3081     - * Time till packet resend (in milliseconds).
3082     - */
3083     -unsigned long rxrpc_resend_timeout = 4 * HZ;
3084     -
3085     const s8 rxrpc_ack_priority[] = {
3086     [0] = 0,
3087     [RXRPC_ACK_DELAY] = 1,
3088     diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c
3089     index 90e263c6aa69..f8b632a5c619 100644
3090     --- a/net/rxrpc/output.c
3091     +++ b/net/rxrpc/output.c
3092     @@ -369,7 +369,7 @@ int rxrpc_send_data_packet(struct rxrpc_call *call, struct sk_buff *skb,
3093     (test_and_clear_bit(RXRPC_CALL_EV_ACK_LOST, &call->events) ||
3094     retrans ||
3095     call->cong_mode == RXRPC_CALL_SLOW_START ||
3096     - (call->peer->rtt_usage < 3 && sp->hdr.seq & 1) ||
3097     + (call->peer->rtt_count < 3 && sp->hdr.seq & 1) ||
3098     ktime_before(ktime_add_ms(call->peer->rtt_last_req, 1000),
3099     ktime_get_real())))
3100     whdr.flags |= RXRPC_REQUEST_ACK;
3101     @@ -423,13 +423,10 @@ done:
3102     if (whdr.flags & RXRPC_REQUEST_ACK) {
3103     call->peer->rtt_last_req = skb->tstamp;
3104     trace_rxrpc_rtt_tx(call, rxrpc_rtt_tx_data, serial);
3105     - if (call->peer->rtt_usage > 1) {
3106     + if (call->peer->rtt_count > 1) {
3107     unsigned long nowj = jiffies, ack_lost_at;
3108    
3109     - ack_lost_at = nsecs_to_jiffies(2 * call->peer->rtt);
3110     - if (ack_lost_at < 1)
3111     - ack_lost_at = 1;
3112     -
3113     + ack_lost_at = rxrpc_get_rto_backoff(call->peer, retrans);
3114     ack_lost_at += nowj;
3115     WRITE_ONCE(call->ack_lost_at, ack_lost_at);
3116     rxrpc_reduce_call_timer(call, ack_lost_at, nowj,
3117     diff --git a/net/rxrpc/peer_event.c b/net/rxrpc/peer_event.c
3118     index 923b263c401b..b1449d971883 100644
3119     --- a/net/rxrpc/peer_event.c
3120     +++ b/net/rxrpc/peer_event.c
3121     @@ -295,52 +295,6 @@ static void rxrpc_distribute_error(struct rxrpc_peer *peer, int error,
3122     }
3123     }
3124    
3125     -/*
3126     - * Add RTT information to cache. This is called in softirq mode and has
3127     - * exclusive access to the peer RTT data.
3128     - */
3129     -void rxrpc_peer_add_rtt(struct rxrpc_call *call, enum rxrpc_rtt_rx_trace why,
3130     - rxrpc_serial_t send_serial, rxrpc_serial_t resp_serial,
3131     - ktime_t send_time, ktime_t resp_time)
3132     -{
3133     - struct rxrpc_peer *peer = call->peer;
3134     - s64 rtt;
3135     - u64 sum = peer->rtt_sum, avg;
3136     - u8 cursor = peer->rtt_cursor, usage = peer->rtt_usage;
3137     -
3138     - rtt = ktime_to_ns(ktime_sub(resp_time, send_time));
3139     - if (rtt < 0)
3140     - return;
3141     -
3142     - spin_lock(&peer->rtt_input_lock);
3143     -
3144     - /* Replace the oldest datum in the RTT buffer */
3145     - sum -= peer->rtt_cache[cursor];
3146     - sum += rtt;
3147     - peer->rtt_cache[cursor] = rtt;
3148     - peer->rtt_cursor = (cursor + 1) & (RXRPC_RTT_CACHE_SIZE - 1);
3149     - peer->rtt_sum = sum;
3150     - if (usage < RXRPC_RTT_CACHE_SIZE) {
3151     - usage++;
3152     - peer->rtt_usage = usage;
3153     - }
3154     -
3155     - spin_unlock(&peer->rtt_input_lock);
3156     -
3157     - /* Now recalculate the average */
3158     - if (usage == RXRPC_RTT_CACHE_SIZE) {
3159     - avg = sum / RXRPC_RTT_CACHE_SIZE;
3160     - } else {
3161     - avg = sum;
3162     - do_div(avg, usage);
3163     - }
3164     -
3165     - /* Don't need to update this under lock */
3166     - peer->rtt = avg;
3167     - trace_rxrpc_rtt_rx(call, why, send_serial, resp_serial, rtt,
3168     - usage, avg);
3169     -}
3170     -
3171     /*
3172     * Perform keep-alive pings.
3173     */
3174     diff --git a/net/rxrpc/peer_object.c b/net/rxrpc/peer_object.c
3175     index 64830d8c1fdb..efce27802a74 100644
3176     --- a/net/rxrpc/peer_object.c
3177     +++ b/net/rxrpc/peer_object.c
3178     @@ -224,6 +224,8 @@ struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *local, gfp_t gfp)
3179     spin_lock_init(&peer->rtt_input_lock);
3180     peer->debug_id = atomic_inc_return(&rxrpc_debug_id);
3181    
3182     + rxrpc_peer_init_rtt(peer);
3183     +
3184     if (RXRPC_TX_SMSS > 2190)
3185     peer->cong_cwnd = 2;
3186     else if (RXRPC_TX_SMSS > 1095)
3187     @@ -495,14 +497,14 @@ void rxrpc_kernel_get_peer(struct socket *sock, struct rxrpc_call *call,
3188     EXPORT_SYMBOL(rxrpc_kernel_get_peer);
3189    
3190     /**
3191     - * rxrpc_kernel_get_rtt - Get a call's peer RTT
3192     + * rxrpc_kernel_get_srtt - Get a call's peer smoothed RTT
3193     * @sock: The socket on which the call is in progress.
3194     * @call: The call to query
3195     *
3196     - * Get the call's peer RTT.
3197     + * Get the call's peer smoothed RTT.
3198     */
3199     -u64 rxrpc_kernel_get_rtt(struct socket *sock, struct rxrpc_call *call)
3200     +u32 rxrpc_kernel_get_srtt(struct socket *sock, struct rxrpc_call *call)
3201     {
3202     - return call->peer->rtt;
3203     + return call->peer->srtt_us >> 3;
3204     }
3205     -EXPORT_SYMBOL(rxrpc_kernel_get_rtt);
3206     +EXPORT_SYMBOL(rxrpc_kernel_get_srtt);
3207     diff --git a/net/rxrpc/proc.c b/net/rxrpc/proc.c
3208     index b9d053e42821..8b179e3c802a 100644
3209     --- a/net/rxrpc/proc.c
3210     +++ b/net/rxrpc/proc.c
3211     @@ -222,7 +222,7 @@ static int rxrpc_peer_seq_show(struct seq_file *seq, void *v)
3212     seq_puts(seq,
3213     "Proto Local "
3214     " Remote "
3215     - " Use CW MTU LastUse RTT Rc\n"
3216     + " Use CW MTU LastUse RTT RTO\n"
3217     );
3218     return 0;
3219     }
3220     @@ -236,15 +236,15 @@ static int rxrpc_peer_seq_show(struct seq_file *seq, void *v)
3221     now = ktime_get_seconds();
3222     seq_printf(seq,
3223     "UDP %-47.47s %-47.47s %3u"
3224     - " %3u %5u %6llus %12llu %2u\n",
3225     + " %3u %5u %6llus %8u %8u\n",
3226     lbuff,
3227     rbuff,
3228     atomic_read(&peer->usage),
3229     peer->cong_cwnd,
3230     peer->mtu,
3231     now - peer->last_tx_at,
3232     - peer->rtt,
3233     - peer->rtt_cursor);
3234     + peer->srtt_us >> 3,
3235     + jiffies_to_usecs(peer->rto_j));
3236    
3237     return 0;
3238     }
3239     diff --git a/net/rxrpc/rtt.c b/net/rxrpc/rtt.c
3240     new file mode 100644
3241     index 000000000000..928d8b34a3ee
3242     --- /dev/null
3243     +++ b/net/rxrpc/rtt.c
3244     @@ -0,0 +1,195 @@
3245     +// SPDX-License-Identifier: GPL-2.0
3246     +/* RTT/RTO calculation.
3247     + *
3248     + * Adapted from TCP for AF_RXRPC by David Howells (dhowells@redhat.com)
3249     + *
3250     + * https://tools.ietf.org/html/rfc6298
3251     + * https://tools.ietf.org/html/rfc1122#section-4.2.3.1
3252     + * http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-partridge87.pdf
3253     + */
3254     +
3255     +#include <linux/net.h>
3256     +#include "ar-internal.h"
3257     +
3258     +#define RXRPC_RTO_MAX ((unsigned)(120 * HZ))
3259     +#define RXRPC_TIMEOUT_INIT ((unsigned)(1*HZ)) /* RFC6298 2.1 initial RTO value */
3260     +#define rxrpc_jiffies32 ((u32)jiffies) /* As rxrpc_jiffies32 */
3261     +#define rxrpc_min_rtt_wlen 300 /* As sysctl_tcp_min_rtt_wlen */
3262     +
3263     +static u32 rxrpc_rto_min_us(struct rxrpc_peer *peer)
3264     +{
3265     + return 200;
3266     +}
3267     +
3268     +static u32 __rxrpc_set_rto(const struct rxrpc_peer *peer)
3269     +{
3270     + return _usecs_to_jiffies((peer->srtt_us >> 3) + peer->rttvar_us);
3271     +}
3272     +
3273     +static u32 rxrpc_bound_rto(u32 rto)
3274     +{
3275     + return min(rto, RXRPC_RTO_MAX);
3276     +}
3277     +
3278     +/*
3279     + * Called to compute a smoothed rtt estimate. The data fed to this
3280     + * routine either comes from timestamps, or from segments that were
3281     + * known _not_ to have been retransmitted [see Karn/Partridge
3282     + * Proceedings SIGCOMM 87]. The algorithm is from the SIGCOMM 88
3283     + * piece by Van Jacobson.
3284     + * NOTE: the next three routines used to be one big routine.
3285     + * To save cycles in the RFC 1323 implementation it was better to break
3286     + * it up into three procedures. -- erics
3287     + */
3288     +static void rxrpc_rtt_estimator(struct rxrpc_peer *peer, long sample_rtt_us)
3289     +{
3290     + long m = sample_rtt_us; /* RTT */
3291     + u32 srtt = peer->srtt_us;
3292     +
3293     + /* The following amusing code comes from Jacobson's
3294     + * article in SIGCOMM '88. Note that rtt and mdev
3295     + * are scaled versions of rtt and mean deviation.
3296     + * This is designed to be as fast as possible
3297     + * m stands for "measurement".
3298     + *
3299     + * On a 1990 paper the rto value is changed to:
3300     + * RTO = rtt + 4 * mdev
3301     + *
3302     + * Funny. This algorithm seems to be very broken.
3303     + * These formulae increase RTO, when it should be decreased, increase
3304     + * too slowly, when it should be increased quickly, decrease too quickly
3305     + * etc. I guess in BSD RTO takes ONE value, so that it is absolutely
3306     + * does not matter how to _calculate_ it. Seems, it was trap
3307     + * that VJ failed to avoid. 8)
3308     + */
3309     + if (srtt != 0) {
3310     + m -= (srtt >> 3); /* m is now error in rtt est */
3311     + srtt += m; /* rtt = 7/8 rtt + 1/8 new */
3312     + if (m < 0) {
3313     + m = -m; /* m is now abs(error) */
3314     + m -= (peer->mdev_us >> 2); /* similar update on mdev */
3315     + /* This is similar to one of Eifel findings.
3316     + * Eifel blocks mdev updates when rtt decreases.
3317     + * This solution is a bit different: we use finer gain
3318     + * for mdev in this case (alpha*beta).
3319     + * Like Eifel it also prevents growth of rto,
3320     + * but also it limits too fast rto decreases,
3321     + * happening in pure Eifel.
3322     + */
3323     + if (m > 0)
3324     + m >>= 3;
3325     + } else {
3326     + m -= (peer->mdev_us >> 2); /* similar update on mdev */
3327     + }
3328     +
3329     + peer->mdev_us += m; /* mdev = 3/4 mdev + 1/4 new */
3330     + if (peer->mdev_us > peer->mdev_max_us) {
3331     + peer->mdev_max_us = peer->mdev_us;
3332     + if (peer->mdev_max_us > peer->rttvar_us)
3333     + peer->rttvar_us = peer->mdev_max_us;
3334     + }
3335     + } else {
3336     + /* no previous measure. */
3337     + srtt = m << 3; /* take the measured time to be rtt */
3338     + peer->mdev_us = m << 1; /* make sure rto = 3*rtt */
3339     + peer->rttvar_us = max(peer->mdev_us, rxrpc_rto_min_us(peer));
3340     + peer->mdev_max_us = peer->rttvar_us;
3341     + }
3342     +
3343     + peer->srtt_us = max(1U, srtt);
3344     +}
3345     +
3346     +/*
3347     + * Calculate rto without backoff. This is the second half of Van Jacobson's
3348     + * routine referred to above.
3349     + */
3350     +static void rxrpc_set_rto(struct rxrpc_peer *peer)
3351     +{
3352     + u32 rto;
3353     +
3354     + /* 1. If rtt variance happened to be less 50msec, it is hallucination.
3355     + * It cannot be less due to utterly erratic ACK generation made
3356     + * at least by solaris and freebsd. "Erratic ACKs" has _nothing_
3357     + * to do with delayed acks, because at cwnd>2 true delack timeout
3358     + * is invisible. Actually, Linux-2.4 also generates erratic
3359     + * ACKs in some circumstances.
3360     + */
3361     + rto = __rxrpc_set_rto(peer);
3362     +
3363     + /* 2. Fixups made earlier cannot be right.
3364     + * If we do not estimate RTO correctly without them,
3365     + * all the algo is pure shit and should be replaced
3366     + * with correct one. It is exactly, which we pretend to do.
3367     + */
3368     +
3369     + /* NOTE: clamping at RXRPC_RTO_MIN is not required, current algo
3370     + * guarantees that rto is higher.
3371     + */
3372     + peer->rto_j = rxrpc_bound_rto(rto);
3373     +}
3374     +
3375     +static void rxrpc_ack_update_rtt(struct rxrpc_peer *peer, long rtt_us)
3376     +{
3377     + if (rtt_us < 0)
3378     + return;
3379     +
3380     + //rxrpc_update_rtt_min(peer, rtt_us);
3381     + rxrpc_rtt_estimator(peer, rtt_us);
3382     + rxrpc_set_rto(peer);
3383     +
3384     + /* RFC6298: only reset backoff on valid RTT measurement. */
3385     + peer->backoff = 0;
3386     +}
3387     +
3388     +/*
3389     + * Add RTT information to cache. This is called in softirq mode and has
3390     + * exclusive access to the peer RTT data.
3391     + */
3392     +void rxrpc_peer_add_rtt(struct rxrpc_call *call, enum rxrpc_rtt_rx_trace why,
3393     + rxrpc_serial_t send_serial, rxrpc_serial_t resp_serial,
3394     + ktime_t send_time, ktime_t resp_time)
3395     +{
3396     + struct rxrpc_peer *peer = call->peer;
3397     + s64 rtt_us;
3398     +
3399     + rtt_us = ktime_to_us(ktime_sub(resp_time, send_time));
3400     + if (rtt_us < 0)
3401     + return;
3402     +
3403     + spin_lock(&peer->rtt_input_lock);
3404     + rxrpc_ack_update_rtt(peer, rtt_us);
3405     + if (peer->rtt_count < 3)
3406     + peer->rtt_count++;
3407     + spin_unlock(&peer->rtt_input_lock);
3408     +
3409     + trace_rxrpc_rtt_rx(call, why, send_serial, resp_serial,
3410     + peer->srtt_us >> 3, peer->rto_j);
3411     +}
3412     +
3413     +/*
3414     + * Get the retransmission timeout to set in jiffies, backing it off each time
3415     + * we retransmit.
3416     + */
3417     +unsigned long rxrpc_get_rto_backoff(struct rxrpc_peer *peer, bool retrans)
3418     +{
3419     + u64 timo_j;
3420     + u8 backoff = READ_ONCE(peer->backoff);
3421     +
3422     + timo_j = peer->rto_j;
3423     + timo_j <<= backoff;
3424     + if (retrans && timo_j * 2 <= RXRPC_RTO_MAX)
3425     + WRITE_ONCE(peer->backoff, backoff + 1);
3426     +
3427     + if (timo_j < 1)
3428     + timo_j = 1;
3429     +
3430     + return timo_j;
3431     +}
3432     +
3433     +void rxrpc_peer_init_rtt(struct rxrpc_peer *peer)
3434     +{
3435     + peer->rto_j = RXRPC_TIMEOUT_INIT;
3436     + peer->mdev_us = jiffies_to_usecs(RXRPC_TIMEOUT_INIT);
3437     + peer->backoff = 0;
3438     + //minmax_reset(&peer->rtt_min, rxrpc_jiffies32, ~0U);
3439     +}
3440     diff --git a/net/rxrpc/rxkad.c b/net/rxrpc/rxkad.c
3441     index 098f1f9ec53b..52a24d4ef5d8 100644
3442     --- a/net/rxrpc/rxkad.c
3443     +++ b/net/rxrpc/rxkad.c
3444     @@ -1148,7 +1148,7 @@ static int rxkad_verify_response(struct rxrpc_connection *conn,
3445     ret = rxkad_decrypt_ticket(conn, skb, ticket, ticket_len, &session_key,
3446     &expiry, _abort_code);
3447     if (ret < 0)
3448     - goto temporary_error_free_resp;
3449     + goto temporary_error_free_ticket;
3450    
3451     /* use the session key from inside the ticket to decrypt the
3452     * response */
3453     @@ -1230,7 +1230,6 @@ protocol_error:
3454    
3455     temporary_error_free_ticket:
3456     kfree(ticket);
3457     -temporary_error_free_resp:
3458     kfree(response);
3459     temporary_error:
3460     /* Ignore the response packet if we got a temporary error such as
3461     diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c
3462     index 0fcf157aa09f..5e9c43d4a314 100644
3463     --- a/net/rxrpc/sendmsg.c
3464     +++ b/net/rxrpc/sendmsg.c
3465     @@ -66,15 +66,14 @@ static int rxrpc_wait_for_tx_window_waitall(struct rxrpc_sock *rx,
3466     struct rxrpc_call *call)
3467     {
3468     rxrpc_seq_t tx_start, tx_win;
3469     - signed long rtt2, timeout;
3470     - u64 rtt;
3471     + signed long rtt, timeout;
3472    
3473     - rtt = READ_ONCE(call->peer->rtt);
3474     - rtt2 = nsecs_to_jiffies64(rtt) * 2;
3475     - if (rtt2 < 2)
3476     - rtt2 = 2;
3477     + rtt = READ_ONCE(call->peer->srtt_us) >> 3;
3478     + rtt = usecs_to_jiffies(rtt) * 2;
3479     + if (rtt < 2)
3480     + rtt = 2;
3481    
3482     - timeout = rtt2;
3483     + timeout = rtt;
3484     tx_start = READ_ONCE(call->tx_hard_ack);
3485    
3486     for (;;) {
3487     @@ -92,7 +91,7 @@ static int rxrpc_wait_for_tx_window_waitall(struct rxrpc_sock *rx,
3488     return -EINTR;
3489    
3490     if (tx_win != tx_start) {
3491     - timeout = rtt2;
3492     + timeout = rtt;
3493     tx_start = tx_win;
3494     }
3495    
3496     @@ -271,16 +270,9 @@ static int rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
3497     _debug("need instant resend %d", ret);
3498     rxrpc_instant_resend(call, ix);
3499     } else {
3500     - unsigned long now = jiffies, resend_at;
3501     + unsigned long now = jiffies;
3502     + unsigned long resend_at = now + call->peer->rto_j;
3503    
3504     - if (call->peer->rtt_usage > 1)
3505     - resend_at = nsecs_to_jiffies(call->peer->rtt * 3 / 2);
3506     - else
3507     - resend_at = rxrpc_resend_timeout;
3508     - if (resend_at < 1)
3509     - resend_at = 1;
3510     -
3511     - resend_at += now;
3512     WRITE_ONCE(call->resend_at, resend_at);
3513     rxrpc_reduce_call_timer(call, resend_at, now,
3514     rxrpc_timer_set_for_send);
3515     diff --git a/net/rxrpc/sysctl.c b/net/rxrpc/sysctl.c
3516     index 2bbb38161851..18dade4e6f9a 100644
3517     --- a/net/rxrpc/sysctl.c
3518     +++ b/net/rxrpc/sysctl.c
3519     @@ -71,15 +71,6 @@ static struct ctl_table rxrpc_sysctl_table[] = {
3520     .extra1 = (void *)&one_jiffy,
3521     .extra2 = (void *)&max_jiffies,
3522     },
3523     - {
3524     - .procname = "resend_timeout",
3525     - .data = &rxrpc_resend_timeout,
3526     - .maxlen = sizeof(unsigned long),
3527     - .mode = 0644,
3528     - .proc_handler = proc_doulongvec_ms_jiffies_minmax,
3529     - .extra1 = (void *)&one_jiffy,
3530     - .extra2 = (void *)&max_jiffies,
3531     - },
3532    
3533     /* Non-time values */
3534     {
3535     diff --git a/scripts/gcc-plugins/Makefile b/scripts/gcc-plugins/Makefile
3536     index aa0d0ec6936d..9e95862f2788 100644
3537     --- a/scripts/gcc-plugins/Makefile
3538     +++ b/scripts/gcc-plugins/Makefile
3539     @@ -11,6 +11,7 @@ else
3540     HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti
3541     HOST_EXTRACXXFLAGS += -fno-exceptions -fasynchronous-unwind-tables -ggdb
3542     HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable
3543     + HOST_EXTRACXXFLAGS += -Wno-format-diag
3544     export HOST_EXTRACXXFLAGS
3545     endif
3546    
3547     diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h
3548     index 17f06079a712..9ad76b7f3f10 100644
3549     --- a/scripts/gcc-plugins/gcc-common.h
3550     +++ b/scripts/gcc-plugins/gcc-common.h
3551     @@ -35,7 +35,9 @@
3552     #include "ggc.h"
3553     #include "timevar.h"
3554    
3555     +#if BUILDING_GCC_VERSION < 10000
3556     #include "params.h"
3557     +#endif
3558    
3559     #if BUILDING_GCC_VERSION <= 4009
3560     #include "pointer-set.h"
3561     @@ -847,6 +849,7 @@ static inline gimple gimple_build_assign_with_ops(enum tree_code subcode, tree l
3562     return gimple_build_assign(lhs, subcode, op1, op2 PASS_MEM_STAT);
3563     }
3564    
3565     +#if BUILDING_GCC_VERSION < 10000
3566     template <>
3567     template <>
3568     inline bool is_a_helper<const ggoto *>::test(const_gimple gs)
3569     @@ -860,6 +863,7 @@ inline bool is_a_helper<const greturn *>::test(const_gimple gs)
3570     {
3571     return gs->code == GIMPLE_RETURN;
3572     }
3573     +#endif
3574    
3575     static inline gasm *as_a_gasm(gimple stmt)
3576     {
3577     diff --git a/scripts/gdb/linux/rbtree.py b/scripts/gdb/linux/rbtree.py
3578     index 39db889b874c..c4b991607917 100644
3579     --- a/scripts/gdb/linux/rbtree.py
3580     +++ b/scripts/gdb/linux/rbtree.py
3581     @@ -12,7 +12,7 @@ rb_node_type = utils.CachedType("struct rb_node")
3582    
3583     def rb_first(root):
3584     if root.type == rb_root_type.get_type():
3585     - node = node.address.cast(rb_root_type.get_type().pointer())
3586     + node = root.address.cast(rb_root_type.get_type().pointer())
3587     elif root.type != rb_root_type.get_type().pointer():
3588     raise gdb.GdbError("Must be struct rb_root not {}".format(root.type))
3589    
3590     @@ -28,7 +28,7 @@ def rb_first(root):
3591    
3592     def rb_last(root):
3593     if root.type == rb_root_type.get_type():
3594     - node = node.address.cast(rb_root_type.get_type().pointer())
3595     + node = root.address.cast(rb_root_type.get_type().pointer())
3596     elif root.type != rb_root_type.get_type().pointer():
3597     raise gdb.GdbError("Must be struct rb_root not {}".format(root.type))
3598    
3599     diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
3600     index 408b5c0b99b1..aa1386079f0c 100755
3601     --- a/scripts/link-vmlinux.sh
3602     +++ b/scripts/link-vmlinux.sh
3603     @@ -63,12 +63,18 @@ vmlinux_link()
3604     local lds="${objtree}/${KBUILD_LDS}"
3605     local output=${1}
3606     local objects
3607     + local strip_debug
3608    
3609     info LD ${output}
3610    
3611     # skip output file argument
3612     shift
3613    
3614     + # The kallsyms linking does not need debug symbols included.
3615     + if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then
3616     + strip_debug=-Wl,--strip-debug
3617     + fi
3618     +
3619     if [ "${SRCARCH}" != "um" ]; then
3620     objects="--whole-archive \
3621     ${KBUILD_VMLINUX_OBJS} \
3622     @@ -79,6 +85,7 @@ vmlinux_link()
3623     ${@}"
3624    
3625     ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \
3626     + ${strip_debug#-Wl,} \
3627     -o ${output} \
3628     -T ${lds} ${objects}
3629     else
3630     @@ -91,6 +98,7 @@ vmlinux_link()
3631     ${@}"
3632    
3633     ${CC} ${CFLAGS_vmlinux} \
3634     + ${strip_debug} \
3635     -o ${output} \
3636     -Wl,-T,${lds} \
3637     ${objects} \
3638     @@ -106,6 +114,8 @@ gen_btf()
3639     {
3640     local pahole_ver
3641     local bin_arch
3642     + local bin_format
3643     + local bin_file
3644    
3645     if ! [ -x "$(command -v ${PAHOLE})" ]; then
3646     echo >&2 "BTF: ${1}: pahole (${PAHOLE}) is not available"
3647     @@ -118,8 +128,9 @@ gen_btf()
3648     return 1
3649     fi
3650    
3651     - info "BTF" ${2}
3652     vmlinux_link ${1}
3653     +
3654     + info "BTF" ${2}
3655     LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1}
3656    
3657     # dump .BTF section into raw binary file to link with final vmlinux
3658     @@ -127,11 +138,12 @@ gen_btf()
3659     cut -d, -f1 | cut -d' ' -f2)
3660     bin_format=$(LANG=C ${OBJDUMP} -f ${1} | grep 'file format' | \
3661     awk '{print $4}')
3662     + bin_file=.btf.vmlinux.bin
3663     ${OBJCOPY} --change-section-address .BTF=0 \
3664     --set-section-flags .BTF=alloc -O binary \
3665     - --only-section=.BTF ${1} .btf.vmlinux.bin
3666     + --only-section=.BTF ${1} $bin_file
3667     ${OBJCOPY} -I binary -O ${bin_format} -B ${bin_arch} \
3668     - --rename-section .data=.BTF .btf.vmlinux.bin ${2}
3669     + --rename-section .data=.BTF $bin_file ${2}
3670     }
3671    
3672     # Create ${2} .o file with all symbols from the ${1} object file
3673     @@ -166,8 +178,8 @@ kallsyms()
3674     kallsyms_step()
3675     {
3676     kallsymso_prev=${kallsymso}
3677     - kallsymso=.tmp_kallsyms${1}.o
3678     - kallsyms_vmlinux=.tmp_vmlinux${1}
3679     + kallsyms_vmlinux=.tmp_vmlinux.kallsyms${1}
3680     + kallsymso=${kallsyms_vmlinux}.o
3681    
3682     vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o}
3683     kallsyms ${kallsyms_vmlinux} ${kallsymso}
3684     @@ -190,7 +202,6 @@ cleanup()
3685     {
3686     rm -f .btf.*
3687     rm -f .tmp_System.map
3688     - rm -f .tmp_kallsyms*
3689     rm -f .tmp_vmlinux*
3690     rm -f System.map
3691     rm -f vmlinux
3692     @@ -253,9 +264,8 @@ ${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo
3693    
3694     btf_vmlinux_bin_o=""
3695     if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then
3696     - if gen_btf .tmp_vmlinux.btf .btf.vmlinux.bin.o ; then
3697     - btf_vmlinux_bin_o=.btf.vmlinux.bin.o
3698     - else
3699     + btf_vmlinux_bin_o=.btf.vmlinux.bin.o
3700     + if ! gen_btf .tmp_vmlinux.btf $btf_vmlinux_bin_o ; then
3701     echo >&2 "Failed to generate BTF for vmlinux"
3702     echo >&2 "Try to disable CONFIG_DEBUG_INFO_BTF"
3703     exit 1
3704     diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
3705     index 90d21675c3ad..47e4f2d91df7 100644
3706     --- a/security/apparmor/apparmorfs.c
3707     +++ b/security/apparmor/apparmorfs.c
3708     @@ -424,7 +424,7 @@ static ssize_t policy_update(u32 mask, const char __user *buf, size_t size,
3709     */
3710     error = aa_may_manage_policy(label, ns, mask);
3711     if (error)
3712     - return error;
3713     + goto end_section;
3714    
3715     data = aa_simple_write_to_buffer(buf, size, size, pos);
3716     error = PTR_ERR(data);
3717     @@ -432,6 +432,7 @@ static ssize_t policy_update(u32 mask, const char __user *buf, size_t size,
3718     error = aa_replace_profiles(ns, label, mask, data);
3719     aa_put_loaddata(data);
3720     }
3721     +end_section:
3722     end_current_label_crit_section(label);
3723    
3724     return error;
3725     diff --git a/security/apparmor/audit.c b/security/apparmor/audit.c
3726     index 5a98661a8b46..597732503815 100644
3727     --- a/security/apparmor/audit.c
3728     +++ b/security/apparmor/audit.c
3729     @@ -197,8 +197,9 @@ int aa_audit_rule_init(u32 field, u32 op, char *rulestr, void **vrule)
3730     rule->label = aa_label_parse(&root_ns->unconfined->label, rulestr,
3731     GFP_KERNEL, true, false);
3732     if (IS_ERR(rule->label)) {
3733     + int err = PTR_ERR(rule->label);
3734     aa_audit_rule_free(rule);
3735     - return PTR_ERR(rule->label);
3736     + return err;
3737     }
3738    
3739     *vrule = rule;
3740     diff --git a/security/apparmor/domain.c b/security/apparmor/domain.c
3741     index 039ca71872ce..5dedc0173b02 100644
3742     --- a/security/apparmor/domain.c
3743     +++ b/security/apparmor/domain.c
3744     @@ -1334,6 +1334,7 @@ int aa_change_profile(const char *fqname, int flags)
3745     ctx->nnp = aa_get_label(label);
3746    
3747     if (!fqname || !*fqname) {
3748     + aa_put_label(label);
3749     AA_DEBUG("no profile name");
3750     return -EINVAL;
3751     }
3752     @@ -1352,8 +1353,6 @@ int aa_change_profile(const char *fqname, int flags)
3753     op = OP_CHANGE_PROFILE;
3754     }
3755    
3756     - label = aa_get_current_label();
3757     -
3758     if (*fqname == '&') {
3759     stack = true;
3760     /* don't have label_parse() do stacking */
3761     diff --git a/security/integrity/evm/evm_crypto.c b/security/integrity/evm/evm_crypto.c
3762     index d485f6fc908e..cc826c2767a3 100644
3763     --- a/security/integrity/evm/evm_crypto.c
3764     +++ b/security/integrity/evm/evm_crypto.c
3765     @@ -75,7 +75,7 @@ static struct shash_desc *init_desc(char type, uint8_t hash_algo)
3766     {
3767     long rc;
3768     const char *algo;
3769     - struct crypto_shash **tfm;
3770     + struct crypto_shash **tfm, *tmp_tfm;
3771     struct shash_desc *desc;
3772    
3773     if (type == EVM_XATTR_HMAC) {
3774     @@ -93,31 +93,31 @@ static struct shash_desc *init_desc(char type, uint8_t hash_algo)
3775     algo = hash_algo_name[hash_algo];
3776     }
3777    
3778     - if (*tfm == NULL) {
3779     - mutex_lock(&mutex);
3780     - if (*tfm)
3781     - goto out;
3782     - *tfm = crypto_alloc_shash(algo, 0, CRYPTO_NOLOAD);
3783     - if (IS_ERR(*tfm)) {
3784     - rc = PTR_ERR(*tfm);
3785     - pr_err("Can not allocate %s (reason: %ld)\n", algo, rc);
3786     - *tfm = NULL;
3787     + if (*tfm)
3788     + goto alloc;
3789     + mutex_lock(&mutex);
3790     + if (*tfm)
3791     + goto unlock;
3792     +
3793     + tmp_tfm = crypto_alloc_shash(algo, 0, CRYPTO_NOLOAD);
3794     + if (IS_ERR(tmp_tfm)) {
3795     + pr_err("Can not allocate %s (reason: %ld)\n", algo,
3796     + PTR_ERR(tmp_tfm));
3797     + mutex_unlock(&mutex);
3798     + return ERR_CAST(tmp_tfm);
3799     + }
3800     + if (type == EVM_XATTR_HMAC) {
3801     + rc = crypto_shash_setkey(tmp_tfm, evmkey, evmkey_len);
3802     + if (rc) {
3803     + crypto_free_shash(tmp_tfm);
3804     mutex_unlock(&mutex);
3805     return ERR_PTR(rc);
3806     }
3807     - if (type == EVM_XATTR_HMAC) {
3808     - rc = crypto_shash_setkey(*tfm, evmkey, evmkey_len);
3809     - if (rc) {
3810     - crypto_free_shash(*tfm);
3811     - *tfm = NULL;
3812     - mutex_unlock(&mutex);
3813     - return ERR_PTR(rc);
3814     - }
3815     - }
3816     -out:
3817     - mutex_unlock(&mutex);
3818     }
3819     -
3820     + *tfm = tmp_tfm;
3821     +unlock:
3822     + mutex_unlock(&mutex);
3823     +alloc:
3824     desc = kmalloc(sizeof(*desc) + crypto_shash_descsize(*tfm),
3825     GFP_KERNEL);
3826     if (!desc)
3827     diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
3828     index 73044fc6a952..ad6cbbccc8d9 100644
3829     --- a/security/integrity/ima/ima_crypto.c
3830     +++ b/security/integrity/ima/ima_crypto.c
3831     @@ -411,7 +411,7 @@ int ima_calc_file_hash(struct file *file, struct ima_digest_data *hash)
3832     loff_t i_size;
3833     int rc;
3834     struct file *f = file;
3835     - bool new_file_instance = false, modified_flags = false;
3836     + bool new_file_instance = false, modified_mode = false;
3837    
3838     /*
3839     * For consistency, fail file's opened with the O_DIRECT flag on
3840     @@ -431,13 +431,13 @@ int ima_calc_file_hash(struct file *file, struct ima_digest_data *hash)
3841     f = dentry_open(&file->f_path, flags, file->f_cred);
3842     if (IS_ERR(f)) {
3843     /*
3844     - * Cannot open the file again, lets modify f_flags
3845     + * Cannot open the file again, lets modify f_mode
3846     * of original and continue
3847     */
3848     pr_info_ratelimited("Unable to reopen file for reading.\n");
3849     f = file;
3850     - f->f_flags |= FMODE_READ;
3851     - modified_flags = true;
3852     + f->f_mode |= FMODE_READ;
3853     + modified_mode = true;
3854     } else {
3855     new_file_instance = true;
3856     }
3857     @@ -455,8 +455,8 @@ int ima_calc_file_hash(struct file *file, struct ima_digest_data *hash)
3858     out:
3859     if (new_file_instance)
3860     fput(f);
3861     - else if (modified_flags)
3862     - f->f_flags &= ~FMODE_READ;
3863     + else if (modified_mode)
3864     + f->f_mode &= ~FMODE_READ;
3865     return rc;
3866     }
3867    
3868     diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c
3869     index 2000e8df0301..68571c40d61f 100644
3870     --- a/security/integrity/ima/ima_fs.c
3871     +++ b/security/integrity/ima/ima_fs.c
3872     @@ -340,8 +340,7 @@ static ssize_t ima_write_policy(struct file *file, const char __user *buf,
3873     integrity_audit_msg(AUDIT_INTEGRITY_STATUS, NULL, NULL,
3874     "policy_update", "signed policy required",
3875     1, 0);
3876     - if (ima_appraise & IMA_APPRAISE_ENFORCE)
3877     - result = -EACCES;
3878     + result = -EACCES;
3879     } else {
3880     result = ima_parse_add_rule(data);
3881     }
3882     diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
3883     index 2236b5e0c1f2..1662573a4030 100644
3884     --- a/sound/core/pcm_lib.c
3885     +++ b/sound/core/pcm_lib.c
3886     @@ -423,6 +423,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
3887    
3888     no_delta_check:
3889     if (runtime->status->hw_ptr == new_hw_ptr) {
3890     + runtime->hw_ptr_jiffies = curr_jiffies;
3891     update_audio_tstamp(substream, &curr_tstamp, &audio_tstamp);
3892     return 0;
3893     }
3894     diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
3895     index 9f3e37511408..c946fd8beebc 100644
3896     --- a/sound/hda/hdac_device.c
3897     +++ b/sound/hda/hdac_device.c
3898     @@ -57,6 +57,7 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
3899     codec->addr = addr;
3900     codec->type = HDA_DEV_CORE;
3901     mutex_init(&codec->widget_lock);
3902     + mutex_init(&codec->regmap_lock);
3903     pm_runtime_set_active(&codec->dev);
3904     pm_runtime_get_noresume(&codec->dev);
3905     atomic_set(&codec->in_pm, 0);
3906     diff --git a/sound/hda/hdac_regmap.c b/sound/hda/hdac_regmap.c
3907     index 286361ecd640..2596a881186f 100644
3908     --- a/sound/hda/hdac_regmap.c
3909     +++ b/sound/hda/hdac_regmap.c
3910     @@ -363,6 +363,7 @@ static const struct regmap_config hda_regmap_cfg = {
3911     .reg_write = hda_reg_write,
3912     .use_single_read = true,
3913     .use_single_write = true,
3914     + .disable_locking = true,
3915     };
3916    
3917     /**
3918     @@ -425,12 +426,29 @@ EXPORT_SYMBOL_GPL(snd_hdac_regmap_add_vendor_verb);
3919     static int reg_raw_write(struct hdac_device *codec, unsigned int reg,
3920     unsigned int val)
3921     {
3922     + int err;
3923     +
3924     + mutex_lock(&codec->regmap_lock);
3925     if (!codec->regmap)
3926     - return hda_reg_write(codec, reg, val);
3927     + err = hda_reg_write(codec, reg, val);
3928     else
3929     - return regmap_write(codec->regmap, reg, val);
3930     + err = regmap_write(codec->regmap, reg, val);
3931     + mutex_unlock(&codec->regmap_lock);
3932     + return err;
3933     }
3934    
3935     +/* a helper macro to call @func_call; retry with power-up if failed */
3936     +#define CALL_RAW_FUNC(codec, func_call) \
3937     + ({ \
3938     + int _err = func_call; \
3939     + if (_err == -EAGAIN) { \
3940     + _err = snd_hdac_power_up_pm(codec); \
3941     + if (_err >= 0) \
3942     + _err = func_call; \
3943     + snd_hdac_power_down_pm(codec); \
3944     + } \
3945     + _err;})
3946     +
3947     /**
3948     * snd_hdac_regmap_write_raw - write a pseudo register with power mgmt
3949     * @codec: the codec object
3950     @@ -442,42 +460,29 @@ static int reg_raw_write(struct hdac_device *codec, unsigned int reg,
3951     int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg,
3952     unsigned int val)
3953     {
3954     - int err;
3955     -
3956     - err = reg_raw_write(codec, reg, val);
3957     - if (err == -EAGAIN) {
3958     - err = snd_hdac_power_up_pm(codec);
3959     - if (err >= 0)
3960     - err = reg_raw_write(codec, reg, val);
3961     - snd_hdac_power_down_pm(codec);
3962     - }
3963     - return err;
3964     + return CALL_RAW_FUNC(codec, reg_raw_write(codec, reg, val));
3965     }
3966     EXPORT_SYMBOL_GPL(snd_hdac_regmap_write_raw);
3967    
3968     static int reg_raw_read(struct hdac_device *codec, unsigned int reg,
3969     unsigned int *val, bool uncached)
3970     {
3971     + int err;
3972     +
3973     + mutex_lock(&codec->regmap_lock);
3974     if (uncached || !codec->regmap)
3975     - return hda_reg_read(codec, reg, val);
3976     + err = hda_reg_read(codec, reg, val);
3977     else
3978     - return regmap_read(codec->regmap, reg, val);
3979     + err = regmap_read(codec->regmap, reg, val);
3980     + mutex_unlock(&codec->regmap_lock);
3981     + return err;
3982     }
3983    
3984     static int __snd_hdac_regmap_read_raw(struct hdac_device *codec,
3985     unsigned int reg, unsigned int *val,
3986     bool uncached)
3987     {
3988     - int err;
3989     -
3990     - err = reg_raw_read(codec, reg, val, uncached);
3991     - if (err == -EAGAIN) {
3992     - err = snd_hdac_power_up_pm(codec);
3993     - if (err >= 0)
3994     - err = reg_raw_read(codec, reg, val, uncached);
3995     - snd_hdac_power_down_pm(codec);
3996     - }
3997     - return err;
3998     + return CALL_RAW_FUNC(codec, reg_raw_read(codec, reg, val, uncached));
3999     }
4000    
4001     /**
4002     @@ -504,6 +509,35 @@ int snd_hdac_regmap_read_raw_uncached(struct hdac_device *codec,
4003     return __snd_hdac_regmap_read_raw(codec, reg, val, true);
4004     }
4005    
4006     +static int reg_raw_update(struct hdac_device *codec, unsigned int reg,
4007     + unsigned int mask, unsigned int val)
4008     +{
4009     + unsigned int orig;
4010     + bool change;
4011     + int err;
4012     +
4013     + mutex_lock(&codec->regmap_lock);
4014     + if (codec->regmap) {
4015     + err = regmap_update_bits_check(codec->regmap, reg, mask, val,
4016     + &change);
4017     + if (!err)
4018     + err = change ? 1 : 0;
4019     + } else {
4020     + err = hda_reg_read(codec, reg, &orig);
4021     + if (!err) {
4022     + val &= mask;
4023     + val |= orig & ~mask;
4024     + if (val != orig) {
4025     + err = hda_reg_write(codec, reg, val);
4026     + if (!err)
4027     + err = 1;
4028     + }
4029     + }
4030     + }
4031     + mutex_unlock(&codec->regmap_lock);
4032     + return err;
4033     +}
4034     +
4035     /**
4036     * snd_hdac_regmap_update_raw - update a pseudo register with power mgmt
4037     * @codec: the codec object
4038     @@ -515,20 +549,58 @@ int snd_hdac_regmap_read_raw_uncached(struct hdac_device *codec,
4039     */
4040     int snd_hdac_regmap_update_raw(struct hdac_device *codec, unsigned int reg,
4041     unsigned int mask, unsigned int val)
4042     +{
4043     + return CALL_RAW_FUNC(codec, reg_raw_update(codec, reg, mask, val));
4044     +}
4045     +EXPORT_SYMBOL_GPL(snd_hdac_regmap_update_raw);
4046     +
4047     +static int reg_raw_update_once(struct hdac_device *codec, unsigned int reg,
4048     + unsigned int mask, unsigned int val)
4049     {
4050     unsigned int orig;
4051     int err;
4052    
4053     - val &= mask;
4054     - err = snd_hdac_regmap_read_raw(codec, reg, &orig);
4055     - if (err < 0)
4056     - return err;
4057     - val |= orig & ~mask;
4058     - if (val == orig)
4059     - return 0;
4060     - err = snd_hdac_regmap_write_raw(codec, reg, val);
4061     + if (!codec->regmap)
4062     + return reg_raw_update(codec, reg, mask, val);
4063     +
4064     + mutex_lock(&codec->regmap_lock);
4065     + regcache_cache_only(codec->regmap, true);
4066     + err = regmap_read(codec->regmap, reg, &orig);
4067     + regcache_cache_only(codec->regmap, false);
4068     if (err < 0)
4069     - return err;
4070     - return 1;
4071     + err = regmap_update_bits(codec->regmap, reg, mask, val);
4072     + mutex_unlock(&codec->regmap_lock);
4073     + return err;
4074     }
4075     -EXPORT_SYMBOL_GPL(snd_hdac_regmap_update_raw);
4076     +
4077     +/**
4078     + * snd_hdac_regmap_update_raw_once - initialize the register value only once
4079     + * @codec: the codec object
4080     + * @reg: pseudo register
4081     + * @mask: bit mask to update
4082     + * @val: value to update
4083     + *
4084     + * Performs the update of the register bits only once when the register
4085     + * hasn't been initialized yet. Used in HD-audio legacy driver.
4086     + * Returns zero if successful or a negative error code
4087     + */
4088     +int snd_hdac_regmap_update_raw_once(struct hdac_device *codec, unsigned int reg,
4089     + unsigned int mask, unsigned int val)
4090     +{
4091     + return CALL_RAW_FUNC(codec, reg_raw_update_once(codec, reg, mask, val));
4092     +}
4093     +EXPORT_SYMBOL_GPL(snd_hdac_regmap_update_raw_once);
4094     +
4095     +/**
4096     + * snd_hdac_regmap_sync - sync out the cached values for PM resume
4097     + * @codec: the codec object
4098     + */
4099     +void snd_hdac_regmap_sync(struct hdac_device *codec)
4100     +{
4101     + if (codec->regmap) {
4102     + mutex_lock(&codec->regmap_lock);
4103     + regcache_sync(codec->regmap);
4104     + mutex_unlock(&codec->regmap_lock);
4105     + }
4106     +}
4107     +EXPORT_SYMBOL_GPL(snd_hdac_regmap_sync);
4108     diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
4109     index 6cb72336433a..07c03c32715a 100644
4110     --- a/sound/pci/hda/hda_codec.c
4111     +++ b/sound/pci/hda/hda_codec.c
4112     @@ -1267,6 +1267,18 @@ int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir,
4113     }
4114     EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);
4115    
4116     +static unsigned int encode_amp(struct hda_codec *codec, hda_nid_t nid,
4117     + int ch, int dir, int idx)
4118     +{
4119     + unsigned int cmd = snd_hdac_regmap_encode_amp(nid, ch, dir, idx);
4120     +
4121     + /* enable fake mute if no h/w mute but min=mute */
4122     + if ((query_amp_caps(codec, nid, dir) &
4123     + (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) == AC_AMPCAP_MIN_MUTE)
4124     + cmd |= AC_AMP_FAKE_MUTE;
4125     + return cmd;
4126     +}
4127     +
4128     /**
4129     * snd_hda_codec_amp_update - update the AMP mono value
4130     * @codec: HD-audio codec
4131     @@ -1282,12 +1294,8 @@ EXPORT_SYMBOL_GPL(snd_hda_override_amp_caps);
4132     int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid,
4133     int ch, int dir, int idx, int mask, int val)
4134     {
4135     - unsigned int cmd = snd_hdac_regmap_encode_amp(nid, ch, dir, idx);
4136     + unsigned int cmd = encode_amp(codec, nid, ch, dir, idx);
4137    
4138     - /* enable fake mute if no h/w mute but min=mute */
4139     - if ((query_amp_caps(codec, nid, dir) &
4140     - (AC_AMPCAP_MUTE | AC_AMPCAP_MIN_MUTE)) == AC_AMPCAP_MIN_MUTE)
4141     - cmd |= AC_AMP_FAKE_MUTE;
4142     return snd_hdac_regmap_update_raw(&codec->core, cmd, mask, val);
4143     }
4144     EXPORT_SYMBOL_GPL(snd_hda_codec_amp_update);
4145     @@ -1335,16 +1343,11 @@ EXPORT_SYMBOL_GPL(snd_hda_codec_amp_stereo);
4146     int snd_hda_codec_amp_init(struct hda_codec *codec, hda_nid_t nid, int ch,
4147     int dir, int idx, int mask, int val)
4148     {
4149     - int orig;
4150     + unsigned int cmd = encode_amp(codec, nid, ch, dir, idx);
4151    
4152     if (!codec->core.regmap)
4153     return -EINVAL;
4154     - regcache_cache_only(codec->core.regmap, true);
4155     - orig = snd_hda_codec_amp_read(codec, nid, ch, dir, idx);
4156     - regcache_cache_only(codec->core.regmap, false);
4157     - if (orig >= 0)
4158     - return 0;
4159     - return snd_hda_codec_amp_update(codec, nid, ch, dir, idx, mask, val);
4160     + return snd_hdac_regmap_update_raw_once(&codec->core, cmd, mask, val);
4161     }
4162     EXPORT_SYMBOL_GPL(snd_hda_codec_amp_init);
4163    
4164     @@ -2905,8 +2908,7 @@ static void hda_call_codec_resume(struct hda_codec *codec)
4165     else {
4166     if (codec->patch_ops.init)
4167     codec->patch_ops.init(codec);
4168     - if (codec->core.regmap)
4169     - regcache_sync(codec->core.regmap);
4170     + snd_hda_regmap_sync(codec);
4171     }
4172    
4173     if (codec->jackpoll_interval)
4174     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
4175     index 10d502328b76..6815f9dc8545 100644
4176     --- a/sound/pci/hda/hda_generic.c
4177     +++ b/sound/pci/hda/hda_generic.c
4178     @@ -4401,7 +4401,7 @@ EXPORT_SYMBOL_GPL(snd_hda_gen_fix_pin_power);
4179     */
4180    
4181     /* check each pin in the given array; returns true if any of them is plugged */
4182     -static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
4183     +static bool detect_jacks(struct hda_codec *codec, int num_pins, const hda_nid_t *pins)
4184     {
4185     int i;
4186     bool present = false;
4187     @@ -4420,7 +4420,7 @@ static bool detect_jacks(struct hda_codec *codec, int num_pins, hda_nid_t *pins)
4188     }
4189    
4190     /* standard HP/line-out auto-mute helper */
4191     -static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
4192     +static void do_automute(struct hda_codec *codec, int num_pins, const hda_nid_t *pins,
4193     int *paths, bool mute)
4194     {
4195     struct hda_gen_spec *spec = codec->spec;
4196     @@ -6027,7 +6027,7 @@ int snd_hda_gen_init(struct hda_codec *codec)
4197     /* call init functions of standard auto-mute helpers */
4198     update_automute_all(codec);
4199    
4200     - regcache_sync(codec->core.regmap);
4201     + snd_hda_regmap_sync(codec);
4202    
4203     if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
4204     snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
4205     diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
4206     index 3942e1b528d8..3dca65d79b02 100644
4207     --- a/sound/pci/hda/hda_local.h
4208     +++ b/sound/pci/hda/hda_local.h
4209     @@ -138,6 +138,8 @@ int snd_hda_codec_reset(struct hda_codec *codec);
4210     void snd_hda_codec_register(struct hda_codec *codec);
4211     void snd_hda_codec_cleanup_for_unbind(struct hda_codec *codec);
4212    
4213     +#define snd_hda_regmap_sync(codec) snd_hdac_regmap_sync(&(codec)->core)
4214     +
4215     enum {
4216     HDA_VMUTE_OFF,
4217     HDA_VMUTE_ON,
4218     diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
4219     index bc9dd8e6fd86..c64895f99299 100644
4220     --- a/sound/pci/hda/patch_analog.c
4221     +++ b/sound/pci/hda/patch_analog.c
4222     @@ -389,7 +389,7 @@ static int patch_ad1986a(struct hda_codec *codec)
4223     {
4224     int err;
4225     struct ad198x_spec *spec;
4226     - static hda_nid_t preferred_pairs[] = {
4227     + static const hda_nid_t preferred_pairs[] = {
4228     0x1a, 0x03,
4229     0x1b, 0x03,
4230     0x1c, 0x04,
4231     @@ -519,9 +519,9 @@ static int ad1983_add_spdif_mux_ctl(struct hda_codec *codec)
4232    
4233     static int patch_ad1983(struct hda_codec *codec)
4234     {
4235     + static const hda_nid_t conn_0c[] = { 0x08 };
4236     + static const hda_nid_t conn_0d[] = { 0x09 };
4237     struct ad198x_spec *spec;
4238     - static hda_nid_t conn_0c[] = { 0x08 };
4239     - static hda_nid_t conn_0d[] = { 0x09 };
4240     int err;
4241    
4242     err = alloc_ad_spec(codec);
4243     diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
4244     index adad3651889e..1e904dd15ab3 100644
4245     --- a/sound/pci/hda/patch_ca0132.c
4246     +++ b/sound/pci/hda/patch_ca0132.c
4247     @@ -7803,23 +7803,23 @@ static void sbz_region2_exit(struct hda_codec *codec)
4248    
4249     static void sbz_set_pin_ctl_default(struct hda_codec *codec)
4250     {
4251     - hda_nid_t pins[5] = {0x0B, 0x0C, 0x0E, 0x12, 0x13};
4252     + static const hda_nid_t pins[] = {0x0B, 0x0C, 0x0E, 0x12, 0x13};
4253     unsigned int i;
4254    
4255     snd_hda_codec_write(codec, 0x11, 0,
4256     AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40);
4257    
4258     - for (i = 0; i < 5; i++)
4259     + for (i = 0; i < ARRAY_SIZE(pins); i++)
4260     snd_hda_codec_write(codec, pins[i], 0,
4261     AC_VERB_SET_PIN_WIDGET_CONTROL, 0x00);
4262     }
4263    
4264     static void ca0132_clear_unsolicited(struct hda_codec *codec)
4265     {
4266     - hda_nid_t pins[7] = {0x0B, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13};
4267     + static const hda_nid_t pins[] = {0x0B, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13};
4268     unsigned int i;
4269    
4270     - for (i = 0; i < 7; i++) {
4271     + for (i = 0; i < ARRAY_SIZE(pins); i++) {
4272     snd_hda_codec_write(codec, pins[i], 0,
4273     AC_VERB_SET_UNSOLICITED_ENABLE, 0x00);
4274     }
4275     @@ -7843,10 +7843,10 @@ static void sbz_gpio_shutdown_commands(struct hda_codec *codec, int dir,
4276    
4277     static void zxr_dbpro_power_state_shutdown(struct hda_codec *codec)
4278     {
4279     - hda_nid_t pins[7] = {0x05, 0x0c, 0x09, 0x0e, 0x08, 0x11, 0x01};
4280     + static const hda_nid_t pins[] = {0x05, 0x0c, 0x09, 0x0e, 0x08, 0x11, 0x01};
4281     unsigned int i;
4282    
4283     - for (i = 0; i < 7; i++)
4284     + for (i = 0; i < ARRAY_SIZE(pins); i++)
4285     snd_hda_codec_write(codec, pins[i], 0,
4286     AC_VERB_SET_POWER_STATE, 0x03);
4287     }
4288     diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
4289     index 1e20e85e9b46..396b5503038a 100644
4290     --- a/sound/pci/hda/patch_conexant.c
4291     +++ b/sound/pci/hda/patch_conexant.c
4292     @@ -116,7 +116,7 @@ static void cx_auto_parse_eapd(struct hda_codec *codec)
4293     }
4294    
4295     static void cx_auto_turn_eapd(struct hda_codec *codec, int num_pins,
4296     - hda_nid_t *pins, bool on)
4297     + const hda_nid_t *pins, bool on)
4298     {
4299     int i;
4300     for (i = 0; i < num_pins; i++) {
4301     @@ -960,10 +960,10 @@ static const struct hda_model_fixup cxt5066_fixup_models[] = {
4302     static void add_cx5051_fake_mutes(struct hda_codec *codec)
4303     {
4304     struct conexant_spec *spec = codec->spec;
4305     - static hda_nid_t out_nids[] = {
4306     + static const hda_nid_t out_nids[] = {
4307     0x10, 0x11, 0
4308     };
4309     - hda_nid_t *p;
4310     + const hda_nid_t *p;
4311    
4312     for (p = out_nids; *p; p++)
4313     snd_hda_override_amp_caps(codec, *p, HDA_OUTPUT,
4314     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
4315     index d48263d1f6a2..d41c91468ab3 100644
4316     --- a/sound/pci/hda/patch_hdmi.c
4317     +++ b/sound/pci/hda/patch_hdmi.c
4318     @@ -2359,7 +2359,7 @@ static int generic_hdmi_resume(struct hda_codec *codec)
4319     int pin_idx;
4320    
4321     codec->patch_ops.init(codec);
4322     - regcache_sync(codec->core.regmap);
4323     + snd_hda_regmap_sync(codec);
4324    
4325     for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
4326     struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
4327     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4328     index 004d2f638cf2..c5bec191e003 100644
4329     --- a/sound/pci/hda/patch_realtek.c
4330     +++ b/sound/pci/hda/patch_realtek.c
4331     @@ -86,6 +86,14 @@ struct alc_spec {
4332    
4333     unsigned int gpio_mute_led_mask;
4334     unsigned int gpio_mic_led_mask;
4335     + unsigned int mute_led_coef_idx;
4336     + unsigned int mute_led_coefbit_mask;
4337     + unsigned int mute_led_coefbit_on;
4338     + unsigned int mute_led_coefbit_off;
4339     + unsigned int mic_led_coef_idx;
4340     + unsigned int mic_led_coefbit_mask;
4341     + unsigned int mic_led_coefbit_on;
4342     + unsigned int mic_led_coefbit_off;
4343    
4344     hda_nid_t headset_mic_pin;
4345     hda_nid_t headphone_mic_pin;
4346     @@ -465,10 +473,10 @@ static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on)
4347     static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
4348     {
4349     /* We currently only handle front, HP */
4350     - static hda_nid_t pins[] = {
4351     + static const hda_nid_t pins[] = {
4352     0x0f, 0x10, 0x14, 0x15, 0x17, 0
4353     };
4354     - hda_nid_t *p;
4355     + const hda_nid_t *p;
4356     for (p = pins; *p; p++)
4357     set_eapd(codec, *p, on);
4358     }
4359     @@ -908,7 +916,7 @@ static int alc_resume(struct hda_codec *codec)
4360     if (!spec->no_depop_delay)
4361     msleep(150); /* to avoid pop noise */
4362     codec->patch_ops.init(codec);
4363     - regcache_sync(codec->core.regmap);
4364     + snd_hda_regmap_sync(codec);
4365     hda_call_check_power_status(codec, 0x01);
4366     return 0;
4367     }
4368     @@ -1939,19 +1947,19 @@ static void alc889_fixup_dac_route(struct hda_codec *codec,
4369     {
4370     if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4371     /* fake the connections during parsing the tree */
4372     - hda_nid_t conn1[2] = { 0x0c, 0x0d };
4373     - hda_nid_t conn2[2] = { 0x0e, 0x0f };
4374     - snd_hda_override_conn_list(codec, 0x14, 2, conn1);
4375     - snd_hda_override_conn_list(codec, 0x15, 2, conn1);
4376     - snd_hda_override_conn_list(codec, 0x18, 2, conn2);
4377     - snd_hda_override_conn_list(codec, 0x1a, 2, conn2);
4378     + static const hda_nid_t conn1[] = { 0x0c, 0x0d };
4379     + static const hda_nid_t conn2[] = { 0x0e, 0x0f };
4380     + snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
4381     + snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn1), conn1);
4382     + snd_hda_override_conn_list(codec, 0x18, ARRAY_SIZE(conn2), conn2);
4383     + snd_hda_override_conn_list(codec, 0x1a, ARRAY_SIZE(conn2), conn2);
4384     } else if (action == HDA_FIXUP_ACT_PROBE) {
4385     /* restore the connections */
4386     - hda_nid_t conn[5] = { 0x0c, 0x0d, 0x0e, 0x0f, 0x26 };
4387     - snd_hda_override_conn_list(codec, 0x14, 5, conn);
4388     - snd_hda_override_conn_list(codec, 0x15, 5, conn);
4389     - snd_hda_override_conn_list(codec, 0x18, 5, conn);
4390     - snd_hda_override_conn_list(codec, 0x1a, 5, conn);
4391     + static const hda_nid_t conn[] = { 0x0c, 0x0d, 0x0e, 0x0f, 0x26 };
4392     + snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn);
4393     + snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn), conn);
4394     + snd_hda_override_conn_list(codec, 0x18, ARRAY_SIZE(conn), conn);
4395     + snd_hda_override_conn_list(codec, 0x1a, ARRAY_SIZE(conn), conn);
4396     }
4397     }
4398    
4399     @@ -1959,8 +1967,8 @@ static void alc889_fixup_dac_route(struct hda_codec *codec,
4400     static void alc889_fixup_mbp_vref(struct hda_codec *codec,
4401     const struct hda_fixup *fix, int action)
4402     {
4403     + static const hda_nid_t nids[] = { 0x14, 0x15, 0x19 };
4404     struct alc_spec *spec = codec->spec;
4405     - static hda_nid_t nids[3] = { 0x14, 0x15, 0x19 };
4406     int i;
4407    
4408     if (action != HDA_FIXUP_ACT_INIT)
4409     @@ -1996,7 +2004,7 @@ static void alc889_fixup_mac_pins(struct hda_codec *codec,
4410     static void alc889_fixup_imac91_vref(struct hda_codec *codec,
4411     const struct hda_fixup *fix, int action)
4412     {
4413     - static hda_nid_t nids[2] = { 0x18, 0x1a };
4414     + static const hda_nid_t nids[] = { 0x18, 0x1a };
4415    
4416     if (action == HDA_FIXUP_ACT_INIT)
4417     alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
4418     @@ -2006,7 +2014,7 @@ static void alc889_fixup_imac91_vref(struct hda_codec *codec,
4419     static void alc889_fixup_mba11_vref(struct hda_codec *codec,
4420     const struct hda_fixup *fix, int action)
4421     {
4422     - static hda_nid_t nids[1] = { 0x18 };
4423     + static const hda_nid_t nids[] = { 0x18 };
4424    
4425     if (action == HDA_FIXUP_ACT_INIT)
4426     alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
4427     @@ -2016,7 +2024,7 @@ static void alc889_fixup_mba11_vref(struct hda_codec *codec,
4428     static void alc889_fixup_mba21_vref(struct hda_codec *codec,
4429     const struct hda_fixup *fix, int action)
4430     {
4431     - static hda_nid_t nids[2] = { 0x18, 0x19 };
4432     + static const hda_nid_t nids[] = { 0x18, 0x19 };
4433    
4434     if (action == HDA_FIXUP_ACT_INIT)
4435     alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
4436     @@ -2098,7 +2106,7 @@ static void alc1220_fixup_clevo_p950(struct hda_codec *codec,
4437     const struct hda_fixup *fix,
4438     int action)
4439     {
4440     - hda_nid_t conn1[1] = { 0x0c };
4441     + static const hda_nid_t conn1[] = { 0x0c };
4442    
4443     if (action != HDA_FIXUP_ACT_PRE_PROBE)
4444     return;
4445     @@ -2107,8 +2115,8 @@ static void alc1220_fixup_clevo_p950(struct hda_codec *codec,
4446     /* We therefore want to make sure 0x14 (front headphone) and
4447     * 0x1b (speakers) use the stereo DAC 0x02
4448     */
4449     - snd_hda_override_conn_list(codec, 0x14, 1, conn1);
4450     - snd_hda_override_conn_list(codec, 0x1b, 1, conn1);
4451     + snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
4452     + snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1);
4453     }
4454    
4455     static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec,
4456     @@ -2449,6 +2457,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
4457     SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
4458     SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
4459     SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_CLEVO_P950),
4460     + SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
4461     SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
4462     SND_PCI_QUIRK(0x1462, 0x1275, "MSI-GL63", ALC1220_FIXUP_CLEVO_P950),
4463     SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
4464     @@ -2464,6 +2473,9 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
4465     SND_PCI_QUIRK(0x1558, 0x97e1, "Clevo P970[ER][CDFN]", ALC1220_FIXUP_CLEVO_P950),
4466     SND_PCI_QUIRK(0x1558, 0x65d1, "Clevo PB51[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
4467     SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
4468     + SND_PCI_QUIRK(0x1558, 0x50d3, "Clevo PC50[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
4469     + SND_PCI_QUIRK(0x1558, 0x70d1, "Clevo PC70[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
4470     + SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
4471     SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
4472     SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
4473     SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", ALC882_FIXUP_LENOVO_Y530),
4474     @@ -3719,8 +3731,8 @@ static void alc5505_dsp_init(struct hda_codec *codec)
4475     }
4476    
4477     #ifdef HALT_REALTEK_ALC5505
4478     -#define alc5505_dsp_suspend(codec) /* NOP */
4479     -#define alc5505_dsp_resume(codec) /* NOP */
4480     +#define alc5505_dsp_suspend(codec) do { } while (0) /* NOP */
4481     +#define alc5505_dsp_resume(codec) do { } while (0) /* NOP */
4482     #else
4483     #define alc5505_dsp_suspend(codec) alc5505_dsp_halt(codec)
4484     #define alc5505_dsp_resume(codec) alc5505_dsp_back_from_halt(codec)
4485     @@ -3756,7 +3768,7 @@ static int alc269_resume(struct hda_codec *codec)
4486     msleep(200);
4487     }
4488    
4489     - regcache_sync(codec->core.regmap);
4490     + snd_hda_regmap_sync(codec);
4491     hda_call_check_power_status(codec, 0x01);
4492    
4493     /* on some machine, the BIOS will clear the codec gpio data when enter
4494     @@ -4182,6 +4194,111 @@ static void alc280_fixup_hp_gpio4(struct hda_codec *codec,
4495     }
4496     }
4497    
4498     +/* update mute-LED according to the speaker mute state via COEF bit */
4499     +static void alc_fixup_mute_led_coefbit_hook(void *private_data, int enabled)
4500     +{
4501     + struct hda_codec *codec = private_data;
4502     + struct alc_spec *spec = codec->spec;
4503     +
4504     + if (spec->mute_led_polarity)
4505     + enabled = !enabled;
4506     +
4507     + /* temporarily power up/down for setting COEF bit */
4508     + enabled ? alc_update_coef_idx(codec, spec->mute_led_coef_idx,
4509     + spec->mute_led_coefbit_mask, spec->mute_led_coefbit_off) :
4510     + alc_update_coef_idx(codec, spec->mute_led_coef_idx,
4511     + spec->mute_led_coefbit_mask, spec->mute_led_coefbit_on);
4512     +}
4513     +
4514     +static void alc285_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
4515     + const struct hda_fixup *fix,
4516     + int action)
4517     +{
4518     + struct alc_spec *spec = codec->spec;
4519     +
4520     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4521     + spec->mute_led_polarity = 0;
4522     + spec->mute_led_coef_idx = 0x0b;
4523     + spec->mute_led_coefbit_mask = 1<<3;
4524     + spec->mute_led_coefbit_on = 1<<3;
4525     + spec->mute_led_coefbit_off = 0;
4526     + spec->gen.vmaster_mute.hook = alc_fixup_mute_led_coefbit_hook;
4527     + spec->gen.vmaster_mute_enum = 1;
4528     + }
4529     +}
4530     +
4531     +static void alc236_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
4532     + const struct hda_fixup *fix,
4533     + int action)
4534     +{
4535     + struct alc_spec *spec = codec->spec;
4536     +
4537     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4538     + spec->mute_led_polarity = 0;
4539     + spec->mute_led_coef_idx = 0x34;
4540     + spec->mute_led_coefbit_mask = 1<<5;
4541     + spec->mute_led_coefbit_on = 0;
4542     + spec->mute_led_coefbit_off = 1<<5;
4543     + spec->gen.vmaster_mute.hook = alc_fixup_mute_led_coefbit_hook;
4544     + spec->gen.vmaster_mute_enum = 1;
4545     + }
4546     +}
4547     +
4548     +/* turn on/off mic-mute LED per capture hook by coef bit */
4549     +static void alc_hp_cap_micmute_update(struct hda_codec *codec)
4550     +{
4551     + struct alc_spec *spec = codec->spec;
4552     +
4553     + if (spec->gen.micmute_led.led_value)
4554     + alc_update_coef_idx(codec, spec->mic_led_coef_idx,
4555     + spec->mic_led_coefbit_mask, spec->mic_led_coefbit_on);
4556     + else
4557     + alc_update_coef_idx(codec, spec->mic_led_coef_idx,
4558     + spec->mic_led_coefbit_mask, spec->mic_led_coefbit_off);
4559     +}
4560     +
4561     +static void alc285_fixup_hp_coef_micmute_led(struct hda_codec *codec,
4562     + const struct hda_fixup *fix, int action)
4563     +{
4564     + struct alc_spec *spec = codec->spec;
4565     +
4566     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4567     + spec->mic_led_coef_idx = 0x19;
4568     + spec->mic_led_coefbit_mask = 1<<13;
4569     + spec->mic_led_coefbit_on = 1<<13;
4570     + spec->mic_led_coefbit_off = 0;
4571     + snd_hda_gen_add_micmute_led(codec, alc_hp_cap_micmute_update);
4572     + }
4573     +}
4574     +
4575     +static void alc236_fixup_hp_coef_micmute_led(struct hda_codec *codec,
4576     + const struct hda_fixup *fix, int action)
4577     +{
4578     + struct alc_spec *spec = codec->spec;
4579     +
4580     + if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4581     + spec->mic_led_coef_idx = 0x35;
4582     + spec->mic_led_coefbit_mask = 3<<2;
4583     + spec->mic_led_coefbit_on = 2<<2;
4584     + spec->mic_led_coefbit_off = 1<<2;
4585     + snd_hda_gen_add_micmute_led(codec, alc_hp_cap_micmute_update);
4586     + }
4587     +}
4588     +
4589     +static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
4590     + const struct hda_fixup *fix, int action)
4591     +{
4592     + alc285_fixup_hp_mute_led_coefbit(codec, fix, action);
4593     + alc285_fixup_hp_coef_micmute_led(codec, fix, action);
4594     +}
4595     +
4596     +static void alc236_fixup_hp_mute_led(struct hda_codec *codec,
4597     + const struct hda_fixup *fix, int action)
4598     +{
4599     + alc236_fixup_hp_mute_led_coefbit(codec, fix, action);
4600     + alc236_fixup_hp_coef_micmute_led(codec, fix, action);
4601     +}
4602     +
4603     #if IS_REACHABLE(CONFIG_INPUT)
4604     static void gpio2_mic_hotkey_event(struct hda_codec *codec,
4605     struct hda_jack_callback *event)
4606     @@ -5371,7 +5488,7 @@ static void alc_fixup_tpt470_dock(struct hda_codec *codec,
4607     * the speaker output becomes too low by some reason on Thinkpads with
4608     * ALC298 codec
4609     */
4610     - static hda_nid_t preferred_pairs[] = {
4611     + static const hda_nid_t preferred_pairs[] = {
4612     0x14, 0x03, 0x17, 0x02, 0x21, 0x02,
4613     0
4614     };
4615     @@ -5632,9 +5749,9 @@ static void alc290_fixup_mono_speakers(struct hda_codec *codec,
4616     /* DAC node 0x03 is giving mono output. We therefore want to
4617     make sure 0x14 (front speaker) and 0x15 (headphones) use the
4618     stereo DAC, while leaving 0x17 (bass speaker) for node 0x03. */
4619     - hda_nid_t conn1[2] = { 0x0c };
4620     - snd_hda_override_conn_list(codec, 0x14, 1, conn1);
4621     - snd_hda_override_conn_list(codec, 0x15, 1, conn1);
4622     + static const hda_nid_t conn1[] = { 0x0c };
4623     + snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
4624     + snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn1), conn1);
4625     }
4626     }
4627    
4628     @@ -5649,8 +5766,8 @@ static void alc298_fixup_speaker_volume(struct hda_codec *codec,
4629     Pin Complex), since Node 0x02 has Amp-out caps, we can adjust
4630     speaker's volume now. */
4631    
4632     - hda_nid_t conn1[1] = { 0x0c };
4633     - snd_hda_override_conn_list(codec, 0x17, 1, conn1);
4634     + static const hda_nid_t conn1[] = { 0x0c };
4635     + snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn1), conn1);
4636     }
4637     }
4638    
4639     @@ -5659,8 +5776,8 @@ static void alc295_fixup_disable_dac3(struct hda_codec *codec,
4640     const struct hda_fixup *fix, int action)
4641     {
4642     if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4643     - hda_nid_t conn[2] = { 0x02, 0x03 };
4644     - snd_hda_override_conn_list(codec, 0x17, 2, conn);
4645     + static const hda_nid_t conn[] = { 0x02, 0x03 };
4646     + snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
4647     }
4648     }
4649    
4650     @@ -5669,8 +5786,8 @@ static void alc285_fixup_speaker2_to_dac1(struct hda_codec *codec,
4651     const struct hda_fixup *fix, int action)
4652     {
4653     if (action == HDA_FIXUP_ACT_PRE_PROBE) {
4654     - hda_nid_t conn[1] = { 0x02 };
4655     - snd_hda_override_conn_list(codec, 0x17, 1, conn);
4656     + static const hda_nid_t conn[] = { 0x02 };
4657     + snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
4658     }
4659     }
4660    
4661     @@ -5757,7 +5874,7 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec,
4662     const struct hda_fixup *fix, int action)
4663     {
4664     struct alc_spec *spec = codec->spec;
4665     - static hda_nid_t preferred_pairs[] = {
4666     + static const hda_nid_t preferred_pairs[] = {
4667     0x21, 0x03, 0x1b, 0x03, 0x16, 0x02,
4668     0
4669     };
4670     @@ -5980,6 +6097,10 @@ enum {
4671     ALC294_FIXUP_ASUS_HPE,
4672     ALC294_FIXUP_ASUS_COEF_1B,
4673     ALC285_FIXUP_HP_GPIO_LED,
4674     + ALC285_FIXUP_HP_MUTE_LED,
4675     + ALC236_FIXUP_HP_MUTE_LED,
4676     + ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
4677     + ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
4678     };
4679    
4680     static const struct hda_fixup alc269_fixups[] = {
4681     @@ -7128,6 +7249,30 @@ static const struct hda_fixup alc269_fixups[] = {
4682     .type = HDA_FIXUP_FUNC,
4683     .v.func = alc285_fixup_hp_gpio_led,
4684     },
4685     + [ALC285_FIXUP_HP_MUTE_LED] = {
4686     + .type = HDA_FIXUP_FUNC,
4687     + .v.func = alc285_fixup_hp_mute_led,
4688     + },
4689     + [ALC236_FIXUP_HP_MUTE_LED] = {
4690     + .type = HDA_FIXUP_FUNC,
4691     + .v.func = alc236_fixup_hp_mute_led,
4692     + },
4693     + [ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = {
4694     + .type = HDA_FIXUP_VERBS,
4695     + .v.verbs = (const struct hda_verb[]) {
4696     + { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc5 },
4697     + { }
4698     + },
4699     + },
4700     + [ALC295_FIXUP_ASUS_MIC_NO_PRESENCE] = {
4701     + .type = HDA_FIXUP_PINS,
4702     + .v.pins = (const struct hda_pintbl[]) {
4703     + { 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
4704     + { }
4705     + },
4706     + .chained = true,
4707     + .chain_id = ALC269_FIXUP_HEADSET_MODE
4708     + },
4709     };
4710    
4711     static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4712     @@ -7273,6 +7418,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4713     SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
4714     SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
4715     SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_LED),
4716     + SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
4717     + SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
4718     SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
4719     SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
4720     SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
4721     @@ -7293,6 +7440,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4722     SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
4723     SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),
4724     SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
4725     + SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
4726     SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
4727     SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC),
4728     SND_PCI_QUIRK(0x1043, 0x1b11, "ASUS UX431DA", ALC294_FIXUP_ASUS_COEF_1B),
4729     @@ -7321,6 +7469,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4730     SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
4731     SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_HEADSET_MODE),
4732     SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
4733     + SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
4734     + SND_PCI_QUIRK(0x144d, 0xc176, "Samsung Notebook 9 Pro (NP930MBE-K04US)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
4735     SND_PCI_QUIRK(0x144d, 0xc740, "Samsung Ativ book 8 (NP870Z5G)", ALC269_FIXUP_ATIV_BOOK_8),
4736     SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
4737     SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
4738     @@ -7937,6 +8087,18 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
4739     {0x12, 0x90a60130},
4740     {0x17, 0x90170110},
4741     {0x21, 0x03211020}),
4742     + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
4743     + {0x12, 0x90a60120},
4744     + {0x17, 0x90170110},
4745     + {0x21, 0x04211030}),
4746     + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
4747     + {0x12, 0x90a60130},
4748     + {0x17, 0x90170110},
4749     + {0x21, 0x03211020}),
4750     + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
4751     + {0x12, 0x90a60130},
4752     + {0x17, 0x90170110},
4753     + {0x21, 0x03211020}),
4754     SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
4755     {0x14, 0x90170110},
4756     {0x21, 0x04211020}),
4757     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
4758     index 894f3f509e76..4b9300babc7d 100644
4759     --- a/sound/pci/hda/patch_sigmatel.c
4760     +++ b/sound/pci/hda/patch_sigmatel.c
4761     @@ -795,7 +795,7 @@ static int find_mute_led_cfg(struct hda_codec *codec, int default_polarity)
4762     static bool has_builtin_speaker(struct hda_codec *codec)
4763     {
4764     struct sigmatel_spec *spec = codec->spec;
4765     - hda_nid_t *nid_pin;
4766     + const hda_nid_t *nid_pin;
4767     int nids, i;
4768    
4769     if (spec->gen.autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT) {
4770     @@ -2182,7 +2182,7 @@ static void hp_envy_ts_fixup_dac_bind(struct hda_codec *codec,
4771     int action)
4772     {
4773     struct sigmatel_spec *spec = codec->spec;
4774     - static hda_nid_t preferred_pairs[] = {
4775     + static const hda_nid_t preferred_pairs[] = {
4776     0xd, 0x13,
4777     0
4778     };
4779     diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
4780     index 29dcdb8b36db..7ef8f3105cdb 100644
4781     --- a/sound/pci/hda/patch_via.c
4782     +++ b/sound/pci/hda/patch_via.c
4783     @@ -396,7 +396,7 @@ static int via_resume(struct hda_codec *codec)
4784     /* some delay here to make jack detection working (bko#98921) */
4785     msleep(10);
4786     codec->patch_ops.init(codec);
4787     - regcache_sync(codec->core.regmap);
4788     + snd_hda_regmap_sync(codec);
4789     return 0;
4790     }
4791     #endif
4792     @@ -1038,8 +1038,8 @@ static const struct snd_pci_quirk vt2002p_fixups[] = {
4793     */
4794     static void fix_vt1802_connections(struct hda_codec *codec)
4795     {
4796     - static hda_nid_t conn_24[] = { 0x14, 0x1c };
4797     - static hda_nid_t conn_33[] = { 0x1c };
4798     + static const hda_nid_t conn_24[] = { 0x14, 0x1c };
4799     + static const hda_nid_t conn_33[] = { 0x1c };
4800    
4801     snd_hda_override_conn_list(codec, 0x24, ARRAY_SIZE(conn_24), conn_24);
4802     snd_hda_override_conn_list(codec, 0x33, ARRAY_SIZE(conn_33), conn_33);
4803     diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
4804     index 4b0dea7f7669..2654eebd5663 100644
4805     --- a/sound/pci/ice1712/ice1712.c
4806     +++ b/sound/pci/ice1712/ice1712.c
4807     @@ -2360,7 +2360,8 @@ static int snd_ice1712_chip_init(struct snd_ice1712 *ice)
4808     pci_write_config_byte(ice->pci, 0x61, ice->eeprom.data[ICE_EEP1_ACLINK]);
4809     pci_write_config_byte(ice->pci, 0x62, ice->eeprom.data[ICE_EEP1_I2SID]);
4810     pci_write_config_byte(ice->pci, 0x63, ice->eeprom.data[ICE_EEP1_SPDIF]);
4811     - if (ice->eeprom.subvendor != ICE1712_SUBDEVICE_STDSP24) {
4812     + if (ice->eeprom.subvendor != ICE1712_SUBDEVICE_STDSP24 &&
4813     + ice->eeprom.subvendor != ICE1712_SUBDEVICE_STAUDIO_ADCIII) {
4814     ice->gpio.write_mask = ice->eeprom.gpiomask;
4815     ice->gpio.direction = ice->eeprom.gpiodir;
4816     snd_ice1712_write(ice, ICE1712_IREG_GPIO_WRITE_MASK,
4817     diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest
4818     index 144308a757b7..19e9236dec5e 100755
4819     --- a/tools/testing/selftests/ftrace/ftracetest
4820     +++ b/tools/testing/selftests/ftrace/ftracetest
4821     @@ -17,6 +17,7 @@ echo " -v|--verbose Increase verbosity of test messages"
4822     echo " -vv Alias of -v -v (Show all results in stdout)"
4823     echo " -vvv Alias of -v -v -v (Show all commands immediately)"
4824     echo " --fail-unsupported Treat UNSUPPORTED as a failure"
4825     +echo " --fail-unresolved Treat UNRESOLVED as a failure"
4826     echo " -d|--debug Debug mode (trace all shell commands)"
4827     echo " -l|--logdir <dir> Save logs on the <dir>"
4828     echo " If <dir> is -, all logs output in console only"
4829     @@ -112,6 +113,10 @@ parse_opts() { # opts
4830     UNSUPPORTED_RESULT=1
4831     shift 1
4832     ;;
4833     + --fail-unresolved)
4834     + UNRESOLVED_RESULT=1
4835     + shift 1
4836     + ;;
4837     --logdir|-l)
4838     LOG_DIR=$2
4839     shift 2
4840     @@ -176,6 +181,7 @@ KEEP_LOG=0
4841     DEBUG=0
4842     VERBOSE=0
4843     UNSUPPORTED_RESULT=0
4844     +UNRESOLVED_RESULT=0
4845     STOP_FAILURE=0
4846     # Parse command-line options
4847     parse_opts $*
4848     @@ -280,7 +286,7 @@ eval_result() { # sigval
4849     $UNRESOLVED)
4850     prlog " [${color_blue}UNRESOLVED${color_reset}]"
4851     UNRESOLVED_CASES="$UNRESOLVED_CASES $CASENO"
4852     - return 1 # this is a kind of bug.. something happened.
4853     + return $UNRESOLVED_RESULT # depends on use case
4854     ;;
4855     $UNTESTED)
4856     prlog " [${color_blue}UNTESTED${color_reset}]"
4857     diff --git a/tools/testing/selftests/kvm/include/evmcs.h b/tools/testing/selftests/kvm/include/evmcs.h
4858     index 4912d23844bc..e31ac9c5ead0 100644
4859     --- a/tools/testing/selftests/kvm/include/evmcs.h
4860     +++ b/tools/testing/selftests/kvm/include/evmcs.h
4861     @@ -217,8 +217,8 @@ struct hv_enlightened_vmcs {
4862     #define HV_X64_MSR_VP_ASSIST_PAGE_ADDRESS_MASK \
4863     (~((1ull << HV_X64_MSR_VP_ASSIST_PAGE_ADDRESS_SHIFT) - 1))
4864    
4865     -struct hv_enlightened_vmcs *current_evmcs;
4866     -struct hv_vp_assist_page *current_vp_assist;
4867     +extern struct hv_enlightened_vmcs *current_evmcs;
4868     +extern struct hv_vp_assist_page *current_vp_assist;
4869    
4870     int vcpu_enable_evmcs(struct kvm_vm *vm, int vcpu_id);
4871    
4872     diff --git a/tools/testing/selftests/kvm/lib/x86_64/vmx.c b/tools/testing/selftests/kvm/lib/x86_64/vmx.c
4873     index f6ec97b7eaef..8cc4a59ff369 100644
4874     --- a/tools/testing/selftests/kvm/lib/x86_64/vmx.c
4875     +++ b/tools/testing/selftests/kvm/lib/x86_64/vmx.c
4876     @@ -17,6 +17,9 @@
4877    
4878     bool enable_evmcs;
4879    
4880     +struct hv_enlightened_vmcs *current_evmcs;
4881     +struct hv_vp_assist_page *current_vp_assist;
4882     +
4883     struct eptPageTableEntry {
4884     uint64_t readable:1;
4885     uint64_t writable:1;