Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.20/0104-4.20.5-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3281 - (hide annotations) (download)
Mon Mar 4 10:35:52 2019 UTC (5 years, 3 months ago) by niro
File size: 184863 byte(s)
linux-4.20.5
1 niro 3281 diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
2     index 12a5e6e693b6..2a4e63f5122c 100644
3     --- a/Documentation/filesystems/proc.txt
4     +++ b/Documentation/filesystems/proc.txt
5     @@ -496,7 +496,9 @@ manner. The codes are the following:
6    
7     Note that there is no guarantee that every flag and associated mnemonic will
8     be present in all further kernel releases. Things get changed, the flags may
9     -be vanished or the reverse -- new added.
10     +be vanished or the reverse -- new added. Interpretation of their meaning
11     +might change in future as well. So each consumer of these flags has to
12     +follow each specific kernel version for the exact semantic.
13    
14     This file is only present if the CONFIG_MMU kernel configuration option is
15     enabled.
16     diff --git a/Makefile b/Makefile
17     index a056dba5ede0..690f6a9d9f1b 100644
18     --- a/Makefile
19     +++ b/Makefile
20     @@ -1,7 +1,7 @@
21     # SPDX-License-Identifier: GPL-2.0
22     VERSION = 4
23     PATCHLEVEL = 20
24     -SUBLEVEL = 4
25     +SUBLEVEL = 5
26     EXTRAVERSION =
27     NAME = Shy Crocodile
28    
29     @@ -1035,6 +1035,8 @@ ifdef CONFIG_GDB_SCRIPTS
30     endif
31     +$(call if_changed,link-vmlinux)
32    
33     +targets := vmlinux
34     +
35     # Build samples along the rest of the kernel. This needs headers_install.
36     ifdef CONFIG_SAMPLES
37     vmlinux-dirs += samples
38     @@ -1753,13 +1755,12 @@ quiet_cmd_depmod = DEPMOD $(KERNELRELEASE)
39     cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \
40     $(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
41    
42     -# read all saved command lines
43     -cmd_files := $(wildcard .*.cmd)
44     +# read saved command lines for existing targets
45     +existing-targets := $(wildcard $(sort $(targets)))
46    
47     -ifneq ($(cmd_files),)
48     - $(cmd_files): ; # Do not try to update included dependency files
49     - include $(cmd_files)
50     -endif
51     +cmd_files := $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
52     +$(cmd_files): ; # Do not try to update included dependency files
53     +-include $(cmd_files)
54    
55     endif # ifeq ($(config-targets),1)
56     endif # ifeq ($(mixed-targets),1)
57     diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
58     index 6cb9fc7e9382..8978f60779c4 100644
59     --- a/arch/arm64/Makefile
60     +++ b/arch/arm64/Makefile
61     @@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y)
62     # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
63     # for relative relocs, since this leads to better Image compression
64     # with the relocation offsets always being zero.
65     -LDFLAGS_vmlinux += -pie -shared -Bsymbolic \
66     +LDFLAGS_vmlinux += -shared -Bsymbolic -z notext -z norelro \
67     $(call ld-option, --no-apply-dynamic-relocs)
68     endif
69    
70     diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
71     index 6142402c2eb4..08b216c200c9 100644
72     --- a/arch/arm64/include/asm/assembler.h
73     +++ b/arch/arm64/include/asm/assembler.h
74     @@ -377,27 +377,33 @@ alternative_endif
75     * size: size of the region
76     * Corrupts: kaddr, size, tmp1, tmp2
77     */
78     + .macro __dcache_op_workaround_clean_cache, op, kaddr
79     +alternative_if_not ARM64_WORKAROUND_CLEAN_CACHE
80     + dc \op, \kaddr
81     +alternative_else
82     + dc civac, \kaddr
83     +alternative_endif
84     + .endm
85     +
86     .macro dcache_by_line_op op, domain, kaddr, size, tmp1, tmp2
87     dcache_line_size \tmp1, \tmp2
88     add \size, \kaddr, \size
89     sub \tmp2, \tmp1, #1
90     bic \kaddr, \kaddr, \tmp2
91     9998:
92     - .if (\op == cvau || \op == cvac)
93     -alternative_if_not ARM64_WORKAROUND_CLEAN_CACHE
94     - dc \op, \kaddr
95     -alternative_else
96     - dc civac, \kaddr
97     -alternative_endif
98     - .elseif (\op == cvap)
99     -alternative_if ARM64_HAS_DCPOP
100     - sys 3, c7, c12, 1, \kaddr // dc cvap
101     -alternative_else
102     - dc cvac, \kaddr
103     -alternative_endif
104     + .ifc \op, cvau
105     + __dcache_op_workaround_clean_cache \op, \kaddr
106     + .else
107     + .ifc \op, cvac
108     + __dcache_op_workaround_clean_cache \op, \kaddr
109     + .else
110     + .ifc \op, cvap
111     + sys 3, c7, c12, 1, \kaddr // dc cvap
112     .else
113     dc \op, \kaddr
114     .endif
115     + .endif
116     + .endif
117     add \kaddr, \kaddr, \tmp1
118     cmp \kaddr, \size
119     b.lo 9998b
120     diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
121     index f0a5c9531e8b..778af0b7f7fd 100644
122     --- a/arch/arm64/include/asm/memory.h
123     +++ b/arch/arm64/include/asm/memory.h
124     @@ -67,12 +67,17 @@
125     /*
126     * KASAN requires 1/8th of the kernel virtual address space for the shadow
127     * region. KASAN can bloat the stack significantly, so double the (minimum)
128     - * stack size when KASAN is in use.
129     + * stack size when KASAN is in use, and then double it again if KASAN_EXTRA is
130     + * on.
131     */
132     #ifdef CONFIG_KASAN
133     #define KASAN_SHADOW_SCALE_SHIFT 3
134     #define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT))
135     +#ifdef CONFIG_KASAN_EXTRA
136     +#define KASAN_THREAD_SHIFT 2
137     +#else
138     #define KASAN_THREAD_SHIFT 1
139     +#endif /* CONFIG_KASAN_EXTRA */
140     #else
141     #define KASAN_SHADOW_SIZE (0)
142     #define KASAN_THREAD_SHIFT 0
143     diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
144     index 6ad715d67df8..99622e5ad21b 100644
145     --- a/arch/arm64/kernel/cpu_errata.c
146     +++ b/arch/arm64/kernel/cpu_errata.c
147     @@ -135,7 +135,7 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn,
148     const char *hyp_vecs_start,
149     const char *hyp_vecs_end)
150     {
151     - static DEFINE_SPINLOCK(bp_lock);
152     + static DEFINE_RAW_SPINLOCK(bp_lock);
153     int cpu, slot = -1;
154    
155     /*
156     @@ -147,7 +147,7 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn,
157     return;
158     }
159    
160     - spin_lock(&bp_lock);
161     + raw_spin_lock(&bp_lock);
162     for_each_possible_cpu(cpu) {
163     if (per_cpu(bp_hardening_data.fn, cpu) == fn) {
164     slot = per_cpu(bp_hardening_data.hyp_vectors_slot, cpu);
165     @@ -163,7 +163,7 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn,
166    
167     __this_cpu_write(bp_hardening_data.hyp_vectors_slot, slot);
168     __this_cpu_write(bp_hardening_data.fn, fn);
169     - spin_unlock(&bp_lock);
170     + raw_spin_unlock(&bp_lock);
171     }
172     #else
173     #define __smccc_workaround_1_smc_start NULL
174     diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
175     index e213f8e867f6..8a91ac067d44 100644
176     --- a/arch/arm64/kernel/perf_event.c
177     +++ b/arch/arm64/kernel/perf_event.c
178     @@ -1274,6 +1274,7 @@ static struct platform_driver armv8_pmu_driver = {
179     .driver = {
180     .name = ARMV8_PMU_PDEV_NAME,
181     .of_match_table = armv8_pmu_of_device_ids,
182     + .suppress_bind_attrs = true,
183     },
184     .probe = armv8_pmu_device_probe,
185     };
186     diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
187     index 03b00007553d..7fa008374907 100644
188     --- a/arch/arm64/kernel/vmlinux.lds.S
189     +++ b/arch/arm64/kernel/vmlinux.lds.S
190     @@ -99,7 +99,8 @@ SECTIONS
191     *(.discard)
192     *(.discard.*)
193     *(.interp .dynamic)
194     - *(.dynsym .dynstr .hash)
195     + *(.dynsym .dynstr .hash .gnu.hash)
196     + *(.eh_frame)
197     }
198    
199     . = KIMAGE_VADDR + TEXT_OFFSET;
200     @@ -192,12 +193,12 @@ SECTIONS
201    
202     PERCPU_SECTION(L1_CACHE_BYTES)
203    
204     - .rela : ALIGN(8) {
205     + .rela.dyn : ALIGN(8) {
206     *(.rela .rela*)
207     }
208    
209     - __rela_offset = ABSOLUTE(ADDR(.rela) - KIMAGE_VADDR);
210     - __rela_size = SIZEOF(.rela);
211     + __rela_offset = ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
212     + __rela_size = SIZEOF(.rela.dyn);
213    
214     . = ALIGN(SEGMENT_ALIGN);
215     __initdata_end = .;
216     diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S
217     index 0c22ede52f90..a194fd0e837f 100644
218     --- a/arch/arm64/mm/cache.S
219     +++ b/arch/arm64/mm/cache.S
220     @@ -212,6 +212,9 @@ ENDPROC(__dma_clean_area)
221     * - size - size in question
222     */
223     ENTRY(__clean_dcache_area_pop)
224     + alternative_if_not ARM64_HAS_DCPOP
225     + b __clean_dcache_area_poc
226     + alternative_else_nop_endif
227     dcache_by_line_op cvap, sy, x0, x1, x2, x3
228     ret
229     ENDPIPROC(__clean_dcache_area_pop)
230     diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
231     index 63527e585aac..fcb2ca30b6f1 100644
232     --- a/arch/arm64/mm/kasan_init.c
233     +++ b/arch/arm64/mm/kasan_init.c
234     @@ -39,7 +39,7 @@ static phys_addr_t __init kasan_alloc_zeroed_page(int node)
235     {
236     void *p = memblock_alloc_try_nid(PAGE_SIZE, PAGE_SIZE,
237     __pa(MAX_DMA_ADDRESS),
238     - MEMBLOCK_ALLOC_ACCESSIBLE, node);
239     + MEMBLOCK_ALLOC_KASAN, node);
240     return __pa(p);
241     }
242    
243     diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
244     index 6207b41473a0..bfb3d8451c0a 100644
245     --- a/arch/mips/Kconfig
246     +++ b/arch/mips/Kconfig
247     @@ -794,6 +794,7 @@ config SIBYTE_SWARM
248     select SYS_SUPPORTS_HIGHMEM
249     select SYS_SUPPORTS_LITTLE_ENDIAN
250     select ZONE_DMA32 if 64BIT
251     + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI
252    
253     config SIBYTE_LITTLESUR
254     bool "Sibyte BCM91250C2-LittleSur"
255     @@ -814,6 +815,7 @@ config SIBYTE_SENTOSA
256     select SYS_HAS_CPU_SB1
257     select SYS_SUPPORTS_BIG_ENDIAN
258     select SYS_SUPPORTS_LITTLE_ENDIAN
259     + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI
260    
261     config SIBYTE_BIGSUR
262     bool "Sibyte BCM91480B-BigSur"
263     @@ -826,6 +828,7 @@ config SIBYTE_BIGSUR
264     select SYS_SUPPORTS_HIGHMEM
265     select SYS_SUPPORTS_LITTLE_ENDIAN
266     select ZONE_DMA32 if 64BIT
267     + select SWIOTLB if ARCH_DMA_ADDR_T_64BIT && PCI
268    
269     config SNI_RM
270     bool "SNI RM200/300/400"
271     diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h
272     index dacbdb84516a..532b49b1dbb3 100644
273     --- a/arch/mips/include/asm/cpu.h
274     +++ b/arch/mips/include/asm/cpu.h
275     @@ -248,8 +248,9 @@
276     #define PRID_REV_LOONGSON3A_R1 0x0005
277     #define PRID_REV_LOONGSON3B_R1 0x0006
278     #define PRID_REV_LOONGSON3B_R2 0x0007
279     -#define PRID_REV_LOONGSON3A_R2 0x0008
280     +#define PRID_REV_LOONGSON3A_R2_0 0x0008
281     #define PRID_REV_LOONGSON3A_R3_0 0x0009
282     +#define PRID_REV_LOONGSON3A_R2_1 0x000c
283     #define PRID_REV_LOONGSON3A_R3_1 0x000d
284    
285     /*
286     diff --git a/arch/mips/include/asm/mach-loongson64/kernel-entry-init.h b/arch/mips/include/asm/mach-loongson64/kernel-entry-init.h
287     index cbac603ced19..b5e288a12dfe 100644
288     --- a/arch/mips/include/asm/mach-loongson64/kernel-entry-init.h
289     +++ b/arch/mips/include/asm/mach-loongson64/kernel-entry-init.h
290     @@ -31,7 +31,7 @@
291     /* Enable STFill Buffer */
292     mfc0 t0, CP0_PRID
293     andi t0, (PRID_IMP_MASK | PRID_REV_MASK)
294     - slti t0, (PRID_IMP_LOONGSON_64 | PRID_REV_LOONGSON3A_R2)
295     + slti t0, (PRID_IMP_LOONGSON_64 | PRID_REV_LOONGSON3A_R2_0)
296     bnez t0, 1f
297     mfc0 t0, CP0_CONFIG6
298     or t0, 0x100
299     @@ -60,7 +60,7 @@
300     /* Enable STFill Buffer */
301     mfc0 t0, CP0_PRID
302     andi t0, (PRID_IMP_MASK | PRID_REV_MASK)
303     - slti t0, (PRID_IMP_LOONGSON_64 | PRID_REV_LOONGSON3A_R2)
304     + slti t0, (PRID_IMP_LOONGSON_64 | PRID_REV_LOONGSON3A_R2_0)
305     bnez t0, 1f
306     mfc0 t0, CP0_CONFIG6
307     or t0, 0x100
308     diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
309     index d535fc706a8b..f70cf6447cfb 100644
310     --- a/arch/mips/kernel/cpu-probe.c
311     +++ b/arch/mips/kernel/cpu-probe.c
312     @@ -1843,7 +1843,8 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
313     switch (c->processor_id & PRID_IMP_MASK) {
314     case PRID_IMP_LOONGSON_64: /* Loongson-2/3 */
315     switch (c->processor_id & PRID_REV_MASK) {
316     - case PRID_REV_LOONGSON3A_R2:
317     + case PRID_REV_LOONGSON3A_R2_0:
318     + case PRID_REV_LOONGSON3A_R2_1:
319     c->cputype = CPU_LOONGSON3;
320     __cpu_name[cpu] = "ICT Loongson-3";
321     set_elf_platform(cpu, "loongson3a");
322     diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c
323     index 046846999efd..909b7a87c89c 100644
324     --- a/arch/mips/kernel/idle.c
325     +++ b/arch/mips/kernel/idle.c
326     @@ -183,7 +183,7 @@ void __init check_wait(void)
327     cpu_wait = r4k_wait;
328     break;
329     case CPU_LOONGSON3:
330     - if ((c->processor_id & PRID_REV_MASK) >= PRID_REV_LOONGSON3A_R2)
331     + if ((c->processor_id & PRID_REV_MASK) >= PRID_REV_LOONGSON3A_R2_0)
332     cpu_wait = r4k_wait;
333     break;
334    
335     diff --git a/arch/mips/loongson64/common/env.c b/arch/mips/loongson64/common/env.c
336     index 8f68ee02a8c2..72e5f8fb2b35 100644
337     --- a/arch/mips/loongson64/common/env.c
338     +++ b/arch/mips/loongson64/common/env.c
339     @@ -197,7 +197,8 @@ void __init prom_init_env(void)
340     cpu_clock_freq = 797000000;
341     break;
342     case PRID_REV_LOONGSON3A_R1:
343     - case PRID_REV_LOONGSON3A_R2:
344     + case PRID_REV_LOONGSON3A_R2_0:
345     + case PRID_REV_LOONGSON3A_R2_1:
346     case PRID_REV_LOONGSON3A_R3_0:
347     case PRID_REV_LOONGSON3A_R3_1:
348     cpu_clock_freq = 900000000;
349     diff --git a/arch/mips/loongson64/loongson-3/smp.c b/arch/mips/loongson64/loongson-3/smp.c
350     index b5c1e0aa955e..8fba0aa48bf4 100644
351     --- a/arch/mips/loongson64/loongson-3/smp.c
352     +++ b/arch/mips/loongson64/loongson-3/smp.c
353     @@ -682,7 +682,8 @@ void play_dead(void)
354     play_dead_at_ckseg1 =
355     (void *)CKSEG1ADDR((unsigned long)loongson3a_r1_play_dead);
356     break;
357     - case PRID_REV_LOONGSON3A_R2:
358     + case PRID_REV_LOONGSON3A_R2_0:
359     + case PRID_REV_LOONGSON3A_R2_1:
360     case PRID_REV_LOONGSON3A_R3_0:
361     case PRID_REV_LOONGSON3A_R3_1:
362     play_dead_at_ckseg1 =
363     diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
364     index 2a6ad461286f..96d666a0f4a0 100644
365     --- a/arch/mips/mm/c-r4k.c
366     +++ b/arch/mips/mm/c-r4k.c
367     @@ -1381,7 +1381,7 @@ static void probe_pcache(void)
368     c->dcache.ways *
369     c->dcache.linesz;
370     c->dcache.waybit = 0;
371     - if ((prid & PRID_REV_MASK) >= PRID_REV_LOONGSON3A_R2)
372     + if ((prid & PRID_REV_MASK) >= PRID_REV_LOONGSON3A_R2_0)
373     c->options |= MIPS_CPU_PREFETCH;
374     break;
375    
376     diff --git a/arch/mips/sibyte/common/Makefile b/arch/mips/sibyte/common/Makefile
377     index b3d6bf23a662..3ef3fb658136 100644
378     --- a/arch/mips/sibyte/common/Makefile
379     +++ b/arch/mips/sibyte/common/Makefile
380     @@ -1,4 +1,5 @@
381     obj-y := cfe.o
382     +obj-$(CONFIG_SWIOTLB) += dma.o
383     obj-$(CONFIG_SIBYTE_BUS_WATCHER) += bus_watcher.o
384     obj-$(CONFIG_SIBYTE_CFE_CONSOLE) += cfe_console.o
385     obj-$(CONFIG_SIBYTE_TBPROF) += sb_tbprof.o
386     diff --git a/arch/mips/sibyte/common/dma.c b/arch/mips/sibyte/common/dma.c
387     new file mode 100644
388     index 000000000000..eb47a94f3583
389     --- /dev/null
390     +++ b/arch/mips/sibyte/common/dma.c
391     @@ -0,0 +1,14 @@
392     +// SPDX-License-Identifier: GPL-2.0+
393     +/*
394     + * DMA support for Broadcom SiByte platforms.
395     + *
396     + * Copyright (c) 2018 Maciej W. Rozycki
397     + */
398     +
399     +#include <linux/swiotlb.h>
400     +#include <asm/bootinfo.h>
401     +
402     +void __init plat_swiotlb_setup(void)
403     +{
404     + swiotlb_init(1);
405     +}
406     diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c
407     index 401d2ecbebc5..f8176ae3a5a7 100644
408     --- a/arch/powerpc/kvm/book3s_hv_nested.c
409     +++ b/arch/powerpc/kvm/book3s_hv_nested.c
410     @@ -1220,6 +1220,8 @@ static long int __kvmhv_nested_page_fault(struct kvm_vcpu *vcpu,
411     return ret;
412     shift = kvmppc_radix_level_to_shift(level);
413     }
414     + /* Align gfn to the start of the page */
415     + gfn = (gpa & ~((1UL << shift) - 1)) >> PAGE_SHIFT;
416    
417     /* 3. Compute the pte we need to insert for nest_gpa -> host r_addr */
418    
419     @@ -1227,6 +1229,9 @@ static long int __kvmhv_nested_page_fault(struct kvm_vcpu *vcpu,
420     perm |= gpte.may_read ? 0UL : _PAGE_READ;
421     perm |= gpte.may_write ? 0UL : _PAGE_WRITE;
422     perm |= gpte.may_execute ? 0UL : _PAGE_EXEC;
423     + /* Only set accessed/dirty (rc) bits if set in host and l1 guest ptes */
424     + perm |= (gpte.rc & _PAGE_ACCESSED) ? 0UL : _PAGE_ACCESSED;
425     + perm |= ((gpte.rc & _PAGE_DIRTY) && writing) ? 0UL : _PAGE_DIRTY;
426     pte = __pte(pte_val(pte) & ~perm);
427    
428     /* What size pte can we insert? */
429     diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
430     index 36b8dc47a3c3..b566203d09c5 100644
431     --- a/arch/powerpc/xmon/xmon.c
432     +++ b/arch/powerpc/xmon/xmon.c
433     @@ -75,6 +75,9 @@ static int xmon_gate;
434     #define xmon_owner 0
435     #endif /* CONFIG_SMP */
436    
437     +#ifdef CONFIG_PPC_PSERIES
438     +static int set_indicator_token = RTAS_UNKNOWN_SERVICE;
439     +#endif
440     static unsigned long in_xmon __read_mostly = 0;
441     static int xmon_on = IS_ENABLED(CONFIG_XMON_DEFAULT);
442    
443     @@ -358,7 +361,6 @@ static inline void disable_surveillance(void)
444     #ifdef CONFIG_PPC_PSERIES
445     /* Since this can't be a module, args should end up below 4GB. */
446     static struct rtas_args args;
447     - int token;
448    
449     /*
450     * At this point we have got all the cpus we can into
451     @@ -367,11 +369,11 @@ static inline void disable_surveillance(void)
452     * If we did try to take rtas.lock there would be a
453     * real possibility of deadlock.
454     */
455     - token = rtas_token("set-indicator");
456     - if (token == RTAS_UNKNOWN_SERVICE)
457     + if (set_indicator_token == RTAS_UNKNOWN_SERVICE)
458     return;
459    
460     - rtas_call_unlocked(&args, token, 3, 1, NULL, SURVEILLANCE_TOKEN, 0, 0);
461     + rtas_call_unlocked(&args, set_indicator_token, 3, 1, NULL,
462     + SURVEILLANCE_TOKEN, 0, 0);
463    
464     #endif /* CONFIG_PPC_PSERIES */
465     }
466     @@ -3688,6 +3690,14 @@ static void xmon_init(int enable)
467     __debugger_iabr_match = xmon_iabr_match;
468     __debugger_break_match = xmon_break_match;
469     __debugger_fault_handler = xmon_fault_handler;
470     +
471     +#ifdef CONFIG_PPC_PSERIES
472     + /*
473     + * Get the token here to avoid trying to get a lock
474     + * during the crash, causing a deadlock.
475     + */
476     + set_indicator_token = rtas_token("set-indicator");
477     +#endif
478     } else {
479     __debugger = NULL;
480     __debugger_ipi = NULL;
481     diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h
482     index 3de69330e6c5..afbc87206886 100644
483     --- a/arch/x86/include/asm/traps.h
484     +++ b/arch/x86/include/asm/traps.h
485     @@ -104,9 +104,9 @@ extern int panic_on_unrecovered_nmi;
486    
487     void math_emulate(struct math_emu_info *);
488     #ifndef CONFIG_X86_32
489     -asmlinkage void smp_thermal_interrupt(void);
490     -asmlinkage void smp_threshold_interrupt(void);
491     -asmlinkage void smp_deferred_error_interrupt(void);
492     +asmlinkage void smp_thermal_interrupt(struct pt_regs *regs);
493     +asmlinkage void smp_threshold_interrupt(struct pt_regs *regs);
494     +asmlinkage void smp_deferred_error_interrupt(struct pt_regs *regs);
495     #endif
496    
497     extern void ist_enter(struct pt_regs *regs);
498     diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
499     index 44272b7107ad..2d0a565fd0bb 100644
500     --- a/arch/x86/kernel/cpu/intel_rdt.c
501     +++ b/arch/x86/kernel/cpu/intel_rdt.c
502     @@ -421,7 +421,7 @@ struct rdt_domain *rdt_find_domain(struct rdt_resource *r, int id,
503     struct list_head *l;
504    
505     if (id < 0)
506     - return ERR_PTR(id);
507     + return ERR_PTR(-ENODEV);
508    
509     list_for_each(l, &r->domains) {
510     d = list_entry(l, struct rdt_domain, list);
511     diff --git a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c
512     index efa4a519f5e5..c8b72aff55e0 100644
513     --- a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c
514     +++ b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c
515     @@ -467,7 +467,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
516    
517     r = &rdt_resources_all[resid];
518     d = rdt_find_domain(r, domid, NULL);
519     - if (!d) {
520     + if (IS_ERR_OR_NULL(d)) {
521     ret = -ENOENT;
522     goto out;
523     }
524     diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
525     index f27b8115ffa2..951c61367688 100644
526     --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
527     +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
528     @@ -1029,7 +1029,7 @@ static int rdt_cdp_peer_get(struct rdt_resource *r, struct rdt_domain *d,
529     * peer RDT CDP resource. Hence the WARN.
530     */
531     _d_cdp = rdt_find_domain(_r_cdp, d->id, NULL);
532     - if (WARN_ON(!_d_cdp)) {
533     + if (WARN_ON(IS_ERR_OR_NULL(_d_cdp))) {
534     _r_cdp = NULL;
535     ret = -EINVAL;
536     }
537     diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
538     index e12454e21b8a..9f915a8791cc 100644
539     --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
540     +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
541     @@ -23,6 +23,7 @@
542     #include <linux/string.h>
543    
544     #include <asm/amd_nb.h>
545     +#include <asm/traps.h>
546     #include <asm/apic.h>
547     #include <asm/mce.h>
548     #include <asm/msr.h>
549     @@ -99,7 +100,7 @@ static u32 smca_bank_addrs[MAX_NR_BANKS][NR_BLOCKS] __ro_after_init =
550     [0 ... MAX_NR_BANKS - 1] = { [0 ... NR_BLOCKS - 1] = -1 }
551     };
552    
553     -const char *smca_get_name(enum smca_bank_types t)
554     +static const char *smca_get_name(enum smca_bank_types t)
555     {
556     if (t >= N_SMCA_BANK_TYPES)
557     return NULL;
558     @@ -824,7 +825,7 @@ static void __log_error(unsigned int bank, u64 status, u64 addr, u64 misc)
559     mce_log(&m);
560     }
561    
562     -asmlinkage __visible void __irq_entry smp_deferred_error_interrupt(void)
563     +asmlinkage __visible void __irq_entry smp_deferred_error_interrupt(struct pt_regs *regs)
564     {
565     entering_irq();
566     trace_deferred_error_apic_entry(DEFERRED_ERROR_VECTOR);
567     diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
568     index 2da67b70ba98..ee229ceee745 100644
569     --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
570     +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
571     @@ -25,6 +25,7 @@
572     #include <linux/cpu.h>
573    
574     #include <asm/processor.h>
575     +#include <asm/traps.h>
576     #include <asm/apic.h>
577     #include <asm/mce.h>
578     #include <asm/msr.h>
579     @@ -390,7 +391,7 @@ static void unexpected_thermal_interrupt(void)
580    
581     static void (*smp_thermal_vector)(void) = unexpected_thermal_interrupt;
582    
583     -asmlinkage __visible void __irq_entry smp_thermal_interrupt(struct pt_regs *r)
584     +asmlinkage __visible void __irq_entry smp_thermal_interrupt(struct pt_regs *regs)
585     {
586     entering_irq();
587     trace_thermal_apic_entry(THERMAL_APIC_VECTOR);
588     diff --git a/arch/x86/kernel/cpu/mcheck/threshold.c b/arch/x86/kernel/cpu/mcheck/threshold.c
589     index 2b584b319eff..c21e0a1efd0f 100644
590     --- a/arch/x86/kernel/cpu/mcheck/threshold.c
591     +++ b/arch/x86/kernel/cpu/mcheck/threshold.c
592     @@ -6,6 +6,7 @@
593     #include <linux/kernel.h>
594    
595     #include <asm/irq_vectors.h>
596     +#include <asm/traps.h>
597     #include <asm/apic.h>
598     #include <asm/mce.h>
599     #include <asm/trace/irq_vectors.h>
600     @@ -18,7 +19,7 @@ static void default_threshold_interrupt(void)
601    
602     void (*mce_threshold_vector)(void) = default_threshold_interrupt;
603    
604     -asmlinkage __visible void __irq_entry smp_threshold_interrupt(void)
605     +asmlinkage __visible void __irq_entry smp_threshold_interrupt(struct pt_regs *regs)
606     {
607     entering_irq();
608     trace_threshold_apic_entry(THRESHOLD_APIC_VECTOR);
609     diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
610     index a9134d1910b9..ccd1f2a8e557 100644
611     --- a/arch/x86/kernel/smpboot.c
612     +++ b/arch/x86/kernel/smpboot.c
613     @@ -1347,7 +1347,7 @@ void __init calculate_max_logical_packages(void)
614     * extrapolate the boot cpu's data to all packages.
615     */
616     ncpus = cpu_data(0).booted_cores * topology_max_smt_threads();
617     - __max_logical_packages = DIV_ROUND_UP(nr_cpu_ids, ncpus);
618     + __max_logical_packages = DIV_ROUND_UP(total_cpus, ncpus);
619     pr_info("Max logical packages: %u\n", __max_logical_packages);
620     }
621    
622     diff --git a/crypto/ecc.c b/crypto/ecc.c
623     index 8facafd67802..adcce310f646 100644
624     --- a/crypto/ecc.c
625     +++ b/crypto/ecc.c
626     @@ -842,15 +842,23 @@ static void xycz_add_c(u64 *x1, u64 *y1, u64 *x2, u64 *y2, u64 *curve_prime,
627    
628     static void ecc_point_mult(struct ecc_point *result,
629     const struct ecc_point *point, const u64 *scalar,
630     - u64 *initial_z, u64 *curve_prime,
631     + u64 *initial_z, const struct ecc_curve *curve,
632     unsigned int ndigits)
633     {
634     /* R0 and R1 */
635     u64 rx[2][ECC_MAX_DIGITS];
636     u64 ry[2][ECC_MAX_DIGITS];
637     u64 z[ECC_MAX_DIGITS];
638     + u64 sk[2][ECC_MAX_DIGITS];
639     + u64 *curve_prime = curve->p;
640     int i, nb;
641     - int num_bits = vli_num_bits(scalar, ndigits);
642     + int num_bits;
643     + int carry;
644     +
645     + carry = vli_add(sk[0], scalar, curve->n, ndigits);
646     + vli_add(sk[1], sk[0], curve->n, ndigits);
647     + scalar = sk[!carry];
648     + num_bits = sizeof(u64) * ndigits * 8 + 1;
649    
650     vli_set(rx[1], point->x, ndigits);
651     vli_set(ry[1], point->y, ndigits);
652     @@ -1004,7 +1012,7 @@ int ecc_make_pub_key(unsigned int curve_id, unsigned int ndigits,
653     goto out;
654     }
655    
656     - ecc_point_mult(pk, &curve->g, priv, NULL, curve->p, ndigits);
657     + ecc_point_mult(pk, &curve->g, priv, NULL, curve, ndigits);
658     if (ecc_point_is_zero(pk)) {
659     ret = -EAGAIN;
660     goto err_free_point;
661     @@ -1090,7 +1098,7 @@ int crypto_ecdh_shared_secret(unsigned int curve_id, unsigned int ndigits,
662     goto err_alloc_product;
663     }
664    
665     - ecc_point_mult(product, pk, priv, rand_z, curve->p, ndigits);
666     + ecc_point_mult(product, pk, priv, rand_z, curve, ndigits);
667    
668     ecc_swap_digits(product->x, secret, ndigits);
669    
670     diff --git a/drivers/base/bus.c b/drivers/base/bus.c
671     index 8bfd27ec73d6..585e2e1c9c8f 100644
672     --- a/drivers/base/bus.c
673     +++ b/drivers/base/bus.c
674     @@ -31,6 +31,9 @@ static struct kset *system_kset;
675    
676     #define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr)
677    
678     +#define DRIVER_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
679     + struct driver_attribute driver_attr_##_name = \
680     + __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
681    
682     static int __must_check bus_rescan_devices_helper(struct device *dev,
683     void *data);
684     @@ -195,7 +198,7 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf,
685     bus_put(bus);
686     return err;
687     }
688     -static DRIVER_ATTR_WO(unbind);
689     +static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, S_IWUSR, NULL, unbind_store);
690    
691     /*
692     * Manually attach a device to a driver.
693     @@ -231,7 +234,7 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf,
694     bus_put(bus);
695     return err;
696     }
697     -static DRIVER_ATTR_WO(bind);
698     +static DRIVER_ATTR_IGNORE_LOCKDEP(bind, S_IWUSR, NULL, bind_store);
699    
700     static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf)
701     {
702     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
703     index 7439a7eb50ac..05c8a7ed859c 100644
704     --- a/drivers/bluetooth/btusb.c
705     +++ b/drivers/bluetooth/btusb.c
706     @@ -344,6 +344,7 @@ static const struct usb_device_id blacklist_table[] = {
707     /* Intel Bluetooth devices */
708     { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW },
709     { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW },
710     + { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW },
711     { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR },
712     { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL },
713     { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
714     @@ -2055,6 +2056,35 @@ static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb)
715     return -EILSEQ;
716     }
717    
718     +static bool btusb_setup_intel_new_get_fw_name(struct intel_version *ver,
719     + struct intel_boot_params *params,
720     + char *fw_name, size_t len,
721     + const char *suffix)
722     +{
723     + switch (ver->hw_variant) {
724     + case 0x0b: /* SfP */
725     + case 0x0c: /* WsP */
726     + snprintf(fw_name, len, "intel/ibt-%u-%u.%s",
727     + le16_to_cpu(ver->hw_variant),
728     + le16_to_cpu(params->dev_revid),
729     + suffix);
730     + break;
731     + case 0x11: /* JfP */
732     + case 0x12: /* ThP */
733     + case 0x13: /* HrP */
734     + case 0x14: /* CcP */
735     + snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s",
736     + le16_to_cpu(ver->hw_variant),
737     + le16_to_cpu(ver->hw_revision),
738     + le16_to_cpu(ver->fw_revision),
739     + suffix);
740     + break;
741     + default:
742     + return false;
743     + }
744     + return true;
745     +}
746     +
747     static int btusb_setup_intel_new(struct hci_dev *hdev)
748     {
749     struct btusb_data *data = hci_get_drvdata(hdev);
750     @@ -2106,7 +2136,7 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
751     case 0x11: /* JfP */
752     case 0x12: /* ThP */
753     case 0x13: /* HrP */
754     - case 0x14: /* QnJ, IcP */
755     + case 0x14: /* CcP */
756     break;
757     default:
758     bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
759     @@ -2190,23 +2220,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
760     * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
761     *
762     */
763     - switch (ver.hw_variant) {
764     - case 0x0b: /* SfP */
765     - case 0x0c: /* WsP */
766     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
767     - le16_to_cpu(ver.hw_variant),
768     - le16_to_cpu(params.dev_revid));
769     - break;
770     - case 0x11: /* JfP */
771     - case 0x12: /* ThP */
772     - case 0x13: /* HrP */
773     - case 0x14: /* QnJ, IcP */
774     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.sfi",
775     - le16_to_cpu(ver.hw_variant),
776     - le16_to_cpu(ver.hw_revision),
777     - le16_to_cpu(ver.fw_revision));
778     - break;
779     - default:
780     + err = btusb_setup_intel_new_get_fw_name(&ver, &params, fwname,
781     + sizeof(fwname), "sfi");
782     + if (!err) {
783     bt_dev_err(hdev, "Unsupported Intel firmware naming");
784     return -EINVAL;
785     }
786     @@ -2222,23 +2238,9 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
787     /* Save the DDC file name for later use to apply once the firmware
788     * downloading is done.
789     */
790     - switch (ver.hw_variant) {
791     - case 0x0b: /* SfP */
792     - case 0x0c: /* WsP */
793     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
794     - le16_to_cpu(ver.hw_variant),
795     - le16_to_cpu(params.dev_revid));
796     - break;
797     - case 0x11: /* JfP */
798     - case 0x12: /* ThP */
799     - case 0x13: /* HrP */
800     - case 0x14: /* QnJ, IcP */
801     - snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.ddc",
802     - le16_to_cpu(ver.hw_variant),
803     - le16_to_cpu(ver.hw_revision),
804     - le16_to_cpu(ver.fw_revision));
805     - break;
806     - default:
807     + err = btusb_setup_intel_new_get_fw_name(&ver, &params, fwname,
808     + sizeof(fwname), "ddc");
809     + if (!err) {
810     bt_dev_err(hdev, "Unsupported Intel firmware naming");
811     return -EINVAL;
812     }
813     diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
814     index a74ce885b541..c518659b4d9f 100644
815     --- a/drivers/char/ipmi/ipmi_msghandler.c
816     +++ b/drivers/char/ipmi/ipmi_msghandler.c
817     @@ -32,6 +32,7 @@
818     #include <linux/moduleparam.h>
819     #include <linux/workqueue.h>
820     #include <linux/uuid.h>
821     +#include <linux/nospec.h>
822    
823     #define IPMI_DRIVER_VERSION "39.2"
824    
825     @@ -62,7 +63,8 @@ static void ipmi_debug_msg(const char *title, unsigned char *data,
826     { }
827     #endif
828    
829     -static int initialized;
830     +static bool initialized;
831     +static bool drvregistered;
832    
833     enum ipmi_panic_event_op {
834     IPMI_SEND_PANIC_EVENT_NONE,
835     @@ -612,7 +614,7 @@ static DEFINE_MUTEX(ipmidriver_mutex);
836    
837     static LIST_HEAD(ipmi_interfaces);
838     static DEFINE_MUTEX(ipmi_interfaces_mutex);
839     -DEFINE_STATIC_SRCU(ipmi_interfaces_srcu);
840     +struct srcu_struct ipmi_interfaces_srcu;
841    
842     /*
843     * List of watchers that want to know when smi's are added and deleted.
844     @@ -720,7 +722,15 @@ struct watcher_entry {
845     int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher)
846     {
847     struct ipmi_smi *intf;
848     - int index;
849     + int index, rv;
850     +
851     + /*
852     + * Make sure the driver is actually initialized, this handles
853     + * problems with initialization order.
854     + */
855     + rv = ipmi_init_msghandler();
856     + if (rv)
857     + return rv;
858    
859     mutex_lock(&smi_watchers_mutex);
860    
861     @@ -884,7 +894,7 @@ static int deliver_response(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
862    
863     if (user) {
864     user->handler->ipmi_recv_hndl(msg, user->handler_data);
865     - release_ipmi_user(msg->user, index);
866     + release_ipmi_user(user, index);
867     } else {
868     /* User went away, give up. */
869     ipmi_free_recv_msg(msg);
870     @@ -1076,7 +1086,7 @@ int ipmi_create_user(unsigned int if_num,
871     {
872     unsigned long flags;
873     struct ipmi_user *new_user;
874     - int rv = 0, index;
875     + int rv, index;
876     struct ipmi_smi *intf;
877    
878     /*
879     @@ -1094,18 +1104,9 @@ int ipmi_create_user(unsigned int if_num,
880     * Make sure the driver is actually initialized, this handles
881     * problems with initialization order.
882     */
883     - if (!initialized) {
884     - rv = ipmi_init_msghandler();
885     - if (rv)
886     - return rv;
887     -
888     - /*
889     - * The init code doesn't return an error if it was turned
890     - * off, but it won't initialize. Check that.
891     - */
892     - if (!initialized)
893     - return -ENODEV;
894     - }
895     + rv = ipmi_init_msghandler();
896     + if (rv)
897     + return rv;
898    
899     new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
900     if (!new_user)
901     @@ -1183,6 +1184,7 @@ EXPORT_SYMBOL(ipmi_get_smi_info);
902     static void free_user(struct kref *ref)
903     {
904     struct ipmi_user *user = container_of(ref, struct ipmi_user, refcount);
905     + cleanup_srcu_struct(&user->release_barrier);
906     kfree(user);
907     }
908    
909     @@ -1259,7 +1261,6 @@ int ipmi_destroy_user(struct ipmi_user *user)
910     {
911     _ipmi_destroy_user(user);
912    
913     - cleanup_srcu_struct(&user->release_barrier);
914     kref_put(&user->refcount, free_user);
915    
916     return 0;
917     @@ -1298,10 +1299,12 @@ int ipmi_set_my_address(struct ipmi_user *user,
918     if (!user)
919     return -ENODEV;
920    
921     - if (channel >= IPMI_MAX_CHANNELS)
922     + if (channel >= IPMI_MAX_CHANNELS) {
923     rv = -EINVAL;
924     - else
925     + } else {
926     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
927     user->intf->addrinfo[channel].address = address;
928     + }
929     release_ipmi_user(user, index);
930    
931     return rv;
932     @@ -1318,10 +1321,12 @@ int ipmi_get_my_address(struct ipmi_user *user,
933     if (!user)
934     return -ENODEV;
935    
936     - if (channel >= IPMI_MAX_CHANNELS)
937     + if (channel >= IPMI_MAX_CHANNELS) {
938     rv = -EINVAL;
939     - else
940     + } else {
941     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
942     *address = user->intf->addrinfo[channel].address;
943     + }
944     release_ipmi_user(user, index);
945    
946     return rv;
947     @@ -1338,10 +1343,12 @@ int ipmi_set_my_LUN(struct ipmi_user *user,
948     if (!user)
949     return -ENODEV;
950    
951     - if (channel >= IPMI_MAX_CHANNELS)
952     + if (channel >= IPMI_MAX_CHANNELS) {
953     rv = -EINVAL;
954     - else
955     + } else {
956     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
957     user->intf->addrinfo[channel].lun = LUN & 0x3;
958     + }
959     release_ipmi_user(user, index);
960    
961     return rv;
962     @@ -1358,10 +1365,12 @@ int ipmi_get_my_LUN(struct ipmi_user *user,
963     if (!user)
964     return -ENODEV;
965    
966     - if (channel >= IPMI_MAX_CHANNELS)
967     + if (channel >= IPMI_MAX_CHANNELS) {
968     rv = -EINVAL;
969     - else
970     + } else {
971     + channel = array_index_nospec(channel, IPMI_MAX_CHANNELS);
972     *address = user->intf->addrinfo[channel].lun;
973     + }
974     release_ipmi_user(user, index);
975    
976     return rv;
977     @@ -2184,6 +2193,7 @@ static int check_addr(struct ipmi_smi *intf,
978     {
979     if (addr->channel >= IPMI_MAX_CHANNELS)
980     return -EINVAL;
981     + addr->channel = array_index_nospec(addr->channel, IPMI_MAX_CHANNELS);
982     *lun = intf->addrinfo[addr->channel].lun;
983     *saddr = intf->addrinfo[addr->channel].address;
984     return 0;
985     @@ -3291,17 +3301,9 @@ int ipmi_register_smi(const struct ipmi_smi_handlers *handlers,
986     * Make sure the driver is actually initialized, this handles
987     * problems with initialization order.
988     */
989     - if (!initialized) {
990     - rv = ipmi_init_msghandler();
991     - if (rv)
992     - return rv;
993     - /*
994     - * The init code doesn't return an error if it was turned
995     - * off, but it won't initialize. Check that.
996     - */
997     - if (!initialized)
998     - return -ENODEV;
999     - }
1000     + rv = ipmi_init_msghandler();
1001     + if (rv)
1002     + return rv;
1003    
1004     intf = kzalloc(sizeof(*intf), GFP_KERNEL);
1005     if (!intf)
1006     @@ -5017,6 +5019,22 @@ static int panic_event(struct notifier_block *this,
1007     return NOTIFY_DONE;
1008     }
1009    
1010     +/* Must be called with ipmi_interfaces_mutex held. */
1011     +static int ipmi_register_driver(void)
1012     +{
1013     + int rv;
1014     +
1015     + if (drvregistered)
1016     + return 0;
1017     +
1018     + rv = driver_register(&ipmidriver.driver);
1019     + if (rv)
1020     + pr_err("Could not register IPMI driver\n");
1021     + else
1022     + drvregistered = true;
1023     + return rv;
1024     +}
1025     +
1026     static struct notifier_block panic_block = {
1027     .notifier_call = panic_event,
1028     .next = NULL,
1029     @@ -5027,66 +5045,75 @@ static int ipmi_init_msghandler(void)
1030     {
1031     int rv;
1032    
1033     + mutex_lock(&ipmi_interfaces_mutex);
1034     + rv = ipmi_register_driver();
1035     + if (rv)
1036     + goto out;
1037     if (initialized)
1038     - return 0;
1039     -
1040     - rv = driver_register(&ipmidriver.driver);
1041     - if (rv) {
1042     - pr_err("Could not register IPMI driver\n");
1043     - return rv;
1044     - }
1045     + goto out;
1046    
1047     - pr_info("version " IPMI_DRIVER_VERSION "\n");
1048     + init_srcu_struct(&ipmi_interfaces_srcu);
1049    
1050     timer_setup(&ipmi_timer, ipmi_timeout, 0);
1051     mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
1052    
1053     atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
1054    
1055     - initialized = 1;
1056     + initialized = true;
1057    
1058     - return 0;
1059     +out:
1060     + mutex_unlock(&ipmi_interfaces_mutex);
1061     + return rv;
1062     }
1063    
1064     static int __init ipmi_init_msghandler_mod(void)
1065     {
1066     - ipmi_init_msghandler();
1067     - return 0;
1068     + int rv;
1069     +
1070     + pr_info("version " IPMI_DRIVER_VERSION "\n");
1071     +
1072     + mutex_lock(&ipmi_interfaces_mutex);
1073     + rv = ipmi_register_driver();
1074     + mutex_unlock(&ipmi_interfaces_mutex);
1075     +
1076     + return rv;
1077     }
1078    
1079     static void __exit cleanup_ipmi(void)
1080     {
1081     int count;
1082    
1083     - if (!initialized)
1084     - return;
1085     -
1086     - atomic_notifier_chain_unregister(&panic_notifier_list, &panic_block);
1087     + if (initialized) {
1088     + atomic_notifier_chain_unregister(&panic_notifier_list,
1089     + &panic_block);
1090    
1091     - /*
1092     - * This can't be called if any interfaces exist, so no worry
1093     - * about shutting down the interfaces.
1094     - */
1095     + /*
1096     + * This can't be called if any interfaces exist, so no worry
1097     + * about shutting down the interfaces.
1098     + */
1099    
1100     - /*
1101     - * Tell the timer to stop, then wait for it to stop. This
1102     - * avoids problems with race conditions removing the timer
1103     - * here.
1104     - */
1105     - atomic_inc(&stop_operation);
1106     - del_timer_sync(&ipmi_timer);
1107     + /*
1108     + * Tell the timer to stop, then wait for it to stop. This
1109     + * avoids problems with race conditions removing the timer
1110     + * here.
1111     + */
1112     + atomic_inc(&stop_operation);
1113     + del_timer_sync(&ipmi_timer);
1114    
1115     - driver_unregister(&ipmidriver.driver);
1116     + initialized = false;
1117    
1118     - initialized = 0;
1119     + /* Check for buffer leaks. */
1120     + count = atomic_read(&smi_msg_inuse_count);
1121     + if (count != 0)
1122     + pr_warn("SMI message count %d at exit\n", count);
1123     + count = atomic_read(&recv_msg_inuse_count);
1124     + if (count != 0)
1125     + pr_warn("recv message count %d at exit\n", count);
1126    
1127     - /* Check for buffer leaks. */
1128     - count = atomic_read(&smi_msg_inuse_count);
1129     - if (count != 0)
1130     - pr_warn("SMI message count %d at exit\n", count);
1131     - count = atomic_read(&recv_msg_inuse_count);
1132     - if (count != 0)
1133     - pr_warn("recv message count %d at exit\n", count);
1134     + cleanup_srcu_struct(&ipmi_interfaces_srcu);
1135     + }
1136     + if (drvregistered)
1137     + driver_unregister(&ipmidriver.driver);
1138     }
1139     module_exit(cleanup_ipmi);
1140    
1141     diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
1142     index ca9528c4f183..b7a1ae2afaea 100644
1143     --- a/drivers/char/ipmi/ipmi_ssif.c
1144     +++ b/drivers/char/ipmi/ipmi_ssif.c
1145     @@ -632,8 +632,9 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
1146    
1147     /* Remove the multi-part read marker. */
1148     len -= 2;
1149     + data += 2;
1150     for (i = 0; i < len; i++)
1151     - ssif_info->data[i] = data[i+2];
1152     + ssif_info->data[i] = data[i];
1153     ssif_info->multi_len = len;
1154     ssif_info->multi_pos = 1;
1155    
1156     @@ -661,8 +662,19 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
1157     }
1158    
1159     blocknum = data[0];
1160     + len--;
1161     + data++;
1162     +
1163     + if (blocknum != 0xff && len != 31) {
1164     + /* All blocks but the last must have 31 data bytes. */
1165     + result = -EIO;
1166     + if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
1167     + pr_info("Received middle message <31\n");
1168    
1169     - if (ssif_info->multi_len + len - 1 > IPMI_MAX_MSG_LENGTH) {
1170     + goto continue_op;
1171     + }
1172     +
1173     + if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) {
1174     /* Received message too big, abort the operation. */
1175     result = -E2BIG;
1176     if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
1177     @@ -671,16 +683,14 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
1178     goto continue_op;
1179     }
1180    
1181     - /* Remove the blocknum from the data. */
1182     - len--;
1183     for (i = 0; i < len; i++)
1184     - ssif_info->data[i + ssif_info->multi_len] = data[i + 1];
1185     + ssif_info->data[i + ssif_info->multi_len] = data[i];
1186     ssif_info->multi_len += len;
1187     if (blocknum == 0xff) {
1188     /* End of read */
1189     len = ssif_info->multi_len;
1190     data = ssif_info->data;
1191     - } else if (blocknum + 1 != ssif_info->multi_pos) {
1192     + } else if (blocknum != ssif_info->multi_pos) {
1193     /*
1194     * Out of sequence block, just abort. Block
1195     * numbers start at zero for the second block,
1196     @@ -707,6 +717,7 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
1197     }
1198     }
1199    
1200     + continue_op:
1201     if (result < 0) {
1202     ssif_inc_stat(ssif_info, receive_errors);
1203     } else {
1204     @@ -714,8 +725,6 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
1205     ssif_inc_stat(ssif_info, received_message_parts);
1206     }
1207    
1208     -
1209     - continue_op:
1210     if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
1211     pr_info("DONE 1: state = %d, result=%d\n",
1212     ssif_info->ssif_state, result);
1213     diff --git a/drivers/clk/imx/clk-busy.c b/drivers/clk/imx/clk-busy.c
1214     index 99036527eb0d..e695622c5aa5 100644
1215     --- a/drivers/clk/imx/clk-busy.c
1216     +++ b/drivers/clk/imx/clk-busy.c
1217     @@ -154,7 +154,7 @@ static const struct clk_ops clk_busy_mux_ops = {
1218    
1219     struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift,
1220     u8 width, void __iomem *busy_reg, u8 busy_shift,
1221     - const char **parent_names, int num_parents)
1222     + const char * const *parent_names, int num_parents)
1223     {
1224     struct clk_busy_mux *busy;
1225     struct clk *clk;
1226     diff --git a/drivers/clk/imx/clk-fixup-mux.c b/drivers/clk/imx/clk-fixup-mux.c
1227     index c9b327e0a8dd..44817c1b0b88 100644
1228     --- a/drivers/clk/imx/clk-fixup-mux.c
1229     +++ b/drivers/clk/imx/clk-fixup-mux.c
1230     @@ -70,7 +70,7 @@ static const struct clk_ops clk_fixup_mux_ops = {
1231     };
1232    
1233     struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg,
1234     - u8 shift, u8 width, const char **parents,
1235     + u8 shift, u8 width, const char * const *parents,
1236     int num_parents, void (*fixup)(u32 *val))
1237     {
1238     struct clk_fixup_mux *fixup_mux;
1239     diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c
1240     index bbe0c60f4d09..59f6a3e087db 100644
1241     --- a/drivers/clk/imx/clk-imx6q.c
1242     +++ b/drivers/clk/imx/clk-imx6q.c
1243     @@ -508,8 +508,12 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
1244     * lvds1_gate and lvds2_gate are pseudo-gates. Both can be
1245     * independently configured as clock inputs or outputs. We treat
1246     * the "output_enable" bit as a gate, even though it's really just
1247     - * enabling clock output.
1248     + * enabling clock output. Initially the gate bits are cleared, as
1249     + * otherwise the exclusive configuration gets locked in the setup done
1250     + * by software running before the clock driver, with no way to change
1251     + * it.
1252     */
1253     + writel(readl(base + 0x160) & ~0x3c00, base + 0x160);
1254     clk[IMX6QDL_CLK_LVDS1_GATE] = imx_clk_gate_exclusive("lvds1_gate", "lvds1_sel", base + 0x160, 10, BIT(12));
1255     clk[IMX6QDL_CLK_LVDS2_GATE] = imx_clk_gate_exclusive("lvds2_gate", "lvds2_sel", base + 0x160, 11, BIT(13));
1256    
1257     diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h
1258     index 5895e2237b6c..2c377e188281 100644
1259     --- a/drivers/clk/imx/clk.h
1260     +++ b/drivers/clk/imx/clk.h
1261     @@ -63,14 +63,14 @@ struct clk *imx_clk_busy_divider(const char *name, const char *parent_name,
1262    
1263     struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift,
1264     u8 width, void __iomem *busy_reg, u8 busy_shift,
1265     - const char **parent_names, int num_parents);
1266     + const char * const *parent_names, int num_parents);
1267    
1268     struct clk *imx_clk_fixup_divider(const char *name, const char *parent,
1269     void __iomem *reg, u8 shift, u8 width,
1270     void (*fixup)(u32 *val));
1271    
1272     struct clk *imx_clk_fixup_mux(const char *name, void __iomem *reg,
1273     - u8 shift, u8 width, const char **parents,
1274     + u8 shift, u8 width, const char * const *parents,
1275     int num_parents, void (*fixup)(u32 *val));
1276    
1277     static inline struct clk *imx_clk_fixed(const char *name, int rate)
1278     @@ -79,7 +79,8 @@ static inline struct clk *imx_clk_fixed(const char *name, int rate)
1279     }
1280    
1281     static inline struct clk *imx_clk_mux_ldb(const char *name, void __iomem *reg,
1282     - u8 shift, u8 width, const char **parents, int num_parents)
1283     + u8 shift, u8 width, const char * const *parents,
1284     + int num_parents)
1285     {
1286     return clk_register_mux(NULL, name, parents, num_parents,
1287     CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT, reg,
1288     @@ -199,7 +200,8 @@ static inline struct clk *imx_clk_gate4(const char *name, const char *parent,
1289     }
1290    
1291     static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg,
1292     - u8 shift, u8 width, const char **parents, int num_parents)
1293     + u8 shift, u8 width, const char * const *parents,
1294     + int num_parents)
1295     {
1296     return clk_register_mux(NULL, name, parents, num_parents,
1297     CLK_SET_RATE_NO_REPARENT, reg, shift,
1298     @@ -207,7 +209,8 @@ static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg,
1299     }
1300    
1301     static inline struct clk *imx_clk_mux2(const char *name, void __iomem *reg,
1302     - u8 shift, u8 width, const char **parents, int num_parents)
1303     + u8 shift, u8 width, const char * const *parents,
1304     + int num_parents)
1305     {
1306     return clk_register_mux(NULL, name, parents, num_parents,
1307     CLK_SET_RATE_NO_REPARENT | CLK_OPS_PARENT_ENABLE,
1308     @@ -215,8 +218,9 @@ static inline struct clk *imx_clk_mux2(const char *name, void __iomem *reg,
1309     }
1310    
1311     static inline struct clk *imx_clk_mux_flags(const char *name,
1312     - void __iomem *reg, u8 shift, u8 width, const char **parents,
1313     - int num_parents, unsigned long flags)
1314     + void __iomem *reg, u8 shift, u8 width,
1315     + const char * const *parents, int num_parents,
1316     + unsigned long flags)
1317     {
1318     return clk_register_mux(NULL, name, parents, num_parents,
1319     flags | CLK_SET_RATE_NO_REPARENT, reg, shift, width, 0,
1320     diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
1321     index 346b9e165b7a..1d39273d7a04 100644
1322     --- a/drivers/clk/meson/meson8b.c
1323     +++ b/drivers/clk/meson/meson8b.c
1324     @@ -42,6 +42,11 @@ static const struct pll_params_table sys_pll_params_table[] = {
1325     PLL_PARAMS(62, 1),
1326     PLL_PARAMS(63, 1),
1327     PLL_PARAMS(64, 1),
1328     + PLL_PARAMS(65, 1),
1329     + PLL_PARAMS(66, 1),
1330     + PLL_PARAMS(67, 1),
1331     + PLL_PARAMS(68, 1),
1332     + PLL_PARAMS(84, 1),
1333     { /* sentinel */ },
1334     };
1335    
1336     @@ -579,13 +584,14 @@ static struct clk_fixed_factor meson8b_cpu_div3 = {
1337     };
1338    
1339     static const struct clk_div_table cpu_scale_table[] = {
1340     - { .val = 2, .div = 4 },
1341     - { .val = 3, .div = 6 },
1342     - { .val = 4, .div = 8 },
1343     - { .val = 5, .div = 10 },
1344     - { .val = 6, .div = 12 },
1345     - { .val = 7, .div = 14 },
1346     - { .val = 8, .div = 16 },
1347     + { .val = 1, .div = 4 },
1348     + { .val = 2, .div = 6 },
1349     + { .val = 3, .div = 8 },
1350     + { .val = 4, .div = 10 },
1351     + { .val = 5, .div = 12 },
1352     + { .val = 6, .div = 14 },
1353     + { .val = 7, .div = 16 },
1354     + { .val = 8, .div = 18 },
1355     { /* sentinel */ },
1356     };
1357    
1358     diff --git a/drivers/clocksource/timer-integrator-ap.c b/drivers/clocksource/timer-integrator-ap.c
1359     index 76e526f58620..19fb7de4b928 100644
1360     --- a/drivers/clocksource/timer-integrator-ap.c
1361     +++ b/drivers/clocksource/timer-integrator-ap.c
1362     @@ -181,8 +181,7 @@ static int __init integrator_ap_timer_init_of(struct device_node *node)
1363     int irq;
1364     struct clk *clk;
1365     unsigned long rate;
1366     - struct device_node *pri_node;
1367     - struct device_node *sec_node;
1368     + struct device_node *alias_node;
1369    
1370     base = of_io_request_and_map(node, 0, "integrator-timer");
1371     if (IS_ERR(base))
1372     @@ -204,7 +203,18 @@ static int __init integrator_ap_timer_init_of(struct device_node *node)
1373     return err;
1374     }
1375    
1376     - pri_node = of_find_node_by_path(path);
1377     + alias_node = of_find_node_by_path(path);
1378     +
1379     + /*
1380     + * The pointer is used as an identifier not as a pointer, we
1381     + * can drop the refcount on the of__node immediately after
1382     + * getting it.
1383     + */
1384     + of_node_put(alias_node);
1385     +
1386     + if (node == alias_node)
1387     + /* The primary timer lacks IRQ, use as clocksource */
1388     + return integrator_clocksource_init(rate, base);
1389    
1390     err = of_property_read_string(of_aliases,
1391     "arm,timer-secondary", &path);
1392     @@ -213,14 +223,11 @@ static int __init integrator_ap_timer_init_of(struct device_node *node)
1393     return err;
1394     }
1395    
1396     + alias_node = of_find_node_by_path(path);
1397    
1398     - sec_node = of_find_node_by_path(path);
1399     -
1400     - if (node == pri_node)
1401     - /* The primary timer lacks IRQ, use as clocksource */
1402     - return integrator_clocksource_init(rate, base);
1403     + of_node_put(alias_node);
1404    
1405     - if (node == sec_node) {
1406     + if (node == alias_node) {
1407     /* The secondary timer will drive the clock event */
1408     irq = irq_of_parse_and_map(node, 0);
1409     return integrator_clockevent_init(rate, base, irq);
1410     diff --git a/drivers/cpuidle/cpuidle-pseries.c b/drivers/cpuidle/cpuidle-pseries.c
1411     index 9e56bc411061..74c247972bb3 100644
1412     --- a/drivers/cpuidle/cpuidle-pseries.c
1413     +++ b/drivers/cpuidle/cpuidle-pseries.c
1414     @@ -247,7 +247,13 @@ static int pseries_idle_probe(void)
1415     return -ENODEV;
1416    
1417     if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
1418     - if (lppaca_shared_proc(get_lppaca())) {
1419     + /*
1420     + * Use local_paca instead of get_lppaca() since
1421     + * preemption is not disabled, and it is not required in
1422     + * fact, since lppaca_ptr does not need to be the value
1423     + * associated to the current CPU, it can be from any CPU.
1424     + */
1425     + if (lppaca_shared_proc(local_paca->lppaca_ptr)) {
1426     cpuidle_state_table = shared_states;
1427     max_idle_state = ARRAY_SIZE(shared_states);
1428     } else {
1429     diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
1430     index c51627660dbb..d9845099635e 100644
1431     --- a/drivers/firmware/efi/libstub/Makefile
1432     +++ b/drivers/firmware/efi/libstub/Makefile
1433     @@ -9,7 +9,10 @@ cflags-$(CONFIG_X86_32) := -march=i386
1434     cflags-$(CONFIG_X86_64) := -mcmodel=small
1435     cflags-$(CONFIG_X86) += -m$(BITS) -D__KERNEL__ -O2 \
1436     -fPIC -fno-strict-aliasing -mno-red-zone \
1437     - -mno-mmx -mno-sse -fshort-wchar
1438     + -mno-mmx -mno-sse -fshort-wchar \
1439     + -Wno-pointer-sign \
1440     + $(call cc-disable-warning, address-of-packed-member) \
1441     + $(call cc-disable-warning, gnu)
1442    
1443     # arm64 uses the full KBUILD_CFLAGS so it's necessary to explicitly
1444     # disable the stackleak plugin
1445     diff --git a/drivers/fpga/altera-cvp.c b/drivers/fpga/altera-cvp.c
1446     index 610a1558e0ed..d9fa7d4bf11f 100644
1447     --- a/drivers/fpga/altera-cvp.c
1448     +++ b/drivers/fpga/altera-cvp.c
1449     @@ -466,14 +466,6 @@ static int altera_cvp_probe(struct pci_dev *pdev,
1450     if (ret)
1451     goto err_unmap;
1452    
1453     - ret = driver_create_file(&altera_cvp_driver.driver,
1454     - &driver_attr_chkcfg);
1455     - if (ret) {
1456     - dev_err(&pdev->dev, "Can't create sysfs chkcfg file\n");
1457     - fpga_mgr_unregister(mgr);
1458     - goto err_unmap;
1459     - }
1460     -
1461     return 0;
1462    
1463     err_unmap:
1464     @@ -491,7 +483,6 @@ static void altera_cvp_remove(struct pci_dev *pdev)
1465     struct altera_cvp_conf *conf = mgr->priv;
1466     u16 cmd;
1467    
1468     - driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
1469     fpga_mgr_unregister(mgr);
1470     pci_iounmap(pdev, conf->map);
1471     pci_release_region(pdev, CVP_BAR);
1472     @@ -500,7 +491,30 @@ static void altera_cvp_remove(struct pci_dev *pdev)
1473     pci_write_config_word(pdev, PCI_COMMAND, cmd);
1474     }
1475    
1476     -module_pci_driver(altera_cvp_driver);
1477     +static int __init altera_cvp_init(void)
1478     +{
1479     + int ret;
1480     +
1481     + ret = pci_register_driver(&altera_cvp_driver);
1482     + if (ret)
1483     + return ret;
1484     +
1485     + ret = driver_create_file(&altera_cvp_driver.driver,
1486     + &driver_attr_chkcfg);
1487     + if (ret)
1488     + pr_warn("Can't create sysfs chkcfg file\n");
1489     +
1490     + return 0;
1491     +}
1492     +
1493     +static void __exit altera_cvp_exit(void)
1494     +{
1495     + driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
1496     + pci_unregister_driver(&altera_cvp_driver);
1497     +}
1498     +
1499     +module_init(altera_cvp_init);
1500     +module_exit(altera_cvp_exit);
1501    
1502     MODULE_LICENSE("GPL v2");
1503     MODULE_AUTHOR("Anatolij Gustschin <agust@denx.de>");
1504     diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
1505     index 2afd9de84a0d..dc42571e6fdc 100644
1506     --- a/drivers/gpio/gpio-pl061.c
1507     +++ b/drivers/gpio/gpio-pl061.c
1508     @@ -54,6 +54,7 @@ struct pl061 {
1509    
1510     void __iomem *base;
1511     struct gpio_chip gc;
1512     + struct irq_chip irq_chip;
1513     int parent_irq;
1514    
1515     #ifdef CONFIG_PM
1516     @@ -281,15 +282,6 @@ static int pl061_irq_set_wake(struct irq_data *d, unsigned int state)
1517     return irq_set_irq_wake(pl061->parent_irq, state);
1518     }
1519    
1520     -static struct irq_chip pl061_irqchip = {
1521     - .name = "pl061",
1522     - .irq_ack = pl061_irq_ack,
1523     - .irq_mask = pl061_irq_mask,
1524     - .irq_unmask = pl061_irq_unmask,
1525     - .irq_set_type = pl061_irq_type,
1526     - .irq_set_wake = pl061_irq_set_wake,
1527     -};
1528     -
1529     static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
1530     {
1531     struct device *dev = &adev->dev;
1532     @@ -328,6 +320,13 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
1533     /*
1534     * irq_chip support
1535     */
1536     + pl061->irq_chip.name = dev_name(dev);
1537     + pl061->irq_chip.irq_ack = pl061_irq_ack;
1538     + pl061->irq_chip.irq_mask = pl061_irq_mask;
1539     + pl061->irq_chip.irq_unmask = pl061_irq_unmask;
1540     + pl061->irq_chip.irq_set_type = pl061_irq_type;
1541     + pl061->irq_chip.irq_set_wake = pl061_irq_set_wake;
1542     +
1543     writeb(0, pl061->base + GPIOIE); /* disable irqs */
1544     irq = adev->irq[0];
1545     if (irq < 0) {
1546     @@ -336,14 +335,14 @@ static int pl061_probe(struct amba_device *adev, const struct amba_id *id)
1547     }
1548     pl061->parent_irq = irq;
1549    
1550     - ret = gpiochip_irqchip_add(&pl061->gc, &pl061_irqchip,
1551     + ret = gpiochip_irqchip_add(&pl061->gc, &pl061->irq_chip,
1552     0, handle_bad_irq,
1553     IRQ_TYPE_NONE);
1554     if (ret) {
1555     dev_info(&adev->dev, "could not add irqchip\n");
1556     return ret;
1557     }
1558     - gpiochip_set_chained_irqchip(&pl061->gc, &pl061_irqchip,
1559     + gpiochip_set_chained_irqchip(&pl061->gc, &pl061->irq_chip,
1560     irq, pl061_irq_handler);
1561    
1562     amba_set_drvdata(adev, pl061);
1563     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
1564     index 1fc17bf39fed..44ca41837187 100644
1565     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
1566     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
1567     @@ -116,16 +116,16 @@ static int uvd_v4_2_sw_init(void *handle)
1568     if (r)
1569     return r;
1570    
1571     - r = amdgpu_uvd_resume(adev);
1572     - if (r)
1573     - return r;
1574     -
1575     ring = &adev->uvd.inst->ring;
1576     sprintf(ring->name, "uvd");
1577     r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
1578     if (r)
1579     return r;
1580    
1581     + r = amdgpu_uvd_resume(adev);
1582     + if (r)
1583     + return r;
1584     +
1585     r = amdgpu_uvd_entity_init(adev);
1586    
1587     return r;
1588     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
1589     index fde6ad5ac9ab..6bb05ae232b2 100644
1590     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
1591     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
1592     @@ -113,16 +113,16 @@ static int uvd_v5_0_sw_init(void *handle)
1593     if (r)
1594     return r;
1595    
1596     - r = amdgpu_uvd_resume(adev);
1597     - if (r)
1598     - return r;
1599     -
1600     ring = &adev->uvd.inst->ring;
1601     sprintf(ring->name, "uvd");
1602     r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
1603     if (r)
1604     return r;
1605    
1606     + r = amdgpu_uvd_resume(adev);
1607     + if (r)
1608     + return r;
1609     +
1610     r = amdgpu_uvd_entity_init(adev);
1611    
1612     return r;
1613     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
1614     index 7a5b40275e8e..07fd96df4321 100644
1615     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
1616     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
1617     @@ -416,16 +416,16 @@ static int uvd_v6_0_sw_init(void *handle)
1618     DRM_INFO("UVD ENC is disabled\n");
1619     }
1620    
1621     - r = amdgpu_uvd_resume(adev);
1622     - if (r)
1623     - return r;
1624     -
1625     ring = &adev->uvd.inst->ring;
1626     sprintf(ring->name, "uvd");
1627     r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
1628     if (r)
1629     return r;
1630    
1631     + r = amdgpu_uvd_resume(adev);
1632     + if (r)
1633     + return r;
1634     +
1635     if (uvd_v6_0_enc_support(adev)) {
1636     for (i = 0; i < adev->uvd.num_enc_rings; ++i) {
1637     ring = &adev->uvd.inst->ring_enc[i];
1638     diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
1639     index 58b39afcfb86..1ef023a7b8ec 100644
1640     --- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
1641     +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
1642     @@ -447,10 +447,6 @@ static int uvd_v7_0_sw_init(void *handle)
1643     DRM_INFO("PSP loading UVD firmware\n");
1644     }
1645    
1646     - r = amdgpu_uvd_resume(adev);
1647     - if (r)
1648     - return r;
1649     -
1650     for (j = 0; j < adev->uvd.num_uvd_inst; j++) {
1651     if (adev->uvd.harvest_config & (1 << j))
1652     continue;
1653     @@ -482,6 +478,10 @@ static int uvd_v7_0_sw_init(void *handle)
1654     }
1655     }
1656    
1657     + r = amdgpu_uvd_resume(adev);
1658     + if (r)
1659     + return r;
1660     +
1661     r = amdgpu_uvd_entity_init(adev);
1662     if (r)
1663     return r;
1664     diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
1665     index e4ded890b1cb..6edaf11d69aa 100644
1666     --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
1667     +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
1668     @@ -688,6 +688,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
1669     {
1670     uint32_t patched_ihre[KFD_MAX_RING_ENTRY_SIZE];
1671     bool is_patched = false;
1672     + unsigned long flags;
1673    
1674     if (!kfd->init_complete)
1675     return;
1676     @@ -697,7 +698,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
1677     return;
1678     }
1679    
1680     - spin_lock(&kfd->interrupt_lock);
1681     + spin_lock_irqsave(&kfd->interrupt_lock, flags);
1682    
1683     if (kfd->interrupts_active
1684     && interrupt_is_wanted(kfd, ih_ring_entry,
1685     @@ -706,7 +707,7 @@ void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry)
1686     is_patched ? patched_ihre : ih_ring_entry))
1687     queue_work(kfd->ih_wq, &kfd->interrupt_work);
1688    
1689     - spin_unlock(&kfd->interrupt_lock);
1690     + spin_unlock_irqrestore(&kfd->interrupt_lock, flags);
1691     }
1692    
1693     int kgd2kfd_quiesce_mm(struct mm_struct *mm)
1694     diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
1695     index 01fc5717b657..f088ac585978 100644
1696     --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
1697     +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
1698     @@ -75,6 +75,11 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name)
1699     return -EINVAL;
1700     }
1701    
1702     + if (!stream_state) {
1703     + DRM_ERROR("No stream state for CRTC%d\n", crtc->index);
1704     + return -EINVAL;
1705     + }
1706     +
1707     /* When enabling CRC, we should also disable dithering. */
1708     if (source == AMDGPU_DM_PIPE_CRC_SOURCE_AUTO) {
1709     if (dc_stream_configure_crc(stream_state->ctx->dc,
1710     diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c
1711     index dcb3c5530236..cd1ebe57ed59 100644
1712     --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c
1713     +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c
1714     @@ -463,7 +463,7 @@ void dpp1_set_cursor_position(
1715     if (src_y_offset >= (int)param->viewport.height)
1716     cur_en = 0; /* not visible beyond bottom edge*/
1717    
1718     - if (src_y_offset < 0)
1719     + if (src_y_offset + (int)height <= 0)
1720     cur_en = 0; /* not visible beyond top edge*/
1721    
1722     REG_UPDATE(CURSOR0_CONTROL,
1723     diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
1724     index 74132a1f3046..a34f0fdf7be2 100644
1725     --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
1726     +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
1727     @@ -1134,7 +1134,7 @@ void hubp1_cursor_set_position(
1728     if (src_y_offset >= (int)param->viewport.height)
1729     cur_en = 0; /* not visible beyond bottom edge*/
1730    
1731     - if (src_y_offset < 0) //+ (int)hubp->curs_attr.height
1732     + if (src_y_offset + (int)hubp->curs_attr.height <= 0)
1733     cur_en = 0; /* not visible beyond top edge*/
1734    
1735     if (cur_en && REG_READ(CURSOR_SURFACE_ADDRESS) == 0)
1736     diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
1737     index d8b526b7932c..b4e292a56046 100644
1738     --- a/drivers/gpu/drm/drm_atomic_helper.c
1739     +++ b/drivers/gpu/drm/drm_atomic_helper.c
1740     @@ -1445,6 +1445,9 @@ void drm_atomic_helper_wait_for_flip_done(struct drm_device *dev,
1741     DRM_ERROR("[CRTC:%d:%s] flip_done timed out\n",
1742     crtc->base.id, crtc->name);
1743     }
1744     +
1745     + if (old_state->fake_commit)
1746     + complete_all(&old_state->fake_commit->flip_done);
1747     }
1748     EXPORT_SYMBOL(drm_atomic_helper_wait_for_flip_done);
1749    
1750     diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
1751     index 44fe587aaef9..c5bbbd7cb2de 100644
1752     --- a/drivers/gpu/drm/scheduler/sched_main.c
1753     +++ b/drivers/gpu/drm/scheduler/sched_main.c
1754     @@ -60,6 +60,8 @@
1755    
1756     static void drm_sched_process_job(struct dma_fence *f, struct dma_fence_cb *cb);
1757    
1758     +static void drm_sched_expel_job_unlocked(struct drm_sched_job *s_job);
1759     +
1760     /**
1761     * drm_sched_rq_init - initialize a given run queue struct
1762     *
1763     @@ -215,7 +217,7 @@ static void drm_sched_job_finish(struct work_struct *work)
1764    
1765     spin_lock(&sched->job_list_lock);
1766     /* remove job from ring_mirror_list */
1767     - list_del(&s_job->node);
1768     + list_del_init(&s_job->node);
1769     /* queue TDR for next job */
1770     drm_sched_start_timeout(sched);
1771     spin_unlock(&sched->job_list_lock);
1772     @@ -378,6 +380,8 @@ void drm_sched_job_recovery(struct drm_gpu_scheduler *sched)
1773     r);
1774     dma_fence_put(fence);
1775     } else {
1776     + if (s_fence->finished.error < 0)
1777     + drm_sched_expel_job_unlocked(s_job);
1778     drm_sched_process_job(NULL, &s_fence->cb);
1779     }
1780     spin_lock(&sched->job_list_lock);
1781     @@ -567,6 +571,8 @@ static int drm_sched_main(void *param)
1782     r);
1783     dma_fence_put(fence);
1784     } else {
1785     + if (s_fence->finished.error < 0)
1786     + drm_sched_expel_job_unlocked(sched_job);
1787     drm_sched_process_job(NULL, &s_fence->cb);
1788     }
1789    
1790     @@ -575,6 +581,15 @@ static int drm_sched_main(void *param)
1791     return 0;
1792     }
1793    
1794     +static void drm_sched_expel_job_unlocked(struct drm_sched_job *s_job)
1795     +{
1796     + struct drm_gpu_scheduler *sched = s_job->sched;
1797     +
1798     + spin_lock(&sched->job_list_lock);
1799     + list_del_init(&s_job->node);
1800     + spin_unlock(&sched->job_list_lock);
1801     +}
1802     +
1803     /**
1804     * drm_sched_init - Init a gpu scheduler instance
1805     *
1806     diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c
1807     index 53fc83b72a49..5864ac55e275 100644
1808     --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
1809     +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
1810     @@ -86,7 +86,7 @@ static void __tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
1811    
1812     static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
1813     {
1814     - coresight_disclaim_device(drvdata);
1815     + coresight_disclaim_device(drvdata->base);
1816     __tmc_etb_disable_hw(drvdata);
1817     }
1818    
1819     diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
1820     index 0b91ff36768a..598e23cf01fc 100644
1821     --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
1822     +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
1823     @@ -336,13 +336,16 @@ int usnic_ib_query_port(struct ib_device *ibdev, u8 port,
1824    
1825     usnic_dbg("\n");
1826    
1827     - mutex_lock(&us_ibdev->usdev_lock);
1828     if (ib_get_eth_speed(ibdev, port, &props->active_speed,
1829     - &props->active_width)) {
1830     - mutex_unlock(&us_ibdev->usdev_lock);
1831     + &props->active_width))
1832     return -EINVAL;
1833     - }
1834    
1835     + /*
1836     + * usdev_lock is acquired after (and not before) ib_get_eth_speed call
1837     + * because acquiring rtnl_lock in ib_get_eth_speed, while holding
1838     + * usdev_lock could lead to a deadlock.
1839     + */
1840     + mutex_lock(&us_ibdev->usdev_lock);
1841     /* props being zeroed by the caller, avoid zeroing it here */
1842    
1843     props->lid = 0;
1844     diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
1845     index 6c361d70d7cd..46f62f71cd28 100644
1846     --- a/drivers/infiniband/sw/rxe/rxe_req.c
1847     +++ b/drivers/infiniband/sw/rxe/rxe_req.c
1848     @@ -643,6 +643,7 @@ next_wqe:
1849     rmr->access = wqe->wr.wr.reg.access;
1850     rmr->lkey = wqe->wr.wr.reg.key;
1851     rmr->rkey = wqe->wr.wr.reg.key;
1852     + rmr->iova = wqe->wr.wr.reg.mr->iova;
1853     wqe->state = wqe_state_done;
1854     wqe->status = IB_WC_SUCCESS;
1855     } else {
1856     diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
1857     index b8eec515a003..fc7d8b8a654f 100644
1858     --- a/drivers/md/dm-crypt.c
1859     +++ b/drivers/md/dm-crypt.c
1860     @@ -49,7 +49,7 @@ struct convert_context {
1861     struct bio *bio_out;
1862     struct bvec_iter iter_in;
1863     struct bvec_iter iter_out;
1864     - sector_t cc_sector;
1865     + u64 cc_sector;
1866     atomic_t cc_pending;
1867     union {
1868     struct skcipher_request *req;
1869     @@ -81,7 +81,7 @@ struct dm_crypt_request {
1870     struct convert_context *ctx;
1871     struct scatterlist sg_in[4];
1872     struct scatterlist sg_out[4];
1873     - sector_t iv_sector;
1874     + u64 iv_sector;
1875     };
1876    
1877     struct crypt_config;
1878     @@ -160,7 +160,7 @@ struct crypt_config {
1879     struct iv_lmk_private lmk;
1880     struct iv_tcw_private tcw;
1881     } iv_gen_private;
1882     - sector_t iv_offset;
1883     + u64 iv_offset;
1884     unsigned int iv_size;
1885     unsigned short int sector_size;
1886     unsigned char sector_shift;
1887     @@ -2781,7 +2781,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1888     }
1889    
1890     ret = -EINVAL;
1891     - if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1) {
1892     + if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) {
1893     ti->error = "Invalid device sector";
1894     goto bad;
1895     }
1896     diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
1897     index 2fb7bb4304ad..fddffe251bf6 100644
1898     --- a/drivers/md/dm-delay.c
1899     +++ b/drivers/md/dm-delay.c
1900     @@ -141,7 +141,7 @@ static int delay_class_ctr(struct dm_target *ti, struct delay_class *c, char **a
1901     unsigned long long tmpll;
1902     char dummy;
1903    
1904     - if (sscanf(argv[1], "%llu%c", &tmpll, &dummy) != 1) {
1905     + if (sscanf(argv[1], "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) {
1906     ti->error = "Invalid device sector";
1907     return -EINVAL;
1908     }
1909     diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
1910     index 3cb97fa4c11d..8261aa8c7fe1 100644
1911     --- a/drivers/md/dm-flakey.c
1912     +++ b/drivers/md/dm-flakey.c
1913     @@ -213,7 +213,7 @@ static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1914     devname = dm_shift_arg(&as);
1915    
1916     r = -EINVAL;
1917     - if (sscanf(dm_shift_arg(&as), "%llu%c", &tmpll, &dummy) != 1) {
1918     + if (sscanf(dm_shift_arg(&as), "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) {
1919     ti->error = "Invalid device sector";
1920     goto bad;
1921     }
1922     diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c
1923     index 2fc4213e02b5..671c24332802 100644
1924     --- a/drivers/md/dm-kcopyd.c
1925     +++ b/drivers/md/dm-kcopyd.c
1926     @@ -56,15 +56,17 @@ struct dm_kcopyd_client {
1927     atomic_t nr_jobs;
1928    
1929     /*
1930     - * We maintain three lists of jobs:
1931     + * We maintain four lists of jobs:
1932     *
1933     * i) jobs waiting for pages
1934     * ii) jobs that have pages, and are waiting for the io to be issued.
1935     - * iii) jobs that have completed.
1936     + * iii) jobs that don't need to do any IO and just run a callback
1937     + * iv) jobs that have completed.
1938     *
1939     - * All three of these are protected by job_lock.
1940     + * All four of these are protected by job_lock.
1941     */
1942     spinlock_t job_lock;
1943     + struct list_head callback_jobs;
1944     struct list_head complete_jobs;
1945     struct list_head io_jobs;
1946     struct list_head pages_jobs;
1947     @@ -625,6 +627,7 @@ static void do_work(struct work_struct *work)
1948     struct dm_kcopyd_client *kc = container_of(work,
1949     struct dm_kcopyd_client, kcopyd_work);
1950     struct blk_plug plug;
1951     + unsigned long flags;
1952    
1953     /*
1954     * The order that these are called is *very* important.
1955     @@ -633,6 +636,10 @@ static void do_work(struct work_struct *work)
1956     * list. io jobs call wake when they complete and it all
1957     * starts again.
1958     */
1959     + spin_lock_irqsave(&kc->job_lock, flags);
1960     + list_splice_tail_init(&kc->callback_jobs, &kc->complete_jobs);
1961     + spin_unlock_irqrestore(&kc->job_lock, flags);
1962     +
1963     blk_start_plug(&plug);
1964     process_jobs(&kc->complete_jobs, kc, run_complete_job);
1965     process_jobs(&kc->pages_jobs, kc, run_pages_job);
1966     @@ -650,7 +657,7 @@ static void dispatch_job(struct kcopyd_job *job)
1967     struct dm_kcopyd_client *kc = job->kc;
1968     atomic_inc(&kc->nr_jobs);
1969     if (unlikely(!job->source.count))
1970     - push(&kc->complete_jobs, job);
1971     + push(&kc->callback_jobs, job);
1972     else if (job->pages == &zero_page_list)
1973     push(&kc->io_jobs, job);
1974     else
1975     @@ -858,7 +865,7 @@ void dm_kcopyd_do_callback(void *j, int read_err, unsigned long write_err)
1976     job->read_err = read_err;
1977     job->write_err = write_err;
1978    
1979     - push(&kc->complete_jobs, job);
1980     + push(&kc->callback_jobs, job);
1981     wake(kc);
1982     }
1983     EXPORT_SYMBOL(dm_kcopyd_do_callback);
1984     @@ -888,6 +895,7 @@ struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *thro
1985     return ERR_PTR(-ENOMEM);
1986    
1987     spin_lock_init(&kc->job_lock);
1988     + INIT_LIST_HEAD(&kc->callback_jobs);
1989     INIT_LIST_HEAD(&kc->complete_jobs);
1990     INIT_LIST_HEAD(&kc->io_jobs);
1991     INIT_LIST_HEAD(&kc->pages_jobs);
1992     @@ -939,6 +947,7 @@ void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc)
1993     /* Wait for completion of all jobs submitted by this client. */
1994     wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
1995    
1996     + BUG_ON(!list_empty(&kc->callback_jobs));
1997     BUG_ON(!list_empty(&kc->complete_jobs));
1998     BUG_ON(!list_empty(&kc->io_jobs));
1999     BUG_ON(!list_empty(&kc->pages_jobs));
2000     diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
2001     index 8d7ddee6ac4d..ad980a38fb1e 100644
2002     --- a/drivers/md/dm-linear.c
2003     +++ b/drivers/md/dm-linear.c
2004     @@ -45,7 +45,7 @@ static int linear_ctr(struct dm_target *ti, unsigned int argc, char **argv)
2005     }
2006    
2007     ret = -EINVAL;
2008     - if (sscanf(argv[1], "%llu%c", &tmp, &dummy) != 1) {
2009     + if (sscanf(argv[1], "%llu%c", &tmp, &dummy) != 1 || tmp != (sector_t)tmp) {
2010     ti->error = "Invalid device sector";
2011     goto bad;
2012     }
2013     diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
2014     index 79eab1071ec2..5a51151f680d 100644
2015     --- a/drivers/md/dm-raid1.c
2016     +++ b/drivers/md/dm-raid1.c
2017     @@ -943,7 +943,8 @@ static int get_mirror(struct mirror_set *ms, struct dm_target *ti,
2018     char dummy;
2019     int ret;
2020    
2021     - if (sscanf(argv[1], "%llu%c", &offset, &dummy) != 1) {
2022     + if (sscanf(argv[1], "%llu%c", &offset, &dummy) != 1 ||
2023     + offset != (sector_t)offset) {
2024     ti->error = "Invalid offset";
2025     return -EINVAL;
2026     }
2027     diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
2028     index ae4b33d10924..36805b12661e 100644
2029     --- a/drivers/md/dm-snap.c
2030     +++ b/drivers/md/dm-snap.c
2031     @@ -19,6 +19,7 @@
2032     #include <linux/vmalloc.h>
2033     #include <linux/log2.h>
2034     #include <linux/dm-kcopyd.h>
2035     +#include <linux/semaphore.h>
2036    
2037     #include "dm.h"
2038    
2039     @@ -105,6 +106,9 @@ struct dm_snapshot {
2040     /* The on disk metadata handler */
2041     struct dm_exception_store *store;
2042    
2043     + /* Maximum number of in-flight COW jobs. */
2044     + struct semaphore cow_count;
2045     +
2046     struct dm_kcopyd_client *kcopyd_client;
2047    
2048     /* Wait for events based on state_bits */
2049     @@ -145,6 +149,19 @@ struct dm_snapshot {
2050     #define RUNNING_MERGE 0
2051     #define SHUTDOWN_MERGE 1
2052    
2053     +/*
2054     + * Maximum number of chunks being copied on write.
2055     + *
2056     + * The value was decided experimentally as a trade-off between memory
2057     + * consumption, stalling the kernel's workqueues and maintaining a high enough
2058     + * throughput.
2059     + */
2060     +#define DEFAULT_COW_THRESHOLD 2048
2061     +
2062     +static int cow_threshold = DEFAULT_COW_THRESHOLD;
2063     +module_param_named(snapshot_cow_threshold, cow_threshold, int, 0644);
2064     +MODULE_PARM_DESC(snapshot_cow_threshold, "Maximum number of chunks being copied on write");
2065     +
2066     DECLARE_DM_KCOPYD_THROTTLE_WITH_MODULE_PARM(snapshot_copy_throttle,
2067     "A percentage of time allocated for copy on write");
2068    
2069     @@ -1190,6 +1207,8 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
2070     goto bad_hash_tables;
2071     }
2072    
2073     + sema_init(&s->cow_count, (cow_threshold > 0) ? cow_threshold : INT_MAX);
2074     +
2075     s->kcopyd_client = dm_kcopyd_client_create(&dm_kcopyd_throttle);
2076     if (IS_ERR(s->kcopyd_client)) {
2077     r = PTR_ERR(s->kcopyd_client);
2078     @@ -1575,6 +1594,7 @@ static void copy_callback(int read_err, unsigned long write_err, void *context)
2079     rb_link_node(&pe->out_of_order_node, parent, p);
2080     rb_insert_color(&pe->out_of_order_node, &s->out_of_order_tree);
2081     }
2082     + up(&s->cow_count);
2083     }
2084    
2085     /*
2086     @@ -1598,6 +1618,7 @@ static void start_copy(struct dm_snap_pending_exception *pe)
2087     dest.count = src.count;
2088    
2089     /* Hand over to kcopyd */
2090     + down(&s->cow_count);
2091     dm_kcopyd_copy(s->kcopyd_client, &src, 1, &dest, 0, copy_callback, pe);
2092     }
2093    
2094     @@ -1617,6 +1638,7 @@ static void start_full_bio(struct dm_snap_pending_exception *pe,
2095     pe->full_bio = bio;
2096     pe->full_bio_end_io = bio->bi_end_io;
2097    
2098     + down(&s->cow_count);
2099     callback_data = dm_kcopyd_prepare_callback(s->kcopyd_client,
2100     copy_callback, pe);
2101    
2102     diff --git a/drivers/md/dm-unstripe.c b/drivers/md/dm-unstripe.c
2103     index 954b7ab4e684..e673dacf6418 100644
2104     --- a/drivers/md/dm-unstripe.c
2105     +++ b/drivers/md/dm-unstripe.c
2106     @@ -78,7 +78,7 @@ static int unstripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
2107     goto err;
2108     }
2109    
2110     - if (sscanf(argv[4], "%llu%c", &start, &dummy) != 1) {
2111     + if (sscanf(argv[4], "%llu%c", &start, &dummy) != 1 || start != (sector_t)start) {
2112     ti->error = "Invalid striped device offset";
2113     goto err;
2114     }
2115     diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c
2116     index 1c933b2cf760..3ef5df1648d7 100644
2117     --- a/drivers/media/firewire/firedtv-avc.c
2118     +++ b/drivers/media/firewire/firedtv-avc.c
2119     @@ -968,7 +968,8 @@ static int get_ca_object_length(struct avc_response_frame *r)
2120     return r->operand[7];
2121     }
2122    
2123     -int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len)
2124     +int avc_ca_app_info(struct firedtv *fdtv, unsigned char *app_info,
2125     + unsigned int *len)
2126     {
2127     struct avc_command_frame *c = (void *)fdtv->avc_data;
2128     struct avc_response_frame *r = (void *)fdtv->avc_data;
2129     @@ -1009,7 +1010,8 @@ out:
2130     return ret;
2131     }
2132    
2133     -int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len)
2134     +int avc_ca_info(struct firedtv *fdtv, unsigned char *app_info,
2135     + unsigned int *len)
2136     {
2137     struct avc_command_frame *c = (void *)fdtv->avc_data;
2138     struct avc_response_frame *r = (void *)fdtv->avc_data;
2139     diff --git a/drivers/media/firewire/firedtv.h b/drivers/media/firewire/firedtv.h
2140     index 876cdec8329b..009905a19947 100644
2141     --- a/drivers/media/firewire/firedtv.h
2142     +++ b/drivers/media/firewire/firedtv.h
2143     @@ -124,8 +124,10 @@ int avc_lnb_control(struct firedtv *fdtv, char voltage, char burst,
2144     struct dvb_diseqc_master_cmd *diseqcmd);
2145     void avc_remote_ctrl_work(struct work_struct *work);
2146     int avc_register_remote_control(struct firedtv *fdtv);
2147     -int avc_ca_app_info(struct firedtv *fdtv, char *app_info, unsigned int *len);
2148     -int avc_ca_info(struct firedtv *fdtv, char *app_info, unsigned int *len);
2149     +int avc_ca_app_info(struct firedtv *fdtv, unsigned char *app_info,
2150     + unsigned int *len);
2151     +int avc_ca_info(struct firedtv *fdtv, unsigned char *app_info,
2152     + unsigned int *len);
2153     int avc_ca_reset(struct firedtv *fdtv);
2154     int avc_ca_pmt(struct firedtv *fdtv, char *app_info, int length);
2155     int avc_ca_get_time_date(struct firedtv *fdtv, int *interval);
2156     diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
2157     index bb6add9d340e..5b8350e87e75 100644
2158     --- a/drivers/media/platform/qcom/venus/core.c
2159     +++ b/drivers/media/platform/qcom/venus/core.c
2160     @@ -264,6 +264,14 @@ static int venus_probe(struct platform_device *pdev)
2161     if (ret)
2162     return ret;
2163    
2164     + if (!dev->dma_parms) {
2165     + dev->dma_parms = devm_kzalloc(dev, sizeof(*dev->dma_parms),
2166     + GFP_KERNEL);
2167     + if (!dev->dma_parms)
2168     + return -ENOMEM;
2169     + }
2170     + dma_set_max_seg_size(dev, DMA_BIT_MASK(32));
2171     +
2172     INIT_LIST_HEAD(&core->instances);
2173     mutex_init(&core->lock);
2174     INIT_DELAYED_WORK(&core->work, venus_sys_error_handler);
2175     diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
2176     index bc369a0934a3..76dc3ee8ca21 100644
2177     --- a/drivers/media/usb/uvc/uvc_driver.c
2178     +++ b/drivers/media/usb/uvc/uvc_driver.c
2179     @@ -1824,11 +1824,7 @@ static void uvc_delete(struct kref *kref)
2180     usb_put_intf(dev->intf);
2181     usb_put_dev(dev->udev);
2182    
2183     - if (dev->vdev.dev)
2184     - v4l2_device_unregister(&dev->vdev);
2185     #ifdef CONFIG_MEDIA_CONTROLLER
2186     - if (media_devnode_is_registered(dev->mdev.devnode))
2187     - media_device_unregister(&dev->mdev);
2188     media_device_cleanup(&dev->mdev);
2189     #endif
2190    
2191     @@ -1885,6 +1881,15 @@ static void uvc_unregister_video(struct uvc_device *dev)
2192    
2193     uvc_debugfs_cleanup_stream(stream);
2194     }
2195     +
2196     + uvc_status_unregister(dev);
2197     +
2198     + if (dev->vdev.dev)
2199     + v4l2_device_unregister(&dev->vdev);
2200     +#ifdef CONFIG_MEDIA_CONTROLLER
2201     + if (media_devnode_is_registered(dev->mdev.devnode))
2202     + media_device_unregister(&dev->mdev);
2203     +#endif
2204     }
2205    
2206     int uvc_register_video_device(struct uvc_device *dev,
2207     diff --git a/drivers/media/usb/uvc/uvc_status.c b/drivers/media/usb/uvc/uvc_status.c
2208     index 0722dc684378..883e4cab45e7 100644
2209     --- a/drivers/media/usb/uvc/uvc_status.c
2210     +++ b/drivers/media/usb/uvc/uvc_status.c
2211     @@ -54,7 +54,7 @@ error:
2212     return ret;
2213     }
2214    
2215     -static void uvc_input_cleanup(struct uvc_device *dev)
2216     +static void uvc_input_unregister(struct uvc_device *dev)
2217     {
2218     if (dev->input)
2219     input_unregister_device(dev->input);
2220     @@ -71,7 +71,7 @@ static void uvc_input_report_key(struct uvc_device *dev, unsigned int code,
2221    
2222     #else
2223     #define uvc_input_init(dev)
2224     -#define uvc_input_cleanup(dev)
2225     +#define uvc_input_unregister(dev)
2226     #define uvc_input_report_key(dev, code, value)
2227     #endif /* CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV */
2228    
2229     @@ -292,12 +292,16 @@ int uvc_status_init(struct uvc_device *dev)
2230     return 0;
2231     }
2232    
2233     -void uvc_status_cleanup(struct uvc_device *dev)
2234     +void uvc_status_unregister(struct uvc_device *dev)
2235     {
2236     usb_kill_urb(dev->int_urb);
2237     + uvc_input_unregister(dev);
2238     +}
2239     +
2240     +void uvc_status_cleanup(struct uvc_device *dev)
2241     +{
2242     usb_free_urb(dev->int_urb);
2243     kfree(dev->status);
2244     - uvc_input_cleanup(dev);
2245     }
2246    
2247     int uvc_status_start(struct uvc_device *dev, gfp_t flags)
2248     diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
2249     index c0cbd833d0a4..1db6634b2455 100644
2250     --- a/drivers/media/usb/uvc/uvcvideo.h
2251     +++ b/drivers/media/usb/uvc/uvcvideo.h
2252     @@ -757,6 +757,7 @@ int uvc_register_video_device(struct uvc_device *dev,
2253    
2254     /* Status */
2255     int uvc_status_init(struct uvc_device *dev);
2256     +void uvc_status_unregister(struct uvc_device *dev);
2257     void uvc_status_cleanup(struct uvc_device *dev);
2258     int uvc_status_start(struct uvc_device *dev, gfp_t flags);
2259     void uvc_status_stop(struct uvc_device *dev);
2260     diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
2261     index be53044086c7..fbc56ee99682 100644
2262     --- a/drivers/mmc/host/atmel-mci.c
2263     +++ b/drivers/mmc/host/atmel-mci.c
2264     @@ -1954,13 +1954,14 @@ static void atmci_tasklet_func(unsigned long priv)
2265     }
2266    
2267     atmci_request_end(host, host->mrq);
2268     - state = STATE_IDLE;
2269     + goto unlock; /* atmci_request_end() sets host->state */
2270     break;
2271     }
2272     } while (state != prev_state);
2273    
2274     host->state = state;
2275    
2276     +unlock:
2277     spin_unlock(&host->lock);
2278     }
2279    
2280     diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
2281     index 24fb6a685039..b2a0e59b6252 100644
2282     --- a/drivers/net/dsa/mv88e6xxx/chip.c
2283     +++ b/drivers/net/dsa/mv88e6xxx/chip.c
2284     @@ -2403,6 +2403,107 @@ static int mv88e6xxx_stats_setup(struct mv88e6xxx_chip *chip)
2285     return mv88e6xxx_g1_stats_clear(chip);
2286     }
2287    
2288     +/* The mv88e6390 has some hidden registers used for debug and
2289     + * development. The errata also makes use of them.
2290     + */
2291     +static int mv88e6390_hidden_write(struct mv88e6xxx_chip *chip, int port,
2292     + int reg, u16 val)
2293     +{
2294     + u16 ctrl;
2295     + int err;
2296     +
2297     + err = mv88e6xxx_port_write(chip, PORT_RESERVED_1A_DATA_PORT,
2298     + PORT_RESERVED_1A, val);
2299     + if (err)
2300     + return err;
2301     +
2302     + ctrl = PORT_RESERVED_1A_BUSY | PORT_RESERVED_1A_WRITE |
2303     + PORT_RESERVED_1A_BLOCK | port << PORT_RESERVED_1A_PORT_SHIFT |
2304     + reg;
2305     +
2306     + return mv88e6xxx_port_write(chip, PORT_RESERVED_1A_CTRL_PORT,
2307     + PORT_RESERVED_1A, ctrl);
2308     +}
2309     +
2310     +static int mv88e6390_hidden_wait(struct mv88e6xxx_chip *chip)
2311     +{
2312     + return mv88e6xxx_wait(chip, PORT_RESERVED_1A_CTRL_PORT,
2313     + PORT_RESERVED_1A, PORT_RESERVED_1A_BUSY);
2314     +}
2315     +
2316     +
2317     +static int mv88e6390_hidden_read(struct mv88e6xxx_chip *chip, int port,
2318     + int reg, u16 *val)
2319     +{
2320     + u16 ctrl;
2321     + int err;
2322     +
2323     + ctrl = PORT_RESERVED_1A_BUSY | PORT_RESERVED_1A_READ |
2324     + PORT_RESERVED_1A_BLOCK | port << PORT_RESERVED_1A_PORT_SHIFT |
2325     + reg;
2326     +
2327     + err = mv88e6xxx_port_write(chip, PORT_RESERVED_1A_CTRL_PORT,
2328     + PORT_RESERVED_1A, ctrl);
2329     + if (err)
2330     + return err;
2331     +
2332     + err = mv88e6390_hidden_wait(chip);
2333     + if (err)
2334     + return err;
2335     +
2336     + return mv88e6xxx_port_read(chip, PORT_RESERVED_1A_DATA_PORT,
2337     + PORT_RESERVED_1A, val);
2338     +}
2339     +
2340     +/* Check if the errata has already been applied. */
2341     +static bool mv88e6390_setup_errata_applied(struct mv88e6xxx_chip *chip)
2342     +{
2343     + int port;
2344     + int err;
2345     + u16 val;
2346     +
2347     + for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
2348     + err = mv88e6390_hidden_read(chip, port, 0, &val);
2349     + if (err) {
2350     + dev_err(chip->dev,
2351     + "Error reading hidden register: %d\n", err);
2352     + return false;
2353     + }
2354     + if (val != 0x01c0)
2355     + return false;
2356     + }
2357     +
2358     + return true;
2359     +}
2360     +
2361     +/* The 6390 copper ports have an errata which require poking magic
2362     + * values into undocumented hidden registers and then performing a
2363     + * software reset.
2364     + */
2365     +static int mv88e6390_setup_errata(struct mv88e6xxx_chip *chip)
2366     +{
2367     + int port;
2368     + int err;
2369     +
2370     + if (mv88e6390_setup_errata_applied(chip))
2371     + return 0;
2372     +
2373     + /* Set the ports into blocking mode */
2374     + for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
2375     + err = mv88e6xxx_port_set_state(chip, port, BR_STATE_DISABLED);
2376     + if (err)
2377     + return err;
2378     + }
2379     +
2380     + for (port = 0; port < mv88e6xxx_num_ports(chip); port++) {
2381     + err = mv88e6390_hidden_write(chip, port, 0, 0x01c0);
2382     + if (err)
2383     + return err;
2384     + }
2385     +
2386     + return mv88e6xxx_software_reset(chip);
2387     +}
2388     +
2389     static int mv88e6xxx_setup(struct dsa_switch *ds)
2390     {
2391     struct mv88e6xxx_chip *chip = ds->priv;
2392     @@ -2415,6 +2516,12 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)
2393    
2394     mutex_lock(&chip->reg_lock);
2395    
2396     + if (chip->info->ops->setup_errata) {
2397     + err = chip->info->ops->setup_errata(chip);
2398     + if (err)
2399     + goto unlock;
2400     + }
2401     +
2402     /* Cache the cmode of each port. */
2403     for (i = 0; i < mv88e6xxx_num_ports(chip); i++) {
2404     if (chip->info->ops->port_get_cmode) {
2405     @@ -3215,6 +3322,7 @@ static const struct mv88e6xxx_ops mv88e6185_ops = {
2406    
2407     static const struct mv88e6xxx_ops mv88e6190_ops = {
2408     /* MV88E6XXX_FAMILY_6390 */
2409     + .setup_errata = mv88e6390_setup_errata,
2410     .irl_init_all = mv88e6390_g2_irl_init_all,
2411     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2412     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2413     @@ -3257,6 +3365,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
2414    
2415     static const struct mv88e6xxx_ops mv88e6190x_ops = {
2416     /* MV88E6XXX_FAMILY_6390 */
2417     + .setup_errata = mv88e6390_setup_errata,
2418     .irl_init_all = mv88e6390_g2_irl_init_all,
2419     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2420     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2421     @@ -3299,6 +3408,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
2422    
2423     static const struct mv88e6xxx_ops mv88e6191_ops = {
2424     /* MV88E6XXX_FAMILY_6390 */
2425     + .setup_errata = mv88e6390_setup_errata,
2426     .irl_init_all = mv88e6390_g2_irl_init_all,
2427     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2428     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2429     @@ -3390,6 +3500,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
2430    
2431     static const struct mv88e6xxx_ops mv88e6290_ops = {
2432     /* MV88E6XXX_FAMILY_6390 */
2433     + .setup_errata = mv88e6390_setup_errata,
2434     .irl_init_all = mv88e6390_g2_irl_init_all,
2435     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2436     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2437     @@ -3693,6 +3804,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
2438    
2439     static const struct mv88e6xxx_ops mv88e6390_ops = {
2440     /* MV88E6XXX_FAMILY_6390 */
2441     + .setup_errata = mv88e6390_setup_errata,
2442     .irl_init_all = mv88e6390_g2_irl_init_all,
2443     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2444     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2445     @@ -3740,6 +3852,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
2446    
2447     static const struct mv88e6xxx_ops mv88e6390x_ops = {
2448     /* MV88E6XXX_FAMILY_6390 */
2449     + .setup_errata = mv88e6390_setup_errata,
2450     .irl_init_all = mv88e6390_g2_irl_init_all,
2451     .get_eeprom = mv88e6xxx_g2_get_eeprom8,
2452     .set_eeprom = mv88e6xxx_g2_set_eeprom8,
2453     diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
2454     index f9ecb7872d32..546651d8c3e1 100644
2455     --- a/drivers/net/dsa/mv88e6xxx/chip.h
2456     +++ b/drivers/net/dsa/mv88e6xxx/chip.h
2457     @@ -300,6 +300,11 @@ struct mv88e6xxx_mdio_bus {
2458     };
2459    
2460     struct mv88e6xxx_ops {
2461     + /* Switch Setup Errata, called early in the switch setup to
2462     + * allow any errata actions to be performed
2463     + */
2464     + int (*setup_errata)(struct mv88e6xxx_chip *chip);
2465     +
2466     int (*ieee_pri_map)(struct mv88e6xxx_chip *chip);
2467     int (*ip_pri_map)(struct mv88e6xxx_chip *chip);
2468    
2469     diff --git a/drivers/net/dsa/mv88e6xxx/port.h b/drivers/net/dsa/mv88e6xxx/port.h
2470     index 36904c9bf955..091aa0057f1f 100644
2471     --- a/drivers/net/dsa/mv88e6xxx/port.h
2472     +++ b/drivers/net/dsa/mv88e6xxx/port.h
2473     @@ -251,6 +251,16 @@
2474     /* Offset 0x19: Port IEEE Priority Remapping Registers (4-7) */
2475     #define MV88E6095_PORT_IEEE_PRIO_REMAP_4567 0x19
2476    
2477     +/* Offset 0x1a: Magic undocumented errata register */
2478     +#define PORT_RESERVED_1A 0x1a
2479     +#define PORT_RESERVED_1A_BUSY BIT(15)
2480     +#define PORT_RESERVED_1A_WRITE BIT(14)
2481     +#define PORT_RESERVED_1A_READ 0
2482     +#define PORT_RESERVED_1A_PORT_SHIFT 5
2483     +#define PORT_RESERVED_1A_BLOCK (0xf << 10)
2484     +#define PORT_RESERVED_1A_CTRL_PORT 4
2485     +#define PORT_RESERVED_1A_DATA_PORT 5
2486     +
2487     int mv88e6xxx_port_read(struct mv88e6xxx_chip *chip, int port, int reg,
2488     u16 *val);
2489     int mv88e6xxx_port_write(struct mv88e6xxx_chip *chip, int port, int reg,
2490     diff --git a/drivers/net/ethernet/intel/e1000e/ptp.c b/drivers/net/ethernet/intel/e1000e/ptp.c
2491     index 37c76945ad9b..e1f821edbc21 100644
2492     --- a/drivers/net/ethernet/intel/e1000e/ptp.c
2493     +++ b/drivers/net/ethernet/intel/e1000e/ptp.c
2494     @@ -173,10 +173,14 @@ static int e1000e_phc_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
2495     struct e1000_adapter *adapter = container_of(ptp, struct e1000_adapter,
2496     ptp_clock_info);
2497     unsigned long flags;
2498     - u64 ns;
2499     + u64 cycles, ns;
2500    
2501     spin_lock_irqsave(&adapter->systim_lock, flags);
2502     - ns = timecounter_read(&adapter->tc);
2503     +
2504     + /* Use timecounter_cyc2time() to allow non-monotonic SYSTIM readings */
2505     + cycles = adapter->cc.read(&adapter->cc);
2506     + ns = timecounter_cyc2time(&adapter->tc, cycles);
2507     +
2508     spin_unlock_irqrestore(&adapter->systim_lock, flags);
2509    
2510     *ts = ns_to_timespec64(ns);
2511     @@ -232,9 +236,12 @@ static void e1000e_systim_overflow_work(struct work_struct *work)
2512     systim_overflow_work.work);
2513     struct e1000_hw *hw = &adapter->hw;
2514     struct timespec64 ts;
2515     + u64 ns;
2516    
2517     - adapter->ptp_clock_info.gettime64(&adapter->ptp_clock_info, &ts);
2518     + /* Update the timecounter */
2519     + ns = timecounter_read(&adapter->tc);
2520    
2521     + ts = ns_to_timespec64(ns);
2522     e_dbg("SYSTIM overflow check at %lld.%09lu\n",
2523     (long long) ts.tv_sec, ts.tv_nsec);
2524    
2525     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
2526     index fd1b0546fd67..4d77f42e035c 100644
2527     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
2528     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c
2529     @@ -4,6 +4,7 @@
2530     #include "ixgbe.h"
2531     #include <net/xfrm.h>
2532     #include <crypto/aead.h>
2533     +#include <linux/if_bridge.h>
2534    
2535     #define IXGBE_IPSEC_KEY_BITS 160
2536     static const char aes_gcm_name[] = "rfc4106(gcm(aes))";
2537     @@ -693,7 +694,8 @@ static int ixgbe_ipsec_add_sa(struct xfrm_state *xs)
2538     } else {
2539     struct tx_sa tsa;
2540    
2541     - if (adapter->num_vfs)
2542     + if (adapter->num_vfs &&
2543     + adapter->bridge_mode != BRIDGE_MODE_VEPA)
2544     return -EOPNOTSUPP;
2545    
2546     /* find the first unused index */
2547     diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
2548     index 12db256c8c9f..ee67d1c4281d 100644
2549     --- a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
2550     +++ b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
2551     @@ -668,7 +668,7 @@ static int cgx_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2552     if (!cgx->reg_base) {
2553     dev_err(dev, "CGX: Cannot map CSR memory space, aborting\n");
2554     err = -ENOMEM;
2555     - goto err_release_regions;
2556     + goto err_free_irq_vectors;
2557     }
2558    
2559     nvec = CGX_NVEC;
2560     @@ -693,6 +693,8 @@ static int cgx_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2561     err_release_lmac:
2562     cgx_lmac_exit(cgx);
2563     list_del(&cgx->cgx_list);
2564     +err_free_irq_vectors:
2565     + pci_free_irq_vectors(pdev);
2566     err_release_regions:
2567     pci_release_regions(pdev);
2568     err_disable_device:
2569     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2570     index f84b9c02fcc5..124aee09e953 100644
2571     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2572     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
2573     @@ -4738,12 +4738,15 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,
2574     lower_dev,
2575     upper_dev);
2576     } else if (netif_is_lag_master(upper_dev)) {
2577     - if (info->linking)
2578     + if (info->linking) {
2579     err = mlxsw_sp_port_lag_join(mlxsw_sp_port,
2580     upper_dev);
2581     - else
2582     + } else {
2583     + mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port,
2584     + false);
2585     mlxsw_sp_port_lag_leave(mlxsw_sp_port,
2586     upper_dev);
2587     + }
2588     } else if (netif_is_ovs_master(upper_dev)) {
2589     if (info->linking)
2590     err = mlxsw_sp_port_ovs_join(mlxsw_sp_port);
2591     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2592     index 50080c60a279..69f556ddb934 100644
2593     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2594     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2595     @@ -1816,7 +1816,7 @@ static void
2596     mlxsw_sp_bridge_port_vlan_del(struct mlxsw_sp_port *mlxsw_sp_port,
2597     struct mlxsw_sp_bridge_port *bridge_port, u16 vid)
2598     {
2599     - u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : vid;
2600     + u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : mlxsw_sp_port->pvid;
2601     struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;
2602    
2603     mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid);
2604     diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
2605     index 78ea9639b622..88e60d6d93dc 100644
2606     --- a/drivers/net/ethernet/realtek/r8169.c
2607     +++ b/drivers/net/ethernet/realtek/r8169.c
2608     @@ -212,6 +212,8 @@ enum cfg_version {
2609     };
2610    
2611     static const struct pci_device_id rtl8169_pci_tbl[] = {
2612     + { PCI_VDEVICE(REALTEK, 0x2502), RTL_CFG_1 },
2613     + { PCI_VDEVICE(REALTEK, 0x2600), RTL_CFG_1 },
2614     { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8129), 0, 0, RTL_CFG_0 },
2615     { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), 0, 0, RTL_CFG_2 },
2616     { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), 0, 0, RTL_CFG_1 },
2617     diff --git a/drivers/net/ethernet/socionext/sni_ave.c b/drivers/net/ethernet/socionext/sni_ave.c
2618     index 7c7cd9d94bcc..3d0114ba2bfe 100644
2619     --- a/drivers/net/ethernet/socionext/sni_ave.c
2620     +++ b/drivers/net/ethernet/socionext/sni_ave.c
2621     @@ -1210,9 +1210,13 @@ static int ave_init(struct net_device *ndev)
2622    
2623     priv->phydev = phydev;
2624    
2625     - phy_ethtool_get_wol(phydev, &wol);
2626     + ave_ethtool_get_wol(ndev, &wol);
2627     device_set_wakeup_capable(&ndev->dev, !!wol.supported);
2628    
2629     + /* set wol initial state disabled */
2630     + wol.wolopts = 0;
2631     + ave_ethtool_set_wol(ndev, &wol);
2632     +
2633     if (!phy_interface_is_rgmii(phydev))
2634     phy_set_max_speed(phydev, SPEED_100);
2635    
2636     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
2637     index 774e1ff01c9a..735ad838e2ba 100644
2638     --- a/drivers/net/usb/qmi_wwan.c
2639     +++ b/drivers/net/usb/qmi_wwan.c
2640     @@ -123,6 +123,7 @@ static void qmimux_setup(struct net_device *dev)
2641     dev->addr_len = 0;
2642     dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2643     dev->netdev_ops = &qmimux_netdev_ops;
2644     + dev->mtu = 1500;
2645     dev->needs_free_netdev = true;
2646     }
2647    
2648     diff --git a/drivers/net/wireless/ath/ath10k/debugfs_sta.c b/drivers/net/wireless/ath/ath10k/debugfs_sta.c
2649     index b09cdc699c69..38afbbd9fb44 100644
2650     --- a/drivers/net/wireless/ath/ath10k/debugfs_sta.c
2651     +++ b/drivers/net/wireless/ath/ath10k/debugfs_sta.c
2652     @@ -71,7 +71,7 @@ void ath10k_sta_update_rx_tid_stats_ampdu(struct ath10k *ar, u16 peer_id, u8 tid
2653     spin_lock_bh(&ar->data_lock);
2654    
2655     peer = ath10k_peer_find_by_id(ar, peer_id);
2656     - if (!peer)
2657     + if (!peer || !peer->sta)
2658     goto out;
2659    
2660     arsta = (struct ath10k_sta *)peer->sta->drv_priv;
2661     diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
2662     index ffec98f7be50..2c2761d04d01 100644
2663     --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
2664     +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
2665     @@ -2832,7 +2832,7 @@ static void ath10k_htt_fetch_peer_stats(struct ath10k *ar,
2666     rcu_read_lock();
2667     spin_lock_bh(&ar->data_lock);
2668     peer = ath10k_peer_find_by_id(ar, peer_id);
2669     - if (!peer) {
2670     + if (!peer || !peer->sta) {
2671     ath10k_warn(ar, "Invalid peer id %d peer stats buffer\n",
2672     peer_id);
2673     goto out;
2674     @@ -2885,7 +2885,7 @@ static void ath10k_fetch_10_2_tx_stats(struct ath10k *ar, u8 *data)
2675     rcu_read_lock();
2676     spin_lock_bh(&ar->data_lock);
2677     peer = ath10k_peer_find_by_id(ar, peer_id);
2678     - if (!peer) {
2679     + if (!peer || !peer->sta) {
2680     ath10k_warn(ar, "Invalid peer id %d in peer stats buffer\n",
2681     peer_id);
2682     goto out;
2683     diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c b/drivers/net/wireless/quantenna/qtnfmac/commands.c
2684     index bfdc1ad30c13..659e7649fe22 100644
2685     --- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
2686     +++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
2687     @@ -84,7 +84,7 @@ static int qtnf_cmd_send_with_reply(struct qtnf_bus *bus,
2688     size_t *var_resp_size)
2689     {
2690     struct qlink_cmd *cmd;
2691     - const struct qlink_resp *resp;
2692     + struct qlink_resp *resp = NULL;
2693     struct sk_buff *resp_skb = NULL;
2694     u16 cmd_id;
2695     u8 mac_id;
2696     @@ -113,7 +113,12 @@ static int qtnf_cmd_send_with_reply(struct qtnf_bus *bus,
2697     if (ret)
2698     goto out;
2699    
2700     - resp = (const struct qlink_resp *)resp_skb->data;
2701     + if (WARN_ON(!resp_skb || !resp_skb->data)) {
2702     + ret = -EFAULT;
2703     + goto out;
2704     + }
2705     +
2706     + resp = (struct qlink_resp *)resp_skb->data;
2707     ret = qtnf_cmd_check_reply_header(resp, cmd_id, mac_id, vif_id,
2708     const_resp_size);
2709     if (ret)
2710     @@ -686,7 +691,7 @@ int qtnf_cmd_get_sta_info(struct qtnf_vif *vif, const u8 *sta_mac,
2711     struct sk_buff *cmd_skb, *resp_skb = NULL;
2712     struct qlink_cmd_get_sta_info *cmd;
2713     const struct qlink_resp_get_sta_info *resp;
2714     - size_t var_resp_len;
2715     + size_t var_resp_len = 0;
2716     int ret = 0;
2717    
2718     cmd_skb = qtnf_cmd_alloc_new_cmdskb(vif->mac->macid, vif->vifid,
2719     @@ -1650,7 +1655,7 @@ int qtnf_cmd_get_mac_info(struct qtnf_wmac *mac)
2720     {
2721     struct sk_buff *cmd_skb, *resp_skb = NULL;
2722     const struct qlink_resp_get_mac_info *resp;
2723     - size_t var_data_len;
2724     + size_t var_data_len = 0;
2725     int ret = 0;
2726    
2727     cmd_skb = qtnf_cmd_alloc_new_cmdskb(mac->macid, QLINK_VIFID_RSVD,
2728     @@ -1680,8 +1685,8 @@ int qtnf_cmd_get_hw_info(struct qtnf_bus *bus)
2729     {
2730     struct sk_buff *cmd_skb, *resp_skb = NULL;
2731     const struct qlink_resp_get_hw_info *resp;
2732     + size_t info_len = 0;
2733     int ret = 0;
2734     - size_t info_len;
2735    
2736     cmd_skb = qtnf_cmd_alloc_new_cmdskb(QLINK_MACID_RSVD, QLINK_VIFID_RSVD,
2737     QLINK_CMD_GET_HW_INFO,
2738     @@ -1709,9 +1714,9 @@ int qtnf_cmd_band_info_get(struct qtnf_wmac *mac,
2739     struct ieee80211_supported_band *band)
2740     {
2741     struct sk_buff *cmd_skb, *resp_skb = NULL;
2742     - size_t info_len;
2743     struct qlink_cmd_band_info_get *cmd;
2744     struct qlink_resp_band_info_get *resp;
2745     + size_t info_len = 0;
2746     int ret = 0;
2747     u8 qband;
2748    
2749     @@ -1764,8 +1769,8 @@ out:
2750     int qtnf_cmd_send_get_phy_params(struct qtnf_wmac *mac)
2751     {
2752     struct sk_buff *cmd_skb, *resp_skb = NULL;
2753     - size_t response_size;
2754     struct qlink_resp_phy_params *resp;
2755     + size_t response_size = 0;
2756     int ret = 0;
2757    
2758     cmd_skb = qtnf_cmd_alloc_new_cmdskb(mac->macid, 0,
2759     @@ -2431,7 +2436,7 @@ int qtnf_cmd_get_chan_stats(struct qtnf_wmac *mac, u16 channel,
2760     struct sk_buff *cmd_skb, *resp_skb = NULL;
2761     struct qlink_cmd_get_chan_stats *cmd;
2762     struct qlink_resp_get_chan_stats *resp;
2763     - size_t var_data_len;
2764     + size_t var_data_len = 0;
2765     int ret = 0;
2766    
2767     cmd_skb = qtnf_cmd_alloc_new_cmdskb(mac->macid, QLINK_VIFID_RSVD,
2768     diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
2769     index 42b1f73ac5f6..1e058196f23f 100644
2770     --- a/drivers/of/overlay.c
2771     +++ b/drivers/of/overlay.c
2772     @@ -378,7 +378,9 @@ static int add_changeset_node(struct overlay_changeset *ovcs,
2773     if (ret)
2774     return ret;
2775    
2776     - return build_changeset_next_level(ovcs, tchild, node);
2777     + ret = build_changeset_next_level(ovcs, tchild, node);
2778     + of_node_put(tchild);
2779     + return ret;
2780     }
2781    
2782     if (node->phandle && tchild->phandle)
2783     diff --git a/drivers/platform/mips/cpu_hwmon.c b/drivers/platform/mips/cpu_hwmon.c
2784     index f66521c7f846..42efcb850722 100644
2785     --- a/drivers/platform/mips/cpu_hwmon.c
2786     +++ b/drivers/platform/mips/cpu_hwmon.c
2787     @@ -25,9 +25,10 @@ int loongson3_cpu_temp(int cpu)
2788     case PRID_REV_LOONGSON3A_R1:
2789     reg = (reg >> 8) & 0xff;
2790     break;
2791     - case PRID_REV_LOONGSON3A_R2:
2792     case PRID_REV_LOONGSON3B_R1:
2793     case PRID_REV_LOONGSON3B_R2:
2794     + case PRID_REV_LOONGSON3A_R2_0:
2795     + case PRID_REV_LOONGSON3A_R2_1:
2796     reg = ((reg >> 8) & 0xff) - 100;
2797     break;
2798     case PRID_REV_LOONGSON3A_R3_0:
2799     diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
2800     index c285a16675ee..37b5de541270 100644
2801     --- a/drivers/platform/x86/asus-wmi.c
2802     +++ b/drivers/platform/x86/asus-wmi.c
2803     @@ -2131,7 +2131,8 @@ static int asus_wmi_add(struct platform_device *pdev)
2804     err = asus_wmi_backlight_init(asus);
2805     if (err && err != -ENODEV)
2806     goto fail_backlight;
2807     - }
2808     + } else
2809     + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL);
2810    
2811     status = wmi_install_notify_handler(asus->driver->event_guid,
2812     asus_wmi_notify, asus);
2813     diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c
2814     index 59ecbb3b53b5..a33628550425 100644
2815     --- a/drivers/scsi/megaraid/megaraid_sas_fp.c
2816     +++ b/drivers/scsi/megaraid/megaraid_sas_fp.c
2817     @@ -1266,7 +1266,7 @@ void mr_update_load_balance_params(struct MR_DRV_RAID_MAP_ALL *drv_map,
2818    
2819     for (ldCount = 0; ldCount < MAX_LOGICAL_DRIVES_EXT; ldCount++) {
2820     ld = MR_TargetIdToLdGet(ldCount, drv_map);
2821     - if (ld >= MAX_LOGICAL_DRIVES_EXT) {
2822     + if (ld >= MAX_LOGICAL_DRIVES_EXT - 1) {
2823     lbInfo[ldCount].loadBalanceFlag = 0;
2824     continue;
2825     }
2826     diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
2827     index f74b5ea24f0f..49eaa87608f6 100644
2828     --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
2829     +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
2830     @@ -2832,7 +2832,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance,
2831     device_id < instance->fw_supported_vd_count)) {
2832    
2833     ld = MR_TargetIdToLdGet(device_id, local_map_ptr);
2834     - if (ld >= instance->fw_supported_vd_count)
2835     + if (ld >= instance->fw_supported_vd_count - 1)
2836     fp_possible = 0;
2837     else {
2838     raid = MR_LdRaidGet(ld, local_map_ptr);
2839     diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
2840     index 2500377d0723..bfd826deabbe 100644
2841     --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
2842     +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
2843     @@ -3319,8 +3319,9 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
2844     static inline void
2845     _base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock)
2846     {
2847     + wmb();
2848     __raw_writeq(b, addr);
2849     - mmiowb();
2850     + barrier();
2851     }
2852     #else
2853     static inline void
2854     diff --git a/drivers/scsi/qedi/qedi_main.c b/drivers/scsi/qedi/qedi_main.c
2855     index 105b0e4d7818..5d7d018dad6e 100644
2856     --- a/drivers/scsi/qedi/qedi_main.c
2857     +++ b/drivers/scsi/qedi/qedi_main.c
2858     @@ -952,6 +952,9 @@ static int qedi_find_boot_info(struct qedi_ctx *qedi,
2859     cls_sess = iscsi_conn_to_session(cls_conn);
2860     sess = cls_sess->dd_data;
2861    
2862     + if (!iscsi_is_session_online(cls_sess))
2863     + continue;
2864     +
2865     if (pri_ctrl_flags) {
2866     if (!strcmp(pri_tgt->iscsi_name, sess->targetname) &&
2867     !strcmp(pri_tgt->ip_addr, ep_ip_addr)) {
2868     diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
2869     index a25a07a0b7f0..6f4cb3be97aa 100644
2870     --- a/drivers/scsi/smartpqi/smartpqi_init.c
2871     +++ b/drivers/scsi/smartpqi/smartpqi_init.c
2872     @@ -2704,6 +2704,9 @@ static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info,
2873     switch (response->header.iu_type) {
2874     case PQI_RESPONSE_IU_RAID_PATH_IO_SUCCESS:
2875     case PQI_RESPONSE_IU_AIO_PATH_IO_SUCCESS:
2876     + if (io_request->scmd)
2877     + io_request->scmd->result = 0;
2878     + /* fall through */
2879     case PQI_RESPONSE_IU_GENERAL_MANAGEMENT:
2880     break;
2881     case PQI_RESPONSE_IU_TASK_MANAGEMENT:
2882     @@ -6670,6 +6673,7 @@ static void pqi_shutdown(struct pci_dev *pci_dev)
2883     * storage.
2884     */
2885     rc = pqi_flush_cache(ctrl_info, SHUTDOWN);
2886     + pqi_free_interrupts(ctrl_info);
2887     pqi_reset(ctrl_info);
2888     if (rc == 0)
2889     return;
2890     diff --git a/drivers/staging/erofs/unzip_vle.c b/drivers/staging/erofs/unzip_vle.c
2891     index 79d3ba62b298..45e88bada907 100644
2892     --- a/drivers/staging/erofs/unzip_vle.c
2893     +++ b/drivers/staging/erofs/unzip_vle.c
2894     @@ -717,13 +717,18 @@ static void z_erofs_vle_unzip_kickoff(void *ptr, int bios)
2895     struct z_erofs_vle_unzip_io *io = tagptr_unfold_ptr(t);
2896     bool background = tagptr_unfold_tags(t);
2897    
2898     - if (atomic_add_return(bios, &io->pending_bios))
2899     + if (!background) {
2900     + unsigned long flags;
2901     +
2902     + spin_lock_irqsave(&io->u.wait.lock, flags);
2903     + if (!atomic_add_return(bios, &io->pending_bios))
2904     + wake_up_locked(&io->u.wait);
2905     + spin_unlock_irqrestore(&io->u.wait.lock, flags);
2906     return;
2907     + }
2908    
2909     - if (background)
2910     + if (!atomic_add_return(bios, &io->pending_bios))
2911     queue_work(z_erofs_workqueue, &io->u.work);
2912     - else
2913     - wake_up(&io->u.wait);
2914     }
2915    
2916     static inline void z_erofs_vle_read_endio(struct bio *bio)
2917     diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
2918     index f459118bc11b..c37dd36ec77d 100644
2919     --- a/drivers/target/target_core_spc.c
2920     +++ b/drivers/target/target_core_spc.c
2921     @@ -108,12 +108,17 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf)
2922    
2923     buf[7] = 0x2; /* CmdQue=1 */
2924    
2925     - memcpy(&buf[8], "LIO-ORG ", 8);
2926     - memset(&buf[16], 0x20, 16);
2927     + /*
2928     + * ASCII data fields described as being left-aligned shall have any
2929     + * unused bytes at the end of the field (i.e., highest offset) and the
2930     + * unused bytes shall be filled with ASCII space characters (20h).
2931     + */
2932     + memset(&buf[8], 0x20, 8 + 16 + 4);
2933     + memcpy(&buf[8], "LIO-ORG", sizeof("LIO-ORG") - 1);
2934     memcpy(&buf[16], dev->t10_wwn.model,
2935     - min_t(size_t, strlen(dev->t10_wwn.model), 16));
2936     + strnlen(dev->t10_wwn.model, 16));
2937     memcpy(&buf[32], dev->t10_wwn.revision,
2938     - min_t(size_t, strlen(dev->t10_wwn.revision), 4));
2939     + strnlen(dev->t10_wwn.revision, 4));
2940     buf[4] = 31; /* Set additional length to 31 */
2941    
2942     return 0;
2943     @@ -251,7 +256,9 @@ check_t10_vend_desc:
2944     buf[off] = 0x2; /* ASCII */
2945     buf[off+1] = 0x1; /* T10 Vendor ID */
2946     buf[off+2] = 0x0;
2947     - memcpy(&buf[off+4], "LIO-ORG", 8);
2948     + /* left align Vendor ID and pad with spaces */
2949     + memset(&buf[off+4], 0x20, 8);
2950     + memcpy(&buf[off+4], "LIO-ORG", sizeof("LIO-ORG") - 1);
2951     /* Extra Byte for NULL Terminator */
2952     id_len++;
2953     /* Identifier Length */
2954     diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
2955     index 2cfd61d62e97..ffa5b9f771b5 100644
2956     --- a/drivers/target/target_core_transport.c
2957     +++ b/drivers/target/target_core_transport.c
2958     @@ -224,19 +224,28 @@ void transport_subsystem_check_init(void)
2959     sub_api_initialized = 1;
2960     }
2961    
2962     +static void target_release_sess_cmd_refcnt(struct percpu_ref *ref)
2963     +{
2964     + struct se_session *sess = container_of(ref, typeof(*sess), cmd_count);
2965     +
2966     + wake_up(&sess->cmd_list_wq);
2967     +}
2968     +
2969     /**
2970     * transport_init_session - initialize a session object
2971     * @se_sess: Session object pointer.
2972     *
2973     * The caller must have zero-initialized @se_sess before calling this function.
2974     */
2975     -void transport_init_session(struct se_session *se_sess)
2976     +int transport_init_session(struct se_session *se_sess)
2977     {
2978     INIT_LIST_HEAD(&se_sess->sess_list);
2979     INIT_LIST_HEAD(&se_sess->sess_acl_list);
2980     INIT_LIST_HEAD(&se_sess->sess_cmd_list);
2981     spin_lock_init(&se_sess->sess_cmd_lock);
2982     init_waitqueue_head(&se_sess->cmd_list_wq);
2983     + return percpu_ref_init(&se_sess->cmd_count,
2984     + target_release_sess_cmd_refcnt, 0, GFP_KERNEL);
2985     }
2986     EXPORT_SYMBOL(transport_init_session);
2987    
2988     @@ -247,6 +256,7 @@ EXPORT_SYMBOL(transport_init_session);
2989     struct se_session *transport_alloc_session(enum target_prot_op sup_prot_ops)
2990     {
2991     struct se_session *se_sess;
2992     + int ret;
2993    
2994     se_sess = kmem_cache_zalloc(se_sess_cache, GFP_KERNEL);
2995     if (!se_sess) {
2996     @@ -254,7 +264,11 @@ struct se_session *transport_alloc_session(enum target_prot_op sup_prot_ops)
2997     " se_sess_cache\n");
2998     return ERR_PTR(-ENOMEM);
2999     }
3000     - transport_init_session(se_sess);
3001     + ret = transport_init_session(se_sess);
3002     + if (ret < 0) {
3003     + kfree(se_sess);
3004     + return ERR_PTR(ret);
3005     + }
3006     se_sess->sup_prot_ops = sup_prot_ops;
3007    
3008     return se_sess;
3009     @@ -581,6 +595,7 @@ void transport_free_session(struct se_session *se_sess)
3010     sbitmap_queue_free(&se_sess->sess_tag_pool);
3011     kvfree(se_sess->sess_cmd_map);
3012     }
3013     + percpu_ref_exit(&se_sess->cmd_count);
3014     kmem_cache_free(se_sess_cache, se_sess);
3015     }
3016     EXPORT_SYMBOL(transport_free_session);
3017     @@ -2719,6 +2734,7 @@ int target_get_sess_cmd(struct se_cmd *se_cmd, bool ack_kref)
3018     }
3019     se_cmd->transport_state |= CMD_T_PRE_EXECUTE;
3020     list_add_tail(&se_cmd->se_cmd_list, &se_sess->sess_cmd_list);
3021     + percpu_ref_get(&se_sess->cmd_count);
3022     out:
3023     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
3024    
3025     @@ -2749,8 +2765,6 @@ static void target_release_cmd_kref(struct kref *kref)
3026     if (se_sess) {
3027     spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
3028     list_del_init(&se_cmd->se_cmd_list);
3029     - if (se_sess->sess_tearing_down && list_empty(&se_sess->sess_cmd_list))
3030     - wake_up(&se_sess->cmd_list_wq);
3031     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
3032     }
3033    
3034     @@ -2758,6 +2772,8 @@ static void target_release_cmd_kref(struct kref *kref)
3035     se_cmd->se_tfo->release_cmd(se_cmd);
3036     if (compl)
3037     complete(compl);
3038     +
3039     + percpu_ref_put(&se_sess->cmd_count);
3040     }
3041    
3042     /**
3043     @@ -2886,6 +2902,8 @@ void target_sess_cmd_list_set_waiting(struct se_session *se_sess)
3044     spin_lock_irqsave(&se_sess->sess_cmd_lock, flags);
3045     se_sess->sess_tearing_down = 1;
3046     spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags);
3047     +
3048     + percpu_ref_kill(&se_sess->cmd_count);
3049     }
3050     EXPORT_SYMBOL(target_sess_cmd_list_set_waiting);
3051    
3052     @@ -2900,17 +2918,14 @@ void target_wait_for_sess_cmds(struct se_session *se_sess)
3053    
3054     WARN_ON_ONCE(!se_sess->sess_tearing_down);
3055    
3056     - spin_lock_irq(&se_sess->sess_cmd_lock);
3057     do {
3058     - ret = wait_event_lock_irq_timeout(
3059     - se_sess->cmd_list_wq,
3060     - list_empty(&se_sess->sess_cmd_list),
3061     - se_sess->sess_cmd_lock, 180 * HZ);
3062     + ret = wait_event_timeout(se_sess->cmd_list_wq,
3063     + percpu_ref_is_zero(&se_sess->cmd_count),
3064     + 180 * HZ);
3065     list_for_each_entry(cmd, &se_sess->sess_cmd_list, se_cmd_list)
3066     target_show_cmd("session shutdown: still waiting for ",
3067     cmd);
3068     } while (ret <= 0);
3069     - spin_unlock_irq(&se_sess->sess_cmd_lock);
3070     }
3071     EXPORT_SYMBOL(target_wait_for_sess_cmds);
3072    
3073     diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c
3074     index 70adcfdca8d1..124495f953fa 100644
3075     --- a/drivers/target/target_core_xcopy.c
3076     +++ b/drivers/target/target_core_xcopy.c
3077     @@ -479,6 +479,8 @@ static const struct target_core_fabric_ops xcopy_pt_tfo = {
3078    
3079     int target_xcopy_setup_pt(void)
3080     {
3081     + int ret;
3082     +
3083     xcopy_wq = alloc_workqueue("xcopy_wq", WQ_MEM_RECLAIM, 0);
3084     if (!xcopy_wq) {
3085     pr_err("Unable to allocate xcopy_wq\n");
3086     @@ -496,7 +498,9 @@ int target_xcopy_setup_pt(void)
3087     INIT_LIST_HEAD(&xcopy_pt_nacl.acl_list);
3088     INIT_LIST_HEAD(&xcopy_pt_nacl.acl_sess_list);
3089     memset(&xcopy_pt_sess, 0, sizeof(struct se_session));
3090     - transport_init_session(&xcopy_pt_sess);
3091     + ret = transport_init_session(&xcopy_pt_sess);
3092     + if (ret < 0)
3093     + return ret;
3094    
3095     xcopy_pt_nacl.se_tpg = &xcopy_pt_tpg;
3096     xcopy_pt_nacl.nacl_sess = &xcopy_pt_sess;
3097     diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
3098     index ebd33c0232e6..89ade213a1a9 100644
3099     --- a/drivers/tty/serial/amba-pl011.c
3100     +++ b/drivers/tty/serial/amba-pl011.c
3101     @@ -2780,6 +2780,7 @@ static struct platform_driver arm_sbsa_uart_platform_driver = {
3102     .name = "sbsa-uart",
3103     .of_match_table = of_match_ptr(sbsa_uart_of_match),
3104     .acpi_match_table = ACPI_PTR(sbsa_uart_acpi_match),
3105     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_AMBA_PL011),
3106     },
3107     };
3108    
3109     @@ -2808,6 +2809,7 @@ static struct amba_driver pl011_driver = {
3110     .drv = {
3111     .name = "uart-pl011",
3112     .pm = &pl011_dev_pm_ops,
3113     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_AMBA_PL011),
3114     },
3115     .id_table = pl011_ids,
3116     .probe = pl011_probe,
3117     diff --git a/drivers/tty/serial/pic32_uart.c b/drivers/tty/serial/pic32_uart.c
3118     index fd80d999308d..0bdf1687983f 100644
3119     --- a/drivers/tty/serial/pic32_uart.c
3120     +++ b/drivers/tty/serial/pic32_uart.c
3121     @@ -919,6 +919,7 @@ static struct platform_driver pic32_uart_platform_driver = {
3122     .driver = {
3123     .name = PIC32_DEV_NAME,
3124     .of_match_table = of_match_ptr(pic32_serial_dt_ids),
3125     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_PIC32),
3126     },
3127     };
3128    
3129     diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
3130     index c439a5a1e6c0..d4cca5bdaf1c 100644
3131     --- a/drivers/tty/serial/serial_core.c
3132     +++ b/drivers/tty/serial/serial_core.c
3133     @@ -205,10 +205,15 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
3134     if (!state->xmit.buf) {
3135     state->xmit.buf = (unsigned char *) page;
3136     uart_circ_clear(&state->xmit);
3137     + uart_port_unlock(uport, flags);
3138     } else {
3139     + uart_port_unlock(uport, flags);
3140     + /*
3141     + * Do not free() the page under the port lock, see
3142     + * uart_shutdown().
3143     + */
3144     free_page(page);
3145     }
3146     - uart_port_unlock(uport, flags);
3147    
3148     retval = uport->ops->startup(uport);
3149     if (retval == 0) {
3150     @@ -268,6 +273,7 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
3151     struct uart_port *uport = uart_port_check(state);
3152     struct tty_port *port = &state->port;
3153     unsigned long flags = 0;
3154     + char *xmit_buf = NULL;
3155    
3156     /*
3157     * Set the TTY IO error marker
3158     @@ -298,14 +304,18 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
3159     tty_port_set_suspended(port, 0);
3160    
3161     /*
3162     - * Free the transmit buffer page.
3163     + * Do not free() the transmit buffer page under the port lock since
3164     + * this can create various circular locking scenarios. For instance,
3165     + * console driver may need to allocate/free a debug object, which
3166     + * can endup in printk() recursion.
3167     */
3168     uart_port_lock(state, flags);
3169     - if (state->xmit.buf) {
3170     - free_page((unsigned long)state->xmit.buf);
3171     - state->xmit.buf = NULL;
3172     - }
3173     + xmit_buf = state->xmit.buf;
3174     + state->xmit.buf = NULL;
3175     uart_port_unlock(uport, flags);
3176     +
3177     + if (xmit_buf)
3178     + free_page((unsigned long)xmit_buf);
3179     }
3180    
3181     /**
3182     diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
3183     index 5413a04023f9..6df252648e40 100644
3184     --- a/drivers/tty/serial/xilinx_uartps.c
3185     +++ b/drivers/tty/serial/xilinx_uartps.c
3186     @@ -1719,6 +1719,7 @@ static struct platform_driver cdns_uart_platform_driver = {
3187     .name = CDNS_UART_NAME,
3188     .of_match_table = cdns_uart_of_match,
3189     .pm = &cdns_uart_dev_pm_ops,
3190     + .suppress_bind_attrs = IS_BUILTIN(CONFIG_SERIAL_XILINX_PS_UART),
3191     },
3192     };
3193    
3194     diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
3195     index 2d6d2c8244de..a00a56b4ae79 100644
3196     --- a/drivers/usb/dwc2/gadget.c
3197     +++ b/drivers/usb/dwc2/gadget.c
3198     @@ -3165,8 +3165,6 @@ static void kill_all_requests(struct dwc2_hsotg *hsotg,
3199     dwc2_hsotg_txfifo_flush(hsotg, ep->fifo_index);
3200     }
3201    
3202     -static int dwc2_hsotg_ep_disable(struct usb_ep *ep);
3203     -
3204     /**
3205     * dwc2_hsotg_disconnect - disconnect service
3206     * @hsotg: The device state.
3207     @@ -3188,9 +3186,11 @@ void dwc2_hsotg_disconnect(struct dwc2_hsotg *hsotg)
3208     /* all endpoints should be shutdown */
3209     for (ep = 0; ep < hsotg->num_of_eps; ep++) {
3210     if (hsotg->eps_in[ep])
3211     - dwc2_hsotg_ep_disable(&hsotg->eps_in[ep]->ep);
3212     + kill_all_requests(hsotg, hsotg->eps_in[ep],
3213     + -ESHUTDOWN);
3214     if (hsotg->eps_out[ep])
3215     - dwc2_hsotg_ep_disable(&hsotg->eps_out[ep]->ep);
3216     + kill_all_requests(hsotg, hsotg->eps_out[ep],
3217     + -ESHUTDOWN);
3218     }
3219    
3220     call_gadget(hsotg, disconnect);
3221     @@ -3234,6 +3234,7 @@ static void dwc2_hsotg_irq_fifoempty(struct dwc2_hsotg *hsotg, bool periodic)
3222     GINTSTS_PTXFEMP | \
3223     GINTSTS_RXFLVL)
3224    
3225     +static int dwc2_hsotg_ep_disable(struct usb_ep *ep);
3226     /**
3227     * dwc2_hsotg_core_init - issue softreset to the core
3228     * @hsotg: The device state
3229     @@ -4069,10 +4070,8 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
3230     struct dwc2_hsotg *hsotg = hs_ep->parent;
3231     int dir_in = hs_ep->dir_in;
3232     int index = hs_ep->index;
3233     - unsigned long flags;
3234     u32 epctrl_reg;
3235     u32 ctrl;
3236     - int locked;
3237    
3238     dev_dbg(hsotg->dev, "%s(ep %p)\n", __func__, ep);
3239    
3240     @@ -4088,10 +4087,6 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
3241    
3242     epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
3243    
3244     - locked = spin_is_locked(&hsotg->lock);
3245     - if (!locked)
3246     - spin_lock_irqsave(&hsotg->lock, flags);
3247     -
3248     ctrl = dwc2_readl(hsotg, epctrl_reg);
3249    
3250     if (ctrl & DXEPCTL_EPENA)
3251     @@ -4114,12 +4109,22 @@ static int dwc2_hsotg_ep_disable(struct usb_ep *ep)
3252     hs_ep->fifo_index = 0;
3253     hs_ep->fifo_size = 0;
3254    
3255     - if (!locked)
3256     - spin_unlock_irqrestore(&hsotg->lock, flags);
3257     -
3258     return 0;
3259     }
3260    
3261     +static int dwc2_hsotg_ep_disable_lock(struct usb_ep *ep)
3262     +{
3263     + struct dwc2_hsotg_ep *hs_ep = our_ep(ep);
3264     + struct dwc2_hsotg *hsotg = hs_ep->parent;
3265     + unsigned long flags;
3266     + int ret;
3267     +
3268     + spin_lock_irqsave(&hsotg->lock, flags);
3269     + ret = dwc2_hsotg_ep_disable(ep);
3270     + spin_unlock_irqrestore(&hsotg->lock, flags);
3271     + return ret;
3272     +}
3273     +
3274     /**
3275     * on_list - check request is on the given endpoint
3276     * @ep: The endpoint to check.
3277     @@ -4267,7 +4272,7 @@ static int dwc2_hsotg_ep_sethalt_lock(struct usb_ep *ep, int value)
3278    
3279     static const struct usb_ep_ops dwc2_hsotg_ep_ops = {
3280     .enable = dwc2_hsotg_ep_enable,
3281     - .disable = dwc2_hsotg_ep_disable,
3282     + .disable = dwc2_hsotg_ep_disable_lock,
3283     .alloc_request = dwc2_hsotg_ep_alloc_request,
3284     .free_request = dwc2_hsotg_ep_free_request,
3285     .queue = dwc2_hsotg_ep_queue_lock,
3286     @@ -4407,9 +4412,9 @@ static int dwc2_hsotg_udc_stop(struct usb_gadget *gadget)
3287     /* all endpoints should be shutdown */
3288     for (ep = 1; ep < hsotg->num_of_eps; ep++) {
3289     if (hsotg->eps_in[ep])
3290     - dwc2_hsotg_ep_disable(&hsotg->eps_in[ep]->ep);
3291     + dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep);
3292     if (hsotg->eps_out[ep])
3293     - dwc2_hsotg_ep_disable(&hsotg->eps_out[ep]->ep);
3294     + dwc2_hsotg_ep_disable_lock(&hsotg->eps_out[ep]->ep);
3295     }
3296    
3297     spin_lock_irqsave(&hsotg->lock, flags);
3298     @@ -4857,9 +4862,9 @@ int dwc2_hsotg_suspend(struct dwc2_hsotg *hsotg)
3299    
3300     for (ep = 0; ep < hsotg->num_of_eps; ep++) {
3301     if (hsotg->eps_in[ep])
3302     - dwc2_hsotg_ep_disable(&hsotg->eps_in[ep]->ep);
3303     + dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep);
3304     if (hsotg->eps_out[ep])
3305     - dwc2_hsotg_ep_disable(&hsotg->eps_out[ep]->ep);
3306     + dwc2_hsotg_ep_disable_lock(&hsotg->eps_out[ep]->ep);
3307     }
3308     }
3309    
3310     diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c
3311     index cdffbd1e0316..6e34f9594159 100644
3312     --- a/drivers/usb/gadget/udc/renesas_usb3.c
3313     +++ b/drivers/usb/gadget/udc/renesas_usb3.c
3314     @@ -358,6 +358,7 @@ struct renesas_usb3 {
3315     bool extcon_host; /* check id and set EXTCON_USB_HOST */
3316     bool extcon_usb; /* check vbus and set EXTCON_USB */
3317     bool forced_b_device;
3318     + bool start_to_connect;
3319     };
3320    
3321     #define gadget_to_renesas_usb3(_gadget) \
3322     @@ -476,7 +477,8 @@ static void usb3_init_axi_bridge(struct renesas_usb3 *usb3)
3323     static void usb3_init_epc_registers(struct renesas_usb3 *usb3)
3324     {
3325     usb3_write(usb3, ~0, USB3_USB_INT_STA_1);
3326     - usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
3327     + if (!usb3->workaround_for_vbus)
3328     + usb3_enable_irq_1(usb3, USB_INT_1_VBUS_CNG);
3329     }
3330    
3331     static bool usb3_wakeup_usb2_phy(struct renesas_usb3 *usb3)
3332     @@ -700,8 +702,7 @@ static void usb3_mode_config(struct renesas_usb3 *usb3, bool host, bool a_dev)
3333     usb3_set_mode_by_role_sw(usb3, host);
3334     usb3_vbus_out(usb3, a_dev);
3335     /* for A-Peripheral or forced B-device mode */
3336     - if ((!host && a_dev) ||
3337     - (usb3->workaround_for_vbus && usb3->forced_b_device))
3338     + if ((!host && a_dev) || usb3->start_to_connect)
3339     usb3_connect(usb3);
3340     spin_unlock_irqrestore(&usb3->lock, flags);
3341     }
3342     @@ -2432,7 +2433,11 @@ static ssize_t renesas_usb3_b_device_write(struct file *file,
3343     if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
3344     return -EFAULT;
3345    
3346     - if (!strncmp(buf, "1", 1))
3347     + usb3->start_to_connect = false;
3348     + if (usb3->workaround_for_vbus && usb3->forced_b_device &&
3349     + !strncmp(buf, "2", 1))
3350     + usb3->start_to_connect = true;
3351     + else if (!strncmp(buf, "1", 1))
3352     usb3->forced_b_device = true;
3353     else
3354     usb3->forced_b_device = false;
3355     @@ -2440,7 +2445,7 @@ static ssize_t renesas_usb3_b_device_write(struct file *file,
3356     if (usb3->workaround_for_vbus)
3357     usb3_disconnect(usb3);
3358    
3359     - /* Let this driver call usb3_connect() anyway */
3360     + /* Let this driver call usb3_connect() if needed */
3361     usb3_check_id(usb3);
3362    
3363     return count;
3364     diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
3365     index dbbd71f754d0..ba6e5cdaed2c 100644
3366     --- a/drivers/usb/typec/tcpm/tcpm.c
3367     +++ b/drivers/usb/typec/tcpm/tcpm.c
3368     @@ -317,6 +317,9 @@ struct tcpm_port {
3369     /* Deadline in jiffies to exit src_try_wait state */
3370     unsigned long max_wait;
3371    
3372     + /* port belongs to a self powered device */
3373     + bool self_powered;
3374     +
3375     #ifdef CONFIG_DEBUG_FS
3376     struct dentry *dentry;
3377     struct mutex logbuffer_lock; /* log buffer access lock */
3378     @@ -3254,7 +3257,8 @@ static void run_state_machine(struct tcpm_port *port)
3379     case SRC_HARD_RESET_VBUS_OFF:
3380     tcpm_set_vconn(port, true);
3381     tcpm_set_vbus(port, false);
3382     - tcpm_set_roles(port, false, TYPEC_SOURCE, TYPEC_HOST);
3383     + tcpm_set_roles(port, port->self_powered, TYPEC_SOURCE,
3384     + TYPEC_HOST);
3385     tcpm_set_state(port, SRC_HARD_RESET_VBUS_ON, PD_T_SRC_RECOVER);
3386     break;
3387     case SRC_HARD_RESET_VBUS_ON:
3388     @@ -3267,7 +3271,8 @@ static void run_state_machine(struct tcpm_port *port)
3389     memset(&port->pps_data, 0, sizeof(port->pps_data));
3390     tcpm_set_vconn(port, false);
3391     tcpm_set_charge(port, false);
3392     - tcpm_set_roles(port, false, TYPEC_SINK, TYPEC_DEVICE);
3393     + tcpm_set_roles(port, port->self_powered, TYPEC_SINK,
3394     + TYPEC_DEVICE);
3395     /*
3396     * VBUS may or may not toggle, depending on the adapter.
3397     * If it doesn't toggle, transition to SNK_HARD_RESET_SINK_ON
3398     @@ -4412,6 +4417,8 @@ sink:
3399     return -EINVAL;
3400     port->operating_snk_mw = mw / 1000;
3401    
3402     + port->self_powered = fwnode_property_read_bool(fwnode, "self-powered");
3403     +
3404     return 0;
3405     }
3406    
3407     @@ -4720,6 +4727,7 @@ static int tcpm_copy_caps(struct tcpm_port *port,
3408     port->typec_caps.prefer_role = tcfg->default_role;
3409     port->typec_caps.type = tcfg->type;
3410     port->typec_caps.data = tcfg->data;
3411     + port->self_powered = port->tcpc->config->self_powered;
3412    
3413     return 0;
3414     }
3415     diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
3416     index 329d3afcf304..65e4b8637638 100644
3417     --- a/fs/btrfs/dev-replace.c
3418     +++ b/fs/btrfs/dev-replace.c
3419     @@ -797,39 +797,58 @@ int btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info)
3420     case BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED:
3421     result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NOT_STARTED;
3422     btrfs_dev_replace_write_unlock(dev_replace);
3423     - goto leave;
3424     + break;
3425     case BTRFS_IOCTL_DEV_REPLACE_STATE_STARTED:
3426     + result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
3427     + tgt_device = dev_replace->tgtdev;
3428     + src_device = dev_replace->srcdev;
3429     + btrfs_dev_replace_write_unlock(dev_replace);
3430     + btrfs_scrub_cancel(fs_info);
3431     + /* btrfs_dev_replace_finishing() will handle the cleanup part */
3432     + btrfs_info_in_rcu(fs_info,
3433     + "dev_replace from %s (devid %llu) to %s canceled",
3434     + btrfs_dev_name(src_device), src_device->devid,
3435     + btrfs_dev_name(tgt_device));
3436     + break;
3437     case BTRFS_IOCTL_DEV_REPLACE_STATE_SUSPENDED:
3438     + /*
3439     + * Scrub doing the replace isn't running so we need to do the
3440     + * cleanup step of btrfs_dev_replace_finishing() here
3441     + */
3442     result = BTRFS_IOCTL_DEV_REPLACE_RESULT_NO_ERROR;
3443     tgt_device = dev_replace->tgtdev;
3444     src_device = dev_replace->srcdev;
3445     dev_replace->tgtdev = NULL;
3446     dev_replace->srcdev = NULL;
3447     - break;
3448     - }
3449     - dev_replace->replace_state = BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED;
3450     - dev_replace->time_stopped = ktime_get_real_seconds();
3451     - dev_replace->item_needs_writeback = 1;
3452     - btrfs_dev_replace_write_unlock(dev_replace);
3453     - btrfs_scrub_cancel(fs_info);
3454     + dev_replace->replace_state =
3455     + BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED;
3456     + dev_replace->time_stopped = ktime_get_real_seconds();
3457     + dev_replace->item_needs_writeback = 1;
3458    
3459     - trans = btrfs_start_transaction(root, 0);
3460     - if (IS_ERR(trans)) {
3461     - mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
3462     - return PTR_ERR(trans);
3463     - }
3464     - ret = btrfs_commit_transaction(trans);
3465     - WARN_ON(ret);
3466     + btrfs_dev_replace_write_unlock(dev_replace);
3467    
3468     - btrfs_info_in_rcu(fs_info,
3469     - "dev_replace from %s (devid %llu) to %s canceled",
3470     - btrfs_dev_name(src_device), src_device->devid,
3471     - btrfs_dev_name(tgt_device));
3472     + btrfs_scrub_cancel(fs_info);
3473     +
3474     + trans = btrfs_start_transaction(root, 0);
3475     + if (IS_ERR(trans)) {
3476     + mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
3477     + return PTR_ERR(trans);
3478     + }
3479     + ret = btrfs_commit_transaction(trans);
3480     + WARN_ON(ret);
3481    
3482     - if (tgt_device)
3483     - btrfs_destroy_dev_replace_tgtdev(tgt_device);
3484     + btrfs_info_in_rcu(fs_info,
3485     + "suspended dev_replace from %s (devid %llu) to %s canceled",
3486     + btrfs_dev_name(src_device), src_device->devid,
3487     + btrfs_dev_name(tgt_device));
3488     +
3489     + if (tgt_device)
3490     + btrfs_destroy_dev_replace_tgtdev(tgt_device);
3491     + break;
3492     + default:
3493     + result = -EINVAL;
3494     + }
3495    
3496     -leave:
3497     mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
3498     return result;
3499     }
3500     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3501     index 02772f8823cf..561bffcb56a0 100644
3502     --- a/fs/btrfs/inode.c
3503     +++ b/fs/btrfs/inode.c
3504     @@ -6419,14 +6419,19 @@ fail_dir_item:
3505     err = btrfs_del_root_ref(trans, key.objectid,
3506     root->root_key.objectid, parent_ino,
3507     &local_index, name, name_len);
3508     -
3509     + if (err)
3510     + btrfs_abort_transaction(trans, err);
3511     } else if (add_backref) {
3512     u64 local_index;
3513     int err;
3514    
3515     err = btrfs_del_inode_ref(trans, root, name, name_len,
3516     ino, parent_ino, &local_index);
3517     + if (err)
3518     + btrfs_abort_transaction(trans, err);
3519     }
3520     +
3521     + /* Return the original error code */
3522     return ret;
3523     }
3524    
3525     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
3526     index c872adfc939e..ea5fa9df9405 100644
3527     --- a/fs/btrfs/volumes.c
3528     +++ b/fs/btrfs/volumes.c
3529     @@ -4775,19 +4775,17 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
3530     /*
3531     * Use the number of data stripes to figure out how big this chunk
3532     * is really going to be in terms of logical address space,
3533     - * and compare that answer with the max chunk size
3534     + * and compare that answer with the max chunk size. If it's higher,
3535     + * we try to reduce stripe_size.
3536     */
3537     if (stripe_size * data_stripes > max_chunk_size) {
3538     - stripe_size = div_u64(max_chunk_size, data_stripes);
3539     -
3540     - /* bump the answer up to a 16MB boundary */
3541     - stripe_size = round_up(stripe_size, SZ_16M);
3542     -
3543     /*
3544     - * But don't go higher than the limits we found while searching
3545     - * for free extents
3546     + * Reduce stripe_size, round it up to a 16MB boundary again and
3547     + * then use it, unless it ends up being even bigger than the
3548     + * previous value we had already.
3549     */
3550     - stripe_size = min(devices_info[ndevs - 1].max_avail,
3551     + stripe_size = min(round_up(div_u64(max_chunk_size,
3552     + data_stripes), SZ_16M),
3553     stripe_size);
3554     }
3555    
3556     @@ -7485,6 +7483,8 @@ int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info)
3557     struct btrfs_path *path;
3558     struct btrfs_root *root = fs_info->dev_root;
3559     struct btrfs_key key;
3560     + u64 prev_devid = 0;
3561     + u64 prev_dev_ext_end = 0;
3562     int ret = 0;
3563    
3564     key.objectid = 1;
3565     @@ -7529,10 +7529,22 @@ int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info)
3566     chunk_offset = btrfs_dev_extent_chunk_offset(leaf, dext);
3567     physical_len = btrfs_dev_extent_length(leaf, dext);
3568    
3569     + /* Check if this dev extent overlaps with the previous one */
3570     + if (devid == prev_devid && physical_offset < prev_dev_ext_end) {
3571     + btrfs_err(fs_info,
3572     +"dev extent devid %llu physical offset %llu overlap with previous dev extent end %llu",
3573     + devid, physical_offset, prev_dev_ext_end);
3574     + ret = -EUCLEAN;
3575     + goto out;
3576     + }
3577     +
3578     ret = verify_one_dev_extent(fs_info, chunk_offset, devid,
3579     physical_offset, physical_len);
3580     if (ret < 0)
3581     goto out;
3582     + prev_devid = devid;
3583     + prev_dev_ext_end = physical_offset + physical_len;
3584     +
3585     ret = btrfs_next_item(root, path);
3586     if (ret < 0)
3587     goto out;
3588     diff --git a/fs/iomap.c b/fs/iomap.c
3589     index d6bc98ae8d35..ce837d962d47 100644
3590     --- a/fs/iomap.c
3591     +++ b/fs/iomap.c
3592     @@ -492,16 +492,29 @@ done:
3593     }
3594     EXPORT_SYMBOL_GPL(iomap_readpages);
3595    
3596     +/*
3597     + * iomap_is_partially_uptodate checks whether blocks within a page are
3598     + * uptodate or not.
3599     + *
3600     + * Returns true if all blocks which correspond to a file portion
3601     + * we want to read within the page are uptodate.
3602     + */
3603     int
3604     iomap_is_partially_uptodate(struct page *page, unsigned long from,
3605     unsigned long count)
3606     {
3607     struct iomap_page *iop = to_iomap_page(page);
3608     struct inode *inode = page->mapping->host;
3609     - unsigned first = from >> inode->i_blkbits;
3610     - unsigned last = (from + count - 1) >> inode->i_blkbits;
3611     + unsigned len, first, last;
3612     unsigned i;
3613    
3614     + /* Limit range to one page */
3615     + len = min_t(unsigned, PAGE_SIZE - from, count);
3616     +
3617     + /* First and last blocks in range within page */
3618     + first = from >> inode->i_blkbits;
3619     + last = (from + len - 1) >> inode->i_blkbits;
3620     +
3621     if (iop) {
3622     for (i = first; i <= last; i++)
3623     if (!test_bit(i, iop->uptodate))
3624     diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
3625     index 902a7dd10e5c..bb6ae387469f 100644
3626     --- a/fs/jffs2/super.c
3627     +++ b/fs/jffs2/super.c
3628     @@ -101,7 +101,8 @@ static int jffs2_sync_fs(struct super_block *sb, int wait)
3629     struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
3630    
3631     #ifdef CONFIG_JFFS2_FS_WRITEBUFFER
3632     - cancel_delayed_work_sync(&c->wbuf_dwork);
3633     + if (jffs2_is_writebuffered(c))
3634     + cancel_delayed_work_sync(&c->wbuf_dwork);
3635     #endif
3636    
3637     mutex_lock(&c->alloc_sem);
3638     diff --git a/fs/ocfs2/localalloc.c b/fs/ocfs2/localalloc.c
3639     index 7642b6712c39..30208233f65b 100644
3640     --- a/fs/ocfs2/localalloc.c
3641     +++ b/fs/ocfs2/localalloc.c
3642     @@ -345,13 +345,18 @@ int ocfs2_load_local_alloc(struct ocfs2_super *osb)
3643     if (num_used
3644     || alloc->id1.bitmap1.i_used
3645     || alloc->id1.bitmap1.i_total
3646     - || la->la_bm_off)
3647     - mlog(ML_ERROR, "Local alloc hasn't been recovered!\n"
3648     + || la->la_bm_off) {
3649     + mlog(ML_ERROR, "inconsistent detected, clean journal with"
3650     + " unrecovered local alloc, please run fsck.ocfs2!\n"
3651     "found = %u, set = %u, taken = %u, off = %u\n",
3652     num_used, le32_to_cpu(alloc->id1.bitmap1.i_used),
3653     le32_to_cpu(alloc->id1.bitmap1.i_total),
3654     OCFS2_LOCAL_ALLOC(alloc)->la_bm_off);
3655    
3656     + status = -EINVAL;
3657     + goto bail;
3658     + }
3659     +
3660     osb->local_alloc_bh = alloc_bh;
3661     osb->local_alloc_state = OCFS2_LA_ENABLED;
3662    
3663     diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
3664     index 12e21f789194..79f0e183f135 100644
3665     --- a/fs/pstore/ram_core.c
3666     +++ b/fs/pstore/ram_core.c
3667     @@ -497,6 +497,11 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig,
3668     sig ^= PERSISTENT_RAM_SIG;
3669    
3670     if (prz->buffer->sig == sig) {
3671     + if (buffer_size(prz) == 0) {
3672     + pr_debug("found existing empty buffer\n");
3673     + return 0;
3674     + }
3675     +
3676     if (buffer_size(prz) > prz->buffer_size ||
3677     buffer_start(prz) > buffer_size(prz))
3678     pr_info("found existing invalid buffer, size %zu, start %zu\n",
3679     diff --git a/fs/quota/quota.c b/fs/quota/quota.c
3680     index f0cbf58ad4da..fd5dd806f1b9 100644
3681     --- a/fs/quota/quota.c
3682     +++ b/fs/quota/quota.c
3683     @@ -791,7 +791,8 @@ static int quotactl_cmd_write(int cmd)
3684     /* Return true if quotactl command is manipulating quota on/off state */
3685     static bool quotactl_cmd_onoff(int cmd)
3686     {
3687     - return (cmd == Q_QUOTAON) || (cmd == Q_QUOTAOFF);
3688     + return (cmd == Q_QUOTAON) || (cmd == Q_QUOTAOFF) ||
3689     + (cmd == Q_XQUOTAON) || (cmd == Q_XQUOTAOFF);
3690     }
3691    
3692     /*
3693     diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
3694     index 7a85e609fc27..d8b8323e80f4 100644
3695     --- a/fs/userfaultfd.c
3696     +++ b/fs/userfaultfd.c
3697     @@ -736,10 +736,18 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma,
3698     struct userfaultfd_ctx *ctx;
3699    
3700     ctx = vma->vm_userfaultfd_ctx.ctx;
3701     - if (ctx && (ctx->features & UFFD_FEATURE_EVENT_REMAP)) {
3702     +
3703     + if (!ctx)
3704     + return;
3705     +
3706     + if (ctx->features & UFFD_FEATURE_EVENT_REMAP) {
3707     vm_ctx->ctx = ctx;
3708     userfaultfd_ctx_get(ctx);
3709     WRITE_ONCE(ctx->mmap_changing, true);
3710     + } else {
3711     + /* Drop uffd context if remap feature not enabled */
3712     + vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
3713     + vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING);
3714     }
3715     }
3716    
3717     diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
3718     index 9a6bc0951cfa..c31157135598 100644
3719     --- a/include/linux/backing-dev-defs.h
3720     +++ b/include/linux/backing-dev-defs.h
3721     @@ -258,6 +258,14 @@ static inline void wb_get(struct bdi_writeback *wb)
3722     */
3723     static inline void wb_put(struct bdi_writeback *wb)
3724     {
3725     + if (WARN_ON_ONCE(!wb->bdi)) {
3726     + /*
3727     + * A driver bug might cause a file to be removed before bdi was
3728     + * initialized.
3729     + */
3730     + return;
3731     + }
3732     +
3733     if (wb != &wb->bdi->wb)
3734     percpu_ref_put(&wb->refcnt);
3735     }
3736     diff --git a/include/linux/filter.h b/include/linux/filter.h
3737     index a8b9d90a8042..25a556589ae8 100644
3738     --- a/include/linux/filter.h
3739     +++ b/include/linux/filter.h
3740     @@ -675,24 +675,10 @@ static inline u32 bpf_ctx_off_adjust_machine(u32 size)
3741     return size;
3742     }
3743    
3744     -static inline bool bpf_ctx_narrow_align_ok(u32 off, u32 size_access,
3745     - u32 size_default)
3746     -{
3747     - size_default = bpf_ctx_off_adjust_machine(size_default);
3748     - size_access = bpf_ctx_off_adjust_machine(size_access);
3749     -
3750     -#ifdef __LITTLE_ENDIAN
3751     - return (off & (size_default - 1)) == 0;
3752     -#else
3753     - return (off & (size_default - 1)) + size_access == size_default;
3754     -#endif
3755     -}
3756     -
3757     static inline bool
3758     bpf_ctx_narrow_access_ok(u32 off, u32 size, u32 size_default)
3759     {
3760     - return bpf_ctx_narrow_align_ok(off, size, size_default) &&
3761     - size <= size_default && (size & (size - 1)) == 0;
3762     + return size <= size_default && (size & (size - 1)) == 0;
3763     }
3764    
3765     #define bpf_classic_proglen(fprog) (fprog->len * sizeof(fprog->filter[0]))
3766     diff --git a/include/linux/memblock.h b/include/linux/memblock.h
3767     index aee299a6aa76..3ef3086ed52f 100644
3768     --- a/include/linux/memblock.h
3769     +++ b/include/linux/memblock.h
3770     @@ -320,6 +320,7 @@ static inline int memblock_get_region_node(const struct memblock_region *r)
3771     /* Flags for memblock allocation APIs */
3772     #define MEMBLOCK_ALLOC_ANYWHERE (~(phys_addr_t)0)
3773     #define MEMBLOCK_ALLOC_ACCESSIBLE 0
3774     +#define MEMBLOCK_ALLOC_KASAN 1
3775    
3776     /* We are using top down, so it is safe to use 0 here */
3777     #define MEMBLOCK_LOW_LIMIT 0
3778     diff --git a/include/linux/swap.h b/include/linux/swap.h
3779     index d8a07a4f171d..3d3630b3f63d 100644
3780     --- a/include/linux/swap.h
3781     +++ b/include/linux/swap.h
3782     @@ -233,7 +233,6 @@ struct swap_info_struct {
3783     unsigned long flags; /* SWP_USED etc: see above */
3784     signed short prio; /* swap priority of this type */
3785     struct plist_node list; /* entry in swap_active_head */
3786     - struct plist_node avail_lists[MAX_NUMNODES];/* entry in swap_avail_heads */
3787     signed char type; /* strange name for an index */
3788     unsigned int max; /* extent of the swap_map */
3789     unsigned char *swap_map; /* vmalloc'ed array of usage counts */
3790     @@ -274,6 +273,16 @@ struct swap_info_struct {
3791     */
3792     struct work_struct discard_work; /* discard worker */
3793     struct swap_cluster_list discard_clusters; /* discard clusters list */
3794     + struct plist_node avail_lists[0]; /*
3795     + * entries in swap_avail_heads, one
3796     + * entry per node.
3797     + * Must be last as the number of the
3798     + * array is nr_node_ids, which is not
3799     + * a fixed value so have to allocate
3800     + * dynamically.
3801     + * And it has to be an array so that
3802     + * plist_for_each_* can work.
3803     + */
3804     };
3805    
3806     #ifdef CONFIG_64BIT
3807     diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h
3808     index 7e7fbfb84e8e..50c74a77db55 100644
3809     --- a/include/linux/usb/tcpm.h
3810     +++ b/include/linux/usb/tcpm.h
3811     @@ -89,6 +89,7 @@ struct tcpc_config {
3812     enum typec_port_data data;
3813     enum typec_role default_role;
3814     bool try_role_hw; /* try.{src,snk} implemented in hardware */
3815     + bool self_powered; /* port belongs to a self powered device */
3816    
3817     const struct typec_altmode_desc *alt_modes;
3818     };
3819     diff --git a/include/sound/soc.h b/include/sound/soc.h
3820     index 70c10a8f3e90..3e0ac310a3df 100644
3821     --- a/include/sound/soc.h
3822     +++ b/include/sound/soc.h
3823     @@ -553,12 +553,12 @@ static inline void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,
3824     }
3825     #endif
3826    
3827     -#ifdef CONFIG_SND_SOC_AC97_BUS
3828     struct snd_ac97 *snd_soc_alloc_ac97_component(struct snd_soc_component *component);
3829     struct snd_ac97 *snd_soc_new_ac97_component(struct snd_soc_component *component,
3830     unsigned int id, unsigned int id_mask);
3831     void snd_soc_free_ac97_component(struct snd_ac97 *ac97);
3832    
3833     +#ifdef CONFIG_SND_SOC_AC97_BUS
3834     int snd_soc_set_ac97_ops(struct snd_ac97_bus_ops *ops);
3835     int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
3836     struct platform_device *pdev);
3837     diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
3838     index e3bdb0550a59..d9fd4eac58c2 100644
3839     --- a/include/target/target_core_base.h
3840     +++ b/include/target/target_core_base.h
3841     @@ -601,6 +601,7 @@ struct se_session {
3842     struct se_node_acl *se_node_acl;
3843     struct se_portal_group *se_tpg;
3844     void *fabric_sess_ptr;
3845     + struct percpu_ref cmd_count;
3846     struct list_head sess_list;
3847     struct list_head sess_acl_list;
3848     struct list_head sess_cmd_list;
3849     diff --git a/include/target/target_core_fabric.h b/include/target/target_core_fabric.h
3850     index f4147b398431..eb9d0923c55c 100644
3851     --- a/include/target/target_core_fabric.h
3852     +++ b/include/target/target_core_fabric.h
3853     @@ -116,7 +116,7 @@ struct se_session *target_setup_session(struct se_portal_group *,
3854     struct se_session *, void *));
3855     void target_remove_session(struct se_session *);
3856    
3857     -void transport_init_session(struct se_session *);
3858     +int transport_init_session(struct se_session *se_sess);
3859     struct se_session *transport_alloc_session(enum target_prot_op);
3860     int transport_alloc_session_tags(struct se_session *, unsigned int,
3861     unsigned int);
3862     diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
3863     index 51ba84d4d34a..eedc7bd4185d 100644
3864     --- a/kernel/bpf/verifier.c
3865     +++ b/kernel/bpf/verifier.c
3866     @@ -3571,12 +3571,15 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn)
3867     return err;
3868    
3869     if (BPF_SRC(insn->code) == BPF_X) {
3870     + struct bpf_reg_state *src_reg = regs + insn->src_reg;
3871     + struct bpf_reg_state *dst_reg = regs + insn->dst_reg;
3872     +
3873     if (BPF_CLASS(insn->code) == BPF_ALU64) {
3874     /* case: R1 = R2
3875     * copy register state to dest reg
3876     */
3877     - regs[insn->dst_reg] = regs[insn->src_reg];
3878     - regs[insn->dst_reg].live |= REG_LIVE_WRITTEN;
3879     + *dst_reg = *src_reg;
3880     + dst_reg->live |= REG_LIVE_WRITTEN;
3881     } else {
3882     /* R1 = (u32) R2 */
3883     if (is_pointer_value(env, insn->src_reg)) {
3884     @@ -3584,9 +3587,14 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn)
3885     "R%d partial copy of pointer\n",
3886     insn->src_reg);
3887     return -EACCES;
3888     + } else if (src_reg->type == SCALAR_VALUE) {
3889     + *dst_reg = *src_reg;
3890     + dst_reg->live |= REG_LIVE_WRITTEN;
3891     + } else {
3892     + mark_reg_unknown(env, regs,
3893     + insn->dst_reg);
3894     }
3895     - mark_reg_unknown(env, regs, insn->dst_reg);
3896     - coerce_reg_to_size(&regs[insn->dst_reg], 4);
3897     + coerce_reg_to_size(dst_reg, 4);
3898     }
3899     } else {
3900     /* case: R = imm
3901     @@ -5789,10 +5797,10 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
3902     int i, cnt, size, ctx_field_size, delta = 0;
3903     const int insn_cnt = env->prog->len;
3904     struct bpf_insn insn_buf[16], *insn;
3905     + u32 target_size, size_default, off;
3906     struct bpf_prog *new_prog;
3907     enum bpf_access_type type;
3908     bool is_narrower_load;
3909     - u32 target_size;
3910    
3911     if (ops->gen_prologue || env->seen_direct_write) {
3912     if (!ops->gen_prologue) {
3913     @@ -5885,9 +5893,9 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
3914     * we will apply proper mask to the result.
3915     */
3916     is_narrower_load = size < ctx_field_size;
3917     + size_default = bpf_ctx_off_adjust_machine(ctx_field_size);
3918     + off = insn->off;
3919     if (is_narrower_load) {
3920     - u32 size_default = bpf_ctx_off_adjust_machine(ctx_field_size);
3921     - u32 off = insn->off;
3922     u8 size_code;
3923    
3924     if (type == BPF_WRITE) {
3925     @@ -5915,12 +5923,23 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
3926     }
3927    
3928     if (is_narrower_load && size < target_size) {
3929     - if (ctx_field_size <= 4)
3930     + u8 shift = (off & (size_default - 1)) * 8;
3931     +
3932     + if (ctx_field_size <= 4) {
3933     + if (shift)
3934     + insn_buf[cnt++] = BPF_ALU32_IMM(BPF_RSH,
3935     + insn->dst_reg,
3936     + shift);
3937     insn_buf[cnt++] = BPF_ALU32_IMM(BPF_AND, insn->dst_reg,
3938     (1 << size * 8) - 1);
3939     - else
3940     + } else {
3941     + if (shift)
3942     + insn_buf[cnt++] = BPF_ALU64_IMM(BPF_RSH,
3943     + insn->dst_reg,
3944     + shift);
3945     insn_buf[cnt++] = BPF_ALU64_IMM(BPF_AND, insn->dst_reg,
3946     (1 << size * 8) - 1);
3947     + }
3948     }
3949    
3950     new_prog = bpf_patch_insn_data(env, i + delta, insn_buf, cnt);
3951     diff --git a/mm/memblock.c b/mm/memblock.c
3952     index 81ae63ca78d0..f45a049532fe 100644
3953     --- a/mm/memblock.c
3954     +++ b/mm/memblock.c
3955     @@ -262,7 +262,8 @@ phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t size,
3956     phys_addr_t kernel_end, ret;
3957    
3958     /* pump up @end */
3959     - if (end == MEMBLOCK_ALLOC_ACCESSIBLE)
3960     + if (end == MEMBLOCK_ALLOC_ACCESSIBLE ||
3961     + end == MEMBLOCK_ALLOC_KASAN)
3962     end = memblock.current_limit;
3963    
3964     /* avoid allocating the first page */
3965     @@ -1412,13 +1413,15 @@ again:
3966     done:
3967     ptr = phys_to_virt(alloc);
3968    
3969     - /*
3970     - * The min_count is set to 0 so that bootmem allocated blocks
3971     - * are never reported as leaks. This is because many of these blocks
3972     - * are only referred via the physical address which is not
3973     - * looked up by kmemleak.
3974     - */
3975     - kmemleak_alloc(ptr, size, 0, 0);
3976     + /* Skip kmemleak for kasan_init() due to high volume. */
3977     + if (max_addr != MEMBLOCK_ALLOC_KASAN)
3978     + /*
3979     + * The min_count is set to 0 so that bootmem allocated
3980     + * blocks are never reported as leaks. This is because many
3981     + * of these blocks are only referred via the physical
3982     + * address which is not looked up by kmemleak.
3983     + */
3984     + kmemleak_alloc(ptr, size, 0, 0);
3985    
3986     return ptr;
3987     }
3988     diff --git a/mm/page-writeback.c b/mm/page-writeback.c
3989     index 3f690bae6b78..7d1010453fb9 100644
3990     --- a/mm/page-writeback.c
3991     +++ b/mm/page-writeback.c
3992     @@ -2154,6 +2154,7 @@ int write_cache_pages(struct address_space *mapping,
3993     {
3994     int ret = 0;
3995     int done = 0;
3996     + int error;
3997     struct pagevec pvec;
3998     int nr_pages;
3999     pgoff_t uninitialized_var(writeback_index);
4000     @@ -2227,25 +2228,31 @@ continue_unlock:
4001     goto continue_unlock;
4002    
4003     trace_wbc_writepage(wbc, inode_to_bdi(mapping->host));
4004     - ret = (*writepage)(page, wbc, data);
4005     - if (unlikely(ret)) {
4006     - if (ret == AOP_WRITEPAGE_ACTIVATE) {
4007     + error = (*writepage)(page, wbc, data);
4008     + if (unlikely(error)) {
4009     + /*
4010     + * Handle errors according to the type of
4011     + * writeback. There's no need to continue for
4012     + * background writeback. Just push done_index
4013     + * past this page so media errors won't choke
4014     + * writeout for the entire file. For integrity
4015     + * writeback, we must process the entire dirty
4016     + * set regardless of errors because the fs may
4017     + * still have state to clear for each page. In
4018     + * that case we continue processing and return
4019     + * the first error.
4020     + */
4021     + if (error == AOP_WRITEPAGE_ACTIVATE) {
4022     unlock_page(page);
4023     - ret = 0;
4024     - } else {
4025     - /*
4026     - * done_index is set past this page,
4027     - * so media errors will not choke
4028     - * background writeout for the entire
4029     - * file. This has consequences for
4030     - * range_cyclic semantics (ie. it may
4031     - * not be suitable for data integrity
4032     - * writeout).
4033     - */
4034     + error = 0;
4035     + } else if (wbc->sync_mode != WB_SYNC_ALL) {
4036     + ret = error;
4037     done_index = page->index + 1;
4038     done = 1;
4039     break;
4040     }
4041     + if (!ret)
4042     + ret = error;
4043     }
4044    
4045     /*
4046     diff --git a/mm/swapfile.c b/mm/swapfile.c
4047     index 20d3c0f47a5f..dbac1d49469d 100644
4048     --- a/mm/swapfile.c
4049     +++ b/mm/swapfile.c
4050     @@ -2813,8 +2813,9 @@ static struct swap_info_struct *alloc_swap_info(void)
4051     struct swap_info_struct *p;
4052     unsigned int type;
4053     int i;
4054     + int size = sizeof(*p) + nr_node_ids * sizeof(struct plist_node);
4055    
4056     - p = kvzalloc(sizeof(*p), GFP_KERNEL);
4057     + p = kvzalloc(size, GFP_KERNEL);
4058     if (!p)
4059     return ERR_PTR(-ENOMEM);
4060    
4061     diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
4062     index ef9928d7b4fb..ac2826ce162b 100644
4063     --- a/net/bluetooth/hci_event.c
4064     +++ b/net/bluetooth/hci_event.c
4065     @@ -5711,6 +5711,12 @@ static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
4066     return true;
4067     }
4068    
4069     + /* Check if request ended in Command Status - no way to retreive
4070     + * any extra parameters in this case.
4071     + */
4072     + if (hdr->evt == HCI_EV_CMD_STATUS)
4073     + return false;
4074     +
4075     if (hdr->evt != HCI_EV_CMD_COMPLETE) {
4076     bt_dev_err(hdev, "last event is not cmd complete (0x%2.2x)",
4077     hdr->evt);
4078     diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
4079     index 5372e2042adf..2cb8da465b98 100644
4080     --- a/net/bridge/br_forward.c
4081     +++ b/net/bridge/br_forward.c
4082     @@ -65,6 +65,7 @@ EXPORT_SYMBOL_GPL(br_dev_queue_push_xmit);
4083    
4084     int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb)
4085     {
4086     + skb->tstamp = 0;
4087     return NF_HOOK(NFPROTO_BRIDGE, NF_BR_POST_ROUTING,
4088     net, sk, skb, NULL, skb->dev,
4089     br_dev_queue_push_xmit);
4090     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
4091     index a8217e221e19..eebc3106d30e 100644
4092     --- a/net/core/skbuff.c
4093     +++ b/net/core/skbuff.c
4094     @@ -5202,7 +5202,6 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len,
4095     unsigned long chunk;
4096     struct sk_buff *skb;
4097     struct page *page;
4098     - gfp_t gfp_head;
4099     int i;
4100    
4101     *errcode = -EMSGSIZE;
4102     @@ -5212,12 +5211,8 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len,
4103     if (npages > MAX_SKB_FRAGS)
4104     return NULL;
4105    
4106     - gfp_head = gfp_mask;
4107     - if (gfp_head & __GFP_DIRECT_RECLAIM)
4108     - gfp_head |= __GFP_RETRY_MAYFAIL;
4109     -
4110     *errcode = -ENOBUFS;
4111     - skb = alloc_skb(header_len, gfp_head);
4112     + skb = alloc_skb(header_len, gfp_mask);
4113     if (!skb)
4114     return NULL;
4115    
4116     diff --git a/net/core/sock.c b/net/core/sock.c
4117     index 98659fb6e9fb..530583ae92bf 100644
4118     --- a/net/core/sock.c
4119     +++ b/net/core/sock.c
4120     @@ -698,6 +698,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
4121     break;
4122     case SO_DONTROUTE:
4123     sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
4124     + sk_dst_reset(sk);
4125     break;
4126     case SO_BROADCAST:
4127     sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
4128     diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
4129     index 608a6f4223fb..fecd0e7672b5 100644
4130     --- a/net/ipv4/devinet.c
4131     +++ b/net/ipv4/devinet.c
4132     @@ -1826,7 +1826,7 @@ put_tgt_net:
4133     if (fillargs.netnsid >= 0)
4134     put_net(tgt_net);
4135    
4136     - return err < 0 ? err : skb->len;
4137     + return skb->len ? : err;
4138     }
4139    
4140     static void rtmsg_ifa(int event, struct in_ifaddr *ifa, struct nlmsghdr *nlh,
4141     diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
4142     index 2c8d313ae216..fb1e7f237f53 100644
4143     --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
4144     +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
4145     @@ -57,17 +57,14 @@ struct clusterip_config {
4146     enum clusterip_hashmode hash_mode; /* which hashing mode */
4147     u_int32_t hash_initval; /* hash initialization */
4148     struct rcu_head rcu;
4149     -
4150     + struct net *net; /* netns for pernet list */
4151     char ifname[IFNAMSIZ]; /* device ifname */
4152     - struct notifier_block notifier; /* refresh c->ifindex in it */
4153     };
4154    
4155     #ifdef CONFIG_PROC_FS
4156     static const struct file_operations clusterip_proc_fops;
4157     #endif
4158    
4159     -static unsigned int clusterip_net_id __read_mostly;
4160     -
4161     struct clusterip_net {
4162     struct list_head configs;
4163     /* lock protects the configs list */
4164     @@ -78,16 +75,30 @@ struct clusterip_net {
4165     #endif
4166     };
4167    
4168     +static unsigned int clusterip_net_id __read_mostly;
4169     +static inline struct clusterip_net *clusterip_pernet(struct net *net)
4170     +{
4171     + return net_generic(net, clusterip_net_id);
4172     +}
4173     +
4174     static inline void
4175     clusterip_config_get(struct clusterip_config *c)
4176     {
4177     refcount_inc(&c->refcount);
4178     }
4179    
4180     -
4181     static void clusterip_config_rcu_free(struct rcu_head *head)
4182     {
4183     - kfree(container_of(head, struct clusterip_config, rcu));
4184     + struct clusterip_config *config;
4185     + struct net_device *dev;
4186     +
4187     + config = container_of(head, struct clusterip_config, rcu);
4188     + dev = dev_get_by_name(config->net, config->ifname);
4189     + if (dev) {
4190     + dev_mc_del(dev, config->clustermac);
4191     + dev_put(dev);
4192     + }
4193     + kfree(config);
4194     }
4195    
4196     static inline void
4197     @@ -101,9 +112,9 @@ clusterip_config_put(struct clusterip_config *c)
4198     * entry(rule) is removed, remove the config from lists, but don't free it
4199     * yet, since proc-files could still be holding references */
4200     static inline void
4201     -clusterip_config_entry_put(struct net *net, struct clusterip_config *c)
4202     +clusterip_config_entry_put(struct clusterip_config *c)
4203     {
4204     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
4205     + struct clusterip_net *cn = clusterip_pernet(c->net);
4206    
4207     local_bh_disable();
4208     if (refcount_dec_and_lock(&c->entries, &cn->lock)) {
4209     @@ -118,8 +129,6 @@ clusterip_config_entry_put(struct net *net, struct clusterip_config *c)
4210     spin_unlock(&cn->lock);
4211     local_bh_enable();
4212    
4213     - unregister_netdevice_notifier(&c->notifier);
4214     -
4215     return;
4216     }
4217     local_bh_enable();
4218     @@ -129,7 +138,7 @@ static struct clusterip_config *
4219     __clusterip_config_find(struct net *net, __be32 clusterip)
4220     {
4221     struct clusterip_config *c;
4222     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
4223     + struct clusterip_net *cn = clusterip_pernet(net);
4224    
4225     list_for_each_entry_rcu(c, &cn->configs, list) {
4226     if (c->clusterip == clusterip)
4227     @@ -181,32 +190,37 @@ clusterip_netdev_event(struct notifier_block *this, unsigned long event,
4228     void *ptr)
4229     {
4230     struct net_device *dev = netdev_notifier_info_to_dev(ptr);
4231     + struct net *net = dev_net(dev);
4232     + struct clusterip_net *cn = clusterip_pernet(net);
4233     struct clusterip_config *c;
4234    
4235     - c = container_of(this, struct clusterip_config, notifier);
4236     - switch (event) {
4237     - case NETDEV_REGISTER:
4238     - if (!strcmp(dev->name, c->ifname)) {
4239     - c->ifindex = dev->ifindex;
4240     - dev_mc_add(dev, c->clustermac);
4241     - }
4242     - break;
4243     - case NETDEV_UNREGISTER:
4244     - if (dev->ifindex == c->ifindex) {
4245     - dev_mc_del(dev, c->clustermac);
4246     - c->ifindex = -1;
4247     - }
4248     - break;
4249     - case NETDEV_CHANGENAME:
4250     - if (!strcmp(dev->name, c->ifname)) {
4251     - c->ifindex = dev->ifindex;
4252     - dev_mc_add(dev, c->clustermac);
4253     - } else if (dev->ifindex == c->ifindex) {
4254     - dev_mc_del(dev, c->clustermac);
4255     - c->ifindex = -1;
4256     + spin_lock_bh(&cn->lock);
4257     + list_for_each_entry_rcu(c, &cn->configs, list) {
4258     + switch (event) {
4259     + case NETDEV_REGISTER:
4260     + if (!strcmp(dev->name, c->ifname)) {
4261     + c->ifindex = dev->ifindex;
4262     + dev_mc_add(dev, c->clustermac);
4263     + }
4264     + break;
4265     + case NETDEV_UNREGISTER:
4266     + if (dev->ifindex == c->ifindex) {
4267     + dev_mc_del(dev, c->clustermac);
4268     + c->ifindex = -1;
4269     + }
4270     + break;
4271     + case NETDEV_CHANGENAME:
4272     + if (!strcmp(dev->name, c->ifname)) {
4273     + c->ifindex = dev->ifindex;
4274     + dev_mc_add(dev, c->clustermac);
4275     + } else if (dev->ifindex == c->ifindex) {
4276     + dev_mc_del(dev, c->clustermac);
4277     + c->ifindex = -1;
4278     + }
4279     + break;
4280     }
4281     - break;
4282     }
4283     + spin_unlock_bh(&cn->lock);
4284    
4285     return NOTIFY_DONE;
4286     }
4287     @@ -215,30 +229,44 @@ static struct clusterip_config *
4288     clusterip_config_init(struct net *net, const struct ipt_clusterip_tgt_info *i,
4289     __be32 ip, const char *iniface)
4290     {
4291     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
4292     + struct clusterip_net *cn = clusterip_pernet(net);
4293     struct clusterip_config *c;
4294     + struct net_device *dev;
4295     int err;
4296    
4297     + if (iniface[0] == '\0') {
4298     + pr_info("Please specify an interface name\n");
4299     + return ERR_PTR(-EINVAL);
4300     + }
4301     +
4302     c = kzalloc(sizeof(*c), GFP_ATOMIC);
4303     if (!c)
4304     return ERR_PTR(-ENOMEM);
4305    
4306     - strcpy(c->ifname, iniface);
4307     - c->ifindex = -1;
4308     - c->clusterip = ip;
4309     + dev = dev_get_by_name(net, iniface);
4310     + if (!dev) {
4311     + pr_info("no such interface %s\n", iniface);
4312     + kfree(c);
4313     + return ERR_PTR(-ENOENT);
4314     + }
4315     + c->ifindex = dev->ifindex;
4316     + strcpy(c->ifname, dev->name);
4317     memcpy(&c->clustermac, &i->clustermac, ETH_ALEN);
4318     + dev_mc_add(dev, c->clustermac);
4319     + dev_put(dev);
4320     +
4321     + c->clusterip = ip;
4322     c->num_total_nodes = i->num_total_nodes;
4323     clusterip_config_init_nodelist(c, i);
4324     c->hash_mode = i->hash_mode;
4325     c->hash_initval = i->hash_initval;
4326     + c->net = net;
4327     refcount_set(&c->refcount, 1);
4328    
4329     spin_lock_bh(&cn->lock);
4330     if (__clusterip_config_find(net, ip)) {
4331     - spin_unlock_bh(&cn->lock);
4332     - kfree(c);
4333     -
4334     - return ERR_PTR(-EBUSY);
4335     + err = -EBUSY;
4336     + goto out_config_put;
4337     }
4338    
4339     list_add_rcu(&c->list, &cn->configs);
4340     @@ -260,22 +288,17 @@ clusterip_config_init(struct net *net, const struct ipt_clusterip_tgt_info *i,
4341     }
4342     #endif
4343    
4344     - c->notifier.notifier_call = clusterip_netdev_event;
4345     - err = register_netdevice_notifier(&c->notifier);
4346     - if (!err) {
4347     - refcount_set(&c->entries, 1);
4348     - return c;
4349     - }
4350     + refcount_set(&c->entries, 1);
4351     + return c;
4352    
4353     #ifdef CONFIG_PROC_FS
4354     - proc_remove(c->pde);
4355     err:
4356     #endif
4357     spin_lock_bh(&cn->lock);
4358     list_del_rcu(&c->list);
4359     +out_config_put:
4360     spin_unlock_bh(&cn->lock);
4361     clusterip_config_put(c);
4362     -
4363     return ERR_PTR(err);
4364     }
4365    
4366     @@ -475,34 +498,20 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
4367     &e->ip.dst.s_addr);
4368     return -EINVAL;
4369     } else {
4370     - struct net_device *dev;
4371     -
4372     - if (e->ip.iniface[0] == '\0') {
4373     - pr_info("Please specify an interface name\n");
4374     - return -EINVAL;
4375     - }
4376     -
4377     - dev = dev_get_by_name(par->net, e->ip.iniface);
4378     - if (!dev) {
4379     - pr_info("no such interface %s\n",
4380     - e->ip.iniface);
4381     - return -ENOENT;
4382     - }
4383     - dev_put(dev);
4384     -
4385     config = clusterip_config_init(par->net, cipinfo,
4386     e->ip.dst.s_addr,
4387     e->ip.iniface);
4388     if (IS_ERR(config))
4389     return PTR_ERR(config);
4390     }
4391     - }
4392     + } else if (memcmp(&config->clustermac, &cipinfo->clustermac, ETH_ALEN))
4393     + return -EINVAL;
4394    
4395     ret = nf_ct_netns_get(par->net, par->family);
4396     if (ret < 0) {
4397     pr_info("cannot load conntrack support for proto=%u\n",
4398     par->family);
4399     - clusterip_config_entry_put(par->net, config);
4400     + clusterip_config_entry_put(config);
4401     clusterip_config_put(config);
4402     return ret;
4403     }
4404     @@ -524,7 +533,7 @@ static void clusterip_tg_destroy(const struct xt_tgdtor_param *par)
4405    
4406     /* if no more entries are referencing the config, remove it
4407     * from the list and destroy the proc entry */
4408     - clusterip_config_entry_put(par->net, cipinfo->config);
4409     + clusterip_config_entry_put(cipinfo->config);
4410    
4411     clusterip_config_put(cipinfo->config);
4412    
4413     @@ -806,7 +815,7 @@ static const struct file_operations clusterip_proc_fops = {
4414    
4415     static int clusterip_net_init(struct net *net)
4416     {
4417     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
4418     + struct clusterip_net *cn = clusterip_pernet(net);
4419     int ret;
4420    
4421     INIT_LIST_HEAD(&cn->configs);
4422     @@ -831,13 +840,12 @@ static int clusterip_net_init(struct net *net)
4423    
4424     static void clusterip_net_exit(struct net *net)
4425     {
4426     - struct clusterip_net *cn = net_generic(net, clusterip_net_id);
4427     + struct clusterip_net *cn = clusterip_pernet(net);
4428     #ifdef CONFIG_PROC_FS
4429     proc_remove(cn->procdir);
4430     cn->procdir = NULL;
4431     #endif
4432     nf_unregister_net_hook(net, &cip_arp_ops);
4433     - WARN_ON_ONCE(!list_empty(&cn->configs));
4434     }
4435    
4436     static struct pernet_operations clusterip_net_ops = {
4437     @@ -847,6 +855,10 @@ static struct pernet_operations clusterip_net_ops = {
4438     .size = sizeof(struct clusterip_net),
4439     };
4440    
4441     +struct notifier_block cip_netdev_notifier = {
4442     + .notifier_call = clusterip_netdev_event
4443     +};
4444     +
4445     static int __init clusterip_tg_init(void)
4446     {
4447     int ret;
4448     @@ -859,11 +871,17 @@ static int __init clusterip_tg_init(void)
4449     if (ret < 0)
4450     goto cleanup_subsys;
4451    
4452     + ret = register_netdevice_notifier(&cip_netdev_notifier);
4453     + if (ret < 0)
4454     + goto unregister_target;
4455     +
4456     pr_info("ClusterIP Version %s loaded successfully\n",
4457     CLUSTERIP_VERSION);
4458    
4459     return 0;
4460    
4461     +unregister_target:
4462     + xt_unregister_target(&clusterip_tg_reg);
4463     cleanup_subsys:
4464     unregister_pernet_subsys(&clusterip_net_ops);
4465     return ret;
4466     @@ -873,6 +891,7 @@ static void __exit clusterip_tg_exit(void)
4467     {
4468     pr_info("ClusterIP Version %s unloading\n", CLUSTERIP_VERSION);
4469    
4470     + unregister_netdevice_notifier(&cip_netdev_notifier);
4471     xt_unregister_target(&clusterip_tg_reg);
4472     unregister_pernet_subsys(&clusterip_net_ops);
4473    
4474     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
4475     index 045597b9a7c0..e3cb53b0ef67 100644
4476     --- a/net/ipv6/addrconf.c
4477     +++ b/net/ipv6/addrconf.c
4478     @@ -5154,7 +5154,7 @@ put_tgt_net:
4479     if (fillargs.netnsid >= 0)
4480     put_net(tgt_net);
4481    
4482     - return err < 0 ? err : skb->len;
4483     + return skb->len ? : err;
4484     }
4485    
4486     static int inet6_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
4487     diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
4488     index f0cd291034f0..4dc935838184 100644
4489     --- a/net/ipv6/af_inet6.c
4490     +++ b/net/ipv6/af_inet6.c
4491     @@ -310,6 +310,7 @@ static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
4492    
4493     /* Check if the address belongs to the host. */
4494     if (addr_type == IPV6_ADDR_MAPPED) {
4495     + struct net_device *dev = NULL;
4496     int chk_addr_ret;
4497    
4498     /* Binding to v4-mapped address on a v6-only socket
4499     @@ -320,9 +321,20 @@ static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
4500     goto out;
4501     }
4502    
4503     + rcu_read_lock();
4504     + if (sk->sk_bound_dev_if) {
4505     + dev = dev_get_by_index_rcu(net, sk->sk_bound_dev_if);
4506     + if (!dev) {
4507     + err = -ENODEV;
4508     + goto out_unlock;
4509     + }
4510     + }
4511     +
4512     /* Reproduce AF_INET checks to make the bindings consistent */
4513     v4addr = addr->sin6_addr.s6_addr32[3];
4514     - chk_addr_ret = inet_addr_type(net, v4addr);
4515     + chk_addr_ret = inet_addr_type_dev_table(net, dev, v4addr);
4516     + rcu_read_unlock();
4517     +
4518     if (!inet_can_nonlocal_bind(net, inet) &&
4519     v4addr != htonl(INADDR_ANY) &&
4520     chk_addr_ret != RTN_LOCAL &&
4521     diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
4522     index ae3786132c23..6613d8dbb0e5 100644
4523     --- a/net/ipv6/ip6_fib.c
4524     +++ b/net/ipv6/ip6_fib.c
4525     @@ -627,7 +627,11 @@ static int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
4526     return -ENOENT;
4527     }
4528    
4529     - res = fib6_dump_table(tb, skb, cb);
4530     + if (!cb->args[0]) {
4531     + res = fib6_dump_table(tb, skb, cb);
4532     + if (!res)
4533     + cb->args[0] = 1;
4534     + }
4535     goto out;
4536     }
4537    
4538     diff --git a/net/netfilter/ipset/ip_set_bitmap_ipmac.c b/net/netfilter/ipset/ip_set_bitmap_ipmac.c
4539     index c00b6a2e8e3c..13ade5782847 100644
4540     --- a/net/netfilter/ipset/ip_set_bitmap_ipmac.c
4541     +++ b/net/netfilter/ipset/ip_set_bitmap_ipmac.c
4542     @@ -219,10 +219,6 @@ bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
4543     struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
4544     u32 ip;
4545    
4546     - /* MAC can be src only */
4547     - if (!(opt->flags & IPSET_DIM_TWO_SRC))
4548     - return 0;
4549     -
4550     ip = ntohl(ip4addr(skb, opt->flags & IPSET_DIM_ONE_SRC));
4551     if (ip < map->first_ip || ip > map->last_ip)
4552     return -IPSET_ERR_BITMAP_RANGE;
4553     @@ -233,7 +229,11 @@ bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
4554     return -EINVAL;
4555    
4556     e.id = ip_to_id(map, ip);
4557     - memcpy(e.ether, eth_hdr(skb)->h_source, ETH_ALEN);
4558     +
4559     + if (opt->flags & IPSET_DIM_ONE_SRC)
4560     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4561     + else
4562     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
4563    
4564     return adtfn(set, &e, &ext, &opt->ext, opt->cmdflags);
4565     }
4566     diff --git a/net/netfilter/ipset/ip_set_hash_ipmac.c b/net/netfilter/ipset/ip_set_hash_ipmac.c
4567     index 1ab5ed2f6839..fd87de3ed55b 100644
4568     --- a/net/netfilter/ipset/ip_set_hash_ipmac.c
4569     +++ b/net/netfilter/ipset/ip_set_hash_ipmac.c
4570     @@ -103,7 +103,11 @@ hash_ipmac4_kadt(struct ip_set *set, const struct sk_buff *skb,
4571     (skb_mac_header(skb) + ETH_HLEN) > skb->data)
4572     return -EINVAL;
4573    
4574     - memcpy(e.ether, eth_hdr(skb)->h_source, ETH_ALEN);
4575     + if (opt->flags & IPSET_DIM_ONE_SRC)
4576     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4577     + else
4578     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
4579     +
4580     if (ether_addr_equal(e.ether, invalid_ether))
4581     return -EINVAL;
4582    
4583     @@ -211,15 +215,15 @@ hash_ipmac6_kadt(struct ip_set *set, const struct sk_buff *skb,
4584     };
4585     struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
4586    
4587     - /* MAC can be src only */
4588     - if (!(opt->flags & IPSET_DIM_TWO_SRC))
4589     - return 0;
4590     -
4591     if (skb_mac_header(skb) < skb->head ||
4592     (skb_mac_header(skb) + ETH_HLEN) > skb->data)
4593     return -EINVAL;
4594    
4595     - memcpy(e.ether, eth_hdr(skb)->h_source, ETH_ALEN);
4596     + if (opt->flags & IPSET_DIM_ONE_SRC)
4597     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4598     + else
4599     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
4600     +
4601     if (ether_addr_equal(e.ether, invalid_ether))
4602     return -EINVAL;
4603    
4604     diff --git a/net/netfilter/ipset/ip_set_hash_mac.c b/net/netfilter/ipset/ip_set_hash_mac.c
4605     index f9d5a2a1e3d0..4fe5f243d0a3 100644
4606     --- a/net/netfilter/ipset/ip_set_hash_mac.c
4607     +++ b/net/netfilter/ipset/ip_set_hash_mac.c
4608     @@ -81,15 +81,15 @@ hash_mac4_kadt(struct ip_set *set, const struct sk_buff *skb,
4609     struct hash_mac4_elem e = { { .foo[0] = 0, .foo[1] = 0 } };
4610     struct ip_set_ext ext = IP_SET_INIT_KEXT(skb, opt, set);
4611    
4612     - /* MAC can be src only */
4613     - if (!(opt->flags & IPSET_DIM_ONE_SRC))
4614     - return 0;
4615     -
4616     if (skb_mac_header(skb) < skb->head ||
4617     (skb_mac_header(skb) + ETH_HLEN) > skb->data)
4618     return -EINVAL;
4619    
4620     - ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4621     + if (opt->flags & IPSET_DIM_ONE_SRC)
4622     + ether_addr_copy(e.ether, eth_hdr(skb)->h_source);
4623     + else
4624     + ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);
4625     +
4626     if (is_zero_ether_addr(e.ether))
4627     return -EINVAL;
4628     return adtfn(set, &e, &ext, &opt->ext, opt->cmdflags);
4629     diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
4630     index 35966da84769..f920a347ee1c 100644
4631     --- a/net/openvswitch/flow.c
4632     +++ b/net/openvswitch/flow.c
4633     @@ -276,10 +276,12 @@ static int parse_ipv6hdr(struct sk_buff *skb, struct sw_flow_key *key)
4634    
4635     nexthdr = ipv6_find_hdr(skb, &payload_ofs, -1, &frag_off, &flags);
4636     if (flags & IP6_FH_F_FRAG) {
4637     - if (frag_off)
4638     + if (frag_off) {
4639     key->ip.frag = OVS_FRAG_TYPE_LATER;
4640     - else
4641     - key->ip.frag = OVS_FRAG_TYPE_FIRST;
4642     + key->ip.proto = nexthdr;
4643     + return 0;
4644     + }
4645     + key->ip.frag = OVS_FRAG_TYPE_FIRST;
4646     } else {
4647     key->ip.frag = OVS_FRAG_TYPE_NONE;
4648     }
4649     diff --git a/samples/bpf/bpf_load.c b/samples/bpf/bpf_load.c
4650     index e6d7e0fe155b..96783207de4a 100644
4651     --- a/samples/bpf/bpf_load.c
4652     +++ b/samples/bpf/bpf_load.c
4653     @@ -54,6 +54,23 @@ static int populate_prog_array(const char *event, int prog_fd)
4654     return 0;
4655     }
4656    
4657     +static int write_kprobe_events(const char *val)
4658     +{
4659     + int fd, ret, flags;
4660     +
4661     + if ((val != NULL) && (val[0] == '\0'))
4662     + flags = O_WRONLY | O_TRUNC;
4663     + else
4664     + flags = O_WRONLY | O_APPEND;
4665     +
4666     + fd = open("/sys/kernel/debug/tracing/kprobe_events", flags);
4667     +
4668     + ret = write(fd, val, strlen(val));
4669     + close(fd);
4670     +
4671     + return ret;
4672     +}
4673     +
4674     static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
4675     {
4676     bool is_socket = strncmp(event, "socket", 6) == 0;
4677     @@ -165,10 +182,9 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
4678    
4679     #ifdef __x86_64__
4680     if (strncmp(event, "sys_", 4) == 0) {
4681     - snprintf(buf, sizeof(buf),
4682     - "echo '%c:__x64_%s __x64_%s' >> /sys/kernel/debug/tracing/kprobe_events",
4683     - is_kprobe ? 'p' : 'r', event, event);
4684     - err = system(buf);
4685     + snprintf(buf, sizeof(buf), "%c:__x64_%s __x64_%s",
4686     + is_kprobe ? 'p' : 'r', event, event);
4687     + err = write_kprobe_events(buf);
4688     if (err >= 0) {
4689     need_normal_check = false;
4690     event_prefix = "__x64_";
4691     @@ -176,10 +192,9 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
4692     }
4693     #endif
4694     if (need_normal_check) {
4695     - snprintf(buf, sizeof(buf),
4696     - "echo '%c:%s %s' >> /sys/kernel/debug/tracing/kprobe_events",
4697     - is_kprobe ? 'p' : 'r', event, event);
4698     - err = system(buf);
4699     + snprintf(buf, sizeof(buf), "%c:%s %s",
4700     + is_kprobe ? 'p' : 'r', event, event);
4701     + err = write_kprobe_events(buf);
4702     if (err < 0) {
4703     printf("failed to create kprobe '%s' error '%s'\n",
4704     event, strerror(errno));
4705     @@ -519,7 +534,7 @@ static int do_load_bpf_file(const char *path, fixup_map_cb fixup_map)
4706     return 1;
4707    
4708     /* clear all kprobes */
4709     - i = system("echo \"\" > /sys/kernel/debug/tracing/kprobe_events");
4710     + i = write_kprobe_events("");
4711    
4712     /* scan over all elf sections to get license and map info */
4713     for (i = 1; i < ehdr.e_shnum; i++) {
4714     diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
4715     index 3d09844405c9..b8c866193ae6 100644
4716     --- a/scripts/Kbuild.include
4717     +++ b/scripts/Kbuild.include
4718     @@ -262,9 +262,8 @@ ifndef CONFIG_TRIM_UNUSED_KSYMS
4719    
4720     cmd_and_fixdep = \
4721     $(echo-cmd) $(cmd_$(1)); \
4722     - scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
4723     - rm -f $(depfile); \
4724     - mv -f $(dot-target).tmp $(dot-target).cmd;
4725     + scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\
4726     + rm -f $(depfile);
4727    
4728     else
4729    
4730     @@ -287,9 +286,8 @@ cmd_and_fixdep = \
4731     $(echo-cmd) $(cmd_$(1)); \
4732     $(ksym_dep_filter) | \
4733     scripts/basic/fixdep -e $(depfile) $@ '$(make-cmd)' \
4734     - > $(dot-target).tmp; \
4735     - rm -f $(depfile); \
4736     - mv -f $(dot-target).tmp $(dot-target).cmd;
4737     + > $(dot-target).cmd; \
4738     + rm -f $(depfile);
4739    
4740     endif
4741    
4742     diff --git a/scripts/Makefile.build b/scripts/Makefile.build
4743     index 6a6be9f440cf..1d56f181b917 100644
4744     --- a/scripts/Makefile.build
4745     +++ b/scripts/Makefile.build
4746     @@ -527,18 +527,16 @@ FORCE:
4747     # optimization, we don't need to read them if the target does not
4748     # exist, we will rebuild anyway in that case.
4749    
4750     -cmd_files := $(wildcard $(foreach f,$(sort $(targets)),$(dir $(f)).$(notdir $(f)).cmd))
4751     +existing-targets := $(wildcard $(sort $(targets)))
4752    
4753     -ifneq ($(cmd_files),)
4754     - include $(cmd_files)
4755     -endif
4756     +-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
4757    
4758     ifneq ($(KBUILD_SRC),)
4759     # Create directories for object files if they do not exist
4760     obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets))))
4761     -# If cmd_files exist, their directories apparently exist. Skip mkdir.
4762     -exist-dirs := $(sort $(patsubst %/,%, $(dir $(cmd_files))))
4763     -obj-dirs := $(strip $(filter-out $(exist-dirs), $(obj-dirs)))
4764     +# If targets exist, their directories apparently exist. Skip mkdir.
4765     +existing-dirs := $(sort $(patsubst %/,%, $(dir $(existing-targets))))
4766     +obj-dirs := $(strip $(filter-out $(existing-dirs), $(obj-dirs)))
4767     ifneq ($(obj-dirs),)
4768     $(shell mkdir -p $(obj-dirs))
4769     endif
4770     diff --git a/scripts/kconfig/zconf.l b/scripts/kconfig/zconf.l
4771     index 25bd2b89fe3f..c2f577d71964 100644
4772     --- a/scripts/kconfig/zconf.l
4773     +++ b/scripts/kconfig/zconf.l
4774     @@ -73,7 +73,7 @@ static void warn_ignored_character(char chr)
4775     {
4776     fprintf(stderr,
4777     "%s:%d:warning: ignoring unsupported character '%c'\n",
4778     - zconf_curname(), zconf_lineno(), chr);
4779     + current_file->name, yylineno, chr);
4780     }
4781     %}
4782    
4783     @@ -221,6 +221,8 @@ n [A-Za-z0-9_-]
4784     }
4785     <<EOF>> {
4786     BEGIN(INITIAL);
4787     + yylval.string = text;
4788     + return T_WORD_QUOTE;
4789     }
4790     }
4791    
4792     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
4793     index a67459eb62d5..0f27db6d94a9 100644
4794     --- a/security/selinux/hooks.c
4795     +++ b/security/selinux/hooks.c
4796     @@ -2934,7 +2934,7 @@ static int selinux_sb_kern_mount(struct super_block *sb, int flags, void *data)
4797     return rc;
4798    
4799     /* Allow all mounts performed by the kernel */
4800     - if (flags & MS_KERNMOUNT)
4801     + if (flags & (MS_KERNMOUNT | MS_SUBMOUNT))
4802     return 0;
4803    
4804     ad.type = LSM_AUDIT_DATA_DENTRY;
4805     diff --git a/sound/firewire/Kconfig b/sound/firewire/Kconfig
4806     index 8a146b039276..44cedb65bb88 100644
4807     --- a/sound/firewire/Kconfig
4808     +++ b/sound/firewire/Kconfig
4809     @@ -41,6 +41,7 @@ config SND_OXFW
4810     * Mackie(Loud) U.420/U.420d
4811     * TASCAM FireOne
4812     * Stanton Controllers & Systems 1 Deck/Mixer
4813     + * APOGEE duet FireWire
4814    
4815     To compile this driver as a module, choose M here: the module
4816     will be called snd-oxfw.
4817     diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c
4818     index 672d13488454..d91874275d2c 100644
4819     --- a/sound/firewire/bebob/bebob.c
4820     +++ b/sound/firewire/bebob/bebob.c
4821     @@ -408,7 +408,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {
4822     /* Apogee Electronics, DA/AD/DD-16X (X-FireWire card) */
4823     SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x00010048, &spec_normal),
4824     /* Apogee Electronics, Ensemble */
4825     - SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x00001eee, &spec_normal),
4826     + SND_BEBOB_DEV_ENTRY(VEN_APOGEE, 0x01eeee, &spec_normal),
4827     /* ESI, Quatafire610 */
4828     SND_BEBOB_DEV_ENTRY(VEN_ESI, 0x00010064, &spec_normal),
4829     /* AcousticReality, eARMasterOne */
4830     diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
4831     index afb78d90384b..3d27f3378d5d 100644
4832     --- a/sound/firewire/oxfw/oxfw.c
4833     +++ b/sound/firewire/oxfw/oxfw.c
4834     @@ -20,6 +20,7 @@
4835     #define VENDOR_LACIE 0x00d04b
4836     #define VENDOR_TASCAM 0x00022e
4837     #define OUI_STANTON 0x001260
4838     +#define OUI_APOGEE 0x0003db
4839    
4840     #define MODEL_SATELLITE 0x00200f
4841    
4842     @@ -397,6 +398,13 @@ static const struct ieee1394_device_id oxfw_id_table[] = {
4843     .vendor_id = OUI_STANTON,
4844     .model_id = 0x002000,
4845     },
4846     + // APOGEE, duet FireWire
4847     + {
4848     + .match_flags = IEEE1394_MATCH_VENDOR_ID |
4849     + IEEE1394_MATCH_MODEL_ID,
4850     + .vendor_id = OUI_APOGEE,
4851     + .model_id = 0x01dddd,
4852     + },
4853     { }
4854     };
4855     MODULE_DEVICE_TABLE(ieee1394, oxfw_id_table);
4856     diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
4857     index cdebab2f8ce5..7ada2c1f4964 100644
4858     --- a/sound/soc/amd/acp-pcm-dma.c
4859     +++ b/sound/soc/amd/acp-pcm-dma.c
4860     @@ -1151,18 +1151,21 @@ static int acp_dma_new(struct snd_soc_pcm_runtime *rtd)
4861     struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd,
4862     DRV_NAME);
4863     struct audio_drv_data *adata = dev_get_drvdata(component->dev);
4864     + struct device *parent = component->dev->parent;
4865    
4866     switch (adata->asic_type) {
4867     case CHIP_STONEY:
4868     ret = snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
4869     SNDRV_DMA_TYPE_DEV,
4870     - NULL, ST_MIN_BUFFER,
4871     + parent,
4872     + ST_MIN_BUFFER,
4873     ST_MAX_BUFFER);
4874     break;
4875     default:
4876     ret = snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
4877     SNDRV_DMA_TYPE_DEV,
4878     - NULL, MIN_BUFFER,
4879     + parent,
4880     + MIN_BUFFER,
4881     MAX_BUFFER);
4882     break;
4883     }
4884     diff --git a/sound/soc/codecs/pcm3168a.c b/sound/soc/codecs/pcm3168a.c
4885     index 52cc950c9fd1..445d025e1409 100644
4886     --- a/sound/soc/codecs/pcm3168a.c
4887     +++ b/sound/soc/codecs/pcm3168a.c
4888     @@ -770,15 +770,22 @@ err_clk:
4889     }
4890     EXPORT_SYMBOL_GPL(pcm3168a_probe);
4891    
4892     -void pcm3168a_remove(struct device *dev)
4893     +static void pcm3168a_disable(struct device *dev)
4894     {
4895     struct pcm3168a_priv *pcm3168a = dev_get_drvdata(dev);
4896    
4897     - pm_runtime_disable(dev);
4898     regulator_bulk_disable(ARRAY_SIZE(pcm3168a->supplies),
4899     - pcm3168a->supplies);
4900     + pcm3168a->supplies);
4901     clk_disable_unprepare(pcm3168a->scki);
4902     }
4903     +
4904     +void pcm3168a_remove(struct device *dev)
4905     +{
4906     + pm_runtime_disable(dev);
4907     +#ifndef CONFIG_PM
4908     + pcm3168a_disable(dev);
4909     +#endif
4910     +}
4911     EXPORT_SYMBOL_GPL(pcm3168a_remove);
4912    
4913     #ifdef CONFIG_PM
4914     @@ -833,10 +840,7 @@ static int pcm3168a_rt_suspend(struct device *dev)
4915    
4916     regcache_cache_only(pcm3168a->regmap, true);
4917    
4918     - regulator_bulk_disable(ARRAY_SIZE(pcm3168a->supplies),
4919     - pcm3168a->supplies);
4920     -
4921     - clk_disable_unprepare(pcm3168a->scki);
4922     + pcm3168a_disable(dev);
4923    
4924     return 0;
4925     }
4926     diff --git a/sound/soc/codecs/wm9705.c b/sound/soc/codecs/wm9705.c
4927     index ccdf088461b7..54c306707c02 100644
4928     --- a/sound/soc/codecs/wm9705.c
4929     +++ b/sound/soc/codecs/wm9705.c
4930     @@ -325,8 +325,7 @@ static int wm9705_soc_probe(struct snd_soc_component *component)
4931     if (wm9705->mfd_pdata) {
4932     wm9705->ac97 = wm9705->mfd_pdata->ac97;
4933     regmap = wm9705->mfd_pdata->regmap;
4934     - } else {
4935     -#ifdef CONFIG_SND_SOC_AC97_BUS
4936     + } else if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS)) {
4937     wm9705->ac97 = snd_soc_new_ac97_component(component, WM9705_VENDOR_ID,
4938     WM9705_VENDOR_ID_MASK);
4939     if (IS_ERR(wm9705->ac97)) {
4940     @@ -339,7 +338,8 @@ static int wm9705_soc_probe(struct snd_soc_component *component)
4941     snd_soc_free_ac97_component(wm9705->ac97);
4942     return PTR_ERR(regmap);
4943     }
4944     -#endif
4945     + } else {
4946     + return -ENXIO;
4947     }
4948    
4949     snd_soc_component_set_drvdata(component, wm9705->ac97);
4950     @@ -350,14 +350,12 @@ static int wm9705_soc_probe(struct snd_soc_component *component)
4951    
4952     static void wm9705_soc_remove(struct snd_soc_component *component)
4953     {
4954     -#ifdef CONFIG_SND_SOC_AC97_BUS
4955     struct wm9705_priv *wm9705 = snd_soc_component_get_drvdata(component);
4956    
4957     - if (!wm9705->mfd_pdata) {
4958     + if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS) && !wm9705->mfd_pdata) {
4959     snd_soc_component_exit_regmap(component);
4960     snd_soc_free_ac97_component(wm9705->ac97);
4961     }
4962     -#endif
4963     }
4964    
4965     static const struct snd_soc_component_driver soc_component_dev_wm9705 = {
4966     diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
4967     index e873baa9e778..01949eaba4fd 100644
4968     --- a/sound/soc/codecs/wm9712.c
4969     +++ b/sound/soc/codecs/wm9712.c
4970     @@ -642,8 +642,7 @@ static int wm9712_soc_probe(struct snd_soc_component *component)
4971     if (wm9712->mfd_pdata) {
4972     wm9712->ac97 = wm9712->mfd_pdata->ac97;
4973     regmap = wm9712->mfd_pdata->regmap;
4974     - } else {
4975     -#ifdef CONFIG_SND_SOC_AC97_BUS
4976     + } else if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS)) {
4977     int ret;
4978    
4979     wm9712->ac97 = snd_soc_new_ac97_component(component, WM9712_VENDOR_ID,
4980     @@ -660,7 +659,8 @@ static int wm9712_soc_probe(struct snd_soc_component *component)
4981     snd_soc_free_ac97_component(wm9712->ac97);
4982     return PTR_ERR(regmap);
4983     }
4984     -#endif
4985     + } else {
4986     + return -ENXIO;
4987     }
4988    
4989     snd_soc_component_init_regmap(component, regmap);
4990     @@ -673,14 +673,12 @@ static int wm9712_soc_probe(struct snd_soc_component *component)
4991    
4992     static void wm9712_soc_remove(struct snd_soc_component *component)
4993     {
4994     -#ifdef CONFIG_SND_SOC_AC97_BUS
4995     struct wm9712_priv *wm9712 = snd_soc_component_get_drvdata(component);
4996    
4997     - if (!wm9712->mfd_pdata) {
4998     + if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS) && !wm9712->mfd_pdata) {
4999     snd_soc_component_exit_regmap(component);
5000     snd_soc_free_ac97_component(wm9712->ac97);
5001     }
5002     -#endif
5003     }
5004    
5005     static const struct snd_soc_component_driver soc_component_dev_wm9712 = {
5006     diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
5007     index 643863bb32e0..5a2fdf4f69bf 100644
5008     --- a/sound/soc/codecs/wm9713.c
5009     +++ b/sound/soc/codecs/wm9713.c
5010     @@ -1214,8 +1214,7 @@ static int wm9713_soc_probe(struct snd_soc_component *component)
5011     if (wm9713->mfd_pdata) {
5012     wm9713->ac97 = wm9713->mfd_pdata->ac97;
5013     regmap = wm9713->mfd_pdata->regmap;
5014     - } else {
5015     -#ifdef CONFIG_SND_SOC_AC97_BUS
5016     + } else if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS)) {
5017     wm9713->ac97 = snd_soc_new_ac97_component(component, WM9713_VENDOR_ID,
5018     WM9713_VENDOR_ID_MASK);
5019     if (IS_ERR(wm9713->ac97))
5020     @@ -1225,7 +1224,8 @@ static int wm9713_soc_probe(struct snd_soc_component *component)
5021     snd_soc_free_ac97_component(wm9713->ac97);
5022     return PTR_ERR(regmap);
5023     }
5024     -#endif
5025     + } else {
5026     + return -ENXIO;
5027     }
5028    
5029     snd_soc_component_init_regmap(component, regmap);
5030     @@ -1238,14 +1238,12 @@ static int wm9713_soc_probe(struct snd_soc_component *component)
5031    
5032     static void wm9713_soc_remove(struct snd_soc_component *component)
5033     {
5034     -#ifdef CONFIG_SND_SOC_AC97_BUS
5035     struct wm9713_priv *wm9713 = snd_soc_component_get_drvdata(component);
5036    
5037     - if (!wm9713->mfd_pdata) {
5038     + if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS) && !wm9713->mfd_pdata) {
5039     snd_soc_component_exit_regmap(component);
5040     snd_soc_free_ac97_component(wm9713->ac97);
5041     }
5042     -#endif
5043     }
5044    
5045     static const struct snd_soc_component_driver soc_component_dev_wm9713 = {
5046     diff --git a/tools/lib/subcmd/Makefile b/tools/lib/subcmd/Makefile
5047     index 95563b8e1ad7..ed61fb3a46c0 100644
5048     --- a/tools/lib/subcmd/Makefile
5049     +++ b/tools/lib/subcmd/Makefile
5050     @@ -36,8 +36,6 @@ endif
5051     CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
5052    
5053     CFLAGS += -I$(srctree)/tools/include/
5054     -CFLAGS += -I$(srctree)/include/uapi
5055     -CFLAGS += -I$(srctree)/include
5056    
5057     SUBCMD_IN := $(OUTPUT)libsubcmd-in.o
5058    
5059     diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
5060     index 70144b98141c..8ea1a02812b0 100644
5061     --- a/tools/lib/traceevent/event-parse.c
5062     +++ b/tools/lib/traceevent/event-parse.c
5063     @@ -3498,7 +3498,7 @@ struct tep_event_format *
5064     tep_find_event_by_name(struct tep_handle *pevent,
5065     const char *sys, const char *name)
5066     {
5067     - struct tep_event_format *event;
5068     + struct tep_event_format *event = NULL;
5069     int i;
5070    
5071     if (pevent->last_event &&
5072     @@ -4221,7 +4221,7 @@ static struct tep_print_arg *make_bprint_args(char *fmt, void *data, int size, s
5073     unsigned long long ip, val;
5074     char *ptr;
5075     void *bptr;
5076     - int vsize;
5077     + int vsize = 0;
5078    
5079     field = pevent->bprint_buf_field;
5080     ip_field = pevent->bprint_ip_field;
5081     @@ -4881,7 +4881,7 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct tep_e
5082     char format[32];
5083     int show_func;
5084     int len_as_arg;
5085     - int len_arg;
5086     + int len_arg = 0;
5087     int len;
5088     int ls;
5089    
5090     @@ -5147,8 +5147,8 @@ void tep_data_lat_fmt(struct tep_handle *pevent,
5091     static int migrate_disable_exists;
5092     unsigned int lat_flags;
5093     unsigned int pc;
5094     - int lock_depth;
5095     - int migrate_disable;
5096     + int lock_depth = 0;
5097     + int migrate_disable = 0;
5098     int hardirq;
5099     int softirq;
5100     void *data = record->data;
5101     diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
5102     index a0e8c23f9125..acbb657f7ce2 100644
5103     --- a/tools/perf/Makefile.config
5104     +++ b/tools/perf/Makefile.config
5105     @@ -294,6 +294,8 @@ ifndef NO_BIONIC
5106     $(call feature_check,bionic)
5107     ifeq ($(feature-bionic), 1)
5108     BIONIC := 1
5109     + CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
5110     + CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
5111     EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
5112     EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
5113     endif
5114     diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
5115     index db0ba8caf5a2..ba8ecaf52200 100644
5116     --- a/tools/perf/arch/x86/util/intel-pt.c
5117     +++ b/tools/perf/arch/x86/util/intel-pt.c
5118     @@ -524,10 +524,21 @@ static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu,
5119     struct perf_evsel *evsel)
5120     {
5121     int err;
5122     + char c;
5123    
5124     if (!evsel)
5125     return 0;
5126    
5127     + /*
5128     + * If supported, force pass-through config term (pt=1) even if user
5129     + * sets pt=0, which avoids senseless kernel errors.
5130     + */
5131     + if (perf_pmu__scan_file(intel_pt_pmu, "format/pt", "%c", &c) == 1 &&
5132     + !(evsel->attr.config & 1)) {
5133     + pr_warning("pt=0 doesn't make sense, forcing pt=1\n");
5134     + evsel->attr.config |= 1;
5135     + }
5136     +
5137     err = intel_pt_val_config_term(intel_pt_pmu, "caps/cycle_thresholds",
5138     "cyc_thresh", "caps/psb_cyc",
5139     evsel->attr.config);
5140     diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
5141     index a635abfa77b6..1410d66192f7 100644
5142     --- a/tools/perf/builtin-stat.c
5143     +++ b/tools/perf/builtin-stat.c
5144     @@ -709,7 +709,7 @@ static int parse_metric_groups(const struct option *opt,
5145     return metricgroup__parse_groups(opt, str, &stat_config.metric_events);
5146     }
5147    
5148     -static const struct option stat_options[] = {
5149     +static struct option stat_options[] = {
5150     OPT_BOOLEAN('T', "transaction", &transaction_run,
5151     "hardware transaction statistics"),
5152     OPT_CALLBACK('e', "event", &evsel_list, "event",
5153     @@ -1599,6 +1599,12 @@ int cmd_stat(int argc, const char **argv)
5154     return -ENOMEM;
5155    
5156     parse_events__shrink_config_terms();
5157     +
5158     + /* String-parsing callback-based options would segfault when negated */
5159     + set_option_flag(stat_options, 'e', "event", PARSE_OPT_NONEG);
5160     + set_option_flag(stat_options, 'M', "metrics", PARSE_OPT_NONEG);
5161     + set_option_flag(stat_options, 'G', "cgroup", PARSE_OPT_NONEG);
5162     +
5163     argc = parse_options_subcommand(argc, argv, stat_options, stat_subcommands,
5164     (const char **) stat_usage,
5165     PARSE_OPT_STOP_AT_NON_OPTION);
5166     diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c
5167     index a827919c6263..775b99833e51 100644
5168     --- a/tools/perf/builtin-timechart.c
5169     +++ b/tools/perf/builtin-timechart.c
5170     @@ -43,6 +43,10 @@
5171     #include "util/data.h"
5172     #include "util/debug.h"
5173    
5174     +#ifdef LACKS_OPEN_MEMSTREAM_PROTOTYPE
5175     +FILE *open_memstream(char **ptr, size_t *sizeloc);
5176     +#endif
5177     +
5178     #define SUPPORT_OLD_POWER_EVENTS 1
5179     #define PWR_EVENT_EXIT -1
5180    
5181     diff --git a/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json b/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json
5182     index 36c903faed0b..71e9737f4614 100644
5183     --- a/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json
5184     +++ b/tools/perf/pmu-events/arch/x86/skylake/skl-metrics.json
5185     @@ -73,7 +73,7 @@
5186     },
5187     {
5188     "BriefDescription": "Actual Average Latency for L1 data-cache miss demand loads",
5189     - "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS_PS + MEM_LOAD_RETIRED.FB_HIT_PS )",
5190     + "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS + MEM_LOAD_RETIRED.FB_HIT )",
5191     "MetricGroup": "Memory_Bound;Memory_Lat",
5192     "MetricName": "Load_Miss_Real_Latency"
5193     },
5194     diff --git a/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json b/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json
5195     index 36c903faed0b..71e9737f4614 100644
5196     --- a/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json
5197     +++ b/tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json
5198     @@ -73,7 +73,7 @@
5199     },
5200     {
5201     "BriefDescription": "Actual Average Latency for L1 data-cache miss demand loads",
5202     - "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS_PS + MEM_LOAD_RETIRED.FB_HIT_PS )",
5203     + "MetricExpr": "L1D_PEND_MISS.PENDING / ( MEM_LOAD_RETIRED.L1_MISS + MEM_LOAD_RETIRED.FB_HIT )",
5204     "MetricGroup": "Memory_Bound;Memory_Lat",
5205     "MetricName": "Load_Miss_Real_Latency"
5206     },
5207     diff --git a/tools/perf/tests/bp_signal.c b/tools/perf/tests/bp_signal.c
5208     index a467615c5a0e..910e25e64188 100644
5209     --- a/tools/perf/tests/bp_signal.c
5210     +++ b/tools/perf/tests/bp_signal.c
5211     @@ -291,12 +291,20 @@ int test__bp_signal(struct test *test __maybe_unused, int subtest __maybe_unused
5212    
5213     bool test__bp_signal_is_supported(void)
5214     {
5215     -/*
5216     - * The powerpc so far does not have support to even create
5217     - * instruction breakpoint using the perf event interface.
5218     - * Once it's there we can release this.
5219     - */
5220     -#if defined(__powerpc__) || defined(__s390x__)
5221     + /*
5222     + * PowerPC and S390 do not support creation of instruction
5223     + * breakpoints using the perf_event interface.
5224     + *
5225     + * ARM requires explicit rounding down of the instruction
5226     + * pointer in Thumb mode, and then requires the single-step
5227     + * to be handled explicitly in the overflow handler to avoid
5228     + * stepping into the SIGIO handler and getting stuck on the
5229     + * breakpointed instruction.
5230     + *
5231     + * Just disable the test for these architectures until these
5232     + * issues are resolved.
5233     + */
5234     +#if defined(__powerpc__) || defined(__s390x__) || defined(__arm__)
5235     return false;
5236     #else
5237     return true;
5238     diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
5239     index 73430b73570d..c2f0c92623f0 100644
5240     --- a/tools/perf/util/cs-etm.c
5241     +++ b/tools/perf/util/cs-etm.c
5242     @@ -1005,7 +1005,7 @@ static int cs_etm__flush(struct cs_etm_queue *etmq)
5243     }
5244    
5245     swap_packet:
5246     - if (etmq->etm->synth_opts.last_branch) {
5247     + if (etm->sample_branches || etm->synth_opts.last_branch) {
5248     /*
5249     * Swap PACKET with PREV_PACKET: PACKET becomes PREV_PACKET for
5250     * the next incoming packet.
5251     diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
5252     index 668d2a9ef0f4..8a806b0758b0 100644
5253     --- a/tools/perf/util/evlist.c
5254     +++ b/tools/perf/util/evlist.c
5255     @@ -34,6 +34,10 @@
5256     #include <linux/log2.h>
5257     #include <linux/err.h>
5258    
5259     +#ifdef LACKS_SIGQUEUE_PROTOTYPE
5260     +int sigqueue(pid_t pid, int sig, const union sigval value);
5261     +#endif
5262     +
5263     #define FD(e, x, y) (*(int *)xyarray__entry(e->fd, x, y))
5264     #define SID(e, x, y) xyarray__entry(e->sample_id, x, y)
5265    
5266     diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
5267     index 59be3466d64d..920e1e6551dd 100644
5268     --- a/tools/perf/util/parse-events.c
5269     +++ b/tools/perf/util/parse-events.c
5270     @@ -2462,7 +2462,7 @@ restart:
5271     if (!name_only && strlen(syms->alias))
5272     snprintf(name, MAX_NAME_LEN, "%s OR %s", syms->symbol, syms->alias);
5273     else
5274     - strncpy(name, syms->symbol, MAX_NAME_LEN);
5275     + strlcpy(name, syms->symbol, MAX_NAME_LEN);
5276    
5277     evt_list[evt_i] = strdup(name);
5278     if (evt_list[evt_i] == NULL)
5279     diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c
5280     index 1cbada2dc6be..f735ee038713 100644
5281     --- a/tools/perf/util/svghelper.c
5282     +++ b/tools/perf/util/svghelper.c
5283     @@ -334,7 +334,7 @@ static char *cpu_model(void)
5284     if (file) {
5285     while (fgets(buf, 255, file)) {
5286     if (strstr(buf, "model name")) {
5287     - strncpy(cpu_m, &buf[13], 255);
5288     + strlcpy(cpu_m, &buf[13], 255);
5289     break;
5290     }
5291     }
5292     diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
5293     index e39dfb4e7970..ecd79b7fb107 100644
5294     --- a/tools/testing/selftests/bpf/Makefile
5295     +++ b/tools/testing/selftests/bpf/Makefile
5296     @@ -135,6 +135,16 @@ endif
5297     endif
5298     endif
5299    
5300     +# Have one program compiled without "-target bpf" to test whether libbpf loads
5301     +# it successfully
5302     +$(OUTPUT)/test_xdp.o: test_xdp.c
5303     + $(CLANG) $(CLANG_FLAGS) \
5304     + -O2 -emit-llvm -c $< -o - | \
5305     + $(LLC) -march=bpf -mcpu=$(CPU) $(LLC_FLAGS) -filetype=obj -o $@
5306     +ifeq ($(DWARF2BTF),y)
5307     + $(BTF_PAHOLE) -J $@
5308     +endif
5309     +
5310     $(OUTPUT)/%.o: %.c
5311     $(CLANG) $(CLANG_FLAGS) \
5312     -O2 -target bpf -emit-llvm -c $< -o - | \
5313     diff --git a/tools/testing/selftests/bpf/test_libbpf.sh b/tools/testing/selftests/bpf/test_libbpf.sh
5314     index 156d89f1edcc..2989b2e2d856 100755
5315     --- a/tools/testing/selftests/bpf/test_libbpf.sh
5316     +++ b/tools/testing/selftests/bpf/test_libbpf.sh
5317     @@ -33,17 +33,11 @@ trap exit_handler 0 2 3 6 9
5318    
5319     libbpf_open_file test_l4lb.o
5320    
5321     -# TODO: fix libbpf to load noinline functions
5322     -# [warning] libbpf: incorrect bpf_call opcode
5323     -#libbpf_open_file test_l4lb_noinline.o
5324     +# Load a program with BPF-to-BPF calls
5325     +libbpf_open_file test_l4lb_noinline.o
5326    
5327     -# TODO: fix test_xdp_meta.c to load with libbpf
5328     -# [warning] libbpf: test_xdp_meta.o doesn't provide kernel version
5329     -#libbpf_open_file test_xdp_meta.o
5330     -
5331     -# TODO: fix libbpf to handle .eh_frame
5332     -# [warning] libbpf: relocation failed: no section(10)
5333     -#libbpf_open_file ../../../../samples/bpf/tracex3_kern.o
5334     +# Load a program compiled without the "-target bpf" flag
5335     +libbpf_open_file test_xdp.o
5336    
5337     # Success
5338     exit 0
5339     diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c
5340     index f8eac4a544f4..444f49176a2d 100644
5341     --- a/tools/testing/selftests/bpf/test_verifier.c
5342     +++ b/tools/testing/selftests/bpf/test_verifier.c
5343     @@ -2903,6 +2903,19 @@ static struct bpf_test tests[] = {
5344     .result_unpriv = REJECT,
5345     .result = ACCEPT,
5346     },
5347     + {
5348     + "alu32: mov u32 const",
5349     + .insns = {
5350     + BPF_MOV32_IMM(BPF_REG_7, 0),
5351     + BPF_ALU32_IMM(BPF_AND, BPF_REG_7, 1),
5352     + BPF_MOV32_REG(BPF_REG_0, BPF_REG_7),
5353     + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
5354     + BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_7, 0),
5355     + BPF_EXIT_INSN(),
5356     + },
5357     + .result = ACCEPT,
5358     + .retval = 0,
5359     + },
5360     {
5361     "unpriv: partial copy of pointer",
5362     .insns = {
5363     diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h
5364     index 6ae3730c4ee3..76d654ef3234 100644
5365     --- a/tools/testing/selftests/kselftest_harness.h
5366     +++ b/tools/testing/selftests/kselftest_harness.h
5367     @@ -354,7 +354,7 @@
5368     * ASSERT_EQ(expected, measured): expected == measured
5369     */
5370     #define ASSERT_EQ(expected, seen) \
5371     - __EXPECT(expected, seen, ==, 1)
5372     + __EXPECT(expected, #expected, seen, #seen, ==, 1)
5373    
5374     /**
5375     * ASSERT_NE(expected, seen)
5376     @@ -365,7 +365,7 @@
5377     * ASSERT_NE(expected, measured): expected != measured
5378     */
5379     #define ASSERT_NE(expected, seen) \
5380     - __EXPECT(expected, seen, !=, 1)
5381     + __EXPECT(expected, #expected, seen, #seen, !=, 1)
5382    
5383     /**
5384     * ASSERT_LT(expected, seen)
5385     @@ -376,7 +376,7 @@
5386     * ASSERT_LT(expected, measured): expected < measured
5387     */
5388     #define ASSERT_LT(expected, seen) \
5389     - __EXPECT(expected, seen, <, 1)
5390     + __EXPECT(expected, #expected, seen, #seen, <, 1)
5391    
5392     /**
5393     * ASSERT_LE(expected, seen)
5394     @@ -387,7 +387,7 @@
5395     * ASSERT_LE(expected, measured): expected <= measured
5396     */
5397     #define ASSERT_LE(expected, seen) \
5398     - __EXPECT(expected, seen, <=, 1)
5399     + __EXPECT(expected, #expected, seen, #seen, <=, 1)
5400    
5401     /**
5402     * ASSERT_GT(expected, seen)
5403     @@ -398,7 +398,7 @@
5404     * ASSERT_GT(expected, measured): expected > measured
5405     */
5406     #define ASSERT_GT(expected, seen) \
5407     - __EXPECT(expected, seen, >, 1)
5408     + __EXPECT(expected, #expected, seen, #seen, >, 1)
5409    
5410     /**
5411     * ASSERT_GE(expected, seen)
5412     @@ -409,7 +409,7 @@
5413     * ASSERT_GE(expected, measured): expected >= measured
5414     */
5415     #define ASSERT_GE(expected, seen) \
5416     - __EXPECT(expected, seen, >=, 1)
5417     + __EXPECT(expected, #expected, seen, #seen, >=, 1)
5418    
5419     /**
5420     * ASSERT_NULL(seen)
5421     @@ -419,7 +419,7 @@
5422     * ASSERT_NULL(measured): NULL == measured
5423     */
5424     #define ASSERT_NULL(seen) \
5425     - __EXPECT(NULL, seen, ==, 1)
5426     + __EXPECT(NULL, "NULL", seen, #seen, ==, 1)
5427    
5428     /**
5429     * ASSERT_TRUE(seen)
5430     @@ -429,7 +429,7 @@
5431     * ASSERT_TRUE(measured): measured != 0
5432     */
5433     #define ASSERT_TRUE(seen) \
5434     - ASSERT_NE(0, seen)
5435     + __EXPECT(0, "0", seen, #seen, !=, 1)
5436    
5437     /**
5438     * ASSERT_FALSE(seen)
5439     @@ -439,7 +439,7 @@
5440     * ASSERT_FALSE(measured): measured == 0
5441     */
5442     #define ASSERT_FALSE(seen) \
5443     - ASSERT_EQ(0, seen)
5444     + __EXPECT(0, "0", seen, #seen, ==, 1)
5445    
5446     /**
5447     * ASSERT_STREQ(expected, seen)
5448     @@ -472,7 +472,7 @@
5449     * EXPECT_EQ(expected, measured): expected == measured
5450     */
5451     #define EXPECT_EQ(expected, seen) \
5452     - __EXPECT(expected, seen, ==, 0)
5453     + __EXPECT(expected, #expected, seen, #seen, ==, 0)
5454    
5455     /**
5456     * EXPECT_NE(expected, seen)
5457     @@ -483,7 +483,7 @@
5458     * EXPECT_NE(expected, measured): expected != measured
5459     */
5460     #define EXPECT_NE(expected, seen) \
5461     - __EXPECT(expected, seen, !=, 0)
5462     + __EXPECT(expected, #expected, seen, #seen, !=, 0)
5463    
5464     /**
5465     * EXPECT_LT(expected, seen)
5466     @@ -494,7 +494,7 @@
5467     * EXPECT_LT(expected, measured): expected < measured
5468     */
5469     #define EXPECT_LT(expected, seen) \
5470     - __EXPECT(expected, seen, <, 0)
5471     + __EXPECT(expected, #expected, seen, #seen, <, 0)
5472    
5473     /**
5474     * EXPECT_LE(expected, seen)
5475     @@ -505,7 +505,7 @@
5476     * EXPECT_LE(expected, measured): expected <= measured
5477     */
5478     #define EXPECT_LE(expected, seen) \
5479     - __EXPECT(expected, seen, <=, 0)
5480     + __EXPECT(expected, #expected, seen, #seen, <=, 0)
5481    
5482     /**
5483     * EXPECT_GT(expected, seen)
5484     @@ -516,7 +516,7 @@
5485     * EXPECT_GT(expected, measured): expected > measured
5486     */
5487     #define EXPECT_GT(expected, seen) \
5488     - __EXPECT(expected, seen, >, 0)
5489     + __EXPECT(expected, #expected, seen, #seen, >, 0)
5490    
5491     /**
5492     * EXPECT_GE(expected, seen)
5493     @@ -527,7 +527,7 @@
5494     * EXPECT_GE(expected, measured): expected >= measured
5495     */
5496     #define EXPECT_GE(expected, seen) \
5497     - __EXPECT(expected, seen, >=, 0)
5498     + __EXPECT(expected, #expected, seen, #seen, >=, 0)
5499    
5500     /**
5501     * EXPECT_NULL(seen)
5502     @@ -537,7 +537,7 @@
5503     * EXPECT_NULL(measured): NULL == measured
5504     */
5505     #define EXPECT_NULL(seen) \
5506     - __EXPECT(NULL, seen, ==, 0)
5507     + __EXPECT(NULL, "NULL", seen, #seen, ==, 0)
5508    
5509     /**
5510     * EXPECT_TRUE(seen)
5511     @@ -547,7 +547,7 @@
5512     * EXPECT_TRUE(measured): 0 != measured
5513     */
5514     #define EXPECT_TRUE(seen) \
5515     - EXPECT_NE(0, seen)
5516     + __EXPECT(0, "0", seen, #seen, !=, 0)
5517    
5518     /**
5519     * EXPECT_FALSE(seen)
5520     @@ -557,7 +557,7 @@
5521     * EXPECT_FALSE(measured): 0 == measured
5522     */
5523     #define EXPECT_FALSE(seen) \
5524     - EXPECT_EQ(0, seen)
5525     + __EXPECT(0, "0", seen, #seen, ==, 0)
5526    
5527     /**
5528     * EXPECT_STREQ(expected, seen)
5529     @@ -597,7 +597,7 @@
5530     if (_metadata->passed && _metadata->step < 255) \
5531     _metadata->step++;
5532    
5533     -#define __EXPECT(_expected, _seen, _t, _assert) do { \
5534     +#define __EXPECT(_expected, _expected_str, _seen, _seen_str, _t, _assert) do { \
5535     /* Avoid multiple evaluation of the cases */ \
5536     __typeof__(_expected) __exp = (_expected); \
5537     __typeof__(_seen) __seen = (_seen); \
5538     @@ -606,8 +606,8 @@
5539     unsigned long long __exp_print = (uintptr_t)__exp; \
5540     unsigned long long __seen_print = (uintptr_t)__seen; \
5541     __TH_LOG("Expected %s (%llu) %s %s (%llu)", \
5542     - #_expected, __exp_print, #_t, \
5543     - #_seen, __seen_print); \
5544     + _expected_str, __exp_print, #_t, \
5545     + _seen_str, __seen_print); \
5546     _metadata->passed = 0; \
5547     /* Ensure the optional handler is triggered */ \
5548     _metadata->trigger = 1; \