Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3281 - (show annotations) (download)
Mon Mar 4 10:35:52 2019 UTC (5 years, 2 months ago) by niro
File size: 184863 byte(s)
linux-4.20.5
1 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; \