Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.14 commit in: /
Date: Sun, 13 Jan 2019 19:27:54
Message-Id: 1547407649.ef1269908b6b202fc1ae1eea5f49b0e3994d79c8.mpagano@gentoo
1 commit: ef1269908b6b202fc1ae1eea5f49b0e3994d79c8
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jan 13 19:27:29 2019 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sun Jan 13 19:27:29 2019 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=ef126990
7
8 proj/linux-patches: Linux patch 4.14.93
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1092_linux-4.14.93.patch | 3993 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 3997 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 45efed8..6f66609 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -411,6 +411,10 @@ Patch: 1091_4.14.92.patch
21 From: http://www.kernel.org
22 Desc: Linux 4.14.92
23
24 +Patch: 1092_4.14.93.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 4.14.93
27 +
28 Patch: 1500_XATTR_USER_PREFIX.patch
29 From: https://bugs.gentoo.org/show_bug.cgi?id=470644
30 Desc: Support for namespace user.pax.* on tmpfs.
31
32 diff --git a/1092_linux-4.14.93.patch b/1092_linux-4.14.93.patch
33 new file mode 100644
34 index 0000000..23543fc
35 --- /dev/null
36 +++ b/1092_linux-4.14.93.patch
37 @@ -0,0 +1,3993 @@
38 +diff --git a/Makefile b/Makefile
39 +index be4d1f25cb29..a521e4cbd66f 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 4
45 + PATCHLEVEL = 14
46 +-SUBLEVEL = 92
47 ++SUBLEVEL = 93
48 + EXTRAVERSION =
49 + NAME = Petit Gorille
50 +
51 +@@ -479,18 +479,18 @@ endif
52 +
53 + ifeq ($(cc-name),clang)
54 + ifneq ($(CROSS_COMPILE),)
55 +-CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
56 ++CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE:%-=%))
57 + GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD)))
58 +-CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR)
59 ++CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)
60 + GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
61 + endif
62 + ifneq ($(GCC_TOOLCHAIN),)
63 +-CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
64 ++CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN)
65 + endif
66 +-KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
67 +-KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
68 +-KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
69 +-KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
70 ++CLANG_FLAGS += -no-integrated-as
71 ++KBUILD_CFLAGS += $(CLANG_FLAGS)
72 ++KBUILD_AFLAGS += $(CLANG_FLAGS)
73 ++export CLANG_FLAGS
74 + endif
75 +
76 + RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
77 +@@ -954,11 +954,6 @@ ifdef CONFIG_STACK_VALIDATION
78 + ifeq ($(has_libelf),1)
79 + objtool_target := tools/objtool FORCE
80 + else
81 +- ifdef CONFIG_UNWINDER_ORC
82 +- $(error "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
83 +- else
84 +- $(warning "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel")
85 +- endif
86 + SKIP_STACK_VALIDATION := 1
87 + export SKIP_STACK_VALIDATION
88 + endif
89 +@@ -1102,6 +1097,14 @@ uapi-asm-generic:
90 +
91 + PHONY += prepare-objtool
92 + prepare-objtool: $(objtool_target)
93 ++ifeq ($(SKIP_STACK_VALIDATION),1)
94 ++ifdef CONFIG_UNWINDER_ORC
95 ++ @echo "error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
96 ++ @false
97 ++else
98 ++ @echo "warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
99 ++endif
100 ++endif
101 +
102 + # Check for CONFIG flags that require compiler support. Abort the build
103 + # after .config has been processed, but before the kernel build starts.
104 +diff --git a/arch/arm/boot/dts/imx7d-nitrogen7.dts b/arch/arm/boot/dts/imx7d-nitrogen7.dts
105 +index e7998308861f..f8caea16bc2d 100644
106 +--- a/arch/arm/boot/dts/imx7d-nitrogen7.dts
107 ++++ b/arch/arm/boot/dts/imx7d-nitrogen7.dts
108 +@@ -117,13 +117,17 @@
109 + compatible = "regulator-fixed";
110 + regulator-min-microvolt = <3300000>;
111 + regulator-max-microvolt = <3300000>;
112 +- clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
113 +- clock-names = "slow";
114 + regulator-name = "reg_wlan";
115 + startup-delay-us = <70000>;
116 + gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>;
117 + enable-active-high;
118 + };
119 ++
120 ++ usdhc2_pwrseq: usdhc2_pwrseq {
121 ++ compatible = "mmc-pwrseq-simple";
122 ++ clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
123 ++ clock-names = "ext_clock";
124 ++ };
125 + };
126 +
127 + &adc1 {
128 +@@ -430,6 +434,7 @@
129 + bus-width = <4>;
130 + non-removable;
131 + vmmc-supply = <&reg_wlan>;
132 ++ mmc-pwrseq = <&usdhc2_pwrseq>;
133 + cap-power-off-card;
134 + keep-power-in-suspend;
135 + status = "okay";
136 +diff --git a/arch/arm/mach-imx/cpuidle-imx6sx.c b/arch/arm/mach-imx/cpuidle-imx6sx.c
137 +index c5a5c3a70ab1..edb888ac5ad3 100644
138 +--- a/arch/arm/mach-imx/cpuidle-imx6sx.c
139 ++++ b/arch/arm/mach-imx/cpuidle-imx6sx.c
140 +@@ -108,7 +108,7 @@ int __init imx6sx_cpuidle_init(void)
141 + * except for power up sw2iso which need to be
142 + * larger than LDO ramp up time.
143 + */
144 +- imx_gpc_set_arm_power_up_timing(2, 1);
145 ++ imx_gpc_set_arm_power_up_timing(0xf, 1);
146 + imx_gpc_set_arm_power_down_timing(1, 1);
147 +
148 + return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
149 +diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
150 +index 48f2b3657507..0c5f70e6d5cf 100644
151 +--- a/arch/arm64/Makefile
152 ++++ b/arch/arm64/Makefile
153 +@@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y)
154 + # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
155 + # for relative relocs, since this leads to better Image compression
156 + # with the relocation offsets always being zero.
157 +-LDFLAGS_vmlinux += -pie -shared -Bsymbolic \
158 ++LDFLAGS_vmlinux += -shared -Bsymbolic -z notext -z norelro \
159 + $(call ld-option, --no-apply-dynamic-relocs)
160 + endif
161 +
162 +diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
163 +index c7fcb232fe47..40f9f0b078a4 100644
164 +--- a/arch/arm64/kernel/image.h
165 ++++ b/arch/arm64/kernel/image.h
166 +@@ -75,16 +75,6 @@
167 +
168 + __efistub_stext_offset = stext - _text;
169 +
170 +-/*
171 +- * Prevent the symbol aliases below from being emitted into the kallsyms
172 +- * table, by forcing them to be absolute symbols (which are conveniently
173 +- * ignored by scripts/kallsyms) rather than section relative symbols.
174 +- * The distinction is only relevant for partial linking, and only for symbols
175 +- * that are defined within a section declaration (which is not the case for
176 +- * the definitions below) so the resulting values will be identical.
177 +- */
178 +-#define KALLSYMS_HIDE(sym) ABSOLUTE(sym)
179 +-
180 + /*
181 + * The EFI stub has its own symbol namespace prefixed by __efistub_, to
182 + * isolate it from the kernel proper. The following symbols are legally
183 +@@ -94,27 +84,27 @@ __efistub_stext_offset = stext - _text;
184 + * linked at. The routines below are all implemented in assembler in a
185 + * position independent manner
186 + */
187 +-__efistub_memcmp = KALLSYMS_HIDE(__pi_memcmp);
188 +-__efistub_memchr = KALLSYMS_HIDE(__pi_memchr);
189 +-__efistub_memcpy = KALLSYMS_HIDE(__pi_memcpy);
190 +-__efistub_memmove = KALLSYMS_HIDE(__pi_memmove);
191 +-__efistub_memset = KALLSYMS_HIDE(__pi_memset);
192 +-__efistub_strlen = KALLSYMS_HIDE(__pi_strlen);
193 +-__efistub_strnlen = KALLSYMS_HIDE(__pi_strnlen);
194 +-__efistub_strcmp = KALLSYMS_HIDE(__pi_strcmp);
195 +-__efistub_strncmp = KALLSYMS_HIDE(__pi_strncmp);
196 +-__efistub___flush_dcache_area = KALLSYMS_HIDE(__pi___flush_dcache_area);
197 ++__efistub_memcmp = __pi_memcmp;
198 ++__efistub_memchr = __pi_memchr;
199 ++__efistub_memcpy = __pi_memcpy;
200 ++__efistub_memmove = __pi_memmove;
201 ++__efistub_memset = __pi_memset;
202 ++__efistub_strlen = __pi_strlen;
203 ++__efistub_strnlen = __pi_strnlen;
204 ++__efistub_strcmp = __pi_strcmp;
205 ++__efistub_strncmp = __pi_strncmp;
206 ++__efistub___flush_dcache_area = __pi___flush_dcache_area;
207 +
208 + #ifdef CONFIG_KASAN
209 +-__efistub___memcpy = KALLSYMS_HIDE(__pi_memcpy);
210 +-__efistub___memmove = KALLSYMS_HIDE(__pi_memmove);
211 +-__efistub___memset = KALLSYMS_HIDE(__pi_memset);
212 ++__efistub___memcpy = __pi_memcpy;
213 ++__efistub___memmove = __pi_memmove;
214 ++__efistub___memset = __pi_memset;
215 + #endif
216 +
217 +-__efistub__text = KALLSYMS_HIDE(_text);
218 +-__efistub__end = KALLSYMS_HIDE(_end);
219 +-__efistub__edata = KALLSYMS_HIDE(_edata);
220 +-__efistub_screen_info = KALLSYMS_HIDE(screen_info);
221 ++__efistub__text = _text;
222 ++__efistub__end = _end;
223 ++__efistub__edata = _edata;
224 ++__efistub_screen_info = screen_info;
225 +
226 + #endif
227 +
228 +diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
229 +index ddfd3c0942f7..6edfdf5b061d 100644
230 +--- a/arch/arm64/kernel/vmlinux.lds.S
231 ++++ b/arch/arm64/kernel/vmlinux.lds.S
232 +@@ -99,7 +99,8 @@ SECTIONS
233 + *(.discard)
234 + *(.discard.*)
235 + *(.interp .dynamic)
236 +- *(.dynsym .dynstr .hash)
237 ++ *(.dynsym .dynstr .hash .gnu.hash)
238 ++ *(.eh_frame)
239 + }
240 +
241 + . = KIMAGE_VADDR + TEXT_OFFSET;
242 +@@ -176,12 +177,12 @@ SECTIONS
243 +
244 + PERCPU_SECTION(L1_CACHE_BYTES)
245 +
246 +- .rela : ALIGN(8) {
247 ++ .rela.dyn : ALIGN(8) {
248 + *(.rela .rela*)
249 + }
250 +
251 +- __rela_offset = ABSOLUTE(ADDR(.rela) - KIMAGE_VADDR);
252 +- __rela_size = SIZEOF(.rela);
253 ++ __rela_offset = ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
254 ++ __rela_size = SIZEOF(.rela.dyn);
255 +
256 + . = ALIGN(SEGMENT_ALIGN);
257 + __initdata_end = .;
258 +diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
259 +index 1381693a4a51..7452e50f4d1f 100644
260 +--- a/arch/powerpc/Makefile
261 ++++ b/arch/powerpc/Makefile
262 +@@ -236,7 +236,12 @@ endif
263 +
264 + # Work around a gcc code-gen bug with -fno-omit-frame-pointer.
265 + ifeq ($(CONFIG_FUNCTION_TRACER),y)
266 +-KBUILD_CFLAGS += -mno-sched-epilog
267 ++# Work around gcc code-gen bugs with -pg / -fno-omit-frame-pointer in gcc <= 4.8
268 ++# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44199
269 ++# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52828
270 ++ifneq ($(cc-name),clang)
271 ++KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, -mno-sched-epilog)
272 ++endif
273 + endif
274 +
275 + cpu-as-$(CONFIG_4xx) += -Wa,-m405
276 +diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
277 +index b479926f0167..e2a5a932c24a 100644
278 +--- a/arch/powerpc/boot/Makefile
279 ++++ b/arch/powerpc/boot/Makefile
280 +@@ -49,6 +49,11 @@ endif
281 +
282 + BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
283 +
284 ++ifeq ($(cc-name),clang)
285 ++BOOTCFLAGS += $(CLANG_FLAGS)
286 ++BOOTAFLAGS += $(CLANG_FLAGS)
287 ++endif
288 ++
289 + ifdef CONFIG_DEBUG_INFO
290 + BOOTCFLAGS += -g
291 + endif
292 +diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
293 +index 32dfe6d083f3..9b9d17437373 100644
294 +--- a/arch/powerpc/boot/crt0.S
295 ++++ b/arch/powerpc/boot/crt0.S
296 +@@ -15,7 +15,7 @@
297 + RELA = 7
298 + RELACOUNT = 0x6ffffff9
299 +
300 +- .text
301 ++ .data
302 + /* A procedure descriptor used when booting this as a COFF file.
303 + * When making COFF, this comes first in the link and we're
304 + * linked at 0x500000.
305 +@@ -23,6 +23,8 @@ RELACOUNT = 0x6ffffff9
306 + .globl _zimage_start_opd
307 + _zimage_start_opd:
308 + .long 0x500000, 0, 0, 0
309 ++ .text
310 ++ b _zimage_start
311 +
312 + #ifdef __powerpc64__
313 + .balign 8
314 +diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
315 +index 1479c61e29c5..a1089c9a9aa5 100644
316 +--- a/arch/powerpc/kernel/Makefile
317 ++++ b/arch/powerpc/kernel/Makefile
318 +@@ -5,6 +5,9 @@
319 +
320 + CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"'
321 +
322 ++# Disable clang warning for using setjmp without setjmp.h header
323 ++CFLAGS_crash.o += $(call cc-disable-warning, builtin-requires-header)
324 ++
325 + subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
326 +
327 + ifeq ($(CONFIG_PPC64),y)
328 +diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
329 +index 92fb1c8dbbd8..636ea854808e 100644
330 +--- a/arch/powerpc/kernel/signal_32.c
331 ++++ b/arch/powerpc/kernel/signal_32.c
332 +@@ -866,7 +866,23 @@ static long restore_tm_user_regs(struct pt_regs *regs,
333 + /* If TM bits are set to the reserved value, it's an invalid context */
334 + if (MSR_TM_RESV(msr_hi))
335 + return 1;
336 +- /* Pull in the MSR TM bits from the user context */
337 ++
338 ++ /*
339 ++ * Disabling preemption, since it is unsafe to be preempted
340 ++ * with MSR[TS] set without recheckpointing.
341 ++ */
342 ++ preempt_disable();
343 ++
344 ++ /*
345 ++ * CAUTION:
346 ++ * After regs->MSR[TS] being updated, make sure that get_user(),
347 ++ * put_user() or similar functions are *not* called. These
348 ++ * functions can generate page faults which will cause the process
349 ++ * to be de-scheduled with MSR[TS] set but without calling
350 ++ * tm_recheckpoint(). This can cause a bug.
351 ++ *
352 ++ * Pull in the MSR TM bits from the user context
353 ++ */
354 + regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr_hi & MSR_TS_MASK);
355 + /* Now, recheckpoint. This loads up all of the checkpointed (older)
356 + * registers, including FP and V[S]Rs. After recheckpointing, the
357 +@@ -891,6 +907,8 @@ static long restore_tm_user_regs(struct pt_regs *regs,
358 + }
359 + #endif
360 +
361 ++ preempt_enable();
362 ++
363 + return 0;
364 + }
365 + #endif
366 +diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
367 +index b2c002993d78..979b9463e17b 100644
368 +--- a/arch/powerpc/kernel/signal_64.c
369 ++++ b/arch/powerpc/kernel/signal_64.c
370 +@@ -452,20 +452,6 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
371 + if (MSR_TM_RESV(msr))
372 + return -EINVAL;
373 +
374 +- /* pull in MSR TS bits from user context */
375 +- regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK);
376 +-
377 +- /*
378 +- * Ensure that TM is enabled in regs->msr before we leave the signal
379 +- * handler. It could be the case that (a) user disabled the TM bit
380 +- * through the manipulation of the MSR bits in uc_mcontext or (b) the
381 +- * TM bit was disabled because a sufficient number of context switches
382 +- * happened whilst in the signal handler and load_tm overflowed,
383 +- * disabling the TM bit. In either case we can end up with an illegal
384 +- * TM state leading to a TM Bad Thing when we return to userspace.
385 +- */
386 +- regs->msr |= MSR_TM;
387 +-
388 + /* pull in MSR LE from user context */
389 + regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE);
390 +
391 +@@ -557,6 +543,34 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
392 + tm_enable();
393 + /* Make sure the transaction is marked as failed */
394 + tsk->thread.tm_texasr |= TEXASR_FS;
395 ++
396 ++ /*
397 ++ * Disabling preemption, since it is unsafe to be preempted
398 ++ * with MSR[TS] set without recheckpointing.
399 ++ */
400 ++ preempt_disable();
401 ++
402 ++ /* pull in MSR TS bits from user context */
403 ++ regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK);
404 ++
405 ++ /*
406 ++ * Ensure that TM is enabled in regs->msr before we leave the signal
407 ++ * handler. It could be the case that (a) user disabled the TM bit
408 ++ * through the manipulation of the MSR bits in uc_mcontext or (b) the
409 ++ * TM bit was disabled because a sufficient number of context switches
410 ++ * happened whilst in the signal handler and load_tm overflowed,
411 ++ * disabling the TM bit. In either case we can end up with an illegal
412 ++ * TM state leading to a TM Bad Thing when we return to userspace.
413 ++ *
414 ++ * CAUTION:
415 ++ * After regs->MSR[TS] being updated, make sure that get_user(),
416 ++ * put_user() or similar functions are *not* called. These
417 ++ * functions can generate page faults which will cause the process
418 ++ * to be de-scheduled with MSR[TS] set but without calling
419 ++ * tm_recheckpoint(). This can cause a bug.
420 ++ */
421 ++ regs->msr |= MSR_TM;
422 ++
423 + /* This loads the checkpointed FP/VEC state, if used */
424 + tm_recheckpoint(&tsk->thread, msr);
425 +
426 +@@ -570,6 +584,8 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
427 + regs->msr |= MSR_VEC;
428 + }
429 +
430 ++ preempt_enable();
431 ++
432 + return err;
433 + }
434 + #endif
435 +diff --git a/arch/powerpc/mm/dump_linuxpagetables.c b/arch/powerpc/mm/dump_linuxpagetables.c
436 +index 31c1c61afaa4..0bbaf7344872 100644
437 +--- a/arch/powerpc/mm/dump_linuxpagetables.c
438 ++++ b/arch/powerpc/mm/dump_linuxpagetables.c
439 +@@ -19,6 +19,7 @@
440 + #include <linux/hugetlb.h>
441 + #include <linux/io.h>
442 + #include <linux/mm.h>
443 ++#include <linux/highmem.h>
444 + #include <linux/sched.h>
445 + #include <linux/seq_file.h>
446 + #include <asm/fixmap.h>
447 +diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile
448 +index 1bc3abb237cd..549e99e71112 100644
449 +--- a/arch/powerpc/xmon/Makefile
450 ++++ b/arch/powerpc/xmon/Makefile
451 +@@ -1,7 +1,10 @@
452 + # SPDX-License-Identifier: GPL-2.0
453 + # Makefile for xmon
454 +
455 +-subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
456 ++# Disable clang warning for using setjmp without setjmp.h header
457 ++subdir-ccflags-y := $(call cc-disable-warning, builtin-requires-header)
458 ++
459 ++subdir-ccflags-$(CONFIG_PPC_WERROR) += -Werror
460 +
461 + GCOV_PROFILE := n
462 + UBSAN_SANITIZE := n
463 +diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h
464 +index 7764617b8f9c..bf6d2692fc60 100644
465 +--- a/arch/x86/include/asm/pgtable_64_types.h
466 ++++ b/arch/x86/include/asm/pgtable_64_types.h
467 +@@ -94,6 +94,11 @@ typedef struct { pteval_t pte; } pte_t;
468 + # define __VMEMMAP_BASE _AC(0xffffea0000000000, UL)
469 + #endif
470 +
471 ++#define GUARD_HOLE_PGD_ENTRY -256UL
472 ++#define GUARD_HOLE_SIZE (16UL << PGDIR_SHIFT)
473 ++#define GUARD_HOLE_BASE_ADDR (GUARD_HOLE_PGD_ENTRY << PGDIR_SHIFT)
474 ++#define GUARD_HOLE_END_ADDR (GUARD_HOLE_BASE_ADDR + GUARD_HOLE_SIZE)
475 ++
476 + #define LDT_PGD_ENTRY -240UL
477 + #define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT)
478 +
479 +diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
480 +index 2a4849e92831..6bca45d06676 100644
481 +--- a/arch/x86/mm/dump_pagetables.c
482 ++++ b/arch/x86/mm/dump_pagetables.c
483 +@@ -51,10 +51,10 @@ struct addr_marker {
484 + enum address_markers_idx {
485 + USER_SPACE_NR = 0,
486 + KERNEL_SPACE_NR,
487 +- LOW_KERNEL_NR,
488 +-#if defined(CONFIG_MODIFY_LDT_SYSCALL) && defined(CONFIG_X86_5LEVEL)
489 ++#ifdef CONFIG_MODIFY_LDT_SYSCALL
490 + LDT_NR,
491 + #endif
492 ++ LOW_KERNEL_NR,
493 + VMALLOC_START_NR,
494 + VMEMMAP_START_NR,
495 + #ifdef CONFIG_KASAN
496 +@@ -62,9 +62,6 @@ enum address_markers_idx {
497 + KASAN_SHADOW_END_NR,
498 + #endif
499 + CPU_ENTRY_AREA_NR,
500 +-#if defined(CONFIG_MODIFY_LDT_SYSCALL) && !defined(CONFIG_X86_5LEVEL)
501 +- LDT_NR,
502 +-#endif
503 + #ifdef CONFIG_X86_ESPFIX64
504 + ESPFIX_START_NR,
505 + #endif
506 +@@ -465,11 +462,11 @@ static inline bool is_hypervisor_range(int idx)
507 + {
508 + #ifdef CONFIG_X86_64
509 + /*
510 +- * ffff800000000000 - ffff87ffffffffff is reserved for
511 +- * the hypervisor.
512 ++ * A hole in the beginning of kernel address space reserved
513 ++ * for a hypervisor.
514 + */
515 +- return (idx >= pgd_index(__PAGE_OFFSET) - 16) &&
516 +- (idx < pgd_index(__PAGE_OFFSET));
517 ++ return (idx >= pgd_index(GUARD_HOLE_BASE_ADDR)) &&
518 ++ (idx < pgd_index(GUARD_HOLE_END_ADDR));
519 + #else
520 + return false;
521 + #endif
522 +diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
523 +index b33fa127a613..7631e6130d44 100644
524 +--- a/arch/x86/xen/mmu_pv.c
525 ++++ b/arch/x86/xen/mmu_pv.c
526 +@@ -614,19 +614,20 @@ static int __xen_pgd_walk(struct mm_struct *mm, pgd_t *pgd,
527 + unsigned long limit)
528 + {
529 + int i, nr, flush = 0;
530 +- unsigned hole_low, hole_high;
531 ++ unsigned hole_low = 0, hole_high = 0;
532 +
533 + /* The limit is the last byte to be touched */
534 + limit--;
535 + BUG_ON(limit >= FIXADDR_TOP);
536 +
537 ++#ifdef CONFIG_X86_64
538 + /*
539 + * 64-bit has a great big hole in the middle of the address
540 +- * space, which contains the Xen mappings. On 32-bit these
541 +- * will end up making a zero-sized hole and so is a no-op.
542 ++ * space, which contains the Xen mappings.
543 + */
544 +- hole_low = pgd_index(USER_LIMIT);
545 +- hole_high = pgd_index(PAGE_OFFSET);
546 ++ hole_low = pgd_index(GUARD_HOLE_BASE_ADDR);
547 ++ hole_high = pgd_index(GUARD_HOLE_END_ADDR);
548 ++#endif
549 +
550 + nr = pgd_index(limit) + 1;
551 + for (i = 0; i < nr; i++) {
552 +diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
553 +index 27b202c64c84..a46776a84480 100644
554 +--- a/drivers/block/zram/zram_drv.c
555 ++++ b/drivers/block/zram/zram_drv.c
556 +@@ -366,8 +366,10 @@ static ssize_t backing_dev_store(struct device *dev,
557 +
558 + bdev = bdgrab(I_BDEV(inode));
559 + err = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, zram);
560 +- if (err < 0)
561 ++ if (err < 0) {
562 ++ bdev = NULL;
563 + goto out;
564 ++ }
565 +
566 + nr_pages = i_size_read(inode) >> PAGE_SHIFT;
567 + bitmap_sz = BITS_TO_LONGS(nr_pages) * sizeof(long);
568 +diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
569 +index 45c65f805fd6..be85d4b39e99 100644
570 +--- a/drivers/gpio/gpio-mvebu.c
571 ++++ b/drivers/gpio/gpio-mvebu.c
572 +@@ -777,9 +777,6 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
573 + "marvell,armada-370-gpio"))
574 + return 0;
575 +
576 +- if (IS_ERR(mvchip->clk))
577 +- return PTR_ERR(mvchip->clk);
578 +-
579 + /*
580 + * There are only two sets of PWM configuration registers for
581 + * all the GPIO lines on those SoCs which this driver reserves
582 +@@ -790,6 +787,9 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
583 + if (!res)
584 + return 0;
585 +
586 ++ if (IS_ERR(mvchip->clk))
587 ++ return PTR_ERR(mvchip->clk);
588 ++
589 + /*
590 + * Use set A for lines of GPIO chip with id 0, B for GPIO chip
591 + * with id 1. Don't allow further GPIO chips to be used for PWM.
592 +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
593 +index 502c7eb708c2..5bd3c2ef0067 100644
594 +--- a/drivers/gpu/drm/vc4/vc4_plane.c
595 ++++ b/drivers/gpu/drm/vc4/vc4_plane.c
596 +@@ -354,6 +354,7 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
597 + if (vc4_state->is_unity)
598 + vc4_state->x_scaling[0] = VC4_SCALING_PPF;
599 + } else {
600 ++ vc4_state->is_yuv = false;
601 + vc4_state->x_scaling[1] = VC4_SCALING_NONE;
602 + vc4_state->y_scaling[1] = VC4_SCALING_NONE;
603 + }
604 +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
605 +index fcc688df694c..28ae3dc57103 100644
606 +--- a/drivers/hid/hid-ids.h
607 ++++ b/drivers/hid/hid-ids.h
608 +@@ -17,6 +17,9 @@
609 + #ifndef HID_IDS_H_FILE
610 + #define HID_IDS_H_FILE
611 +
612 ++#define USB_VENDOR_ID_258A 0x258a
613 ++#define USB_DEVICE_ID_258A_6A88 0x6a88
614 ++
615 + #define USB_VENDOR_ID_3M 0x0596
616 + #define USB_DEVICE_ID_3M1968 0x0500
617 + #define USB_DEVICE_ID_3M2256 0x0502
618 +diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c
619 +index 1882a4ab0f29..98b059d79bc8 100644
620 +--- a/drivers/hid/hid-ite.c
621 ++++ b/drivers/hid/hid-ite.c
622 +@@ -42,6 +42,7 @@ static int ite_event(struct hid_device *hdev, struct hid_field *field,
623 +
624 + static const struct hid_device_id ite_devices[] = {
625 + { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
626 ++ { HID_USB_DEVICE(USB_VENDOR_ID_258A, USB_DEVICE_ID_258A_6A88) },
627 + { }
628 + };
629 + MODULE_DEVICE_TABLE(hid, ite_devices);
630 +diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
631 +index 50b89ea0e60f..247a62604d1f 100644
632 +--- a/drivers/hv/Kconfig
633 ++++ b/drivers/hv/Kconfig
634 +@@ -2,7 +2,7 @@ menu "Microsoft Hyper-V guest support"
635 +
636 + config HYPERV
637 + tristate "Microsoft Hyper-V client drivers"
638 +- depends on X86 && ACPI && PCI && X86_LOCAL_APIC && HYPERVISOR_GUEST
639 ++ depends on X86 && ACPI && X86_LOCAL_APIC && HYPERVISOR_GUEST
640 + select PARAVIRT
641 + help
642 + Select this option to run Linux as a Hyper-V client operating
643 +diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
644 +index 58ac786634dc..82f2b70ca5bf 100644
645 +--- a/drivers/hwtracing/intel_th/msu.c
646 ++++ b/drivers/hwtracing/intel_th/msu.c
647 +@@ -1431,7 +1431,8 @@ nr_pages_store(struct device *dev, struct device_attribute *attr,
648 + if (!end)
649 + break;
650 +
651 +- len -= end - p;
652 ++ /* consume the number and the following comma, hence +1 */
653 ++ len -= end - p + 1;
654 + p = end + 1;
655 + } while (len);
656 +
657 +diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
658 +index 4d84b010b3ee..74328561bee2 100644
659 +--- a/drivers/infiniband/sw/rxe/rxe_resp.c
660 ++++ b/drivers/infiniband/sw/rxe/rxe_resp.c
661 +@@ -845,11 +845,16 @@ static enum resp_states do_complete(struct rxe_qp *qp,
662 +
663 + memset(&cqe, 0, sizeof(cqe));
664 +
665 +- wc->wr_id = wqe->wr_id;
666 +- wc->status = qp->resp.status;
667 +- wc->qp = &qp->ibqp;
668 ++ if (qp->rcq->is_user) {
669 ++ uwc->status = qp->resp.status;
670 ++ uwc->qp_num = qp->ibqp.qp_num;
671 ++ uwc->wr_id = wqe->wr_id;
672 ++ } else {
673 ++ wc->status = qp->resp.status;
674 ++ wc->qp = &qp->ibqp;
675 ++ wc->wr_id = wqe->wr_id;
676 ++ }
677 +
678 +- /* fields after status are not required for errors */
679 + if (wc->status == IB_WC_SUCCESS) {
680 + wc->opcode = (pkt->mask & RXE_IMMDT_MASK &&
681 + pkt->mask & RXE_WRITE_MASK) ?
682 +diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c
683 +index ce8e2baf31bb..616fdd94b069 100644
684 +--- a/drivers/input/keyboard/omap4-keypad.c
685 ++++ b/drivers/input/keyboard/omap4-keypad.c
686 +@@ -126,12 +126,8 @@ static irqreturn_t omap4_keypad_irq_handler(int irq, void *dev_id)
687 + {
688 + struct omap4_keypad *keypad_data = dev_id;
689 +
690 +- if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)) {
691 +- /* Disable interrupts */
692 +- kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
693 +- OMAP4_VAL_IRQDISABLE);
694 ++ if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS))
695 + return IRQ_WAKE_THREAD;
696 +- }
697 +
698 + return IRQ_NONE;
699 + }
700 +@@ -173,11 +169,6 @@ static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id)
701 + kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
702 + kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
703 +
704 +- /* enable interrupts */
705 +- kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
706 +- OMAP4_DEF_IRQENABLE_EVENTEN |
707 +- OMAP4_DEF_IRQENABLE_LONGKEY);
708 +-
709 + return IRQ_HANDLED;
710 + }
711 +
712 +@@ -214,9 +205,10 @@ static void omap4_keypad_close(struct input_dev *input)
713 +
714 + disable_irq(keypad_data->irq);
715 +
716 +- /* Disable interrupts */
717 ++ /* Disable interrupts and wake-up events */
718 + kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
719 + OMAP4_VAL_IRQDISABLE);
720 ++ kbd_writel(keypad_data, OMAP4_KBD_WAKEUPENABLE, 0);
721 +
722 + /* clear pending interrupts */
723 + kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
724 +@@ -364,7 +356,7 @@ static int omap4_keypad_probe(struct platform_device *pdev)
725 + }
726 +
727 + error = request_threaded_irq(keypad_data->irq, omap4_keypad_irq_handler,
728 +- omap4_keypad_irq_thread_fn, 0,
729 ++ omap4_keypad_irq_thread_fn, IRQF_ONESHOT,
730 + "omap4-keypad", keypad_data);
731 + if (error) {
732 + dev_err(&pdev->dev, "failed to register interrupt\n");
733 +diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
734 +index 54f0d037b5b6..e9ec5d10e0a9 100644
735 +--- a/drivers/input/mouse/synaptics.c
736 ++++ b/drivers/input/mouse/synaptics.c
737 +@@ -171,6 +171,7 @@ static const char * const smbus_pnp_ids[] = {
738 + "LEN0046", /* X250 */
739 + "LEN004a", /* W541 */
740 + "LEN005b", /* P50 */
741 ++ "LEN005e", /* T560 */
742 + "LEN0071", /* T480 */
743 + "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
744 + "LEN0073", /* X1 Carbon G5 (Elantech) */
745 +@@ -178,6 +179,7 @@ static const char * const smbus_pnp_ids[] = {
746 + "LEN0096", /* X280 */
747 + "LEN0097", /* X280 -> ALPS trackpoint */
748 + "LEN200f", /* T450s */
749 ++ "SYN3052", /* HP EliteBook 840 G4 */
750 + "SYN3221", /* HP 15-ay000 */
751 + NULL
752 + };
753 +diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
754 +index e86c1c8ec7f6..34006354d2eb 100644
755 +--- a/drivers/iommu/intel-iommu.c
756 ++++ b/drivers/iommu/intel-iommu.c
757 +@@ -2093,7 +2093,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
758 + * than default. Unnecessary for PT mode.
759 + */
760 + if (translation != CONTEXT_TT_PASS_THROUGH) {
761 +- for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) {
762 ++ for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) {
763 + ret = -ENOMEM;
764 + pgd = phys_to_virt(dma_pte_addr(pgd));
765 + if (!dma_pte_present(pgd))
766 +@@ -2107,7 +2107,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
767 + translation = CONTEXT_TT_MULTI_LEVEL;
768 +
769 + context_set_address_root(context, virt_to_phys(pgd));
770 +- context_set_address_width(context, iommu->agaw);
771 ++ context_set_address_width(context, agaw);
772 + } else {
773 + /*
774 + * In pass through mode, AW must be programmed to
775 +diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
776 +index bda3caca23ca..8573c70a1880 100644
777 +--- a/drivers/md/dm-verity-target.c
778 ++++ b/drivers/md/dm-verity-target.c
779 +@@ -139,10 +139,26 @@ static int verity_hash_update(struct dm_verity *v, struct ahash_request *req,
780 + {
781 + struct scatterlist sg;
782 +
783 +- sg_init_one(&sg, data, len);
784 +- ahash_request_set_crypt(req, &sg, NULL, len);
785 +-
786 +- return verity_complete_op(res, crypto_ahash_update(req));
787 ++ if (likely(!is_vmalloc_addr(data))) {
788 ++ sg_init_one(&sg, data, len);
789 ++ ahash_request_set_crypt(req, &sg, NULL, len);
790 ++ return verity_complete_op(res, crypto_ahash_update(req));
791 ++ } else {
792 ++ do {
793 ++ int r;
794 ++ size_t this_step = min_t(size_t, len, PAGE_SIZE - offset_in_page(data));
795 ++ flush_kernel_vmap_range((void *)data, this_step);
796 ++ sg_init_table(&sg, 1);
797 ++ sg_set_page(&sg, vmalloc_to_page(data), this_step, offset_in_page(data));
798 ++ ahash_request_set_crypt(req, &sg, NULL, this_step);
799 ++ r = verity_complete_op(res, crypto_ahash_update(req));
800 ++ if (unlikely(r))
801 ++ return r;
802 ++ data += this_step;
803 ++ len -= this_step;
804 ++ } while (len);
805 ++ return 0;
806 ++ }
807 + }
808 +
809 + /*
810 +diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
811 +index ba6b0a90ecfb..532bfce7f072 100644
812 +--- a/drivers/md/dm-zoned-target.c
813 ++++ b/drivers/md/dm-zoned-target.c
814 +@@ -20,7 +20,6 @@ struct dmz_bioctx {
815 + struct dm_zone *zone;
816 + struct bio *bio;
817 + atomic_t ref;
818 +- blk_status_t status;
819 + };
820 +
821 + /*
822 +@@ -78,65 +77,66 @@ static inline void dmz_bio_endio(struct bio *bio, blk_status_t status)
823 + {
824 + struct dmz_bioctx *bioctx = dm_per_bio_data(bio, sizeof(struct dmz_bioctx));
825 +
826 +- if (bioctx->status == BLK_STS_OK && status != BLK_STS_OK)
827 +- bioctx->status = status;
828 +- bio_endio(bio);
829 ++ if (status != BLK_STS_OK && bio->bi_status == BLK_STS_OK)
830 ++ bio->bi_status = status;
831 ++
832 ++ if (atomic_dec_and_test(&bioctx->ref)) {
833 ++ struct dm_zone *zone = bioctx->zone;
834 ++
835 ++ if (zone) {
836 ++ if (bio->bi_status != BLK_STS_OK &&
837 ++ bio_op(bio) == REQ_OP_WRITE &&
838 ++ dmz_is_seq(zone))
839 ++ set_bit(DMZ_SEQ_WRITE_ERR, &zone->flags);
840 ++ dmz_deactivate_zone(zone);
841 ++ }
842 ++ bio_endio(bio);
843 ++ }
844 + }
845 +
846 + /*
847 +- * Partial clone read BIO completion callback. This terminates the
848 ++ * Completion callback for an internally cloned target BIO. This terminates the
849 + * target BIO when there are no more references to its context.
850 + */
851 +-static void dmz_read_bio_end_io(struct bio *bio)
852 ++static void dmz_clone_endio(struct bio *clone)
853 + {
854 +- struct dmz_bioctx *bioctx = bio->bi_private;
855 +- blk_status_t status = bio->bi_status;
856 ++ struct dmz_bioctx *bioctx = clone->bi_private;
857 ++ blk_status_t status = clone->bi_status;
858 +
859 +- bio_put(bio);
860 ++ bio_put(clone);
861 + dmz_bio_endio(bioctx->bio, status);
862 + }
863 +
864 + /*
865 +- * Issue a BIO to a zone. The BIO may only partially process the
866 ++ * Issue a clone of a target BIO. The clone may only partially process the
867 + * original target BIO.
868 + */
869 +-static int dmz_submit_read_bio(struct dmz_target *dmz, struct dm_zone *zone,
870 +- struct bio *bio, sector_t chunk_block,
871 +- unsigned int nr_blocks)
872 ++static int dmz_submit_bio(struct dmz_target *dmz, struct dm_zone *zone,
873 ++ struct bio *bio, sector_t chunk_block,
874 ++ unsigned int nr_blocks)
875 + {
876 + struct dmz_bioctx *bioctx = dm_per_bio_data(bio, sizeof(struct dmz_bioctx));
877 +- sector_t sector;
878 + struct bio *clone;
879 +
880 +- /* BIO remap sector */
881 +- sector = dmz_start_sect(dmz->metadata, zone) + dmz_blk2sect(chunk_block);
882 +-
883 +- /* If the read is not partial, there is no need to clone the BIO */
884 +- if (nr_blocks == dmz_bio_blocks(bio)) {
885 +- /* Setup and submit the BIO */
886 +- bio->bi_iter.bi_sector = sector;
887 +- atomic_inc(&bioctx->ref);
888 +- generic_make_request(bio);
889 +- return 0;
890 +- }
891 +-
892 +- /* Partial BIO: we need to clone the BIO */
893 + clone = bio_clone_fast(bio, GFP_NOIO, dmz->bio_set);
894 + if (!clone)
895 + return -ENOMEM;
896 +
897 +- /* Setup the clone */
898 +- clone->bi_iter.bi_sector = sector;
899 ++ bio_set_dev(clone, dmz->dev->bdev);
900 ++ clone->bi_iter.bi_sector =
901 ++ dmz_start_sect(dmz->metadata, zone) + dmz_blk2sect(chunk_block);
902 + clone->bi_iter.bi_size = dmz_blk2sect(nr_blocks) << SECTOR_SHIFT;
903 +- clone->bi_end_io = dmz_read_bio_end_io;
904 ++ clone->bi_end_io = dmz_clone_endio;
905 + clone->bi_private = bioctx;
906 +
907 + bio_advance(bio, clone->bi_iter.bi_size);
908 +
909 +- /* Submit the clone */
910 + atomic_inc(&bioctx->ref);
911 + generic_make_request(clone);
912 +
913 ++ if (bio_op(bio) == REQ_OP_WRITE && dmz_is_seq(zone))
914 ++ zone->wp_block += nr_blocks;
915 ++
916 + return 0;
917 + }
918 +
919 +@@ -214,7 +214,7 @@ static int dmz_handle_read(struct dmz_target *dmz, struct dm_zone *zone,
920 + if (nr_blocks) {
921 + /* Valid blocks found: read them */
922 + nr_blocks = min_t(unsigned int, nr_blocks, end_block - chunk_block);
923 +- ret = dmz_submit_read_bio(dmz, rzone, bio, chunk_block, nr_blocks);
924 ++ ret = dmz_submit_bio(dmz, rzone, bio, chunk_block, nr_blocks);
925 + if (ret)
926 + return ret;
927 + chunk_block += nr_blocks;
928 +@@ -228,25 +228,6 @@ static int dmz_handle_read(struct dmz_target *dmz, struct dm_zone *zone,
929 + return 0;
930 + }
931 +
932 +-/*
933 +- * Issue a write BIO to a zone.
934 +- */
935 +-static void dmz_submit_write_bio(struct dmz_target *dmz, struct dm_zone *zone,
936 +- struct bio *bio, sector_t chunk_block,
937 +- unsigned int nr_blocks)
938 +-{
939 +- struct dmz_bioctx *bioctx = dm_per_bio_data(bio, sizeof(struct dmz_bioctx));
940 +-
941 +- /* Setup and submit the BIO */
942 +- bio_set_dev(bio, dmz->dev->bdev);
943 +- bio->bi_iter.bi_sector = dmz_start_sect(dmz->metadata, zone) + dmz_blk2sect(chunk_block);
944 +- atomic_inc(&bioctx->ref);
945 +- generic_make_request(bio);
946 +-
947 +- if (dmz_is_seq(zone))
948 +- zone->wp_block += nr_blocks;
949 +-}
950 +-
951 + /*
952 + * Write blocks directly in a data zone, at the write pointer.
953 + * If a buffer zone is assigned, invalidate the blocks written
954 +@@ -265,7 +246,9 @@ static int dmz_handle_direct_write(struct dmz_target *dmz,
955 + return -EROFS;
956 +
957 + /* Submit write */
958 +- dmz_submit_write_bio(dmz, zone, bio, chunk_block, nr_blocks);
959 ++ ret = dmz_submit_bio(dmz, zone, bio, chunk_block, nr_blocks);
960 ++ if (ret)
961 ++ return ret;
962 +
963 + /*
964 + * Validate the blocks in the data zone and invalidate
965 +@@ -301,7 +284,9 @@ static int dmz_handle_buffered_write(struct dmz_target *dmz,
966 + return -EROFS;
967 +
968 + /* Submit write */
969 +- dmz_submit_write_bio(dmz, bzone, bio, chunk_block, nr_blocks);
970 ++ ret = dmz_submit_bio(dmz, bzone, bio, chunk_block, nr_blocks);
971 ++ if (ret)
972 ++ return ret;
973 +
974 + /*
975 + * Validate the blocks in the buffer zone
976 +@@ -600,7 +585,6 @@ static int dmz_map(struct dm_target *ti, struct bio *bio)
977 + bioctx->zone = NULL;
978 + bioctx->bio = bio;
979 + atomic_set(&bioctx->ref, 1);
980 +- bioctx->status = BLK_STS_OK;
981 +
982 + /* Set the BIO pending in the flush list */
983 + if (!nr_sectors && bio_op(bio) == REQ_OP_WRITE) {
984 +@@ -623,35 +607,6 @@ static int dmz_map(struct dm_target *ti, struct bio *bio)
985 + return DM_MAPIO_SUBMITTED;
986 + }
987 +
988 +-/*
989 +- * Completed target BIO processing.
990 +- */
991 +-static int dmz_end_io(struct dm_target *ti, struct bio *bio, blk_status_t *error)
992 +-{
993 +- struct dmz_bioctx *bioctx = dm_per_bio_data(bio, sizeof(struct dmz_bioctx));
994 +-
995 +- if (bioctx->status == BLK_STS_OK && *error)
996 +- bioctx->status = *error;
997 +-
998 +- if (!atomic_dec_and_test(&bioctx->ref))
999 +- return DM_ENDIO_INCOMPLETE;
1000 +-
1001 +- /* Done */
1002 +- bio->bi_status = bioctx->status;
1003 +-
1004 +- if (bioctx->zone) {
1005 +- struct dm_zone *zone = bioctx->zone;
1006 +-
1007 +- if (*error && bio_op(bio) == REQ_OP_WRITE) {
1008 +- if (dmz_is_seq(zone))
1009 +- set_bit(DMZ_SEQ_WRITE_ERR, &zone->flags);
1010 +- }
1011 +- dmz_deactivate_zone(zone);
1012 +- }
1013 +-
1014 +- return DM_ENDIO_DONE;
1015 +-}
1016 +-
1017 + /*
1018 + * Get zoned device information.
1019 + */
1020 +@@ -946,7 +901,6 @@ static struct target_type dmz_type = {
1021 + .ctr = dmz_ctr,
1022 + .dtr = dmz_dtr,
1023 + .map = dmz_map,
1024 +- .end_io = dmz_end_io,
1025 + .io_hints = dmz_io_hints,
1026 + .prepare_ioctl = dmz_prepare_ioctl,
1027 + .postsuspend = dmz_suspend,
1028 +diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
1029 +index e786546bf3b8..52ddfa0fca94 100644
1030 +--- a/drivers/md/raid10.c
1031 ++++ b/drivers/md/raid10.c
1032 +@@ -4591,15 +4591,18 @@ static int handle_reshape_read_error(struct mddev *mddev,
1033 + /* Use sync reads to get the blocks from somewhere else */
1034 + int sectors = r10_bio->sectors;
1035 + struct r10conf *conf = mddev->private;
1036 +- struct {
1037 +- struct r10bio r10_bio;
1038 +- struct r10dev devs[conf->copies];
1039 +- } on_stack;
1040 +- struct r10bio *r10b = &on_stack.r10_bio;
1041 ++ struct r10bio *r10b;
1042 + int slot = 0;
1043 + int idx = 0;
1044 + struct page **pages;
1045 +
1046 ++ r10b = kmalloc(sizeof(*r10b) +
1047 ++ sizeof(struct r10dev) * conf->copies, GFP_NOIO);
1048 ++ if (!r10b) {
1049 ++ set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1050 ++ return -ENOMEM;
1051 ++ }
1052 ++
1053 + /* reshape IOs share pages from .devs[0].bio */
1054 + pages = get_resync_pages(r10_bio->devs[0].bio)->pages;
1055 +
1056 +@@ -4648,11 +4651,13 @@ static int handle_reshape_read_error(struct mddev *mddev,
1057 + /* couldn't read this block, must give up */
1058 + set_bit(MD_RECOVERY_INTR,
1059 + &mddev->recovery);
1060 ++ kfree(r10b);
1061 + return -EIO;
1062 + }
1063 + sectors -= s;
1064 + idx++;
1065 + }
1066 ++ kfree(r10b);
1067 + return 0;
1068 + }
1069 +
1070 +diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c
1071 +index 147b83011b58..2769eb0dfcf5 100644
1072 +--- a/drivers/misc/genwqe/card_utils.c
1073 ++++ b/drivers/misc/genwqe/card_utils.c
1074 +@@ -217,7 +217,7 @@ u32 genwqe_crc32(u8 *buff, size_t len, u32 init)
1075 + void *__genwqe_alloc_consistent(struct genwqe_dev *cd, size_t size,
1076 + dma_addr_t *dma_handle)
1077 + {
1078 +- if (get_order(size) > MAX_ORDER)
1079 ++ if (get_order(size) >= MAX_ORDER)
1080 + return NULL;
1081 +
1082 + return dma_zalloc_coherent(&cd->pci_dev->dev, size, dma_handle,
1083 +diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
1084 +index 3b889efddf78..50dd6bf176d0 100644
1085 +--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
1086 ++++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
1087 +@@ -29,9 +29,6 @@
1088 + #define RES_RING_CSR 1
1089 + #define RES_RING_CMD 2
1090 +
1091 +-static const struct of_device_id xgene_enet_of_match[];
1092 +-static const struct acpi_device_id xgene_enet_acpi_match[];
1093 +-
1094 + static void xgene_enet_init_bufpool(struct xgene_enet_desc_ring *buf_pool)
1095 + {
1096 + struct xgene_enet_raw_desc16 *raw_desc;
1097 +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
1098 +index 1b7f4342dab9..d17a5c911524 100644
1099 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
1100 ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
1101 +@@ -1278,6 +1278,7 @@ enum sp_rtnl_flag {
1102 + BNX2X_SP_RTNL_TX_STOP,
1103 + BNX2X_SP_RTNL_GET_DRV_VERSION,
1104 + BNX2X_SP_RTNL_CHANGE_UDP_PORT,
1105 ++ BNX2X_SP_RTNL_UPDATE_SVID,
1106 + };
1107 +
1108 + enum bnx2x_iov_flag {
1109 +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1110 +index bd3e3f080ebf..022b06e770d1 100644
1111 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1112 ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1113 +@@ -2925,6 +2925,10 @@ static void bnx2x_handle_update_svid_cmd(struct bnx2x *bp)
1114 + func_params.f_obj = &bp->func_obj;
1115 + func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
1116 +
1117 ++ /* Prepare parameters for function state transitions */
1118 ++ __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
1119 ++ __set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
1120 ++
1121 + if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
1122 + int func = BP_ABS_FUNC(bp);
1123 + u32 val;
1124 +@@ -4301,7 +4305,8 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
1125 + bnx2x_handle_eee_event(bp);
1126 +
1127 + if (val & DRV_STATUS_OEM_UPDATE_SVID)
1128 +- bnx2x_handle_update_svid_cmd(bp);
1129 ++ bnx2x_schedule_sp_rtnl(bp,
1130 ++ BNX2X_SP_RTNL_UPDATE_SVID, 0);
1131 +
1132 + if (bp->link_vars.periodic_flags &
1133 + PERIODIC_FLAGS_LINK_EVENT) {
1134 +@@ -8462,6 +8467,7 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
1135 + /* Fill a user request section if needed */
1136 + if (!test_bit(RAMROD_CONT, ramrod_flags)) {
1137 + ramrod_param.user_req.u.vlan.vlan = vlan;
1138 ++ __set_bit(BNX2X_VLAN, &ramrod_param.user_req.vlan_mac_flags);
1139 + /* Set the command: ADD or DEL */
1140 + if (set)
1141 + ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
1142 +@@ -8482,6 +8488,27 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
1143 + return rc;
1144 + }
1145 +
1146 ++static int bnx2x_del_all_vlans(struct bnx2x *bp)
1147 ++{
1148 ++ struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj;
1149 ++ unsigned long ramrod_flags = 0, vlan_flags = 0;
1150 ++ struct bnx2x_vlan_entry *vlan;
1151 ++ int rc;
1152 ++
1153 ++ __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
1154 ++ __set_bit(BNX2X_VLAN, &vlan_flags);
1155 ++ rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_flags, &ramrod_flags);
1156 ++ if (rc)
1157 ++ return rc;
1158 ++
1159 ++ /* Mark that hw forgot all entries */
1160 ++ list_for_each_entry(vlan, &bp->vlan_reg, link)
1161 ++ vlan->hw = false;
1162 ++ bp->vlan_cnt = 0;
1163 ++
1164 ++ return 0;
1165 ++}
1166 ++
1167 + int bnx2x_del_all_macs(struct bnx2x *bp,
1168 + struct bnx2x_vlan_mac_obj *mac_obj,
1169 + int mac_type, bool wait_for_comp)
1170 +@@ -9320,6 +9347,17 @@ void bnx2x_chip_cleanup(struct bnx2x *bp, int unload_mode, bool keep_link)
1171 + BNX2X_ERR("Failed to schedule DEL commands for UC MACs list: %d\n",
1172 + rc);
1173 +
1174 ++ /* The whole *vlan_obj structure may be not initialized if VLAN
1175 ++ * filtering offload is not supported by hardware. Currently this is
1176 ++ * true for all hardware covered by CHIP_IS_E1x().
1177 ++ */
1178 ++ if (!CHIP_IS_E1x(bp)) {
1179 ++ /* Remove all currently configured VLANs */
1180 ++ rc = bnx2x_del_all_vlans(bp);
1181 ++ if (rc < 0)
1182 ++ BNX2X_ERR("Failed to delete all VLANs\n");
1183 ++ }
1184 ++
1185 + /* Disable LLH */
1186 + if (!CHIP_IS_E1(bp))
1187 + REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
1188 +@@ -10342,6 +10380,9 @@ sp_rtnl_not_reset:
1189 + &bp->sp_rtnl_state))
1190 + bnx2x_update_mng_version(bp);
1191 +
1192 ++ if (test_and_clear_bit(BNX2X_SP_RTNL_UPDATE_SVID, &bp->sp_rtnl_state))
1193 ++ bnx2x_handle_update_svid_cmd(bp);
1194 ++
1195 + if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
1196 + &bp->sp_rtnl_state)) {
1197 + if (bnx2x_udp_port_update(bp)) {
1198 +@@ -11733,8 +11774,10 @@ static void bnx2x_get_fcoe_info(struct bnx2x *bp)
1199 + * If maximum allowed number of connections is zero -
1200 + * disable the feature.
1201 + */
1202 +- if (!bp->cnic_eth_dev.max_fcoe_conn)
1203 ++ if (!bp->cnic_eth_dev.max_fcoe_conn) {
1204 + bp->flags |= NO_FCOE_FLAG;
1205 ++ eth_zero_addr(bp->fip_mac);
1206 ++ }
1207 + }
1208 +
1209 + static void bnx2x_get_cnic_info(struct bnx2x *bp)
1210 +@@ -13004,13 +13047,6 @@ static void bnx2x_vlan_configure(struct bnx2x *bp, bool set_rx_mode)
1211 +
1212 + int bnx2x_vlan_reconfigure_vid(struct bnx2x *bp)
1213 + {
1214 +- struct bnx2x_vlan_entry *vlan;
1215 +-
1216 +- /* The hw forgot all entries after reload */
1217 +- list_for_each_entry(vlan, &bp->vlan_reg, link)
1218 +- vlan->hw = false;
1219 +- bp->vlan_cnt = 0;
1220 +-
1221 + /* Don't set rx mode here. Our caller will do it. */
1222 + bnx2x_vlan_configure(bp, false);
1223 +
1224 +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
1225 +index 0bf2fd470819..7a6e82db4231 100644
1226 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
1227 ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
1228 +@@ -265,6 +265,7 @@ enum {
1229 + BNX2X_ETH_MAC,
1230 + BNX2X_ISCSI_ETH_MAC,
1231 + BNX2X_NETQ_ETH_MAC,
1232 ++ BNX2X_VLAN,
1233 + BNX2X_DONT_CONSUME_CAM_CREDIT,
1234 + BNX2X_DONT_CONSUME_CAM_CREDIT_DEST,
1235 + };
1236 +@@ -272,7 +273,8 @@ enum {
1237 + #define BNX2X_VLAN_MAC_CMP_MASK (1 << BNX2X_UC_LIST_MAC | \
1238 + 1 << BNX2X_ETH_MAC | \
1239 + 1 << BNX2X_ISCSI_ETH_MAC | \
1240 +- 1 << BNX2X_NETQ_ETH_MAC)
1241 ++ 1 << BNX2X_NETQ_ETH_MAC | \
1242 ++ 1 << BNX2X_VLAN)
1243 + #define BNX2X_VLAN_MAC_CMP_FLAGS(flags) \
1244 + ((flags) & BNX2X_VLAN_MAC_CMP_MASK)
1245 +
1246 +diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
1247 +index 0b2f9ddfb1c4..9046993947cc 100644
1248 +--- a/drivers/net/ethernet/cadence/macb_main.c
1249 ++++ b/drivers/net/ethernet/cadence/macb_main.c
1250 +@@ -675,6 +675,11 @@ static void macb_set_addr(struct macb *bp, struct macb_dma_desc *desc, dma_addr_
1251 + if (bp->hw_dma_cap & HW_DMA_CAP_64B) {
1252 + desc_64 = macb_64b_desc(bp, desc);
1253 + desc_64->addrh = upper_32_bits(addr);
1254 ++ /* The low bits of RX address contain the RX_USED bit, clearing
1255 ++ * of which allows packet RX. Make sure the high bits are also
1256 ++ * visible to HW at that point.
1257 ++ */
1258 ++ dma_wmb();
1259 + }
1260 + #endif
1261 + desc->addr = lower_32_bits(addr);
1262 +@@ -918,14 +923,19 @@ static void gem_rx_refill(struct macb *bp)
1263 +
1264 + if (entry == bp->rx_ring_size - 1)
1265 + paddr |= MACB_BIT(RX_WRAP);
1266 +- macb_set_addr(bp, desc, paddr);
1267 + desc->ctrl = 0;
1268 ++ /* Setting addr clears RX_USED and allows reception,
1269 ++ * make sure ctrl is cleared first to avoid a race.
1270 ++ */
1271 ++ dma_wmb();
1272 ++ macb_set_addr(bp, desc, paddr);
1273 +
1274 + /* properly align Ethernet header */
1275 + skb_reserve(skb, NET_IP_ALIGN);
1276 + } else {
1277 +- desc->addr &= ~MACB_BIT(RX_USED);
1278 + desc->ctrl = 0;
1279 ++ dma_wmb();
1280 ++ desc->addr &= ~MACB_BIT(RX_USED);
1281 + }
1282 + }
1283 +
1284 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
1285 +index bf930ab3c2bd..a185a8be7999 100644
1286 +--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
1287 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
1288 +@@ -379,6 +379,9 @@ void hns_ae_stop(struct hnae_handle *handle)
1289 +
1290 + hns_ae_ring_enable_all(handle, 0);
1291 +
1292 ++ /* clean rx fbd. */
1293 ++ hns_rcb_wait_fbd_clean(handle->qs, handle->q_num, RCB_INT_FLAG_RX);
1294 ++
1295 + (void)hns_mac_vm_config_bc_en(mac_cb, 0, false);
1296 + }
1297 +
1298 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
1299 +index 8c7bc5cf193c..5e8930d02f50 100644
1300 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
1301 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
1302 +@@ -67,11 +67,14 @@ static void hns_gmac_enable(void *mac_drv, enum mac_commom_mode mode)
1303 + struct mac_driver *drv = (struct mac_driver *)mac_drv;
1304 +
1305 + /*enable GE rX/tX */
1306 +- if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1307 ++ if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
1308 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 1);
1309 +
1310 +- if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1311 ++ if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
1312 ++ /* enable rx pcs */
1313 ++ dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 0);
1314 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 1);
1315 ++ }
1316 + }
1317 +
1318 + static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
1319 +@@ -79,11 +82,14 @@ static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
1320 + struct mac_driver *drv = (struct mac_driver *)mac_drv;
1321 +
1322 + /*disable GE rX/tX */
1323 +- if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1324 ++ if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
1325 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 0);
1326 +
1327 +- if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1328 ++ if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
1329 ++ /* disable rx pcs */
1330 ++ dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 1);
1331 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 0);
1332 ++ }
1333 + }
1334 +
1335 + /* hns_gmac_get_en - get port enable
1336 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
1337 +index 5a8dbd72fe45..07e117deeb0f 100644
1338 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
1339 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
1340 +@@ -783,6 +783,17 @@ static int hns_mac_register_phy(struct hns_mac_cb *mac_cb)
1341 + return rc;
1342 + }
1343 +
1344 ++static void hns_mac_remove_phydev(struct hns_mac_cb *mac_cb)
1345 ++{
1346 ++ if (!to_acpi_device_node(mac_cb->fw_port) || !mac_cb->phy_dev)
1347 ++ return;
1348 ++
1349 ++ phy_device_remove(mac_cb->phy_dev);
1350 ++ phy_device_free(mac_cb->phy_dev);
1351 ++
1352 ++ mac_cb->phy_dev = NULL;
1353 ++}
1354 ++
1355 + #define MAC_MEDIA_TYPE_MAX_LEN 16
1356 +
1357 + static const struct {
1358 +@@ -1120,7 +1131,11 @@ void hns_mac_uninit(struct dsaf_device *dsaf_dev)
1359 + int max_port_num = hns_mac_get_max_port_num(dsaf_dev);
1360 +
1361 + for (i = 0; i < max_port_num; i++) {
1362 ++ if (!dsaf_dev->mac_cb[i])
1363 ++ continue;
1364 ++
1365 + dsaf_dev->misc_op->cpld_reset_led(dsaf_dev->mac_cb[i]);
1366 ++ hns_mac_remove_phydev(dsaf_dev->mac_cb[i]);
1367 + dsaf_dev->mac_cb[i] = NULL;
1368 + }
1369 + }
1370 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1371 +index 1f056a6b167e..51d42d7f6074 100644
1372 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1373 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1374 +@@ -934,6 +934,62 @@ static void hns_dsaf_tcam_mc_cfg(
1375 + spin_unlock_bh(&dsaf_dev->tcam_lock);
1376 + }
1377 +
1378 ++/**
1379 ++ * hns_dsaf_tcam_uc_cfg_vague - INT
1380 ++ * @dsaf_dev: dsa fabric device struct pointer
1381 ++ * @address,
1382 ++ * @ptbl_tcam_data,
1383 ++ */
1384 ++static void hns_dsaf_tcam_uc_cfg_vague(struct dsaf_device *dsaf_dev,
1385 ++ u32 address,
1386 ++ struct dsaf_tbl_tcam_data *tcam_data,
1387 ++ struct dsaf_tbl_tcam_data *tcam_mask,
1388 ++ struct dsaf_tbl_tcam_ucast_cfg *tcam_uc)
1389 ++{
1390 ++ spin_lock_bh(&dsaf_dev->tcam_lock);
1391 ++ hns_dsaf_tbl_tcam_addr_cfg(dsaf_dev, address);
1392 ++ hns_dsaf_tbl_tcam_data_cfg(dsaf_dev, tcam_data);
1393 ++ hns_dsaf_tbl_tcam_ucast_cfg(dsaf_dev, tcam_uc);
1394 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1395 ++ hns_dsaf_tbl_tcam_data_ucast_pul(dsaf_dev);
1396 ++
1397 ++ /*Restore Match Data*/
1398 ++ tcam_mask->tbl_tcam_data_high = 0xffffffff;
1399 ++ tcam_mask->tbl_tcam_data_low = 0xffffffff;
1400 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1401 ++
1402 ++ spin_unlock_bh(&dsaf_dev->tcam_lock);
1403 ++}
1404 ++
1405 ++/**
1406 ++ * hns_dsaf_tcam_mc_cfg_vague - INT
1407 ++ * @dsaf_dev: dsa fabric device struct pointer
1408 ++ * @address,
1409 ++ * @ptbl_tcam_data,
1410 ++ * @ptbl_tcam_mask
1411 ++ * @ptbl_tcam_mcast
1412 ++ */
1413 ++static void hns_dsaf_tcam_mc_cfg_vague(struct dsaf_device *dsaf_dev,
1414 ++ u32 address,
1415 ++ struct dsaf_tbl_tcam_data *tcam_data,
1416 ++ struct dsaf_tbl_tcam_data *tcam_mask,
1417 ++ struct dsaf_tbl_tcam_mcast_cfg *tcam_mc)
1418 ++{
1419 ++ spin_lock_bh(&dsaf_dev->tcam_lock);
1420 ++ hns_dsaf_tbl_tcam_addr_cfg(dsaf_dev, address);
1421 ++ hns_dsaf_tbl_tcam_data_cfg(dsaf_dev, tcam_data);
1422 ++ hns_dsaf_tbl_tcam_mcast_cfg(dsaf_dev, tcam_mc);
1423 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1424 ++ hns_dsaf_tbl_tcam_data_mcast_pul(dsaf_dev);
1425 ++
1426 ++ /*Restore Match Data*/
1427 ++ tcam_mask->tbl_tcam_data_high = 0xffffffff;
1428 ++ tcam_mask->tbl_tcam_data_low = 0xffffffff;
1429 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1430 ++
1431 ++ spin_unlock_bh(&dsaf_dev->tcam_lock);
1432 ++}
1433 ++
1434 + /**
1435 + * hns_dsaf_tcam_mc_invld - INT
1436 + * @dsaf_id: dsa fabric id
1437 +@@ -1491,6 +1547,27 @@ static u16 hns_dsaf_find_empty_mac_entry(struct dsaf_device *dsaf_dev)
1438 + return DSAF_INVALID_ENTRY_IDX;
1439 + }
1440 +
1441 ++/**
1442 ++ * hns_dsaf_find_empty_mac_entry_reverse
1443 ++ * search dsa fabric soft empty-entry from the end
1444 ++ * @dsaf_dev: dsa fabric device struct pointer
1445 ++ */
1446 ++static u16 hns_dsaf_find_empty_mac_entry_reverse(struct dsaf_device *dsaf_dev)
1447 ++{
1448 ++ struct dsaf_drv_priv *priv = hns_dsaf_dev_priv(dsaf_dev);
1449 ++ struct dsaf_drv_soft_mac_tbl *soft_mac_entry;
1450 ++ int i;
1451 ++
1452 ++ soft_mac_entry = priv->soft_mac_tbl + (DSAF_TCAM_SUM - 1);
1453 ++ for (i = (DSAF_TCAM_SUM - 1); i > 0; i--) {
1454 ++ /* search all entry from end to start.*/
1455 ++ if (soft_mac_entry->index == DSAF_INVALID_ENTRY_IDX)
1456 ++ return i;
1457 ++ soft_mac_entry--;
1458 ++ }
1459 ++ return DSAF_INVALID_ENTRY_IDX;
1460 ++}
1461 ++
1462 + /**
1463 + * hns_dsaf_set_mac_key - set mac key
1464 + * @dsaf_dev: dsa fabric device struct pointer
1465 +@@ -2159,9 +2236,9 @@ void hns_dsaf_update_stats(struct dsaf_device *dsaf_dev, u32 node_num)
1466 + DSAF_INODE_LOCAL_ADDR_FALSE_NUM_0_REG + 0x80 * (u64)node_num);
1467 +
1468 + hw_stats->vlan_drop += dsaf_read_dev(dsaf_dev,
1469 +- DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 0x80 * (u64)node_num);
1470 ++ DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 4 * (u64)node_num);
1471 + hw_stats->stp_drop += dsaf_read_dev(dsaf_dev,
1472 +- DSAF_INODE_IN_DATA_STP_DISC_0_REG + 0x80 * (u64)node_num);
1473 ++ DSAF_INODE_IN_DATA_STP_DISC_0_REG + 4 * (u64)node_num);
1474 +
1475 + /* pfc pause frame statistics stored in dsaf inode*/
1476 + if ((node_num < DSAF_SERVICE_NW_NUM) && !is_ver1) {
1477 +@@ -2278,237 +2355,237 @@ void hns_dsaf_get_regs(struct dsaf_device *ddev, u32 port, void *data)
1478 + DSAF_INODE_BD_ORDER_STATUS_0_REG + j * 4);
1479 + p[223 + i] = dsaf_read_dev(ddev,
1480 + DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + j * 4);
1481 +- p[224 + i] = dsaf_read_dev(ddev,
1482 ++ p[226 + i] = dsaf_read_dev(ddev,
1483 + DSAF_INODE_IN_DATA_STP_DISC_0_REG + j * 4);
1484 + }
1485 +
1486 +- p[227] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
1487 ++ p[229] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
1488 +
1489 + for (i = 0; i < DSAF_INODE_NUM / DSAF_COMM_CHN; i++) {
1490 + j = i * DSAF_COMM_CHN + port;
1491 +- p[228 + i] = dsaf_read_dev(ddev,
1492 ++ p[230 + i] = dsaf_read_dev(ddev,
1493 + DSAF_INODE_VC0_IN_PKT_NUM_0_REG + j * 4);
1494 + }
1495 +
1496 +- p[231] = dsaf_read_dev(ddev,
1497 +- DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 4);
1498 ++ p[233] = dsaf_read_dev(ddev,
1499 ++ DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 0x80);
1500 +
1501 + /* dsaf inode registers */
1502 + for (i = 0; i < HNS_DSAF_SBM_NUM(ddev) / DSAF_COMM_CHN; i++) {
1503 + j = i * DSAF_COMM_CHN + port;
1504 +- p[232 + i] = dsaf_read_dev(ddev,
1505 ++ p[234 + i] = dsaf_read_dev(ddev,
1506 + DSAF_SBM_CFG_REG_0_REG + j * 0x80);
1507 +- p[235 + i] = dsaf_read_dev(ddev,
1508 ++ p[237 + i] = dsaf_read_dev(ddev,
1509 + DSAF_SBM_BP_CFG_0_XGE_REG_0_REG + j * 0x80);
1510 +- p[238 + i] = dsaf_read_dev(ddev,
1511 ++ p[240 + i] = dsaf_read_dev(ddev,
1512 + DSAF_SBM_BP_CFG_1_REG_0_REG + j * 0x80);
1513 +- p[241 + i] = dsaf_read_dev(ddev,
1514 ++ p[243 + i] = dsaf_read_dev(ddev,
1515 + DSAF_SBM_BP_CFG_2_XGE_REG_0_REG + j * 0x80);
1516 +- p[244 + i] = dsaf_read_dev(ddev,
1517 ++ p[246 + i] = dsaf_read_dev(ddev,
1518 + DSAF_SBM_FREE_CNT_0_0_REG + j * 0x80);
1519 +- p[245 + i] = dsaf_read_dev(ddev,
1520 ++ p[249 + i] = dsaf_read_dev(ddev,
1521 + DSAF_SBM_FREE_CNT_1_0_REG + j * 0x80);
1522 +- p[248 + i] = dsaf_read_dev(ddev,
1523 ++ p[252 + i] = dsaf_read_dev(ddev,
1524 + DSAF_SBM_BP_CNT_0_0_REG + j * 0x80);
1525 +- p[251 + i] = dsaf_read_dev(ddev,
1526 ++ p[255 + i] = dsaf_read_dev(ddev,
1527 + DSAF_SBM_BP_CNT_1_0_REG + j * 0x80);
1528 +- p[254 + i] = dsaf_read_dev(ddev,
1529 ++ p[258 + i] = dsaf_read_dev(ddev,
1530 + DSAF_SBM_BP_CNT_2_0_REG + j * 0x80);
1531 +- p[257 + i] = dsaf_read_dev(ddev,
1532 ++ p[261 + i] = dsaf_read_dev(ddev,
1533 + DSAF_SBM_BP_CNT_3_0_REG + j * 0x80);
1534 +- p[260 + i] = dsaf_read_dev(ddev,
1535 ++ p[264 + i] = dsaf_read_dev(ddev,
1536 + DSAF_SBM_INER_ST_0_REG + j * 0x80);
1537 +- p[263 + i] = dsaf_read_dev(ddev,
1538 ++ p[267 + i] = dsaf_read_dev(ddev,
1539 + DSAF_SBM_MIB_REQ_FAILED_TC_0_REG + j * 0x80);
1540 +- p[266 + i] = dsaf_read_dev(ddev,
1541 ++ p[270 + i] = dsaf_read_dev(ddev,
1542 + DSAF_SBM_LNK_INPORT_CNT_0_REG + j * 0x80);
1543 +- p[269 + i] = dsaf_read_dev(ddev,
1544 ++ p[273 + i] = dsaf_read_dev(ddev,
1545 + DSAF_SBM_LNK_DROP_CNT_0_REG + j * 0x80);
1546 +- p[272 + i] = dsaf_read_dev(ddev,
1547 ++ p[276 + i] = dsaf_read_dev(ddev,
1548 + DSAF_SBM_INF_OUTPORT_CNT_0_REG + j * 0x80);
1549 +- p[275 + i] = dsaf_read_dev(ddev,
1550 ++ p[279 + i] = dsaf_read_dev(ddev,
1551 + DSAF_SBM_LNK_INPORT_TC0_CNT_0_REG + j * 0x80);
1552 +- p[278 + i] = dsaf_read_dev(ddev,
1553 ++ p[282 + i] = dsaf_read_dev(ddev,
1554 + DSAF_SBM_LNK_INPORT_TC1_CNT_0_REG + j * 0x80);
1555 +- p[281 + i] = dsaf_read_dev(ddev,
1556 ++ p[285 + i] = dsaf_read_dev(ddev,
1557 + DSAF_SBM_LNK_INPORT_TC2_CNT_0_REG + j * 0x80);
1558 +- p[284 + i] = dsaf_read_dev(ddev,
1559 ++ p[288 + i] = dsaf_read_dev(ddev,
1560 + DSAF_SBM_LNK_INPORT_TC3_CNT_0_REG + j * 0x80);
1561 +- p[287 + i] = dsaf_read_dev(ddev,
1562 ++ p[291 + i] = dsaf_read_dev(ddev,
1563 + DSAF_SBM_LNK_INPORT_TC4_CNT_0_REG + j * 0x80);
1564 +- p[290 + i] = dsaf_read_dev(ddev,
1565 ++ p[294 + i] = dsaf_read_dev(ddev,
1566 + DSAF_SBM_LNK_INPORT_TC5_CNT_0_REG + j * 0x80);
1567 +- p[293 + i] = dsaf_read_dev(ddev,
1568 ++ p[297 + i] = dsaf_read_dev(ddev,
1569 + DSAF_SBM_LNK_INPORT_TC6_CNT_0_REG + j * 0x80);
1570 +- p[296 + i] = dsaf_read_dev(ddev,
1571 ++ p[300 + i] = dsaf_read_dev(ddev,
1572 + DSAF_SBM_LNK_INPORT_TC7_CNT_0_REG + j * 0x80);
1573 +- p[299 + i] = dsaf_read_dev(ddev,
1574 ++ p[303 + i] = dsaf_read_dev(ddev,
1575 + DSAF_SBM_LNK_REQ_CNT_0_REG + j * 0x80);
1576 +- p[302 + i] = dsaf_read_dev(ddev,
1577 ++ p[306 + i] = dsaf_read_dev(ddev,
1578 + DSAF_SBM_LNK_RELS_CNT_0_REG + j * 0x80);
1579 +- p[305 + i] = dsaf_read_dev(ddev,
1580 ++ p[309 + i] = dsaf_read_dev(ddev,
1581 + DSAF_SBM_BP_CFG_3_REG_0_REG + j * 0x80);
1582 +- p[308 + i] = dsaf_read_dev(ddev,
1583 ++ p[312 + i] = dsaf_read_dev(ddev,
1584 + DSAF_SBM_BP_CFG_4_REG_0_REG + j * 0x80);
1585 + }
1586 +
1587 + /* dsaf onode registers */
1588 + for (i = 0; i < DSAF_XOD_NUM; i++) {
1589 +- p[311 + i] = dsaf_read_dev(ddev,
1590 ++ p[315 + i] = dsaf_read_dev(ddev,
1591 + DSAF_XOD_ETS_TSA_TC0_TC3_CFG_0_REG + i * 0x90);
1592 +- p[319 + i] = dsaf_read_dev(ddev,
1593 ++ p[323 + i] = dsaf_read_dev(ddev,
1594 + DSAF_XOD_ETS_TSA_TC4_TC7_CFG_0_REG + i * 0x90);
1595 +- p[327 + i] = dsaf_read_dev(ddev,
1596 ++ p[331 + i] = dsaf_read_dev(ddev,
1597 + DSAF_XOD_ETS_BW_TC0_TC3_CFG_0_REG + i * 0x90);
1598 +- p[335 + i] = dsaf_read_dev(ddev,
1599 ++ p[339 + i] = dsaf_read_dev(ddev,
1600 + DSAF_XOD_ETS_BW_TC4_TC7_CFG_0_REG + i * 0x90);
1601 +- p[343 + i] = dsaf_read_dev(ddev,
1602 ++ p[347 + i] = dsaf_read_dev(ddev,
1603 + DSAF_XOD_ETS_BW_OFFSET_CFG_0_REG + i * 0x90);
1604 +- p[351 + i] = dsaf_read_dev(ddev,
1605 ++ p[355 + i] = dsaf_read_dev(ddev,
1606 + DSAF_XOD_ETS_TOKEN_CFG_0_REG + i * 0x90);
1607 + }
1608 +
1609 +- p[359] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
1610 +- p[360] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
1611 +- p[361] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
1612 ++ p[363] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
1613 ++ p[364] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
1614 ++ p[365] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
1615 +
1616 + for (i = 0; i < DSAF_XOD_BIG_NUM / DSAF_COMM_CHN; i++) {
1617 + j = i * DSAF_COMM_CHN + port;
1618 +- p[362 + i] = dsaf_read_dev(ddev,
1619 ++ p[366 + i] = dsaf_read_dev(ddev,
1620 + DSAF_XOD_GNT_L_0_REG + j * 0x90);
1621 +- p[365 + i] = dsaf_read_dev(ddev,
1622 ++ p[369 + i] = dsaf_read_dev(ddev,
1623 + DSAF_XOD_GNT_H_0_REG + j * 0x90);
1624 +- p[368 + i] = dsaf_read_dev(ddev,
1625 ++ p[372 + i] = dsaf_read_dev(ddev,
1626 + DSAF_XOD_CONNECT_STATE_0_REG + j * 0x90);
1627 +- p[371 + i] = dsaf_read_dev(ddev,
1628 ++ p[375 + i] = dsaf_read_dev(ddev,
1629 + DSAF_XOD_RCVPKT_CNT_0_REG + j * 0x90);
1630 +- p[374 + i] = dsaf_read_dev(ddev,
1631 ++ p[378 + i] = dsaf_read_dev(ddev,
1632 + DSAF_XOD_RCVTC0_CNT_0_REG + j * 0x90);
1633 +- p[377 + i] = dsaf_read_dev(ddev,
1634 ++ p[381 + i] = dsaf_read_dev(ddev,
1635 + DSAF_XOD_RCVTC1_CNT_0_REG + j * 0x90);
1636 +- p[380 + i] = dsaf_read_dev(ddev,
1637 ++ p[384 + i] = dsaf_read_dev(ddev,
1638 + DSAF_XOD_RCVTC2_CNT_0_REG + j * 0x90);
1639 +- p[383 + i] = dsaf_read_dev(ddev,
1640 ++ p[387 + i] = dsaf_read_dev(ddev,
1641 + DSAF_XOD_RCVTC3_CNT_0_REG + j * 0x90);
1642 +- p[386 + i] = dsaf_read_dev(ddev,
1643 ++ p[390 + i] = dsaf_read_dev(ddev,
1644 + DSAF_XOD_RCVVC0_CNT_0_REG + j * 0x90);
1645 +- p[389 + i] = dsaf_read_dev(ddev,
1646 ++ p[393 + i] = dsaf_read_dev(ddev,
1647 + DSAF_XOD_RCVVC1_CNT_0_REG + j * 0x90);
1648 + }
1649 +
1650 +- p[392] = dsaf_read_dev(ddev,
1651 ++ p[396] = dsaf_read_dev(ddev,
1652 + DSAF_XOD_XGE_RCVIN0_CNT_0_REG + port * 0x90);
1653 +- p[393] = dsaf_read_dev(ddev,
1654 ++ p[397] = dsaf_read_dev(ddev,
1655 + DSAF_XOD_XGE_RCVIN1_CNT_0_REG + port * 0x90);
1656 +- p[394] = dsaf_read_dev(ddev,
1657 ++ p[398] = dsaf_read_dev(ddev,
1658 + DSAF_XOD_XGE_RCVIN2_CNT_0_REG + port * 0x90);
1659 +- p[395] = dsaf_read_dev(ddev,
1660 ++ p[399] = dsaf_read_dev(ddev,
1661 + DSAF_XOD_XGE_RCVIN3_CNT_0_REG + port * 0x90);
1662 +- p[396] = dsaf_read_dev(ddev,
1663 ++ p[400] = dsaf_read_dev(ddev,
1664 + DSAF_XOD_XGE_RCVIN4_CNT_0_REG + port * 0x90);
1665 +- p[397] = dsaf_read_dev(ddev,
1666 ++ p[401] = dsaf_read_dev(ddev,
1667 + DSAF_XOD_XGE_RCVIN5_CNT_0_REG + port * 0x90);
1668 +- p[398] = dsaf_read_dev(ddev,
1669 ++ p[402] = dsaf_read_dev(ddev,
1670 + DSAF_XOD_XGE_RCVIN6_CNT_0_REG + port * 0x90);
1671 +- p[399] = dsaf_read_dev(ddev,
1672 ++ p[403] = dsaf_read_dev(ddev,
1673 + DSAF_XOD_XGE_RCVIN7_CNT_0_REG + port * 0x90);
1674 +- p[400] = dsaf_read_dev(ddev,
1675 ++ p[404] = dsaf_read_dev(ddev,
1676 + DSAF_XOD_PPE_RCVIN0_CNT_0_REG + port * 0x90);
1677 +- p[401] = dsaf_read_dev(ddev,
1678 ++ p[405] = dsaf_read_dev(ddev,
1679 + DSAF_XOD_PPE_RCVIN1_CNT_0_REG + port * 0x90);
1680 +- p[402] = dsaf_read_dev(ddev,
1681 ++ p[406] = dsaf_read_dev(ddev,
1682 + DSAF_XOD_ROCEE_RCVIN0_CNT_0_REG + port * 0x90);
1683 +- p[403] = dsaf_read_dev(ddev,
1684 ++ p[407] = dsaf_read_dev(ddev,
1685 + DSAF_XOD_ROCEE_RCVIN1_CNT_0_REG + port * 0x90);
1686 +- p[404] = dsaf_read_dev(ddev,
1687 ++ p[408] = dsaf_read_dev(ddev,
1688 + DSAF_XOD_FIFO_STATUS_0_REG + port * 0x90);
1689 +
1690 + /* dsaf voq registers */
1691 + for (i = 0; i < DSAF_VOQ_NUM / DSAF_COMM_CHN; i++) {
1692 + j = (i * DSAF_COMM_CHN + port) * 0x90;
1693 +- p[405 + i] = dsaf_read_dev(ddev,
1694 ++ p[409 + i] = dsaf_read_dev(ddev,
1695 + DSAF_VOQ_ECC_INVERT_EN_0_REG + j);
1696 +- p[408 + i] = dsaf_read_dev(ddev,
1697 ++ p[412 + i] = dsaf_read_dev(ddev,
1698 + DSAF_VOQ_SRAM_PKT_NUM_0_REG + j);
1699 +- p[411 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
1700 +- p[414 + i] = dsaf_read_dev(ddev,
1701 ++ p[415 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
1702 ++ p[418 + i] = dsaf_read_dev(ddev,
1703 + DSAF_VOQ_OUT_PKT_NUM_0_REG + j);
1704 +- p[417 + i] = dsaf_read_dev(ddev,
1705 ++ p[421 + i] = dsaf_read_dev(ddev,
1706 + DSAF_VOQ_ECC_ERR_ADDR_0_REG + j);
1707 +- p[420 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
1708 +- p[423 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
1709 +- p[426 + i] = dsaf_read_dev(ddev,
1710 ++ p[424 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
1711 ++ p[427 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
1712 ++ p[430 + i] = dsaf_read_dev(ddev,
1713 + DSAF_VOQ_XGE_XOD_REQ_0_0_REG + j);
1714 +- p[429 + i] = dsaf_read_dev(ddev,
1715 ++ p[433 + i] = dsaf_read_dev(ddev,
1716 + DSAF_VOQ_XGE_XOD_REQ_1_0_REG + j);
1717 +- p[432 + i] = dsaf_read_dev(ddev,
1718 ++ p[436 + i] = dsaf_read_dev(ddev,
1719 + DSAF_VOQ_PPE_XOD_REQ_0_REG + j);
1720 +- p[435 + i] = dsaf_read_dev(ddev,
1721 ++ p[439 + i] = dsaf_read_dev(ddev,
1722 + DSAF_VOQ_ROCEE_XOD_REQ_0_REG + j);
1723 +- p[438 + i] = dsaf_read_dev(ddev,
1724 ++ p[442 + i] = dsaf_read_dev(ddev,
1725 + DSAF_VOQ_BP_ALL_THRD_0_REG + j);
1726 + }
1727 +
1728 + /* dsaf tbl registers */
1729 +- p[441] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
1730 +- p[442] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
1731 +- p[443] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
1732 +- p[444] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
1733 +- p[445] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
1734 +- p[446] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
1735 +- p[447] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
1736 +- p[448] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
1737 +- p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
1738 +- p[450] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
1739 +- p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
1740 +- p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
1741 +- p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
1742 +- p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
1743 +- p[455] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
1744 +- p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
1745 +- p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
1746 +- p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
1747 +- p[459] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
1748 +- p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
1749 +- p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
1750 +- p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
1751 +- p[463] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
1752 ++ p[445] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
1753 ++ p[446] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
1754 ++ p[447] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
1755 ++ p[448] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
1756 ++ p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
1757 ++ p[450] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
1758 ++ p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
1759 ++ p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
1760 ++ p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
1761 ++ p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
1762 ++ p[455] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
1763 ++ p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
1764 ++ p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
1765 ++ p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
1766 ++ p[459] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
1767 ++ p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
1768 ++ p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
1769 ++ p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
1770 ++ p[463] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
1771 ++ p[464] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
1772 ++ p[465] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
1773 ++ p[466] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
1774 ++ p[467] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
1775 +
1776 + for (i = 0; i < DSAF_SW_PORT_NUM; i++) {
1777 + j = i * 0x8;
1778 +- p[464 + 2 * i] = dsaf_read_dev(ddev,
1779 ++ p[468 + 2 * i] = dsaf_read_dev(ddev,
1780 + DSAF_TBL_DA0_MIS_INFO1_0_REG + j);
1781 +- p[465 + 2 * i] = dsaf_read_dev(ddev,
1782 ++ p[469 + 2 * i] = dsaf_read_dev(ddev,
1783 + DSAF_TBL_DA0_MIS_INFO0_0_REG + j);
1784 + }
1785 +
1786 +- p[480] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
1787 +- p[481] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
1788 +- p[482] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
1789 +- p[483] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
1790 +- p[484] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
1791 +- p[485] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
1792 +- p[486] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
1793 +- p[487] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
1794 +- p[488] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
1795 +- p[489] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
1796 +- p[490] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
1797 +- p[491] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
1798 ++ p[484] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
1799 ++ p[485] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
1800 ++ p[486] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
1801 ++ p[487] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
1802 ++ p[488] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
1803 ++ p[489] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
1804 ++ p[490] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
1805 ++ p[491] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
1806 ++ p[492] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
1807 ++ p[493] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
1808 ++ p[494] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
1809 ++ p[495] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
1810 +
1811 + /* dsaf other registers */
1812 +- p[492] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
1813 +- p[493] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
1814 +- p[494] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
1815 +- p[495] = dsaf_read_dev(ddev,
1816 ++ p[496] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
1817 ++ p[497] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
1818 ++ p[498] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
1819 ++ p[499] = dsaf_read_dev(ddev,
1820 + DSAF_XGE_APP_RX_LINK_UP_0_REG + port * 0x4);
1821 +- p[496] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
1822 +- p[497] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
1823 ++ p[500] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
1824 ++ p[501] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
1825 +
1826 + if (!is_ver1)
1827 +- p[498] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
1828 ++ p[502] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
1829 +
1830 + /* mark end of dsaf regs */
1831 +- for (i = 499; i < 504; i++)
1832 ++ for (i = 503; i < 504; i++)
1833 + p[i] = 0xdddddddd;
1834 + }
1835 +
1836 +@@ -2666,58 +2743,156 @@ int hns_dsaf_get_regs_count(void)
1837 + return DSAF_DUMP_REGS_NUM;
1838 + }
1839 +
1840 +-/* Reserve the last TCAM entry for promisc support */
1841 +-#define dsaf_promisc_tcam_entry(port) \
1842 +- (DSAF_TCAM_SUM - DSAFV2_MAC_FUZZY_TCAM_NUM + (port))
1843 +-void hns_dsaf_set_promisc_tcam(struct dsaf_device *dsaf_dev,
1844 +- u32 port, bool enable)
1845 ++static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)
1846 + {
1847 ++ struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80};
1848 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_mc = {0x01000000, port};
1849 ++ struct dsaf_tbl_tcam_data tbl_tcam_mask_uc = {0x01000000, 0xf};
1850 ++ struct dsaf_tbl_tcam_mcast_cfg tbl_tcam_mcast = {0, 0, {0} };
1851 + struct dsaf_drv_priv *priv = hns_dsaf_dev_priv(dsaf_dev);
1852 +- struct dsaf_drv_soft_mac_tbl *soft_mac_entry = priv->soft_mac_tbl;
1853 +- u16 entry_index;
1854 +- struct dsaf_drv_tbl_tcam_key tbl_tcam_data, tbl_tcam_mask;
1855 +- struct dsaf_tbl_tcam_mcast_cfg mac_data = {0};
1856 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_uc = {0, port};
1857 ++ struct dsaf_drv_mac_single_dest_entry mask_entry;
1858 ++ struct dsaf_drv_tbl_tcam_key temp_key, mask_key;
1859 ++ struct dsaf_drv_soft_mac_tbl *soft_mac_entry;
1860 ++ u16 entry_index = DSAF_INVALID_ENTRY_IDX;
1861 ++ struct dsaf_drv_tbl_tcam_key mac_key;
1862 ++ struct hns_mac_cb *mac_cb;
1863 ++ u8 addr[ETH_ALEN] = {0};
1864 ++ u8 port_num;
1865 ++ u16 mskid;
1866 ++
1867 ++ /* promisc use vague table match with vlanid = 0 & macaddr = 0 */
1868 ++ hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
1869 ++ entry_index = hns_dsaf_find_soft_mac_entry(dsaf_dev, &mac_key);
1870 ++ if (entry_index != DSAF_INVALID_ENTRY_IDX)
1871 ++ return;
1872 ++
1873 ++ /* put promisc tcam entry in the end. */
1874 ++ /* 1. set promisc unicast vague tcam entry. */
1875 ++ entry_index = hns_dsaf_find_empty_mac_entry_reverse(dsaf_dev);
1876 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX) {
1877 ++ dev_err(dsaf_dev->dev,
1878 ++ "enable uc promisc failed (port:%#x)\n",
1879 ++ port);
1880 ++ return;
1881 ++ }
1882 ++
1883 ++ mac_cb = dsaf_dev->mac_cb[port];
1884 ++ (void)hns_mac_get_inner_port_num(mac_cb, 0, &port_num);
1885 ++ tbl_tcam_ucast.tbl_ucast_out_port = port_num;
1886 +
1887 +- if ((AE_IS_VER1(dsaf_dev->dsaf_ver)) || HNS_DSAF_IS_DEBUG(dsaf_dev))
1888 ++ /* config uc vague table */
1889 ++ hns_dsaf_tcam_uc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_uc,
1890 ++ &tbl_tcam_mask_uc, &tbl_tcam_ucast);
1891 ++
1892 ++ /* update software entry */
1893 ++ soft_mac_entry = priv->soft_mac_tbl;
1894 ++ soft_mac_entry += entry_index;
1895 ++ soft_mac_entry->index = entry_index;
1896 ++ soft_mac_entry->tcam_key.high.val = mac_key.high.val;
1897 ++ soft_mac_entry->tcam_key.low.val = mac_key.low.val;
1898 ++ /* step back to the START for mc. */
1899 ++ soft_mac_entry = priv->soft_mac_tbl;
1900 ++
1901 ++ /* 2. set promisc multicast vague tcam entry. */
1902 ++ entry_index = hns_dsaf_find_empty_mac_entry_reverse(dsaf_dev);
1903 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX) {
1904 ++ dev_err(dsaf_dev->dev,
1905 ++ "enable mc promisc failed (port:%#x)\n",
1906 ++ port);
1907 + return;
1908 ++ }
1909 ++
1910 ++ memset(&mask_entry, 0x0, sizeof(mask_entry));
1911 ++ memset(&mask_key, 0x0, sizeof(mask_key));
1912 ++ memset(&temp_key, 0x0, sizeof(temp_key));
1913 ++ mask_entry.addr[0] = 0x01;
1914 ++ hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id,
1915 ++ port, mask_entry.addr);
1916 ++ tbl_tcam_mcast.tbl_mcast_item_vld = 1;
1917 ++ tbl_tcam_mcast.tbl_mcast_old_en = 0;
1918 +
1919 +- /* find the tcam entry index for promisc */
1920 +- entry_index = dsaf_promisc_tcam_entry(port);
1921 +-
1922 +- memset(&tbl_tcam_data, 0, sizeof(tbl_tcam_data));
1923 +- memset(&tbl_tcam_mask, 0, sizeof(tbl_tcam_mask));
1924 +-
1925 +- /* config key mask */
1926 +- if (enable) {
1927 +- dsaf_set_field(tbl_tcam_data.low.bits.port_vlan,
1928 +- DSAF_TBL_TCAM_KEY_PORT_M,
1929 +- DSAF_TBL_TCAM_KEY_PORT_S, port);
1930 +- dsaf_set_field(tbl_tcam_mask.low.bits.port_vlan,
1931 +- DSAF_TBL_TCAM_KEY_PORT_M,
1932 +- DSAF_TBL_TCAM_KEY_PORT_S, 0xf);
1933 +-
1934 +- /* SUB_QID */
1935 +- dsaf_set_bit(mac_data.tbl_mcast_port_msk[0],
1936 +- DSAF_SERVICE_NW_NUM, true);
1937 +- mac_data.tbl_mcast_item_vld = true; /* item_vld bit */
1938 ++ if (port < DSAF_SERVICE_NW_NUM) {
1939 ++ mskid = port;
1940 ++ } else if (port >= DSAF_BASE_INNER_PORT_NUM) {
1941 ++ mskid = port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM;
1942 + } else {
1943 +- mac_data.tbl_mcast_item_vld = false; /* item_vld bit */
1944 ++ dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n",
1945 ++ dsaf_dev->ae_dev.name, port,
1946 ++ mask_key.high.val, mask_key.low.val);
1947 ++ return;
1948 + }
1949 +
1950 +- dev_dbg(dsaf_dev->dev,
1951 +- "set_promisc_entry, %s Mac key(%#x:%#x) entry_index%d\n",
1952 +- dsaf_dev->ae_dev.name, tbl_tcam_data.high.val,
1953 +- tbl_tcam_data.low.val, entry_index);
1954 ++ dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],
1955 ++ mskid % 32, 1);
1956 ++ memcpy(&temp_key, &mask_key, sizeof(mask_key));
1957 ++ hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,
1958 ++ (struct dsaf_tbl_tcam_data *)(&mask_key),
1959 ++ &tbl_tcam_mcast);
1960 ++
1961 ++ /* update software entry */
1962 ++ soft_mac_entry += entry_index;
1963 ++ soft_mac_entry->index = entry_index;
1964 ++ soft_mac_entry->tcam_key.high.val = temp_key.high.val;
1965 ++ soft_mac_entry->tcam_key.low.val = temp_key.low.val;
1966 ++}
1967 +
1968 +- /* config promisc entry with mask */
1969 +- hns_dsaf_tcam_mc_cfg(dsaf_dev, entry_index,
1970 +- (struct dsaf_tbl_tcam_data *)&tbl_tcam_data,
1971 +- (struct dsaf_tbl_tcam_data *)&tbl_tcam_mask,
1972 +- &mac_data);
1973 ++static void set_promisc_tcam_disable(struct dsaf_device *dsaf_dev, u32 port)
1974 ++{
1975 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_mc = {0x01000000, port};
1976 ++ struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 0, 0, 0, 0};
1977 ++ struct dsaf_tbl_tcam_mcast_cfg tbl_tcam_mcast = {0, 0, {0} };
1978 ++ struct dsaf_drv_priv *priv = hns_dsaf_dev_priv(dsaf_dev);
1979 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_uc = {0, 0};
1980 ++ struct dsaf_tbl_tcam_data tbl_tcam_mask = {0, 0};
1981 ++ struct dsaf_drv_soft_mac_tbl *soft_mac_entry;
1982 ++ u16 entry_index = DSAF_INVALID_ENTRY_IDX;
1983 ++ struct dsaf_drv_tbl_tcam_key mac_key;
1984 ++ u8 addr[ETH_ALEN] = {0};
1985 +
1986 +- /* config software entry */
1987 ++ /* 1. delete uc vague tcam entry. */
1988 ++ /* promisc use vague table match with vlanid = 0 & macaddr = 0 */
1989 ++ hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
1990 ++ entry_index = hns_dsaf_find_soft_mac_entry(dsaf_dev, &mac_key);
1991 ++
1992 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX)
1993 ++ return;
1994 ++
1995 ++ /* config uc vague table */
1996 ++ hns_dsaf_tcam_uc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_uc,
1997 ++ &tbl_tcam_mask, &tbl_tcam_ucast);
1998 ++ /* update soft management table. */
1999 ++ soft_mac_entry = priv->soft_mac_tbl;
2000 ++ soft_mac_entry += entry_index;
2001 ++ soft_mac_entry->index = DSAF_INVALID_ENTRY_IDX;
2002 ++ /* step back to the START for mc. */
2003 ++ soft_mac_entry = priv->soft_mac_tbl;
2004 ++
2005 ++ /* 2. delete mc vague tcam entry. */
2006 ++ addr[0] = 0x01;
2007 ++ memset(&mac_key, 0x0, sizeof(mac_key));
2008 ++ hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
2009 ++ entry_index = hns_dsaf_find_soft_mac_entry(dsaf_dev, &mac_key);
2010 ++
2011 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX)
2012 ++ return;
2013 ++
2014 ++ /* config mc vague table */
2015 ++ hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,
2016 ++ &tbl_tcam_mask, &tbl_tcam_mcast);
2017 ++ /* update soft management table. */
2018 + soft_mac_entry += entry_index;
2019 +- soft_mac_entry->index = enable ? entry_index : DSAF_INVALID_ENTRY_IDX;
2020 ++ soft_mac_entry->index = DSAF_INVALID_ENTRY_IDX;
2021 ++}
2022 ++
2023 ++/* Reserve the last TCAM entry for promisc support */
2024 ++void hns_dsaf_set_promisc_tcam(struct dsaf_device *dsaf_dev,
2025 ++ u32 port, bool enable)
2026 ++{
2027 ++ if (enable)
2028 ++ set_promisc_tcam_enable(dsaf_dev, port);
2029 ++ else
2030 ++ set_promisc_tcam_disable(dsaf_dev, port);
2031 + }
2032 +
2033 + int hns_dsaf_wait_pkt_clean(struct dsaf_device *dsaf_dev, int port)
2034 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
2035 +index 6d20e4eb7402..ae97b203f73b 100644
2036 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
2037 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
2038 +@@ -176,7 +176,7 @@
2039 + #define DSAF_INODE_IN_DATA_STP_DISC_0_REG 0x1A50
2040 + #define DSAF_INODE_GE_FC_EN_0_REG 0x1B00
2041 + #define DSAF_INODE_VC0_IN_PKT_NUM_0_REG 0x1B50
2042 +-#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG 0x1C00
2043 ++#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG 0x103C
2044 + #define DSAF_INODE_IN_PRIO_PAUSE_BASE_REG 0x1C00
2045 + #define DSAF_INODE_IN_PRIO_PAUSE_BASE_OFFSET 0x100
2046 + #define DSAF_INODE_IN_PRIO_PAUSE_OFFSET 0x50
2047 +@@ -404,11 +404,11 @@
2048 + #define RCB_ECC_ERR_ADDR4_REG 0x460
2049 + #define RCB_ECC_ERR_ADDR5_REG 0x464
2050 +
2051 +-#define RCB_COM_SF_CFG_INTMASK_RING 0x480
2052 +-#define RCB_COM_SF_CFG_RING_STS 0x484
2053 +-#define RCB_COM_SF_CFG_RING 0x488
2054 +-#define RCB_COM_SF_CFG_INTMASK_BD 0x48C
2055 +-#define RCB_COM_SF_CFG_BD_RINT_STS 0x470
2056 ++#define RCB_COM_SF_CFG_INTMASK_RING 0x470
2057 ++#define RCB_COM_SF_CFG_RING_STS 0x474
2058 ++#define RCB_COM_SF_CFG_RING 0x478
2059 ++#define RCB_COM_SF_CFG_INTMASK_BD 0x47C
2060 ++#define RCB_COM_SF_CFG_BD_RINT_STS 0x480
2061 + #define RCB_COM_RCB_RD_BD_BUSY 0x490
2062 + #define RCB_COM_RCB_FBD_CRT_EN 0x494
2063 + #define RCB_COM_AXI_WR_ERR_INTMASK 0x498
2064 +@@ -534,6 +534,7 @@
2065 + #define GMAC_LD_LINK_COUNTER_REG 0x01D0UL
2066 + #define GMAC_LOOP_REG 0x01DCUL
2067 + #define GMAC_RECV_CONTROL_REG 0x01E0UL
2068 ++#define GMAC_PCS_RX_EN_REG 0x01E4UL
2069 + #define GMAC_VLAN_CODE_REG 0x01E8UL
2070 + #define GMAC_RX_OVERRUN_CNT_REG 0x01ECUL
2071 + #define GMAC_RX_LENGTHFIELD_ERR_CNT_REG 0x01F4UL
2072 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2073 +index 4faadc3ffe8c..86662a14208e 100644
2074 +--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2075 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2076 +@@ -1286,6 +1286,9 @@ int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
2077 + if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
2078 + phy_dev->autoneg = false;
2079 +
2080 ++ if (h->phy_if == PHY_INTERFACE_MODE_SGMII)
2081 ++ phy_stop(phy_dev);
2082 ++
2083 + return 0;
2084 + }
2085 +
2086 +@@ -1381,6 +1384,22 @@ static int hns_nic_init_affinity_mask(int q_num, int ring_idx,
2087 + return cpu;
2088 + }
2089 +
2090 ++static void hns_nic_free_irq(int q_num, struct hns_nic_priv *priv)
2091 ++{
2092 ++ int i;
2093 ++
2094 ++ for (i = 0; i < q_num * 2; i++) {
2095 ++ if (priv->ring_data[i].ring->irq_init_flag == RCB_IRQ_INITED) {
2096 ++ irq_set_affinity_hint(priv->ring_data[i].ring->irq,
2097 ++ NULL);
2098 ++ free_irq(priv->ring_data[i].ring->irq,
2099 ++ &priv->ring_data[i]);
2100 ++ priv->ring_data[i].ring->irq_init_flag =
2101 ++ RCB_IRQ_NOT_INITED;
2102 ++ }
2103 ++ }
2104 ++}
2105 ++
2106 + static int hns_nic_init_irq(struct hns_nic_priv *priv)
2107 + {
2108 + struct hnae_handle *h = priv->ae_handle;
2109 +@@ -1406,7 +1425,7 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
2110 + if (ret) {
2111 + netdev_err(priv->netdev, "request irq(%d) fail\n",
2112 + rd->ring->irq);
2113 +- return ret;
2114 ++ goto out_free_irq;
2115 + }
2116 + disable_irq(rd->ring->irq);
2117 +
2118 +@@ -1421,6 +1440,10 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
2119 + }
2120 +
2121 + return 0;
2122 ++
2123 ++out_free_irq:
2124 ++ hns_nic_free_irq(h->q_num, priv);
2125 ++ return ret;
2126 + }
2127 +
2128 + static int hns_nic_net_up(struct net_device *ndev)
2129 +@@ -1430,6 +1453,9 @@ static int hns_nic_net_up(struct net_device *ndev)
2130 + int i, j;
2131 + int ret;
2132 +
2133 ++ if (!test_bit(NIC_STATE_DOWN, &priv->state))
2134 ++ return 0;
2135 ++
2136 + ret = hns_nic_init_irq(priv);
2137 + if (ret != 0) {
2138 + netdev_err(ndev, "hns init irq failed! ret=%d\n", ret);
2139 +@@ -1465,6 +1491,7 @@ out_has_some_queues:
2140 + for (j = i - 1; j >= 0; j--)
2141 + hns_nic_ring_close(ndev, j);
2142 +
2143 ++ hns_nic_free_irq(h->q_num, priv);
2144 + set_bit(NIC_STATE_DOWN, &priv->state);
2145 +
2146 + return ret;
2147 +@@ -1582,11 +1609,19 @@ static int hns_nic_net_stop(struct net_device *ndev)
2148 + }
2149 +
2150 + static void hns_tx_timeout_reset(struct hns_nic_priv *priv);
2151 ++#define HNS_TX_TIMEO_LIMIT (40 * HZ)
2152 + static void hns_nic_net_timeout(struct net_device *ndev)
2153 + {
2154 + struct hns_nic_priv *priv = netdev_priv(ndev);
2155 +
2156 +- hns_tx_timeout_reset(priv);
2157 ++ if (ndev->watchdog_timeo < HNS_TX_TIMEO_LIMIT) {
2158 ++ ndev->watchdog_timeo *= 2;
2159 ++ netdev_info(ndev, "watchdog_timo changed to %d.\n",
2160 ++ ndev->watchdog_timeo);
2161 ++ } else {
2162 ++ ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
2163 ++ hns_tx_timeout_reset(priv);
2164 ++ }
2165 + }
2166 +
2167 + static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
2168 +@@ -2166,11 +2201,11 @@ static void hns_nic_service_task(struct work_struct *work)
2169 + = container_of(work, struct hns_nic_priv, service_task);
2170 + struct hnae_handle *h = priv->ae_handle;
2171 +
2172 ++ hns_nic_reset_subtask(priv);
2173 + hns_nic_update_link_status(priv->netdev);
2174 + h->dev->ops->update_led_status(h);
2175 + hns_nic_update_stats(priv->netdev);
2176 +
2177 +- hns_nic_reset_subtask(priv);
2178 + hns_nic_service_event_complete(priv);
2179 + }
2180 +
2181 +@@ -2451,7 +2486,7 @@ static int hns_nic_dev_probe(struct platform_device *pdev)
2182 + ndev->min_mtu = MAC_MIN_MTU;
2183 + switch (priv->enet_ver) {
2184 + case AE_VERSION_2:
2185 +- ndev->features |= NETIF_F_TSO | NETIF_F_TSO6;
2186 ++ ndev->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_NTUPLE;
2187 + ndev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
2188 + NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
2189 + NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6;
2190 +diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
2191 +index 14c53ed5cca6..c914b338691b 100644
2192 +--- a/drivers/net/ethernet/ibm/ibmvnic.c
2193 ++++ b/drivers/net/ethernet/ibm/ibmvnic.c
2194 +@@ -1596,7 +1596,7 @@ static void ibmvnic_reset(struct ibmvnic_adapter *adapter,
2195 + }
2196 + }
2197 +
2198 +- rwi = kzalloc(sizeof(*rwi), GFP_KERNEL);
2199 ++ rwi = kzalloc(sizeof(*rwi), GFP_ATOMIC);
2200 + if (!rwi) {
2201 + mutex_unlock(&adapter->rwi_lock);
2202 + ibmvnic_close(netdev);
2203 +diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
2204 +index 176c99b8251d..904b42becd45 100644
2205 +--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
2206 ++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
2207 +@@ -1554,17 +1554,17 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
2208 + netdev_info(netdev, "set new mac address %pM\n", addr->sa_data);
2209 +
2210 + /* Copy the address first, so that we avoid a possible race with
2211 +- * .set_rx_mode(). If we copy after changing the address in the filter
2212 +- * list, we might open ourselves to a narrow race window where
2213 +- * .set_rx_mode could delete our dev_addr filter and prevent traffic
2214 +- * from passing.
2215 ++ * .set_rx_mode().
2216 ++ * - Remove old address from MAC filter
2217 ++ * - Copy new address
2218 ++ * - Add new address to MAC filter
2219 + */
2220 +- ether_addr_copy(netdev->dev_addr, addr->sa_data);
2221 +-
2222 + spin_lock_bh(&vsi->mac_filter_hash_lock);
2223 + i40e_del_mac_filter(vsi, netdev->dev_addr);
2224 +- i40e_add_mac_filter(vsi, addr->sa_data);
2225 ++ ether_addr_copy(netdev->dev_addr, addr->sa_data);
2226 ++ i40e_add_mac_filter(vsi, netdev->dev_addr);
2227 + spin_unlock_bh(&vsi->mac_filter_hash_lock);
2228 ++
2229 + if (vsi->type == I40E_VSI_MAIN) {
2230 + i40e_status ret;
2231 +
2232 +diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
2233 +index 6223930a8155..6f57b0b7d57a 100644
2234 +--- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
2235 ++++ b/drivers/net/ethernet/neterion/vxge/vxge-config.c
2236 +@@ -808,7 +808,7 @@ __vxge_hw_vpath_fw_ver_get(struct __vxge_hw_virtualpath *vpath,
2237 + struct vxge_hw_device_date *fw_date = &hw_info->fw_date;
2238 + struct vxge_hw_device_version *flash_version = &hw_info->flash_version;
2239 + struct vxge_hw_device_date *flash_date = &hw_info->flash_date;
2240 +- u64 data0, data1 = 0, steer_ctrl = 0;
2241 ++ u64 data0 = 0, data1 = 0, steer_ctrl = 0;
2242 + enum vxge_hw_status status;
2243 +
2244 + status = vxge_hw_vpath_fw_api(vpath,
2245 +diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c
2246 +index 4a67c55aa9f1..11a9add81849 100644
2247 +--- a/drivers/net/ethernet/nuvoton/w90p910_ether.c
2248 ++++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c
2249 +@@ -912,7 +912,7 @@ static const struct net_device_ops w90p910_ether_netdev_ops = {
2250 + .ndo_validate_addr = eth_validate_addr,
2251 + };
2252 +
2253 +-static void __init get_mac_address(struct net_device *dev)
2254 ++static void get_mac_address(struct net_device *dev)
2255 + {
2256 + struct w90p910_ether *ether = netdev_priv(dev);
2257 + struct platform_device *pdev;
2258 +diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
2259 +index 3dd973475125..4b444351ab7d 100644
2260 +--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
2261 ++++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
2262 +@@ -1125,7 +1125,8 @@ netxen_validate_firmware(struct netxen_adapter *adapter)
2263 + return -EINVAL;
2264 + }
2265 + val = nx_get_bios_version(adapter);
2266 +- netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios);
2267 ++ if (netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios))
2268 ++ return -EIO;
2269 + if ((__force u32)val != bios) {
2270 + dev_err(&pdev->dev, "%s: firmware bios is incompatible\n",
2271 + fw_name[fw_type]);
2272 +diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
2273 +index 5f52f14761a3..b73bcbeb5f27 100644
2274 +--- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
2275 ++++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
2276 +@@ -2351,6 +2351,7 @@ static int qed_ll2_start_xmit(struct qed_dev *cdev, struct sk_buff *skb)
2277 + if (unlikely(dma_mapping_error(&cdev->pdev->dev, mapping))) {
2278 + DP_NOTICE(cdev,
2279 + "Unable to map frag - dropping packet\n");
2280 ++ rc = -ENOMEM;
2281 + goto err;
2282 + }
2283 +
2284 +diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
2285 +index 22e466ea919a..dcd10dba08c7 100644
2286 +--- a/drivers/net/ieee802154/ca8210.c
2287 ++++ b/drivers/net/ieee802154/ca8210.c
2288 +@@ -722,7 +722,7 @@ static void ca8210_mlme_reset_worker(struct work_struct *work)
2289 + static void ca8210_rx_done(struct cas_control *cas_ctl)
2290 + {
2291 + u8 *buf;
2292 +- u8 len;
2293 ++ unsigned int len;
2294 + struct work_priv_container *mlme_reset_wpc;
2295 + struct ca8210_priv *priv = cas_ctl->priv;
2296 +
2297 +@@ -731,7 +731,7 @@ static void ca8210_rx_done(struct cas_control *cas_ctl)
2298 + if (len > CA8210_SPI_BUF_SIZE) {
2299 + dev_crit(
2300 + &priv->spi->dev,
2301 +- "Received packet len (%d) erroneously long\n",
2302 ++ "Received packet len (%u) erroneously long\n",
2303 + len
2304 + );
2305 + goto finish;
2306 +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
2307 +index e069b310d6a6..b62c41114e34 100644
2308 +--- a/drivers/net/usb/lan78xx.c
2309 ++++ b/drivers/net/usb/lan78xx.c
2310 +@@ -2212,6 +2212,10 @@ static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
2311 + ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
2312 + ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
2313 +
2314 ++ /* Added to support MAC address changes */
2315 ++ ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
2316 ++ ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
2317 ++
2318 + return 0;
2319 + }
2320 +
2321 +diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
2322 +index 969474c9d297..891f8f975b43 100644
2323 +--- a/drivers/net/usb/qmi_wwan.c
2324 ++++ b/drivers/net/usb/qmi_wwan.c
2325 +@@ -151,17 +151,18 @@ static bool qmimux_has_slaves(struct usbnet *dev)
2326 +
2327 + static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
2328 + {
2329 +- unsigned int len, offset = sizeof(struct qmimux_hdr);
2330 ++ unsigned int len, offset = 0;
2331 + struct qmimux_hdr *hdr;
2332 + struct net_device *net;
2333 + struct sk_buff *skbn;
2334 ++ u8 qmimux_hdr_sz = sizeof(*hdr);
2335 +
2336 +- while (offset < skb->len) {
2337 +- hdr = (struct qmimux_hdr *)skb->data;
2338 ++ while (offset + qmimux_hdr_sz < skb->len) {
2339 ++ hdr = (struct qmimux_hdr *)(skb->data + offset);
2340 + len = be16_to_cpu(hdr->pkt_len);
2341 +
2342 + /* drop the packet, bogus length */
2343 +- if (offset + len > skb->len)
2344 ++ if (offset + len + qmimux_hdr_sz > skb->len)
2345 + return 0;
2346 +
2347 + /* control packet, we do not know what to do */
2348 +@@ -176,7 +177,7 @@ static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
2349 + return 0;
2350 + skbn->dev = net;
2351 +
2352 +- switch (skb->data[offset] & 0xf0) {
2353 ++ switch (skb->data[offset + qmimux_hdr_sz] & 0xf0) {
2354 + case 0x40:
2355 + skbn->protocol = htons(ETH_P_IP);
2356 + break;
2357 +@@ -188,12 +189,12 @@ static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
2358 + goto skip;
2359 + }
2360 +
2361 +- skb_put_data(skbn, skb->data + offset, len);
2362 ++ skb_put_data(skbn, skb->data + offset + qmimux_hdr_sz, len);
2363 + if (netif_rx(skbn) != NET_RX_SUCCESS)
2364 + return 0;
2365 +
2366 + skip:
2367 +- offset += len + sizeof(struct qmimux_hdr);
2368 ++ offset += len + qmimux_hdr_sz;
2369 + }
2370 + return 1;
2371 + }
2372 +diff --git a/drivers/net/wireless/broadcom/b43/phy_common.c b/drivers/net/wireless/broadcom/b43/phy_common.c
2373 +index 85f2ca989565..ef3ffa5ad466 100644
2374 +--- a/drivers/net/wireless/broadcom/b43/phy_common.c
2375 ++++ b/drivers/net/wireless/broadcom/b43/phy_common.c
2376 +@@ -616,7 +616,7 @@ struct b43_c32 b43_cordic(int theta)
2377 + u8 i;
2378 + s32 tmp;
2379 + s8 signx = 1;
2380 +- u32 angle = 0;
2381 ++ s32 angle = 0;
2382 + struct b43_c32 ret = { .i = 39797, .q = 0, };
2383 +
2384 + while (theta > (180 << 16))
2385 +diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
2386 +index 6c43322dbb97..2998941fdeca 100644
2387 +--- a/drivers/pinctrl/meson/pinctrl-meson.c
2388 ++++ b/drivers/pinctrl/meson/pinctrl-meson.c
2389 +@@ -272,7 +272,8 @@ static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
2390 + case PIN_CONFIG_BIAS_DISABLE:
2391 + dev_dbg(pc->dev, "pin %u: disable bias\n", pin);
2392 +
2393 +- meson_calc_reg_and_bit(bank, pin, REG_PULL, &reg, &bit);
2394 ++ meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg,
2395 ++ &bit);
2396 + ret = regmap_update_bits(pc->reg_pullen, reg,
2397 + BIT(bit), 0);
2398 + if (ret)
2399 +diff --git a/drivers/power/supply/olpc_battery.c b/drivers/power/supply/olpc_battery.c
2400 +index 3bc2eea7b3b7..62926804949d 100644
2401 +--- a/drivers/power/supply/olpc_battery.c
2402 ++++ b/drivers/power/supply/olpc_battery.c
2403 +@@ -427,14 +427,14 @@ static int olpc_bat_get_property(struct power_supply *psy,
2404 + if (ret)
2405 + return ret;
2406 +
2407 +- val->intval = (s16)be16_to_cpu(ec_word) * 100 / 256;
2408 ++ val->intval = (s16)be16_to_cpu(ec_word) * 10 / 256;
2409 + break;
2410 + case POWER_SUPPLY_PROP_TEMP_AMBIENT:
2411 + ret = olpc_ec_cmd(EC_AMB_TEMP, NULL, 0, (void *)&ec_word, 2);
2412 + if (ret)
2413 + return ret;
2414 +
2415 +- val->intval = (int)be16_to_cpu(ec_word) * 100 / 256;
2416 ++ val->intval = (int)be16_to_cpu(ec_word) * 10 / 256;
2417 + break;
2418 + case POWER_SUPPLY_PROP_CHARGE_COUNTER:
2419 + ret = olpc_ec_cmd(EC_BAT_ACR, NULL, 0, (void *)&ec_word, 2);
2420 +diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
2421 +index 84752152d41f..fab02bd73d85 100644
2422 +--- a/drivers/s390/scsi/zfcp_aux.c
2423 ++++ b/drivers/s390/scsi/zfcp_aux.c
2424 +@@ -274,16 +274,16 @@ static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter)
2425 + */
2426 + int zfcp_status_read_refill(struct zfcp_adapter *adapter)
2427 + {
2428 +- while (atomic_read(&adapter->stat_miss) > 0)
2429 ++ while (atomic_add_unless(&adapter->stat_miss, -1, 0))
2430 + if (zfcp_fsf_status_read(adapter->qdio)) {
2431 ++ atomic_inc(&adapter->stat_miss); /* undo add -1 */
2432 + if (atomic_read(&adapter->stat_miss) >=
2433 + adapter->stat_read_buf_num) {
2434 + zfcp_erp_adapter_reopen(adapter, 0, "axsref1");
2435 + return 1;
2436 + }
2437 + break;
2438 +- } else
2439 +- atomic_dec(&adapter->stat_miss);
2440 ++ }
2441 + return 0;
2442 + }
2443 +
2444 +diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
2445 +index 6844ba361616..89f09b122135 100644
2446 +--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
2447 ++++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
2448 +@@ -2372,7 +2372,7 @@ static int _bnx2fc_create(struct net_device *netdev,
2449 + if (!interface) {
2450 + printk(KERN_ERR PFX "bnx2fc_interface_create failed\n");
2451 + rc = -ENOMEM;
2452 +- goto ifput_err;
2453 ++ goto netdev_err;
2454 + }
2455 +
2456 + if (is_vlan_dev(netdev)) {
2457 +diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
2458 +index 24b6e56f6e97..6c2b098b7609 100644
2459 +--- a/drivers/scsi/lpfc/lpfc_sli.c
2460 ++++ b/drivers/scsi/lpfc/lpfc_sli.c
2461 +@@ -13941,7 +13941,8 @@ lpfc_sli4_queue_alloc(struct lpfc_hba *phba, uint32_t entry_size,
2462 + hw_page_size))/hw_page_size;
2463 +
2464 + /* If needed, Adjust page count to match the max the adapter supports */
2465 +- if (queue->page_count > phba->sli4_hba.pc_sli4_params.wqpcnt)
2466 ++ if (phba->sli4_hba.pc_sli4_params.wqpcnt &&
2467 ++ (queue->page_count > phba->sli4_hba.pc_sli4_params.wqpcnt))
2468 + queue->page_count = phba->sli4_hba.pc_sli4_params.wqpcnt;
2469 +
2470 + INIT_LIST_HEAD(&queue->list);
2471 +diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
2472 +index d4fa41be80f9..0c00bb27c9c5 100644
2473 +--- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
2474 ++++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
2475 +@@ -631,8 +631,11 @@ static void cxgbit_send_halfclose(struct cxgbit_sock *csk)
2476 +
2477 + static void cxgbit_arp_failure_discard(void *handle, struct sk_buff *skb)
2478 + {
2479 ++ struct cxgbit_sock *csk = handle;
2480 ++
2481 + pr_debug("%s cxgbit_device %p\n", __func__, handle);
2482 + kfree_skb(skb);
2483 ++ cxgbit_put_csk(csk);
2484 + }
2485 +
2486 + static void cxgbit_abort_arp_failure(void *handle, struct sk_buff *skb)
2487 +@@ -1147,7 +1150,7 @@ cxgbit_pass_accept_rpl(struct cxgbit_sock *csk, struct cpl_pass_accept_req *req)
2488 + rpl5->opt0 = cpu_to_be64(opt0);
2489 + rpl5->opt2 = cpu_to_be32(opt2);
2490 + set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->ctrlq_idx);
2491 +- t4_set_arp_err_handler(skb, NULL, cxgbit_arp_failure_discard);
2492 ++ t4_set_arp_err_handler(skb, csk, cxgbit_arp_failure_discard);
2493 + cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
2494 + }
2495 +
2496 +diff --git a/drivers/target/iscsi/cxgbit/cxgbit_main.c b/drivers/target/iscsi/cxgbit/cxgbit_main.c
2497 +index 4fd775ace541..6340e2e7ffbe 100644
2498 +--- a/drivers/target/iscsi/cxgbit/cxgbit_main.c
2499 ++++ b/drivers/target/iscsi/cxgbit/cxgbit_main.c
2500 +@@ -58,6 +58,7 @@ static void *cxgbit_uld_add(const struct cxgb4_lld_info *lldi)
2501 + return ERR_PTR(-ENOMEM);
2502 +
2503 + kref_init(&cdev->kref);
2504 ++ spin_lock_init(&cdev->np_lock);
2505 +
2506 + cdev->lldi = *lldi;
2507 +
2508 +diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c
2509 +index 95d34d7565c9..1cf78cec7461 100644
2510 +--- a/drivers/tty/serial/sunsu.c
2511 ++++ b/drivers/tty/serial/sunsu.c
2512 +@@ -1393,22 +1393,43 @@ static inline struct console *SUNSU_CONSOLE(void)
2513 + static enum su_type su_get_type(struct device_node *dp)
2514 + {
2515 + struct device_node *ap = of_find_node_by_path("/aliases");
2516 ++ enum su_type rc = SU_PORT_PORT;
2517 +
2518 + if (ap) {
2519 + const char *keyb = of_get_property(ap, "keyboard", NULL);
2520 + const char *ms = of_get_property(ap, "mouse", NULL);
2521 ++ struct device_node *match;
2522 +
2523 + if (keyb) {
2524 +- if (dp == of_find_node_by_path(keyb))
2525 +- return SU_PORT_KBD;
2526 ++ match = of_find_node_by_path(keyb);
2527 ++
2528 ++ /*
2529 ++ * The pointer is used as an identifier not
2530 ++ * as a pointer, we can drop the refcount on
2531 ++ * the of__node immediately after getting it.
2532 ++ */
2533 ++ of_node_put(match);
2534 ++
2535 ++ if (dp == match) {
2536 ++ rc = SU_PORT_KBD;
2537 ++ goto out;
2538 ++ }
2539 + }
2540 + if (ms) {
2541 +- if (dp == of_find_node_by_path(ms))
2542 +- return SU_PORT_MS;
2543 ++ match = of_find_node_by_path(ms);
2544 ++
2545 ++ of_node_put(match);
2546 ++
2547 ++ if (dp == match) {
2548 ++ rc = SU_PORT_MS;
2549 ++ goto out;
2550 ++ }
2551 + }
2552 + }
2553 +
2554 +- return SU_PORT_PORT;
2555 ++out:
2556 ++ of_node_put(ap);
2557 ++ return rc;
2558 + }
2559 +
2560 + static int su_probe(struct platform_device *op)
2561 +diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
2562 +index 248533c0f9ac..831758335e2c 100644
2563 +--- a/drivers/vhost/vsock.c
2564 ++++ b/drivers/vhost/vsock.c
2565 +@@ -522,6 +522,8 @@ static int vhost_vsock_dev_open(struct inode *inode, struct file *file)
2566 + goto out;
2567 + }
2568 +
2569 ++ vsock->guest_cid = 0; /* no CID assigned yet */
2570 ++
2571 + atomic_set(&vsock->queued_replies, 0);
2572 +
2573 + vqs[VSOCK_VQ_TX] = &vsock->vqs[VSOCK_VQ_TX];
2574 +diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
2575 +index ff5d32cf9578..92eb9c3052ee 100644
2576 +--- a/fs/ceph/caps.c
2577 ++++ b/fs/ceph/caps.c
2578 +@@ -3438,7 +3438,6 @@ retry:
2579 + tcap->cap_id = t_cap_id;
2580 + tcap->seq = t_seq - 1;
2581 + tcap->issue_seq = t_seq - 1;
2582 +- tcap->mseq = t_mseq;
2583 + tcap->issued |= issued;
2584 + tcap->implemented |= issued;
2585 + if (cap == ci->i_auth_cap)
2586 +diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
2587 +index d4aaddec1b16..21643d2b3fee 100644
2588 +--- a/fs/dlm/lock.c
2589 ++++ b/fs/dlm/lock.c
2590 +@@ -1210,6 +1210,7 @@ static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret)
2591 +
2592 + if (rv < 0) {
2593 + log_error(ls, "create_lkb idr error %d", rv);
2594 ++ dlm_free_lkb(lkb);
2595 + return rv;
2596 + }
2597 +
2598 +@@ -4176,6 +4177,7 @@ static int receive_convert(struct dlm_ls *ls, struct dlm_message *ms)
2599 + (unsigned long long)lkb->lkb_recover_seq,
2600 + ms->m_header.h_nodeid, ms->m_lkid);
2601 + error = -ENOENT;
2602 ++ dlm_put_lkb(lkb);
2603 + goto fail;
2604 + }
2605 +
2606 +@@ -4229,6 +4231,7 @@ static int receive_unlock(struct dlm_ls *ls, struct dlm_message *ms)
2607 + lkb->lkb_id, lkb->lkb_remid,
2608 + ms->m_header.h_nodeid, ms->m_lkid);
2609 + error = -ENOENT;
2610 ++ dlm_put_lkb(lkb);
2611 + goto fail;
2612 + }
2613 +
2614 +@@ -5789,20 +5792,20 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua,
2615 + goto out;
2616 + }
2617 + }
2618 +-
2619 +- /* After ua is attached to lkb it will be freed by dlm_free_lkb().
2620 +- When DLM_IFL_USER is set, the dlm knows that this is a userspace
2621 +- lock and that lkb_astparam is the dlm_user_args structure. */
2622 +-
2623 + error = set_lock_args(mode, &ua->lksb, flags, namelen, timeout_cs,
2624 + fake_astfn, ua, fake_bastfn, &args);
2625 +- lkb->lkb_flags |= DLM_IFL_USER;
2626 +-
2627 + if (error) {
2628 ++ kfree(ua->lksb.sb_lvbptr);
2629 ++ ua->lksb.sb_lvbptr = NULL;
2630 ++ kfree(ua);
2631 + __put_lkb(ls, lkb);
2632 + goto out;
2633 + }
2634 +
2635 ++ /* After ua is attached to lkb it will be freed by dlm_free_lkb().
2636 ++ When DLM_IFL_USER is set, the dlm knows that this is a userspace
2637 ++ lock and that lkb_astparam is the dlm_user_args structure. */
2638 ++ lkb->lkb_flags |= DLM_IFL_USER;
2639 + error = request_lock(ls, lkb, name, namelen, &args);
2640 +
2641 + switch (error) {
2642 +diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
2643 +index 78a7c855b06b..610f72ae7ad6 100644
2644 +--- a/fs/dlm/lockspace.c
2645 ++++ b/fs/dlm/lockspace.c
2646 +@@ -680,11 +680,11 @@ static int new_lockspace(const char *name, const char *cluster,
2647 + kfree(ls->ls_recover_buf);
2648 + out_lkbidr:
2649 + idr_destroy(&ls->ls_lkbidr);
2650 ++ out_rsbtbl:
2651 + for (i = 0; i < DLM_REMOVE_NAMES_MAX; i++) {
2652 + if (ls->ls_remove_names[i])
2653 + kfree(ls->ls_remove_names[i]);
2654 + }
2655 +- out_rsbtbl:
2656 + vfree(ls->ls_rsbtbl);
2657 + out_lsfree:
2658 + if (do_unreg)
2659 +diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
2660 +index 863749e29bf9..c850579ae5a4 100644
2661 +--- a/fs/gfs2/inode.c
2662 ++++ b/fs/gfs2/inode.c
2663 +@@ -743,17 +743,19 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
2664 + the gfs2 structures. */
2665 + if (default_acl) {
2666 + error = __gfs2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
2667 ++ if (error)
2668 ++ goto fail_gunlock3;
2669 + posix_acl_release(default_acl);
2670 ++ default_acl = NULL;
2671 + }
2672 + if (acl) {
2673 +- if (!error)
2674 +- error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
2675 ++ error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
2676 ++ if (error)
2677 ++ goto fail_gunlock3;
2678 + posix_acl_release(acl);
2679 ++ acl = NULL;
2680 + }
2681 +
2682 +- if (error)
2683 +- goto fail_gunlock3;
2684 +-
2685 + error = security_inode_init_security(&ip->i_inode, &dip->i_inode, name,
2686 + &gfs2_initxattrs, NULL);
2687 + if (error)
2688 +@@ -788,10 +790,8 @@ fail_free_inode:
2689 + }
2690 + gfs2_rsqa_delete(ip, NULL);
2691 + fail_free_acls:
2692 +- if (default_acl)
2693 +- posix_acl_release(default_acl);
2694 +- if (acl)
2695 +- posix_acl_release(acl);
2696 ++ posix_acl_release(default_acl);
2697 ++ posix_acl_release(acl);
2698 + fail_gunlock:
2699 + gfs2_dir_no_add(&da);
2700 + gfs2_glock_dq_uninit(ghs);
2701 +diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
2702 +index b0eee90738ff..914cb3d72ddf 100644
2703 +--- a/fs/gfs2/rgrp.c
2704 ++++ b/fs/gfs2/rgrp.c
2705 +@@ -1695,9 +1695,9 @@ static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
2706 + goto next_iter;
2707 + }
2708 + if (ret == -E2BIG) {
2709 ++ n += rbm->bii - initial_bii;
2710 + rbm->bii = 0;
2711 + rbm->offset = 0;
2712 +- n += (rbm->bii - initial_bii);
2713 + goto res_covered_end_of_rgrp;
2714 + }
2715 + return ret;
2716 +diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
2717 +index 066ac313ae5c..84857ffd2bb8 100644
2718 +--- a/fs/lockd/clntproc.c
2719 ++++ b/fs/lockd/clntproc.c
2720 +@@ -442,7 +442,7 @@ nlmclnt_test(struct nlm_rqst *req, struct file_lock *fl)
2721 + fl->fl_start = req->a_res.lock.fl.fl_start;
2722 + fl->fl_end = req->a_res.lock.fl.fl_end;
2723 + fl->fl_type = req->a_res.lock.fl.fl_type;
2724 +- fl->fl_pid = 0;
2725 ++ fl->fl_pid = -req->a_res.lock.fl.fl_pid;
2726 + break;
2727 + default:
2728 + status = nlm_stat_to_errno(req->a_res.status);
2729 +diff --git a/fs/lockd/xdr.c b/fs/lockd/xdr.c
2730 +index 7147e4aebecc..9846f7e95282 100644
2731 +--- a/fs/lockd/xdr.c
2732 ++++ b/fs/lockd/xdr.c
2733 +@@ -127,7 +127,7 @@ nlm_decode_lock(__be32 *p, struct nlm_lock *lock)
2734 +
2735 + locks_init_lock(fl);
2736 + fl->fl_owner = current->files;
2737 +- fl->fl_pid = (pid_t)lock->svid;
2738 ++ fl->fl_pid = current->tgid;
2739 + fl->fl_flags = FL_POSIX;
2740 + fl->fl_type = F_RDLCK; /* as good as anything else */
2741 + start = ntohl(*p++);
2742 +@@ -269,7 +269,7 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
2743 + memset(lock, 0, sizeof(*lock));
2744 + locks_init_lock(&lock->fl);
2745 + lock->svid = ~(u32) 0;
2746 +- lock->fl.fl_pid = (pid_t)lock->svid;
2747 ++ lock->fl.fl_pid = current->tgid;
2748 +
2749 + if (!(p = nlm_decode_cookie(p, &argp->cookie))
2750 + || !(p = xdr_decode_string_inplace(p, &lock->caller,
2751 +diff --git a/fs/lockd/xdr4.c b/fs/lockd/xdr4.c
2752 +index 7ed9edf9aed4..70154f376695 100644
2753 +--- a/fs/lockd/xdr4.c
2754 ++++ b/fs/lockd/xdr4.c
2755 +@@ -119,7 +119,7 @@ nlm4_decode_lock(__be32 *p, struct nlm_lock *lock)
2756 +
2757 + locks_init_lock(fl);
2758 + fl->fl_owner = current->files;
2759 +- fl->fl_pid = (pid_t)lock->svid;
2760 ++ fl->fl_pid = current->tgid;
2761 + fl->fl_flags = FL_POSIX;
2762 + fl->fl_type = F_RDLCK; /* as good as anything else */
2763 + p = xdr_decode_hyper(p, &start);
2764 +@@ -266,7 +266,7 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
2765 + memset(lock, 0, sizeof(*lock));
2766 + locks_init_lock(&lock->fl);
2767 + lock->svid = ~(u32) 0;
2768 +- lock->fl.fl_pid = (pid_t)lock->svid;
2769 ++ lock->fl.fl_pid = current->tgid;
2770 +
2771 + if (!(p = nlm4_decode_cookie(p, &argp->cookie))
2772 + || !(p = xdr_decode_string_inplace(p, &lock->caller,
2773 +diff --git a/include/linux/hmm.h b/include/linux/hmm.h
2774 +index 96e69979f84d..7d799c4d2669 100644
2775 +--- a/include/linux/hmm.h
2776 ++++ b/include/linux/hmm.h
2777 +@@ -437,8 +437,7 @@ struct hmm_devmem {
2778 + * enough and allocate struct page for it.
2779 + *
2780 + * The device driver can wrap the hmm_devmem struct inside a private device
2781 +- * driver struct. The device driver must call hmm_devmem_remove() before the
2782 +- * device goes away and before freeing the hmm_devmem struct memory.
2783 ++ * driver struct.
2784 + */
2785 + struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
2786 + struct device *device,
2787 +@@ -446,7 +445,6 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
2788 + struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
2789 + struct device *device,
2790 + struct resource *res);
2791 +-void hmm_devmem_remove(struct hmm_devmem *devmem);
2792 +
2793 + /*
2794 + * hmm_devmem_page_set_drvdata - set per-page driver data field
2795 +diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
2796 +index f4058bd4c373..61769d4b7dba 100644
2797 +--- a/include/uapi/linux/input-event-codes.h
2798 ++++ b/include/uapi/linux/input-event-codes.h
2799 +@@ -742,6 +742,15 @@
2800 +
2801 + #define ABS_MISC 0x28
2802 +
2803 ++/*
2804 ++ * 0x2e is reserved and should not be used in input drivers.
2805 ++ * It was used by HID as ABS_MISC+6 and userspace needs to detect if
2806 ++ * the next ABS_* event is correct or is just ABS_MISC + n.
2807 ++ * We define here ABS_RESERVED so userspace can rely on it and detect
2808 ++ * the situation described above.
2809 ++ */
2810 ++#define ABS_RESERVED 0x2e
2811 ++
2812 + #define ABS_MT_SLOT 0x2f /* MT slot being modified */
2813 + #define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
2814 + #define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
2815 +diff --git a/kernel/fork.c b/kernel/fork.c
2816 +index 6a219fea4926..6d6ce2c3a364 100644
2817 +--- a/kernel/fork.c
2818 ++++ b/kernel/fork.c
2819 +@@ -1672,8 +1672,6 @@ static __latent_entropy struct task_struct *copy_process(
2820 +
2821 + posix_cpu_timers_init(p);
2822 +
2823 +- p->start_time = ktime_get_ns();
2824 +- p->real_start_time = ktime_get_boot_ns();
2825 + p->io_context = NULL;
2826 + p->audit_context = NULL;
2827 + cgroup_fork(p);
2828 +@@ -1837,6 +1835,17 @@ static __latent_entropy struct task_struct *copy_process(
2829 + if (retval)
2830 + goto bad_fork_free_pid;
2831 +
2832 ++ /*
2833 ++ * From this point on we must avoid any synchronous user-space
2834 ++ * communication until we take the tasklist-lock. In particular, we do
2835 ++ * not want user-space to be able to predict the process start-time by
2836 ++ * stalling fork(2) after we recorded the start_time but before it is
2837 ++ * visible to the system.
2838 ++ */
2839 ++
2840 ++ p->start_time = ktime_get_ns();
2841 ++ p->real_start_time = ktime_get_boot_ns();
2842 ++
2843 + /*
2844 + * Make it visible to the rest of the system, but dont wake it up yet.
2845 + * Need tasklist lock for parent etc handling!
2846 +diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c
2847 +index a37a3b4b6342..e0665549af59 100644
2848 +--- a/kernel/irq/affinity.c
2849 ++++ b/kernel/irq/affinity.c
2850 +@@ -108,7 +108,7 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd)
2851 + int affv = nvecs - affd->pre_vectors - affd->post_vectors;
2852 + int last_affv = affv + affd->pre_vectors;
2853 + nodemask_t nodemsk = NODE_MASK_NONE;
2854 +- struct cpumask *masks;
2855 ++ struct cpumask *masks = NULL;
2856 + cpumask_var_t nmsk, *node_to_possible_cpumask;
2857 +
2858 + /*
2859 +@@ -121,13 +121,13 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd)
2860 + if (!zalloc_cpumask_var(&nmsk, GFP_KERNEL))
2861 + return NULL;
2862 +
2863 +- masks = kcalloc(nvecs, sizeof(*masks), GFP_KERNEL);
2864 +- if (!masks)
2865 +- goto out;
2866 +-
2867 + node_to_possible_cpumask = alloc_node_to_possible_cpumask();
2868 + if (!node_to_possible_cpumask)
2869 +- goto out;
2870 ++ goto outcpumsk;
2871 ++
2872 ++ masks = kcalloc(nvecs, sizeof(*masks), GFP_KERNEL);
2873 ++ if (!masks)
2874 ++ goto outnodemsk;
2875 +
2876 + /* Fill out vectors at the beginning that don't need affinity */
2877 + for (curvec = 0; curvec < affd->pre_vectors; curvec++)
2878 +@@ -192,8 +192,9 @@ done:
2879 + /* Fill out vectors at the end that don't need affinity */
2880 + for (; curvec < nvecs; curvec++)
2881 + cpumask_copy(masks + curvec, irq_default_affinity);
2882 ++outnodemsk:
2883 + free_node_to_possible_cpumask(node_to_possible_cpumask);
2884 +-out:
2885 ++outcpumsk:
2886 + free_cpumask_var(nmsk);
2887 + return masks;
2888 + }
2889 +diff --git a/kernel/memremap.c b/kernel/memremap.c
2890 +index 790ddf3bce19..0d676d6d2f62 100644
2891 +--- a/kernel/memremap.c
2892 ++++ b/kernel/memremap.c
2893 +@@ -379,15 +379,12 @@ void *devm_memremap_pages(struct device *dev, struct resource *res,
2894 + is_ram = region_intersects(align_start, align_size,
2895 + IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE);
2896 +
2897 +- if (is_ram == REGION_MIXED) {
2898 +- WARN_ONCE(1, "%s attempted on mixed region %pr\n",
2899 +- __func__, res);
2900 ++ if (is_ram != REGION_DISJOINT) {
2901 ++ WARN_ONCE(1, "%s attempted on %s region %pr\n", __func__,
2902 ++ is_ram == REGION_MIXED ? "mixed" : "ram", res);
2903 + return ERR_PTR(-ENXIO);
2904 + }
2905 +
2906 +- if (is_ram == REGION_INTERSECTS)
2907 +- return __va(res->start);
2908 +-
2909 + if (!ref)
2910 + return ERR_PTR(-EINVAL);
2911 +
2912 +@@ -482,7 +479,7 @@ void *devm_memremap_pages(struct device *dev, struct resource *res,
2913 + devres_free(page_map);
2914 + return ERR_PTR(error);
2915 + }
2916 +-EXPORT_SYMBOL(devm_memremap_pages);
2917 ++EXPORT_SYMBOL_GPL(devm_memremap_pages);
2918 +
2919 + unsigned long vmem_altmap_offset(struct vmem_altmap *altmap)
2920 + {
2921 +diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
2922 +index 7240bb4a4090..6e108af21481 100644
2923 +--- a/kernel/sched/fair.c
2924 ++++ b/kernel/sched/fair.c
2925 +@@ -369,10 +369,9 @@ static inline void list_del_leaf_cfs_rq(struct cfs_rq *cfs_rq)
2926 + }
2927 + }
2928 +
2929 +-/* Iterate thr' all leaf cfs_rq's on a runqueue */
2930 +-#define for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) \
2931 +- list_for_each_entry_safe(cfs_rq, pos, &rq->leaf_cfs_rq_list, \
2932 +- leaf_cfs_rq_list)
2933 ++/* Iterate through all leaf cfs_rq's on a runqueue: */
2934 ++#define for_each_leaf_cfs_rq(rq, cfs_rq) \
2935 ++ list_for_each_entry_rcu(cfs_rq, &rq->leaf_cfs_rq_list, leaf_cfs_rq_list)
2936 +
2937 + /* Do the two (enqueued) entities belong to the same group ? */
2938 + static inline struct cfs_rq *
2939 +@@ -465,8 +464,8 @@ static inline void list_del_leaf_cfs_rq(struct cfs_rq *cfs_rq)
2940 + {
2941 + }
2942 +
2943 +-#define for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) \
2944 +- for (cfs_rq = &rq->cfs, pos = NULL; cfs_rq; cfs_rq = pos)
2945 ++#define for_each_leaf_cfs_rq(rq, cfs_rq) \
2946 ++ for (cfs_rq = &rq->cfs; cfs_rq; cfs_rq = NULL)
2947 +
2948 + static inline struct sched_entity *parent_entity(struct sched_entity *se)
2949 + {
2950 +@@ -6970,27 +6969,10 @@ static void attach_tasks(struct lb_env *env)
2951 +
2952 + #ifdef CONFIG_FAIR_GROUP_SCHED
2953 +
2954 +-static inline bool cfs_rq_is_decayed(struct cfs_rq *cfs_rq)
2955 +-{
2956 +- if (cfs_rq->load.weight)
2957 +- return false;
2958 +-
2959 +- if (cfs_rq->avg.load_sum)
2960 +- return false;
2961 +-
2962 +- if (cfs_rq->avg.util_sum)
2963 +- return false;
2964 +-
2965 +- if (cfs_rq->runnable_load_sum)
2966 +- return false;
2967 +-
2968 +- return true;
2969 +-}
2970 +-
2971 + static void update_blocked_averages(int cpu)
2972 + {
2973 + struct rq *rq = cpu_rq(cpu);
2974 +- struct cfs_rq *cfs_rq, *pos;
2975 ++ struct cfs_rq *cfs_rq;
2976 + struct rq_flags rf;
2977 +
2978 + rq_lock_irqsave(rq, &rf);
2979 +@@ -7000,7 +6982,7 @@ static void update_blocked_averages(int cpu)
2980 + * Iterates the task_group tree in a bottom up fashion, see
2981 + * list_add_leaf_cfs_rq() for details.
2982 + */
2983 +- for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) {
2984 ++ for_each_leaf_cfs_rq(rq, cfs_rq) {
2985 + struct sched_entity *se;
2986 +
2987 + /* throttled entities do not contribute to load */
2988 +@@ -7014,13 +6996,6 @@ static void update_blocked_averages(int cpu)
2989 + se = cfs_rq->tg->se[cpu];
2990 + if (se && !skip_blocked_update(se))
2991 + update_load_avg(se, 0);
2992 +-
2993 +- /*
2994 +- * There can be a lot of idle CPU cgroups. Don't let fully
2995 +- * decayed cfs_rqs linger on the list.
2996 +- */
2997 +- if (cfs_rq_is_decayed(cfs_rq))
2998 +- list_del_leaf_cfs_rq(cfs_rq);
2999 + }
3000 + rq_unlock_irqrestore(rq, &rf);
3001 + }
3002 +@@ -9580,10 +9555,10 @@ const struct sched_class fair_sched_class = {
3003 + #ifdef CONFIG_SCHED_DEBUG
3004 + void print_cfs_stats(struct seq_file *m, int cpu)
3005 + {
3006 +- struct cfs_rq *cfs_rq, *pos;
3007 ++ struct cfs_rq *cfs_rq;
3008 +
3009 + rcu_read_lock();
3010 +- for_each_leaf_cfs_rq_safe(cpu_rq(cpu), cfs_rq, pos)
3011 ++ for_each_leaf_cfs_rq(cpu_rq(cpu), cfs_rq)
3012 + print_cfs_rq(m, cpu, cfs_rq);
3013 + rcu_read_unlock();
3014 + }
3015 +diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile
3016 +index 4add700ddfe3..ad523be0313b 100644
3017 +--- a/lib/raid6/Makefile
3018 ++++ b/lib/raid6/Makefile
3019 +@@ -18,6 +18,21 @@ quiet_cmd_unroll = UNROLL $@
3020 +
3021 + ifeq ($(CONFIG_ALTIVEC),y)
3022 + altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
3023 ++
3024 ++ifeq ($(cc-name),clang)
3025 ++# clang ppc port does not yet support -maltivec when -msoft-float is
3026 ++# enabled. A future release of clang will resolve this
3027 ++# https://bugs.llvm.org/show_bug.cgi?id=31177
3028 ++CFLAGS_REMOVE_altivec1.o += -msoft-float
3029 ++CFLAGS_REMOVE_altivec2.o += -msoft-float
3030 ++CFLAGS_REMOVE_altivec4.o += -msoft-float
3031 ++CFLAGS_REMOVE_altivec8.o += -msoft-float
3032 ++CFLAGS_REMOVE_altivec8.o += -msoft-float
3033 ++CFLAGS_REMOVE_vpermxor1.o += -msoft-float
3034 ++CFLAGS_REMOVE_vpermxor2.o += -msoft-float
3035 ++CFLAGS_REMOVE_vpermxor4.o += -msoft-float
3036 ++CFLAGS_REMOVE_vpermxor8.o += -msoft-float
3037 ++endif
3038 + endif
3039 +
3040 + # The GCC option -ffreestanding is required in order to compile code containing
3041 +diff --git a/lib/test_debug_virtual.c b/lib/test_debug_virtual.c
3042 +index b9cdeecc19dc..777b491df25d 100644
3043 +--- a/lib/test_debug_virtual.c
3044 ++++ b/lib/test_debug_virtual.c
3045 +@@ -5,6 +5,7 @@
3046 + #include <linux/vmalloc.h>
3047 + #include <linux/slab.h>
3048 + #include <linux/sizes.h>
3049 ++#include <linux/io.h>
3050 +
3051 + #include <asm/page.h>
3052 + #ifdef CONFIG_MIPS
3053 +diff --git a/mm/hmm.c b/mm/hmm.c
3054 +index 81ff1dbbf8a8..a5def9f34385 100644
3055 +--- a/mm/hmm.c
3056 ++++ b/mm/hmm.c
3057 +@@ -767,7 +767,6 @@ static void hmm_devmem_ref_exit(void *data)
3058 +
3059 + devmem = container_of(ref, struct hmm_devmem, ref);
3060 + percpu_ref_exit(ref);
3061 +- devm_remove_action(devmem->device, &hmm_devmem_ref_exit, data);
3062 + }
3063 +
3064 + static void hmm_devmem_ref_kill(void *data)
3065 +@@ -778,7 +777,6 @@ static void hmm_devmem_ref_kill(void *data)
3066 + devmem = container_of(ref, struct hmm_devmem, ref);
3067 + percpu_ref_kill(ref);
3068 + wait_for_completion(&devmem->completion);
3069 +- devm_remove_action(devmem->device, &hmm_devmem_ref_kill, data);
3070 + }
3071 +
3072 + static int hmm_devmem_fault(struct vm_area_struct *vma,
3073 +@@ -818,7 +816,7 @@ static void hmm_devmem_radix_release(struct resource *resource)
3074 + mutex_unlock(&hmm_devmem_lock);
3075 + }
3076 +
3077 +-static void hmm_devmem_release(struct device *dev, void *data)
3078 ++static void hmm_devmem_release(void *data)
3079 + {
3080 + struct hmm_devmem *devmem = data;
3081 + struct resource *resource = devmem->resource;
3082 +@@ -826,11 +824,6 @@ static void hmm_devmem_release(struct device *dev, void *data)
3083 + struct zone *zone;
3084 + struct page *page;
3085 +
3086 +- if (percpu_ref_tryget_live(&devmem->ref)) {
3087 +- dev_WARN(dev, "%s: page mapping is still live!\n", __func__);
3088 +- percpu_ref_put(&devmem->ref);
3089 +- }
3090 +-
3091 + /* pages are dead and unused, undo the arch mapping */
3092 + start_pfn = (resource->start & ~(PA_SECTION_SIZE - 1)) >> PAGE_SHIFT;
3093 + npages = ALIGN(resource_size(resource), PA_SECTION_SIZE) >> PAGE_SHIFT;
3094 +@@ -961,19 +954,6 @@ error:
3095 + return ret;
3096 + }
3097 +
3098 +-static int hmm_devmem_match(struct device *dev, void *data, void *match_data)
3099 +-{
3100 +- struct hmm_devmem *devmem = data;
3101 +-
3102 +- return devmem->resource == match_data;
3103 +-}
3104 +-
3105 +-static void hmm_devmem_pages_remove(struct hmm_devmem *devmem)
3106 +-{
3107 +- devres_release(devmem->device, &hmm_devmem_release,
3108 +- &hmm_devmem_match, devmem->resource);
3109 +-}
3110 +-
3111 + /*
3112 + * hmm_devmem_add() - hotplug ZONE_DEVICE memory for device memory
3113 + *
3114 +@@ -1001,8 +981,7 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
3115 +
3116 + static_branch_enable(&device_private_key);
3117 +
3118 +- devmem = devres_alloc_node(&hmm_devmem_release, sizeof(*devmem),
3119 +- GFP_KERNEL, dev_to_node(device));
3120 ++ devmem = devm_kzalloc(device, sizeof(*devmem), GFP_KERNEL);
3121 + if (!devmem)
3122 + return ERR_PTR(-ENOMEM);
3123 +
3124 +@@ -1016,11 +995,11 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
3125 + ret = percpu_ref_init(&devmem->ref, &hmm_devmem_ref_release,
3126 + 0, GFP_KERNEL);
3127 + if (ret)
3128 +- goto error_percpu_ref;
3129 ++ return ERR_PTR(ret);
3130 +
3131 +- ret = devm_add_action(device, hmm_devmem_ref_exit, &devmem->ref);
3132 ++ ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit, &devmem->ref);
3133 + if (ret)
3134 +- goto error_devm_add_action;
3135 ++ return ERR_PTR(ret);
3136 +
3137 + size = ALIGN(size, PA_SECTION_SIZE);
3138 + addr = min((unsigned long)iomem_resource.end,
3139 +@@ -1040,16 +1019,12 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
3140 +
3141 + devmem->resource = devm_request_mem_region(device, addr, size,
3142 + dev_name(device));
3143 +- if (!devmem->resource) {
3144 +- ret = -ENOMEM;
3145 +- goto error_no_resource;
3146 +- }
3147 ++ if (!devmem->resource)
3148 ++ return ERR_PTR(-ENOMEM);
3149 + break;
3150 + }
3151 +- if (!devmem->resource) {
3152 +- ret = -ERANGE;
3153 +- goto error_no_resource;
3154 +- }
3155 ++ if (!devmem->resource)
3156 ++ return ERR_PTR(-ERANGE);
3157 +
3158 + devmem->resource->desc = IORES_DESC_DEVICE_PRIVATE_MEMORY;
3159 + devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
3160 +@@ -1058,30 +1033,15 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
3161 +
3162 + ret = hmm_devmem_pages_create(devmem);
3163 + if (ret)
3164 +- goto error_pages;
3165 +-
3166 +- devres_add(device, devmem);
3167 ++ return ERR_PTR(ret);
3168 +
3169 +- ret = devm_add_action(device, hmm_devmem_ref_kill, &devmem->ref);
3170 +- if (ret) {
3171 +- hmm_devmem_remove(devmem);
3172 ++ ret = devm_add_action_or_reset(device, hmm_devmem_release, devmem);
3173 ++ if (ret)
3174 + return ERR_PTR(ret);
3175 +- }
3176 +
3177 + return devmem;
3178 +-
3179 +-error_pages:
3180 +- devm_release_mem_region(device, devmem->resource->start,
3181 +- resource_size(devmem->resource));
3182 +-error_no_resource:
3183 +-error_devm_add_action:
3184 +- hmm_devmem_ref_kill(&devmem->ref);
3185 +- hmm_devmem_ref_exit(&devmem->ref);
3186 +-error_percpu_ref:
3187 +- devres_free(devmem);
3188 +- return ERR_PTR(ret);
3189 + }
3190 +-EXPORT_SYMBOL(hmm_devmem_add);
3191 ++EXPORT_SYMBOL_GPL(hmm_devmem_add);
3192 +
3193 + struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
3194 + struct device *device,
3195 +@@ -1095,8 +1055,7 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
3196 +
3197 + static_branch_enable(&device_private_key);
3198 +
3199 +- devmem = devres_alloc_node(&hmm_devmem_release, sizeof(*devmem),
3200 +- GFP_KERNEL, dev_to_node(device));
3201 ++ devmem = devm_kzalloc(device, sizeof(*devmem), GFP_KERNEL);
3202 + if (!devmem)
3203 + return ERR_PTR(-ENOMEM);
3204 +
3205 +@@ -1110,12 +1069,12 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
3206 + ret = percpu_ref_init(&devmem->ref, &hmm_devmem_ref_release,
3207 + 0, GFP_KERNEL);
3208 + if (ret)
3209 +- goto error_percpu_ref;
3210 ++ return ERR_PTR(ret);
3211 +
3212 +- ret = devm_add_action(device, hmm_devmem_ref_exit, &devmem->ref);
3213 ++ ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit,
3214 ++ &devmem->ref);
3215 + if (ret)
3216 +- goto error_devm_add_action;
3217 +-
3218 ++ return ERR_PTR(ret);
3219 +
3220 + devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
3221 + devmem->pfn_last = devmem->pfn_first +
3222 +@@ -1123,58 +1082,20 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
3223 +
3224 + ret = hmm_devmem_pages_create(devmem);
3225 + if (ret)
3226 +- goto error_devm_add_action;
3227 ++ return ERR_PTR(ret);
3228 +
3229 +- devres_add(device, devmem);
3230 ++ ret = devm_add_action_or_reset(device, hmm_devmem_release, devmem);
3231 ++ if (ret)
3232 ++ return ERR_PTR(ret);
3233 +
3234 +- ret = devm_add_action(device, hmm_devmem_ref_kill, &devmem->ref);
3235 +- if (ret) {
3236 +- hmm_devmem_remove(devmem);
3237 ++ ret = devm_add_action_or_reset(device, hmm_devmem_ref_kill,
3238 ++ &devmem->ref);
3239 ++ if (ret)
3240 + return ERR_PTR(ret);
3241 +- }
3242 +
3243 + return devmem;
3244 +-
3245 +-error_devm_add_action:
3246 +- hmm_devmem_ref_kill(&devmem->ref);
3247 +- hmm_devmem_ref_exit(&devmem->ref);
3248 +-error_percpu_ref:
3249 +- devres_free(devmem);
3250 +- return ERR_PTR(ret);
3251 +-}
3252 +-EXPORT_SYMBOL(hmm_devmem_add_resource);
3253 +-
3254 +-/*
3255 +- * hmm_devmem_remove() - remove device memory (kill and free ZONE_DEVICE)
3256 +- *
3257 +- * @devmem: hmm_devmem struct use to track and manage the ZONE_DEVICE memory
3258 +- *
3259 +- * This will hot-unplug memory that was hotplugged by hmm_devmem_add on behalf
3260 +- * of the device driver. It will free struct page and remove the resource that
3261 +- * reserved the physical address range for this device memory.
3262 +- */
3263 +-void hmm_devmem_remove(struct hmm_devmem *devmem)
3264 +-{
3265 +- resource_size_t start, size;
3266 +- struct device *device;
3267 +- bool cdm = false;
3268 +-
3269 +- if (!devmem)
3270 +- return;
3271 +-
3272 +- device = devmem->device;
3273 +- start = devmem->resource->start;
3274 +- size = resource_size(devmem->resource);
3275 +-
3276 +- cdm = devmem->resource->desc == IORES_DESC_DEVICE_PUBLIC_MEMORY;
3277 +- hmm_devmem_ref_kill(&devmem->ref);
3278 +- hmm_devmem_ref_exit(&devmem->ref);
3279 +- hmm_devmem_pages_remove(devmem);
3280 +-
3281 +- if (!cdm)
3282 +- devm_release_mem_region(device, start, size);
3283 + }
3284 +-EXPORT_SYMBOL(hmm_devmem_remove);
3285 ++EXPORT_SYMBOL_GPL(hmm_devmem_add_resource);
3286 +
3287 + /*
3288 + * A device driver that wants to handle multiple devices memory through a
3289 +diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
3290 +index d4b5f29906b9..c7c74a927d6f 100644
3291 +--- a/mm/memory_hotplug.c
3292 ++++ b/mm/memory_hotplug.c
3293 +@@ -35,6 +35,7 @@
3294 + #include <linux/memblock.h>
3295 + #include <linux/bootmem.h>
3296 + #include <linux/compaction.h>
3297 ++#include <linux/rmap.h>
3298 +
3299 + #include <asm/tlbflush.h>
3300 +
3301 +@@ -1391,6 +1392,21 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
3302 + pfn = page_to_pfn(compound_head(page))
3303 + + hpage_nr_pages(page) - 1;
3304 +
3305 ++ /*
3306 ++ * HWPoison pages have elevated reference counts so the migration would
3307 ++ * fail on them. It also doesn't make any sense to migrate them in the
3308 ++ * first place. Still try to unmap such a page in case it is still mapped
3309 ++ * (e.g. current hwpoison implementation doesn't unmap KSM pages but keep
3310 ++ * the unmap as the catch all safety net).
3311 ++ */
3312 ++ if (PageHWPoison(page)) {
3313 ++ if (WARN_ON(PageLRU(page)))
3314 ++ isolate_lru_page(page);
3315 ++ if (page_mapped(page))
3316 ++ try_to_unmap(page, TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS);
3317 ++ continue;
3318 ++ }
3319 ++
3320 + if (!get_page_unless_zero(page))
3321 + continue;
3322 + /*
3323 +diff --git a/mm/swapfile.c b/mm/swapfile.c
3324 +index 08e8cd21770c..af3c4c5a0b4e 100644
3325 +--- a/mm/swapfile.c
3326 ++++ b/mm/swapfile.c
3327 +@@ -2218,7 +2218,8 @@ int try_to_unuse(unsigned int type, bool frontswap,
3328 + */
3329 + if (PageSwapCache(page) &&
3330 + likely(page_private(page) == entry.val) &&
3331 +- !page_swapped(page))
3332 ++ (!PageTransCompound(page) ||
3333 ++ !swap_page_trans_huge_swapped(si, entry)))
3334 + delete_from_swap_cache(compound_head(page));
3335 +
3336 + /*
3337 +diff --git a/net/9p/client.c b/net/9p/client.c
3338 +index 3ec5a82929b2..ef0f8fe3ac08 100644
3339 +--- a/net/9p/client.c
3340 ++++ b/net/9p/client.c
3341 +@@ -181,6 +181,12 @@ static int parse_opts(char *opts, struct p9_client *clnt)
3342 + ret = r;
3343 + continue;
3344 + }
3345 ++ if (option < 4096) {
3346 ++ p9_debug(P9_DEBUG_ERROR,
3347 ++ "msize should be at least 4k\n");
3348 ++ ret = -EINVAL;
3349 ++ continue;
3350 ++ }
3351 + clnt->msize = option;
3352 + break;
3353 + case Opt_trans:
3354 +@@ -996,10 +1002,18 @@ static int p9_client_version(struct p9_client *c)
3355 + else if (!strncmp(version, "9P2000", 6))
3356 + c->proto_version = p9_proto_legacy;
3357 + else {
3358 ++ p9_debug(P9_DEBUG_ERROR,
3359 ++ "server returned an unknown version: %s\n", version);
3360 + err = -EREMOTEIO;
3361 + goto error;
3362 + }
3363 +
3364 ++ if (msize < 4096) {
3365 ++ p9_debug(P9_DEBUG_ERROR,
3366 ++ "server returned a msize < 4096: %d\n", msize);
3367 ++ err = -EREMOTEIO;
3368 ++ goto error;
3369 ++ }
3370 + if (msize < c->msize)
3371 + c->msize = msize;
3372 +
3373 +@@ -1064,6 +1078,13 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
3374 + if (clnt->msize > clnt->trans_mod->maxsize)
3375 + clnt->msize = clnt->trans_mod->maxsize;
3376 +
3377 ++ if (clnt->msize < 4096) {
3378 ++ p9_debug(P9_DEBUG_ERROR,
3379 ++ "Please specify a msize of at least 4k\n");
3380 ++ err = -EINVAL;
3381 ++ goto free_client;
3382 ++ }
3383 ++
3384 + err = p9_client_version(clnt);
3385 + if (err)
3386 + goto close_trans;
3387 +diff --git a/net/mac80211/status.c b/net/mac80211/status.c
3388 +index 35912270087c..b18466cf466c 100644
3389 +--- a/net/mac80211/status.c
3390 ++++ b/net/mac80211/status.c
3391 +@@ -545,6 +545,11 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local,
3392 + }
3393 +
3394 + ieee80211_led_tx(local);
3395 ++
3396 ++ if (skb_has_frag_list(skb)) {
3397 ++ kfree_skb_list(skb_shinfo(skb)->frag_list);
3398 ++ skb_shinfo(skb)->frag_list = NULL;
3399 ++ }
3400 + }
3401 +
3402 + /*
3403 +diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
3404 +index 75d52aed6fdb..e563921e6af5 100644
3405 +--- a/net/netfilter/ipset/ip_set_list_set.c
3406 ++++ b/net/netfilter/ipset/ip_set_list_set.c
3407 +@@ -542,8 +542,8 @@ nla_put_failure:
3408 + ret = -EMSGSIZE;
3409 + } else {
3410 + cb->args[IPSET_CB_ARG0] = i;
3411 ++ ipset_nest_end(skb, atd);
3412 + }
3413 +- ipset_nest_end(skb, atd);
3414 + out:
3415 + rcu_read_unlock();
3416 + return ret;
3417 +diff --git a/net/netfilter/nf_conntrack_seqadj.c b/net/netfilter/nf_conntrack_seqadj.c
3418 +index a975efd6b8c3..9da303461069 100644
3419 +--- a/net/netfilter/nf_conntrack_seqadj.c
3420 ++++ b/net/netfilter/nf_conntrack_seqadj.c
3421 +@@ -115,12 +115,12 @@ static void nf_ct_sack_block_adjust(struct sk_buff *skb,
3422 + /* TCP SACK sequence number adjustment */
3423 + static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
3424 + unsigned int protoff,
3425 +- struct tcphdr *tcph,
3426 + struct nf_conn *ct,
3427 + enum ip_conntrack_info ctinfo)
3428 + {
3429 +- unsigned int dir, optoff, optend;
3430 ++ struct tcphdr *tcph = (void *)skb->data + protoff;
3431 + struct nf_conn_seqadj *seqadj = nfct_seqadj(ct);
3432 ++ unsigned int dir, optoff, optend;
3433 +
3434 + optoff = protoff + sizeof(struct tcphdr);
3435 + optend = protoff + tcph->doff * 4;
3436 +@@ -128,6 +128,7 @@ static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
3437 + if (!skb_make_writable(skb, optend))
3438 + return 0;
3439 +
3440 ++ tcph = (void *)skb->data + protoff;
3441 + dir = CTINFO2DIR(ctinfo);
3442 +
3443 + while (optoff < optend) {
3444 +@@ -207,7 +208,7 @@ int nf_ct_seq_adjust(struct sk_buff *skb,
3445 + ntohl(newack));
3446 + tcph->ack_seq = newack;
3447 +
3448 +- res = nf_ct_sack_adjust(skb, protoff, tcph, ct, ctinfo);
3449 ++ res = nf_ct_sack_adjust(skb, protoff, ct, ctinfo);
3450 + out:
3451 + spin_unlock_bh(&ct->lock);
3452 +
3453 +diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c
3454 +index af8345fc4fbd..ed0ea64b8d04 100644
3455 +--- a/net/netfilter/nf_nat_core.c
3456 ++++ b/net/netfilter/nf_nat_core.c
3457 +@@ -97,7 +97,8 @@ int nf_xfrm_me_harder(struct net *net, struct sk_buff *skb, unsigned int family)
3458 + dst = skb_dst(skb);
3459 + if (dst->xfrm)
3460 + dst = ((struct xfrm_dst *)dst)->route;
3461 +- dst_hold(dst);
3462 ++ if (!dst_hold_safe(dst))
3463 ++ return -EHOSTUNREACH;
3464 +
3465 + dst = xfrm_lookup(net, dst, &fl, skb->sk, 0);
3466 + if (IS_ERR(dst))
3467 +diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
3468 +index f41ffb22652c..cc08cb1292a9 100644
3469 +--- a/net/sunrpc/auth_gss/svcauth_gss.c
3470 ++++ b/net/sunrpc/auth_gss/svcauth_gss.c
3471 +@@ -1120,7 +1120,7 @@ static int svcauth_gss_legacy_init(struct svc_rqst *rqstp,
3472 + struct kvec *resv = &rqstp->rq_res.head[0];
3473 + struct rsi *rsip, rsikey;
3474 + int ret;
3475 +- struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
3476 ++ struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
3477 +
3478 + memset(&rsikey, 0, sizeof(rsikey));
3479 + ret = gss_read_verf(gc, argv, authp,
3480 +@@ -1231,7 +1231,7 @@ static int svcauth_gss_proxy_init(struct svc_rqst *rqstp,
3481 + uint64_t handle;
3482 + int status;
3483 + int ret;
3484 +- struct net *net = rqstp->rq_xprt->xpt_net;
3485 ++ struct net *net = SVC_NET(rqstp);
3486 + struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
3487 +
3488 + memset(&ud, 0, sizeof(ud));
3489 +@@ -1422,7 +1422,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp)
3490 + __be32 *rpcstart;
3491 + __be32 *reject_stat = resv->iov_base + resv->iov_len;
3492 + int ret;
3493 +- struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
3494 ++ struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
3495 +
3496 + dprintk("RPC: svcauth_gss: argv->iov_len = %zd\n",
3497 + argv->iov_len);
3498 +@@ -1710,7 +1710,7 @@ svcauth_gss_release(struct svc_rqst *rqstp)
3499 + struct rpc_gss_wire_cred *gc = &gsd->clcred;
3500 + struct xdr_buf *resbuf = &rqstp->rq_res;
3501 + int stat = -EINVAL;
3502 +- struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
3503 ++ struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
3504 +
3505 + if (gc->gc_proc != RPC_GSS_PROC_DATA)
3506 + goto out;
3507 +diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
3508 +index 79d55d949d9a..f2cf4edf219b 100644
3509 +--- a/net/sunrpc/cache.c
3510 ++++ b/net/sunrpc/cache.c
3511 +@@ -54,6 +54,11 @@ static void cache_init(struct cache_head *h, struct cache_detail *detail)
3512 + h->last_refresh = now;
3513 + }
3514 +
3515 ++static void cache_fresh_locked(struct cache_head *head, time_t expiry,
3516 ++ struct cache_detail *detail);
3517 ++static void cache_fresh_unlocked(struct cache_head *head,
3518 ++ struct cache_detail *detail);
3519 ++
3520 + struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
3521 + struct cache_head *key, int hash)
3522 + {
3523 +@@ -95,6 +100,7 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
3524 + if (cache_is_expired(detail, tmp)) {
3525 + hlist_del_init(&tmp->cache_list);
3526 + detail->entries --;
3527 ++ cache_fresh_locked(tmp, 0, detail);
3528 + freeme = tmp;
3529 + break;
3530 + }
3531 +@@ -110,8 +116,10 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
3532 + cache_get(new);
3533 + write_unlock(&detail->hash_lock);
3534 +
3535 +- if (freeme)
3536 ++ if (freeme) {
3537 ++ cache_fresh_unlocked(freeme, detail);
3538 + cache_put(freeme, detail);
3539 ++ }
3540 + return new;
3541 + }
3542 + EXPORT_SYMBOL_GPL(sunrpc_cache_lookup);
3543 +diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
3544 +index 30192abfdc3b..05a58cc1b0cd 100644
3545 +--- a/net/sunrpc/xprtsock.c
3546 ++++ b/net/sunrpc/xprtsock.c
3547 +@@ -2223,8 +2223,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
3548 + trace_rpc_socket_connect(xprt, sock, 0);
3549 + status = 0;
3550 + out:
3551 +- xprt_unlock_connect(xprt, transport);
3552 + xprt_clear_connecting(xprt);
3553 ++ xprt_unlock_connect(xprt, transport);
3554 + xprt_wake_pending_tasks(xprt, status);
3555 + }
3556 +
3557 +@@ -2451,8 +2451,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
3558 + }
3559 + status = -EAGAIN;
3560 + out:
3561 +- xprt_unlock_connect(xprt, transport);
3562 + xprt_clear_connecting(xprt);
3563 ++ xprt_unlock_connect(xprt, transport);
3564 + xprt_wake_pending_tasks(xprt, status);
3565 + }
3566 +
3567 +diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
3568 +index 8e75319dd9c0..06dec32503bd 100644
3569 +--- a/net/xfrm/xfrm_input.c
3570 ++++ b/net/xfrm/xfrm_input.c
3571 +@@ -341,6 +341,12 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
3572 +
3573 + skb->sp->xvec[skb->sp->len++] = x;
3574 +
3575 ++ skb_dst_force(skb);
3576 ++ if (!skb_dst(skb)) {
3577 ++ XFRM_INC_STATS(net, LINUX_MIB_XFRMINERROR);
3578 ++ goto drop;
3579 ++ }
3580 ++
3581 + lock:
3582 + spin_lock(&x->lock);
3583 +
3584 +@@ -380,7 +386,6 @@ lock:
3585 + XFRM_SKB_CB(skb)->seq.input.low = seq;
3586 + XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
3587 +
3588 +- skb_dst_force(skb);
3589 + dev_hold(skb->dev);
3590 +
3591 + if (crypto_done)
3592 +diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
3593 +index c47660fba498..b226b230e8bf 100644
3594 +--- a/net/xfrm/xfrm_output.c
3595 ++++ b/net/xfrm/xfrm_output.c
3596 +@@ -103,6 +103,7 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
3597 + skb_dst_force(skb);
3598 + if (!skb_dst(skb)) {
3599 + XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR);
3600 ++ err = -EHOSTUNREACH;
3601 + goto error_nolock;
3602 + }
3603 +
3604 +diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
3605 +index 6c4ec69e11a0..0cd2bdf3b217 100644
3606 +--- a/net/xfrm/xfrm_state.c
3607 ++++ b/net/xfrm/xfrm_state.c
3608 +@@ -789,7 +789,7 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si)
3609 + {
3610 + spin_lock_bh(&net->xfrm.xfrm_state_lock);
3611 + si->sadcnt = net->xfrm.state_num;
3612 +- si->sadhcnt = net->xfrm.state_hmask;
3613 ++ si->sadhcnt = net->xfrm.state_hmask + 1;
3614 + si->sadhmcnt = xfrm_state_hashmax;
3615 + spin_unlock_bh(&net->xfrm.xfrm_state_lock);
3616 + }
3617 +diff --git a/scripts/Makefile.build b/scripts/Makefile.build
3618 +index be9e5deb58ba..3edc9c04cb46 100644
3619 +--- a/scripts/Makefile.build
3620 ++++ b/scripts/Makefile.build
3621 +@@ -242,7 +242,7 @@ else
3622 + sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
3623 + "$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \
3624 + "$(if $(CONFIG_64BIT),64,32)" \
3625 +- "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CFLAGS)" \
3626 ++ "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \
3627 + "$(LD)" "$(NM)" "$(RM)" "$(MV)" \
3628 + "$(if $(part-of-module),1,0)" "$(@)";
3629 + recordmcount_source := $(srctree)/scripts/recordmcount.pl
3630 +diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
3631 +index cb993801e4b2..16dc157f9662 100755
3632 +--- a/scripts/checkstack.pl
3633 ++++ b/scripts/checkstack.pl
3634 +@@ -46,8 +46,8 @@ my (@stack, $re, $dre, $x, $xs, $funcre);
3635 + $xs = "[0-9a-f ]"; # hex character or space
3636 + $funcre = qr/^$x* <(.*)>:$/;
3637 + if ($arch eq 'aarch64') {
3638 +- #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp,#-80]!
3639 +- $re = qr/^.*stp.*sp,\#-([0-9]{1,8})\]\!/o;
3640 ++ #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]!
3641 ++ $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o;
3642 + } elsif ($arch eq 'arm') {
3643 + #c0008ffc: e24dd064 sub sp, sp, #100 ; 0x64
3644 + $re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o;
3645 +diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
3646 +index 9ee9bf7fd1a2..1dd24c5b9b47 100644
3647 +--- a/scripts/kallsyms.c
3648 ++++ b/scripts/kallsyms.c
3649 +@@ -221,6 +221,7 @@ static int symbol_valid(struct sym_entry *s)
3650 +
3651 + static char *special_prefixes[] = {
3652 + "__crc_", /* modversions */
3653 ++ "__efistub_", /* arm64 EFI stub namespace */
3654 + NULL };
3655 +
3656 + static char *special_suffixes[] = {
3657 +diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
3658 +index 6688ac5b991e..ffeb644bfecd 100644
3659 +--- a/security/selinux/ss/policydb.c
3660 ++++ b/security/selinux/ss/policydb.c
3661 +@@ -2107,6 +2107,7 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
3662 + {
3663 + int i, j, rc;
3664 + u32 nel, len;
3665 ++ __be64 prefixbuf[1];
3666 + __le32 buf[3];
3667 + struct ocontext *l, *c;
3668 + u32 nodebuf[8];
3669 +@@ -2216,21 +2217,30 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
3670 + goto out;
3671 + break;
3672 + }
3673 +- case OCON_IBPKEY:
3674 +- rc = next_entry(nodebuf, fp, sizeof(u32) * 4);
3675 ++ case OCON_IBPKEY: {
3676 ++ u32 pkey_lo, pkey_hi;
3677 ++
3678 ++ rc = next_entry(prefixbuf, fp, sizeof(u64));
3679 ++ if (rc)
3680 ++ goto out;
3681 ++
3682 ++ /* we need to have subnet_prefix in CPU order */
3683 ++ c->u.ibpkey.subnet_prefix = be64_to_cpu(prefixbuf[0]);
3684 ++
3685 ++ rc = next_entry(buf, fp, sizeof(u32) * 2);
3686 + if (rc)
3687 + goto out;
3688 +
3689 +- c->u.ibpkey.subnet_prefix = be64_to_cpu(*((__be64 *)nodebuf));
3690 ++ pkey_lo = le32_to_cpu(buf[0]);
3691 ++ pkey_hi = le32_to_cpu(buf[1]);
3692 +
3693 +- if (nodebuf[2] > 0xffff ||
3694 +- nodebuf[3] > 0xffff) {
3695 ++ if (pkey_lo > U16_MAX || pkey_hi > U16_MAX) {
3696 + rc = -EINVAL;
3697 + goto out;
3698 + }
3699 +
3700 +- c->u.ibpkey.low_pkey = le32_to_cpu(nodebuf[2]);
3701 +- c->u.ibpkey.high_pkey = le32_to_cpu(nodebuf[3]);
3702 ++ c->u.ibpkey.low_pkey = pkey_lo;
3703 ++ c->u.ibpkey.high_pkey = pkey_hi;
3704 +
3705 + rc = context_read_and_validate(&c->context[0],
3706 + p,
3707 +@@ -2238,7 +2248,10 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
3708 + if (rc)
3709 + goto out;
3710 + break;
3711 +- case OCON_IBENDPORT:
3712 ++ }
3713 ++ case OCON_IBENDPORT: {
3714 ++ u32 port;
3715 ++
3716 + rc = next_entry(buf, fp, sizeof(u32) * 2);
3717 + if (rc)
3718 + goto out;
3719 +@@ -2248,12 +2261,13 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
3720 + if (rc)
3721 + goto out;
3722 +
3723 +- if (buf[1] > 0xff || buf[1] == 0) {
3724 ++ port = le32_to_cpu(buf[1]);
3725 ++ if (port > U8_MAX || port == 0) {
3726 + rc = -EINVAL;
3727 + goto out;
3728 + }
3729 +
3730 +- c->u.ibendport.port = le32_to_cpu(buf[1]);
3731 ++ c->u.ibendport.port = port;
3732 +
3733 + rc = context_read_and_validate(&c->context[0],
3734 + p,
3735 +@@ -2261,7 +2275,8 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
3736 + if (rc)
3737 + goto out;
3738 + break;
3739 +- }
3740 ++ } /* end case */
3741 ++ } /* end switch */
3742 + }
3743 + }
3744 + rc = 0;
3745 +@@ -3104,6 +3119,7 @@ static int ocontext_write(struct policydb *p, struct policydb_compat_info *info,
3746 + {
3747 + unsigned int i, j, rc;
3748 + size_t nel, len;
3749 ++ __be64 prefixbuf[1];
3750 + __le32 buf[3];
3751 + u32 nodebuf[8];
3752 + struct ocontext *c;
3753 +@@ -3191,12 +3207,17 @@ static int ocontext_write(struct policydb *p, struct policydb_compat_info *info,
3754 + return rc;
3755 + break;
3756 + case OCON_IBPKEY:
3757 +- *((__be64 *)nodebuf) = cpu_to_be64(c->u.ibpkey.subnet_prefix);
3758 ++ /* subnet_prefix is in CPU order */
3759 ++ prefixbuf[0] = cpu_to_be64(c->u.ibpkey.subnet_prefix);
3760 +
3761 +- nodebuf[2] = cpu_to_le32(c->u.ibpkey.low_pkey);
3762 +- nodebuf[3] = cpu_to_le32(c->u.ibpkey.high_pkey);
3763 ++ rc = put_entry(prefixbuf, sizeof(u64), 1, fp);
3764 ++ if (rc)
3765 ++ return rc;
3766 ++
3767 ++ buf[0] = cpu_to_le32(c->u.ibpkey.low_pkey);
3768 ++ buf[1] = cpu_to_le32(c->u.ibpkey.high_pkey);
3769 +
3770 +- rc = put_entry(nodebuf, sizeof(u32), 4, fp);
3771 ++ rc = put_entry(buf, sizeof(u32), 2, fp);
3772 + if (rc)
3773 + return rc;
3774 + rc = context_write(p, &c->context[0], fp);
3775 +diff --git a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c
3776 +index aa61615288ff..f03bbd0eb027 100644
3777 +--- a/sound/pci/cs46xx/dsp_spos.c
3778 ++++ b/sound/pci/cs46xx/dsp_spos.c
3779 +@@ -900,6 +900,9 @@ int cs46xx_dsp_proc_done (struct snd_cs46xx *chip)
3780 + struct dsp_spos_instance * ins = chip->dsp_spos_instance;
3781 + int i;
3782 +
3783 ++ if (!ins)
3784 ++ return 0;
3785 ++
3786 + snd_info_free_entry(ins->proc_sym_info_entry);
3787 + ins->proc_sym_info_entry = NULL;
3788 +
3789 +diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
3790 +index 4d950b7c2f97..b3be0d432a75 100644
3791 +--- a/sound/usb/mixer.c
3792 ++++ b/sound/usb/mixer.c
3793 +@@ -1888,7 +1888,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
3794 + char *name)
3795 + {
3796 + struct uac_processing_unit_descriptor *desc = raw_desc;
3797 +- int num_ins = desc->bNrInPins;
3798 ++ int num_ins;
3799 + struct usb_mixer_elem_info *cval;
3800 + struct snd_kcontrol *kctl;
3801 + int i, err, nameid, type, len;
3802 +@@ -1903,7 +1903,13 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
3803 + 0, NULL, default_value_info
3804 + };
3805 +
3806 +- if (desc->bLength < 13 || desc->bLength < 13 + num_ins ||
3807 ++ if (desc->bLength < 13) {
3808 ++ usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
3809 ++ return -EINVAL;
3810 ++ }
3811 ++
3812 ++ num_ins = desc->bNrInPins;
3813 ++ if (desc->bLength < 13 + num_ins ||
3814 + desc->bLength < num_ins + uac_processing_unit_bControlSize(desc, state->mixer->protocol)) {
3815 + usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
3816 + return -EINVAL;
3817 +diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
3818 +index 15cbe2565703..d32727c74a16 100644
3819 +--- a/sound/usb/quirks-table.h
3820 ++++ b/sound/usb/quirks-table.h
3821 +@@ -3321,6 +3321,9 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
3822 + }
3823 + }
3824 + },
3825 ++ {
3826 ++ .ifnum = -1
3827 ++ },
3828 + }
3829 + }
3830 + },
3831 +diff --git a/tools/cgroup/Makefile b/tools/cgroup/Makefile
3832 +index 860fa151640a..ffca068e4a76 100644
3833 +--- a/tools/cgroup/Makefile
3834 ++++ b/tools/cgroup/Makefile
3835 +@@ -1,7 +1,6 @@
3836 + # SPDX-License-Identifier: GPL-2.0
3837 + # Makefile for cgroup tools
3838 +
3839 +-CC = $(CROSS_COMPILE)gcc
3840 + CFLAGS = -Wall -Wextra
3841 +
3842 + all: cgroup_event_listener
3843 +diff --git a/tools/gpio/Makefile b/tools/gpio/Makefile
3844 +index 805a2c0cf4cd..240eda014b37 100644
3845 +--- a/tools/gpio/Makefile
3846 ++++ b/tools/gpio/Makefile
3847 +@@ -12,8 +12,6 @@ endif
3848 + # (this improves performance and avoids hard-to-debug behaviour);
3849 + MAKEFLAGS += -r
3850 +
3851 +-CC = $(CROSS_COMPILE)gcc
3852 +-LD = $(CROSS_COMPILE)ld
3853 + CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include
3854 +
3855 + ALL_TARGETS := lsgpio gpio-hammer gpio-event-mon
3856 +diff --git a/tools/hv/Makefile b/tools/hv/Makefile
3857 +index 31503819454d..68c2d7b059b3 100644
3858 +--- a/tools/hv/Makefile
3859 ++++ b/tools/hv/Makefile
3860 +@@ -1,7 +1,6 @@
3861 + # SPDX-License-Identifier: GPL-2.0
3862 + # Makefile for Hyper-V tools
3863 +
3864 +-CC = $(CROSS_COMPILE)gcc
3865 + WARNINGS = -Wall -Wextra
3866 + CFLAGS = $(WARNINGS) -g $(shell getconf LFS_CFLAGS)
3867 +
3868 +diff --git a/tools/iio/Makefile b/tools/iio/Makefile
3869 +index a08e7a47d6a3..332ed2f6c2c2 100644
3870 +--- a/tools/iio/Makefile
3871 ++++ b/tools/iio/Makefile
3872 +@@ -12,8 +12,6 @@ endif
3873 + # (this improves performance and avoids hard-to-debug behaviour);
3874 + MAKEFLAGS += -r
3875 +
3876 +-CC = $(CROSS_COMPILE)gcc
3877 +-LD = $(CROSS_COMPILE)ld
3878 + CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include
3879 +
3880 + ALL_TARGETS := iio_event_monitor lsiio iio_generic_buffer
3881 +diff --git a/tools/laptop/freefall/Makefile b/tools/laptop/freefall/Makefile
3882 +index 5f758c489a20..b572d94255f6 100644
3883 +--- a/tools/laptop/freefall/Makefile
3884 ++++ b/tools/laptop/freefall/Makefile
3885 +@@ -2,7 +2,6 @@
3886 + PREFIX ?= /usr
3887 + SBINDIR ?= sbin
3888 + INSTALL ?= install
3889 +-CC = $(CROSS_COMPILE)gcc
3890 +
3891 + TARGET = freefall
3892 +
3893 +diff --git a/tools/leds/Makefile b/tools/leds/Makefile
3894 +index c379af003807..7b6bed13daaa 100644
3895 +--- a/tools/leds/Makefile
3896 ++++ b/tools/leds/Makefile
3897 +@@ -1,7 +1,6 @@
3898 + # SPDX-License-Identifier: GPL-2.0
3899 + # Makefile for LEDs tools
3900 +
3901 +-CC = $(CROSS_COMPILE)gcc
3902 + CFLAGS = -Wall -Wextra -g -I../../include/uapi
3903 +
3904 + all: uledmon led_hw_brightness_mon
3905 +diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
3906 +index 2a858ea56a81..349ea5133d83 100644
3907 +--- a/tools/perf/Makefile.perf
3908 ++++ b/tools/perf/Makefile.perf
3909 +@@ -144,12 +144,6 @@ define allow-override
3910 + $(eval $(1) = $(2)))
3911 + endef
3912 +
3913 +-# Allow setting CC and AR and LD, or setting CROSS_COMPILE as a prefix.
3914 +-$(call allow-override,CC,$(CROSS_COMPILE)gcc)
3915 +-$(call allow-override,AR,$(CROSS_COMPILE)ar)
3916 +-$(call allow-override,LD,$(CROSS_COMPILE)ld)
3917 +-$(call allow-override,CXX,$(CROSS_COMPILE)g++)
3918 +-
3919 + LD += $(EXTRA_LDFLAGS)
3920 +
3921 + HOSTCC ?= gcc
3922 +diff --git a/tools/power/acpi/Makefile.config b/tools/power/acpi/Makefile.config
3923 +index a1883bbb0144..f304be71c278 100644
3924 +--- a/tools/power/acpi/Makefile.config
3925 ++++ b/tools/power/acpi/Makefile.config
3926 +@@ -56,9 +56,7 @@ INSTALL_SCRIPT = ${INSTALL_PROGRAM}
3927 + # to compile vs uClibc, that can be done here as well.
3928 + CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
3929 + CROSS_COMPILE ?= $(CROSS)
3930 +-CC = $(CROSS_COMPILE)gcc
3931 +-LD = $(CROSS_COMPILE)gcc
3932 +-STRIP = $(CROSS_COMPILE)strip
3933 ++LD = $(CC)
3934 + HOSTCC = gcc
3935 +
3936 + # check if compiler option is supported
3937 +diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
3938 +index 5f3f1f44ed0a..71dc7efc7efa 100644
3939 +--- a/tools/scripts/Makefile.include
3940 ++++ b/tools/scripts/Makefile.include
3941 +@@ -42,6 +42,24 @@ EXTRA_WARNINGS += -Wformat
3942 +
3943 + CC_NO_CLANG := $(shell $(CC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?)
3944 +
3945 ++# Makefiles suck: This macro sets a default value of $(2) for the
3946 ++# variable named by $(1), unless the variable has been set by
3947 ++# environment or command line. This is necessary for CC and AR
3948 ++# because make sets default values, so the simpler ?= approach
3949 ++# won't work as expected.
3950 ++define allow-override
3951 ++ $(if $(or $(findstring environment,$(origin $(1))),\
3952 ++ $(findstring command line,$(origin $(1)))),,\
3953 ++ $(eval $(1) = $(2)))
3954 ++endef
3955 ++
3956 ++# Allow setting various cross-compile vars or setting CROSS_COMPILE as a prefix.
3957 ++$(call allow-override,CC,$(CROSS_COMPILE)gcc)
3958 ++$(call allow-override,AR,$(CROSS_COMPILE)ar)
3959 ++$(call allow-override,LD,$(CROSS_COMPILE)ld)
3960 ++$(call allow-override,CXX,$(CROSS_COMPILE)g++)
3961 ++$(call allow-override,STRIP,$(CROSS_COMPILE)strip)
3962 ++
3963 + ifeq ($(CC_NO_CLANG), 1)
3964 + EXTRA_WARNINGS += -Wstrict-aliasing=3
3965 + endif
3966 +diff --git a/tools/spi/Makefile b/tools/spi/Makefile
3967 +index 90615e10c79a..815d15589177 100644
3968 +--- a/tools/spi/Makefile
3969 ++++ b/tools/spi/Makefile
3970 +@@ -11,8 +11,6 @@ endif
3971 + # (this improves performance and avoids hard-to-debug behaviour);
3972 + MAKEFLAGS += -r
3973 +
3974 +-CC = $(CROSS_COMPILE)gcc
3975 +-LD = $(CROSS_COMPILE)ld
3976 + CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include
3977 +
3978 + ALL_TARGETS := spidev_test spidev_fdx
3979 +diff --git a/tools/testing/nvdimm/test/iomap.c b/tools/testing/nvdimm/test/iomap.c
3980 +index e1f75a1914a1..f2a00b0698a3 100644
3981 +--- a/tools/testing/nvdimm/test/iomap.c
3982 ++++ b/tools/testing/nvdimm/test/iomap.c
3983 +@@ -114,7 +114,7 @@ void *__wrap_devm_memremap_pages(struct device *dev, struct resource *res,
3984 + return nfit_res->buf + offset - nfit_res->res.start;
3985 + return devm_memremap_pages(dev, res, ref, altmap);
3986 + }
3987 +-EXPORT_SYMBOL(__wrap_devm_memremap_pages);
3988 ++EXPORT_SYMBOL_GPL(__wrap_devm_memremap_pages);
3989 +
3990 + pfn_t __wrap_phys_to_pfn_t(phys_addr_t addr, unsigned long flags)
3991 + {
3992 +diff --git a/tools/usb/Makefile b/tools/usb/Makefile
3993 +index 4e6506078494..01d758d73b6d 100644
3994 +--- a/tools/usb/Makefile
3995 ++++ b/tools/usb/Makefile
3996 +@@ -1,7 +1,6 @@
3997 + # SPDX-License-Identifier: GPL-2.0
3998 + # Makefile for USB tools
3999 +
4000 +-CC = $(CROSS_COMPILE)gcc
4001 + PTHREAD_LIBS = -lpthread
4002 + WARNINGS = -Wall -Wextra
4003 + CFLAGS = $(WARNINGS) -g -I../include
4004 +diff --git a/tools/virtio/linux/kernel.h b/tools/virtio/linux/kernel.h
4005 +index 395521a7a8d8..268ce239de65 100644
4006 +--- a/tools/virtio/linux/kernel.h
4007 ++++ b/tools/virtio/linux/kernel.h
4008 +@@ -23,6 +23,10 @@
4009 + #define PAGE_MASK (~(PAGE_SIZE-1))
4010 + #define PAGE_ALIGN(x) ((x + PAGE_SIZE - 1) & PAGE_MASK)
4011 +
4012 ++/* generic data direction definitions */
4013 ++#define READ 0
4014 ++#define WRITE 1
4015 ++
4016 + typedef unsigned long long phys_addr_t;
4017 + typedef unsigned long long dma_addr_t;
4018 + typedef size_t __kernel_size_t;
4019 +diff --git a/tools/vm/Makefile b/tools/vm/Makefile
4020 +index be320b905ea7..20f6cf04377f 100644
4021 +--- a/tools/vm/Makefile
4022 ++++ b/tools/vm/Makefile
4023 +@@ -6,7 +6,6 @@ TARGETS=page-types slabinfo page_owner_sort
4024 + LIB_DIR = ../lib/api
4025 + LIBS = $(LIB_DIR)/libapi.a
4026 +
4027 +-CC = $(CROSS_COMPILE)gcc
4028 + CFLAGS = -Wall -Wextra -I../lib/
4029 + LDFLAGS = $(LIBS)
4030 +