Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0147-4.19.48-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3426 - (show annotations) (download)
Fri Aug 2 11:47:55 2019 UTC (4 years, 9 months ago) by niro
File size: 67754 byte(s)
-linux-4.19.48
1 diff --git a/Makefile b/Makefile
2 index b3ba28ff73d5..42529a87f3b4 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 19
9 -SUBLEVEL = 47
10 +SUBLEVEL = 48
11 EXTRAVERSION =
12 NAME = "People's Front"
13
14 @@ -508,13 +508,6 @@ export RETPOLINE_VDSO_CFLAGS
15 KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
16 KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
17
18 -# check for 'asm goto'
19 -ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
20 - CC_HAVE_ASM_GOTO := 1
21 - KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
22 - KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
23 -endif
24 -
25 # The expansion should be delayed until arch/$(SRCARCH)/Makefile is included.
26 # Some architectures define CROSS_COMPILE in arch/$(SRCARCH)/Makefile.
27 # CC_VERSION_TEXT is referenced from Kconfig (so it needs export),
28 diff --git a/arch/Kconfig b/arch/Kconfig
29 index 6801123932a5..a336548487e6 100644
30 --- a/arch/Kconfig
31 +++ b/arch/Kconfig
32 @@ -71,6 +71,7 @@ config KPROBES
33 config JUMP_LABEL
34 bool "Optimize very unlikely/likely branches"
35 depends on HAVE_ARCH_JUMP_LABEL
36 + depends on CC_HAS_ASM_GOTO
37 help
38 This option enables a transparent branch optimization that
39 makes certain almost-always-true or almost-always-false branch
40 diff --git a/arch/arm/kernel/jump_label.c b/arch/arm/kernel/jump_label.c
41 index 90bce3d9928e..303b3ab87f7e 100644
42 --- a/arch/arm/kernel/jump_label.c
43 +++ b/arch/arm/kernel/jump_label.c
44 @@ -4,8 +4,6 @@
45 #include <asm/patch.h>
46 #include <asm/insn.h>
47
48 -#ifdef HAVE_JUMP_LABEL
49 -
50 static void __arch_jump_label_transform(struct jump_entry *entry,
51 enum jump_label_type type,
52 bool is_static)
53 @@ -35,5 +33,3 @@ void arch_jump_label_transform_static(struct jump_entry *entry,
54 {
55 __arch_jump_label_transform(entry, type, true);
56 }
57 -
58 -#endif
59 diff --git a/arch/arm64/kernel/jump_label.c b/arch/arm64/kernel/jump_label.c
60 index e0756416e567..b90754aebd12 100644
61 --- a/arch/arm64/kernel/jump_label.c
62 +++ b/arch/arm64/kernel/jump_label.c
63 @@ -20,8 +20,6 @@
64 #include <linux/jump_label.h>
65 #include <asm/insn.h>
66
67 -#ifdef HAVE_JUMP_LABEL
68 -
69 void arch_jump_label_transform(struct jump_entry *entry,
70 enum jump_label_type type)
71 {
72 @@ -49,5 +47,3 @@ void arch_jump_label_transform_static(struct jump_entry *entry,
73 * NOP needs to be replaced by a branch.
74 */
75 }
76 -
77 -#endif /* HAVE_JUMP_LABEL */
78 diff --git a/arch/mips/kernel/jump_label.c b/arch/mips/kernel/jump_label.c
79 index 32e3168316cd..ab943927f97a 100644
80 --- a/arch/mips/kernel/jump_label.c
81 +++ b/arch/mips/kernel/jump_label.c
82 @@ -16,8 +16,6 @@
83 #include <asm/cacheflush.h>
84 #include <asm/inst.h>
85
86 -#ifdef HAVE_JUMP_LABEL
87 -
88 /*
89 * Define parameters for the standard MIPS and the microMIPS jump
90 * instruction encoding respectively:
91 @@ -70,5 +68,3 @@ void arch_jump_label_transform(struct jump_entry *e,
92
93 mutex_unlock(&text_mutex);
94 }
95 -
96 -#endif /* HAVE_JUMP_LABEL */
97 diff --git a/arch/powerpc/include/asm/asm-prototypes.h b/arch/powerpc/include/asm/asm-prototypes.h
98 index 1f4691ce4126..e398173ae67d 100644
99 --- a/arch/powerpc/include/asm/asm-prototypes.h
100 +++ b/arch/powerpc/include/asm/asm-prototypes.h
101 @@ -38,7 +38,7 @@ extern struct static_key hcall_tracepoint_key;
102 void __trace_hcall_entry(unsigned long opcode, unsigned long *args);
103 void __trace_hcall_exit(long opcode, long retval, unsigned long *retbuf);
104 /* OPAL tracing */
105 -#ifdef HAVE_JUMP_LABEL
106 +#ifdef CONFIG_JUMP_LABEL
107 extern struct static_key opal_tracepoint_key;
108 #endif
109
110 diff --git a/arch/powerpc/kernel/jump_label.c b/arch/powerpc/kernel/jump_label.c
111 index 6472472093d0..0080c5fbd225 100644
112 --- a/arch/powerpc/kernel/jump_label.c
113 +++ b/arch/powerpc/kernel/jump_label.c
114 @@ -11,7 +11,6 @@
115 #include <linux/jump_label.h>
116 #include <asm/code-patching.h>
117
118 -#ifdef HAVE_JUMP_LABEL
119 void arch_jump_label_transform(struct jump_entry *entry,
120 enum jump_label_type type)
121 {
122 @@ -22,4 +21,3 @@ void arch_jump_label_transform(struct jump_entry *entry,
123 else
124 patch_instruction(addr, PPC_INST_NOP);
125 }
126 -#endif
127 diff --git a/arch/powerpc/platforms/powernv/opal-tracepoints.c b/arch/powerpc/platforms/powernv/opal-tracepoints.c
128 index 1ab7d26c0a2c..f16a43540e30 100644
129 --- a/arch/powerpc/platforms/powernv/opal-tracepoints.c
130 +++ b/arch/powerpc/platforms/powernv/opal-tracepoints.c
131 @@ -4,7 +4,7 @@
132 #include <asm/trace.h>
133 #include <asm/asm-prototypes.h>
134
135 -#ifdef HAVE_JUMP_LABEL
136 +#ifdef CONFIG_JUMP_LABEL
137 struct static_key opal_tracepoint_key = STATIC_KEY_INIT;
138
139 int opal_tracepoint_regfunc(void)
140 diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S
141 index 251528231a9e..f4875fe3f8ff 100644
142 --- a/arch/powerpc/platforms/powernv/opal-wrappers.S
143 +++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
144 @@ -20,7 +20,7 @@
145 .section ".text"
146
147 #ifdef CONFIG_TRACEPOINTS
148 -#ifdef HAVE_JUMP_LABEL
149 +#ifdef CONFIG_JUMP_LABEL
150 #define OPAL_BRANCH(LABEL) \
151 ARCH_STATIC_BRANCH(LABEL, opal_tracepoint_key)
152 #else
153 diff --git a/arch/powerpc/platforms/pseries/hvCall.S b/arch/powerpc/platforms/pseries/hvCall.S
154 index d91412c591ef..50dc9426d0be 100644
155 --- a/arch/powerpc/platforms/pseries/hvCall.S
156 +++ b/arch/powerpc/platforms/pseries/hvCall.S
157 @@ -19,7 +19,7 @@
158
159 #ifdef CONFIG_TRACEPOINTS
160
161 -#ifndef HAVE_JUMP_LABEL
162 +#ifndef CONFIG_JUMP_LABEL
163 .section ".toc","aw"
164
165 .globl hcall_tracepoint_refcount
166 @@ -79,7 +79,7 @@ hcall_tracepoint_refcount:
167 mr r5,BUFREG; \
168 __HCALL_INST_POSTCALL
169
170 -#ifdef HAVE_JUMP_LABEL
171 +#ifdef CONFIG_JUMP_LABEL
172 #define HCALL_BRANCH(LABEL) \
173 ARCH_STATIC_BRANCH(LABEL, hcall_tracepoint_key)
174 #else
175 diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
176 index d3992ced0782..9e52b686a8fa 100644
177 --- a/arch/powerpc/platforms/pseries/lpar.c
178 +++ b/arch/powerpc/platforms/pseries/lpar.c
179 @@ -828,7 +828,7 @@ EXPORT_SYMBOL(arch_free_page);
180 #endif /* CONFIG_PPC_BOOK3S_64 */
181
182 #ifdef CONFIG_TRACEPOINTS
183 -#ifdef HAVE_JUMP_LABEL
184 +#ifdef CONFIG_JUMP_LABEL
185 struct static_key hcall_tracepoint_key = STATIC_KEY_INIT;
186
187 int hcall_tracepoint_regfunc(void)
188 diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
189 index dbfd1730e631..b205c0ff0b22 100644
190 --- a/arch/s390/kernel/Makefile
191 +++ b/arch/s390/kernel/Makefile
192 @@ -44,7 +44,7 @@ CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"'
193 obj-y := traps.o time.o process.o base.o early.o setup.o idle.o vtime.o
194 obj-y += processor.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o nmi.o
195 obj-y += debug.o irq.o ipl.o dis.o diag.o vdso.o early_nobss.o
196 -obj-y += sysinfo.o jump_label.o lgr.o os_info.o machine_kexec.o pgm_check.o
197 +obj-y += sysinfo.o lgr.o os_info.o machine_kexec.o pgm_check.o
198 obj-y += runtime_instr.o cache.o fpu.o dumpstack.o guarded_storage.o sthyi.o
199 obj-y += entry.o reipl.o relocate_kernel.o kdebugfs.o alternative.o
200 obj-y += nospec-branch.o
201 @@ -68,6 +68,7 @@ obj-$(CONFIG_KPROBES) += kprobes.o
202 obj-$(CONFIG_FUNCTION_TRACER) += mcount.o ftrace.o
203 obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
204 obj-$(CONFIG_UPROBES) += uprobes.o
205 +obj-$(CONFIG_JUMP_LABEL) += jump_label.o
206
207 obj-$(CONFIG_KEXEC_FILE) += machine_kexec_file.o kexec_image.o
208 obj-$(CONFIG_KEXEC_FILE) += kexec_elf.o
209 diff --git a/arch/s390/kernel/jump_label.c b/arch/s390/kernel/jump_label.c
210 index 43f8430fb67d..68f415e334a5 100644
211 --- a/arch/s390/kernel/jump_label.c
212 +++ b/arch/s390/kernel/jump_label.c
213 @@ -10,8 +10,6 @@
214 #include <linux/jump_label.h>
215 #include <asm/ipl.h>
216
217 -#ifdef HAVE_JUMP_LABEL
218 -
219 struct insn {
220 u16 opcode;
221 s32 offset;
222 @@ -102,5 +100,3 @@ void arch_jump_label_transform_static(struct jump_entry *entry,
223 {
224 __jump_label_transform(entry, type, 1);
225 }
226 -
227 -#endif
228 diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile
229 index cf8640841b7a..97c0e19263d1 100644
230 --- a/arch/sparc/kernel/Makefile
231 +++ b/arch/sparc/kernel/Makefile
232 @@ -118,4 +118,4 @@ pc--$(CONFIG_PERF_EVENTS) := perf_event.o
233 obj-$(CONFIG_SPARC64) += $(pc--y)
234
235 obj-$(CONFIG_UPROBES) += uprobes.o
236 -obj-$(CONFIG_SPARC64) += jump_label.o
237 +obj-$(CONFIG_JUMP_LABEL) += jump_label.o
238 diff --git a/arch/sparc/kernel/jump_label.c b/arch/sparc/kernel/jump_label.c
239 index 7f8eac51df33..a4cfaeecaf5e 100644
240 --- a/arch/sparc/kernel/jump_label.c
241 +++ b/arch/sparc/kernel/jump_label.c
242 @@ -9,8 +9,6 @@
243
244 #include <asm/cacheflush.h>
245
246 -#ifdef HAVE_JUMP_LABEL
247 -
248 void arch_jump_label_transform(struct jump_entry *entry,
249 enum jump_label_type type)
250 {
251 @@ -47,5 +45,3 @@ void arch_jump_label_transform(struct jump_entry *entry,
252 flushi(insn);
253 mutex_unlock(&text_mutex);
254 }
255 -
256 -#endif
257 diff --git a/arch/x86/Makefile b/arch/x86/Makefile
258 index ab2071e40efe..ce0d0424a53d 100644
259 --- a/arch/x86/Makefile
260 +++ b/arch/x86/Makefile
261 @@ -305,7 +305,7 @@ vdso_install:
262
263 archprepare: checkbin
264 checkbin:
265 -ifndef CC_HAVE_ASM_GOTO
266 +ifndef CONFIG_CC_HAS_ASM_GOTO
267 @echo Compiler lacks asm-goto support.
268 @exit 1
269 endif
270 diff --git a/arch/x86/entry/calling.h b/arch/x86/entry/calling.h
271 index 352e70cd33e8..e699b2041665 100644
272 --- a/arch/x86/entry/calling.h
273 +++ b/arch/x86/entry/calling.h
274 @@ -337,7 +337,7 @@ For 32-bit we have the following conventions - kernel is built with
275 */
276 .macro CALL_enter_from_user_mode
277 #ifdef CONFIG_CONTEXT_TRACKING
278 -#ifdef HAVE_JUMP_LABEL
279 +#ifdef CONFIG_JUMP_LABEL
280 STATIC_JUMP_IF_FALSE .Lafter_call_\@, context_tracking_enabled, def=0
281 #endif
282 call enter_from_user_mode
283 diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
284 index aced6c9290d6..ce95b8cbd229 100644
285 --- a/arch/x86/include/asm/cpufeature.h
286 +++ b/arch/x86/include/asm/cpufeature.h
287 @@ -140,7 +140,7 @@ extern void clear_cpu_cap(struct cpuinfo_x86 *c, unsigned int bit);
288
289 #define setup_force_cpu_bug(bit) setup_force_cpu_cap(bit)
290
291 -#if defined(__clang__) && !defined(CC_HAVE_ASM_GOTO)
292 +#if defined(__clang__) && !defined(CONFIG_CC_HAS_ASM_GOTO)
293
294 /*
295 * Workaround for the sake of BPF compilation which utilizes kernel
296 diff --git a/arch/x86/include/asm/jump_label.h b/arch/x86/include/asm/jump_label.h
297 index 8c0de4282659..7010e1c594c4 100644
298 --- a/arch/x86/include/asm/jump_label.h
299 +++ b/arch/x86/include/asm/jump_label.h
300 @@ -2,19 +2,6 @@
301 #ifndef _ASM_X86_JUMP_LABEL_H
302 #define _ASM_X86_JUMP_LABEL_H
303
304 -#ifndef HAVE_JUMP_LABEL
305 -/*
306 - * For better or for worse, if jump labels (the gcc extension) are missing,
307 - * then the entire static branch patching infrastructure is compiled out.
308 - * If that happens, the code in here will malfunction. Raise a compiler
309 - * error instead.
310 - *
311 - * In theory, jump labels and the static branch patching infrastructure
312 - * could be decoupled to fix this.
313 - */
314 -#error asm/jump_label.h included on a non-jump-label kernel
315 -#endif
316 -
317 #define JUMP_LABEL_NOP_SIZE 5
318
319 #ifdef CONFIG_X86_64
320 diff --git a/arch/x86/include/asm/rmwcc.h b/arch/x86/include/asm/rmwcc.h
321 index 4914a3e7c803..033dc7ca49e9 100644
322 --- a/arch/x86/include/asm/rmwcc.h
323 +++ b/arch/x86/include/asm/rmwcc.h
324 @@ -4,7 +4,7 @@
325
326 #define __CLOBBERS_MEM(clb...) "memory", ## clb
327
328 -#if !defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(CC_HAVE_ASM_GOTO)
329 +#if !defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(CONFIG_CC_HAS_ASM_GOTO)
330
331 /* Use asm goto */
332
333 @@ -21,7 +21,7 @@ cc_label: \
334 #define __BINARY_RMWcc_ARG " %1, "
335
336
337 -#else /* defined(__GCC_ASM_FLAG_OUTPUTS__) || !defined(CC_HAVE_ASM_GOTO) */
338 +#else /* defined(__GCC_ASM_FLAG_OUTPUTS__) || !defined(CONFIG_CC_HAS_ASM_GOTO) */
339
340 /* Use flags output or a set instruction */
341
342 @@ -36,7 +36,7 @@ do { \
343
344 #define __BINARY_RMWcc_ARG " %2, "
345
346 -#endif /* defined(__GCC_ASM_FLAG_OUTPUTS__) || !defined(CC_HAVE_ASM_GOTO) */
347 +#endif /* defined(__GCC_ASM_FLAG_OUTPUTS__) || !defined(CONFIG_CC_HAS_ASM_GOTO) */
348
349 #define GEN_UNARY_RMWcc(op, var, arg0, cc) \
350 __GEN_RMWcc(op " " arg0, var, cc, __CLOBBERS_MEM())
351 diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
352 index 8824d01c0c35..da0b6bc090f3 100644
353 --- a/arch/x86/kernel/Makefile
354 +++ b/arch/x86/kernel/Makefile
355 @@ -49,7 +49,8 @@ obj-$(CONFIG_COMPAT) += signal_compat.o
356 obj-y += traps.o idt.o irq.o irq_$(BITS).o dumpstack_$(BITS).o
357 obj-y += time.o ioport.o dumpstack.o nmi.o
358 obj-$(CONFIG_MODIFY_LDT_SYSCALL) += ldt.o
359 -obj-y += setup.o x86_init.o i8259.o irqinit.o jump_label.o
360 +obj-y += setup.o x86_init.o i8259.o irqinit.o
361 +obj-$(CONFIG_JUMP_LABEL) += jump_label.o
362 obj-$(CONFIG_IRQ_WORK) += irq_work.o
363 obj-y += probe_roms.o
364 obj-$(CONFIG_X86_64) += sys_x86_64.o
365 diff --git a/arch/x86/kernel/jump_label.c b/arch/x86/kernel/jump_label.c
366 index eeea935e9bb5..4c3d9a3d45b2 100644
367 --- a/arch/x86/kernel/jump_label.c
368 +++ b/arch/x86/kernel/jump_label.c
369 @@ -16,8 +16,6 @@
370 #include <asm/alternative.h>
371 #include <asm/text-patching.h>
372
373 -#ifdef HAVE_JUMP_LABEL
374 -
375 union jump_code_union {
376 char code[JUMP_LABEL_NOP_SIZE];
377 struct {
378 @@ -142,5 +140,3 @@ __init_or_module void arch_jump_label_transform_static(struct jump_entry *entry,
379 if (jlstate == JL_STATE_UPDATE)
380 __jump_label_transform(entry, type, text_poke_early, 1);
381 }
382 -
383 -#endif
384 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
385 index 860bd271619d..4a688ef9e448 100644
386 --- a/arch/x86/kvm/emulate.c
387 +++ b/arch/x86/kvm/emulate.c
388 @@ -456,7 +456,7 @@ FOP_END;
389
390 /*
391 * XXX: inoutclob user must know where the argument is being expanded.
392 - * Relying on CC_HAVE_ASM_GOTO would allow us to remove _fault.
393 + * Relying on CONFIG_CC_HAS_ASM_GOTO would allow us to remove _fault.
394 */
395 #define asm_safe(insn, inoutclob...) \
396 ({ \
397 diff --git a/drivers/crypto/vmx/ghash.c b/drivers/crypto/vmx/ghash.c
398 index dd8b8716467a..2d1a8cd35509 100644
399 --- a/drivers/crypto/vmx/ghash.c
400 +++ b/drivers/crypto/vmx/ghash.c
401 @@ -1,22 +1,14 @@
402 +// SPDX-License-Identifier: GPL-2.0
403 /**
404 * GHASH routines supporting VMX instructions on the Power 8
405 *
406 - * Copyright (C) 2015 International Business Machines Inc.
407 - *
408 - * This program is free software; you can redistribute it and/or modify
409 - * it under the terms of the GNU General Public License as published by
410 - * the Free Software Foundation; version 2 only.
411 - *
412 - * This program is distributed in the hope that it will be useful,
413 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
414 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
415 - * GNU General Public License for more details.
416 - *
417 - * You should have received a copy of the GNU General Public License
418 - * along with this program; if not, write to the Free Software
419 - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
420 + * Copyright (C) 2015, 2019 International Business Machines Inc.
421 *
422 * Author: Marcelo Henrique Cerri <mhcerri@br.ibm.com>
423 + *
424 + * Extended by Daniel Axtens <dja@axtens.net> to replace the fallback
425 + * mechanism. The new approach is based on arm64 code, which is:
426 + * Copyright (C) 2014 - 2018 Linaro Ltd. <ard.biesheuvel@linaro.org>
427 */
428
429 #include <linux/types.h>
430 @@ -39,71 +31,25 @@ void gcm_ghash_p8(u64 Xi[2], const u128 htable[16],
431 const u8 *in, size_t len);
432
433 struct p8_ghash_ctx {
434 + /* key used by vector asm */
435 u128 htable[16];
436 - struct crypto_shash *fallback;
437 + /* key used by software fallback */
438 + be128 key;
439 };
440
441 struct p8_ghash_desc_ctx {
442 u64 shash[2];
443 u8 buffer[GHASH_DIGEST_SIZE];
444 int bytes;
445 - struct shash_desc fallback_desc;
446 };
447
448 -static int p8_ghash_init_tfm(struct crypto_tfm *tfm)
449 -{
450 - const char *alg = "ghash-generic";
451 - struct crypto_shash *fallback;
452 - struct crypto_shash *shash_tfm = __crypto_shash_cast(tfm);
453 - struct p8_ghash_ctx *ctx = crypto_tfm_ctx(tfm);
454 -
455 - fallback = crypto_alloc_shash(alg, 0, CRYPTO_ALG_NEED_FALLBACK);
456 - if (IS_ERR(fallback)) {
457 - printk(KERN_ERR
458 - "Failed to allocate transformation for '%s': %ld\n",
459 - alg, PTR_ERR(fallback));
460 - return PTR_ERR(fallback);
461 - }
462 -
463 - crypto_shash_set_flags(fallback,
464 - crypto_shash_get_flags((struct crypto_shash
465 - *) tfm));
466 -
467 - /* Check if the descsize defined in the algorithm is still enough. */
468 - if (shash_tfm->descsize < sizeof(struct p8_ghash_desc_ctx)
469 - + crypto_shash_descsize(fallback)) {
470 - printk(KERN_ERR
471 - "Desc size of the fallback implementation (%s) does not match the expected value: %lu vs %u\n",
472 - alg,
473 - shash_tfm->descsize - sizeof(struct p8_ghash_desc_ctx),
474 - crypto_shash_descsize(fallback));
475 - return -EINVAL;
476 - }
477 - ctx->fallback = fallback;
478 -
479 - return 0;
480 -}
481 -
482 -static void p8_ghash_exit_tfm(struct crypto_tfm *tfm)
483 -{
484 - struct p8_ghash_ctx *ctx = crypto_tfm_ctx(tfm);
485 -
486 - if (ctx->fallback) {
487 - crypto_free_shash(ctx->fallback);
488 - ctx->fallback = NULL;
489 - }
490 -}
491 -
492 static int p8_ghash_init(struct shash_desc *desc)
493 {
494 - struct p8_ghash_ctx *ctx = crypto_tfm_ctx(crypto_shash_tfm(desc->tfm));
495 struct p8_ghash_desc_ctx *dctx = shash_desc_ctx(desc);
496
497 dctx->bytes = 0;
498 memset(dctx->shash, 0, GHASH_DIGEST_SIZE);
499 - dctx->fallback_desc.tfm = ctx->fallback;
500 - dctx->fallback_desc.flags = desc->flags;
501 - return crypto_shash_init(&dctx->fallback_desc);
502 + return 0;
503 }
504
505 static int p8_ghash_setkey(struct crypto_shash *tfm, const u8 *key,
506 @@ -121,7 +67,51 @@ static int p8_ghash_setkey(struct crypto_shash *tfm, const u8 *key,
507 disable_kernel_vsx();
508 pagefault_enable();
509 preempt_enable();
510 - return crypto_shash_setkey(ctx->fallback, key, keylen);
511 +
512 + memcpy(&ctx->key, key, GHASH_BLOCK_SIZE);
513 +
514 + return 0;
515 +}
516 +
517 +static inline void __ghash_block(struct p8_ghash_ctx *ctx,
518 + struct p8_ghash_desc_ctx *dctx)
519 +{
520 + if (!IN_INTERRUPT) {
521 + preempt_disable();
522 + pagefault_disable();
523 + enable_kernel_vsx();
524 + gcm_ghash_p8(dctx->shash, ctx->htable,
525 + dctx->buffer, GHASH_DIGEST_SIZE);
526 + disable_kernel_vsx();
527 + pagefault_enable();
528 + preempt_enable();
529 + } else {
530 + crypto_xor((u8 *)dctx->shash, dctx->buffer, GHASH_BLOCK_SIZE);
531 + gf128mul_lle((be128 *)dctx->shash, &ctx->key);
532 + }
533 +}
534 +
535 +static inline void __ghash_blocks(struct p8_ghash_ctx *ctx,
536 + struct p8_ghash_desc_ctx *dctx,
537 + const u8 *src, unsigned int srclen)
538 +{
539 + if (!IN_INTERRUPT) {
540 + preempt_disable();
541 + pagefault_disable();
542 + enable_kernel_vsx();
543 + gcm_ghash_p8(dctx->shash, ctx->htable,
544 + src, srclen);
545 + disable_kernel_vsx();
546 + pagefault_enable();
547 + preempt_enable();
548 + } else {
549 + while (srclen >= GHASH_BLOCK_SIZE) {
550 + crypto_xor((u8 *)dctx->shash, src, GHASH_BLOCK_SIZE);
551 + gf128mul_lle((be128 *)dctx->shash, &ctx->key);
552 + srclen -= GHASH_BLOCK_SIZE;
553 + src += GHASH_BLOCK_SIZE;
554 + }
555 + }
556 }
557
558 static int p8_ghash_update(struct shash_desc *desc,
559 @@ -131,49 +121,33 @@ static int p8_ghash_update(struct shash_desc *desc,
560 struct p8_ghash_ctx *ctx = crypto_tfm_ctx(crypto_shash_tfm(desc->tfm));
561 struct p8_ghash_desc_ctx *dctx = shash_desc_ctx(desc);
562
563 - if (IN_INTERRUPT) {
564 - return crypto_shash_update(&dctx->fallback_desc, src,
565 - srclen);
566 - } else {
567 - if (dctx->bytes) {
568 - if (dctx->bytes + srclen < GHASH_DIGEST_SIZE) {
569 - memcpy(dctx->buffer + dctx->bytes, src,
570 - srclen);
571 - dctx->bytes += srclen;
572 - return 0;
573 - }
574 + if (dctx->bytes) {
575 + if (dctx->bytes + srclen < GHASH_DIGEST_SIZE) {
576 memcpy(dctx->buffer + dctx->bytes, src,
577 - GHASH_DIGEST_SIZE - dctx->bytes);
578 - preempt_disable();
579 - pagefault_disable();
580 - enable_kernel_vsx();
581 - gcm_ghash_p8(dctx->shash, ctx->htable,
582 - dctx->buffer, GHASH_DIGEST_SIZE);
583 - disable_kernel_vsx();
584 - pagefault_enable();
585 - preempt_enable();
586 - src += GHASH_DIGEST_SIZE - dctx->bytes;
587 - srclen -= GHASH_DIGEST_SIZE - dctx->bytes;
588 - dctx->bytes = 0;
589 - }
590 - len = srclen & ~(GHASH_DIGEST_SIZE - 1);
591 - if (len) {
592 - preempt_disable();
593 - pagefault_disable();
594 - enable_kernel_vsx();
595 - gcm_ghash_p8(dctx->shash, ctx->htable, src, len);
596 - disable_kernel_vsx();
597 - pagefault_enable();
598 - preempt_enable();
599 - src += len;
600 - srclen -= len;
601 - }
602 - if (srclen) {
603 - memcpy(dctx->buffer, src, srclen);
604 - dctx->bytes = srclen;
605 + srclen);
606 + dctx->bytes += srclen;
607 + return 0;
608 }
609 - return 0;
610 + memcpy(dctx->buffer + dctx->bytes, src,
611 + GHASH_DIGEST_SIZE - dctx->bytes);
612 +
613 + __ghash_block(ctx, dctx);
614 +
615 + src += GHASH_DIGEST_SIZE - dctx->bytes;
616 + srclen -= GHASH_DIGEST_SIZE - dctx->bytes;
617 + dctx->bytes = 0;
618 + }
619 + len = srclen & ~(GHASH_DIGEST_SIZE - 1);
620 + if (len) {
621 + __ghash_blocks(ctx, dctx, src, len);
622 + src += len;
623 + srclen -= len;
624 }
625 + if (srclen) {
626 + memcpy(dctx->buffer, src, srclen);
627 + dctx->bytes = srclen;
628 + }
629 + return 0;
630 }
631
632 static int p8_ghash_final(struct shash_desc *desc, u8 *out)
633 @@ -182,25 +156,14 @@ static int p8_ghash_final(struct shash_desc *desc, u8 *out)
634 struct p8_ghash_ctx *ctx = crypto_tfm_ctx(crypto_shash_tfm(desc->tfm));
635 struct p8_ghash_desc_ctx *dctx = shash_desc_ctx(desc);
636
637 - if (IN_INTERRUPT) {
638 - return crypto_shash_final(&dctx->fallback_desc, out);
639 - } else {
640 - if (dctx->bytes) {
641 - for (i = dctx->bytes; i < GHASH_DIGEST_SIZE; i++)
642 - dctx->buffer[i] = 0;
643 - preempt_disable();
644 - pagefault_disable();
645 - enable_kernel_vsx();
646 - gcm_ghash_p8(dctx->shash, ctx->htable,
647 - dctx->buffer, GHASH_DIGEST_SIZE);
648 - disable_kernel_vsx();
649 - pagefault_enable();
650 - preempt_enable();
651 - dctx->bytes = 0;
652 - }
653 - memcpy(out, dctx->shash, GHASH_DIGEST_SIZE);
654 - return 0;
655 + if (dctx->bytes) {
656 + for (i = dctx->bytes; i < GHASH_DIGEST_SIZE; i++)
657 + dctx->buffer[i] = 0;
658 + __ghash_block(ctx, dctx);
659 + dctx->bytes = 0;
660 }
661 + memcpy(out, dctx->shash, GHASH_DIGEST_SIZE);
662 + return 0;
663 }
664
665 struct shash_alg p8_ghash_alg = {
666 @@ -215,11 +178,8 @@ struct shash_alg p8_ghash_alg = {
667 .cra_name = "ghash",
668 .cra_driver_name = "p8_ghash",
669 .cra_priority = 1000,
670 - .cra_flags = CRYPTO_ALG_NEED_FALLBACK,
671 .cra_blocksize = GHASH_BLOCK_SIZE,
672 .cra_ctxsize = sizeof(struct p8_ghash_ctx),
673 .cra_module = THIS_MODULE,
674 - .cra_init = p8_ghash_init_tfm,
675 - .cra_exit = p8_ghash_exit_tfm,
676 },
677 };
678 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
679 index 091b454e83fc..039beb5e0fa2 100644
680 --- a/drivers/net/bonding/bond_main.c
681 +++ b/drivers/net/bonding/bond_main.c
682 @@ -3107,13 +3107,18 @@ static int bond_slave_netdev_event(unsigned long event,
683 case NETDEV_CHANGE:
684 /* For 802.3ad mode only:
685 * Getting invalid Speed/Duplex values here will put slave
686 - * in weird state. So mark it as link-fail for the time
687 - * being and let link-monitoring (miimon) set it right when
688 - * correct speeds/duplex are available.
689 + * in weird state. Mark it as link-fail if the link was
690 + * previously up or link-down if it hasn't yet come up, and
691 + * let link-monitoring (miimon) set it right when correct
692 + * speeds/duplex are available.
693 */
694 if (bond_update_speed_duplex(slave) &&
695 - BOND_MODE(bond) == BOND_MODE_8023AD)
696 - slave->link = BOND_LINK_FAIL;
697 + BOND_MODE(bond) == BOND_MODE_8023AD) {
698 + if (slave->last_link_up)
699 + slave->link = BOND_LINK_FAIL;
700 + else
701 + slave->link = BOND_LINK_DOWN;
702 + }
703
704 if (BOND_MODE(bond) == BOND_MODE_8023AD)
705 bond_3ad_adapter_speed_duplex_changed(slave);
706 diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
707 index 2caa5c0c2bc4..dfaad1c2c2b8 100644
708 --- a/drivers/net/dsa/mv88e6xxx/chip.c
709 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
710 @@ -877,7 +877,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
711 err = mv88e6xxx_port_read(chip, port, s->reg + 1, &reg);
712 if (err)
713 return U64_MAX;
714 - high = reg;
715 + low |= ((u32)reg) << 16;
716 }
717 break;
718 case STATS_TYPE_BANK1:
719 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
720 index de46331aefc1..c54a74de7b08 100644
721 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
722 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
723 @@ -1599,6 +1599,8 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_napi *bnapi, u32 *raw_cons,
724 skb = bnxt_copy_skb(bnapi, data_ptr, len, dma_addr);
725 bnxt_reuse_rx_data(rxr, cons, data);
726 if (!skb) {
727 + if (agg_bufs)
728 + bnxt_reuse_rx_agg_bufs(bnapi, cp_cons, agg_bufs);
729 rc = -ENOMEM;
730 goto next_rx;
731 }
732 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
733 index c116f96956fe..f2aba5b160c2 100644
734 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
735 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
736 @@ -228,6 +228,9 @@ static void cxgb4_process_flow_match(struct net_device *dev,
737 fs->val.ivlan = vlan_tci;
738 fs->mask.ivlan = vlan_tci_mask;
739
740 + fs->val.ivlan_vld = 1;
741 + fs->mask.ivlan_vld = 1;
742 +
743 /* Chelsio adapters use ivlan_vld bit to match vlan packets
744 * as 802.1Q. Also, when vlan tag is present in packets,
745 * ethtype match is used then to match on ethtype of inner
746 @@ -238,8 +241,6 @@ static void cxgb4_process_flow_match(struct net_device *dev,
747 * ethtype value with ethtype of inner header.
748 */
749 if (fs->val.ethtype == ETH_P_8021Q) {
750 - fs->val.ivlan_vld = 1;
751 - fs->mask.ivlan_vld = 1;
752 fs->val.ethtype = 0;
753 fs->mask.ethtype = 0;
754 }
755 diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
756 index ad41ace0a27a..bf715a367273 100644
757 --- a/drivers/net/ethernet/freescale/fec_main.c
758 +++ b/drivers/net/ethernet/freescale/fec_main.c
759 @@ -3571,7 +3571,7 @@ failed_init:
760 if (fep->reg_phy)
761 regulator_disable(fep->reg_phy);
762 failed_reset:
763 - pm_runtime_put(&pdev->dev);
764 + pm_runtime_put_noidle(&pdev->dev);
765 pm_runtime_disable(&pdev->dev);
766 failed_regulator:
767 clk_disable_unprepare(fep->clk_ahb);
768 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
769 index 2ba0d89aaf3c..28762314353f 100644
770 --- a/drivers/net/ethernet/marvell/mvneta.c
771 +++ b/drivers/net/ethernet/marvell/mvneta.c
772 @@ -4611,7 +4611,7 @@ static int mvneta_probe(struct platform_device *pdev)
773 err = register_netdev(dev);
774 if (err < 0) {
775 dev_err(&pdev->dev, "failed to register\n");
776 - goto err_free_stats;
777 + goto err_netdev;
778 }
779
780 netdev_info(dev, "Using %s mac address %pM\n", mac_from,
781 @@ -4622,14 +4622,12 @@ static int mvneta_probe(struct platform_device *pdev)
782 return 0;
783
784 err_netdev:
785 - unregister_netdev(dev);
786 if (pp->bm_priv) {
787 mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_long, 1 << pp->id);
788 mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_short,
789 1 << pp->id);
790 mvneta_bm_put(pp->bm_priv);
791 }
792 -err_free_stats:
793 free_percpu(pp->stats);
794 err_free_ports:
795 free_percpu(pp->ports);
796 diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
797 index 9b10abb604cb..59212d3d9587 100644
798 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
799 +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
800 @@ -1404,7 +1404,7 @@ static inline void mvpp2_xlg_max_rx_size_set(struct mvpp2_port *port)
801 /* Set defaults to the MVPP2 port */
802 static void mvpp2_defaults_set(struct mvpp2_port *port)
803 {
804 - int tx_port_num, val, queue, ptxq, lrxq;
805 + int tx_port_num, val, queue, lrxq;
806
807 if (port->priv->hw_version == MVPP21) {
808 /* Update TX FIFO MIN Threshold */
809 @@ -1422,11 +1422,9 @@ static void mvpp2_defaults_set(struct mvpp2_port *port)
810 mvpp2_write(port->priv, MVPP2_TXP_SCHED_CMD_1_REG, 0);
811
812 /* Close bandwidth for all queues */
813 - for (queue = 0; queue < MVPP2_MAX_TXQ; queue++) {
814 - ptxq = mvpp2_txq_phys(port->id, queue);
815 + for (queue = 0; queue < MVPP2_MAX_TXQ; queue++)
816 mvpp2_write(port->priv,
817 - MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(ptxq), 0);
818 - }
819 + MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(queue), 0);
820
821 /* Set refill period to 1 usec, refill tokens
822 * and bucket size to maximum
823 @@ -2271,7 +2269,7 @@ static void mvpp2_txq_deinit(struct mvpp2_port *port,
824 txq->descs_dma = 0;
825
826 /* Set minimum bandwidth for disabled TXQs */
827 - mvpp2_write(port->priv, MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(txq->id), 0);
828 + mvpp2_write(port->priv, MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(txq->log_id), 0);
829
830 /* Set Tx descriptors queue starting address and size */
831 cpu = get_cpu();
832 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
833 index b190c447aeb0..0f1c296c3ce4 100644
834 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
835 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
836 @@ -3734,6 +3734,12 @@ static netdev_features_t mlx5e_fix_features(struct net_device *netdev,
837 netdev_warn(netdev, "Disabling LRO, not supported in legacy RQ\n");
838 }
839
840 + if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_CQE_COMPRESS)) {
841 + features &= ~NETIF_F_RXHASH;
842 + if (netdev->features & NETIF_F_RXHASH)
843 + netdev_warn(netdev, "Disabling rxhash, not supported when CQE compress is active\n");
844 + }
845 +
846 mutex_unlock(&priv->state_lock);
847
848 return features;
849 @@ -3860,6 +3866,9 @@ int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr)
850 memcpy(&priv->tstamp, &config, sizeof(config));
851 mutex_unlock(&priv->state_lock);
852
853 + /* might need to fix some features */
854 + netdev_update_features(priv->netdev);
855 +
856 return copy_to_user(ifr->ifr_data, &config,
857 sizeof(config)) ? -EFAULT : 0;
858 }
859 @@ -4702,6 +4711,10 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
860 if (!priv->channels.params.scatter_fcs_en)
861 netdev->features &= ~NETIF_F_RXFCS;
862
863 + /* prefere CQE compression over rxhash */
864 + if (MLX5E_GET_PFLAG(&priv->channels.params, MLX5E_PFLAG_RX_CQE_COMPRESS))
865 + netdev->features &= ~NETIF_F_RXHASH;
866 +
867 #define FT_CAP(f) MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_receive.f)
868 if (FT_CAP(flow_modify_en) &&
869 FT_CAP(modify_root) &&
870 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
871 index d181645fd968..c079f85593d6 100644
872 --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
873 +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
874 @@ -2220,7 +2220,7 @@ static struct mlx5_flow_root_namespace
875 cmds = mlx5_fs_cmd_get_default_ipsec_fpga_cmds(table_type);
876
877 /* Create the root namespace */
878 - root_ns = kvzalloc(sizeof(*root_ns), GFP_KERNEL);
879 + root_ns = kzalloc(sizeof(*root_ns), GFP_KERNEL);
880 if (!root_ns)
881 return NULL;
882
883 @@ -2363,6 +2363,7 @@ static void cleanup_egress_acls_root_ns(struct mlx5_core_dev *dev)
884 cleanup_root_ns(steering->esw_egress_root_ns[i]);
885
886 kfree(steering->esw_egress_root_ns);
887 + steering->esw_egress_root_ns = NULL;
888 }
889
890 static void cleanup_ingress_acls_root_ns(struct mlx5_core_dev *dev)
891 @@ -2377,6 +2378,7 @@ static void cleanup_ingress_acls_root_ns(struct mlx5_core_dev *dev)
892 cleanup_root_ns(steering->esw_ingress_root_ns[i]);
893
894 kfree(steering->esw_ingress_root_ns);
895 + steering->esw_ingress_root_ns = NULL;
896 }
897
898 void mlx5_cleanup_fs(struct mlx5_core_dev *dev)
899 @@ -2505,6 +2507,7 @@ cleanup_root_ns:
900 for (i--; i >= 0; i--)
901 cleanup_root_ns(steering->esw_egress_root_ns[i]);
902 kfree(steering->esw_egress_root_ns);
903 + steering->esw_egress_root_ns = NULL;
904 return err;
905 }
906
907 @@ -2532,6 +2535,7 @@ cleanup_root_ns:
908 for (i--; i >= 0; i--)
909 cleanup_root_ns(steering->esw_ingress_root_ns[i]);
910 kfree(steering->esw_ingress_root_ns);
911 + steering->esw_ingress_root_ns = NULL;
912 return err;
913 }
914
915 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
916 index 5debe93ea4eb..50c00822b2d8 100644
917 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
918 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
919 @@ -2195,6 +2195,10 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv)
920 if (priv->plat->axi)
921 stmmac_axi(priv, priv->ioaddr, priv->plat->axi);
922
923 + /* DMA CSR Channel configuration */
924 + for (chan = 0; chan < dma_csr_ch; chan++)
925 + stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);
926 +
927 /* DMA RX Channel Configuration */
928 for (chan = 0; chan < rx_channels_count; chan++) {
929 rx_q = &priv->rx_queue[chan];
930 @@ -2220,10 +2224,6 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv)
931 tx_q->tx_tail_addr, chan);
932 }
933
934 - /* DMA CSR Channel configuration */
935 - for (chan = 0; chan < dma_csr_ch; chan++)
936 - stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);
937 -
938 return ret;
939 }
940
941 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
942 index bdd351597b55..093a223fe408 100644
943 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
944 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
945 @@ -267,7 +267,8 @@ int stmmac_mdio_reset(struct mii_bus *bus)
946 of_property_read_u32_array(np,
947 "snps,reset-delays-us", data->delays, 3);
948
949 - if (gpio_request(data->reset_gpio, "mdio-reset"))
950 + if (devm_gpio_request(priv->device, data->reset_gpio,
951 + "mdio-reset"))
952 return 0;
953 }
954
955 diff --git a/drivers/net/phy/marvell10g.c b/drivers/net/phy/marvell10g.c
956 index f77a2d9e7f9d..456a1f882b09 100644
957 --- a/drivers/net/phy/marvell10g.c
958 +++ b/drivers/net/phy/marvell10g.c
959 @@ -27,6 +27,9 @@
960 #include <linux/phy.h>
961
962 enum {
963 + MV_PMA_BOOT = 0xc050,
964 + MV_PMA_BOOT_FATAL = BIT(0),
965 +
966 MV_PCS_BASE_T = 0x0000,
967 MV_PCS_BASE_R = 0x1000,
968 MV_PCS_1000BASEX = 0x2000,
969 @@ -226,6 +229,16 @@ static int mv3310_probe(struct phy_device *phydev)
970 (phydev->c45_ids.devices_in_package & mmd_mask) != mmd_mask)
971 return -ENODEV;
972
973 + ret = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MV_PMA_BOOT);
974 + if (ret < 0)
975 + return ret;
976 +
977 + if (ret & MV_PMA_BOOT_FATAL) {
978 + dev_warn(&phydev->mdio.dev,
979 + "PHY failed to boot firmware, status=%04x\n", ret);
980 + return -ENODEV;
981 + }
982 +
983 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
984 if (!priv)
985 return -ENOMEM;
986 diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
987 index 770aa624147f..10854977c55f 100644
988 --- a/drivers/net/usb/usbnet.c
989 +++ b/drivers/net/usb/usbnet.c
990 @@ -506,6 +506,7 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
991
992 if (netif_running (dev->net) &&
993 netif_device_present (dev->net) &&
994 + test_bit(EVENT_DEV_OPEN, &dev->flags) &&
995 !test_bit (EVENT_RX_HALT, &dev->flags) &&
996 !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) {
997 switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) {
998 @@ -1431,6 +1432,11 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
999 spin_unlock_irqrestore(&dev->txq.lock, flags);
1000 goto drop;
1001 }
1002 + if (netif_queue_stopped(net)) {
1003 + usb_autopm_put_interface_async(dev->intf);
1004 + spin_unlock_irqrestore(&dev->txq.lock, flags);
1005 + goto drop;
1006 + }
1007
1008 #ifdef CONFIG_PM
1009 /* if this triggers the device is still a sleep */
1010 diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
1011 index ea4a08b83fa0..787966f44589 100644
1012 --- a/drivers/xen/xen-pciback/pciback_ops.c
1013 +++ b/drivers/xen/xen-pciback/pciback_ops.c
1014 @@ -127,8 +127,6 @@ void xen_pcibk_reset_device(struct pci_dev *dev)
1015 if (pci_is_enabled(dev))
1016 pci_disable_device(dev);
1017
1018 - pci_write_config_word(dev, PCI_COMMAND, 0);
1019 -
1020 dev->is_busmaster = 0;
1021 } else {
1022 pci_read_config_word(dev, PCI_COMMAND, &cmd);
1023 diff --git a/include/linux/compiler.h b/include/linux/compiler.h
1024 index 81c2238b884c..bb22908c79e8 100644
1025 --- a/include/linux/compiler.h
1026 +++ b/include/linux/compiler.h
1027 @@ -319,29 +319,14 @@ static inline void *offset_to_ptr(const int *off)
1028 #endif
1029 #ifndef __compiletime_error
1030 # define __compiletime_error(message)
1031 -/*
1032 - * Sparse complains of variable sized arrays due to the temporary variable in
1033 - * __compiletime_assert. Unfortunately we can't just expand it out to make
1034 - * sparse see a constant array size without breaking compiletime_assert on old
1035 - * versions of GCC (e.g. 4.2.4), so hide the array from sparse altogether.
1036 - */
1037 -# ifndef __CHECKER__
1038 -# define __compiletime_error_fallback(condition) \
1039 - do { ((void)sizeof(char[1 - 2 * condition])); } while (0)
1040 -# endif
1041 -#endif
1042 -#ifndef __compiletime_error_fallback
1043 -# define __compiletime_error_fallback(condition) do { } while (0)
1044 #endif
1045
1046 #ifdef __OPTIMIZE__
1047 # define __compiletime_assert(condition, msg, prefix, suffix) \
1048 do { \
1049 - int __cond = !(condition); \
1050 extern void prefix ## suffix(void) __compiletime_error(msg); \
1051 - if (__cond) \
1052 + if (!(condition)) \
1053 prefix ## suffix(); \
1054 - __compiletime_error_fallback(__cond); \
1055 } while (0)
1056 #else
1057 # define __compiletime_assert(condition, msg, prefix, suffix) do { } while (0)
1058 diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
1059 index db192becfec4..c2ded31a4cec 100644
1060 --- a/include/linux/compiler_types.h
1061 +++ b/include/linux/compiler_types.h
1062 @@ -151,6 +151,10 @@ struct ftrace_likely_data {
1063 #define __assume_aligned(a, ...)
1064 #endif
1065
1066 +#ifndef asm_volatile_goto
1067 +#define asm_volatile_goto(x...) asm goto(x)
1068 +#endif
1069 +
1070 /* Are two types/vars the same type (ignoring qualifiers)? */
1071 #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
1072
1073 diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
1074 index 2fd8006153c3..b3419da1a776 100644
1075 --- a/include/linux/dynamic_debug.h
1076 +++ b/include/linux/dynamic_debug.h
1077 @@ -2,7 +2,7 @@
1078 #ifndef _DYNAMIC_DEBUG_H
1079 #define _DYNAMIC_DEBUG_H
1080
1081 -#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
1082 +#if defined(CONFIG_JUMP_LABEL)
1083 #include <linux/jump_label.h>
1084 #endif
1085
1086 @@ -38,7 +38,7 @@ struct _ddebug {
1087 #define _DPRINTK_FLAGS_DEFAULT 0
1088 #endif
1089 unsigned int flags:8;
1090 -#ifdef HAVE_JUMP_LABEL
1091 +#ifdef CONFIG_JUMP_LABEL
1092 union {
1093 struct static_key_true dd_key_true;
1094 struct static_key_false dd_key_false;
1095 @@ -83,7 +83,7 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor,
1096 dd_key_init(key, init) \
1097 }
1098
1099 -#ifdef HAVE_JUMP_LABEL
1100 +#ifdef CONFIG_JUMP_LABEL
1101
1102 #define dd_key_init(key, init) key = (init)
1103
1104 diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h
1105 index 1a0b6f17a5d6..4c3e77687d4e 100644
1106 --- a/include/linux/jump_label.h
1107 +++ b/include/linux/jump_label.h
1108 @@ -71,10 +71,6 @@
1109 * Additional babbling in: Documentation/static-keys.txt
1110 */
1111
1112 -#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
1113 -# define HAVE_JUMP_LABEL
1114 -#endif
1115 -
1116 #ifndef __ASSEMBLY__
1117
1118 #include <linux/types.h>
1119 @@ -86,7 +82,7 @@ extern bool static_key_initialized;
1120 "%s(): static key '%pS' used before call to jump_label_init()", \
1121 __func__, (key))
1122
1123 -#ifdef HAVE_JUMP_LABEL
1124 +#ifdef CONFIG_JUMP_LABEL
1125
1126 struct static_key {
1127 atomic_t enabled;
1128 @@ -114,10 +110,10 @@ struct static_key {
1129 struct static_key {
1130 atomic_t enabled;
1131 };
1132 -#endif /* HAVE_JUMP_LABEL */
1133 +#endif /* CONFIG_JUMP_LABEL */
1134 #endif /* __ASSEMBLY__ */
1135
1136 -#ifdef HAVE_JUMP_LABEL
1137 +#ifdef CONFIG_JUMP_LABEL
1138 #include <asm/jump_label.h>
1139 #endif
1140
1141 @@ -130,7 +126,7 @@ enum jump_label_type {
1142
1143 struct module;
1144
1145 -#ifdef HAVE_JUMP_LABEL
1146 +#ifdef CONFIG_JUMP_LABEL
1147
1148 #define JUMP_TYPE_FALSE 0UL
1149 #define JUMP_TYPE_TRUE 1UL
1150 @@ -184,7 +180,7 @@ extern void static_key_disable_cpuslocked(struct static_key *key);
1151 { .enabled = { 0 }, \
1152 { .entries = (void *)JUMP_TYPE_FALSE } }
1153
1154 -#else /* !HAVE_JUMP_LABEL */
1155 +#else /* !CONFIG_JUMP_LABEL */
1156
1157 #include <linux/atomic.h>
1158 #include <linux/bug.h>
1159 @@ -271,7 +267,7 @@ static inline void static_key_disable(struct static_key *key)
1160 #define STATIC_KEY_INIT_TRUE { .enabled = ATOMIC_INIT(1) }
1161 #define STATIC_KEY_INIT_FALSE { .enabled = ATOMIC_INIT(0) }
1162
1163 -#endif /* HAVE_JUMP_LABEL */
1164 +#endif /* CONFIG_JUMP_LABEL */
1165
1166 #define STATIC_KEY_INIT STATIC_KEY_INIT_FALSE
1167 #define jump_label_enabled static_key_enabled
1168 @@ -335,7 +331,7 @@ extern bool ____wrong_branch_error(void);
1169 static_key_count((struct static_key *)x) > 0; \
1170 })
1171
1172 -#ifdef HAVE_JUMP_LABEL
1173 +#ifdef CONFIG_JUMP_LABEL
1174
1175 /*
1176 * Combine the right initial value (type) with the right branch order
1177 @@ -417,12 +413,12 @@ extern bool ____wrong_branch_error(void);
1178 unlikely(branch); \
1179 })
1180
1181 -#else /* !HAVE_JUMP_LABEL */
1182 +#else /* !CONFIG_JUMP_LABEL */
1183
1184 #define static_branch_likely(x) likely(static_key_enabled(&(x)->key))
1185 #define static_branch_unlikely(x) unlikely(static_key_enabled(&(x)->key))
1186
1187 -#endif /* HAVE_JUMP_LABEL */
1188 +#endif /* CONFIG_JUMP_LABEL */
1189
1190 /*
1191 * Advanced usage; refcount, branch is enabled when: count != 0
1192 diff --git a/include/linux/jump_label_ratelimit.h b/include/linux/jump_label_ratelimit.h
1193 index baa8eabbaa56..a49f2b45b3f0 100644
1194 --- a/include/linux/jump_label_ratelimit.h
1195 +++ b/include/linux/jump_label_ratelimit.h
1196 @@ -5,21 +5,19 @@
1197 #include <linux/jump_label.h>
1198 #include <linux/workqueue.h>
1199
1200 -#if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL)
1201 +#if defined(CONFIG_JUMP_LABEL)
1202 struct static_key_deferred {
1203 struct static_key key;
1204 unsigned long timeout;
1205 struct delayed_work work;
1206 };
1207 -#endif
1208
1209 -#ifdef HAVE_JUMP_LABEL
1210 extern void static_key_slow_dec_deferred(struct static_key_deferred *key);
1211 extern void static_key_deferred_flush(struct static_key_deferred *key);
1212 extern void
1213 jump_label_rate_limit(struct static_key_deferred *key, unsigned long rl);
1214
1215 -#else /* !HAVE_JUMP_LABEL */
1216 +#else /* !CONFIG_JUMP_LABEL */
1217 struct static_key_deferred {
1218 struct static_key key;
1219 };
1220 @@ -38,5 +36,5 @@ jump_label_rate_limit(struct static_key_deferred *key,
1221 {
1222 STATIC_KEY_CHECK_USE(key);
1223 }
1224 -#endif /* HAVE_JUMP_LABEL */
1225 +#endif /* CONFIG_JUMP_LABEL */
1226 #endif /* _LINUX_JUMP_LABEL_RATELIMIT_H */
1227 diff --git a/include/linux/module.h b/include/linux/module.h
1228 index 904f94628132..c71044644979 100644
1229 --- a/include/linux/module.h
1230 +++ b/include/linux/module.h
1231 @@ -433,7 +433,7 @@ struct module {
1232 unsigned int num_tracepoints;
1233 tracepoint_ptr_t *tracepoints_ptrs;
1234 #endif
1235 -#ifdef HAVE_JUMP_LABEL
1236 +#ifdef CONFIG_JUMP_LABEL
1237 struct jump_entry *jump_entries;
1238 unsigned int num_jump_entries;
1239 #endif
1240 diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
1241 index bbe99d2b28b4..72cb19c3db6a 100644
1242 --- a/include/linux/netfilter.h
1243 +++ b/include/linux/netfilter.h
1244 @@ -176,7 +176,7 @@ void nf_unregister_net_hooks(struct net *net, const struct nf_hook_ops *reg,
1245 int nf_register_sockopt(struct nf_sockopt_ops *reg);
1246 void nf_unregister_sockopt(struct nf_sockopt_ops *reg);
1247
1248 -#ifdef HAVE_JUMP_LABEL
1249 +#ifdef CONFIG_JUMP_LABEL
1250 extern struct static_key nf_hooks_needed[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
1251 #endif
1252
1253 @@ -198,7 +198,7 @@ static inline int nf_hook(u_int8_t pf, unsigned int hook, struct net *net,
1254 struct nf_hook_entries *hook_head = NULL;
1255 int ret = 1;
1256
1257 -#ifdef HAVE_JUMP_LABEL
1258 +#ifdef CONFIG_JUMP_LABEL
1259 if (__builtin_constant_p(pf) &&
1260 __builtin_constant_p(hook) &&
1261 !static_key_false(&nf_hooks_needed[pf][hook]))
1262 diff --git a/include/linux/netfilter_ingress.h b/include/linux/netfilter_ingress.h
1263 index 554c920691dd..a13774be2eb5 100644
1264 --- a/include/linux/netfilter_ingress.h
1265 +++ b/include/linux/netfilter_ingress.h
1266 @@ -8,7 +8,7 @@
1267 #ifdef CONFIG_NETFILTER_INGRESS
1268 static inline bool nf_hook_ingress_active(const struct sk_buff *skb)
1269 {
1270 -#ifdef HAVE_JUMP_LABEL
1271 +#ifdef CONFIG_JUMP_LABEL
1272 if (!static_key_false(&nf_hooks_needed[NFPROTO_NETDEV][NF_NETDEV_INGRESS]))
1273 return false;
1274 #endif
1275 diff --git a/include/linux/siphash.h b/include/linux/siphash.h
1276 index fa7a6b9cedbf..bf21591a9e5e 100644
1277 --- a/include/linux/siphash.h
1278 +++ b/include/linux/siphash.h
1279 @@ -21,6 +21,11 @@ typedef struct {
1280 u64 key[2];
1281 } siphash_key_t;
1282
1283 +static inline bool siphash_key_is_zero(const siphash_key_t *key)
1284 +{
1285 + return !(key->key[0] | key->key[1]);
1286 +}
1287 +
1288 u64 __siphash_aligned(const void *data, size_t len, const siphash_key_t *key);
1289 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1290 u64 __siphash_unaligned(const void *data, size_t len, const siphash_key_t *key);
1291 diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
1292 index e47503b4e4d1..622db6bc2f02 100644
1293 --- a/include/net/netns/ipv4.h
1294 +++ b/include/net/netns/ipv4.h
1295 @@ -9,6 +9,7 @@
1296 #include <linux/uidgid.h>
1297 #include <net/inet_frag.h>
1298 #include <linux/rcupdate.h>
1299 +#include <linux/siphash.h>
1300
1301 struct tcpm_hash_bucket;
1302 struct ctl_table_header;
1303 @@ -214,5 +215,6 @@ struct netns_ipv4 {
1304 unsigned int ipmr_seq; /* protected by rtnl_mutex */
1305
1306 atomic_t rt_genid;
1307 + siphash_key_t ip_id_key;
1308 };
1309 #endif
1310 diff --git a/include/uapi/linux/tipc_config.h b/include/uapi/linux/tipc_config.h
1311 index 4b2c93b1934c..4955e1a9f1bc 100644
1312 --- a/include/uapi/linux/tipc_config.h
1313 +++ b/include/uapi/linux/tipc_config.h
1314 @@ -307,8 +307,10 @@ static inline int TLV_SET(void *tlv, __u16 type, void *data, __u16 len)
1315 tlv_ptr = (struct tlv_desc *)tlv;
1316 tlv_ptr->tlv_type = htons(type);
1317 tlv_ptr->tlv_len = htons(tlv_len);
1318 - if (len && data)
1319 - memcpy(TLV_DATA(tlv_ptr), data, tlv_len);
1320 + if (len && data) {
1321 + memcpy(TLV_DATA(tlv_ptr), data, len);
1322 + memset(TLV_DATA(tlv_ptr) + len, 0, TLV_SPACE(len) - tlv_len);
1323 + }
1324 return TLV_SPACE(len);
1325 }
1326
1327 @@ -405,8 +407,10 @@ static inline int TCM_SET(void *msg, __u16 cmd, __u16 flags,
1328 tcm_hdr->tcm_len = htonl(msg_len);
1329 tcm_hdr->tcm_type = htons(cmd);
1330 tcm_hdr->tcm_flags = htons(flags);
1331 - if (data_len && data)
1332 + if (data_len && data) {
1333 memcpy(TCM_DATA(msg), data, data_len);
1334 + memset(TCM_DATA(msg) + data_len, 0, TCM_SPACE(data_len) - msg_len);
1335 + }
1336 return TCM_SPACE(data_len);
1337 }
1338
1339 diff --git a/init/Kconfig b/init/Kconfig
1340 index 864af10bb1b9..47035b5a46f6 100644
1341 --- a/init/Kconfig
1342 +++ b/init/Kconfig
1343 @@ -23,6 +23,9 @@ config CLANG_VERSION
1344 int
1345 default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
1346
1347 +config CC_HAS_ASM_GOTO
1348 + def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))
1349 +
1350 config CONSTRUCTORS
1351 bool
1352 depends on !UML
1353 diff --git a/kernel/jump_label.c b/kernel/jump_label.c
1354 index 2e62503bea0d..7c8262635b29 100644
1355 --- a/kernel/jump_label.c
1356 +++ b/kernel/jump_label.c
1357 @@ -18,8 +18,6 @@
1358 #include <linux/cpu.h>
1359 #include <asm/sections.h>
1360
1361 -#ifdef HAVE_JUMP_LABEL
1362 -
1363 /* mutex to protect coming/going of the the jump_label table */
1364 static DEFINE_MUTEX(jump_label_mutex);
1365
1366 @@ -60,13 +58,13 @@ jump_label_sort_entries(struct jump_entry *start, struct jump_entry *stop)
1367 static void jump_label_update(struct static_key *key);
1368
1369 /*
1370 - * There are similar definitions for the !HAVE_JUMP_LABEL case in jump_label.h.
1371 + * There are similar definitions for the !CONFIG_JUMP_LABEL case in jump_label.h.
1372 * The use of 'atomic_read()' requires atomic.h and its problematic for some
1373 * kernel headers such as kernel.h and others. Since static_key_count() is not
1374 - * used in the branch statements as it is for the !HAVE_JUMP_LABEL case its ok
1375 + * used in the branch statements as it is for the !CONFIG_JUMP_LABEL case its ok
1376 * to have it be a function here. Similarly, for 'static_key_enable()' and
1377 * 'static_key_disable()', which require bug.h. This should allow jump_label.h
1378 - * to be included from most/all places for HAVE_JUMP_LABEL.
1379 + * to be included from most/all places for CONFIG_JUMP_LABEL.
1380 */
1381 int static_key_count(struct static_key *key)
1382 {
1383 @@ -796,5 +794,3 @@ static __init int jump_label_test(void)
1384 }
1385 early_initcall(jump_label_test);
1386 #endif /* STATIC_KEYS_SELFTEST */
1387 -
1388 -#endif /* HAVE_JUMP_LABEL */
1389 diff --git a/kernel/module.c b/kernel/module.c
1390 index f797c6ace712..b8f37376856b 100644
1391 --- a/kernel/module.c
1392 +++ b/kernel/module.c
1393 @@ -3100,7 +3100,7 @@ static int find_module_sections(struct module *mod, struct load_info *info)
1394 sizeof(*mod->tracepoints_ptrs),
1395 &mod->num_tracepoints);
1396 #endif
1397 -#ifdef HAVE_JUMP_LABEL
1398 +#ifdef CONFIG_JUMP_LABEL
1399 mod->jump_entries = section_objs(info, "__jump_table",
1400 sizeof(*mod->jump_entries),
1401 &mod->num_jump_entries);
1402 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
1403 index 6138754e5030..6859ea1d5c04 100644
1404 --- a/kernel/sched/core.c
1405 +++ b/kernel/sched/core.c
1406 @@ -24,7 +24,7 @@
1407
1408 DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
1409
1410 -#if defined(CONFIG_SCHED_DEBUG) && defined(HAVE_JUMP_LABEL)
1411 +#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_JUMP_LABEL)
1412 /*
1413 * Debugging: various feature bits
1414 *
1415 diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
1416 index 141ea9ff210e..78fadf0438ea 100644
1417 --- a/kernel/sched/debug.c
1418 +++ b/kernel/sched/debug.c
1419 @@ -73,7 +73,7 @@ static int sched_feat_show(struct seq_file *m, void *v)
1420 return 0;
1421 }
1422
1423 -#ifdef HAVE_JUMP_LABEL
1424 +#ifdef CONFIG_JUMP_LABEL
1425
1426 #define jump_label_key__true STATIC_KEY_INIT_TRUE
1427 #define jump_label_key__false STATIC_KEY_INIT_FALSE
1428 @@ -99,7 +99,7 @@ static void sched_feat_enable(int i)
1429 #else
1430 static void sched_feat_disable(int i) { };
1431 static void sched_feat_enable(int i) { };
1432 -#endif /* HAVE_JUMP_LABEL */
1433 +#endif /* CONFIG_JUMP_LABEL */
1434
1435 static int sched_feat_set(char *cmp)
1436 {
1437 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
1438 index 7a1e9db617f7..4a433608ba74 100644
1439 --- a/kernel/sched/fair.c
1440 +++ b/kernel/sched/fair.c
1441 @@ -4209,7 +4209,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
1442
1443 #ifdef CONFIG_CFS_BANDWIDTH
1444
1445 -#ifdef HAVE_JUMP_LABEL
1446 +#ifdef CONFIG_JUMP_LABEL
1447 static struct static_key __cfs_bandwidth_used;
1448
1449 static inline bool cfs_bandwidth_used(void)
1450 @@ -4226,7 +4226,7 @@ void cfs_bandwidth_usage_dec(void)
1451 {
1452 static_key_slow_dec_cpuslocked(&__cfs_bandwidth_used);
1453 }
1454 -#else /* HAVE_JUMP_LABEL */
1455 +#else /* CONFIG_JUMP_LABEL */
1456 static bool cfs_bandwidth_used(void)
1457 {
1458 return true;
1459 @@ -4234,7 +4234,7 @@ static bool cfs_bandwidth_used(void)
1460
1461 void cfs_bandwidth_usage_inc(void) {}
1462 void cfs_bandwidth_usage_dec(void) {}
1463 -#endif /* HAVE_JUMP_LABEL */
1464 +#endif /* CONFIG_JUMP_LABEL */
1465
1466 /*
1467 * default period for cfs group bandwidth.
1468 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
1469 index 4c7a837d7c14..9a7c3d08b39f 100644
1470 --- a/kernel/sched/sched.h
1471 +++ b/kernel/sched/sched.h
1472 @@ -1359,7 +1359,7 @@ enum {
1473
1474 #undef SCHED_FEAT
1475
1476 -#if defined(CONFIG_SCHED_DEBUG) && defined(HAVE_JUMP_LABEL)
1477 +#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_JUMP_LABEL)
1478
1479 /*
1480 * To support run-time toggling of sched features, all the translation units
1481 @@ -1379,7 +1379,7 @@ static __always_inline bool static_branch_##name(struct static_key *key) \
1482 extern struct static_key sched_feat_keys[__SCHED_FEAT_NR];
1483 #define sched_feat(x) (static_branch_##x(&sched_feat_keys[__SCHED_FEAT_##x]))
1484
1485 -#else /* !(SCHED_DEBUG && HAVE_JUMP_LABEL) */
1486 +#else /* !(SCHED_DEBUG && CONFIG_JUMP_LABEL) */
1487
1488 /*
1489 * Each translation unit has its own copy of sysctl_sched_features to allow
1490 @@ -1395,7 +1395,7 @@ static const_debug __maybe_unused unsigned int sysctl_sched_features =
1491
1492 #define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
1493
1494 -#endif /* SCHED_DEBUG && HAVE_JUMP_LABEL */
1495 +#endif /* SCHED_DEBUG && CONFIG_JUMP_LABEL */
1496
1497 extern struct static_key_false sched_numa_balancing;
1498 extern struct static_key_false sched_schedstats;
1499 diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
1500 index c7c96bc7654a..dbf2b457e47e 100644
1501 --- a/lib/dynamic_debug.c
1502 +++ b/lib/dynamic_debug.c
1503 @@ -188,7 +188,7 @@ static int ddebug_change(const struct ddebug_query *query,
1504 newflags = (dp->flags & mask) | flags;
1505 if (newflags == dp->flags)
1506 continue;
1507 -#ifdef HAVE_JUMP_LABEL
1508 +#ifdef CONFIG_JUMP_LABEL
1509 if (dp->flags & _DPRINTK_FLAGS_PRINT) {
1510 if (!(flags & _DPRINTK_FLAGS_PRINT))
1511 static_branch_disable(&dp->key.dd_key_true);
1512 diff --git a/net/core/dev.c b/net/core/dev.c
1513 index 13a82744a00a..138951d28643 100644
1514 --- a/net/core/dev.c
1515 +++ b/net/core/dev.c
1516 @@ -1821,7 +1821,7 @@ EXPORT_SYMBOL_GPL(net_dec_egress_queue);
1517 #endif
1518
1519 static DEFINE_STATIC_KEY_FALSE(netstamp_needed_key);
1520 -#ifdef HAVE_JUMP_LABEL
1521 +#ifdef CONFIG_JUMP_LABEL
1522 static atomic_t netstamp_needed_deferred;
1523 static atomic_t netstamp_wanted;
1524 static void netstamp_clear(struct work_struct *work)
1525 @@ -1840,7 +1840,7 @@ static DECLARE_WORK(netstamp_work, netstamp_clear);
1526
1527 void net_enable_timestamp(void)
1528 {
1529 -#ifdef HAVE_JUMP_LABEL
1530 +#ifdef CONFIG_JUMP_LABEL
1531 int wanted;
1532
1533 while (1) {
1534 @@ -1860,7 +1860,7 @@ EXPORT_SYMBOL(net_enable_timestamp);
1535
1536 void net_disable_timestamp(void)
1537 {
1538 -#ifdef HAVE_JUMP_LABEL
1539 +#ifdef CONFIG_JUMP_LABEL
1540 int wanted;
1541
1542 while (1) {
1543 @@ -5725,7 +5725,6 @@ static struct sk_buff *napi_frags_skb(struct napi_struct *napi)
1544 skb_reset_mac_header(skb);
1545 skb_gro_reset_offset(skb);
1546
1547 - eth = skb_gro_header_fast(skb, 0);
1548 if (unlikely(skb_gro_header_hard(skb, hlen))) {
1549 eth = skb_gro_header_slow(skb, hlen, 0);
1550 if (unlikely(!eth)) {
1551 @@ -5735,6 +5734,7 @@ static struct sk_buff *napi_frags_skb(struct napi_struct *napi)
1552 return NULL;
1553 }
1554 } else {
1555 + eth = (const struct ethhdr *)skb->data;
1556 gro_pull_from_frag0(skb, hlen);
1557 NAPI_GRO_CB(skb)->frag0 += hlen;
1558 NAPI_GRO_CB(skb)->frag0_len -= hlen;
1559 diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
1560 index 4da39446da2d..d187ee8156a1 100644
1561 --- a/net/ipv4/igmp.c
1562 +++ b/net/ipv4/igmp.c
1563 @@ -190,6 +190,17 @@ static void ip_ma_put(struct ip_mc_list *im)
1564 pmc != NULL; \
1565 pmc = rtnl_dereference(pmc->next_rcu))
1566
1567 +static void ip_sf_list_clear_all(struct ip_sf_list *psf)
1568 +{
1569 + struct ip_sf_list *next;
1570 +
1571 + while (psf) {
1572 + next = psf->sf_next;
1573 + kfree(psf);
1574 + psf = next;
1575 + }
1576 +}
1577 +
1578 #ifdef CONFIG_IP_MULTICAST
1579
1580 /*
1581 @@ -635,6 +646,13 @@ static void igmpv3_clear_zeros(struct ip_sf_list **ppsf)
1582 }
1583 }
1584
1585 +static void kfree_pmc(struct ip_mc_list *pmc)
1586 +{
1587 + ip_sf_list_clear_all(pmc->sources);
1588 + ip_sf_list_clear_all(pmc->tomb);
1589 + kfree(pmc);
1590 +}
1591 +
1592 static void igmpv3_send_cr(struct in_device *in_dev)
1593 {
1594 struct ip_mc_list *pmc, *pmc_prev, *pmc_next;
1595 @@ -671,7 +689,7 @@ static void igmpv3_send_cr(struct in_device *in_dev)
1596 else
1597 in_dev->mc_tomb = pmc_next;
1598 in_dev_put(pmc->interface);
1599 - kfree(pmc);
1600 + kfree_pmc(pmc);
1601 } else
1602 pmc_prev = pmc;
1603 }
1604 @@ -1201,14 +1219,18 @@ static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im)
1605 im->interface = pmc->interface;
1606 if (im->sfmode == MCAST_INCLUDE) {
1607 im->tomb = pmc->tomb;
1608 + pmc->tomb = NULL;
1609 +
1610 im->sources = pmc->sources;
1611 + pmc->sources = NULL;
1612 +
1613 for (psf = im->sources; psf; psf = psf->sf_next)
1614 psf->sf_crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
1615 } else {
1616 im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
1617 }
1618 in_dev_put(pmc->interface);
1619 - kfree(pmc);
1620 + kfree_pmc(pmc);
1621 }
1622 spin_unlock_bh(&im->lock);
1623 }
1624 @@ -1229,21 +1251,18 @@ static void igmpv3_clear_delrec(struct in_device *in_dev)
1625 nextpmc = pmc->next;
1626 ip_mc_clear_src(pmc);
1627 in_dev_put(pmc->interface);
1628 - kfree(pmc);
1629 + kfree_pmc(pmc);
1630 }
1631 /* clear dead sources, too */
1632 rcu_read_lock();
1633 for_each_pmc_rcu(in_dev, pmc) {
1634 - struct ip_sf_list *psf, *psf_next;
1635 + struct ip_sf_list *psf;
1636
1637 spin_lock_bh(&pmc->lock);
1638 psf = pmc->tomb;
1639 pmc->tomb = NULL;
1640 spin_unlock_bh(&pmc->lock);
1641 - for (; psf; psf = psf_next) {
1642 - psf_next = psf->sf_next;
1643 - kfree(psf);
1644 - }
1645 + ip_sf_list_clear_all(psf);
1646 }
1647 rcu_read_unlock();
1648 }
1649 @@ -2114,7 +2133,7 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
1650
1651 static void ip_mc_clear_src(struct ip_mc_list *pmc)
1652 {
1653 - struct ip_sf_list *psf, *nextpsf, *tomb, *sources;
1654 + struct ip_sf_list *tomb, *sources;
1655
1656 spin_lock_bh(&pmc->lock);
1657 tomb = pmc->tomb;
1658 @@ -2126,14 +2145,8 @@ static void ip_mc_clear_src(struct ip_mc_list *pmc)
1659 pmc->sfcount[MCAST_EXCLUDE] = 1;
1660 spin_unlock_bh(&pmc->lock);
1661
1662 - for (psf = tomb; psf; psf = nextpsf) {
1663 - nextpsf = psf->sf_next;
1664 - kfree(psf);
1665 - }
1666 - for (psf = sources; psf; psf = nextpsf) {
1667 - nextpsf = psf->sf_next;
1668 - kfree(psf);
1669 - }
1670 + ip_sf_list_clear_all(tomb);
1671 + ip_sf_list_clear_all(sources);
1672 }
1673
1674 /* Join a multicast group
1675 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
1676 index 8bacbcd2db90..40bf19f7ae1a 100644
1677 --- a/net/ipv4/route.c
1678 +++ b/net/ipv4/route.c
1679 @@ -500,15 +500,17 @@ EXPORT_SYMBOL(ip_idents_reserve);
1680
1681 void __ip_select_ident(struct net *net, struct iphdr *iph, int segs)
1682 {
1683 - static u32 ip_idents_hashrnd __read_mostly;
1684 u32 hash, id;
1685
1686 - net_get_random_once(&ip_idents_hashrnd, sizeof(ip_idents_hashrnd));
1687 + /* Note the following code is not safe, but this is okay. */
1688 + if (unlikely(siphash_key_is_zero(&net->ipv4.ip_id_key)))
1689 + get_random_bytes(&net->ipv4.ip_id_key,
1690 + sizeof(net->ipv4.ip_id_key));
1691
1692 - hash = jhash_3words((__force u32)iph->daddr,
1693 + hash = siphash_3u32((__force u32)iph->daddr,
1694 (__force u32)iph->saddr,
1695 - iph->protocol ^ net_hash_mix(net),
1696 - ip_idents_hashrnd);
1697 + iph->protocol,
1698 + &net->ipv4.ip_id_key);
1699 id = ip_idents_reserve(hash, segs);
1700 iph->id = htons(id);
1701 }
1702 diff --git a/net/ipv6/output_core.c b/net/ipv6/output_core.c
1703 index 4fe7c90962dd..868ae23dbae1 100644
1704 --- a/net/ipv6/output_core.c
1705 +++ b/net/ipv6/output_core.c
1706 @@ -10,15 +10,25 @@
1707 #include <net/secure_seq.h>
1708 #include <linux/netfilter.h>
1709
1710 -static u32 __ipv6_select_ident(struct net *net, u32 hashrnd,
1711 +static u32 __ipv6_select_ident(struct net *net,
1712 const struct in6_addr *dst,
1713 const struct in6_addr *src)
1714 {
1715 + const struct {
1716 + struct in6_addr dst;
1717 + struct in6_addr src;
1718 + } __aligned(SIPHASH_ALIGNMENT) combined = {
1719 + .dst = *dst,
1720 + .src = *src,
1721 + };
1722 u32 hash, id;
1723
1724 - hash = __ipv6_addr_jhash(dst, hashrnd);
1725 - hash = __ipv6_addr_jhash(src, hash);
1726 - hash ^= net_hash_mix(net);
1727 + /* Note the following code is not safe, but this is okay. */
1728 + if (unlikely(siphash_key_is_zero(&net->ipv4.ip_id_key)))
1729 + get_random_bytes(&net->ipv4.ip_id_key,
1730 + sizeof(net->ipv4.ip_id_key));
1731 +
1732 + hash = siphash(&combined, sizeof(combined), &net->ipv4.ip_id_key);
1733
1734 /* Treat id of 0 as unset and if we get 0 back from ip_idents_reserve,
1735 * set the hight order instead thus minimizing possible future
1736 @@ -41,7 +51,6 @@ static u32 __ipv6_select_ident(struct net *net, u32 hashrnd,
1737 */
1738 __be32 ipv6_proxy_select_ident(struct net *net, struct sk_buff *skb)
1739 {
1740 - static u32 ip6_proxy_idents_hashrnd __read_mostly;
1741 struct in6_addr buf[2];
1742 struct in6_addr *addrs;
1743 u32 id;
1744 @@ -53,11 +62,7 @@ __be32 ipv6_proxy_select_ident(struct net *net, struct sk_buff *skb)
1745 if (!addrs)
1746 return 0;
1747
1748 - net_get_random_once(&ip6_proxy_idents_hashrnd,
1749 - sizeof(ip6_proxy_idents_hashrnd));
1750 -
1751 - id = __ipv6_select_ident(net, ip6_proxy_idents_hashrnd,
1752 - &addrs[1], &addrs[0]);
1753 + id = __ipv6_select_ident(net, &addrs[1], &addrs[0]);
1754 return htonl(id);
1755 }
1756 EXPORT_SYMBOL_GPL(ipv6_proxy_select_ident);
1757 @@ -66,12 +71,9 @@ __be32 ipv6_select_ident(struct net *net,
1758 const struct in6_addr *daddr,
1759 const struct in6_addr *saddr)
1760 {
1761 - static u32 ip6_idents_hashrnd __read_mostly;
1762 u32 id;
1763
1764 - net_get_random_once(&ip6_idents_hashrnd, sizeof(ip6_idents_hashrnd));
1765 -
1766 - id = __ipv6_select_ident(net, ip6_idents_hashrnd, daddr, saddr);
1767 + id = __ipv6_select_ident(net, daddr, saddr);
1768 return htonl(id);
1769 }
1770 EXPORT_SYMBOL(ipv6_select_ident);
1771 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
1772 index 5e0efd3954e9..5833d4af7311 100644
1773 --- a/net/ipv6/raw.c
1774 +++ b/net/ipv6/raw.c
1775 @@ -288,7 +288,9 @@ static int rawv6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
1776 /* Binding to link-local address requires an interface */
1777 if (!sk->sk_bound_dev_if)
1778 goto out_unlock;
1779 + }
1780
1781 + if (sk->sk_bound_dev_if) {
1782 err = -ENODEV;
1783 dev = dev_get_by_index_rcu(sock_net(sk),
1784 sk->sk_bound_dev_if);
1785 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1786 index bf0940c42810..24f7b2cf504b 100644
1787 --- a/net/ipv6/route.c
1788 +++ b/net/ipv6/route.c
1789 @@ -2480,6 +2480,12 @@ static struct rt6_info *__ip6_route_redirect(struct net *net,
1790 struct fib6_info *rt;
1791 struct fib6_node *fn;
1792
1793 + /* l3mdev_update_flow overrides oif if the device is enslaved; in
1794 + * this case we must match on the real ingress device, so reset it
1795 + */
1796 + if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF)
1797 + fl6->flowi6_oif = skb->dev->ifindex;
1798 +
1799 /* Get the "current" route for this destination and
1800 * check if the redirect has come from appropriate router.
1801 *
1802 diff --git a/net/llc/llc_output.c b/net/llc/llc_output.c
1803 index 94425e421213..9e4b6bcf6920 100644
1804 --- a/net/llc/llc_output.c
1805 +++ b/net/llc/llc_output.c
1806 @@ -72,6 +72,8 @@ int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb,
1807 rc = llc_mac_hdr_init(skb, skb->dev->dev_addr, dmac);
1808 if (likely(!rc))
1809 rc = dev_queue_xmit(skb);
1810 + else
1811 + kfree_skb(skb);
1812 return rc;
1813 }
1814
1815 diff --git a/net/netfilter/core.c b/net/netfilter/core.c
1816 index dc240cb47ddf..93aaec3a54ec 100644
1817 --- a/net/netfilter/core.c
1818 +++ b/net/netfilter/core.c
1819 @@ -33,7 +33,7 @@ EXPORT_SYMBOL_GPL(nf_ipv6_ops);
1820 DEFINE_PER_CPU(bool, nf_skb_duplicated);
1821 EXPORT_SYMBOL_GPL(nf_skb_duplicated);
1822
1823 -#ifdef HAVE_JUMP_LABEL
1824 +#ifdef CONFIG_JUMP_LABEL
1825 struct static_key nf_hooks_needed[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
1826 EXPORT_SYMBOL(nf_hooks_needed);
1827 #endif
1828 @@ -347,7 +347,7 @@ static int __nf_register_net_hook(struct net *net, int pf,
1829 if (pf == NFPROTO_NETDEV && reg->hooknum == NF_NETDEV_INGRESS)
1830 net_inc_ingress_queue();
1831 #endif
1832 -#ifdef HAVE_JUMP_LABEL
1833 +#ifdef CONFIG_JUMP_LABEL
1834 static_key_slow_inc(&nf_hooks_needed[pf][reg->hooknum]);
1835 #endif
1836 BUG_ON(p == new_hooks);
1837 @@ -405,7 +405,7 @@ static void __nf_unregister_net_hook(struct net *net, int pf,
1838 if (pf == NFPROTO_NETDEV && reg->hooknum == NF_NETDEV_INGRESS)
1839 net_dec_ingress_queue();
1840 #endif
1841 -#ifdef HAVE_JUMP_LABEL
1842 +#ifdef CONFIG_JUMP_LABEL
1843 static_key_slow_dec(&nf_hooks_needed[pf][reg->hooknum]);
1844 #endif
1845 } else {
1846 diff --git a/net/sched/act_api.c b/net/sched/act_api.c
1847 index e12f8ef7baa4..7c4a4b874248 100644
1848 --- a/net/sched/act_api.c
1849 +++ b/net/sched/act_api.c
1850 @@ -744,7 +744,7 @@ int tcf_action_dump(struct sk_buff *skb, struct tc_action *actions[],
1851
1852 for (i = 0; i < TCA_ACT_MAX_PRIO && actions[i]; i++) {
1853 a = actions[i];
1854 - nest = nla_nest_start(skb, a->order);
1855 + nest = nla_nest_start(skb, i + 1);
1856 if (nest == NULL)
1857 goto nla_put_failure;
1858 err = tcf_action_dump_1(skb, a, bind, ref);
1859 @@ -1257,7 +1257,6 @@ tca_action_gd(struct net *net, struct nlattr *nla, struct nlmsghdr *n,
1860 ret = PTR_ERR(act);
1861 goto err;
1862 }
1863 - act->order = i;
1864 attr_size += tcf_action_fill_size(act);
1865 actions[i - 1] = act;
1866 }
1867 diff --git a/net/tipc/core.c b/net/tipc/core.c
1868 index d7b0688c98dd..3ecca3b88bf8 100644
1869 --- a/net/tipc/core.c
1870 +++ b/net/tipc/core.c
1871 @@ -66,10 +66,6 @@ static int __net_init tipc_init_net(struct net *net)
1872 INIT_LIST_HEAD(&tn->node_list);
1873 spin_lock_init(&tn->node_list_lock);
1874
1875 - err = tipc_socket_init();
1876 - if (err)
1877 - goto out_socket;
1878 -
1879 err = tipc_sk_rht_init(net);
1880 if (err)
1881 goto out_sk_rht;
1882 @@ -79,9 +75,6 @@ static int __net_init tipc_init_net(struct net *net)
1883 goto out_nametbl;
1884
1885 INIT_LIST_HEAD(&tn->dist_queue);
1886 - err = tipc_topsrv_start(net);
1887 - if (err)
1888 - goto out_subscr;
1889
1890 err = tipc_bcast_init(net);
1891 if (err)
1892 @@ -90,25 +83,19 @@ static int __net_init tipc_init_net(struct net *net)
1893 return 0;
1894
1895 out_bclink:
1896 - tipc_bcast_stop(net);
1897 -out_subscr:
1898 tipc_nametbl_stop(net);
1899 out_nametbl:
1900 tipc_sk_rht_destroy(net);
1901 out_sk_rht:
1902 - tipc_socket_stop();
1903 -out_socket:
1904 return err;
1905 }
1906
1907 static void __net_exit tipc_exit_net(struct net *net)
1908 {
1909 - tipc_topsrv_stop(net);
1910 tipc_net_stop(net);
1911 tipc_bcast_stop(net);
1912 tipc_nametbl_stop(net);
1913 tipc_sk_rht_destroy(net);
1914 - tipc_socket_stop();
1915 }
1916
1917 static struct pernet_operations tipc_net_ops = {
1918 @@ -118,6 +105,11 @@ static struct pernet_operations tipc_net_ops = {
1919 .size = sizeof(struct tipc_net),
1920 };
1921
1922 +static struct pernet_operations tipc_topsrv_net_ops = {
1923 + .init = tipc_topsrv_init_net,
1924 + .exit = tipc_topsrv_exit_net,
1925 +};
1926 +
1927 static int __init tipc_init(void)
1928 {
1929 int err;
1930 @@ -144,6 +136,14 @@ static int __init tipc_init(void)
1931 if (err)
1932 goto out_pernet;
1933
1934 + err = tipc_socket_init();
1935 + if (err)
1936 + goto out_socket;
1937 +
1938 + err = register_pernet_subsys(&tipc_topsrv_net_ops);
1939 + if (err)
1940 + goto out_pernet_topsrv;
1941 +
1942 err = tipc_bearer_setup();
1943 if (err)
1944 goto out_bearer;
1945 @@ -151,6 +151,10 @@ static int __init tipc_init(void)
1946 pr_info("Started in single node mode\n");
1947 return 0;
1948 out_bearer:
1949 + unregister_pernet_subsys(&tipc_topsrv_net_ops);
1950 +out_pernet_topsrv:
1951 + tipc_socket_stop();
1952 +out_socket:
1953 unregister_pernet_subsys(&tipc_net_ops);
1954 out_pernet:
1955 tipc_unregister_sysctl();
1956 @@ -166,6 +170,8 @@ out_netlink:
1957 static void __exit tipc_exit(void)
1958 {
1959 tipc_bearer_cleanup();
1960 + unregister_pernet_subsys(&tipc_topsrv_net_ops);
1961 + tipc_socket_stop();
1962 unregister_pernet_subsys(&tipc_net_ops);
1963 tipc_netlink_stop();
1964 tipc_netlink_compat_stop();
1965 diff --git a/net/tipc/subscr.h b/net/tipc/subscr.h
1966 index d793b4343885..aa015c233898 100644
1967 --- a/net/tipc/subscr.h
1968 +++ b/net/tipc/subscr.h
1969 @@ -77,8 +77,9 @@ void tipc_sub_report_overlap(struct tipc_subscription *sub,
1970 u32 found_lower, u32 found_upper,
1971 u32 event, u32 port, u32 node,
1972 u32 scope, int must);
1973 -int tipc_topsrv_start(struct net *net);
1974 -void tipc_topsrv_stop(struct net *net);
1975 +
1976 +int __net_init tipc_topsrv_init_net(struct net *net);
1977 +void __net_exit tipc_topsrv_exit_net(struct net *net);
1978
1979 void tipc_sub_put(struct tipc_subscription *subscription);
1980 void tipc_sub_get(struct tipc_subscription *subscription);
1981 diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c
1982 index 2301b09df234..35558656fe02 100644
1983 --- a/net/tipc/topsrv.c
1984 +++ b/net/tipc/topsrv.c
1985 @@ -643,7 +643,7 @@ static void tipc_topsrv_work_stop(struct tipc_topsrv *s)
1986 destroy_workqueue(s->send_wq);
1987 }
1988
1989 -int tipc_topsrv_start(struct net *net)
1990 +static int tipc_topsrv_start(struct net *net)
1991 {
1992 struct tipc_net *tn = tipc_net(net);
1993 const char name[] = "topology_server";
1994 @@ -677,7 +677,7 @@ int tipc_topsrv_start(struct net *net)
1995 return ret;
1996 }
1997
1998 -void tipc_topsrv_stop(struct net *net)
1999 +static void tipc_topsrv_stop(struct net *net)
2000 {
2001 struct tipc_topsrv *srv = tipc_topsrv(net);
2002 struct socket *lsock = srv->listener;
2003 @@ -702,3 +702,13 @@ void tipc_topsrv_stop(struct net *net)
2004 idr_destroy(&srv->conn_idr);
2005 kfree(srv);
2006 }
2007 +
2008 +int __net_init tipc_topsrv_init_net(struct net *net)
2009 +{
2010 + return tipc_topsrv_start(net);
2011 +}
2012 +
2013 +void __net_exit tipc_topsrv_exit_net(struct net *net)
2014 +{
2015 + tipc_topsrv_stop(net);
2016 +}
2017 diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c
2018 index fdf22cb0b3e6..8035bf495eb2 100644
2019 --- a/net/tls/tls_device.c
2020 +++ b/net/tls/tls_device.c
2021 @@ -916,12 +916,6 @@ void tls_device_offload_cleanup_rx(struct sock *sk)
2022 if (!netdev)
2023 goto out;
2024
2025 - if (!(netdev->features & NETIF_F_HW_TLS_RX)) {
2026 - pr_err_ratelimited("%s: device is missing NETIF_F_HW_TLS_RX cap\n",
2027 - __func__);
2028 - goto out;
2029 - }
2030 -
2031 netdev->tlsdev_ops->tls_dev_del(netdev, tls_ctx,
2032 TLS_OFFLOAD_CTX_DIR_RX);
2033
2034 @@ -980,7 +974,8 @@ static int tls_dev_event(struct notifier_block *this, unsigned long event,
2035 {
2036 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2037
2038 - if (!(dev->features & (NETIF_F_HW_TLS_RX | NETIF_F_HW_TLS_TX)))
2039 + if (!dev->tlsdev_ops &&
2040 + !(dev->features & (NETIF_F_HW_TLS_RX | NETIF_F_HW_TLS_TX)))
2041 return NOTIFY_DONE;
2042
2043 switch (event) {
2044 diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
2045 index 083c526073ef..8b980fb2270a 100755
2046 --- a/scripts/gcc-goto.sh
2047 +++ b/scripts/gcc-goto.sh
2048 @@ -3,7 +3,7 @@
2049 # Test for gcc 'asm goto' support
2050 # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>
2051
2052 -cat << "END" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
2053 +cat << "END" | $@ -x c - -fno-PIE -c -o /dev/null
2054 int main(void)
2055 {
2056 #if defined(__arm__) || defined(__aarch64__)
2057 diff --git a/tools/arch/x86/include/asm/rmwcc.h b/tools/arch/x86/include/asm/rmwcc.h
2058 index dc90c0c2fae3..fee7983a90b4 100644
2059 --- a/tools/arch/x86/include/asm/rmwcc.h
2060 +++ b/tools/arch/x86/include/asm/rmwcc.h
2061 @@ -2,7 +2,7 @@
2062 #ifndef _TOOLS_LINUX_ASM_X86_RMWcc
2063 #define _TOOLS_LINUX_ASM_X86_RMWcc
2064
2065 -#ifdef CC_HAVE_ASM_GOTO
2066 +#ifdef CONFIG_CC_HAS_ASM_GOTO
2067
2068 #define __GEN_RMWcc(fullop, var, cc, ...) \
2069 do { \
2070 @@ -20,7 +20,7 @@ cc_label: \
2071 #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc) \
2072 __GEN_RMWcc(op " %1, " arg0, var, cc, vcon (val))
2073
2074 -#else /* !CC_HAVE_ASM_GOTO */
2075 +#else /* !CONFIG_CC_HAS_ASM_GOTO */
2076
2077 #define __GEN_RMWcc(fullop, var, cc, ...) \
2078 do { \
2079 @@ -37,6 +37,6 @@ do { \
2080 #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc) \
2081 __GEN_RMWcc(op " %2, " arg0, var, cc, vcon (val))
2082
2083 -#endif /* CC_HAVE_ASM_GOTO */
2084 +#endif /* CONFIG_CC_HAS_ASM_GOTO */
2085
2086 #endif /* _TOOLS_LINUX_ASM_X86_RMWcc */