Gentoo Archives: gentoo-commits

From: Mike Pagano <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/linux-patches:4.19 commit in: /
Date: Sun, 13 Jan 2019 19:29:15
Message-Id: 1547407730.deac9d11b550ed21fa6adccef30f618c1037ed28.mpagano@gentoo
1 commit: deac9d11b550ed21fa6adccef30f618c1037ed28
2 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jan 13 19:28:50 2019 +0000
4 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org>
5 CommitDate: Sun Jan 13 19:28:50 2019 +0000
6 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=deac9d11
7
8 proj/linux-patches: Linux patch 4.19.15
9
10 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>
11
12 0000_README | 4 +
13 1014_linux-4.19.15.patch | 5529 ++++++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 5533 insertions(+)
15
16 diff --git a/0000_README b/0000_README
17 index 5bb2bcd..2970cec 100644
18 --- a/0000_README
19 +++ b/0000_README
20 @@ -99,6 +99,10 @@ Patch: 1013_linux-4.19.14.patch
21 From: http://www.kernel.org
22 Desc: Linux 4.19.14
23
24 +Patch: 1014_linux-4.19.15.patch
25 +From: http://www.kernel.org
26 +Desc: Linux 4.19.15
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/1014_linux-4.19.15.patch b/1014_linux-4.19.15.patch
33 new file mode 100644
34 index 0000000..f589723
35 --- /dev/null
36 +++ b/1014_linux-4.19.15.patch
37 @@ -0,0 +1,5529 @@
38 +diff --git a/Makefile b/Makefile
39 +index 3324dd0e11a3..0e30d48274fa 100644
40 +--- a/Makefile
41 ++++ b/Makefile
42 +@@ -1,7 +1,7 @@
43 + # SPDX-License-Identifier: GPL-2.0
44 + VERSION = 4
45 + PATCHLEVEL = 19
46 +-SUBLEVEL = 14
47 ++SUBLEVEL = 15
48 + EXTRAVERSION =
49 + NAME = "People's Front"
50 +
51 +@@ -482,18 +482,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 +@@ -1115,6 +1110,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 + # Generate some files
103 + # ---------------------------------------------------------------------------
104 +diff --git a/arch/arm/boot/dts/imx7d-nitrogen7.dts b/arch/arm/boot/dts/imx7d-nitrogen7.dts
105 +index d8aac4a2d02a..177d21fdeb28 100644
106 +--- a/arch/arm/boot/dts/imx7d-nitrogen7.dts
107 ++++ b/arch/arm/boot/dts/imx7d-nitrogen7.dts
108 +@@ -86,13 +86,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 +@@ -375,6 +379,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/boot/dts/imx7d-pico.dtsi b/arch/arm/boot/dts/imx7d-pico.dtsi
137 +index 21973eb55671..f27b3849d3ff 100644
138 +--- a/arch/arm/boot/dts/imx7d-pico.dtsi
139 ++++ b/arch/arm/boot/dts/imx7d-pico.dtsi
140 +@@ -100,6 +100,19 @@
141 + regulator-min-microvolt = <1800000>;
142 + regulator-max-microvolt = <1800000>;
143 + };
144 ++
145 ++ usdhc2_pwrseq: usdhc2_pwrseq {
146 ++ compatible = "mmc-pwrseq-simple";
147 ++ clocks = <&clks IMX7D_CLKO2_ROOT_DIV>;
148 ++ clock-names = "ext_clock";
149 ++ };
150 ++};
151 ++
152 ++&clks {
153 ++ assigned-clocks = <&clks IMX7D_CLKO2_ROOT_SRC>,
154 ++ <&clks IMX7D_CLKO2_ROOT_DIV>;
155 ++ assigned-clock-parents = <&clks IMX7D_CKIL>;
156 ++ assigned-clock-rates = <0>, <32768>;
157 + };
158 +
159 + &i2c4 {
160 +@@ -199,12 +212,13 @@
161 +
162 + &usdhc2 { /* Wifi SDIO */
163 + pinctrl-names = "default";
164 +- pinctrl-0 = <&pinctrl_usdhc2>;
165 ++ pinctrl-0 = <&pinctrl_usdhc2 &pinctrl_wifi_clk>;
166 + no-1-8-v;
167 + non-removable;
168 + keep-power-in-suspend;
169 + wakeup-source;
170 + vmmc-supply = <&reg_ap6212>;
171 ++ mmc-pwrseq = <&usdhc2_pwrseq>;
172 + status = "okay";
173 + };
174 +
175 +@@ -301,6 +315,12 @@
176 + };
177 +
178 + &iomuxc_lpsr {
179 ++ pinctrl_wifi_clk: wificlkgrp {
180 ++ fsl,pins = <
181 ++ MX7D_PAD_LPSR_GPIO1_IO03__CCM_CLKO2 0x7d
182 ++ >;
183 ++ };
184 ++
185 + pinctrl_wdog: wdoggrp {
186 + fsl,pins = <
187 + MX7D_PAD_LPSR_GPIO1_IO00__WDOG1_WDOG_B 0x74
188 +diff --git a/arch/arm/boot/dts/sun8i-a83t-bananapi-m3.dts b/arch/arm/boot/dts/sun8i-a83t-bananapi-m3.dts
189 +index c7ce4158d6c8..f250b20af493 100644
190 +--- a/arch/arm/boot/dts/sun8i-a83t-bananapi-m3.dts
191 ++++ b/arch/arm/boot/dts/sun8i-a83t-bananapi-m3.dts
192 +@@ -309,8 +309,8 @@
193 +
194 + &reg_dldo3 {
195 + regulator-always-on;
196 +- regulator-min-microvolt = <2500000>;
197 +- regulator-max-microvolt = <2500000>;
198 ++ regulator-min-microvolt = <3300000>;
199 ++ regulator-max-microvolt = <3300000>;
200 + regulator-name = "vcc-pd";
201 + };
202 +
203 +diff --git a/arch/arm/mach-imx/cpuidle-imx6sx.c b/arch/arm/mach-imx/cpuidle-imx6sx.c
204 +index 243a108a940b..fd0053e47a15 100644
205 +--- a/arch/arm/mach-imx/cpuidle-imx6sx.c
206 ++++ b/arch/arm/mach-imx/cpuidle-imx6sx.c
207 +@@ -110,7 +110,7 @@ int __init imx6sx_cpuidle_init(void)
208 + * except for power up sw2iso which need to be
209 + * larger than LDO ramp up time.
210 + */
211 +- imx_gpc_set_arm_power_up_timing(2, 1);
212 ++ imx_gpc_set_arm_power_up_timing(0xf, 1);
213 + imx_gpc_set_arm_power_down_timing(1, 1);
214 +
215 + return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
216 +diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
217 +index 106039d25e2f..35649ee8ad56 100644
218 +--- a/arch/arm64/Makefile
219 ++++ b/arch/arm64/Makefile
220 +@@ -18,7 +18,7 @@ ifeq ($(CONFIG_RELOCATABLE), y)
221 + # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
222 + # for relative relocs, since this leads to better Image compression
223 + # with the relocation offsets always being zero.
224 +-LDFLAGS_vmlinux += -pie -shared -Bsymbolic \
225 ++LDFLAGS_vmlinux += -shared -Bsymbolic -z notext -z norelro \
226 + $(call ld-option, --no-apply-dynamic-relocs)
227 + endif
228 +
229 +diff --git a/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts b/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts
230 +index a747b7bf132d..387be39d40cd 100644
231 +--- a/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts
232 ++++ b/arch/arm64/boot/dts/mediatek/mt7622-rfb1.dts
233 +@@ -17,8 +17,13 @@
234 + model = "MediaTek MT7622 RFB1 board";
235 + compatible = "mediatek,mt7622-rfb1", "mediatek,mt7622";
236 +
237 ++ aliases {
238 ++ serial0 = &uart0;
239 ++ };
240 ++
241 + chosen {
242 +- bootargs = "earlycon=uart8250,mmio32,0x11002000 console=ttyS0,115200n1 swiotlb=512";
243 ++ stdout-path = "serial0:115200n8";
244 ++ bootargs = "earlycon=uart8250,mmio32,0x11002000 swiotlb=512";
245 + };
246 +
247 + cpus {
248 +diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
249 +index a820ed07fb80..8da289dc843a 100644
250 +--- a/arch/arm64/kernel/image.h
251 ++++ b/arch/arm64/kernel/image.h
252 +@@ -75,16 +75,6 @@
253 +
254 + __efistub_stext_offset = stext - _text;
255 +
256 +-/*
257 +- * Prevent the symbol aliases below from being emitted into the kallsyms
258 +- * table, by forcing them to be absolute symbols (which are conveniently
259 +- * ignored by scripts/kallsyms) rather than section relative symbols.
260 +- * The distinction is only relevant for partial linking, and only for symbols
261 +- * that are defined within a section declaration (which is not the case for
262 +- * the definitions below) so the resulting values will be identical.
263 +- */
264 +-#define KALLSYMS_HIDE(sym) ABSOLUTE(sym)
265 +-
266 + /*
267 + * The EFI stub has its own symbol namespace prefixed by __efistub_, to
268 + * isolate it from the kernel proper. The following symbols are legally
269 +@@ -94,28 +84,28 @@ __efistub_stext_offset = stext - _text;
270 + * linked at. The routines below are all implemented in assembler in a
271 + * position independent manner
272 + */
273 +-__efistub_memcmp = KALLSYMS_HIDE(__pi_memcmp);
274 +-__efistub_memchr = KALLSYMS_HIDE(__pi_memchr);
275 +-__efistub_memcpy = KALLSYMS_HIDE(__pi_memcpy);
276 +-__efistub_memmove = KALLSYMS_HIDE(__pi_memmove);
277 +-__efistub_memset = KALLSYMS_HIDE(__pi_memset);
278 +-__efistub_strlen = KALLSYMS_HIDE(__pi_strlen);
279 +-__efistub_strnlen = KALLSYMS_HIDE(__pi_strnlen);
280 +-__efistub_strcmp = KALLSYMS_HIDE(__pi_strcmp);
281 +-__efistub_strncmp = KALLSYMS_HIDE(__pi_strncmp);
282 +-__efistub_strrchr = KALLSYMS_HIDE(__pi_strrchr);
283 +-__efistub___flush_dcache_area = KALLSYMS_HIDE(__pi___flush_dcache_area);
284 ++__efistub_memcmp = __pi_memcmp;
285 ++__efistub_memchr = __pi_memchr;
286 ++__efistub_memcpy = __pi_memcpy;
287 ++__efistub_memmove = __pi_memmove;
288 ++__efistub_memset = __pi_memset;
289 ++__efistub_strlen = __pi_strlen;
290 ++__efistub_strnlen = __pi_strnlen;
291 ++__efistub_strcmp = __pi_strcmp;
292 ++__efistub_strncmp = __pi_strncmp;
293 ++__efistub_strrchr = __pi_strrchr;
294 ++__efistub___flush_dcache_area = __pi___flush_dcache_area;
295 +
296 + #ifdef CONFIG_KASAN
297 +-__efistub___memcpy = KALLSYMS_HIDE(__pi_memcpy);
298 +-__efistub___memmove = KALLSYMS_HIDE(__pi_memmove);
299 +-__efistub___memset = KALLSYMS_HIDE(__pi_memset);
300 ++__efistub___memcpy = __pi_memcpy;
301 ++__efistub___memmove = __pi_memmove;
302 ++__efistub___memset = __pi_memset;
303 + #endif
304 +
305 +-__efistub__text = KALLSYMS_HIDE(_text);
306 +-__efistub__end = KALLSYMS_HIDE(_end);
307 +-__efistub__edata = KALLSYMS_HIDE(_edata);
308 +-__efistub_screen_info = KALLSYMS_HIDE(screen_info);
309 ++__efistub__text = _text;
310 ++__efistub__end = _end;
311 ++__efistub__edata = _edata;
312 ++__efistub_screen_info = screen_info;
313 +
314 + #endif
315 +
316 +diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
317 +index 605d1b60469c..74e469f8a850 100644
318 +--- a/arch/arm64/kernel/vmlinux.lds.S
319 ++++ b/arch/arm64/kernel/vmlinux.lds.S
320 +@@ -99,7 +99,8 @@ SECTIONS
321 + *(.discard)
322 + *(.discard.*)
323 + *(.interp .dynamic)
324 +- *(.dynsym .dynstr .hash)
325 ++ *(.dynsym .dynstr .hash .gnu.hash)
326 ++ *(.eh_frame)
327 + }
328 +
329 + . = KIMAGE_VADDR + TEXT_OFFSET;
330 +@@ -176,12 +177,12 @@ SECTIONS
331 +
332 + PERCPU_SECTION(L1_CACHE_BYTES)
333 +
334 +- .rela : ALIGN(8) {
335 ++ .rela.dyn : ALIGN(8) {
336 + *(.rela .rela*)
337 + }
338 +
339 +- __rela_offset = ABSOLUTE(ADDR(.rela) - KIMAGE_VADDR);
340 +- __rela_size = SIZEOF(.rela);
341 ++ __rela_offset = ABSOLUTE(ADDR(.rela.dyn) - KIMAGE_VADDR);
342 ++ __rela_size = SIZEOF(.rela.dyn);
343 +
344 + . = ALIGN(SEGMENT_ALIGN);
345 + __initdata_end = .;
346 +diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
347 +index 5d3596c180f9..de44899c0e61 100644
348 +--- a/arch/m68k/kernel/setup_mm.c
349 ++++ b/arch/m68k/kernel/setup_mm.c
350 +@@ -165,8 +165,6 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
351 + be32_to_cpu(m->addr);
352 + m68k_memory[m68k_num_memory].size =
353 + be32_to_cpu(m->size);
354 +- memblock_add(m68k_memory[m68k_num_memory].addr,
355 +- m68k_memory[m68k_num_memory].size);
356 + m68k_num_memory++;
357 + } else
358 + pr_warn("%s: too many memory chunks\n",
359 +diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
360 +index 4e17ecb5928a..2eb2b31fb16a 100644
361 +--- a/arch/m68k/mm/motorola.c
362 ++++ b/arch/m68k/mm/motorola.c
363 +@@ -228,6 +228,7 @@ void __init paging_init(void)
364 +
365 + min_addr = m68k_memory[0].addr;
366 + max_addr = min_addr + m68k_memory[0].size;
367 ++ memblock_add(m68k_memory[0].addr, m68k_memory[0].size);
368 + for (i = 1; i < m68k_num_memory;) {
369 + if (m68k_memory[i].addr < min_addr) {
370 + printk("Ignoring memory chunk at 0x%lx:0x%lx before the first chunk\n",
371 +@@ -238,6 +239,7 @@ void __init paging_init(void)
372 + (m68k_num_memory - i) * sizeof(struct m68k_mem_info));
373 + continue;
374 + }
375 ++ memblock_add(m68k_memory[i].addr, m68k_memory[i].size);
376 + addr = m68k_memory[i].addr + m68k_memory[i].size;
377 + if (addr > max_addr)
378 + max_addr = addr;
379 +diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
380 +index d2824b0cc142..c4c03992ee82 100644
381 +--- a/arch/powerpc/Makefile
382 ++++ b/arch/powerpc/Makefile
383 +@@ -160,8 +160,17 @@ else
384 + CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
385 + endif
386 +
387 ++ifdef CONFIG_FUNCTION_TRACER
388 ++CC_FLAGS_FTRACE := -pg
389 + ifdef CONFIG_MPROFILE_KERNEL
390 +- CC_FLAGS_FTRACE := -pg -mprofile-kernel
391 ++CC_FLAGS_FTRACE += -mprofile-kernel
392 ++endif
393 ++# Work around gcc code-gen bugs with -pg / -fno-omit-frame-pointer in gcc <= 4.8
394 ++# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44199
395 ++# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52828
396 ++ifneq ($(cc-name),clang)
397 ++CC_FLAGS_FTRACE += $(call cc-ifversion, -lt, 0409, -mno-sched-epilog)
398 ++endif
399 + endif
400 +
401 + CFLAGS-$(CONFIG_TARGET_CPU_BOOL) += $(call cc-option,-mcpu=$(CONFIG_TARGET_CPU))
402 +@@ -229,11 +238,6 @@ ifdef CONFIG_6xx
403 + KBUILD_CFLAGS += -mcpu=powerpc
404 + endif
405 +
406 +-# Work around a gcc code-gen bug with -fno-omit-frame-pointer.
407 +-ifdef CONFIG_FUNCTION_TRACER
408 +-KBUILD_CFLAGS += -mno-sched-epilog
409 +-endif
410 +-
411 + cpu-as-$(CONFIG_4xx) += -Wa,-m405
412 + cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec)
413 + cpu-as-$(CONFIG_E200) += -Wa,-me200
414 +@@ -408,36 +412,9 @@ archprepare: checkbin
415 + # to stdout and these checks are run even on install targets.
416 + TOUT := .tmp_gas_check
417 +
418 +-# Check gcc and binutils versions:
419 +-# - gcc-3.4 and binutils-2.14 are a fatal combination
420 +-# - Require gcc 4.0 or above on 64-bit
421 +-# - gcc-4.2.0 has issues compiling modules on 64-bit
422 ++# Check toolchain versions:
423 ++# - gcc-4.6 is the minimum kernel-wide version so nothing required.
424 + checkbin:
425 +- @if test "$(cc-name)" != "clang" \
426 +- && test "$(cc-version)" = "0304" ; then \
427 +- if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \
428 +- echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \
429 +- echo 'correctly with gcc-3.4 and your version of binutils.'; \
430 +- echo '*** Please upgrade your binutils or downgrade your gcc'; \
431 +- false; \
432 +- fi ; \
433 +- fi
434 +- @if test "$(cc-name)" != "clang" \
435 +- && test "$(cc-version)" -lt "0400" \
436 +- && test "x${CONFIG_PPC64}" = "xy" ; then \
437 +- echo -n "Sorry, GCC v4.0 or above is required to build " ; \
438 +- echo "the 64-bit powerpc kernel." ; \
439 +- false ; \
440 +- fi
441 +- @if test "$(cc-name)" != "clang" \
442 +- && test "$(cc-fullversion)" = "040200" \
443 +- && test "x${CONFIG_MODULES}${CONFIG_PPC64}" = "xyy" ; then \
444 +- echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \
445 +- echo 'kernel with modules enabled.' ; \
446 +- echo -n '*** Please use a different GCC version or ' ; \
447 +- echo 'disable kernel modules' ; \
448 +- false ; \
449 +- fi
450 + @if test "x${CONFIG_CPU_LITTLE_ENDIAN}" = "xy" \
451 + && $(LD) --version | head -1 | grep ' 2\.24$$' >/dev/null ; then \
452 + echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
453 +diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
454 +index 0fb96c26136f..25e3184f11f7 100644
455 +--- a/arch/powerpc/boot/Makefile
456 ++++ b/arch/powerpc/boot/Makefile
457 +@@ -55,6 +55,11 @@ BOOTAFLAGS := -D__ASSEMBLY__ $(BOOTCFLAGS) -traditional -nostdinc
458 +
459 + BOOTARFLAGS := -cr$(KBUILD_ARFLAGS)
460 +
461 ++ifdef CONFIG_CC_IS_CLANG
462 ++BOOTCFLAGS += $(CLANG_FLAGS)
463 ++BOOTAFLAGS += $(CLANG_FLAGS)
464 ++endif
465 ++
466 + ifdef CONFIG_DEBUG_INFO
467 + BOOTCFLAGS += -g
468 + endif
469 +diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
470 +index 32dfe6d083f3..9b9d17437373 100644
471 +--- a/arch/powerpc/boot/crt0.S
472 ++++ b/arch/powerpc/boot/crt0.S
473 +@@ -15,7 +15,7 @@
474 + RELA = 7
475 + RELACOUNT = 0x6ffffff9
476 +
477 +- .text
478 ++ .data
479 + /* A procedure descriptor used when booting this as a COFF file.
480 + * When making COFF, this comes first in the link and we're
481 + * linked at 0x500000.
482 +@@ -23,6 +23,8 @@ RELACOUNT = 0x6ffffff9
483 + .globl _zimage_start_opd
484 + _zimage_start_opd:
485 + .long 0x500000, 0, 0, 0
486 ++ .text
487 ++ b _zimage_start
488 +
489 + #ifdef __powerpc64__
490 + .balign 8
491 +diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
492 +index 3b66f2c19c84..eac18790d1b1 100644
493 +--- a/arch/powerpc/kernel/Makefile
494 ++++ b/arch/powerpc/kernel/Makefile
495 +@@ -5,6 +5,9 @@
496 +
497 + CFLAGS_ptrace.o += -DUTS_MACHINE='"$(UTS_MACHINE)"'
498 +
499 ++# Disable clang warning for using setjmp without setjmp.h header
500 ++CFLAGS_crash.o += $(call cc-disable-warning, builtin-requires-header)
501 ++
502 + subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
503 +
504 + ifdef CONFIG_PPC64
505 +@@ -22,10 +25,10 @@ CFLAGS_prom.o += $(DISABLE_LATENT_ENTROPY_PLUGIN)
506 +
507 + ifdef CONFIG_FUNCTION_TRACER
508 + # Do not trace early boot code
509 +-CFLAGS_REMOVE_cputable.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
510 +-CFLAGS_REMOVE_prom_init.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
511 +-CFLAGS_REMOVE_btext.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
512 +-CFLAGS_REMOVE_prom.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
513 ++CFLAGS_REMOVE_cputable.o = $(CC_FLAGS_FTRACE)
514 ++CFLAGS_REMOVE_prom_init.o = $(CC_FLAGS_FTRACE)
515 ++CFLAGS_REMOVE_btext.o = $(CC_FLAGS_FTRACE)
516 ++CFLAGS_REMOVE_prom.o = $(CC_FLAGS_FTRACE)
517 + endif
518 +
519 + obj-y := cputable.o ptrace.o syscalls.o \
520 +diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
521 +index 6327fd79b0fb..fd59fef9931b 100644
522 +--- a/arch/powerpc/kernel/signal_32.c
523 ++++ b/arch/powerpc/kernel/signal_32.c
524 +@@ -848,7 +848,23 @@ static long restore_tm_user_regs(struct pt_regs *regs,
525 + /* If TM bits are set to the reserved value, it's an invalid context */
526 + if (MSR_TM_RESV(msr_hi))
527 + return 1;
528 +- /* Pull in the MSR TM bits from the user context */
529 ++
530 ++ /*
531 ++ * Disabling preemption, since it is unsafe to be preempted
532 ++ * with MSR[TS] set without recheckpointing.
533 ++ */
534 ++ preempt_disable();
535 ++
536 ++ /*
537 ++ * CAUTION:
538 ++ * After regs->MSR[TS] being updated, make sure that get_user(),
539 ++ * put_user() or similar functions are *not* called. These
540 ++ * functions can generate page faults which will cause the process
541 ++ * to be de-scheduled with MSR[TS] set but without calling
542 ++ * tm_recheckpoint(). This can cause a bug.
543 ++ *
544 ++ * Pull in the MSR TM bits from the user context
545 ++ */
546 + regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr_hi & MSR_TS_MASK);
547 + /* Now, recheckpoint. This loads up all of the checkpointed (older)
548 + * registers, including FP and V[S]Rs. After recheckpointing, the
549 +@@ -873,6 +889,8 @@ static long restore_tm_user_regs(struct pt_regs *regs,
550 + }
551 + #endif
552 +
553 ++ preempt_enable();
554 ++
555 + return 0;
556 + }
557 + #endif
558 +@@ -1140,11 +1158,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
559 + {
560 + struct rt_sigframe __user *rt_sf;
561 + struct pt_regs *regs = current_pt_regs();
562 +- int tm_restore = 0;
563 + #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
564 + struct ucontext __user *uc_transact;
565 + unsigned long msr_hi;
566 + unsigned long tmp;
567 ++ int tm_restore = 0;
568 + #endif
569 + /* Always make any pending restarted system calls return -EINTR */
570 + current->restart_block.fn = do_no_restart_syscall;
571 +@@ -1192,19 +1210,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
572 + goto bad;
573 + }
574 + }
575 +- if (!tm_restore) {
576 +- /*
577 +- * Unset regs->msr because ucontext MSR TS is not
578 +- * set, and recheckpoint was not called. This avoid
579 +- * hitting a TM Bad thing at RFID
580 +- */
581 +- regs->msr &= ~MSR_TS_MASK;
582 +- }
583 +- /* Fall through, for non-TM restore */
584 +-#endif
585 + if (!tm_restore)
586 +- if (do_setcontext(&rt_sf->uc, regs, 1))
587 +- goto bad;
588 ++ /* Fall through, for non-TM restore */
589 ++#endif
590 ++ if (do_setcontext(&rt_sf->uc, regs, 1))
591 ++ goto bad;
592 +
593 + /*
594 + * It's not clear whether or why it is desirable to save the
595 +diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
596 +index daa28cb72272..bbd1c73243d7 100644
597 +--- a/arch/powerpc/kernel/signal_64.c
598 ++++ b/arch/powerpc/kernel/signal_64.c
599 +@@ -467,20 +467,6 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
600 + if (MSR_TM_RESV(msr))
601 + return -EINVAL;
602 +
603 +- /* pull in MSR TS bits from user context */
604 +- regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK);
605 +-
606 +- /*
607 +- * Ensure that TM is enabled in regs->msr before we leave the signal
608 +- * handler. It could be the case that (a) user disabled the TM bit
609 +- * through the manipulation of the MSR bits in uc_mcontext or (b) the
610 +- * TM bit was disabled because a sufficient number of context switches
611 +- * happened whilst in the signal handler and load_tm overflowed,
612 +- * disabling the TM bit. In either case we can end up with an illegal
613 +- * TM state leading to a TM Bad Thing when we return to userspace.
614 +- */
615 +- regs->msr |= MSR_TM;
616 +-
617 + /* pull in MSR LE from user context */
618 + regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE);
619 +
620 +@@ -572,6 +558,34 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
621 + tm_enable();
622 + /* Make sure the transaction is marked as failed */
623 + tsk->thread.tm_texasr |= TEXASR_FS;
624 ++
625 ++ /*
626 ++ * Disabling preemption, since it is unsafe to be preempted
627 ++ * with MSR[TS] set without recheckpointing.
628 ++ */
629 ++ preempt_disable();
630 ++
631 ++ /* pull in MSR TS bits from user context */
632 ++ regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK);
633 ++
634 ++ /*
635 ++ * Ensure that TM is enabled in regs->msr before we leave the signal
636 ++ * handler. It could be the case that (a) user disabled the TM bit
637 ++ * through the manipulation of the MSR bits in uc_mcontext or (b) the
638 ++ * TM bit was disabled because a sufficient number of context switches
639 ++ * happened whilst in the signal handler and load_tm overflowed,
640 ++ * disabling the TM bit. In either case we can end up with an illegal
641 ++ * TM state leading to a TM Bad Thing when we return to userspace.
642 ++ *
643 ++ * CAUTION:
644 ++ * After regs->MSR[TS] being updated, make sure that get_user(),
645 ++ * put_user() or similar functions are *not* called. These
646 ++ * functions can generate page faults which will cause the process
647 ++ * to be de-scheduled with MSR[TS] set but without calling
648 ++ * tm_recheckpoint(). This can cause a bug.
649 ++ */
650 ++ regs->msr |= MSR_TM;
651 ++
652 + /* This loads the checkpointed FP/VEC state, if used */
653 + tm_recheckpoint(&tsk->thread);
654 +
655 +@@ -585,6 +599,8 @@ static long restore_tm_sigcontexts(struct task_struct *tsk,
656 + regs->msr |= MSR_VEC;
657 + }
658 +
659 ++ preempt_enable();
660 ++
661 + return err;
662 + }
663 + #endif
664 +@@ -740,23 +756,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
665 + &uc_transact->uc_mcontext))
666 + goto badframe;
667 + }
668 +-#endif
669 ++ else
670 + /* Fall through, for non-TM restore */
671 +- if (!MSR_TM_ACTIVE(msr)) {
672 +- /*
673 +- * Unset MSR[TS] on the thread regs since MSR from user
674 +- * context does not have MSR active, and recheckpoint was
675 +- * not called since restore_tm_sigcontexts() was not called
676 +- * also.
677 +- *
678 +- * If not unsetting it, the code can RFID to userspace with
679 +- * MSR[TS] set, but without CPU in the proper state,
680 +- * causing a TM bad thing.
681 +- */
682 +- current->thread.regs->msr &= ~MSR_TS_MASK;
683 +- if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext))
684 +- goto badframe;
685 +- }
686 ++#endif
687 ++ if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext))
688 ++ goto badframe;
689 +
690 + if (restore_altstack(&uc->uc_stack))
691 + goto badframe;
692 +diff --git a/arch/powerpc/kernel/trace/Makefile b/arch/powerpc/kernel/trace/Makefile
693 +index d22d8bafb643..d868ba42032f 100644
694 +--- a/arch/powerpc/kernel/trace/Makefile
695 ++++ b/arch/powerpc/kernel/trace/Makefile
696 +@@ -7,7 +7,7 @@ subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
697 +
698 + ifdef CONFIG_FUNCTION_TRACER
699 + # do not trace tracer code
700 +-CFLAGS_REMOVE_ftrace.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
701 ++CFLAGS_REMOVE_ftrace.o = $(CC_FLAGS_FTRACE)
702 + endif
703 +
704 + obj32-$(CONFIG_FUNCTION_TRACER) += ftrace_32.o
705 +diff --git a/arch/powerpc/mm/dump_linuxpagetables.c b/arch/powerpc/mm/dump_linuxpagetables.c
706 +index bdf33b989f98..8464c2c01c0c 100644
707 +--- a/arch/powerpc/mm/dump_linuxpagetables.c
708 ++++ b/arch/powerpc/mm/dump_linuxpagetables.c
709 +@@ -19,6 +19,7 @@
710 + #include <linux/hugetlb.h>
711 + #include <linux/io.h>
712 + #include <linux/mm.h>
713 ++#include <linux/highmem.h>
714 + #include <linux/sched.h>
715 + #include <linux/seq_file.h>
716 + #include <asm/fixmap.h>
717 +diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
718 +index 7a9886f98b0c..a5091c034747 100644
719 +--- a/arch/powerpc/mm/init_64.c
720 ++++ b/arch/powerpc/mm/init_64.c
721 +@@ -188,15 +188,20 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
722 + pr_debug("vmemmap_populate %lx..%lx, node %d\n", start, end, node);
723 +
724 + for (; start < end; start += page_size) {
725 +- void *p;
726 ++ void *p = NULL;
727 + int rc;
728 +
729 + if (vmemmap_populated(start, page_size))
730 + continue;
731 +
732 ++ /*
733 ++ * Allocate from the altmap first if we have one. This may
734 ++ * fail due to alignment issues when using 16MB hugepages, so
735 ++ * fall back to system memory if the altmap allocation fail.
736 ++ */
737 + if (altmap)
738 + p = altmap_alloc_block_buf(page_size, altmap);
739 +- else
740 ++ if (!p)
741 + p = vmemmap_alloc_block_buf(page_size, node);
742 + if (!p)
743 + return -ENOMEM;
744 +@@ -255,8 +260,15 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
745 + {
746 + unsigned long page_size = 1 << mmu_psize_defs[mmu_vmemmap_psize].shift;
747 + unsigned long page_order = get_order(page_size);
748 ++ unsigned long alt_start = ~0, alt_end = ~0;
749 ++ unsigned long base_pfn;
750 +
751 + start = _ALIGN_DOWN(start, page_size);
752 ++ if (altmap) {
753 ++ alt_start = altmap->base_pfn;
754 ++ alt_end = altmap->base_pfn + altmap->reserve +
755 ++ altmap->free + altmap->alloc + altmap->align;
756 ++ }
757 +
758 + pr_debug("vmemmap_free %lx...%lx\n", start, end);
759 +
760 +@@ -280,8 +292,9 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
761 + page = pfn_to_page(addr >> PAGE_SHIFT);
762 + section_base = pfn_to_page(vmemmap_section_start(start));
763 + nr_pages = 1 << page_order;
764 ++ base_pfn = PHYS_PFN(addr);
765 +
766 +- if (altmap) {
767 ++ if (base_pfn >= alt_start && base_pfn < alt_end) {
768 + vmem_altmap_free(altmap, nr_pages);
769 + } else if (PageReserved(page)) {
770 + /* allocated from bootmem */
771 +diff --git a/arch/powerpc/platforms/powermac/Makefile b/arch/powerpc/platforms/powermac/Makefile
772 +index f2839eed0f89..561a67d65e4d 100644
773 +--- a/arch/powerpc/platforms/powermac/Makefile
774 ++++ b/arch/powerpc/platforms/powermac/Makefile
775 +@@ -3,7 +3,7 @@ CFLAGS_bootx_init.o += -fPIC
776 +
777 + ifdef CONFIG_FUNCTION_TRACER
778 + # Do not trace early boot code
779 +-CFLAGS_REMOVE_bootx_init.o = -mno-sched-epilog $(CC_FLAGS_FTRACE)
780 ++CFLAGS_REMOVE_bootx_init.o = $(CC_FLAGS_FTRACE)
781 + endif
782 +
783 + obj-y += pic.o setup.o time.o feature.o pci.o \
784 +diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile
785 +index 1bc3abb237cd..9d7d8e6d705c 100644
786 +--- a/arch/powerpc/xmon/Makefile
787 ++++ b/arch/powerpc/xmon/Makefile
788 +@@ -1,14 +1,17 @@
789 + # SPDX-License-Identifier: GPL-2.0
790 + # Makefile for xmon
791 +
792 +-subdir-ccflags-$(CONFIG_PPC_WERROR) := -Werror
793 ++# Disable clang warning for using setjmp without setjmp.h header
794 ++subdir-ccflags-y := $(call cc-disable-warning, builtin-requires-header)
795 ++
796 ++subdir-ccflags-$(CONFIG_PPC_WERROR) += -Werror
797 +
798 + GCOV_PROFILE := n
799 + UBSAN_SANITIZE := n
800 +
801 + # Disable ftrace for the entire directory
802 + ORIG_CFLAGS := $(KBUILD_CFLAGS)
803 +-KBUILD_CFLAGS = $(subst -mno-sched-epilog,,$(subst $(CC_FLAGS_FTRACE),,$(ORIG_CFLAGS)))
804 ++KBUILD_CFLAGS = $(subst $(CC_FLAGS_FTRACE),,$(ORIG_CFLAGS))
805 +
806 + ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC)
807 +
808 +diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h
809 +index 84bd9bdc1987..88bca456da99 100644
810 +--- a/arch/x86/include/asm/pgtable_64_types.h
811 ++++ b/arch/x86/include/asm/pgtable_64_types.h
812 +@@ -111,6 +111,11 @@ extern unsigned int ptrs_per_p4d;
813 + */
814 + #define MAXMEM (1UL << MAX_PHYSMEM_BITS)
815 +
816 ++#define GUARD_HOLE_PGD_ENTRY -256UL
817 ++#define GUARD_HOLE_SIZE (16UL << PGDIR_SHIFT)
818 ++#define GUARD_HOLE_BASE_ADDR (GUARD_HOLE_PGD_ENTRY << PGDIR_SHIFT)
819 ++#define GUARD_HOLE_END_ADDR (GUARD_HOLE_BASE_ADDR + GUARD_HOLE_SIZE)
820 ++
821 + #define LDT_PGD_ENTRY -240UL
822 + #define LDT_BASE_ADDR (LDT_PGD_ENTRY << PGDIR_SHIFT)
823 + #define LDT_END_ADDR (LDT_BASE_ADDR + PGDIR_SIZE)
824 +diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
825 +index a12afff146d1..c05a818224bb 100644
826 +--- a/arch/x86/mm/dump_pagetables.c
827 ++++ b/arch/x86/mm/dump_pagetables.c
828 +@@ -53,10 +53,10 @@ struct addr_marker {
829 + enum address_markers_idx {
830 + USER_SPACE_NR = 0,
831 + KERNEL_SPACE_NR,
832 +- LOW_KERNEL_NR,
833 +-#if defined(CONFIG_MODIFY_LDT_SYSCALL) && defined(CONFIG_X86_5LEVEL)
834 ++#ifdef CONFIG_MODIFY_LDT_SYSCALL
835 + LDT_NR,
836 + #endif
837 ++ LOW_KERNEL_NR,
838 + VMALLOC_START_NR,
839 + VMEMMAP_START_NR,
840 + #ifdef CONFIG_KASAN
841 +@@ -64,9 +64,6 @@ enum address_markers_idx {
842 + KASAN_SHADOW_END_NR,
843 + #endif
844 + CPU_ENTRY_AREA_NR,
845 +-#if defined(CONFIG_MODIFY_LDT_SYSCALL) && !defined(CONFIG_X86_5LEVEL)
846 +- LDT_NR,
847 +-#endif
848 + #ifdef CONFIG_X86_ESPFIX64
849 + ESPFIX_START_NR,
850 + #endif
851 +@@ -493,11 +490,11 @@ static inline bool is_hypervisor_range(int idx)
852 + {
853 + #ifdef CONFIG_X86_64
854 + /*
855 +- * ffff800000000000 - ffff87ffffffffff is reserved for
856 +- * the hypervisor.
857 ++ * A hole in the beginning of kernel address space reserved
858 ++ * for a hypervisor.
859 + */
860 +- return (idx >= pgd_index(__PAGE_OFFSET) - 16) &&
861 +- (idx < pgd_index(__PAGE_OFFSET));
862 ++ return (idx >= pgd_index(GUARD_HOLE_BASE_ADDR)) &&
863 ++ (idx < pgd_index(GUARD_HOLE_END_ADDR));
864 + #else
865 + return false;
866 + #endif
867 +diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
868 +index 2c84c6ad8b50..c8f011e07a15 100644
869 +--- a/arch/x86/xen/mmu_pv.c
870 ++++ b/arch/x86/xen/mmu_pv.c
871 +@@ -640,19 +640,20 @@ static int __xen_pgd_walk(struct mm_struct *mm, pgd_t *pgd,
872 + unsigned long limit)
873 + {
874 + int i, nr, flush = 0;
875 +- unsigned hole_low, hole_high;
876 ++ unsigned hole_low = 0, hole_high = 0;
877 +
878 + /* The limit is the last byte to be touched */
879 + limit--;
880 + BUG_ON(limit >= FIXADDR_TOP);
881 +
882 ++#ifdef CONFIG_X86_64
883 + /*
884 + * 64-bit has a great big hole in the middle of the address
885 +- * space, which contains the Xen mappings. On 32-bit these
886 +- * will end up making a zero-sized hole and so is a no-op.
887 ++ * space, which contains the Xen mappings.
888 + */
889 +- hole_low = pgd_index(USER_LIMIT);
890 +- hole_high = pgd_index(PAGE_OFFSET);
891 ++ hole_low = pgd_index(GUARD_HOLE_BASE_ADDR);
892 ++ hole_high = pgd_index(GUARD_HOLE_END_ADDR);
893 ++#endif
894 +
895 + nr = pgd_index(limit) + 1;
896 + for (i = 0; i < nr; i++) {
897 +diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
898 +index 29bfe8017a2d..da1de190a3b1 100644
899 +--- a/block/blk-mq-sched.c
900 ++++ b/block/blk-mq-sched.c
901 +@@ -54,13 +54,14 @@ void blk_mq_sched_assign_ioc(struct request *rq, struct bio *bio)
902 + * Mark a hardware queue as needing a restart. For shared queues, maintain
903 + * a count of how many hardware queues are marked for restart.
904 + */
905 +-static void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
906 ++void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
907 + {
908 + if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
909 + return;
910 +
911 + set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
912 + }
913 ++EXPORT_SYMBOL_GPL(blk_mq_sched_mark_restart_hctx);
914 +
915 + void blk_mq_sched_restart(struct blk_mq_hw_ctx *hctx)
916 + {
917 +diff --git a/block/blk-mq-sched.h b/block/blk-mq-sched.h
918 +index 4e028ee42430..fe660764b8d1 100644
919 +--- a/block/blk-mq-sched.h
920 ++++ b/block/blk-mq-sched.h
921 +@@ -15,6 +15,7 @@ bool blk_mq_sched_try_merge(struct request_queue *q, struct bio *bio,
922 + struct request **merged_request);
923 + bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio);
924 + bool blk_mq_sched_try_insert_merge(struct request_queue *q, struct request *rq);
925 ++void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx);
926 + void blk_mq_sched_restart(struct blk_mq_hw_ctx *hctx);
927 +
928 + void blk_mq_sched_insert_request(struct request *rq, bool at_head,
929 +diff --git a/block/blk-stat.h b/block/blk-stat.h
930 +index f4a1568e81a4..17b47a86eefb 100644
931 +--- a/block/blk-stat.h
932 ++++ b/block/blk-stat.h
933 +@@ -145,6 +145,11 @@ static inline void blk_stat_activate_nsecs(struct blk_stat_callback *cb,
934 + mod_timer(&cb->timer, jiffies + nsecs_to_jiffies(nsecs));
935 + }
936 +
937 ++static inline void blk_stat_deactivate(struct blk_stat_callback *cb)
938 ++{
939 ++ del_timer_sync(&cb->timer);
940 ++}
941 ++
942 + /**
943 + * blk_stat_activate_msecs() - Gather block statistics during a time window in
944 + * milliseconds.
945 +diff --git a/block/blk-wbt.c b/block/blk-wbt.c
946 +index 8ac93fcbaa2e..0c62bf4eca75 100644
947 +--- a/block/blk-wbt.c
948 ++++ b/block/blk-wbt.c
949 +@@ -760,8 +760,10 @@ void wbt_disable_default(struct request_queue *q)
950 + if (!rqos)
951 + return;
952 + rwb = RQWB(rqos);
953 +- if (rwb->enable_state == WBT_STATE_ON_DEFAULT)
954 ++ if (rwb->enable_state == WBT_STATE_ON_DEFAULT) {
955 ++ blk_stat_deactivate(rwb->cb);
956 + rwb->wb_normal = 0;
957 ++ }
958 + }
959 + EXPORT_SYMBOL_GPL(wbt_disable_default);
960 +
961 +diff --git a/block/mq-deadline.c b/block/mq-deadline.c
962 +index 099a9e05854c..d5e21ce44d2c 100644
963 +--- a/block/mq-deadline.c
964 ++++ b/block/mq-deadline.c
965 +@@ -373,9 +373,16 @@ done:
966 +
967 + /*
968 + * One confusing aspect here is that we get called for a specific
969 +- * hardware queue, but we return a request that may not be for a
970 ++ * hardware queue, but we may return a request that is for a
971 + * different hardware queue. This is because mq-deadline has shared
972 + * state for all hardware queues, in terms of sorting, FIFOs, etc.
973 ++ *
974 ++ * For a zoned block device, __dd_dispatch_request() may return NULL
975 ++ * if all the queued write requests are directed at zones that are already
976 ++ * locked due to on-going write requests. In this case, make sure to mark
977 ++ * the queue as needing a restart to ensure that the queue is run again
978 ++ * and the pending writes dispatched once the target zones for the ongoing
979 ++ * write requests are unlocked in dd_finish_request().
980 + */
981 + static struct request *dd_dispatch_request(struct blk_mq_hw_ctx *hctx)
982 + {
983 +@@ -384,6 +391,9 @@ static struct request *dd_dispatch_request(struct blk_mq_hw_ctx *hctx)
984 +
985 + spin_lock(&dd->lock);
986 + rq = __dd_dispatch_request(dd);
987 ++ if (!rq && blk_queue_is_zoned(hctx->queue) &&
988 ++ !list_empty(&dd->fifo_list[WRITE]))
989 ++ blk_mq_sched_mark_restart_hctx(hctx);
990 + spin_unlock(&dd->lock);
991 +
992 + return rq;
993 +diff --git a/drivers/auxdisplay/charlcd.c b/drivers/auxdisplay/charlcd.c
994 +index 81c22d20d9d9..60e0b772673f 100644
995 +--- a/drivers/auxdisplay/charlcd.c
996 ++++ b/drivers/auxdisplay/charlcd.c
997 +@@ -538,6 +538,9 @@ static inline int handle_lcd_special_code(struct charlcd *lcd)
998 + }
999 + case 'x': /* gotoxy : LxXXX[yYYY]; */
1000 + case 'y': /* gotoxy : LyYYY[xXXX]; */
1001 ++ if (priv->esc_seq.buf[priv->esc_seq.len - 1] != ';')
1002 ++ break;
1003 ++
1004 + /* If the command is valid, move to the new address */
1005 + if (parse_xy(esc, &priv->addr.x, &priv->addr.y))
1006 + charlcd_gotoxy(lcd);
1007 +diff --git a/drivers/base/dd.c b/drivers/base/dd.c
1008 +index edfc9f0b1180..2607f859881a 100644
1009 +--- a/drivers/base/dd.c
1010 ++++ b/drivers/base/dd.c
1011 +@@ -931,11 +931,11 @@ static void __device_release_driver(struct device *dev, struct device *parent)
1012 +
1013 + while (device_links_busy(dev)) {
1014 + device_unlock(dev);
1015 +- if (parent)
1016 ++ if (parent && dev->bus->need_parent_lock)
1017 + device_unlock(parent);
1018 +
1019 + device_links_unbind_consumers(dev);
1020 +- if (parent)
1021 ++ if (parent && dev->bus->need_parent_lock)
1022 + device_lock(parent);
1023 +
1024 + device_lock(dev);
1025 +diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
1026 +index 66921427d109..e19bf0a750cf 100644
1027 +--- a/drivers/block/zram/zram_drv.c
1028 ++++ b/drivers/block/zram/zram_drv.c
1029 +@@ -382,8 +382,10 @@ static ssize_t backing_dev_store(struct device *dev,
1030 +
1031 + bdev = bdgrab(I_BDEV(inode));
1032 + err = blkdev_get(bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL, zram);
1033 +- if (err < 0)
1034 ++ if (err < 0) {
1035 ++ bdev = NULL;
1036 + goto out;
1037 ++ }
1038 +
1039 + nr_pages = i_size_read(inode) >> PAGE_SHIFT;
1040 + bitmap_sz = BITS_TO_LONGS(nr_pages) * sizeof(long);
1041 +diff --git a/drivers/dax/pmem.c b/drivers/dax/pmem.c
1042 +index 99e2aace8078..2c1f459c0c63 100644
1043 +--- a/drivers/dax/pmem.c
1044 ++++ b/drivers/dax/pmem.c
1045 +@@ -48,9 +48,8 @@ static void dax_pmem_percpu_exit(void *data)
1046 + percpu_ref_exit(ref);
1047 + }
1048 +
1049 +-static void dax_pmem_percpu_kill(void *data)
1050 ++static void dax_pmem_percpu_kill(struct percpu_ref *ref)
1051 + {
1052 +- struct percpu_ref *ref = data;
1053 + struct dax_pmem *dax_pmem = to_dax_pmem(ref);
1054 +
1055 + dev_dbg(dax_pmem->dev, "trace\n");
1056 +@@ -112,17 +111,10 @@ static int dax_pmem_probe(struct device *dev)
1057 + }
1058 +
1059 + dax_pmem->pgmap.ref = &dax_pmem->ref;
1060 ++ dax_pmem->pgmap.kill = dax_pmem_percpu_kill;
1061 + addr = devm_memremap_pages(dev, &dax_pmem->pgmap);
1062 +- if (IS_ERR(addr)) {
1063 +- devm_remove_action(dev, dax_pmem_percpu_exit, &dax_pmem->ref);
1064 +- percpu_ref_exit(&dax_pmem->ref);
1065 ++ if (IS_ERR(addr))
1066 + return PTR_ERR(addr);
1067 +- }
1068 +-
1069 +- rc = devm_add_action_or_reset(dev, dax_pmem_percpu_kill,
1070 +- &dax_pmem->ref);
1071 +- if (rc)
1072 +- return rc;
1073 +
1074 + /* adjust the dax_region resource to the start of data */
1075 + memcpy(&res, &dax_pmem->pgmap.res, sizeof(res));
1076 +diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
1077 +index 6e02148c208b..adc768f908f1 100644
1078 +--- a/drivers/gpio/gpio-mvebu.c
1079 ++++ b/drivers/gpio/gpio-mvebu.c
1080 +@@ -773,9 +773,6 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
1081 + "marvell,armada-370-gpio"))
1082 + return 0;
1083 +
1084 +- if (IS_ERR(mvchip->clk))
1085 +- return PTR_ERR(mvchip->clk);
1086 +-
1087 + /*
1088 + * There are only two sets of PWM configuration registers for
1089 + * all the GPIO lines on those SoCs which this driver reserves
1090 +@@ -786,6 +783,9 @@ static int mvebu_pwm_probe(struct platform_device *pdev,
1091 + if (!res)
1092 + return 0;
1093 +
1094 ++ if (IS_ERR(mvchip->clk))
1095 ++ return PTR_ERR(mvchip->clk);
1096 ++
1097 + /*
1098 + * Use set A for lines of GPIO chip with id 0, B for GPIO chip
1099 + * with id 1. Don't allow further GPIO chips to be used for PWM.
1100 +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
1101 +index b31d121a876b..81001d879322 100644
1102 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
1103 ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
1104 +@@ -122,14 +122,14 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs
1105 + goto free_chunk;
1106 + }
1107 +
1108 ++ mutex_lock(&p->ctx->lock);
1109 ++
1110 + /* skip guilty context job */
1111 + if (atomic_read(&p->ctx->guilty) == 1) {
1112 + ret = -ECANCELED;
1113 + goto free_chunk;
1114 + }
1115 +
1116 +- mutex_lock(&p->ctx->lock);
1117 +-
1118 + /* get chunks */
1119 + chunk_array_user = u64_to_user_ptr(cs->in.chunks);
1120 + if (copy_from_user(chunk_array, chunk_array_user,
1121 +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
1122 +index 299def84e69c..d792735f1365 100644
1123 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
1124 ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
1125 +@@ -2894,6 +2894,7 @@ void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector)
1126 + state->underscan_enable = false;
1127 + state->underscan_hborder = 0;
1128 + state->underscan_vborder = 0;
1129 ++ state->max_bpc = 8;
1130 +
1131 + __drm_atomic_helper_connector_reset(connector, &state->base);
1132 + }
1133 +@@ -2911,6 +2912,7 @@ amdgpu_dm_connector_atomic_duplicate_state(struct drm_connector *connector)
1134 + if (new_state) {
1135 + __drm_atomic_helper_connector_duplicate_state(connector,
1136 + &new_state->base);
1137 ++ new_state->max_bpc = state->max_bpc;
1138 + return &new_state->base;
1139 + }
1140 +
1141 +diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
1142 +index 2abcd7bf104f..f889d41a281f 100644
1143 +--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
1144 ++++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
1145 +@@ -1224,8 +1224,16 @@ nv50_mstm_fini(struct nv50_mstm *mstm)
1146 + static void
1147 + nv50_mstm_init(struct nv50_mstm *mstm)
1148 + {
1149 +- if (mstm && mstm->mgr.mst_state)
1150 +- drm_dp_mst_topology_mgr_resume(&mstm->mgr);
1151 ++ int ret;
1152 ++
1153 ++ if (!mstm || !mstm->mgr.mst_state)
1154 ++ return;
1155 ++
1156 ++ ret = drm_dp_mst_topology_mgr_resume(&mstm->mgr);
1157 ++ if (ret == -1) {
1158 ++ drm_dp_mst_topology_mgr_set_mst(&mstm->mgr, false);
1159 ++ drm_kms_helper_hotplug_event(mstm->mgr.dev);
1160 ++ }
1161 + }
1162 +
1163 + static void
1164 +diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
1165 +index 79d00d861a31..01ff3c858875 100644
1166 +--- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
1167 ++++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
1168 +@@ -189,12 +189,14 @@ EXPORT_SYMBOL(rockchip_drm_psr_flush_all);
1169 + int rockchip_drm_psr_register(struct drm_encoder *encoder,
1170 + int (*psr_set)(struct drm_encoder *, bool enable))
1171 + {
1172 +- struct rockchip_drm_private *drm_drv = encoder->dev->dev_private;
1173 ++ struct rockchip_drm_private *drm_drv;
1174 + struct psr_drv *psr;
1175 +
1176 + if (!encoder || !psr_set)
1177 + return -EINVAL;
1178 +
1179 ++ drm_drv = encoder->dev->dev_private;
1180 ++
1181 + psr = kzalloc(sizeof(struct psr_drv), GFP_KERNEL);
1182 + if (!psr)
1183 + return -ENOMEM;
1184 +diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
1185 +index a3275fa66b7b..629f40424bba 100644
1186 +--- a/drivers/gpu/drm/vc4/vc4_plane.c
1187 ++++ b/drivers/gpu/drm/vc4/vc4_plane.c
1188 +@@ -322,6 +322,7 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
1189 + if (vc4_state->is_unity)
1190 + vc4_state->x_scaling[0] = VC4_SCALING_PPF;
1191 + } else {
1192 ++ vc4_state->is_yuv = false;
1193 + vc4_state->x_scaling[1] = VC4_SCALING_NONE;
1194 + vc4_state->y_scaling[1] = VC4_SCALING_NONE;
1195 + }
1196 +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
1197 +index 46182d4dd1ce..b7870e7e41d4 100644
1198 +--- a/drivers/hid/hid-ids.h
1199 ++++ b/drivers/hid/hid-ids.h
1200 +@@ -17,6 +17,9 @@
1201 + #ifndef HID_IDS_H_FILE
1202 + #define HID_IDS_H_FILE
1203 +
1204 ++#define USB_VENDOR_ID_258A 0x258a
1205 ++#define USB_DEVICE_ID_258A_6A88 0x6a88
1206 ++
1207 + #define USB_VENDOR_ID_3M 0x0596
1208 + #define USB_DEVICE_ID_3M1968 0x0500
1209 + #define USB_DEVICE_ID_3M2256 0x0502
1210 +diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c
1211 +index 1882a4ab0f29..98b059d79bc8 100644
1212 +--- a/drivers/hid/hid-ite.c
1213 ++++ b/drivers/hid/hid-ite.c
1214 +@@ -42,6 +42,7 @@ static int ite_event(struct hid_device *hdev, struct hid_field *field,
1215 +
1216 + static const struct hid_device_id ite_devices[] = {
1217 + { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
1218 ++ { HID_USB_DEVICE(USB_VENDOR_ID_258A, USB_DEVICE_ID_258A_6A88) },
1219 + { }
1220 + };
1221 + MODULE_DEVICE_TABLE(hid, ite_devices);
1222 +diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig
1223 +index 97954f575c3f..1c1a2514d6f3 100644
1224 +--- a/drivers/hv/Kconfig
1225 ++++ b/drivers/hv/Kconfig
1226 +@@ -4,7 +4,7 @@ menu "Microsoft Hyper-V guest support"
1227 +
1228 + config HYPERV
1229 + tristate "Microsoft Hyper-V client drivers"
1230 +- depends on X86 && ACPI && PCI && X86_LOCAL_APIC && HYPERVISOR_GUEST
1231 ++ depends on X86 && ACPI && X86_LOCAL_APIC && HYPERVISOR_GUEST
1232 + select PARAVIRT
1233 + help
1234 + Select this option to run Linux as a Hyper-V client operating
1235 +diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
1236 +index d293e55553bd..ba7aaf421f36 100644
1237 +--- a/drivers/hwtracing/intel_th/msu.c
1238 ++++ b/drivers/hwtracing/intel_th/msu.c
1239 +@@ -1423,7 +1423,8 @@ nr_pages_store(struct device *dev, struct device_attribute *attr,
1240 + if (!end)
1241 + break;
1242 +
1243 +- len -= end - p;
1244 ++ /* consume the number and the following comma, hence +1 */
1245 ++ len -= end - p + 1;
1246 + p = end + 1;
1247 + } while (len);
1248 +
1249 +diff --git a/drivers/iio/dac/ad5686.c b/drivers/iio/dac/ad5686.c
1250 +index 2ddbfc3fdbae..cba62ad26cd8 100644
1251 +--- a/drivers/iio/dac/ad5686.c
1252 ++++ b/drivers/iio/dac/ad5686.c
1253 +@@ -124,7 +124,8 @@ static int ad5686_read_raw(struct iio_dev *indio_dev,
1254 + mutex_unlock(&indio_dev->mlock);
1255 + if (ret < 0)
1256 + return ret;
1257 +- *val = ret;
1258 ++ *val = (ret >> chan->scan_type.shift) &
1259 ++ GENMASK(chan->scan_type.realbits - 1, 0);
1260 + return IIO_VAL_INT;
1261 + case IIO_CHAN_INFO_SCALE:
1262 + *val = st->vref_mv;
1263 +diff --git a/drivers/infiniband/core/roce_gid_mgmt.c b/drivers/infiniband/core/roce_gid_mgmt.c
1264 +index 25d43c8f1c2a..558de0b9895c 100644
1265 +--- a/drivers/infiniband/core/roce_gid_mgmt.c
1266 ++++ b/drivers/infiniband/core/roce_gid_mgmt.c
1267 +@@ -267,6 +267,9 @@ is_upper_ndev_bond_master_filter(struct ib_device *ib_dev, u8 port,
1268 + struct net_device *cookie_ndev = cookie;
1269 + bool match = false;
1270 +
1271 ++ if (!rdma_ndev)
1272 ++ return false;
1273 ++
1274 + rcu_read_lock();
1275 + if (netif_is_bond_master(cookie_ndev) &&
1276 + rdma_is_upper_dev_rcu(rdma_ndev, cookie_ndev))
1277 +diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
1278 +index f2f11e652dcd..02f36ab72ad4 100644
1279 +--- a/drivers/infiniband/hw/mlx5/devx.c
1280 ++++ b/drivers/infiniband/hw/mlx5/devx.c
1281 +@@ -857,7 +857,9 @@ static int devx_umem_get(struct mlx5_ib_dev *dev, struct ib_ucontext *ucontext,
1282 +
1283 + err = uverbs_get_flags32(&access, attrs,
1284 + MLX5_IB_ATTR_DEVX_UMEM_REG_ACCESS,
1285 +- IB_ACCESS_SUPPORTED);
1286 ++ IB_ACCESS_LOCAL_WRITE |
1287 ++ IB_ACCESS_REMOTE_WRITE |
1288 ++ IB_ACCESS_REMOTE_READ);
1289 + if (err)
1290 + return err;
1291 +
1292 +diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
1293 +index fc6c880756da..4111b798fd3c 100644
1294 +--- a/drivers/infiniband/sw/rxe/rxe_resp.c
1295 ++++ b/drivers/infiniband/sw/rxe/rxe_resp.c
1296 +@@ -844,11 +844,16 @@ static enum resp_states do_complete(struct rxe_qp *qp,
1297 +
1298 + memset(&cqe, 0, sizeof(cqe));
1299 +
1300 +- wc->wr_id = wqe->wr_id;
1301 +- wc->status = qp->resp.status;
1302 +- wc->qp = &qp->ibqp;
1303 ++ if (qp->rcq->is_user) {
1304 ++ uwc->status = qp->resp.status;
1305 ++ uwc->qp_num = qp->ibqp.qp_num;
1306 ++ uwc->wr_id = wqe->wr_id;
1307 ++ } else {
1308 ++ wc->status = qp->resp.status;
1309 ++ wc->qp = &qp->ibqp;
1310 ++ wc->wr_id = wqe->wr_id;
1311 ++ }
1312 +
1313 +- /* fields after status are not required for errors */
1314 + if (wc->status == IB_WC_SUCCESS) {
1315 + wc->opcode = (pkt->mask & RXE_IMMDT_MASK &&
1316 + pkt->mask & RXE_WRITE_MASK) ?
1317 +diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
1318 +index f37cbad022a2..f4bce5aa0ff8 100644
1319 +--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
1320 ++++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
1321 +@@ -2009,6 +2009,14 @@ static void srpt_free_ch(struct kref *kref)
1322 + kfree_rcu(ch, rcu);
1323 + }
1324 +
1325 ++/*
1326 ++ * Shut down the SCSI target session, tell the connection manager to
1327 ++ * disconnect the associated RDMA channel, transition the QP to the error
1328 ++ * state and remove the channel from the channel list. This function is
1329 ++ * typically called from inside srpt_zerolength_write_done(). Concurrent
1330 ++ * srpt_zerolength_write() calls from inside srpt_close_ch() are possible
1331 ++ * as long as the channel is on sport->nexus_list.
1332 ++ */
1333 + static void srpt_release_channel_work(struct work_struct *w)
1334 + {
1335 + struct srpt_rdma_ch *ch;
1336 +@@ -2036,6 +2044,11 @@ static void srpt_release_channel_work(struct work_struct *w)
1337 + else
1338 + ib_destroy_cm_id(ch->ib_cm.cm_id);
1339 +
1340 ++ sport = ch->sport;
1341 ++ mutex_lock(&sport->mutex);
1342 ++ list_del_rcu(&ch->list);
1343 ++ mutex_unlock(&sport->mutex);
1344 ++
1345 + srpt_destroy_ch_ib(ch);
1346 +
1347 + srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring,
1348 +@@ -2046,11 +2059,6 @@ static void srpt_release_channel_work(struct work_struct *w)
1349 + sdev, ch->rq_size,
1350 + srp_max_req_size, DMA_FROM_DEVICE);
1351 +
1352 +- sport = ch->sport;
1353 +- mutex_lock(&sport->mutex);
1354 +- list_del_rcu(&ch->list);
1355 +- mutex_unlock(&sport->mutex);
1356 +-
1357 + wake_up(&sport->ch_releaseQ);
1358 +
1359 + kref_put(&ch->kref, srpt_free_ch);
1360 +diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c
1361 +index a7dc286f406c..840e53732753 100644
1362 +--- a/drivers/input/keyboard/omap4-keypad.c
1363 ++++ b/drivers/input/keyboard/omap4-keypad.c
1364 +@@ -126,12 +126,8 @@ static irqreturn_t omap4_keypad_irq_handler(int irq, void *dev_id)
1365 + {
1366 + struct omap4_keypad *keypad_data = dev_id;
1367 +
1368 +- if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)) {
1369 +- /* Disable interrupts */
1370 +- kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
1371 +- OMAP4_VAL_IRQDISABLE);
1372 ++ if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS))
1373 + return IRQ_WAKE_THREAD;
1374 +- }
1375 +
1376 + return IRQ_NONE;
1377 + }
1378 +@@ -173,11 +169,6 @@ static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id)
1379 + kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
1380 + kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
1381 +
1382 +- /* enable interrupts */
1383 +- kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
1384 +- OMAP4_DEF_IRQENABLE_EVENTEN |
1385 +- OMAP4_DEF_IRQENABLE_LONGKEY);
1386 +-
1387 + return IRQ_HANDLED;
1388 + }
1389 +
1390 +@@ -214,9 +205,10 @@ static void omap4_keypad_close(struct input_dev *input)
1391 +
1392 + disable_irq(keypad_data->irq);
1393 +
1394 +- /* Disable interrupts */
1395 ++ /* Disable interrupts and wake-up events */
1396 + kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
1397 + OMAP4_VAL_IRQDISABLE);
1398 ++ kbd_writel(keypad_data, OMAP4_KBD_WAKEUPENABLE, 0);
1399 +
1400 + /* clear pending interrupts */
1401 + kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
1402 +@@ -365,7 +357,7 @@ static int omap4_keypad_probe(struct platform_device *pdev)
1403 + }
1404 +
1405 + error = request_threaded_irq(keypad_data->irq, omap4_keypad_irq_handler,
1406 +- omap4_keypad_irq_thread_fn, 0,
1407 ++ omap4_keypad_irq_thread_fn, IRQF_ONESHOT,
1408 + "omap4-keypad", keypad_data);
1409 + if (error) {
1410 + dev_err(&pdev->dev, "failed to register interrupt\n");
1411 +diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
1412 +index 2bd5bb11c8ba..b6da0c1267e3 100644
1413 +--- a/drivers/input/mouse/synaptics.c
1414 ++++ b/drivers/input/mouse/synaptics.c
1415 +@@ -171,6 +171,7 @@ static const char * const smbus_pnp_ids[] = {
1416 + "LEN0046", /* X250 */
1417 + "LEN004a", /* W541 */
1418 + "LEN005b", /* P50 */
1419 ++ "LEN005e", /* T560 */
1420 + "LEN0071", /* T480 */
1421 + "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
1422 + "LEN0073", /* X1 Carbon G5 (Elantech) */
1423 +@@ -178,6 +179,7 @@ static const char * const smbus_pnp_ids[] = {
1424 + "LEN0096", /* X280 */
1425 + "LEN0097", /* X280 -> ALPS trackpoint */
1426 + "LEN200f", /* T450s */
1427 ++ "SYN3052", /* HP EliteBook 840 G4 */
1428 + "SYN3221", /* HP 15-ay000 */
1429 + NULL
1430 + };
1431 +diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
1432 +index a76c47f20587..4339177629e3 100644
1433 +--- a/drivers/iommu/intel-iommu.c
1434 ++++ b/drivers/iommu/intel-iommu.c
1435 +@@ -2069,7 +2069,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
1436 + * than default. Unnecessary for PT mode.
1437 + */
1438 + if (translation != CONTEXT_TT_PASS_THROUGH) {
1439 +- for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) {
1440 ++ for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) {
1441 + ret = -ENOMEM;
1442 + pgd = phys_to_virt(dma_pte_addr(pgd));
1443 + if (!dma_pte_present(pgd))
1444 +@@ -2083,7 +2083,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
1445 + translation = CONTEXT_TT_MULTI_LEVEL;
1446 +
1447 + context_set_address_root(context, virt_to_phys(pgd));
1448 +- context_set_address_width(context, iommu->agaw);
1449 ++ context_set_address_width(context, agaw);
1450 + } else {
1451 + /*
1452 + * In pass through mode, AW must be programmed to
1453 +diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
1454 +index df80c89ebe7f..5d3faae51d59 100644
1455 +--- a/drivers/leds/leds-pwm.c
1456 ++++ b/drivers/leds/leds-pwm.c
1457 +@@ -100,8 +100,9 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
1458 + led_data->pwm = devm_pwm_get(dev, led->name);
1459 + if (IS_ERR(led_data->pwm)) {
1460 + ret = PTR_ERR(led_data->pwm);
1461 +- dev_err(dev, "unable to request PWM for %s: %d\n",
1462 +- led->name, ret);
1463 ++ if (ret != -EPROBE_DEFER)
1464 ++ dev_err(dev, "unable to request PWM for %s: %d\n",
1465 ++ led->name, ret);
1466 + return ret;
1467 + }
1468 +
1469 +diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
1470 +index 39804d830305..fd5c52b21436 100644
1471 +--- a/drivers/media/pci/cx23885/cx23885-core.c
1472 ++++ b/drivers/media/pci/cx23885/cx23885-core.c
1473 +@@ -23,6 +23,7 @@
1474 + #include <linux/moduleparam.h>
1475 + #include <linux/kmod.h>
1476 + #include <linux/kernel.h>
1477 ++#include <linux/pci.h>
1478 + #include <linux/slab.h>
1479 + #include <linux/interrupt.h>
1480 + #include <linux/delay.h>
1481 +@@ -41,6 +42,18 @@ MODULE_AUTHOR("Steven Toth <stoth@×××××××.org>");
1482 + MODULE_LICENSE("GPL");
1483 + MODULE_VERSION(CX23885_VERSION);
1484 +
1485 ++/*
1486 ++ * Some platforms have been found to require periodic resetting of the DMA
1487 ++ * engine. Ryzen and XEON platforms are known to be affected. The symptom
1488 ++ * encountered is "mpeg risc op code error". Only Ryzen platforms employ
1489 ++ * this workaround if the option equals 1. The workaround can be explicitly
1490 ++ * disabled for all platforms by setting to 0, the workaround can be forced
1491 ++ * on for any platform by setting to 2.
1492 ++ */
1493 ++static unsigned int dma_reset_workaround = 1;
1494 ++module_param(dma_reset_workaround, int, 0644);
1495 ++MODULE_PARM_DESC(dma_reset_workaround, "periodic RiSC dma engine reset; 0-force disable, 1-driver detect (default), 2-force enable");
1496 ++
1497 + static unsigned int debug;
1498 + module_param(debug, int, 0644);
1499 + MODULE_PARM_DESC(debug, "enable debug messages");
1500 +@@ -603,8 +616,13 @@ static void cx23885_risc_disasm(struct cx23885_tsport *port,
1501 +
1502 + static void cx23885_clear_bridge_error(struct cx23885_dev *dev)
1503 + {
1504 +- uint32_t reg1_val = cx_read(TC_REQ); /* read-only */
1505 +- uint32_t reg2_val = cx_read(TC_REQ_SET);
1506 ++ uint32_t reg1_val, reg2_val;
1507 ++
1508 ++ if (!dev->need_dma_reset)
1509 ++ return;
1510 ++
1511 ++ reg1_val = cx_read(TC_REQ); /* read-only */
1512 ++ reg2_val = cx_read(TC_REQ_SET);
1513 +
1514 + if (reg1_val && reg2_val) {
1515 + cx_write(TC_REQ, reg1_val);
1516 +@@ -2058,6 +2076,37 @@ void cx23885_gpio_enable(struct cx23885_dev *dev, u32 mask, int asoutput)
1517 + /* TODO: 23-19 */
1518 + }
1519 +
1520 ++static struct {
1521 ++ int vendor, dev;
1522 ++} const broken_dev_id[] = {
1523 ++ /* According with
1524 ++ * https://openbenchmarking.org/system/1703021-RI-AMDZEN08075/Ryzen%207%201800X/lspci,
1525 ++ * 0x1451 is PCI ID for the IOMMU found on Ryzen
1526 ++ */
1527 ++ { PCI_VENDOR_ID_AMD, 0x1451 },
1528 ++};
1529 ++
1530 ++static bool cx23885_does_need_dma_reset(void)
1531 ++{
1532 ++ int i;
1533 ++ struct pci_dev *pdev = NULL;
1534 ++
1535 ++ if (dma_reset_workaround == 0)
1536 ++ return false;
1537 ++ else if (dma_reset_workaround == 2)
1538 ++ return true;
1539 ++
1540 ++ for (i = 0; i < ARRAY_SIZE(broken_dev_id); i++) {
1541 ++ pdev = pci_get_device(broken_dev_id[i].vendor,
1542 ++ broken_dev_id[i].dev, NULL);
1543 ++ if (pdev) {
1544 ++ pci_dev_put(pdev);
1545 ++ return true;
1546 ++ }
1547 ++ }
1548 ++ return false;
1549 ++}
1550 ++
1551 + static int cx23885_initdev(struct pci_dev *pci_dev,
1552 + const struct pci_device_id *pci_id)
1553 + {
1554 +@@ -2069,6 +2118,8 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
1555 + if (NULL == dev)
1556 + return -ENOMEM;
1557 +
1558 ++ dev->need_dma_reset = cx23885_does_need_dma_reset();
1559 ++
1560 + err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev);
1561 + if (err < 0)
1562 + goto fail_free;
1563 +diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h
1564 +index d54c7ee1ab21..cf965efabe66 100644
1565 +--- a/drivers/media/pci/cx23885/cx23885.h
1566 ++++ b/drivers/media/pci/cx23885/cx23885.h
1567 +@@ -451,6 +451,8 @@ struct cx23885_dev {
1568 + /* Analog raw audio */
1569 + struct cx23885_audio_dev *audio_dev;
1570 +
1571 ++ /* Does the system require periodic DMA resets? */
1572 ++ unsigned int need_dma_reset:1;
1573 + };
1574 +
1575 + static inline struct cx23885_dev *to_cx23885(struct v4l2_device *v4l2_dev)
1576 +diff --git a/drivers/misc/genwqe/card_utils.c b/drivers/misc/genwqe/card_utils.c
1577 +index 8679e0bd8ec2..f4f8ab602442 100644
1578 +--- a/drivers/misc/genwqe/card_utils.c
1579 ++++ b/drivers/misc/genwqe/card_utils.c
1580 +@@ -217,7 +217,7 @@ u32 genwqe_crc32(u8 *buff, size_t len, u32 init)
1581 + void *__genwqe_alloc_consistent(struct genwqe_dev *cd, size_t size,
1582 + dma_addr_t *dma_handle)
1583 + {
1584 +- if (get_order(size) > MAX_ORDER)
1585 ++ if (get_order(size) >= MAX_ORDER)
1586 + return NULL;
1587 +
1588 + return dma_zalloc_coherent(&cd->pci_dev->dev, size, dma_handle,
1589 +diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
1590 +index 3b889efddf78..50dd6bf176d0 100644
1591 +--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
1592 ++++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
1593 +@@ -29,9 +29,6 @@
1594 + #define RES_RING_CSR 1
1595 + #define RES_RING_CMD 2
1596 +
1597 +-static const struct of_device_id xgene_enet_of_match[];
1598 +-static const struct acpi_device_id xgene_enet_acpi_match[];
1599 +-
1600 + static void xgene_enet_init_bufpool(struct xgene_enet_desc_ring *buf_pool)
1601 + {
1602 + struct xgene_enet_raw_desc16 *raw_desc;
1603 +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
1604 +index 0de487a8f0eb..3db54b664aed 100644
1605 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
1606 ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
1607 +@@ -1282,6 +1282,7 @@ enum sp_rtnl_flag {
1608 + BNX2X_SP_RTNL_TX_STOP,
1609 + BNX2X_SP_RTNL_GET_DRV_VERSION,
1610 + BNX2X_SP_RTNL_CHANGE_UDP_PORT,
1611 ++ BNX2X_SP_RTNL_UPDATE_SVID,
1612 + };
1613 +
1614 + enum bnx2x_iov_flag {
1615 +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1616 +index fcc2328bb0d9..a585f1025a58 100644
1617 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1618 ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
1619 +@@ -2925,6 +2925,10 @@ static void bnx2x_handle_update_svid_cmd(struct bnx2x *bp)
1620 + func_params.f_obj = &bp->func_obj;
1621 + func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
1622 +
1623 ++ /* Prepare parameters for function state transitions */
1624 ++ __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
1625 ++ __set_bit(RAMROD_RETRY, &func_params.ramrod_flags);
1626 ++
1627 + if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
1628 + int func = BP_ABS_FUNC(bp);
1629 + u32 val;
1630 +@@ -4301,7 +4305,8 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
1631 + bnx2x_handle_eee_event(bp);
1632 +
1633 + if (val & DRV_STATUS_OEM_UPDATE_SVID)
1634 +- bnx2x_handle_update_svid_cmd(bp);
1635 ++ bnx2x_schedule_sp_rtnl(bp,
1636 ++ BNX2X_SP_RTNL_UPDATE_SVID, 0);
1637 +
1638 + if (bp->link_vars.periodic_flags &
1639 + PERIODIC_FLAGS_LINK_EVENT) {
1640 +@@ -8462,6 +8467,7 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
1641 + /* Fill a user request section if needed */
1642 + if (!test_bit(RAMROD_CONT, ramrod_flags)) {
1643 + ramrod_param.user_req.u.vlan.vlan = vlan;
1644 ++ __set_bit(BNX2X_VLAN, &ramrod_param.user_req.vlan_mac_flags);
1645 + /* Set the command: ADD or DEL */
1646 + if (set)
1647 + ramrod_param.user_req.cmd = BNX2X_VLAN_MAC_ADD;
1648 +@@ -8482,6 +8488,27 @@ int bnx2x_set_vlan_one(struct bnx2x *bp, u16 vlan,
1649 + return rc;
1650 + }
1651 +
1652 ++static int bnx2x_del_all_vlans(struct bnx2x *bp)
1653 ++{
1654 ++ struct bnx2x_vlan_mac_obj *vlan_obj = &bp->sp_objs[0].vlan_obj;
1655 ++ unsigned long ramrod_flags = 0, vlan_flags = 0;
1656 ++ struct bnx2x_vlan_entry *vlan;
1657 ++ int rc;
1658 ++
1659 ++ __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
1660 ++ __set_bit(BNX2X_VLAN, &vlan_flags);
1661 ++ rc = vlan_obj->delete_all(bp, vlan_obj, &vlan_flags, &ramrod_flags);
1662 ++ if (rc)
1663 ++ return rc;
1664 ++
1665 ++ /* Mark that hw forgot all entries */
1666 ++ list_for_each_entry(vlan, &bp->vlan_reg, link)
1667 ++ vlan->hw = false;
1668 ++ bp->vlan_cnt = 0;
1669 ++
1670 ++ return 0;
1671 ++}
1672 ++
1673 + int bnx2x_del_all_macs(struct bnx2x *bp,
1674 + struct bnx2x_vlan_mac_obj *mac_obj,
1675 + int mac_type, bool wait_for_comp)
1676 +@@ -9320,6 +9347,17 @@ void bnx2x_chip_cleanup(struct bnx2x *bp, int unload_mode, bool keep_link)
1677 + BNX2X_ERR("Failed to schedule DEL commands for UC MACs list: %d\n",
1678 + rc);
1679 +
1680 ++ /* The whole *vlan_obj structure may be not initialized if VLAN
1681 ++ * filtering offload is not supported by hardware. Currently this is
1682 ++ * true for all hardware covered by CHIP_IS_E1x().
1683 ++ */
1684 ++ if (!CHIP_IS_E1x(bp)) {
1685 ++ /* Remove all currently configured VLANs */
1686 ++ rc = bnx2x_del_all_vlans(bp);
1687 ++ if (rc < 0)
1688 ++ BNX2X_ERR("Failed to delete all VLANs\n");
1689 ++ }
1690 ++
1691 + /* Disable LLH */
1692 + if (!CHIP_IS_E1(bp))
1693 + REG_WR(bp, NIG_REG_LLH0_FUNC_EN + port*8, 0);
1694 +@@ -10349,6 +10387,9 @@ sp_rtnl_not_reset:
1695 + &bp->sp_rtnl_state))
1696 + bnx2x_update_mng_version(bp);
1697 +
1698 ++ if (test_and_clear_bit(BNX2X_SP_RTNL_UPDATE_SVID, &bp->sp_rtnl_state))
1699 ++ bnx2x_handle_update_svid_cmd(bp);
1700 ++
1701 + if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
1702 + &bp->sp_rtnl_state)) {
1703 + if (bnx2x_udp_port_update(bp)) {
1704 +@@ -11740,8 +11781,10 @@ static void bnx2x_get_fcoe_info(struct bnx2x *bp)
1705 + * If maximum allowed number of connections is zero -
1706 + * disable the feature.
1707 + */
1708 +- if (!bp->cnic_eth_dev.max_fcoe_conn)
1709 ++ if (!bp->cnic_eth_dev.max_fcoe_conn) {
1710 + bp->flags |= NO_FCOE_FLAG;
1711 ++ eth_zero_addr(bp->fip_mac);
1712 ++ }
1713 + }
1714 +
1715 + static void bnx2x_get_cnic_info(struct bnx2x *bp)
1716 +@@ -13014,13 +13057,6 @@ static void bnx2x_vlan_configure(struct bnx2x *bp, bool set_rx_mode)
1717 +
1718 + int bnx2x_vlan_reconfigure_vid(struct bnx2x *bp)
1719 + {
1720 +- struct bnx2x_vlan_entry *vlan;
1721 +-
1722 +- /* The hw forgot all entries after reload */
1723 +- list_for_each_entry(vlan, &bp->vlan_reg, link)
1724 +- vlan->hw = false;
1725 +- bp->vlan_cnt = 0;
1726 +-
1727 + /* Don't set rx mode here. Our caller will do it. */
1728 + bnx2x_vlan_configure(bp, false);
1729 +
1730 +diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
1731 +index 0bf2fd470819..7a6e82db4231 100644
1732 +--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
1733 ++++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
1734 +@@ -265,6 +265,7 @@ enum {
1735 + BNX2X_ETH_MAC,
1736 + BNX2X_ISCSI_ETH_MAC,
1737 + BNX2X_NETQ_ETH_MAC,
1738 ++ BNX2X_VLAN,
1739 + BNX2X_DONT_CONSUME_CAM_CREDIT,
1740 + BNX2X_DONT_CONSUME_CAM_CREDIT_DEST,
1741 + };
1742 +@@ -272,7 +273,8 @@ enum {
1743 + #define BNX2X_VLAN_MAC_CMP_MASK (1 << BNX2X_UC_LIST_MAC | \
1744 + 1 << BNX2X_ETH_MAC | \
1745 + 1 << BNX2X_ISCSI_ETH_MAC | \
1746 +- 1 << BNX2X_NETQ_ETH_MAC)
1747 ++ 1 << BNX2X_NETQ_ETH_MAC | \
1748 ++ 1 << BNX2X_VLAN)
1749 + #define BNX2X_VLAN_MAC_CMP_FLAGS(flags) \
1750 + ((flags) & BNX2X_VLAN_MAC_CMP_MASK)
1751 +
1752 +diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
1753 +index 240fd36b5074..8f4b2f9a8e07 100644
1754 +--- a/drivers/net/ethernet/cadence/macb_main.c
1755 ++++ b/drivers/net/ethernet/cadence/macb_main.c
1756 +@@ -682,6 +682,11 @@ static void macb_set_addr(struct macb *bp, struct macb_dma_desc *desc, dma_addr_
1757 + if (bp->hw_dma_cap & HW_DMA_CAP_64B) {
1758 + desc_64 = macb_64b_desc(bp, desc);
1759 + desc_64->addrh = upper_32_bits(addr);
1760 ++ /* The low bits of RX address contain the RX_USED bit, clearing
1761 ++ * of which allows packet RX. Make sure the high bits are also
1762 ++ * visible to HW at that point.
1763 ++ */
1764 ++ dma_wmb();
1765 + }
1766 + #endif
1767 + desc->addr = lower_32_bits(addr);
1768 +@@ -930,14 +935,19 @@ static void gem_rx_refill(struct macb_queue *queue)
1769 +
1770 + if (entry == bp->rx_ring_size - 1)
1771 + paddr |= MACB_BIT(RX_WRAP);
1772 +- macb_set_addr(bp, desc, paddr);
1773 + desc->ctrl = 0;
1774 ++ /* Setting addr clears RX_USED and allows reception,
1775 ++ * make sure ctrl is cleared first to avoid a race.
1776 ++ */
1777 ++ dma_wmb();
1778 ++ macb_set_addr(bp, desc, paddr);
1779 +
1780 + /* properly align Ethernet header */
1781 + skb_reserve(skb, NET_IP_ALIGN);
1782 + } else {
1783 +- desc->addr &= ~MACB_BIT(RX_USED);
1784 + desc->ctrl = 0;
1785 ++ dma_wmb();
1786 ++ desc->addr &= ~MACB_BIT(RX_USED);
1787 + }
1788 + }
1789 +
1790 +@@ -991,11 +1001,15 @@ static int gem_rx(struct macb_queue *queue, int budget)
1791 +
1792 + rxused = (desc->addr & MACB_BIT(RX_USED)) ? true : false;
1793 + addr = macb_get_addr(bp, desc);
1794 +- ctrl = desc->ctrl;
1795 +
1796 + if (!rxused)
1797 + break;
1798 +
1799 ++ /* Ensure ctrl is at least as up-to-date as rxused */
1800 ++ dma_rmb();
1801 ++
1802 ++ ctrl = desc->ctrl;
1803 ++
1804 + queue->rx_tail++;
1805 + count++;
1806 +
1807 +@@ -1170,11 +1184,14 @@ static int macb_rx(struct macb_queue *queue, int budget)
1808 + /* Make hw descriptor updates visible to CPU */
1809 + rmb();
1810 +
1811 +- ctrl = desc->ctrl;
1812 +-
1813 + if (!(desc->addr & MACB_BIT(RX_USED)))
1814 + break;
1815 +
1816 ++ /* Ensure ctrl is at least as up-to-date as addr */
1817 ++ dma_rmb();
1818 ++
1819 ++ ctrl = desc->ctrl;
1820 ++
1821 + if (ctrl & MACB_BIT(RX_SOF)) {
1822 + if (first_frag != -1)
1823 + discard_partial_frame(queue, first_frag, tail);
1824 +diff --git a/drivers/net/ethernet/cadence/macb_ptp.c b/drivers/net/ethernet/cadence/macb_ptp.c
1825 +index cd5296b84229..a6dc47edc4cf 100644
1826 +--- a/drivers/net/ethernet/cadence/macb_ptp.c
1827 ++++ b/drivers/net/ethernet/cadence/macb_ptp.c
1828 +@@ -319,6 +319,8 @@ int gem_ptp_txstamp(struct macb_queue *queue, struct sk_buff *skb,
1829 + desc_ptp = macb_ptp_desc(queue->bp, desc);
1830 + tx_timestamp = &queue->tx_timestamps[head];
1831 + tx_timestamp->skb = skb;
1832 ++ /* ensure ts_1/ts_2 is loaded after ctrl (TX_USED check) */
1833 ++ dma_rmb();
1834 + tx_timestamp->desc_ptp.ts_1 = desc_ptp->ts_1;
1835 + tx_timestamp->desc_ptp.ts_2 = desc_ptp->ts_2;
1836 + /* move head */
1837 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
1838 +index b52029e26d15..ad1779fc410e 100644
1839 +--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
1840 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
1841 +@@ -379,6 +379,9 @@ static void hns_ae_stop(struct hnae_handle *handle)
1842 +
1843 + hns_ae_ring_enable_all(handle, 0);
1844 +
1845 ++ /* clean rx fbd. */
1846 ++ hns_rcb_wait_fbd_clean(handle->qs, handle->q_num, RCB_INT_FLAG_RX);
1847 ++
1848 + (void)hns_mac_vm_config_bc_en(mac_cb, 0, false);
1849 + }
1850 +
1851 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
1852 +index 09e4061d1fa6..aa2c25d7a61d 100644
1853 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
1854 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
1855 +@@ -67,11 +67,14 @@ static void hns_gmac_enable(void *mac_drv, enum mac_commom_mode mode)
1856 + struct mac_driver *drv = (struct mac_driver *)mac_drv;
1857 +
1858 + /*enable GE rX/tX */
1859 +- if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1860 ++ if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
1861 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 1);
1862 +
1863 +- if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1864 ++ if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
1865 ++ /* enable rx pcs */
1866 ++ dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 0);
1867 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 1);
1868 ++ }
1869 + }
1870 +
1871 + static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
1872 +@@ -79,11 +82,14 @@ static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
1873 + struct mac_driver *drv = (struct mac_driver *)mac_drv;
1874 +
1875 + /*disable GE rX/tX */
1876 +- if ((mode == MAC_COMM_MODE_TX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1877 ++ if (mode == MAC_COMM_MODE_TX || mode == MAC_COMM_MODE_RX_AND_TX)
1878 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_TX_EN_B, 0);
1879 +
1880 +- if ((mode == MAC_COMM_MODE_RX) || (mode == MAC_COMM_MODE_RX_AND_TX))
1881 ++ if (mode == MAC_COMM_MODE_RX || mode == MAC_COMM_MODE_RX_AND_TX) {
1882 ++ /* disable rx pcs */
1883 ++ dsaf_set_dev_bit(drv, GMAC_PCS_RX_EN_REG, 0, 1);
1884 + dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 0);
1885 ++ }
1886 + }
1887 +
1888 + /* hns_gmac_get_en - get port enable
1889 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
1890 +index 6ed6f142427e..cfdc92de9dc0 100644
1891 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
1892 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
1893 +@@ -778,6 +778,17 @@ static int hns_mac_register_phy(struct hns_mac_cb *mac_cb)
1894 + return rc;
1895 + }
1896 +
1897 ++static void hns_mac_remove_phydev(struct hns_mac_cb *mac_cb)
1898 ++{
1899 ++ if (!to_acpi_device_node(mac_cb->fw_port) || !mac_cb->phy_dev)
1900 ++ return;
1901 ++
1902 ++ phy_device_remove(mac_cb->phy_dev);
1903 ++ phy_device_free(mac_cb->phy_dev);
1904 ++
1905 ++ mac_cb->phy_dev = NULL;
1906 ++}
1907 ++
1908 + #define MAC_MEDIA_TYPE_MAX_LEN 16
1909 +
1910 + static const struct {
1911 +@@ -1117,7 +1128,11 @@ void hns_mac_uninit(struct dsaf_device *dsaf_dev)
1912 + int max_port_num = hns_mac_get_max_port_num(dsaf_dev);
1913 +
1914 + for (i = 0; i < max_port_num; i++) {
1915 ++ if (!dsaf_dev->mac_cb[i])
1916 ++ continue;
1917 ++
1918 + dsaf_dev->misc_op->cpld_reset_led(dsaf_dev->mac_cb[i]);
1919 ++ hns_mac_remove_phydev(dsaf_dev->mac_cb[i]);
1920 + dsaf_dev->mac_cb[i] = NULL;
1921 + }
1922 + }
1923 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1924 +index e557a4ef5996..3b9e74be5fbd 100644
1925 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1926 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1927 +@@ -934,6 +934,62 @@ static void hns_dsaf_tcam_mc_cfg(
1928 + spin_unlock_bh(&dsaf_dev->tcam_lock);
1929 + }
1930 +
1931 ++/**
1932 ++ * hns_dsaf_tcam_uc_cfg_vague - INT
1933 ++ * @dsaf_dev: dsa fabric device struct pointer
1934 ++ * @address,
1935 ++ * @ptbl_tcam_data,
1936 ++ */
1937 ++static void hns_dsaf_tcam_uc_cfg_vague(struct dsaf_device *dsaf_dev,
1938 ++ u32 address,
1939 ++ struct dsaf_tbl_tcam_data *tcam_data,
1940 ++ struct dsaf_tbl_tcam_data *tcam_mask,
1941 ++ struct dsaf_tbl_tcam_ucast_cfg *tcam_uc)
1942 ++{
1943 ++ spin_lock_bh(&dsaf_dev->tcam_lock);
1944 ++ hns_dsaf_tbl_tcam_addr_cfg(dsaf_dev, address);
1945 ++ hns_dsaf_tbl_tcam_data_cfg(dsaf_dev, tcam_data);
1946 ++ hns_dsaf_tbl_tcam_ucast_cfg(dsaf_dev, tcam_uc);
1947 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1948 ++ hns_dsaf_tbl_tcam_data_ucast_pul(dsaf_dev);
1949 ++
1950 ++ /*Restore Match Data*/
1951 ++ tcam_mask->tbl_tcam_data_high = 0xffffffff;
1952 ++ tcam_mask->tbl_tcam_data_low = 0xffffffff;
1953 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1954 ++
1955 ++ spin_unlock_bh(&dsaf_dev->tcam_lock);
1956 ++}
1957 ++
1958 ++/**
1959 ++ * hns_dsaf_tcam_mc_cfg_vague - INT
1960 ++ * @dsaf_dev: dsa fabric device struct pointer
1961 ++ * @address,
1962 ++ * @ptbl_tcam_data,
1963 ++ * @ptbl_tcam_mask
1964 ++ * @ptbl_tcam_mcast
1965 ++ */
1966 ++static void hns_dsaf_tcam_mc_cfg_vague(struct dsaf_device *dsaf_dev,
1967 ++ u32 address,
1968 ++ struct dsaf_tbl_tcam_data *tcam_data,
1969 ++ struct dsaf_tbl_tcam_data *tcam_mask,
1970 ++ struct dsaf_tbl_tcam_mcast_cfg *tcam_mc)
1971 ++{
1972 ++ spin_lock_bh(&dsaf_dev->tcam_lock);
1973 ++ hns_dsaf_tbl_tcam_addr_cfg(dsaf_dev, address);
1974 ++ hns_dsaf_tbl_tcam_data_cfg(dsaf_dev, tcam_data);
1975 ++ hns_dsaf_tbl_tcam_mcast_cfg(dsaf_dev, tcam_mc);
1976 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1977 ++ hns_dsaf_tbl_tcam_data_mcast_pul(dsaf_dev);
1978 ++
1979 ++ /*Restore Match Data*/
1980 ++ tcam_mask->tbl_tcam_data_high = 0xffffffff;
1981 ++ tcam_mask->tbl_tcam_data_low = 0xffffffff;
1982 ++ hns_dsaf_tbl_tcam_match_cfg(dsaf_dev, tcam_mask);
1983 ++
1984 ++ spin_unlock_bh(&dsaf_dev->tcam_lock);
1985 ++}
1986 ++
1987 + /**
1988 + * hns_dsaf_tcam_mc_invld - INT
1989 + * @dsaf_id: dsa fabric id
1990 +@@ -1492,6 +1548,27 @@ static u16 hns_dsaf_find_empty_mac_entry(struct dsaf_device *dsaf_dev)
1991 + return DSAF_INVALID_ENTRY_IDX;
1992 + }
1993 +
1994 ++/**
1995 ++ * hns_dsaf_find_empty_mac_entry_reverse
1996 ++ * search dsa fabric soft empty-entry from the end
1997 ++ * @dsaf_dev: dsa fabric device struct pointer
1998 ++ */
1999 ++static u16 hns_dsaf_find_empty_mac_entry_reverse(struct dsaf_device *dsaf_dev)
2000 ++{
2001 ++ struct dsaf_drv_priv *priv = hns_dsaf_dev_priv(dsaf_dev);
2002 ++ struct dsaf_drv_soft_mac_tbl *soft_mac_entry;
2003 ++ int i;
2004 ++
2005 ++ soft_mac_entry = priv->soft_mac_tbl + (DSAF_TCAM_SUM - 1);
2006 ++ for (i = (DSAF_TCAM_SUM - 1); i > 0; i--) {
2007 ++ /* search all entry from end to start.*/
2008 ++ if (soft_mac_entry->index == DSAF_INVALID_ENTRY_IDX)
2009 ++ return i;
2010 ++ soft_mac_entry--;
2011 ++ }
2012 ++ return DSAF_INVALID_ENTRY_IDX;
2013 ++}
2014 ++
2015 + /**
2016 + * hns_dsaf_set_mac_key - set mac key
2017 + * @dsaf_dev: dsa fabric device struct pointer
2018 +@@ -2166,9 +2243,9 @@ void hns_dsaf_update_stats(struct dsaf_device *dsaf_dev, u32 node_num)
2019 + DSAF_INODE_LOCAL_ADDR_FALSE_NUM_0_REG + 0x80 * (u64)node_num);
2020 +
2021 + hw_stats->vlan_drop += dsaf_read_dev(dsaf_dev,
2022 +- DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 0x80 * (u64)node_num);
2023 ++ DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + 4 * (u64)node_num);
2024 + hw_stats->stp_drop += dsaf_read_dev(dsaf_dev,
2025 +- DSAF_INODE_IN_DATA_STP_DISC_0_REG + 0x80 * (u64)node_num);
2026 ++ DSAF_INODE_IN_DATA_STP_DISC_0_REG + 4 * (u64)node_num);
2027 +
2028 + /* pfc pause frame statistics stored in dsaf inode*/
2029 + if ((node_num < DSAF_SERVICE_NW_NUM) && !is_ver1) {
2030 +@@ -2285,237 +2362,237 @@ void hns_dsaf_get_regs(struct dsaf_device *ddev, u32 port, void *data)
2031 + DSAF_INODE_BD_ORDER_STATUS_0_REG + j * 4);
2032 + p[223 + i] = dsaf_read_dev(ddev,
2033 + DSAF_INODE_SW_VLAN_TAG_DISC_0_REG + j * 4);
2034 +- p[224 + i] = dsaf_read_dev(ddev,
2035 ++ p[226 + i] = dsaf_read_dev(ddev,
2036 + DSAF_INODE_IN_DATA_STP_DISC_0_REG + j * 4);
2037 + }
2038 +
2039 +- p[227] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
2040 ++ p[229] = dsaf_read_dev(ddev, DSAF_INODE_GE_FC_EN_0_REG + port * 4);
2041 +
2042 + for (i = 0; i < DSAF_INODE_NUM / DSAF_COMM_CHN; i++) {
2043 + j = i * DSAF_COMM_CHN + port;
2044 +- p[228 + i] = dsaf_read_dev(ddev,
2045 ++ p[230 + i] = dsaf_read_dev(ddev,
2046 + DSAF_INODE_VC0_IN_PKT_NUM_0_REG + j * 4);
2047 + }
2048 +
2049 +- p[231] = dsaf_read_dev(ddev,
2050 +- DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 4);
2051 ++ p[233] = dsaf_read_dev(ddev,
2052 ++ DSAF_INODE_VC1_IN_PKT_NUM_0_REG + port * 0x80);
2053 +
2054 + /* dsaf inode registers */
2055 + for (i = 0; i < HNS_DSAF_SBM_NUM(ddev) / DSAF_COMM_CHN; i++) {
2056 + j = i * DSAF_COMM_CHN + port;
2057 +- p[232 + i] = dsaf_read_dev(ddev,
2058 ++ p[234 + i] = dsaf_read_dev(ddev,
2059 + DSAF_SBM_CFG_REG_0_REG + j * 0x80);
2060 +- p[235 + i] = dsaf_read_dev(ddev,
2061 ++ p[237 + i] = dsaf_read_dev(ddev,
2062 + DSAF_SBM_BP_CFG_0_XGE_REG_0_REG + j * 0x80);
2063 +- p[238 + i] = dsaf_read_dev(ddev,
2064 ++ p[240 + i] = dsaf_read_dev(ddev,
2065 + DSAF_SBM_BP_CFG_1_REG_0_REG + j * 0x80);
2066 +- p[241 + i] = dsaf_read_dev(ddev,
2067 ++ p[243 + i] = dsaf_read_dev(ddev,
2068 + DSAF_SBM_BP_CFG_2_XGE_REG_0_REG + j * 0x80);
2069 +- p[244 + i] = dsaf_read_dev(ddev,
2070 ++ p[246 + i] = dsaf_read_dev(ddev,
2071 + DSAF_SBM_FREE_CNT_0_0_REG + j * 0x80);
2072 +- p[245 + i] = dsaf_read_dev(ddev,
2073 ++ p[249 + i] = dsaf_read_dev(ddev,
2074 + DSAF_SBM_FREE_CNT_1_0_REG + j * 0x80);
2075 +- p[248 + i] = dsaf_read_dev(ddev,
2076 ++ p[252 + i] = dsaf_read_dev(ddev,
2077 + DSAF_SBM_BP_CNT_0_0_REG + j * 0x80);
2078 +- p[251 + i] = dsaf_read_dev(ddev,
2079 ++ p[255 + i] = dsaf_read_dev(ddev,
2080 + DSAF_SBM_BP_CNT_1_0_REG + j * 0x80);
2081 +- p[254 + i] = dsaf_read_dev(ddev,
2082 ++ p[258 + i] = dsaf_read_dev(ddev,
2083 + DSAF_SBM_BP_CNT_2_0_REG + j * 0x80);
2084 +- p[257 + i] = dsaf_read_dev(ddev,
2085 ++ p[261 + i] = dsaf_read_dev(ddev,
2086 + DSAF_SBM_BP_CNT_3_0_REG + j * 0x80);
2087 +- p[260 + i] = dsaf_read_dev(ddev,
2088 ++ p[264 + i] = dsaf_read_dev(ddev,
2089 + DSAF_SBM_INER_ST_0_REG + j * 0x80);
2090 +- p[263 + i] = dsaf_read_dev(ddev,
2091 ++ p[267 + i] = dsaf_read_dev(ddev,
2092 + DSAF_SBM_MIB_REQ_FAILED_TC_0_REG + j * 0x80);
2093 +- p[266 + i] = dsaf_read_dev(ddev,
2094 ++ p[270 + i] = dsaf_read_dev(ddev,
2095 + DSAF_SBM_LNK_INPORT_CNT_0_REG + j * 0x80);
2096 +- p[269 + i] = dsaf_read_dev(ddev,
2097 ++ p[273 + i] = dsaf_read_dev(ddev,
2098 + DSAF_SBM_LNK_DROP_CNT_0_REG + j * 0x80);
2099 +- p[272 + i] = dsaf_read_dev(ddev,
2100 ++ p[276 + i] = dsaf_read_dev(ddev,
2101 + DSAF_SBM_INF_OUTPORT_CNT_0_REG + j * 0x80);
2102 +- p[275 + i] = dsaf_read_dev(ddev,
2103 ++ p[279 + i] = dsaf_read_dev(ddev,
2104 + DSAF_SBM_LNK_INPORT_TC0_CNT_0_REG + j * 0x80);
2105 +- p[278 + i] = dsaf_read_dev(ddev,
2106 ++ p[282 + i] = dsaf_read_dev(ddev,
2107 + DSAF_SBM_LNK_INPORT_TC1_CNT_0_REG + j * 0x80);
2108 +- p[281 + i] = dsaf_read_dev(ddev,
2109 ++ p[285 + i] = dsaf_read_dev(ddev,
2110 + DSAF_SBM_LNK_INPORT_TC2_CNT_0_REG + j * 0x80);
2111 +- p[284 + i] = dsaf_read_dev(ddev,
2112 ++ p[288 + i] = dsaf_read_dev(ddev,
2113 + DSAF_SBM_LNK_INPORT_TC3_CNT_0_REG + j * 0x80);
2114 +- p[287 + i] = dsaf_read_dev(ddev,
2115 ++ p[291 + i] = dsaf_read_dev(ddev,
2116 + DSAF_SBM_LNK_INPORT_TC4_CNT_0_REG + j * 0x80);
2117 +- p[290 + i] = dsaf_read_dev(ddev,
2118 ++ p[294 + i] = dsaf_read_dev(ddev,
2119 + DSAF_SBM_LNK_INPORT_TC5_CNT_0_REG + j * 0x80);
2120 +- p[293 + i] = dsaf_read_dev(ddev,
2121 ++ p[297 + i] = dsaf_read_dev(ddev,
2122 + DSAF_SBM_LNK_INPORT_TC6_CNT_0_REG + j * 0x80);
2123 +- p[296 + i] = dsaf_read_dev(ddev,
2124 ++ p[300 + i] = dsaf_read_dev(ddev,
2125 + DSAF_SBM_LNK_INPORT_TC7_CNT_0_REG + j * 0x80);
2126 +- p[299 + i] = dsaf_read_dev(ddev,
2127 ++ p[303 + i] = dsaf_read_dev(ddev,
2128 + DSAF_SBM_LNK_REQ_CNT_0_REG + j * 0x80);
2129 +- p[302 + i] = dsaf_read_dev(ddev,
2130 ++ p[306 + i] = dsaf_read_dev(ddev,
2131 + DSAF_SBM_LNK_RELS_CNT_0_REG + j * 0x80);
2132 +- p[305 + i] = dsaf_read_dev(ddev,
2133 ++ p[309 + i] = dsaf_read_dev(ddev,
2134 + DSAF_SBM_BP_CFG_3_REG_0_REG + j * 0x80);
2135 +- p[308 + i] = dsaf_read_dev(ddev,
2136 ++ p[312 + i] = dsaf_read_dev(ddev,
2137 + DSAF_SBM_BP_CFG_4_REG_0_REG + j * 0x80);
2138 + }
2139 +
2140 + /* dsaf onode registers */
2141 + for (i = 0; i < DSAF_XOD_NUM; i++) {
2142 +- p[311 + i] = dsaf_read_dev(ddev,
2143 ++ p[315 + i] = dsaf_read_dev(ddev,
2144 + DSAF_XOD_ETS_TSA_TC0_TC3_CFG_0_REG + i * 0x90);
2145 +- p[319 + i] = dsaf_read_dev(ddev,
2146 ++ p[323 + i] = dsaf_read_dev(ddev,
2147 + DSAF_XOD_ETS_TSA_TC4_TC7_CFG_0_REG + i * 0x90);
2148 +- p[327 + i] = dsaf_read_dev(ddev,
2149 ++ p[331 + i] = dsaf_read_dev(ddev,
2150 + DSAF_XOD_ETS_BW_TC0_TC3_CFG_0_REG + i * 0x90);
2151 +- p[335 + i] = dsaf_read_dev(ddev,
2152 ++ p[339 + i] = dsaf_read_dev(ddev,
2153 + DSAF_XOD_ETS_BW_TC4_TC7_CFG_0_REG + i * 0x90);
2154 +- p[343 + i] = dsaf_read_dev(ddev,
2155 ++ p[347 + i] = dsaf_read_dev(ddev,
2156 + DSAF_XOD_ETS_BW_OFFSET_CFG_0_REG + i * 0x90);
2157 +- p[351 + i] = dsaf_read_dev(ddev,
2158 ++ p[355 + i] = dsaf_read_dev(ddev,
2159 + DSAF_XOD_ETS_TOKEN_CFG_0_REG + i * 0x90);
2160 + }
2161 +
2162 +- p[359] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
2163 +- p[360] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
2164 +- p[361] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
2165 ++ p[363] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_0_0_REG + port * 0x90);
2166 ++ p[364] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_1_0_REG + port * 0x90);
2167 ++ p[365] = dsaf_read_dev(ddev, DSAF_XOD_PFS_CFG_2_0_REG + port * 0x90);
2168 +
2169 + for (i = 0; i < DSAF_XOD_BIG_NUM / DSAF_COMM_CHN; i++) {
2170 + j = i * DSAF_COMM_CHN + port;
2171 +- p[362 + i] = dsaf_read_dev(ddev,
2172 ++ p[366 + i] = dsaf_read_dev(ddev,
2173 + DSAF_XOD_GNT_L_0_REG + j * 0x90);
2174 +- p[365 + i] = dsaf_read_dev(ddev,
2175 ++ p[369 + i] = dsaf_read_dev(ddev,
2176 + DSAF_XOD_GNT_H_0_REG + j * 0x90);
2177 +- p[368 + i] = dsaf_read_dev(ddev,
2178 ++ p[372 + i] = dsaf_read_dev(ddev,
2179 + DSAF_XOD_CONNECT_STATE_0_REG + j * 0x90);
2180 +- p[371 + i] = dsaf_read_dev(ddev,
2181 ++ p[375 + i] = dsaf_read_dev(ddev,
2182 + DSAF_XOD_RCVPKT_CNT_0_REG + j * 0x90);
2183 +- p[374 + i] = dsaf_read_dev(ddev,
2184 ++ p[378 + i] = dsaf_read_dev(ddev,
2185 + DSAF_XOD_RCVTC0_CNT_0_REG + j * 0x90);
2186 +- p[377 + i] = dsaf_read_dev(ddev,
2187 ++ p[381 + i] = dsaf_read_dev(ddev,
2188 + DSAF_XOD_RCVTC1_CNT_0_REG + j * 0x90);
2189 +- p[380 + i] = dsaf_read_dev(ddev,
2190 ++ p[384 + i] = dsaf_read_dev(ddev,
2191 + DSAF_XOD_RCVTC2_CNT_0_REG + j * 0x90);
2192 +- p[383 + i] = dsaf_read_dev(ddev,
2193 ++ p[387 + i] = dsaf_read_dev(ddev,
2194 + DSAF_XOD_RCVTC3_CNT_0_REG + j * 0x90);
2195 +- p[386 + i] = dsaf_read_dev(ddev,
2196 ++ p[390 + i] = dsaf_read_dev(ddev,
2197 + DSAF_XOD_RCVVC0_CNT_0_REG + j * 0x90);
2198 +- p[389 + i] = dsaf_read_dev(ddev,
2199 ++ p[393 + i] = dsaf_read_dev(ddev,
2200 + DSAF_XOD_RCVVC1_CNT_0_REG + j * 0x90);
2201 + }
2202 +
2203 +- p[392] = dsaf_read_dev(ddev,
2204 ++ p[396] = dsaf_read_dev(ddev,
2205 + DSAF_XOD_XGE_RCVIN0_CNT_0_REG + port * 0x90);
2206 +- p[393] = dsaf_read_dev(ddev,
2207 ++ p[397] = dsaf_read_dev(ddev,
2208 + DSAF_XOD_XGE_RCVIN1_CNT_0_REG + port * 0x90);
2209 +- p[394] = dsaf_read_dev(ddev,
2210 ++ p[398] = dsaf_read_dev(ddev,
2211 + DSAF_XOD_XGE_RCVIN2_CNT_0_REG + port * 0x90);
2212 +- p[395] = dsaf_read_dev(ddev,
2213 ++ p[399] = dsaf_read_dev(ddev,
2214 + DSAF_XOD_XGE_RCVIN3_CNT_0_REG + port * 0x90);
2215 +- p[396] = dsaf_read_dev(ddev,
2216 ++ p[400] = dsaf_read_dev(ddev,
2217 + DSAF_XOD_XGE_RCVIN4_CNT_0_REG + port * 0x90);
2218 +- p[397] = dsaf_read_dev(ddev,
2219 ++ p[401] = dsaf_read_dev(ddev,
2220 + DSAF_XOD_XGE_RCVIN5_CNT_0_REG + port * 0x90);
2221 +- p[398] = dsaf_read_dev(ddev,
2222 ++ p[402] = dsaf_read_dev(ddev,
2223 + DSAF_XOD_XGE_RCVIN6_CNT_0_REG + port * 0x90);
2224 +- p[399] = dsaf_read_dev(ddev,
2225 ++ p[403] = dsaf_read_dev(ddev,
2226 + DSAF_XOD_XGE_RCVIN7_CNT_0_REG + port * 0x90);
2227 +- p[400] = dsaf_read_dev(ddev,
2228 ++ p[404] = dsaf_read_dev(ddev,
2229 + DSAF_XOD_PPE_RCVIN0_CNT_0_REG + port * 0x90);
2230 +- p[401] = dsaf_read_dev(ddev,
2231 ++ p[405] = dsaf_read_dev(ddev,
2232 + DSAF_XOD_PPE_RCVIN1_CNT_0_REG + port * 0x90);
2233 +- p[402] = dsaf_read_dev(ddev,
2234 ++ p[406] = dsaf_read_dev(ddev,
2235 + DSAF_XOD_ROCEE_RCVIN0_CNT_0_REG + port * 0x90);
2236 +- p[403] = dsaf_read_dev(ddev,
2237 ++ p[407] = dsaf_read_dev(ddev,
2238 + DSAF_XOD_ROCEE_RCVIN1_CNT_0_REG + port * 0x90);
2239 +- p[404] = dsaf_read_dev(ddev,
2240 ++ p[408] = dsaf_read_dev(ddev,
2241 + DSAF_XOD_FIFO_STATUS_0_REG + port * 0x90);
2242 +
2243 + /* dsaf voq registers */
2244 + for (i = 0; i < DSAF_VOQ_NUM / DSAF_COMM_CHN; i++) {
2245 + j = (i * DSAF_COMM_CHN + port) * 0x90;
2246 +- p[405 + i] = dsaf_read_dev(ddev,
2247 ++ p[409 + i] = dsaf_read_dev(ddev,
2248 + DSAF_VOQ_ECC_INVERT_EN_0_REG + j);
2249 +- p[408 + i] = dsaf_read_dev(ddev,
2250 ++ p[412 + i] = dsaf_read_dev(ddev,
2251 + DSAF_VOQ_SRAM_PKT_NUM_0_REG + j);
2252 +- p[411 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
2253 +- p[414 + i] = dsaf_read_dev(ddev,
2254 ++ p[415 + i] = dsaf_read_dev(ddev, DSAF_VOQ_IN_PKT_NUM_0_REG + j);
2255 ++ p[418 + i] = dsaf_read_dev(ddev,
2256 + DSAF_VOQ_OUT_PKT_NUM_0_REG + j);
2257 +- p[417 + i] = dsaf_read_dev(ddev,
2258 ++ p[421 + i] = dsaf_read_dev(ddev,
2259 + DSAF_VOQ_ECC_ERR_ADDR_0_REG + j);
2260 +- p[420 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
2261 +- p[423 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
2262 +- p[426 + i] = dsaf_read_dev(ddev,
2263 ++ p[424 + i] = dsaf_read_dev(ddev, DSAF_VOQ_BP_STATUS_0_REG + j);
2264 ++ p[427 + i] = dsaf_read_dev(ddev, DSAF_VOQ_SPUP_IDLE_0_REG + j);
2265 ++ p[430 + i] = dsaf_read_dev(ddev,
2266 + DSAF_VOQ_XGE_XOD_REQ_0_0_REG + j);
2267 +- p[429 + i] = dsaf_read_dev(ddev,
2268 ++ p[433 + i] = dsaf_read_dev(ddev,
2269 + DSAF_VOQ_XGE_XOD_REQ_1_0_REG + j);
2270 +- p[432 + i] = dsaf_read_dev(ddev,
2271 ++ p[436 + i] = dsaf_read_dev(ddev,
2272 + DSAF_VOQ_PPE_XOD_REQ_0_REG + j);
2273 +- p[435 + i] = dsaf_read_dev(ddev,
2274 ++ p[439 + i] = dsaf_read_dev(ddev,
2275 + DSAF_VOQ_ROCEE_XOD_REQ_0_REG + j);
2276 +- p[438 + i] = dsaf_read_dev(ddev,
2277 ++ p[442 + i] = dsaf_read_dev(ddev,
2278 + DSAF_VOQ_BP_ALL_THRD_0_REG + j);
2279 + }
2280 +
2281 + /* dsaf tbl registers */
2282 +- p[441] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
2283 +- p[442] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
2284 +- p[443] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
2285 +- p[444] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
2286 +- p[445] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
2287 +- p[446] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
2288 +- p[447] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
2289 +- p[448] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
2290 +- p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
2291 +- p[450] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
2292 +- p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
2293 +- p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
2294 +- p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
2295 +- p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
2296 +- p[455] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
2297 +- p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
2298 +- p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
2299 +- p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
2300 +- p[459] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
2301 +- p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
2302 +- p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
2303 +- p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
2304 +- p[463] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
2305 ++ p[445] = dsaf_read_dev(ddev, DSAF_TBL_CTRL_0_REG);
2306 ++ p[446] = dsaf_read_dev(ddev, DSAF_TBL_INT_MSK_0_REG);
2307 ++ p[447] = dsaf_read_dev(ddev, DSAF_TBL_INT_SRC_0_REG);
2308 ++ p[448] = dsaf_read_dev(ddev, DSAF_TBL_INT_STS_0_REG);
2309 ++ p[449] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_ADDR_0_REG);
2310 ++ p[450] = dsaf_read_dev(ddev, DSAF_TBL_LINE_ADDR_0_REG);
2311 ++ p[451] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_HIGH_0_REG);
2312 ++ p[452] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_LOW_0_REG);
2313 ++ p[453] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_4_0_REG);
2314 ++ p[454] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_3_0_REG);
2315 ++ p[455] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_2_0_REG);
2316 ++ p[456] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_1_0_REG);
2317 ++ p[457] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_MCAST_CFG_0_0_REG);
2318 ++ p[458] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_UCAST_CFG_0_REG);
2319 ++ p[459] = dsaf_read_dev(ddev, DSAF_TBL_LIN_CFG_0_REG);
2320 ++ p[460] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_HIGH_0_REG);
2321 ++ p[461] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RDATA_LOW_0_REG);
2322 ++ p[462] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA4_0_REG);
2323 ++ p[463] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA3_0_REG);
2324 ++ p[464] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA2_0_REG);
2325 ++ p[465] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA1_0_REG);
2326 ++ p[466] = dsaf_read_dev(ddev, DSAF_TBL_TCAM_RAM_RDATA0_0_REG);
2327 ++ p[467] = dsaf_read_dev(ddev, DSAF_TBL_LIN_RDATA_0_REG);
2328 +
2329 + for (i = 0; i < DSAF_SW_PORT_NUM; i++) {
2330 + j = i * 0x8;
2331 +- p[464 + 2 * i] = dsaf_read_dev(ddev,
2332 ++ p[468 + 2 * i] = dsaf_read_dev(ddev,
2333 + DSAF_TBL_DA0_MIS_INFO1_0_REG + j);
2334 +- p[465 + 2 * i] = dsaf_read_dev(ddev,
2335 ++ p[469 + 2 * i] = dsaf_read_dev(ddev,
2336 + DSAF_TBL_DA0_MIS_INFO0_0_REG + j);
2337 + }
2338 +
2339 +- p[480] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
2340 +- p[481] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
2341 +- p[482] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
2342 +- p[483] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
2343 +- p[484] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
2344 +- p[485] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
2345 +- p[486] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
2346 +- p[487] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
2347 +- p[488] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
2348 +- p[489] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
2349 +- p[490] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
2350 +- p[491] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
2351 ++ p[484] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO2_0_REG);
2352 ++ p[485] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO1_0_REG);
2353 ++ p[486] = dsaf_read_dev(ddev, DSAF_TBL_SA_MIS_INFO0_0_REG);
2354 ++ p[487] = dsaf_read_dev(ddev, DSAF_TBL_PUL_0_REG);
2355 ++ p[488] = dsaf_read_dev(ddev, DSAF_TBL_OLD_RSLT_0_REG);
2356 ++ p[489] = dsaf_read_dev(ddev, DSAF_TBL_OLD_SCAN_VAL_0_REG);
2357 ++ p[490] = dsaf_read_dev(ddev, DSAF_TBL_DFX_CTRL_0_REG);
2358 ++ p[491] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_0_REG);
2359 ++ p[492] = dsaf_read_dev(ddev, DSAF_TBL_DFX_STAT_2_0_REG);
2360 ++ p[493] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_I_0_REG);
2361 ++ p[494] = dsaf_read_dev(ddev, DSAF_TBL_LKUP_NUM_O_0_REG);
2362 ++ p[495] = dsaf_read_dev(ddev, DSAF_TBL_UCAST_BCAST_MIS_INFO_0_0_REG);
2363 +
2364 + /* dsaf other registers */
2365 +- p[492] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
2366 +- p[493] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
2367 +- p[494] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
2368 +- p[495] = dsaf_read_dev(ddev,
2369 ++ p[496] = dsaf_read_dev(ddev, DSAF_INODE_FIFO_WL_0_REG + port * 0x4);
2370 ++ p[497] = dsaf_read_dev(ddev, DSAF_ONODE_FIFO_WL_0_REG + port * 0x4);
2371 ++ p[498] = dsaf_read_dev(ddev, DSAF_XGE_GE_WORK_MODE_0_REG + port * 0x4);
2372 ++ p[499] = dsaf_read_dev(ddev,
2373 + DSAF_XGE_APP_RX_LINK_UP_0_REG + port * 0x4);
2374 +- p[496] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
2375 +- p[497] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
2376 ++ p[500] = dsaf_read_dev(ddev, DSAF_NETPORT_CTRL_SIG_0_REG + port * 0x4);
2377 ++ p[501] = dsaf_read_dev(ddev, DSAF_XGE_CTRL_SIG_CFG_0_REG + port * 0x4);
2378 +
2379 + if (!is_ver1)
2380 +- p[498] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
2381 ++ p[502] = dsaf_read_dev(ddev, DSAF_PAUSE_CFG_REG + port * 0x4);
2382 +
2383 + /* mark end of dsaf regs */
2384 +- for (i = 499; i < 504; i++)
2385 ++ for (i = 503; i < 504; i++)
2386 + p[i] = 0xdddddddd;
2387 + }
2388 +
2389 +@@ -2673,58 +2750,156 @@ int hns_dsaf_get_regs_count(void)
2390 + return DSAF_DUMP_REGS_NUM;
2391 + }
2392 +
2393 +-/* Reserve the last TCAM entry for promisc support */
2394 +-#define dsaf_promisc_tcam_entry(port) \
2395 +- (DSAF_TCAM_SUM - DSAFV2_MAC_FUZZY_TCAM_NUM + (port))
2396 +-void hns_dsaf_set_promisc_tcam(struct dsaf_device *dsaf_dev,
2397 +- u32 port, bool enable)
2398 ++static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)
2399 + {
2400 ++ struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80};
2401 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_mc = {0x01000000, port};
2402 ++ struct dsaf_tbl_tcam_data tbl_tcam_mask_uc = {0x01000000, 0xf};
2403 ++ struct dsaf_tbl_tcam_mcast_cfg tbl_tcam_mcast = {0, 0, {0} };
2404 + struct dsaf_drv_priv *priv = hns_dsaf_dev_priv(dsaf_dev);
2405 +- struct dsaf_drv_soft_mac_tbl *soft_mac_entry = priv->soft_mac_tbl;
2406 +- u16 entry_index;
2407 +- struct dsaf_drv_tbl_tcam_key tbl_tcam_data, tbl_tcam_mask;
2408 +- struct dsaf_tbl_tcam_mcast_cfg mac_data = {0};
2409 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_uc = {0, port};
2410 ++ struct dsaf_drv_mac_single_dest_entry mask_entry;
2411 ++ struct dsaf_drv_tbl_tcam_key temp_key, mask_key;
2412 ++ struct dsaf_drv_soft_mac_tbl *soft_mac_entry;
2413 ++ u16 entry_index = DSAF_INVALID_ENTRY_IDX;
2414 ++ struct dsaf_drv_tbl_tcam_key mac_key;
2415 ++ struct hns_mac_cb *mac_cb;
2416 ++ u8 addr[ETH_ALEN] = {0};
2417 ++ u8 port_num;
2418 ++ u16 mskid;
2419 ++
2420 ++ /* promisc use vague table match with vlanid = 0 & macaddr = 0 */
2421 ++ hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
2422 ++ entry_index = hns_dsaf_find_soft_mac_entry(dsaf_dev, &mac_key);
2423 ++ if (entry_index != DSAF_INVALID_ENTRY_IDX)
2424 ++ return;
2425 ++
2426 ++ /* put promisc tcam entry in the end. */
2427 ++ /* 1. set promisc unicast vague tcam entry. */
2428 ++ entry_index = hns_dsaf_find_empty_mac_entry_reverse(dsaf_dev);
2429 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX) {
2430 ++ dev_err(dsaf_dev->dev,
2431 ++ "enable uc promisc failed (port:%#x)\n",
2432 ++ port);
2433 ++ return;
2434 ++ }
2435 ++
2436 ++ mac_cb = dsaf_dev->mac_cb[port];
2437 ++ (void)hns_mac_get_inner_port_num(mac_cb, 0, &port_num);
2438 ++ tbl_tcam_ucast.tbl_ucast_out_port = port_num;
2439 +
2440 +- if ((AE_IS_VER1(dsaf_dev->dsaf_ver)) || HNS_DSAF_IS_DEBUG(dsaf_dev))
2441 ++ /* config uc vague table */
2442 ++ hns_dsaf_tcam_uc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_uc,
2443 ++ &tbl_tcam_mask_uc, &tbl_tcam_ucast);
2444 ++
2445 ++ /* update software entry */
2446 ++ soft_mac_entry = priv->soft_mac_tbl;
2447 ++ soft_mac_entry += entry_index;
2448 ++ soft_mac_entry->index = entry_index;
2449 ++ soft_mac_entry->tcam_key.high.val = mac_key.high.val;
2450 ++ soft_mac_entry->tcam_key.low.val = mac_key.low.val;
2451 ++ /* step back to the START for mc. */
2452 ++ soft_mac_entry = priv->soft_mac_tbl;
2453 ++
2454 ++ /* 2. set promisc multicast vague tcam entry. */
2455 ++ entry_index = hns_dsaf_find_empty_mac_entry_reverse(dsaf_dev);
2456 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX) {
2457 ++ dev_err(dsaf_dev->dev,
2458 ++ "enable mc promisc failed (port:%#x)\n",
2459 ++ port);
2460 + return;
2461 ++ }
2462 ++
2463 ++ memset(&mask_entry, 0x0, sizeof(mask_entry));
2464 ++ memset(&mask_key, 0x0, sizeof(mask_key));
2465 ++ memset(&temp_key, 0x0, sizeof(temp_key));
2466 ++ mask_entry.addr[0] = 0x01;
2467 ++ hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id,
2468 ++ port, mask_entry.addr);
2469 ++ tbl_tcam_mcast.tbl_mcast_item_vld = 1;
2470 ++ tbl_tcam_mcast.tbl_mcast_old_en = 0;
2471 +
2472 +- /* find the tcam entry index for promisc */
2473 +- entry_index = dsaf_promisc_tcam_entry(port);
2474 +-
2475 +- memset(&tbl_tcam_data, 0, sizeof(tbl_tcam_data));
2476 +- memset(&tbl_tcam_mask, 0, sizeof(tbl_tcam_mask));
2477 +-
2478 +- /* config key mask */
2479 +- if (enable) {
2480 +- dsaf_set_field(tbl_tcam_data.low.bits.port_vlan,
2481 +- DSAF_TBL_TCAM_KEY_PORT_M,
2482 +- DSAF_TBL_TCAM_KEY_PORT_S, port);
2483 +- dsaf_set_field(tbl_tcam_mask.low.bits.port_vlan,
2484 +- DSAF_TBL_TCAM_KEY_PORT_M,
2485 +- DSAF_TBL_TCAM_KEY_PORT_S, 0xf);
2486 +-
2487 +- /* SUB_QID */
2488 +- dsaf_set_bit(mac_data.tbl_mcast_port_msk[0],
2489 +- DSAF_SERVICE_NW_NUM, true);
2490 +- mac_data.tbl_mcast_item_vld = true; /* item_vld bit */
2491 ++ if (port < DSAF_SERVICE_NW_NUM) {
2492 ++ mskid = port;
2493 ++ } else if (port >= DSAF_BASE_INNER_PORT_NUM) {
2494 ++ mskid = port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM;
2495 + } else {
2496 +- mac_data.tbl_mcast_item_vld = false; /* item_vld bit */
2497 ++ dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n",
2498 ++ dsaf_dev->ae_dev.name, port,
2499 ++ mask_key.high.val, mask_key.low.val);
2500 ++ return;
2501 + }
2502 +
2503 +- dev_dbg(dsaf_dev->dev,
2504 +- "set_promisc_entry, %s Mac key(%#x:%#x) entry_index%d\n",
2505 +- dsaf_dev->ae_dev.name, tbl_tcam_data.high.val,
2506 +- tbl_tcam_data.low.val, entry_index);
2507 ++ dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],
2508 ++ mskid % 32, 1);
2509 ++ memcpy(&temp_key, &mask_key, sizeof(mask_key));
2510 ++ hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,
2511 ++ (struct dsaf_tbl_tcam_data *)(&mask_key),
2512 ++ &tbl_tcam_mcast);
2513 ++
2514 ++ /* update software entry */
2515 ++ soft_mac_entry += entry_index;
2516 ++ soft_mac_entry->index = entry_index;
2517 ++ soft_mac_entry->tcam_key.high.val = temp_key.high.val;
2518 ++ soft_mac_entry->tcam_key.low.val = temp_key.low.val;
2519 ++}
2520 +
2521 +- /* config promisc entry with mask */
2522 +- hns_dsaf_tcam_mc_cfg(dsaf_dev, entry_index,
2523 +- (struct dsaf_tbl_tcam_data *)&tbl_tcam_data,
2524 +- (struct dsaf_tbl_tcam_data *)&tbl_tcam_mask,
2525 +- &mac_data);
2526 ++static void set_promisc_tcam_disable(struct dsaf_device *dsaf_dev, u32 port)
2527 ++{
2528 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_mc = {0x01000000, port};
2529 ++ struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 0, 0, 0, 0};
2530 ++ struct dsaf_tbl_tcam_mcast_cfg tbl_tcam_mcast = {0, 0, {0} };
2531 ++ struct dsaf_drv_priv *priv = hns_dsaf_dev_priv(dsaf_dev);
2532 ++ struct dsaf_tbl_tcam_data tbl_tcam_data_uc = {0, 0};
2533 ++ struct dsaf_tbl_tcam_data tbl_tcam_mask = {0, 0};
2534 ++ struct dsaf_drv_soft_mac_tbl *soft_mac_entry;
2535 ++ u16 entry_index = DSAF_INVALID_ENTRY_IDX;
2536 ++ struct dsaf_drv_tbl_tcam_key mac_key;
2537 ++ u8 addr[ETH_ALEN] = {0};
2538 +
2539 +- /* config software entry */
2540 ++ /* 1. delete uc vague tcam entry. */
2541 ++ /* promisc use vague table match with vlanid = 0 & macaddr = 0 */
2542 ++ hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
2543 ++ entry_index = hns_dsaf_find_soft_mac_entry(dsaf_dev, &mac_key);
2544 ++
2545 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX)
2546 ++ return;
2547 ++
2548 ++ /* config uc vague table */
2549 ++ hns_dsaf_tcam_uc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_uc,
2550 ++ &tbl_tcam_mask, &tbl_tcam_ucast);
2551 ++ /* update soft management table. */
2552 ++ soft_mac_entry = priv->soft_mac_tbl;
2553 ++ soft_mac_entry += entry_index;
2554 ++ soft_mac_entry->index = DSAF_INVALID_ENTRY_IDX;
2555 ++ /* step back to the START for mc. */
2556 ++ soft_mac_entry = priv->soft_mac_tbl;
2557 ++
2558 ++ /* 2. delete mc vague tcam entry. */
2559 ++ addr[0] = 0x01;
2560 ++ memset(&mac_key, 0x0, sizeof(mac_key));
2561 ++ hns_dsaf_set_mac_key(dsaf_dev, &mac_key, 0x00, port, addr);
2562 ++ entry_index = hns_dsaf_find_soft_mac_entry(dsaf_dev, &mac_key);
2563 ++
2564 ++ if (entry_index == DSAF_INVALID_ENTRY_IDX)
2565 ++ return;
2566 ++
2567 ++ /* config mc vague table */
2568 ++ hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,
2569 ++ &tbl_tcam_mask, &tbl_tcam_mcast);
2570 ++ /* update soft management table. */
2571 + soft_mac_entry += entry_index;
2572 +- soft_mac_entry->index = enable ? entry_index : DSAF_INVALID_ENTRY_IDX;
2573 ++ soft_mac_entry->index = DSAF_INVALID_ENTRY_IDX;
2574 ++}
2575 ++
2576 ++/* Reserve the last TCAM entry for promisc support */
2577 ++void hns_dsaf_set_promisc_tcam(struct dsaf_device *dsaf_dev,
2578 ++ u32 port, bool enable)
2579 ++{
2580 ++ if (enable)
2581 ++ set_promisc_tcam_enable(dsaf_dev, port);
2582 ++ else
2583 ++ set_promisc_tcam_disable(dsaf_dev, port);
2584 + }
2585 +
2586 + int hns_dsaf_wait_pkt_clean(struct dsaf_device *dsaf_dev, int port)
2587 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
2588 +index 74d935d82cbc..b9733b0b8482 100644
2589 +--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
2590 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
2591 +@@ -176,7 +176,7 @@
2592 + #define DSAF_INODE_IN_DATA_STP_DISC_0_REG 0x1A50
2593 + #define DSAF_INODE_GE_FC_EN_0_REG 0x1B00
2594 + #define DSAF_INODE_VC0_IN_PKT_NUM_0_REG 0x1B50
2595 +-#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG 0x1C00
2596 ++#define DSAF_INODE_VC1_IN_PKT_NUM_0_REG 0x103C
2597 + #define DSAF_INODE_IN_PRIO_PAUSE_BASE_REG 0x1C00
2598 + #define DSAF_INODE_IN_PRIO_PAUSE_BASE_OFFSET 0x100
2599 + #define DSAF_INODE_IN_PRIO_PAUSE_OFFSET 0x50
2600 +@@ -404,11 +404,11 @@
2601 + #define RCB_ECC_ERR_ADDR4_REG 0x460
2602 + #define RCB_ECC_ERR_ADDR5_REG 0x464
2603 +
2604 +-#define RCB_COM_SF_CFG_INTMASK_RING 0x480
2605 +-#define RCB_COM_SF_CFG_RING_STS 0x484
2606 +-#define RCB_COM_SF_CFG_RING 0x488
2607 +-#define RCB_COM_SF_CFG_INTMASK_BD 0x48C
2608 +-#define RCB_COM_SF_CFG_BD_RINT_STS 0x470
2609 ++#define RCB_COM_SF_CFG_INTMASK_RING 0x470
2610 ++#define RCB_COM_SF_CFG_RING_STS 0x474
2611 ++#define RCB_COM_SF_CFG_RING 0x478
2612 ++#define RCB_COM_SF_CFG_INTMASK_BD 0x47C
2613 ++#define RCB_COM_SF_CFG_BD_RINT_STS 0x480
2614 + #define RCB_COM_RCB_RD_BD_BUSY 0x490
2615 + #define RCB_COM_RCB_FBD_CRT_EN 0x494
2616 + #define RCB_COM_AXI_WR_ERR_INTMASK 0x498
2617 +@@ -534,6 +534,7 @@
2618 + #define GMAC_LD_LINK_COUNTER_REG 0x01D0UL
2619 + #define GMAC_LOOP_REG 0x01DCUL
2620 + #define GMAC_RECV_CONTROL_REG 0x01E0UL
2621 ++#define GMAC_PCS_RX_EN_REG 0x01E4UL
2622 + #define GMAC_VLAN_CODE_REG 0x01E8UL
2623 + #define GMAC_RX_OVERRUN_CNT_REG 0x01ECUL
2624 + #define GMAC_RX_LENGTHFIELD_ERR_CNT_REG 0x01F4UL
2625 +diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2626 +index 28e907831b0e..6242249c9f4c 100644
2627 +--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2628 ++++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2629 +@@ -1186,6 +1186,9 @@ int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h)
2630 + if (h->phy_if == PHY_INTERFACE_MODE_XGMII)
2631 + phy_dev->autoneg = false;
2632 +
2633 ++ if (h->phy_if == PHY_INTERFACE_MODE_SGMII)
2634 ++ phy_stop(phy_dev);
2635 ++
2636 + return 0;
2637 + }
2638 +
2639 +@@ -1281,6 +1284,22 @@ static int hns_nic_init_affinity_mask(int q_num, int ring_idx,
2640 + return cpu;
2641 + }
2642 +
2643 ++static void hns_nic_free_irq(int q_num, struct hns_nic_priv *priv)
2644 ++{
2645 ++ int i;
2646 ++
2647 ++ for (i = 0; i < q_num * 2; i++) {
2648 ++ if (priv->ring_data[i].ring->irq_init_flag == RCB_IRQ_INITED) {
2649 ++ irq_set_affinity_hint(priv->ring_data[i].ring->irq,
2650 ++ NULL);
2651 ++ free_irq(priv->ring_data[i].ring->irq,
2652 ++ &priv->ring_data[i]);
2653 ++ priv->ring_data[i].ring->irq_init_flag =
2654 ++ RCB_IRQ_NOT_INITED;
2655 ++ }
2656 ++ }
2657 ++}
2658 ++
2659 + static int hns_nic_init_irq(struct hns_nic_priv *priv)
2660 + {
2661 + struct hnae_handle *h = priv->ae_handle;
2662 +@@ -1306,7 +1325,7 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
2663 + if (ret) {
2664 + netdev_err(priv->netdev, "request irq(%d) fail\n",
2665 + rd->ring->irq);
2666 +- return ret;
2667 ++ goto out_free_irq;
2668 + }
2669 + disable_irq(rd->ring->irq);
2670 +
2671 +@@ -1321,6 +1340,10 @@ static int hns_nic_init_irq(struct hns_nic_priv *priv)
2672 + }
2673 +
2674 + return 0;
2675 ++
2676 ++out_free_irq:
2677 ++ hns_nic_free_irq(h->q_num, priv);
2678 ++ return ret;
2679 + }
2680 +
2681 + static int hns_nic_net_up(struct net_device *ndev)
2682 +@@ -1330,6 +1353,9 @@ static int hns_nic_net_up(struct net_device *ndev)
2683 + int i, j;
2684 + int ret;
2685 +
2686 ++ if (!test_bit(NIC_STATE_DOWN, &priv->state))
2687 ++ return 0;
2688 ++
2689 + ret = hns_nic_init_irq(priv);
2690 + if (ret != 0) {
2691 + netdev_err(ndev, "hns init irq failed! ret=%d\n", ret);
2692 +@@ -1365,6 +1391,7 @@ out_has_some_queues:
2693 + for (j = i - 1; j >= 0; j--)
2694 + hns_nic_ring_close(ndev, j);
2695 +
2696 ++ hns_nic_free_irq(h->q_num, priv);
2697 + set_bit(NIC_STATE_DOWN, &priv->state);
2698 +
2699 + return ret;
2700 +@@ -1482,11 +1509,19 @@ static int hns_nic_net_stop(struct net_device *ndev)
2701 + }
2702 +
2703 + static void hns_tx_timeout_reset(struct hns_nic_priv *priv);
2704 ++#define HNS_TX_TIMEO_LIMIT (40 * HZ)
2705 + static void hns_nic_net_timeout(struct net_device *ndev)
2706 + {
2707 + struct hns_nic_priv *priv = netdev_priv(ndev);
2708 +
2709 +- hns_tx_timeout_reset(priv);
2710 ++ if (ndev->watchdog_timeo < HNS_TX_TIMEO_LIMIT) {
2711 ++ ndev->watchdog_timeo *= 2;
2712 ++ netdev_info(ndev, "watchdog_timo changed to %d.\n",
2713 ++ ndev->watchdog_timeo);
2714 ++ } else {
2715 ++ ndev->watchdog_timeo = HNS_NIC_TX_TIMEOUT;
2716 ++ hns_tx_timeout_reset(priv);
2717 ++ }
2718 + }
2719 +
2720 + static int hns_nic_do_ioctl(struct net_device *netdev, struct ifreq *ifr,
2721 +@@ -2049,11 +2084,11 @@ static void hns_nic_service_task(struct work_struct *work)
2722 + = container_of(work, struct hns_nic_priv, service_task);
2723 + struct hnae_handle *h = priv->ae_handle;
2724 +
2725 ++ hns_nic_reset_subtask(priv);
2726 + hns_nic_update_link_status(priv->netdev);
2727 + h->dev->ops->update_led_status(h);
2728 + hns_nic_update_stats(priv->netdev);
2729 +
2730 +- hns_nic_reset_subtask(priv);
2731 + hns_nic_service_event_complete(priv);
2732 + }
2733 +
2734 +@@ -2339,7 +2374,7 @@ static int hns_nic_dev_probe(struct platform_device *pdev)
2735 + ndev->min_mtu = MAC_MIN_MTU;
2736 + switch (priv->enet_ver) {
2737 + case AE_VERSION_2:
2738 +- ndev->features |= NETIF_F_TSO | NETIF_F_TSO6;
2739 ++ ndev->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_NTUPLE;
2740 + ndev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
2741 + NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_GSO |
2742 + NETIF_F_GRO | NETIF_F_TSO | NETIF_F_TSO6;
2743 +diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
2744 +index 5ab21a1b5444..c8704b1690eb 100644
2745 +--- a/drivers/net/ethernet/ibm/ibmvnic.c
2746 ++++ b/drivers/net/ethernet/ibm/ibmvnic.c
2747 +@@ -1939,8 +1939,9 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter,
2748 + static struct ibmvnic_rwi *get_next_rwi(struct ibmvnic_adapter *adapter)
2749 + {
2750 + struct ibmvnic_rwi *rwi;
2751 ++ unsigned long flags;
2752 +
2753 +- mutex_lock(&adapter->rwi_lock);
2754 ++ spin_lock_irqsave(&adapter->rwi_lock, flags);
2755 +
2756 + if (!list_empty(&adapter->rwi_list)) {
2757 + rwi = list_first_entry(&adapter->rwi_list, struct ibmvnic_rwi,
2758 +@@ -1950,7 +1951,7 @@ static struct ibmvnic_rwi *get_next_rwi(struct ibmvnic_adapter *adapter)
2759 + rwi = NULL;
2760 + }
2761 +
2762 +- mutex_unlock(&adapter->rwi_lock);
2763 ++ spin_unlock_irqrestore(&adapter->rwi_lock, flags);
2764 + return rwi;
2765 + }
2766 +
2767 +@@ -2025,6 +2026,7 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
2768 + struct list_head *entry, *tmp_entry;
2769 + struct ibmvnic_rwi *rwi, *tmp;
2770 + struct net_device *netdev = adapter->netdev;
2771 ++ unsigned long flags;
2772 + int ret;
2773 +
2774 + if (adapter->state == VNIC_REMOVING ||
2775 +@@ -2041,21 +2043,21 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
2776 + goto err;
2777 + }
2778 +
2779 +- mutex_lock(&adapter->rwi_lock);
2780 ++ spin_lock_irqsave(&adapter->rwi_lock, flags);
2781 +
2782 + list_for_each(entry, &adapter->rwi_list) {
2783 + tmp = list_entry(entry, struct ibmvnic_rwi, list);
2784 + if (tmp->reset_reason == reason) {
2785 + netdev_dbg(netdev, "Skipping matching reset\n");
2786 +- mutex_unlock(&adapter->rwi_lock);
2787 ++ spin_unlock_irqrestore(&adapter->rwi_lock, flags);
2788 + ret = EBUSY;
2789 + goto err;
2790 + }
2791 + }
2792 +
2793 +- rwi = kzalloc(sizeof(*rwi), GFP_KERNEL);
2794 ++ rwi = kzalloc(sizeof(*rwi), GFP_ATOMIC);
2795 + if (!rwi) {
2796 +- mutex_unlock(&adapter->rwi_lock);
2797 ++ spin_unlock_irqrestore(&adapter->rwi_lock, flags);
2798 + ibmvnic_close(netdev);
2799 + ret = ENOMEM;
2800 + goto err;
2801 +@@ -2069,7 +2071,7 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,
2802 + }
2803 + rwi->reset_reason = reason;
2804 + list_add_tail(&rwi->list, &adapter->rwi_list);
2805 +- mutex_unlock(&adapter->rwi_lock);
2806 ++ spin_unlock_irqrestore(&adapter->rwi_lock, flags);
2807 + adapter->resetting = true;
2808 + netdev_dbg(adapter->netdev, "Scheduling reset (reason %d)\n", reason);
2809 + schedule_work(&adapter->ibmvnic_reset);
2810 +@@ -4700,7 +4702,7 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
2811 +
2812 + INIT_WORK(&adapter->ibmvnic_reset, __ibmvnic_reset);
2813 + INIT_LIST_HEAD(&adapter->rwi_list);
2814 +- mutex_init(&adapter->rwi_lock);
2815 ++ spin_lock_init(&adapter->rwi_lock);
2816 + adapter->resetting = false;
2817 +
2818 + adapter->mac_change_pending = false;
2819 +diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
2820 +index 735f481b1870..09465397b7ff 100644
2821 +--- a/drivers/net/ethernet/ibm/ibmvnic.h
2822 ++++ b/drivers/net/ethernet/ibm/ibmvnic.h
2823 +@@ -1068,7 +1068,7 @@ struct ibmvnic_adapter {
2824 + struct tasklet_struct tasklet;
2825 + enum vnic_state state;
2826 + enum ibmvnic_reset_reason reset_reason;
2827 +- struct mutex rwi_lock;
2828 ++ spinlock_t rwi_lock;
2829 + struct list_head rwi_list;
2830 + struct work_struct ibmvnic_reset;
2831 + bool resetting;
2832 +diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
2833 +index 3c342700bf5f..ed9d3fc4aaba 100644
2834 +--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
2835 ++++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
2836 +@@ -1539,17 +1539,17 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
2837 + netdev_info(netdev, "set new mac address %pM\n", addr->sa_data);
2838 +
2839 + /* Copy the address first, so that we avoid a possible race with
2840 +- * .set_rx_mode(). If we copy after changing the address in the filter
2841 +- * list, we might open ourselves to a narrow race window where
2842 +- * .set_rx_mode could delete our dev_addr filter and prevent traffic
2843 +- * from passing.
2844 ++ * .set_rx_mode().
2845 ++ * - Remove old address from MAC filter
2846 ++ * - Copy new address
2847 ++ * - Add new address to MAC filter
2848 + */
2849 +- ether_addr_copy(netdev->dev_addr, addr->sa_data);
2850 +-
2851 + spin_lock_bh(&vsi->mac_filter_hash_lock);
2852 + i40e_del_mac_filter(vsi, netdev->dev_addr);
2853 +- i40e_add_mac_filter(vsi, addr->sa_data);
2854 ++ ether_addr_copy(netdev->dev_addr, addr->sa_data);
2855 ++ i40e_add_mac_filter(vsi, netdev->dev_addr);
2856 + spin_unlock_bh(&vsi->mac_filter_hash_lock);
2857 ++
2858 + if (vsi->type == I40E_VSI_MAIN) {
2859 + i40e_status ret;
2860 +
2861 +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
2862 +index eea63a99f29c..f6ffd9fb2079 100644
2863 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
2864 ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
2865 +@@ -699,7 +699,6 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
2866 + u8 num_tcs = adapter->hw_tcs;
2867 + u32 reg_val;
2868 + u32 queue;
2869 +- u32 word;
2870 +
2871 + /* remove VLAN filters beloning to this VF */
2872 + ixgbe_clear_vf_vlans(adapter, vf);
2873 +@@ -754,6 +753,14 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
2874 + }
2875 + }
2876 +
2877 ++ IXGBE_WRITE_FLUSH(hw);
2878 ++}
2879 ++
2880 ++static void ixgbe_vf_clear_mbx(struct ixgbe_adapter *adapter, u32 vf)
2881 ++{
2882 ++ struct ixgbe_hw *hw = &adapter->hw;
2883 ++ u32 word;
2884 ++
2885 + /* Clear VF's mailbox memory */
2886 + for (word = 0; word < IXGBE_VFMAILBOX_SIZE; word++)
2887 + IXGBE_WRITE_REG_ARRAY(hw, IXGBE_PFMBMEM(vf), word, 0);
2888 +@@ -827,6 +834,8 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
2889 + /* reset the filters for the device */
2890 + ixgbe_vf_reset_event(adapter, vf);
2891 +
2892 ++ ixgbe_vf_clear_mbx(adapter, vf);
2893 ++
2894 + /* set vf mac address */
2895 + if (!is_zero_ether_addr(vf_mac))
2896 + ixgbe_set_vf_mac(adapter, vf, vf_mac);
2897 +diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
2898 +index aaedf1072460..1393252c6e3c 100644
2899 +--- a/drivers/net/ethernet/microchip/lan743x_main.c
2900 ++++ b/drivers/net/ethernet/microchip/lan743x_main.c
2901 +@@ -802,14 +802,8 @@ static int lan743x_mac_init(struct lan743x_adapter *adapter)
2902 + u32 mac_addr_hi = 0;
2903 + u32 mac_addr_lo = 0;
2904 + u32 data;
2905 +- int ret;
2906 +
2907 + netdev = adapter->netdev;
2908 +- lan743x_csr_write(adapter, MAC_CR, MAC_CR_RST_);
2909 +- ret = lan743x_csr_wait_for_bit(adapter, MAC_CR, MAC_CR_RST_,
2910 +- 0, 1000, 20000, 100);
2911 +- if (ret)
2912 +- return ret;
2913 +
2914 + /* setup auto duplex, and speed detection */
2915 + data = lan743x_csr_read(adapter, MAC_CR);
2916 +@@ -2722,8 +2716,9 @@ static int lan743x_mdiobus_init(struct lan743x_adapter *adapter)
2917 + snprintf(adapter->mdiobus->id, MII_BUS_ID_SIZE,
2918 + "pci-%s", pci_name(adapter->pdev));
2919 +
2920 +- /* set to internal PHY id */
2921 +- adapter->mdiobus->phy_mask = ~(u32)BIT(1);
2922 ++ if ((adapter->csr.id_rev & ID_REV_ID_MASK_) == ID_REV_ID_LAN7430_)
2923 ++ /* LAN7430 uses internal phy at address 1 */
2924 ++ adapter->mdiobus->phy_mask = ~(u32)BIT(1);
2925 +
2926 + /* register mdiobus */
2927 + ret = mdiobus_register(adapter->mdiobus);
2928 +diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
2929 +index 398011c87643..bf4302e45dcd 100644
2930 +--- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
2931 ++++ b/drivers/net/ethernet/neterion/vxge/vxge-config.c
2932 +@@ -807,7 +807,7 @@ __vxge_hw_vpath_fw_ver_get(struct __vxge_hw_virtualpath *vpath,
2933 + struct vxge_hw_device_date *fw_date = &hw_info->fw_date;
2934 + struct vxge_hw_device_version *flash_version = &hw_info->flash_version;
2935 + struct vxge_hw_device_date *flash_date = &hw_info->flash_date;
2936 +- u64 data0, data1 = 0, steer_ctrl = 0;
2937 ++ u64 data0 = 0, data1 = 0, steer_ctrl = 0;
2938 + enum vxge_hw_status status;
2939 +
2940 + status = vxge_hw_vpath_fw_api(vpath,
2941 +diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c
2942 +index 052b3d2c07a1..c662c6f5bee3 100644
2943 +--- a/drivers/net/ethernet/nuvoton/w90p910_ether.c
2944 ++++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c
2945 +@@ -912,7 +912,7 @@ static const struct net_device_ops w90p910_ether_netdev_ops = {
2946 + .ndo_validate_addr = eth_validate_addr,
2947 + };
2948 +
2949 +-static void __init get_mac_address(struct net_device *dev)
2950 ++static void get_mac_address(struct net_device *dev)
2951 + {
2952 + struct w90p910_ether *ether = netdev_priv(dev);
2953 + struct platform_device *pdev;
2954 +diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
2955 +index 0ea141ece19e..6547a9dd5935 100644
2956 +--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
2957 ++++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
2958 +@@ -1125,7 +1125,8 @@ netxen_validate_firmware(struct netxen_adapter *adapter)
2959 + return -EINVAL;
2960 + }
2961 + val = nx_get_bios_version(adapter);
2962 +- netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios);
2963 ++ if (netxen_rom_fast_read(adapter, NX_BIOS_VERSION_OFFSET, (int *)&bios))
2964 ++ return -EIO;
2965 + if ((__force u32)val != bios) {
2966 + dev_err(&pdev->dev, "%s: firmware bios is incompatible\n",
2967 + fw_name[fw_type]);
2968 +diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
2969 +index 14ac9cab2653..2fa1c050a14b 100644
2970 +--- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
2971 ++++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
2972 +@@ -2485,6 +2485,7 @@ static int qed_ll2_start_xmit(struct qed_dev *cdev, struct sk_buff *skb,
2973 + if (unlikely(dma_mapping_error(&cdev->pdev->dev, mapping))) {
2974 + DP_NOTICE(cdev,
2975 + "Unable to map frag - dropping packet\n");
2976 ++ rc = -ENOMEM;
2977 + goto err;
2978 + }
2979 +
2980 +diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
2981 +index 0ff5a403a8dc..b2ff903a9cb6 100644
2982 +--- a/drivers/net/ieee802154/ca8210.c
2983 ++++ b/drivers/net/ieee802154/ca8210.c
2984 +@@ -721,7 +721,7 @@ static void ca8210_mlme_reset_worker(struct work_struct *work)
2985 + static void ca8210_rx_done(struct cas_control *cas_ctl)
2986 + {
2987 + u8 *buf;
2988 +- u8 len;
2989 ++ unsigned int len;
2990 + struct work_priv_container *mlme_reset_wpc;
2991 + struct ca8210_priv *priv = cas_ctl->priv;
2992 +
2993 +@@ -730,7 +730,7 @@ static void ca8210_rx_done(struct cas_control *cas_ctl)
2994 + if (len > CA8210_SPI_BUF_SIZE) {
2995 + dev_crit(
2996 + &priv->spi->dev,
2997 +- "Received packet len (%d) erroneously long\n",
2998 ++ "Received packet len (%u) erroneously long\n",
2999 + len
3000 + );
3001 + goto finish;
3002 +diff --git a/drivers/net/ieee802154/mac802154_hwsim.c b/drivers/net/ieee802154/mac802154_hwsim.c
3003 +index bf70ab892e69..624bff4d3636 100644
3004 +--- a/drivers/net/ieee802154/mac802154_hwsim.c
3005 ++++ b/drivers/net/ieee802154/mac802154_hwsim.c
3006 +@@ -500,7 +500,7 @@ static int hwsim_del_edge_nl(struct sk_buff *msg, struct genl_info *info)
3007 + !info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE])
3008 + return -EINVAL;
3009 +
3010 +- if (nla_parse_nested(edge_attrs, MAC802154_HWSIM_EDGE_ATTR_MAX + 1,
3011 ++ if (nla_parse_nested(edge_attrs, MAC802154_HWSIM_EDGE_ATTR_MAX,
3012 + info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE],
3013 + hwsim_edge_policy, NULL))
3014 + return -EINVAL;
3015 +@@ -550,7 +550,7 @@ static int hwsim_set_edge_lqi(struct sk_buff *msg, struct genl_info *info)
3016 + !info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE])
3017 + return -EINVAL;
3018 +
3019 +- if (nla_parse_nested(edge_attrs, MAC802154_HWSIM_EDGE_ATTR_MAX + 1,
3020 ++ if (nla_parse_nested(edge_attrs, MAC802154_HWSIM_EDGE_ATTR_MAX,
3021 + info->attrs[MAC802154_HWSIM_ATTR_RADIO_EDGE],
3022 + hwsim_edge_policy, NULL))
3023 + return -EINVAL;
3024 +diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
3025 +index c3c9ba44e2a1..8d140495da79 100644
3026 +--- a/drivers/net/usb/lan78xx.c
3027 ++++ b/drivers/net/usb/lan78xx.c
3028 +@@ -2335,6 +2335,10 @@ static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
3029 + ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
3030 + ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
3031 +
3032 ++ /* Added to support MAC address changes */
3033 ++ ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
3034 ++ ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
3035 ++
3036 + return 0;
3037 + }
3038 +
3039 +diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
3040 +index f5bac5075386..774e1ff01c9a 100644
3041 +--- a/drivers/net/usb/qmi_wwan.c
3042 ++++ b/drivers/net/usb/qmi_wwan.c
3043 +@@ -151,17 +151,18 @@ static bool qmimux_has_slaves(struct usbnet *dev)
3044 +
3045 + static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
3046 + {
3047 +- unsigned int len, offset = sizeof(struct qmimux_hdr);
3048 ++ unsigned int len, offset = 0;
3049 + struct qmimux_hdr *hdr;
3050 + struct net_device *net;
3051 + struct sk_buff *skbn;
3052 ++ u8 qmimux_hdr_sz = sizeof(*hdr);
3053 +
3054 +- while (offset < skb->len) {
3055 +- hdr = (struct qmimux_hdr *)skb->data;
3056 ++ while (offset + qmimux_hdr_sz < skb->len) {
3057 ++ hdr = (struct qmimux_hdr *)(skb->data + offset);
3058 + len = be16_to_cpu(hdr->pkt_len);
3059 +
3060 + /* drop the packet, bogus length */
3061 +- if (offset + len > skb->len)
3062 ++ if (offset + len + qmimux_hdr_sz > skb->len)
3063 + return 0;
3064 +
3065 + /* control packet, we do not know what to do */
3066 +@@ -176,7 +177,7 @@ static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
3067 + return 0;
3068 + skbn->dev = net;
3069 +
3070 +- switch (skb->data[offset] & 0xf0) {
3071 ++ switch (skb->data[offset + qmimux_hdr_sz] & 0xf0) {
3072 + case 0x40:
3073 + skbn->protocol = htons(ETH_P_IP);
3074 + break;
3075 +@@ -188,12 +189,12 @@ static int qmimux_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
3076 + goto skip;
3077 + }
3078 +
3079 +- skb_put_data(skbn, skb->data + offset, len);
3080 ++ skb_put_data(skbn, skb->data + offset + qmimux_hdr_sz, len);
3081 + if (netif_rx(skbn) != NET_RX_SUCCESS)
3082 + return 0;
3083 +
3084 + skip:
3085 +- offset += len + sizeof(struct qmimux_hdr);
3086 ++ offset += len + qmimux_hdr_sz;
3087 + }
3088 + return 1;
3089 + }
3090 +diff --git a/drivers/net/wireless/broadcom/b43/phy_common.c b/drivers/net/wireless/broadcom/b43/phy_common.c
3091 +index 85f2ca989565..ef3ffa5ad466 100644
3092 +--- a/drivers/net/wireless/broadcom/b43/phy_common.c
3093 ++++ b/drivers/net/wireless/broadcom/b43/phy_common.c
3094 +@@ -616,7 +616,7 @@ struct b43_c32 b43_cordic(int theta)
3095 + u8 i;
3096 + s32 tmp;
3097 + s8 signx = 1;
3098 +- u32 angle = 0;
3099 ++ s32 angle = 0;
3100 + struct b43_c32 ret = { .i = 39797, .q = 0, };
3101 +
3102 + while (theta > (180 << 16))
3103 +diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
3104 +index 7cdb3e740522..0a3e046d78db 100644
3105 +--- a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
3106 ++++ b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
3107 +@@ -681,6 +681,7 @@ int mt76x0_register_device(struct mt76x0_dev *dev)
3108 + ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
3109 + ieee80211_hw_set(hw, AMPDU_AGGREGATION);
3110 + ieee80211_hw_set(hw, SUPPORTS_RC_TABLE);
3111 ++ ieee80211_hw_set(hw, MFP_CAPABLE);
3112 + hw->max_rates = 1;
3113 + hw->max_report_rates = 7;
3114 + hw->max_rate_tries = 1;
3115 +diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
3116 +index af48d43bb7dc..20447fdce4c3 100644
3117 +--- a/drivers/net/wireless/mediatek/mt76/tx.c
3118 ++++ b/drivers/net/wireless/mediatek/mt76/tx.c
3119 +@@ -385,7 +385,12 @@ void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta,
3120 +
3121 + for (i = 0; i < ARRAY_SIZE(sta->txq); i++) {
3122 + struct ieee80211_txq *txq = sta->txq[i];
3123 +- struct mt76_txq *mtxq = (struct mt76_txq *) txq->drv_priv;
3124 ++ struct mt76_txq *mtxq;
3125 ++
3126 ++ if (!txq)
3127 ++ continue;
3128 ++
3129 ++ mtxq = (struct mt76_txq *)txq->drv_priv;
3130 +
3131 + spin_lock_bh(&mtxq->hwq->lock);
3132 + mtxq->send_bar = mtxq->aggr && send_bar;
3133 +diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
3134 +index 2082ae01b9c8..1d432c5ed275 100644
3135 +--- a/drivers/nvdimm/pmem.c
3136 ++++ b/drivers/nvdimm/pmem.c
3137 +@@ -309,8 +309,11 @@ static void pmem_release_queue(void *q)
3138 + blk_cleanup_queue(q);
3139 + }
3140 +
3141 +-static void pmem_freeze_queue(void *q)
3142 ++static void pmem_freeze_queue(struct percpu_ref *ref)
3143 + {
3144 ++ struct request_queue *q;
3145 ++
3146 ++ q = container_of(ref, typeof(*q), q_usage_counter);
3147 + blk_freeze_queue_start(q);
3148 + }
3149 +
3150 +@@ -402,6 +405,7 @@ static int pmem_attach_disk(struct device *dev,
3151 +
3152 + pmem->pfn_flags = PFN_DEV;
3153 + pmem->pgmap.ref = &q->q_usage_counter;
3154 ++ pmem->pgmap.kill = pmem_freeze_queue;
3155 + if (is_nd_pfn(dev)) {
3156 + if (setup_pagemap_fsdax(dev, &pmem->pgmap))
3157 + return -ENOMEM;
3158 +@@ -427,13 +431,6 @@ static int pmem_attach_disk(struct device *dev,
3159 + memcpy(&bb_res, &nsio->res, sizeof(bb_res));
3160 + }
3161 +
3162 +- /*
3163 +- * At release time the queue must be frozen before
3164 +- * devm_memremap_pages is unwound
3165 +- */
3166 +- if (devm_add_action_or_reset(dev, pmem_freeze_queue, q))
3167 +- return -ENOMEM;
3168 +-
3169 + if (IS_ERR(addr))
3170 + return PTR_ERR(addr);
3171 + pmem->virt_addr = addr;
3172 +diff --git a/drivers/of/base.c b/drivers/of/base.c
3173 +index 70f5fd08891b..3f21ea6a90dc 100644
3174 +--- a/drivers/of/base.c
3175 ++++ b/drivers/of/base.c
3176 +@@ -115,9 +115,6 @@ int __weak of_node_to_nid(struct device_node *np)
3177 + }
3178 + #endif
3179 +
3180 +-static struct device_node **phandle_cache;
3181 +-static u32 phandle_cache_mask;
3182 +-
3183 + /*
3184 + * Assumptions behind phandle_cache implementation:
3185 + * - phandle property values are in a contiguous range of 1..n
3186 +@@ -126,6 +123,66 @@ static u32 phandle_cache_mask;
3187 + * - the phandle lookup overhead reduction provided by the cache
3188 + * will likely be less
3189 + */
3190 ++
3191 ++static struct device_node **phandle_cache;
3192 ++static u32 phandle_cache_mask;
3193 ++
3194 ++/*
3195 ++ * Caller must hold devtree_lock.
3196 ++ */
3197 ++static void __of_free_phandle_cache(void)
3198 ++{
3199 ++ u32 cache_entries = phandle_cache_mask + 1;
3200 ++ u32 k;
3201 ++
3202 ++ if (!phandle_cache)
3203 ++ return;
3204 ++
3205 ++ for (k = 0; k < cache_entries; k++)
3206 ++ of_node_put(phandle_cache[k]);
3207 ++
3208 ++ kfree(phandle_cache);
3209 ++ phandle_cache = NULL;
3210 ++}
3211 ++
3212 ++int of_free_phandle_cache(void)
3213 ++{
3214 ++ unsigned long flags;
3215 ++
3216 ++ raw_spin_lock_irqsave(&devtree_lock, flags);
3217 ++
3218 ++ __of_free_phandle_cache();
3219 ++
3220 ++ raw_spin_unlock_irqrestore(&devtree_lock, flags);
3221 ++
3222 ++ return 0;
3223 ++}
3224 ++#if !defined(CONFIG_MODULES)
3225 ++late_initcall_sync(of_free_phandle_cache);
3226 ++#endif
3227 ++
3228 ++/*
3229 ++ * Caller must hold devtree_lock.
3230 ++ */
3231 ++void __of_free_phandle_cache_entry(phandle handle)
3232 ++{
3233 ++ phandle masked_handle;
3234 ++ struct device_node *np;
3235 ++
3236 ++ if (!handle)
3237 ++ return;
3238 ++
3239 ++ masked_handle = handle & phandle_cache_mask;
3240 ++
3241 ++ if (phandle_cache) {
3242 ++ np = phandle_cache[masked_handle];
3243 ++ if (np && handle == np->phandle) {
3244 ++ of_node_put(np);
3245 ++ phandle_cache[masked_handle] = NULL;
3246 ++ }
3247 ++ }
3248 ++}
3249 ++
3250 + void of_populate_phandle_cache(void)
3251 + {
3252 + unsigned long flags;
3253 +@@ -135,8 +192,7 @@ void of_populate_phandle_cache(void)
3254 +
3255 + raw_spin_lock_irqsave(&devtree_lock, flags);
3256 +
3257 +- kfree(phandle_cache);
3258 +- phandle_cache = NULL;
3259 ++ __of_free_phandle_cache();
3260 +
3261 + for_each_of_allnodes(np)
3262 + if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL)
3263 +@@ -154,30 +210,15 @@ void of_populate_phandle_cache(void)
3264 + goto out;
3265 +
3266 + for_each_of_allnodes(np)
3267 +- if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL)
3268 ++ if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL) {
3269 ++ of_node_get(np);
3270 + phandle_cache[np->phandle & phandle_cache_mask] = np;
3271 ++ }
3272 +
3273 + out:
3274 + raw_spin_unlock_irqrestore(&devtree_lock, flags);
3275 + }
3276 +
3277 +-int of_free_phandle_cache(void)
3278 +-{
3279 +- unsigned long flags;
3280 +-
3281 +- raw_spin_lock_irqsave(&devtree_lock, flags);
3282 +-
3283 +- kfree(phandle_cache);
3284 +- phandle_cache = NULL;
3285 +-
3286 +- raw_spin_unlock_irqrestore(&devtree_lock, flags);
3287 +-
3288 +- return 0;
3289 +-}
3290 +-#if !defined(CONFIG_MODULES)
3291 +-late_initcall_sync(of_free_phandle_cache);
3292 +-#endif
3293 +-
3294 + void __init of_core_init(void)
3295 + {
3296 + struct device_node *np;
3297 +@@ -1150,13 +1191,23 @@ struct device_node *of_find_node_by_phandle(phandle handle)
3298 + if (phandle_cache[masked_handle] &&
3299 + handle == phandle_cache[masked_handle]->phandle)
3300 + np = phandle_cache[masked_handle];
3301 ++ if (np && of_node_check_flag(np, OF_DETACHED)) {
3302 ++ WARN_ON(1); /* did not uncache np on node removal */
3303 ++ of_node_put(np);
3304 ++ phandle_cache[masked_handle] = NULL;
3305 ++ np = NULL;
3306 ++ }
3307 + }
3308 +
3309 + if (!np) {
3310 + for_each_of_allnodes(np)
3311 +- if (np->phandle == handle) {
3312 +- if (phandle_cache)
3313 ++ if (np->phandle == handle &&
3314 ++ !of_node_check_flag(np, OF_DETACHED)) {
3315 ++ if (phandle_cache) {
3316 ++ /* will put when removed from cache */
3317 ++ of_node_get(np);
3318 + phandle_cache[masked_handle] = np;
3319 ++ }
3320 + break;
3321 + }
3322 + }
3323 +diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c
3324 +index f4f8ed9b5454..ecea92f68c87 100644
3325 +--- a/drivers/of/dynamic.c
3326 ++++ b/drivers/of/dynamic.c
3327 +@@ -268,6 +268,9 @@ void __of_detach_node(struct device_node *np)
3328 + }
3329 +
3330 + of_node_set_flag(np, OF_DETACHED);
3331 ++
3332 ++ /* race with of_find_node_by_phandle() prevented by devtree_lock */
3333 ++ __of_free_phandle_cache_entry(np->phandle);
3334 + }
3335 +
3336 + /**
3337 +diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
3338 +index 216175d11d3d..f5da842841e5 100644
3339 +--- a/drivers/of/of_private.h
3340 ++++ b/drivers/of/of_private.h
3341 +@@ -76,6 +76,10 @@ static inline void __of_detach_node_sysfs(struct device_node *np) {}
3342 + int of_resolve_phandles(struct device_node *tree);
3343 + #endif
3344 +
3345 ++#if defined(CONFIG_OF_DYNAMIC)
3346 ++void __of_free_phandle_cache_entry(phandle handle);
3347 ++#endif
3348 ++
3349 + #if defined(CONFIG_OF_OVERLAY)
3350 + void of_overlay_mutex_lock(void);
3351 + void of_overlay_mutex_unlock(void);
3352 +diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
3353 +index bef17c3fca67..33f3f475e5c6 100644
3354 +--- a/drivers/pci/pci-driver.c
3355 ++++ b/drivers/pci/pci-driver.c
3356 +@@ -1251,30 +1251,29 @@ static int pci_pm_runtime_suspend(struct device *dev)
3357 + return 0;
3358 + }
3359 +
3360 +- if (!pm || !pm->runtime_suspend)
3361 +- return -ENOSYS;
3362 +-
3363 + pci_dev->state_saved = false;
3364 +- error = pm->runtime_suspend(dev);
3365 +- if (error) {
3366 ++ if (pm && pm->runtime_suspend) {
3367 ++ error = pm->runtime_suspend(dev);
3368 + /*
3369 + * -EBUSY and -EAGAIN is used to request the runtime PM core
3370 + * to schedule a new suspend, so log the event only with debug
3371 + * log level.
3372 + */
3373 +- if (error == -EBUSY || error == -EAGAIN)
3374 ++ if (error == -EBUSY || error == -EAGAIN) {
3375 + dev_dbg(dev, "can't suspend now (%pf returned %d)\n",
3376 + pm->runtime_suspend, error);
3377 +- else
3378 ++ return error;
3379 ++ } else if (error) {
3380 + dev_err(dev, "can't suspend (%pf returned %d)\n",
3381 + pm->runtime_suspend, error);
3382 +-
3383 +- return error;
3384 ++ return error;
3385 ++ }
3386 + }
3387 +
3388 + pci_fixup_device(pci_fixup_suspend, pci_dev);
3389 +
3390 +- if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
3391 ++ if (pm && pm->runtime_suspend
3392 ++ && !pci_dev->state_saved && pci_dev->current_state != PCI_D0
3393 + && pci_dev->current_state != PCI_UNKNOWN) {
3394 + WARN_ONCE(pci_dev->current_state != prev,
3395 + "PCI PM: State of device not saved by %pF\n",
3396 +@@ -1292,7 +1291,7 @@ static int pci_pm_runtime_suspend(struct device *dev)
3397 +
3398 + static int pci_pm_runtime_resume(struct device *dev)
3399 + {
3400 +- int rc;
3401 ++ int rc = 0;
3402 + struct pci_dev *pci_dev = to_pci_dev(dev);
3403 + const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
3404 +
3405 +@@ -1306,14 +1305,12 @@ static int pci_pm_runtime_resume(struct device *dev)
3406 + if (!pci_dev->driver)
3407 + return 0;
3408 +
3409 +- if (!pm || !pm->runtime_resume)
3410 +- return -ENOSYS;
3411 +-
3412 + pci_fixup_device(pci_fixup_resume_early, pci_dev);
3413 + pci_enable_wake(pci_dev, PCI_D0, false);
3414 + pci_fixup_device(pci_fixup_resume, pci_dev);
3415 +
3416 +- rc = pm->runtime_resume(dev);
3417 ++ if (pm && pm->runtime_resume)
3418 ++ rc = pm->runtime_resume(dev);
3419 +
3420 + pci_dev->runtime_d3cold = false;
3421 +
3422 +diff --git a/drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c b/drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c
3423 +index 1b10ea05a914..69372e2bc93c 100644
3424 +--- a/drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c
3425 ++++ b/drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c
3426 +@@ -30,8 +30,8 @@
3427 + #define DDRC_FLUX_RCMD 0x38c
3428 + #define DDRC_PRE_CMD 0x3c0
3429 + #define DDRC_ACT_CMD 0x3c4
3430 +-#define DDRC_BNK_CHG 0x3c8
3431 + #define DDRC_RNK_CHG 0x3cc
3432 ++#define DDRC_RW_CHG 0x3d0
3433 + #define DDRC_EVENT_CTRL 0x6C0
3434 + #define DDRC_INT_MASK 0x6c8
3435 + #define DDRC_INT_STATUS 0x6cc
3436 +@@ -51,7 +51,7 @@
3437 +
3438 + static const u32 ddrc_reg_off[] = {
3439 + DDRC_FLUX_WR, DDRC_FLUX_RD, DDRC_FLUX_WCMD, DDRC_FLUX_RCMD,
3440 +- DDRC_PRE_CMD, DDRC_ACT_CMD, DDRC_BNK_CHG, DDRC_RNK_CHG
3441 ++ DDRC_PRE_CMD, DDRC_ACT_CMD, DDRC_RNK_CHG, DDRC_RW_CHG
3442 + };
3443 +
3444 + /*
3445 +diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
3446 +index 4f3ab18636a3..c8eff70fdb1c 100644
3447 +--- a/drivers/pinctrl/meson/pinctrl-meson.c
3448 ++++ b/drivers/pinctrl/meson/pinctrl-meson.c
3449 +@@ -191,7 +191,8 @@ static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin,
3450 + case PIN_CONFIG_BIAS_DISABLE:
3451 + dev_dbg(pc->dev, "pin %u: disable bias\n", pin);
3452 +
3453 +- meson_calc_reg_and_bit(bank, pin, REG_PULL, &reg, &bit);
3454 ++ meson_calc_reg_and_bit(bank, pin, REG_PULLEN, &reg,
3455 ++ &bit);
3456 + ret = regmap_update_bits(pc->reg_pullen, reg,
3457 + BIT(bit), 0);
3458 + if (ret)
3459 +diff --git a/drivers/power/supply/olpc_battery.c b/drivers/power/supply/olpc_battery.c
3460 +index 6da79ae14860..5a97e42a3547 100644
3461 +--- a/drivers/power/supply/olpc_battery.c
3462 ++++ b/drivers/power/supply/olpc_battery.c
3463 +@@ -428,14 +428,14 @@ static int olpc_bat_get_property(struct power_supply *psy,
3464 + if (ret)
3465 + return ret;
3466 +
3467 +- val->intval = (s16)be16_to_cpu(ec_word) * 100 / 256;
3468 ++ val->intval = (s16)be16_to_cpu(ec_word) * 10 / 256;
3469 + break;
3470 + case POWER_SUPPLY_PROP_TEMP_AMBIENT:
3471 + ret = olpc_ec_cmd(EC_AMB_TEMP, NULL, 0, (void *)&ec_word, 2);
3472 + if (ret)
3473 + return ret;
3474 +
3475 +- val->intval = (int)be16_to_cpu(ec_word) * 100 / 256;
3476 ++ val->intval = (int)be16_to_cpu(ec_word) * 10 / 256;
3477 + break;
3478 + case POWER_SUPPLY_PROP_CHARGE_COUNTER:
3479 + ret = olpc_ec_cmd(EC_BAT_ACR, NULL, 0, (void *)&ec_word, 2);
3480 +diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
3481 +index 94f4d8fe85e0..d1b531fe9ada 100644
3482 +--- a/drivers/s390/scsi/zfcp_aux.c
3483 ++++ b/drivers/s390/scsi/zfcp_aux.c
3484 +@@ -275,16 +275,16 @@ static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter)
3485 + */
3486 + int zfcp_status_read_refill(struct zfcp_adapter *adapter)
3487 + {
3488 +- while (atomic_read(&adapter->stat_miss) > 0)
3489 ++ while (atomic_add_unless(&adapter->stat_miss, -1, 0))
3490 + if (zfcp_fsf_status_read(adapter->qdio)) {
3491 ++ atomic_inc(&adapter->stat_miss); /* undo add -1 */
3492 + if (atomic_read(&adapter->stat_miss) >=
3493 + adapter->stat_read_buf_num) {
3494 + zfcp_erp_adapter_reopen(adapter, 0, "axsref1");
3495 + return 1;
3496 + }
3497 + break;
3498 +- } else
3499 +- atomic_dec(&adapter->stat_miss);
3500 ++ }
3501 + return 0;
3502 + }
3503 +
3504 +diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
3505 +index f00045813378..3f97ec4aac4b 100644
3506 +--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
3507 ++++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
3508 +@@ -2371,7 +2371,7 @@ static int _bnx2fc_create(struct net_device *netdev,
3509 + if (!interface) {
3510 + printk(KERN_ERR PFX "bnx2fc_interface_create failed\n");
3511 + rc = -ENOMEM;
3512 +- goto ifput_err;
3513 ++ goto netdev_err;
3514 + }
3515 +
3516 + if (is_vlan_dev(netdev)) {
3517 +diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
3518 +index be2bac9355cd..a490e63c94b6 100644
3519 +--- a/drivers/scsi/lpfc/lpfc_sli.c
3520 ++++ b/drivers/scsi/lpfc/lpfc_sli.c
3521 +@@ -14221,7 +14221,8 @@ lpfc_sli4_queue_alloc(struct lpfc_hba *phba, uint32_t page_size,
3522 + hw_page_size))/hw_page_size;
3523 +
3524 + /* If needed, Adjust page count to match the max the adapter supports */
3525 +- if (queue->page_count > phba->sli4_hba.pc_sli4_params.wqpcnt)
3526 ++ if (phba->sli4_hba.pc_sli4_params.wqpcnt &&
3527 ++ (queue->page_count > phba->sli4_hba.pc_sli4_params.wqpcnt))
3528 + queue->page_count = phba->sli4_hba.pc_sli4_params.wqpcnt;
3529 +
3530 + INIT_LIST_HEAD(&queue->list);
3531 +diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
3532 +index ae9fd2d01004..42b8f0d3e580 100644
3533 +--- a/drivers/scsi/qla2xxx/qla_os.c
3534 ++++ b/drivers/scsi/qla2xxx/qla_os.c
3535 +@@ -4808,10 +4808,10 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
3536 + fcport->d_id = e->u.new_sess.id;
3537 + fcport->flags |= FCF_FABRIC_DEVICE;
3538 + fcport->fw_login_state = DSC_LS_PLOGI_PEND;
3539 +- if (e->u.new_sess.fc4_type & FS_FC4TYPE_FCP)
3540 ++ if (e->u.new_sess.fc4_type == FS_FC4TYPE_FCP)
3541 + fcport->fc4_type = FC4_TYPE_FCP_SCSI;
3542 +
3543 +- if (e->u.new_sess.fc4_type & FS_FC4TYPE_NVME) {
3544 ++ if (e->u.new_sess.fc4_type == FS_FC4TYPE_NVME) {
3545 + fcport->fc4_type = FC4_TYPE_OTHER;
3546 + fcport->fc4f_nvme = FC4_TYPE_NVME;
3547 + }
3548 +diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
3549 +index 8de16016b6de..b289b90ae6dc 100644
3550 +--- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
3551 ++++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
3552 +@@ -631,8 +631,11 @@ static void cxgbit_send_halfclose(struct cxgbit_sock *csk)
3553 +
3554 + static void cxgbit_arp_failure_discard(void *handle, struct sk_buff *skb)
3555 + {
3556 ++ struct cxgbit_sock *csk = handle;
3557 ++
3558 + pr_debug("%s cxgbit_device %p\n", __func__, handle);
3559 + kfree_skb(skb);
3560 ++ cxgbit_put_csk(csk);
3561 + }
3562 +
3563 + static void cxgbit_abort_arp_failure(void *handle, struct sk_buff *skb)
3564 +@@ -1190,7 +1193,7 @@ cxgbit_pass_accept_rpl(struct cxgbit_sock *csk, struct cpl_pass_accept_req *req)
3565 + rpl5->opt0 = cpu_to_be64(opt0);
3566 + rpl5->opt2 = cpu_to_be32(opt2);
3567 + set_wr_txq(skb, CPL_PRIORITY_SETUP, csk->ctrlq_idx);
3568 +- t4_set_arp_err_handler(skb, NULL, cxgbit_arp_failure_discard);
3569 ++ t4_set_arp_err_handler(skb, csk, cxgbit_arp_failure_discard);
3570 + cxgbit_l2t_send(csk->com.cdev, skb, csk->l2t);
3571 + }
3572 +
3573 +diff --git a/drivers/target/iscsi/cxgbit/cxgbit_main.c b/drivers/target/iscsi/cxgbit/cxgbit_main.c
3574 +index f3f8856bfb68..c011c826fc26 100644
3575 +--- a/drivers/target/iscsi/cxgbit/cxgbit_main.c
3576 ++++ b/drivers/target/iscsi/cxgbit/cxgbit_main.c
3577 +@@ -58,6 +58,7 @@ static void *cxgbit_uld_add(const struct cxgb4_lld_info *lldi)
3578 + return ERR_PTR(-ENOMEM);
3579 +
3580 + kref_init(&cdev->kref);
3581 ++ spin_lock_init(&cdev->np_lock);
3582 +
3583 + cdev->lldi = *lldi;
3584 +
3585 +diff --git a/drivers/tty/serial/sunsu.c b/drivers/tty/serial/sunsu.c
3586 +index 6cf3e9b0728f..3e77475668c0 100644
3587 +--- a/drivers/tty/serial/sunsu.c
3588 ++++ b/drivers/tty/serial/sunsu.c
3589 +@@ -1394,22 +1394,43 @@ static inline struct console *SUNSU_CONSOLE(void)
3590 + static enum su_type su_get_type(struct device_node *dp)
3591 + {
3592 + struct device_node *ap = of_find_node_by_path("/aliases");
3593 ++ enum su_type rc = SU_PORT_PORT;
3594 +
3595 + if (ap) {
3596 + const char *keyb = of_get_property(ap, "keyboard", NULL);
3597 + const char *ms = of_get_property(ap, "mouse", NULL);
3598 ++ struct device_node *match;
3599 +
3600 + if (keyb) {
3601 +- if (dp == of_find_node_by_path(keyb))
3602 +- return SU_PORT_KBD;
3603 ++ match = of_find_node_by_path(keyb);
3604 ++
3605 ++ /*
3606 ++ * The pointer is used as an identifier not
3607 ++ * as a pointer, we can drop the refcount on
3608 ++ * the of__node immediately after getting it.
3609 ++ */
3610 ++ of_node_put(match);
3611 ++
3612 ++ if (dp == match) {
3613 ++ rc = SU_PORT_KBD;
3614 ++ goto out;
3615 ++ }
3616 + }
3617 + if (ms) {
3618 +- if (dp == of_find_node_by_path(ms))
3619 +- return SU_PORT_MS;
3620 ++ match = of_find_node_by_path(ms);
3621 ++
3622 ++ of_node_put(match);
3623 ++
3624 ++ if (dp == match) {
3625 ++ rc = SU_PORT_MS;
3626 ++ goto out;
3627 ++ }
3628 + }
3629 + }
3630 +
3631 +- return SU_PORT_PORT;
3632 ++out:
3633 ++ of_node_put(ap);
3634 ++ return rc;
3635 + }
3636 +
3637 + static int su_probe(struct platform_device *op)
3638 +diff --git a/drivers/video/fbdev/pxafb.c b/drivers/video/fbdev/pxafb.c
3639 +index bbed039617a4..d59c8a59f582 100644
3640 +--- a/drivers/video/fbdev/pxafb.c
3641 ++++ b/drivers/video/fbdev/pxafb.c
3642 +@@ -2234,10 +2234,8 @@ static struct pxafb_mach_info *of_pxafb_of_mach_info(struct device *dev)
3643 + if (!info)
3644 + return ERR_PTR(-ENOMEM);
3645 + ret = of_get_pxafb_mode_info(dev, info);
3646 +- if (ret) {
3647 +- kfree(info->modes);
3648 ++ if (ret)
3649 + return ERR_PTR(ret);
3650 +- }
3651 +
3652 + /*
3653 + * On purpose, neither lccrX registers nor video memory size can be
3654 +diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
3655 +index dd7dfdd2ba13..eadffaa39f4e 100644
3656 +--- a/fs/ceph/caps.c
3657 ++++ b/fs/ceph/caps.c
3658 +@@ -3566,7 +3566,6 @@ retry:
3659 + tcap->cap_id = t_cap_id;
3660 + tcap->seq = t_seq - 1;
3661 + tcap->issue_seq = t_seq - 1;
3662 +- tcap->mseq = t_mseq;
3663 + tcap->issued |= issued;
3664 + tcap->implemented |= issued;
3665 + if (cap == ci->i_auth_cap)
3666 +diff --git a/fs/dlm/lock.c b/fs/dlm/lock.c
3667 +index cc91963683de..a928ba008d7d 100644
3668 +--- a/fs/dlm/lock.c
3669 ++++ b/fs/dlm/lock.c
3670 +@@ -1209,6 +1209,7 @@ static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret)
3671 +
3672 + if (rv < 0) {
3673 + log_error(ls, "create_lkb idr error %d", rv);
3674 ++ dlm_free_lkb(lkb);
3675 + return rv;
3676 + }
3677 +
3678 +@@ -4179,6 +4180,7 @@ static int receive_convert(struct dlm_ls *ls, struct dlm_message *ms)
3679 + (unsigned long long)lkb->lkb_recover_seq,
3680 + ms->m_header.h_nodeid, ms->m_lkid);
3681 + error = -ENOENT;
3682 ++ dlm_put_lkb(lkb);
3683 + goto fail;
3684 + }
3685 +
3686 +@@ -4232,6 +4234,7 @@ static int receive_unlock(struct dlm_ls *ls, struct dlm_message *ms)
3687 + lkb->lkb_id, lkb->lkb_remid,
3688 + ms->m_header.h_nodeid, ms->m_lkid);
3689 + error = -ENOENT;
3690 ++ dlm_put_lkb(lkb);
3691 + goto fail;
3692 + }
3693 +
3694 +@@ -5792,20 +5795,20 @@ int dlm_user_request(struct dlm_ls *ls, struct dlm_user_args *ua,
3695 + goto out;
3696 + }
3697 + }
3698 +-
3699 +- /* After ua is attached to lkb it will be freed by dlm_free_lkb().
3700 +- When DLM_IFL_USER is set, the dlm knows that this is a userspace
3701 +- lock and that lkb_astparam is the dlm_user_args structure. */
3702 +-
3703 + error = set_lock_args(mode, &ua->lksb, flags, namelen, timeout_cs,
3704 + fake_astfn, ua, fake_bastfn, &args);
3705 +- lkb->lkb_flags |= DLM_IFL_USER;
3706 +-
3707 + if (error) {
3708 ++ kfree(ua->lksb.sb_lvbptr);
3709 ++ ua->lksb.sb_lvbptr = NULL;
3710 ++ kfree(ua);
3711 + __put_lkb(ls, lkb);
3712 + goto out;
3713 + }
3714 +
3715 ++ /* After ua is attached to lkb it will be freed by dlm_free_lkb().
3716 ++ When DLM_IFL_USER is set, the dlm knows that this is a userspace
3717 ++ lock and that lkb_astparam is the dlm_user_args structure. */
3718 ++ lkb->lkb_flags |= DLM_IFL_USER;
3719 + error = request_lock(ls, lkb, name, namelen, &args);
3720 +
3721 + switch (error) {
3722 +diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
3723 +index 5ba94be006ee..6a1529e478f3 100644
3724 +--- a/fs/dlm/lockspace.c
3725 ++++ b/fs/dlm/lockspace.c
3726 +@@ -680,11 +680,11 @@ static int new_lockspace(const char *name, const char *cluster,
3727 + kfree(ls->ls_recover_buf);
3728 + out_lkbidr:
3729 + idr_destroy(&ls->ls_lkbidr);
3730 ++ out_rsbtbl:
3731 + for (i = 0; i < DLM_REMOVE_NAMES_MAX; i++) {
3732 + if (ls->ls_remove_names[i])
3733 + kfree(ls->ls_remove_names[i]);
3734 + }
3735 +- out_rsbtbl:
3736 + vfree(ls->ls_rsbtbl);
3737 + out_lsfree:
3738 + if (do_unreg)
3739 +diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
3740 +index 648f0ca1ad57..998051c4aea7 100644
3741 +--- a/fs/gfs2/inode.c
3742 ++++ b/fs/gfs2/inode.c
3743 +@@ -744,17 +744,19 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
3744 + the gfs2 structures. */
3745 + if (default_acl) {
3746 + error = __gfs2_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
3747 ++ if (error)
3748 ++ goto fail_gunlock3;
3749 + posix_acl_release(default_acl);
3750 ++ default_acl = NULL;
3751 + }
3752 + if (acl) {
3753 +- if (!error)
3754 +- error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
3755 ++ error = __gfs2_set_acl(inode, acl, ACL_TYPE_ACCESS);
3756 ++ if (error)
3757 ++ goto fail_gunlock3;
3758 + posix_acl_release(acl);
3759 ++ acl = NULL;
3760 + }
3761 +
3762 +- if (error)
3763 +- goto fail_gunlock3;
3764 +-
3765 + error = security_inode_init_security(&ip->i_inode, &dip->i_inode, name,
3766 + &gfs2_initxattrs, NULL);
3767 + if (error)
3768 +@@ -789,10 +791,8 @@ fail_free_inode:
3769 + }
3770 + gfs2_rsqa_delete(ip, NULL);
3771 + fail_free_acls:
3772 +- if (default_acl)
3773 +- posix_acl_release(default_acl);
3774 +- if (acl)
3775 +- posix_acl_release(acl);
3776 ++ posix_acl_release(default_acl);
3777 ++ posix_acl_release(acl);
3778 + fail_gunlock:
3779 + gfs2_dir_no_add(&da);
3780 + gfs2_glock_dq_uninit(ghs);
3781 +diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
3782 +index 449d0cb45a84..e978f6930575 100644
3783 +--- a/fs/gfs2/rgrp.c
3784 ++++ b/fs/gfs2/rgrp.c
3785 +@@ -1747,9 +1747,9 @@ static int gfs2_rbm_find(struct gfs2_rbm *rbm, u8 state, u32 *minext,
3786 + goto next_iter;
3787 + }
3788 + if (ret == -E2BIG) {
3789 ++ n += rbm->bii - initial_bii;
3790 + rbm->bii = 0;
3791 + rbm->offset = 0;
3792 +- n += (rbm->bii - initial_bii);
3793 + goto res_covered_end_of_rgrp;
3794 + }
3795 + return ret;
3796 +diff --git a/fs/lockd/clntproc.c b/fs/lockd/clntproc.c
3797 +index d20b92f271c2..0a67dd4250e9 100644
3798 +--- a/fs/lockd/clntproc.c
3799 ++++ b/fs/lockd/clntproc.c
3800 +@@ -442,7 +442,7 @@ nlmclnt_test(struct nlm_rqst *req, struct file_lock *fl)
3801 + fl->fl_start = req->a_res.lock.fl.fl_start;
3802 + fl->fl_end = req->a_res.lock.fl.fl_end;
3803 + fl->fl_type = req->a_res.lock.fl.fl_type;
3804 +- fl->fl_pid = 0;
3805 ++ fl->fl_pid = -req->a_res.lock.fl.fl_pid;
3806 + break;
3807 + default:
3808 + status = nlm_stat_to_errno(req->a_res.status);
3809 +diff --git a/fs/lockd/xdr.c b/fs/lockd/xdr.c
3810 +index 7147e4aebecc..9846f7e95282 100644
3811 +--- a/fs/lockd/xdr.c
3812 ++++ b/fs/lockd/xdr.c
3813 +@@ -127,7 +127,7 @@ nlm_decode_lock(__be32 *p, struct nlm_lock *lock)
3814 +
3815 + locks_init_lock(fl);
3816 + fl->fl_owner = current->files;
3817 +- fl->fl_pid = (pid_t)lock->svid;
3818 ++ fl->fl_pid = current->tgid;
3819 + fl->fl_flags = FL_POSIX;
3820 + fl->fl_type = F_RDLCK; /* as good as anything else */
3821 + start = ntohl(*p++);
3822 +@@ -269,7 +269,7 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
3823 + memset(lock, 0, sizeof(*lock));
3824 + locks_init_lock(&lock->fl);
3825 + lock->svid = ~(u32) 0;
3826 +- lock->fl.fl_pid = (pid_t)lock->svid;
3827 ++ lock->fl.fl_pid = current->tgid;
3828 +
3829 + if (!(p = nlm_decode_cookie(p, &argp->cookie))
3830 + || !(p = xdr_decode_string_inplace(p, &lock->caller,
3831 +diff --git a/fs/lockd/xdr4.c b/fs/lockd/xdr4.c
3832 +index 7ed9edf9aed4..70154f376695 100644
3833 +--- a/fs/lockd/xdr4.c
3834 ++++ b/fs/lockd/xdr4.c
3835 +@@ -119,7 +119,7 @@ nlm4_decode_lock(__be32 *p, struct nlm_lock *lock)
3836 +
3837 + locks_init_lock(fl);
3838 + fl->fl_owner = current->files;
3839 +- fl->fl_pid = (pid_t)lock->svid;
3840 ++ fl->fl_pid = current->tgid;
3841 + fl->fl_flags = FL_POSIX;
3842 + fl->fl_type = F_RDLCK; /* as good as anything else */
3843 + p = xdr_decode_hyper(p, &start);
3844 +@@ -266,7 +266,7 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p)
3845 + memset(lock, 0, sizeof(*lock));
3846 + locks_init_lock(&lock->fl);
3847 + lock->svid = ~(u32) 0;
3848 +- lock->fl.fl_pid = (pid_t)lock->svid;
3849 ++ lock->fl.fl_pid = current->tgid;
3850 +
3851 + if (!(p = nlm4_decode_cookie(p, &argp->cookie))
3852 + || !(p = xdr_decode_string_inplace(p, &lock->caller,
3853 +diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
3854 +index 9d6b4f0f1a25..f35aa9f88b5e 100644
3855 +--- a/fs/nfsd/nfs4proc.c
3856 ++++ b/fs/nfsd/nfs4proc.c
3857 +@@ -1015,8 +1015,6 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
3858 +
3859 + nvecs = svc_fill_write_vector(rqstp, write->wr_pagelist,
3860 + &write->wr_head, write->wr_buflen);
3861 +- if (!nvecs)
3862 +- return nfserr_io;
3863 + WARN_ON_ONCE(nvecs > ARRAY_SIZE(rqstp->rq_vec));
3864 +
3865 + status = nfsd_vfs_write(rqstp, &cstate->current_fh, filp,
3866 +diff --git a/include/linux/hmm.h b/include/linux/hmm.h
3867 +index 4c92e3ba3e16..5ec8635f602c 100644
3868 +--- a/include/linux/hmm.h
3869 ++++ b/include/linux/hmm.h
3870 +@@ -499,8 +499,7 @@ struct hmm_devmem {
3871 + * enough and allocate struct page for it.
3872 + *
3873 + * The device driver can wrap the hmm_devmem struct inside a private device
3874 +- * driver struct. The device driver must call hmm_devmem_remove() before the
3875 +- * device goes away and before freeing the hmm_devmem struct memory.
3876 ++ * driver struct.
3877 + */
3878 + struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
3879 + struct device *device,
3880 +@@ -508,7 +507,6 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
3881 + struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
3882 + struct device *device,
3883 + struct resource *res);
3884 +-void hmm_devmem_remove(struct hmm_devmem *devmem);
3885 +
3886 + /*
3887 + * hmm_devmem_page_set_drvdata - set per-page driver data field
3888 +diff --git a/include/linux/memremap.h b/include/linux/memremap.h
3889 +index f91f9e763557..a84572cdc438 100644
3890 +--- a/include/linux/memremap.h
3891 ++++ b/include/linux/memremap.h
3892 +@@ -106,6 +106,7 @@ typedef void (*dev_page_free_t)(struct page *page, void *data);
3893 + * @altmap: pre-allocated/reserved memory for vmemmap allocations
3894 + * @res: physical address range covered by @ref
3895 + * @ref: reference count that pins the devm_memremap_pages() mapping
3896 ++ * @kill: callback to transition @ref to the dead state
3897 + * @dev: host device of the mapping for debug
3898 + * @data: private data pointer for page_free()
3899 + * @type: memory type: see MEMORY_* in memory_hotplug.h
3900 +@@ -117,6 +118,7 @@ struct dev_pagemap {
3901 + bool altmap_valid;
3902 + struct resource res;
3903 + struct percpu_ref *ref;
3904 ++ void (*kill)(struct percpu_ref *ref);
3905 + struct device *dev;
3906 + void *data;
3907 + enum memory_type type;
3908 +diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h
3909 +index 4a520d3304a2..cf09ab37b45b 100644
3910 +--- a/include/linux/netfilter/nfnetlink.h
3911 ++++ b/include/linux/netfilter/nfnetlink.h
3912 +@@ -62,18 +62,6 @@ static inline bool lockdep_nfnl_is_held(__u8 subsys_id)
3913 + }
3914 + #endif /* CONFIG_PROVE_LOCKING */
3915 +
3916 +-/*
3917 +- * nfnl_dereference - fetch RCU pointer when updates are prevented by subsys mutex
3918 +- *
3919 +- * @p: The pointer to read, prior to dereferencing
3920 +- * @ss: The nfnetlink subsystem ID
3921 +- *
3922 +- * Return the value of the specified RCU-protected pointer, but omit
3923 +- * the READ_ONCE(), because caller holds the NFNL subsystem mutex.
3924 +- */
3925 +-#define nfnl_dereference(p, ss) \
3926 +- rcu_dereference_protected(p, lockdep_nfnl_is_held(ss))
3927 +-
3928 + #define MODULE_ALIAS_NFNL_SUBSYS(subsys) \
3929 + MODULE_ALIAS("nfnetlink-subsys-" __stringify(subsys))
3930 +
3931 +diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
3932 +index 53fbae27b280..61a5799b440b 100644
3933 +--- a/include/uapi/linux/input-event-codes.h
3934 ++++ b/include/uapi/linux/input-event-codes.h
3935 +@@ -744,6 +744,15 @@
3936 +
3937 + #define ABS_MISC 0x28
3938 +
3939 ++/*
3940 ++ * 0x2e is reserved and should not be used in input drivers.
3941 ++ * It was used by HID as ABS_MISC+6 and userspace needs to detect if
3942 ++ * the next ABS_* event is correct or is just ABS_MISC + n.
3943 ++ * We define here ABS_RESERVED so userspace can rely on it and detect
3944 ++ * the situation described above.
3945 ++ */
3946 ++#define ABS_RESERVED 0x2e
3947 ++
3948 + #define ABS_MT_SLOT 0x2f /* MT slot being modified */
3949 + #define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
3950 + #define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
3951 +diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
3952 +index de87b0282e74..1d2f147f737d 100644
3953 +--- a/kernel/dma/direct.c
3954 ++++ b/kernel/dma/direct.c
3955 +@@ -168,7 +168,12 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
3956 + int dma_direct_supported(struct device *dev, u64 mask)
3957 + {
3958 + #ifdef CONFIG_ZONE_DMA
3959 +- if (mask < phys_to_dma(dev, DMA_BIT_MASK(ARCH_ZONE_DMA_BITS)))
3960 ++ /*
3961 ++ * This check needs to be against the actual bit mask value, so
3962 ++ * use __phys_to_dma() here so that the SME encryption mask isn't
3963 ++ * part of the check.
3964 ++ */
3965 ++ if (mask < __phys_to_dma(dev, DMA_BIT_MASK(ARCH_ZONE_DMA_BITS)))
3966 + return 0;
3967 + #else
3968 + /*
3969 +@@ -176,8 +181,12 @@ int dma_direct_supported(struct device *dev, u64 mask)
3970 + * to be able to satisfy them - either by not supporting more physical
3971 + * memory, or by providing a ZONE_DMA32. If neither is the case, the
3972 + * architecture needs to use an IOMMU instead of the direct mapping.
3973 ++ *
3974 ++ * This check needs to be against the actual bit mask value, so
3975 ++ * use __phys_to_dma() here so that the SME encryption mask isn't
3976 ++ * part of the check.
3977 + */
3978 +- if (mask < phys_to_dma(dev, DMA_BIT_MASK(32)))
3979 ++ if (mask < __phys_to_dma(dev, DMA_BIT_MASK(32)))
3980 + return 0;
3981 + #endif
3982 + /*
3983 +diff --git a/kernel/fork.c b/kernel/fork.c
3984 +index f0b58479534f..64ef113e387e 100644
3985 +--- a/kernel/fork.c
3986 ++++ b/kernel/fork.c
3987 +@@ -1784,8 +1784,6 @@ static __latent_entropy struct task_struct *copy_process(
3988 +
3989 + posix_cpu_timers_init(p);
3990 +
3991 +- p->start_time = ktime_get_ns();
3992 +- p->real_start_time = ktime_get_boot_ns();
3993 + p->io_context = NULL;
3994 + audit_set_context(p, NULL);
3995 + cgroup_fork(p);
3996 +@@ -1949,6 +1947,17 @@ static __latent_entropy struct task_struct *copy_process(
3997 + if (retval)
3998 + goto bad_fork_free_pid;
3999 +
4000 ++ /*
4001 ++ * From this point on we must avoid any synchronous user-space
4002 ++ * communication until we take the tasklist-lock. In particular, we do
4003 ++ * not want user-space to be able to predict the process start-time by
4004 ++ * stalling fork(2) after we recorded the start_time but before it is
4005 ++ * visible to the system.
4006 ++ */
4007 ++
4008 ++ p->start_time = ktime_get_ns();
4009 ++ p->real_start_time = ktime_get_boot_ns();
4010 ++
4011 + /*
4012 + * Make it visible to the rest of the system, but dont wake it up yet.
4013 + * Need tasklist lock for parent etc handling!
4014 +diff --git a/kernel/memremap.c b/kernel/memremap.c
4015 +index 5b8600d39931..7c5fb8a208ac 100644
4016 +--- a/kernel/memremap.c
4017 ++++ b/kernel/memremap.c
4018 +@@ -122,23 +122,25 @@ static void devm_memremap_pages_release(void *data)
4019 + resource_size_t align_start, align_size;
4020 + unsigned long pfn;
4021 +
4022 ++ pgmap->kill(pgmap->ref);
4023 + for_each_device_pfn(pfn, pgmap)
4024 + put_page(pfn_to_page(pfn));
4025 +
4026 +- if (percpu_ref_tryget_live(pgmap->ref)) {
4027 +- dev_WARN(dev, "%s: page mapping is still live!\n", __func__);
4028 +- percpu_ref_put(pgmap->ref);
4029 +- }
4030 +-
4031 + /* pages are dead and unused, undo the arch mapping */
4032 + align_start = res->start & ~(SECTION_SIZE - 1);
4033 + align_size = ALIGN(res->start + resource_size(res), SECTION_SIZE)
4034 + - align_start;
4035 +
4036 + mem_hotplug_begin();
4037 +- arch_remove_memory(align_start, align_size, pgmap->altmap_valid ?
4038 +- &pgmap->altmap : NULL);
4039 +- kasan_remove_zero_shadow(__va(align_start), align_size);
4040 ++ if (pgmap->type == MEMORY_DEVICE_PRIVATE) {
4041 ++ pfn = align_start >> PAGE_SHIFT;
4042 ++ __remove_pages(page_zone(pfn_to_page(pfn)), pfn,
4043 ++ align_size >> PAGE_SHIFT, NULL);
4044 ++ } else {
4045 ++ arch_remove_memory(align_start, align_size,
4046 ++ pgmap->altmap_valid ? &pgmap->altmap : NULL);
4047 ++ kasan_remove_zero_shadow(__va(align_start), align_size);
4048 ++ }
4049 + mem_hotplug_done();
4050 +
4051 + untrack_pfn(NULL, PHYS_PFN(align_start), align_size);
4052 +@@ -150,7 +152,7 @@ static void devm_memremap_pages_release(void *data)
4053 + /**
4054 + * devm_memremap_pages - remap and provide memmap backing for the given resource
4055 + * @dev: hosting device for @res
4056 +- * @pgmap: pointer to a struct dev_pgmap
4057 ++ * @pgmap: pointer to a struct dev_pagemap
4058 + *
4059 + * Notes:
4060 + * 1/ At a minimum the res, ref and type members of @pgmap must be initialized
4061 +@@ -159,11 +161,8 @@ static void devm_memremap_pages_release(void *data)
4062 + * 2/ The altmap field may optionally be initialized, in which case altmap_valid
4063 + * must be set to true
4064 + *
4065 +- * 3/ pgmap.ref must be 'live' on entry and 'dead' before devm_memunmap_pages()
4066 +- * time (or devm release event). The expected order of events is that ref has
4067 +- * been through percpu_ref_kill() before devm_memremap_pages_release(). The
4068 +- * wait for the completion of all references being dropped and
4069 +- * percpu_ref_exit() must occur after devm_memremap_pages_release().
4070 ++ * 3/ pgmap->ref must be 'live' on entry and will be killed at
4071 ++ * devm_memremap_pages_release() time, or if this routine fails.
4072 + *
4073 + * 4/ res is expected to be a host memory range that could feasibly be
4074 + * treated as a "System RAM" range, i.e. not a device mmio range, but
4075 +@@ -180,6 +179,9 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
4076 + int error, nid, is_ram;
4077 + struct dev_pagemap *conflict_pgmap;
4078 +
4079 ++ if (!pgmap->ref || !pgmap->kill)
4080 ++ return ERR_PTR(-EINVAL);
4081 ++
4082 + align_start = res->start & ~(SECTION_SIZE - 1);
4083 + align_size = ALIGN(res->start + resource_size(res), SECTION_SIZE)
4084 + - align_start;
4085 +@@ -202,18 +204,13 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
4086 + is_ram = region_intersects(align_start, align_size,
4087 + IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE);
4088 +
4089 +- if (is_ram == REGION_MIXED) {
4090 +- WARN_ONCE(1, "%s attempted on mixed region %pr\n",
4091 +- __func__, res);
4092 +- return ERR_PTR(-ENXIO);
4093 ++ if (is_ram != REGION_DISJOINT) {
4094 ++ WARN_ONCE(1, "%s attempted on %s region %pr\n", __func__,
4095 ++ is_ram == REGION_MIXED ? "mixed" : "ram", res);
4096 ++ error = -ENXIO;
4097 ++ goto err_array;
4098 + }
4099 +
4100 +- if (is_ram == REGION_INTERSECTS)
4101 +- return __va(res->start);
4102 +-
4103 +- if (!pgmap->ref)
4104 +- return ERR_PTR(-EINVAL);
4105 +-
4106 + pgmap->dev = dev;
4107 +
4108 + mutex_lock(&pgmap_lock);
4109 +@@ -241,17 +238,40 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
4110 + goto err_pfn_remap;
4111 +
4112 + mem_hotplug_begin();
4113 +- error = kasan_add_zero_shadow(__va(align_start), align_size);
4114 +- if (error) {
4115 +- mem_hotplug_done();
4116 +- goto err_kasan;
4117 ++
4118 ++ /*
4119 ++ * For device private memory we call add_pages() as we only need to
4120 ++ * allocate and initialize struct page for the device memory. More-
4121 ++ * over the device memory is un-accessible thus we do not want to
4122 ++ * create a linear mapping for the memory like arch_add_memory()
4123 ++ * would do.
4124 ++ *
4125 ++ * For all other device memory types, which are accessible by
4126 ++ * the CPU, we do want the linear mapping and thus use
4127 ++ * arch_add_memory().
4128 ++ */
4129 ++ if (pgmap->type == MEMORY_DEVICE_PRIVATE) {
4130 ++ error = add_pages(nid, align_start >> PAGE_SHIFT,
4131 ++ align_size >> PAGE_SHIFT, NULL, false);
4132 ++ } else {
4133 ++ error = kasan_add_zero_shadow(__va(align_start), align_size);
4134 ++ if (error) {
4135 ++ mem_hotplug_done();
4136 ++ goto err_kasan;
4137 ++ }
4138 ++
4139 ++ error = arch_add_memory(nid, align_start, align_size, altmap,
4140 ++ false);
4141 ++ }
4142 ++
4143 ++ if (!error) {
4144 ++ struct zone *zone;
4145 ++
4146 ++ zone = &NODE_DATA(nid)->node_zones[ZONE_DEVICE];
4147 ++ move_pfn_range_to_zone(zone, align_start >> PAGE_SHIFT,
4148 ++ align_size >> PAGE_SHIFT, altmap);
4149 + }
4150 +
4151 +- error = arch_add_memory(nid, align_start, align_size, altmap, false);
4152 +- if (!error)
4153 +- move_pfn_range_to_zone(&NODE_DATA(nid)->node_zones[ZONE_DEVICE],
4154 +- align_start >> PAGE_SHIFT,
4155 +- align_size >> PAGE_SHIFT, altmap);
4156 + mem_hotplug_done();
4157 + if (error)
4158 + goto err_add_memory;
4159 +@@ -270,7 +290,10 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
4160 + percpu_ref_get(pgmap->ref);
4161 + }
4162 +
4163 +- devm_add_action(dev, devm_memremap_pages_release, pgmap);
4164 ++ error = devm_add_action_or_reset(dev, devm_memremap_pages_release,
4165 ++ pgmap);
4166 ++ if (error)
4167 ++ return ERR_PTR(error);
4168 +
4169 + return __va(res->start);
4170 +
4171 +@@ -281,9 +304,11 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
4172 + err_pfn_remap:
4173 + err_radix:
4174 + pgmap_radix_release(res, pgoff);
4175 ++ err_array:
4176 ++ pgmap->kill(pgmap->ref);
4177 + return ERR_PTR(error);
4178 + }
4179 +-EXPORT_SYMBOL(devm_memremap_pages);
4180 ++EXPORT_SYMBOL_GPL(devm_memremap_pages);
4181 +
4182 + unsigned long vmem_altmap_offset(struct vmem_altmap *altmap)
4183 + {
4184 +diff --git a/kernel/pid.c b/kernel/pid.c
4185 +index cdf63e53a014..b88fe5e494cc 100644
4186 +--- a/kernel/pid.c
4187 ++++ b/kernel/pid.c
4188 +@@ -233,8 +233,10 @@ out_unlock:
4189 +
4190 + out_free:
4191 + spin_lock_irq(&pidmap_lock);
4192 +- while (++i <= ns->level)
4193 +- idr_remove(&ns->idr, (pid->numbers + i)->nr);
4194 ++ while (++i <= ns->level) {
4195 ++ upid = pid->numbers + i;
4196 ++ idr_remove(&upid->ns->idr, upid->nr);
4197 ++ }
4198 +
4199 + /* On failure to allocate the first pid, reset the state */
4200 + if (ns->pid_allocated == PIDNS_ADDING)
4201 +diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
4202 +index 6c9866a854b1..1ff17e297f0c 100644
4203 +--- a/kernel/rcu/srcutree.c
4204 ++++ b/kernel/rcu/srcutree.c
4205 +@@ -448,10 +448,12 @@ static void srcu_gp_start(struct srcu_struct *sp)
4206 +
4207 + lockdep_assert_held(&ACCESS_PRIVATE(sp, lock));
4208 + WARN_ON_ONCE(ULONG_CMP_GE(sp->srcu_gp_seq, sp->srcu_gp_seq_needed));
4209 ++ spin_lock_rcu_node(sdp); /* Interrupts already disabled. */
4210 + rcu_segcblist_advance(&sdp->srcu_cblist,
4211 + rcu_seq_current(&sp->srcu_gp_seq));
4212 + (void)rcu_segcblist_accelerate(&sdp->srcu_cblist,
4213 + rcu_seq_snap(&sp->srcu_gp_seq));
4214 ++ spin_unlock_rcu_node(sdp); /* Interrupts remain disabled. */
4215 + smp_mb(); /* Order prior store to ->srcu_gp_seq_needed vs. GP start. */
4216 + rcu_seq_start(&sp->srcu_gp_seq);
4217 + state = rcu_seq_state(READ_ONCE(sp->srcu_gp_seq));
4218 +diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
4219 +index eabbf6b10b44..7137bc343b4a 100644
4220 +--- a/kernel/sched/fair.c
4221 ++++ b/kernel/sched/fair.c
4222 +@@ -352,10 +352,9 @@ static inline void list_del_leaf_cfs_rq(struct cfs_rq *cfs_rq)
4223 + }
4224 + }
4225 +
4226 +-/* Iterate thr' all leaf cfs_rq's on a runqueue */
4227 +-#define for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) \
4228 +- list_for_each_entry_safe(cfs_rq, pos, &rq->leaf_cfs_rq_list, \
4229 +- leaf_cfs_rq_list)
4230 ++/* Iterate through all leaf cfs_rq's on a runqueue: */
4231 ++#define for_each_leaf_cfs_rq(rq, cfs_rq) \
4232 ++ list_for_each_entry_rcu(cfs_rq, &rq->leaf_cfs_rq_list, leaf_cfs_rq_list)
4233 +
4234 + /* Do the two (enqueued) entities belong to the same group ? */
4235 + static inline struct cfs_rq *
4236 +@@ -447,8 +446,8 @@ static inline void list_del_leaf_cfs_rq(struct cfs_rq *cfs_rq)
4237 + {
4238 + }
4239 +
4240 +-#define for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) \
4241 +- for (cfs_rq = &rq->cfs, pos = NULL; cfs_rq; cfs_rq = pos)
4242 ++#define for_each_leaf_cfs_rq(rq, cfs_rq) \
4243 ++ for (cfs_rq = &rq->cfs; cfs_rq; cfs_rq = NULL)
4244 +
4245 + static inline struct sched_entity *parent_entity(struct sched_entity *se)
4246 + {
4247 +@@ -7371,27 +7370,10 @@ static inline bool others_have_blocked(struct rq *rq)
4248 +
4249 + #ifdef CONFIG_FAIR_GROUP_SCHED
4250 +
4251 +-static inline bool cfs_rq_is_decayed(struct cfs_rq *cfs_rq)
4252 +-{
4253 +- if (cfs_rq->load.weight)
4254 +- return false;
4255 +-
4256 +- if (cfs_rq->avg.load_sum)
4257 +- return false;
4258 +-
4259 +- if (cfs_rq->avg.util_sum)
4260 +- return false;
4261 +-
4262 +- if (cfs_rq->avg.runnable_load_sum)
4263 +- return false;
4264 +-
4265 +- return true;
4266 +-}
4267 +-
4268 + static void update_blocked_averages(int cpu)
4269 + {
4270 + struct rq *rq = cpu_rq(cpu);
4271 +- struct cfs_rq *cfs_rq, *pos;
4272 ++ struct cfs_rq *cfs_rq;
4273 + const struct sched_class *curr_class;
4274 + struct rq_flags rf;
4275 + bool done = true;
4276 +@@ -7403,7 +7385,7 @@ static void update_blocked_averages(int cpu)
4277 + * Iterates the task_group tree in a bottom up fashion, see
4278 + * list_add_leaf_cfs_rq() for details.
4279 + */
4280 +- for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) {
4281 ++ for_each_leaf_cfs_rq(rq, cfs_rq) {
4282 + struct sched_entity *se;
4283 +
4284 + /* throttled entities do not contribute to load */
4285 +@@ -7418,13 +7400,6 @@ static void update_blocked_averages(int cpu)
4286 + if (se && !skip_blocked_update(se))
4287 + update_load_avg(cfs_rq_of(se), se, 0);
4288 +
4289 +- /*
4290 +- * There can be a lot of idle CPU cgroups. Don't let fully
4291 +- * decayed cfs_rqs linger on the list.
4292 +- */
4293 +- if (cfs_rq_is_decayed(cfs_rq))
4294 +- list_del_leaf_cfs_rq(cfs_rq);
4295 +-
4296 + /* Don't need periodic decay once load/util_avg are null */
4297 + if (cfs_rq_has_blocked(cfs_rq))
4298 + done = false;
4299 +@@ -10196,10 +10171,10 @@ const struct sched_class fair_sched_class = {
4300 + #ifdef CONFIG_SCHED_DEBUG
4301 + void print_cfs_stats(struct seq_file *m, int cpu)
4302 + {
4303 +- struct cfs_rq *cfs_rq, *pos;
4304 ++ struct cfs_rq *cfs_rq;
4305 +
4306 + rcu_read_lock();
4307 +- for_each_leaf_cfs_rq_safe(cpu_rq(cpu), cfs_rq, pos)
4308 ++ for_each_leaf_cfs_rq(cpu_rq(cpu), cfs_rq)
4309 + print_cfs_rq(m, cpu, cfs_rq);
4310 + rcu_read_unlock();
4311 + }
4312 +diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile
4313 +index 2f8b61dfd9b0..7ed43eaa02ef 100644
4314 +--- a/lib/raid6/Makefile
4315 ++++ b/lib/raid6/Makefile
4316 +@@ -18,6 +18,21 @@ quiet_cmd_unroll = UNROLL $@
4317 +
4318 + ifeq ($(CONFIG_ALTIVEC),y)
4319 + altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
4320 ++
4321 ++ifdef CONFIG_CC_IS_CLANG
4322 ++# clang ppc port does not yet support -maltivec when -msoft-float is
4323 ++# enabled. A future release of clang will resolve this
4324 ++# https://bugs.llvm.org/show_bug.cgi?id=31177
4325 ++CFLAGS_REMOVE_altivec1.o += -msoft-float
4326 ++CFLAGS_REMOVE_altivec2.o += -msoft-float
4327 ++CFLAGS_REMOVE_altivec4.o += -msoft-float
4328 ++CFLAGS_REMOVE_altivec8.o += -msoft-float
4329 ++CFLAGS_REMOVE_altivec8.o += -msoft-float
4330 ++CFLAGS_REMOVE_vpermxor1.o += -msoft-float
4331 ++CFLAGS_REMOVE_vpermxor2.o += -msoft-float
4332 ++CFLAGS_REMOVE_vpermxor4.o += -msoft-float
4333 ++CFLAGS_REMOVE_vpermxor8.o += -msoft-float
4334 ++endif
4335 + endif
4336 +
4337 + # The GCC option -ffreestanding is required in order to compile code containing
4338 +diff --git a/lib/test_debug_virtual.c b/lib/test_debug_virtual.c
4339 +index d5a06addeb27..bf864c73e462 100644
4340 +--- a/lib/test_debug_virtual.c
4341 ++++ b/lib/test_debug_virtual.c
4342 +@@ -5,6 +5,7 @@
4343 + #include <linux/vmalloc.h>
4344 + #include <linux/slab.h>
4345 + #include <linux/sizes.h>
4346 ++#include <linux/io.h>
4347 +
4348 + #include <asm/page.h>
4349 + #ifdef CONFIG_MIPS
4350 +diff --git a/mm/hmm.c b/mm/hmm.c
4351 +index 90193a7fabce..57f0d2a4ff34 100644
4352 +--- a/mm/hmm.c
4353 ++++ b/mm/hmm.c
4354 +@@ -945,7 +945,6 @@ static void hmm_devmem_ref_exit(void *data)
4355 +
4356 + devmem = container_of(ref, struct hmm_devmem, ref);
4357 + percpu_ref_exit(ref);
4358 +- devm_remove_action(devmem->device, &hmm_devmem_ref_exit, data);
4359 + }
4360 +
4361 + static void hmm_devmem_ref_kill(void *data)
4362 +@@ -956,7 +955,6 @@ static void hmm_devmem_ref_kill(void *data)
4363 + devmem = container_of(ref, struct hmm_devmem, ref);
4364 + percpu_ref_kill(ref);
4365 + wait_for_completion(&devmem->completion);
4366 +- devm_remove_action(devmem->device, &hmm_devmem_ref_kill, data);
4367 + }
4368 +
4369 + static int hmm_devmem_fault(struct vm_area_struct *vma,
4370 +@@ -994,7 +992,7 @@ static void hmm_devmem_radix_release(struct resource *resource)
4371 + mutex_unlock(&hmm_devmem_lock);
4372 + }
4373 +
4374 +-static void hmm_devmem_release(struct device *dev, void *data)
4375 ++static void hmm_devmem_release(void *data)
4376 + {
4377 + struct hmm_devmem *devmem = data;
4378 + struct resource *resource = devmem->resource;
4379 +@@ -1002,11 +1000,6 @@ static void hmm_devmem_release(struct device *dev, void *data)
4380 + struct zone *zone;
4381 + struct page *page;
4382 +
4383 +- if (percpu_ref_tryget_live(&devmem->ref)) {
4384 +- dev_WARN(dev, "%s: page mapping is still live!\n", __func__);
4385 +- percpu_ref_put(&devmem->ref);
4386 +- }
4387 +-
4388 + /* pages are dead and unused, undo the arch mapping */
4389 + start_pfn = (resource->start & ~(PA_SECTION_SIZE - 1)) >> PAGE_SHIFT;
4390 + npages = ALIGN(resource_size(resource), PA_SECTION_SIZE) >> PAGE_SHIFT;
4391 +@@ -1130,19 +1123,6 @@ error:
4392 + return ret;
4393 + }
4394 +
4395 +-static int hmm_devmem_match(struct device *dev, void *data, void *match_data)
4396 +-{
4397 +- struct hmm_devmem *devmem = data;
4398 +-
4399 +- return devmem->resource == match_data;
4400 +-}
4401 +-
4402 +-static void hmm_devmem_pages_remove(struct hmm_devmem *devmem)
4403 +-{
4404 +- devres_release(devmem->device, &hmm_devmem_release,
4405 +- &hmm_devmem_match, devmem->resource);
4406 +-}
4407 +-
4408 + /*
4409 + * hmm_devmem_add() - hotplug ZONE_DEVICE memory for device memory
4410 + *
4411 +@@ -1170,8 +1150,7 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
4412 +
4413 + dev_pagemap_get_ops();
4414 +
4415 +- devmem = devres_alloc_node(&hmm_devmem_release, sizeof(*devmem),
4416 +- GFP_KERNEL, dev_to_node(device));
4417 ++ devmem = devm_kzalloc(device, sizeof(*devmem), GFP_KERNEL);
4418 + if (!devmem)
4419 + return ERR_PTR(-ENOMEM);
4420 +
4421 +@@ -1185,11 +1164,11 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
4422 + ret = percpu_ref_init(&devmem->ref, &hmm_devmem_ref_release,
4423 + 0, GFP_KERNEL);
4424 + if (ret)
4425 +- goto error_percpu_ref;
4426 ++ return ERR_PTR(ret);
4427 +
4428 +- ret = devm_add_action(device, hmm_devmem_ref_exit, &devmem->ref);
4429 ++ ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit, &devmem->ref);
4430 + if (ret)
4431 +- goto error_devm_add_action;
4432 ++ return ERR_PTR(ret);
4433 +
4434 + size = ALIGN(size, PA_SECTION_SIZE);
4435 + addr = min((unsigned long)iomem_resource.end,
4436 +@@ -1209,16 +1188,12 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
4437 +
4438 + devmem->resource = devm_request_mem_region(device, addr, size,
4439 + dev_name(device));
4440 +- if (!devmem->resource) {
4441 +- ret = -ENOMEM;
4442 +- goto error_no_resource;
4443 +- }
4444 ++ if (!devmem->resource)
4445 ++ return ERR_PTR(-ENOMEM);
4446 + break;
4447 + }
4448 +- if (!devmem->resource) {
4449 +- ret = -ERANGE;
4450 +- goto error_no_resource;
4451 +- }
4452 ++ if (!devmem->resource)
4453 ++ return ERR_PTR(-ERANGE);
4454 +
4455 + devmem->resource->desc = IORES_DESC_DEVICE_PRIVATE_MEMORY;
4456 + devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
4457 +@@ -1227,30 +1202,15 @@ struct hmm_devmem *hmm_devmem_add(const struct hmm_devmem_ops *ops,
4458 +
4459 + ret = hmm_devmem_pages_create(devmem);
4460 + if (ret)
4461 +- goto error_pages;
4462 +-
4463 +- devres_add(device, devmem);
4464 ++ return ERR_PTR(ret);
4465 +
4466 +- ret = devm_add_action(device, hmm_devmem_ref_kill, &devmem->ref);
4467 +- if (ret) {
4468 +- hmm_devmem_remove(devmem);
4469 ++ ret = devm_add_action_or_reset(device, hmm_devmem_release, devmem);
4470 ++ if (ret)
4471 + return ERR_PTR(ret);
4472 +- }
4473 +
4474 + return devmem;
4475 +-
4476 +-error_pages:
4477 +- devm_release_mem_region(device, devmem->resource->start,
4478 +- resource_size(devmem->resource));
4479 +-error_no_resource:
4480 +-error_devm_add_action:
4481 +- hmm_devmem_ref_kill(&devmem->ref);
4482 +- hmm_devmem_ref_exit(&devmem->ref);
4483 +-error_percpu_ref:
4484 +- devres_free(devmem);
4485 +- return ERR_PTR(ret);
4486 + }
4487 +-EXPORT_SYMBOL(hmm_devmem_add);
4488 ++EXPORT_SYMBOL_GPL(hmm_devmem_add);
4489 +
4490 + struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
4491 + struct device *device,
4492 +@@ -1264,8 +1224,7 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
4493 +
4494 + dev_pagemap_get_ops();
4495 +
4496 +- devmem = devres_alloc_node(&hmm_devmem_release, sizeof(*devmem),
4497 +- GFP_KERNEL, dev_to_node(device));
4498 ++ devmem = devm_kzalloc(device, sizeof(*devmem), GFP_KERNEL);
4499 + if (!devmem)
4500 + return ERR_PTR(-ENOMEM);
4501 +
4502 +@@ -1279,12 +1238,12 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
4503 + ret = percpu_ref_init(&devmem->ref, &hmm_devmem_ref_release,
4504 + 0, GFP_KERNEL);
4505 + if (ret)
4506 +- goto error_percpu_ref;
4507 ++ return ERR_PTR(ret);
4508 +
4509 +- ret = devm_add_action(device, hmm_devmem_ref_exit, &devmem->ref);
4510 ++ ret = devm_add_action_or_reset(device, hmm_devmem_ref_exit,
4511 ++ &devmem->ref);
4512 + if (ret)
4513 +- goto error_devm_add_action;
4514 +-
4515 ++ return ERR_PTR(ret);
4516 +
4517 + devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
4518 + devmem->pfn_last = devmem->pfn_first +
4519 +@@ -1292,58 +1251,20 @@ struct hmm_devmem *hmm_devmem_add_resource(const struct hmm_devmem_ops *ops,
4520 +
4521 + ret = hmm_devmem_pages_create(devmem);
4522 + if (ret)
4523 +- goto error_devm_add_action;
4524 ++ return ERR_PTR(ret);
4525 +
4526 +- devres_add(device, devmem);
4527 ++ ret = devm_add_action_or_reset(device, hmm_devmem_release, devmem);
4528 ++ if (ret)
4529 ++ return ERR_PTR(ret);
4530 +
4531 +- ret = devm_add_action(device, hmm_devmem_ref_kill, &devmem->ref);
4532 +- if (ret) {
4533 +- hmm_devmem_remove(devmem);
4534 ++ ret = devm_add_action_or_reset(device, hmm_devmem_ref_kill,
4535 ++ &devmem->ref);
4536 ++ if (ret)
4537 + return ERR_PTR(ret);
4538 +- }
4539 +
4540 + return devmem;
4541 +-
4542 +-error_devm_add_action:
4543 +- hmm_devmem_ref_kill(&devmem->ref);
4544 +- hmm_devmem_ref_exit(&devmem->ref);
4545 +-error_percpu_ref:
4546 +- devres_free(devmem);
4547 +- return ERR_PTR(ret);
4548 +-}
4549 +-EXPORT_SYMBOL(hmm_devmem_add_resource);
4550 +-
4551 +-/*
4552 +- * hmm_devmem_remove() - remove device memory (kill and free ZONE_DEVICE)
4553 +- *
4554 +- * @devmem: hmm_devmem struct use to track and manage the ZONE_DEVICE memory
4555 +- *
4556 +- * This will hot-unplug memory that was hotplugged by hmm_devmem_add on behalf
4557 +- * of the device driver. It will free struct page and remove the resource that
4558 +- * reserved the physical address range for this device memory.
4559 +- */
4560 +-void hmm_devmem_remove(struct hmm_devmem *devmem)
4561 +-{
4562 +- resource_size_t start, size;
4563 +- struct device *device;
4564 +- bool cdm = false;
4565 +-
4566 +- if (!devmem)
4567 +- return;
4568 +-
4569 +- device = devmem->device;
4570 +- start = devmem->resource->start;
4571 +- size = resource_size(devmem->resource);
4572 +-
4573 +- cdm = devmem->resource->desc == IORES_DESC_DEVICE_PUBLIC_MEMORY;
4574 +- hmm_devmem_ref_kill(&devmem->ref);
4575 +- hmm_devmem_ref_exit(&devmem->ref);
4576 +- hmm_devmem_pages_remove(devmem);
4577 +-
4578 +- if (!cdm)
4579 +- devm_release_mem_region(device, start, size);
4580 + }
4581 +-EXPORT_SYMBOL(hmm_devmem_remove);
4582 ++EXPORT_SYMBOL_GPL(hmm_devmem_add_resource);
4583 +
4584 + /*
4585 + * A device driver that wants to handle multiple devices memory through a
4586 +diff --git a/mm/memcontrol.c b/mm/memcontrol.c
4587 +index e79cb59552d9..9518aefd8cbb 100644
4588 +--- a/mm/memcontrol.c
4589 ++++ b/mm/memcontrol.c
4590 +@@ -1666,6 +1666,9 @@ enum oom_status {
4591 +
4592 + static enum oom_status mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)
4593 + {
4594 ++ enum oom_status ret;
4595 ++ bool locked;
4596 ++
4597 + if (order > PAGE_ALLOC_COSTLY_ORDER)
4598 + return OOM_SKIPPED;
4599 +
4600 +@@ -1698,10 +1701,23 @@ static enum oom_status mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int
4601 + return OOM_ASYNC;
4602 + }
4603 +
4604 ++ mem_cgroup_mark_under_oom(memcg);
4605 ++
4606 ++ locked = mem_cgroup_oom_trylock(memcg);
4607 ++
4608 ++ if (locked)
4609 ++ mem_cgroup_oom_notify(memcg);
4610 ++
4611 ++ mem_cgroup_unmark_under_oom(memcg);
4612 + if (mem_cgroup_out_of_memory(memcg, mask, order))
4613 +- return OOM_SUCCESS;
4614 ++ ret = OOM_SUCCESS;
4615 ++ else
4616 ++ ret = OOM_FAILED;
4617 +
4618 +- return OOM_FAILED;
4619 ++ if (locked)
4620 ++ mem_cgroup_oom_unlock(memcg);
4621 ++
4622 ++ return ret;
4623 + }
4624 +
4625 + /**
4626 +diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
4627 +index f3f919728f5c..8a136ffda370 100644
4628 +--- a/mm/memory_hotplug.c
4629 ++++ b/mm/memory_hotplug.c
4630 +@@ -35,6 +35,7 @@
4631 + #include <linux/memblock.h>
4632 + #include <linux/bootmem.h>
4633 + #include <linux/compaction.h>
4634 ++#include <linux/rmap.h>
4635 +
4636 + #include <asm/tlbflush.h>
4637 +
4638 +@@ -1393,6 +1394,21 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
4639 + pfn = page_to_pfn(compound_head(page))
4640 + + hpage_nr_pages(page) - 1;
4641 +
4642 ++ /*
4643 ++ * HWPoison pages have elevated reference counts so the migration would
4644 ++ * fail on them. It also doesn't make any sense to migrate them in the
4645 ++ * first place. Still try to unmap such a page in case it is still mapped
4646 ++ * (e.g. current hwpoison implementation doesn't unmap KSM pages but keep
4647 ++ * the unmap as the catch all safety net).
4648 ++ */
4649 ++ if (PageHWPoison(page)) {
4650 ++ if (WARN_ON(PageLRU(page)))
4651 ++ isolate_lru_page(page);
4652 ++ if (page_mapped(page))
4653 ++ try_to_unmap(page, TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS);
4654 ++ continue;
4655 ++ }
4656 ++
4657 + if (!get_page_unless_zero(page))
4658 + continue;
4659 + /*
4660 +diff --git a/mm/swapfile.c b/mm/swapfile.c
4661 +index 8810a6d7d67f..67aaf7ae22ff 100644
4662 +--- a/mm/swapfile.c
4663 ++++ b/mm/swapfile.c
4664 +@@ -2208,7 +2208,8 @@ int try_to_unuse(unsigned int type, bool frontswap,
4665 + */
4666 + if (PageSwapCache(page) &&
4667 + likely(page_private(page) == entry.val) &&
4668 +- !page_swapped(page))
4669 ++ (!PageTransCompound(page) ||
4670 ++ !swap_page_trans_huge_swapped(si, entry)))
4671 + delete_from_swap_cache(compound_head(page));
4672 +
4673 + /*
4674 +diff --git a/net/9p/client.c b/net/9p/client.c
4675 +index deae53a7dffc..75b7bf7c7f07 100644
4676 +--- a/net/9p/client.c
4677 ++++ b/net/9p/client.c
4678 +@@ -181,6 +181,12 @@ static int parse_opts(char *opts, struct p9_client *clnt)
4679 + ret = r;
4680 + continue;
4681 + }
4682 ++ if (option < 4096) {
4683 ++ p9_debug(P9_DEBUG_ERROR,
4684 ++ "msize should be at least 4k\n");
4685 ++ ret = -EINVAL;
4686 ++ continue;
4687 ++ }
4688 + clnt->msize = option;
4689 + break;
4690 + case Opt_trans:
4691 +@@ -993,10 +999,18 @@ static int p9_client_version(struct p9_client *c)
4692 + else if (!strncmp(version, "9P2000", 6))
4693 + c->proto_version = p9_proto_legacy;
4694 + else {
4695 ++ p9_debug(P9_DEBUG_ERROR,
4696 ++ "server returned an unknown version: %s\n", version);
4697 + err = -EREMOTEIO;
4698 + goto error;
4699 + }
4700 +
4701 ++ if (msize < 4096) {
4702 ++ p9_debug(P9_DEBUG_ERROR,
4703 ++ "server returned a msize < 4096: %d\n", msize);
4704 ++ err = -EREMOTEIO;
4705 ++ goto error;
4706 ++ }
4707 + if (msize < c->msize)
4708 + c->msize = msize;
4709 +
4710 +@@ -1055,6 +1069,13 @@ struct p9_client *p9_client_create(const char *dev_name, char *options)
4711 + if (clnt->msize > clnt->trans_mod->maxsize)
4712 + clnt->msize = clnt->trans_mod->maxsize;
4713 +
4714 ++ if (clnt->msize < 4096) {
4715 ++ p9_debug(P9_DEBUG_ERROR,
4716 ++ "Please specify a msize of at least 4k\n");
4717 ++ err = -EINVAL;
4718 ++ goto free_client;
4719 ++ }
4720 ++
4721 + err = p9_client_version(clnt);
4722 + if (err)
4723 + goto close_trans;
4724 +diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
4725 +index 5f3c81e705c7..3a0171a65db3 100644
4726 +--- a/net/mac80211/iface.c
4727 ++++ b/net/mac80211/iface.c
4728 +@@ -7,6 +7,7 @@
4729 + * Copyright 2008, Johannes Berg <johannes@××××××××××××.net>
4730 + * Copyright 2013-2014 Intel Mobile Communications GmbH
4731 + * Copyright (c) 2016 Intel Deutschland GmbH
4732 ++ * Copyright (C) 2018 Intel Corporation
4733 + *
4734 + * This program is free software; you can redistribute it and/or modify
4735 + * it under the terms of the GNU General Public License version 2 as
4736 +@@ -1951,6 +1952,8 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local)
4737 + WARN(local->open_count, "%s: open count remains %d\n",
4738 + wiphy_name(local->hw.wiphy), local->open_count);
4739 +
4740 ++ ieee80211_txq_teardown_flows(local);
4741 ++
4742 + mutex_lock(&local->iflist_mtx);
4743 + list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
4744 + list_del(&sdata->list);
4745 +diff --git a/net/mac80211/main.c b/net/mac80211/main.c
4746 +index 513627896204..68db2a356443 100644
4747 +--- a/net/mac80211/main.c
4748 ++++ b/net/mac80211/main.c
4749 +@@ -1198,7 +1198,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
4750 + rtnl_unlock();
4751 + ieee80211_led_exit(local);
4752 + ieee80211_wep_free(local);
4753 +- ieee80211_txq_teardown_flows(local);
4754 + fail_flows:
4755 + destroy_workqueue(local->workqueue);
4756 + fail_workqueue:
4757 +@@ -1224,7 +1223,6 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw)
4758 + #if IS_ENABLED(CONFIG_IPV6)
4759 + unregister_inet6addr_notifier(&local->ifa6_notifier);
4760 + #endif
4761 +- ieee80211_txq_teardown_flows(local);
4762 +
4763 + rtnl_lock();
4764 +
4765 +diff --git a/net/mac80211/status.c b/net/mac80211/status.c
4766 +index 7fa10d06cc51..534a604b75c2 100644
4767 +--- a/net/mac80211/status.c
4768 ++++ b/net/mac80211/status.c
4769 +@@ -556,6 +556,11 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local,
4770 + }
4771 +
4772 + ieee80211_led_tx(local);
4773 ++
4774 ++ if (skb_has_frag_list(skb)) {
4775 ++ kfree_skb_list(skb_shinfo(skb)->frag_list);
4776 ++ skb_shinfo(skb)->frag_list = NULL;
4777 ++ }
4778 + }
4779 +
4780 + /*
4781 +diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
4782 +index 4eef55da0878..8da228da53ae 100644
4783 +--- a/net/netfilter/ipset/ip_set_list_set.c
4784 ++++ b/net/netfilter/ipset/ip_set_list_set.c
4785 +@@ -531,8 +531,8 @@ nla_put_failure:
4786 + ret = -EMSGSIZE;
4787 + } else {
4788 + cb->args[IPSET_CB_ARG0] = i;
4789 ++ ipset_nest_end(skb, atd);
4790 + }
4791 +- ipset_nest_end(skb, atd);
4792 + out:
4793 + rcu_read_unlock();
4794 + return ret;
4795 +diff --git a/net/netfilter/nf_conncount.c b/net/netfilter/nf_conncount.c
4796 +index b6d0f6deea86..9cd180bda092 100644
4797 +--- a/net/netfilter/nf_conncount.c
4798 ++++ b/net/netfilter/nf_conncount.c
4799 +@@ -427,7 +427,7 @@ insert_tree(struct net *net,
4800 + count = 1;
4801 + rbconn->list.count = count;
4802 +
4803 +- rb_link_node(&rbconn->node, parent, rbnode);
4804 ++ rb_link_node_rcu(&rbconn->node, parent, rbnode);
4805 + rb_insert_color(&rbconn->node, root);
4806 + out_unlock:
4807 + spin_unlock_bh(&nf_conncount_locks[hash % CONNCOUNT_LOCK_SLOTS]);
4808 +diff --git a/net/netfilter/nf_conntrack_seqadj.c b/net/netfilter/nf_conntrack_seqadj.c
4809 +index a975efd6b8c3..9da303461069 100644
4810 +--- a/net/netfilter/nf_conntrack_seqadj.c
4811 ++++ b/net/netfilter/nf_conntrack_seqadj.c
4812 +@@ -115,12 +115,12 @@ static void nf_ct_sack_block_adjust(struct sk_buff *skb,
4813 + /* TCP SACK sequence number adjustment */
4814 + static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
4815 + unsigned int protoff,
4816 +- struct tcphdr *tcph,
4817 + struct nf_conn *ct,
4818 + enum ip_conntrack_info ctinfo)
4819 + {
4820 +- unsigned int dir, optoff, optend;
4821 ++ struct tcphdr *tcph = (void *)skb->data + protoff;
4822 + struct nf_conn_seqadj *seqadj = nfct_seqadj(ct);
4823 ++ unsigned int dir, optoff, optend;
4824 +
4825 + optoff = protoff + sizeof(struct tcphdr);
4826 + optend = protoff + tcph->doff * 4;
4827 +@@ -128,6 +128,7 @@ static unsigned int nf_ct_sack_adjust(struct sk_buff *skb,
4828 + if (!skb_make_writable(skb, optend))
4829 + return 0;
4830 +
4831 ++ tcph = (void *)skb->data + protoff;
4832 + dir = CTINFO2DIR(ctinfo);
4833 +
4834 + while (optoff < optend) {
4835 +@@ -207,7 +208,7 @@ int nf_ct_seq_adjust(struct sk_buff *skb,
4836 + ntohl(newack));
4837 + tcph->ack_seq = newack;
4838 +
4839 +- res = nf_ct_sack_adjust(skb, protoff, tcph, ct, ctinfo);
4840 ++ res = nf_ct_sack_adjust(skb, protoff, ct, ctinfo);
4841 + out:
4842 + spin_unlock_bh(&ct->lock);
4843 +
4844 +diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c
4845 +index e2b196054dfc..2268b10a9dcf 100644
4846 +--- a/net/netfilter/nf_nat_core.c
4847 ++++ b/net/netfilter/nf_nat_core.c
4848 +@@ -117,7 +117,8 @@ int nf_xfrm_me_harder(struct net *net, struct sk_buff *skb, unsigned int family)
4849 + dst = skb_dst(skb);
4850 + if (dst->xfrm)
4851 + dst = ((struct xfrm_dst *)dst)->route;
4852 +- dst_hold(dst);
4853 ++ if (!dst_hold_safe(dst))
4854 ++ return -EHOSTUNREACH;
4855 +
4856 + if (sk && !net_eq(net, sock_net(sk)))
4857 + sk = NULL;
4858 +diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
4859 +index fe0558b15fd3..ed9af46720e1 100644
4860 +--- a/net/netfilter/nf_tables_api.c
4861 ++++ b/net/netfilter/nf_tables_api.c
4862 +@@ -1199,7 +1199,8 @@ static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net,
4863 + if (nla_put_string(skb, NFTA_CHAIN_TYPE, basechain->type->name))
4864 + goto nla_put_failure;
4865 +
4866 +- if (basechain->stats && nft_dump_stats(skb, basechain->stats))
4867 ++ if (rcu_access_pointer(basechain->stats) &&
4868 ++ nft_dump_stats(skb, rcu_dereference(basechain->stats)))
4869 + goto nla_put_failure;
4870 + }
4871 +
4872 +@@ -1375,7 +1376,8 @@ static struct nft_stats __percpu *nft_stats_alloc(const struct nlattr *attr)
4873 + return newstats;
4874 + }
4875 +
4876 +-static void nft_chain_stats_replace(struct nft_base_chain *chain,
4877 ++static void nft_chain_stats_replace(struct net *net,
4878 ++ struct nft_base_chain *chain,
4879 + struct nft_stats __percpu *newstats)
4880 + {
4881 + struct nft_stats __percpu *oldstats;
4882 +@@ -1383,8 +1385,9 @@ static void nft_chain_stats_replace(struct nft_base_chain *chain,
4883 + if (newstats == NULL)
4884 + return;
4885 +
4886 +- if (chain->stats) {
4887 +- oldstats = nfnl_dereference(chain->stats, NFNL_SUBSYS_NFTABLES);
4888 ++ if (rcu_access_pointer(chain->stats)) {
4889 ++ oldstats = rcu_dereference_protected(chain->stats,
4890 ++ lockdep_commit_lock_is_held(net));
4891 + rcu_assign_pointer(chain->stats, newstats);
4892 + synchronize_rcu();
4893 + free_percpu(oldstats);
4894 +@@ -1421,9 +1424,10 @@ static void nf_tables_chain_destroy(struct nft_ctx *ctx)
4895 + struct nft_base_chain *basechain = nft_base_chain(chain);
4896 +
4897 + module_put(basechain->type->owner);
4898 +- free_percpu(basechain->stats);
4899 +- if (basechain->stats)
4900 ++ if (rcu_access_pointer(basechain->stats)) {
4901 + static_branch_dec(&nft_counters_enabled);
4902 ++ free_percpu(rcu_dereference_raw(basechain->stats));
4903 ++ }
4904 + kfree(chain->name);
4905 + kfree(basechain);
4906 + } else {
4907 +@@ -1572,7 +1576,7 @@ static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 genmask,
4908 + kfree(basechain);
4909 + return PTR_ERR(stats);
4910 + }
4911 +- basechain->stats = stats;
4912 ++ rcu_assign_pointer(basechain->stats, stats);
4913 + static_branch_inc(&nft_counters_enabled);
4914 + }
4915 +
4916 +@@ -6145,7 +6149,8 @@ static void nft_chain_commit_update(struct nft_trans *trans)
4917 + return;
4918 +
4919 + basechain = nft_base_chain(trans->ctx.chain);
4920 +- nft_chain_stats_replace(basechain, nft_trans_chain_stats(trans));
4921 ++ nft_chain_stats_replace(trans->ctx.net, basechain,
4922 ++ nft_trans_chain_stats(trans));
4923 +
4924 + switch (nft_trans_chain_policy(trans)) {
4925 + case NF_DROP:
4926 +diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c
4927 +index ffd5c0f9412b..60f258f2c707 100644
4928 +--- a/net/netfilter/nf_tables_core.c
4929 ++++ b/net/netfilter/nf_tables_core.c
4930 +@@ -101,7 +101,7 @@ static noinline void nft_update_chain_stats(const struct nft_chain *chain,
4931 + struct nft_stats *stats;
4932 +
4933 + base_chain = nft_base_chain(chain);
4934 +- if (!base_chain->stats)
4935 ++ if (!rcu_access_pointer(base_chain->stats))
4936 + return;
4937 +
4938 + local_bh_disable();
4939 +diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
4940 +index 860f2a1bbb67..1a65f88d021a 100644
4941 +--- a/net/sunrpc/auth_gss/svcauth_gss.c
4942 ++++ b/net/sunrpc/auth_gss/svcauth_gss.c
4943 +@@ -1122,7 +1122,7 @@ static int svcauth_gss_legacy_init(struct svc_rqst *rqstp,
4944 + struct kvec *resv = &rqstp->rq_res.head[0];
4945 + struct rsi *rsip, rsikey;
4946 + int ret;
4947 +- struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
4948 ++ struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
4949 +
4950 + memset(&rsikey, 0, sizeof(rsikey));
4951 + ret = gss_read_verf(gc, argv, authp,
4952 +@@ -1233,7 +1233,7 @@ static int svcauth_gss_proxy_init(struct svc_rqst *rqstp,
4953 + uint64_t handle;
4954 + int status;
4955 + int ret;
4956 +- struct net *net = rqstp->rq_xprt->xpt_net;
4957 ++ struct net *net = SVC_NET(rqstp);
4958 + struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
4959 +
4960 + memset(&ud, 0, sizeof(ud));
4961 +@@ -1424,7 +1424,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp)
4962 + __be32 *rpcstart;
4963 + __be32 *reject_stat = resv->iov_base + resv->iov_len;
4964 + int ret;
4965 +- struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
4966 ++ struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
4967 +
4968 + dprintk("RPC: svcauth_gss: argv->iov_len = %zd\n",
4969 + argv->iov_len);
4970 +@@ -1714,7 +1714,7 @@ svcauth_gss_release(struct svc_rqst *rqstp)
4971 + struct rpc_gss_wire_cred *gc = &gsd->clcred;
4972 + struct xdr_buf *resbuf = &rqstp->rq_res;
4973 + int stat = -EINVAL;
4974 +- struct sunrpc_net *sn = net_generic(rqstp->rq_xprt->xpt_net, sunrpc_net_id);
4975 ++ struct sunrpc_net *sn = net_generic(SVC_NET(rqstp), sunrpc_net_id);
4976 +
4977 + if (gc->gc_proc != RPC_GSS_PROC_DATA)
4978 + goto out;
4979 +diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
4980 +index 109fbe591e7b..b6e8eccf2a52 100644
4981 +--- a/net/sunrpc/cache.c
4982 ++++ b/net/sunrpc/cache.c
4983 +@@ -54,6 +54,11 @@ static void cache_init(struct cache_head *h, struct cache_detail *detail)
4984 + h->last_refresh = now;
4985 + }
4986 +
4987 ++static void cache_fresh_locked(struct cache_head *head, time_t expiry,
4988 ++ struct cache_detail *detail);
4989 ++static void cache_fresh_unlocked(struct cache_head *head,
4990 ++ struct cache_detail *detail);
4991 ++
4992 + struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
4993 + struct cache_head *key, int hash)
4994 + {
4995 +@@ -95,6 +100,7 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
4996 + if (cache_is_expired(detail, tmp)) {
4997 + hlist_del_init(&tmp->cache_list);
4998 + detail->entries --;
4999 ++ cache_fresh_locked(tmp, 0, detail);
5000 + freeme = tmp;
5001 + break;
5002 + }
5003 +@@ -110,8 +116,10 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
5004 + cache_get(new);
5005 + write_unlock(&detail->hash_lock);
5006 +
5007 +- if (freeme)
5008 ++ if (freeme) {
5009 ++ cache_fresh_unlocked(freeme, detail);
5010 + cache_put(freeme, detail);
5011 ++ }
5012 + return new;
5013 + }
5014 + EXPORT_SYMBOL_GPL(sunrpc_cache_lookup);
5015 +diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
5016 +index 6b7539c0466e..7d8cce1dfcad 100644
5017 +--- a/net/sunrpc/xprtsock.c
5018 ++++ b/net/sunrpc/xprtsock.c
5019 +@@ -2244,8 +2244,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
5020 + trace_rpc_socket_connect(xprt, sock, 0);
5021 + status = 0;
5022 + out:
5023 +- xprt_unlock_connect(xprt, transport);
5024 + xprt_clear_connecting(xprt);
5025 ++ xprt_unlock_connect(xprt, transport);
5026 + xprt_wake_pending_tasks(xprt, status);
5027 + }
5028 +
5029 +@@ -2480,8 +2480,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
5030 + }
5031 + status = -EAGAIN;
5032 + out:
5033 +- xprt_unlock_connect(xprt, transport);
5034 + xprt_clear_connecting(xprt);
5035 ++ xprt_unlock_connect(xprt, transport);
5036 + xprt_wake_pending_tasks(xprt, status);
5037 + }
5038 +
5039 +diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c
5040 +index 7fab2891ce7f..a091c03abcb2 100644
5041 +--- a/net/tls/tls_main.c
5042 ++++ b/net/tls/tls_main.c
5043 +@@ -555,6 +555,9 @@ static struct tls_context *create_ctx(struct sock *sk)
5044 + return NULL;
5045 +
5046 + icsk->icsk_ulp_data = ctx;
5047 ++ ctx->setsockopt = sk->sk_prot->setsockopt;
5048 ++ ctx->getsockopt = sk->sk_prot->getsockopt;
5049 ++ ctx->sk_proto_close = sk->sk_prot->close;
5050 + return ctx;
5051 + }
5052 +
5053 +@@ -685,9 +688,6 @@ static int tls_init(struct sock *sk)
5054 + rc = -ENOMEM;
5055 + goto out;
5056 + }
5057 +- ctx->setsockopt = sk->sk_prot->setsockopt;
5058 +- ctx->getsockopt = sk->sk_prot->getsockopt;
5059 +- ctx->sk_proto_close = sk->sk_prot->close;
5060 +
5061 + /* Build IPv6 TLS whenever the address of tcpv6 _prot changes */
5062 + if (ip_ver == TLSV6 &&
5063 +diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
5064 +index 176edfefcbaa..295cd8d5554f 100644
5065 +--- a/net/wireless/nl80211.c
5066 ++++ b/net/wireless/nl80211.c
5067 +@@ -8993,8 +8993,10 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
5068 + if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
5069 + int r = validate_pae_over_nl80211(rdev, info);
5070 +
5071 +- if (r < 0)
5072 ++ if (r < 0) {
5073 ++ kzfree(connkeys);
5074 + return r;
5075 ++ }
5076 +
5077 + ibss.control_port_over_nl80211 = true;
5078 + }
5079 +diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
5080 +index be3520e429c9..790b514f86b6 100644
5081 +--- a/net/xfrm/xfrm_input.c
5082 ++++ b/net/xfrm/xfrm_input.c
5083 +@@ -346,6 +346,12 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
5084 +
5085 + skb->sp->xvec[skb->sp->len++] = x;
5086 +
5087 ++ skb_dst_force(skb);
5088 ++ if (!skb_dst(skb)) {
5089 ++ XFRM_INC_STATS(net, LINUX_MIB_XFRMINERROR);
5090 ++ goto drop;
5091 ++ }
5092 ++
5093 + lock:
5094 + spin_lock(&x->lock);
5095 +
5096 +@@ -385,7 +391,6 @@ lock:
5097 + XFRM_SKB_CB(skb)->seq.input.low = seq;
5098 + XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
5099 +
5100 +- skb_dst_force(skb);
5101 + dev_hold(skb->dev);
5102 +
5103 + if (crypto_done)
5104 +diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
5105 +index 261995d37ced..6d20fbcde000 100644
5106 +--- a/net/xfrm/xfrm_output.c
5107 ++++ b/net/xfrm/xfrm_output.c
5108 +@@ -102,6 +102,7 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
5109 + skb_dst_force(skb);
5110 + if (!skb_dst(skb)) {
5111 + XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR);
5112 ++ err = -EHOSTUNREACH;
5113 + goto error_nolock;
5114 + }
5115 +
5116 +diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
5117 +index 7a34990a68b1..cc0203efb584 100644
5118 +--- a/net/xfrm/xfrm_state.c
5119 ++++ b/net/xfrm/xfrm_state.c
5120 +@@ -794,7 +794,7 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si)
5121 + {
5122 + spin_lock_bh(&net->xfrm.xfrm_state_lock);
5123 + si->sadcnt = net->xfrm.state_num;
5124 +- si->sadhcnt = net->xfrm.state_hmask;
5125 ++ si->sadhcnt = net->xfrm.state_hmask + 1;
5126 + si->sadhmcnt = xfrm_state_hashmax;
5127 + spin_unlock_bh(&net->xfrm.xfrm_state_lock);
5128 + }
5129 +diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
5130 +index 8081b6cf67d2..34414c6efad6 100755
5131 +--- a/scripts/checkstack.pl
5132 ++++ b/scripts/checkstack.pl
5133 +@@ -47,8 +47,8 @@ my (@stack, $re, $dre, $x, $xs, $funcre);
5134 + $xs = "[0-9a-f ]"; # hex character or space
5135 + $funcre = qr/^$x* <(.*)>:$/;
5136 + if ($arch eq 'aarch64') {
5137 +- #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp,#-80]!
5138 +- $re = qr/^.*stp.*sp,\#-([0-9]{1,8})\]\!/o;
5139 ++ #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]!
5140 ++ $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o;
5141 + } elsif ($arch eq 'arm') {
5142 + #c0008ffc: e24dd064 sub sp, sp, #100 ; 0x64
5143 + $re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o;
5144 +diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
5145 +index f4eadd3f7350..b63ef865ce1e 100644
5146 +--- a/security/selinux/ss/policydb.c
5147 ++++ b/security/selinux/ss/policydb.c
5148 +@@ -2108,6 +2108,7 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
5149 + {
5150 + int i, j, rc;
5151 + u32 nel, len;
5152 ++ __be64 prefixbuf[1];
5153 + __le32 buf[3];
5154 + struct ocontext *l, *c;
5155 + u32 nodebuf[8];
5156 +@@ -2217,21 +2218,30 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
5157 + goto out;
5158 + break;
5159 + }
5160 +- case OCON_IBPKEY:
5161 +- rc = next_entry(nodebuf, fp, sizeof(u32) * 4);
5162 ++ case OCON_IBPKEY: {
5163 ++ u32 pkey_lo, pkey_hi;
5164 ++
5165 ++ rc = next_entry(prefixbuf, fp, sizeof(u64));
5166 ++ if (rc)
5167 ++ goto out;
5168 ++
5169 ++ /* we need to have subnet_prefix in CPU order */
5170 ++ c->u.ibpkey.subnet_prefix = be64_to_cpu(prefixbuf[0]);
5171 ++
5172 ++ rc = next_entry(buf, fp, sizeof(u32) * 2);
5173 + if (rc)
5174 + goto out;
5175 +
5176 +- c->u.ibpkey.subnet_prefix = be64_to_cpu(*((__be64 *)nodebuf));
5177 ++ pkey_lo = le32_to_cpu(buf[0]);
5178 ++ pkey_hi = le32_to_cpu(buf[1]);
5179 +
5180 +- if (nodebuf[2] > 0xffff ||
5181 +- nodebuf[3] > 0xffff) {
5182 ++ if (pkey_lo > U16_MAX || pkey_hi > U16_MAX) {
5183 + rc = -EINVAL;
5184 + goto out;
5185 + }
5186 +
5187 +- c->u.ibpkey.low_pkey = le32_to_cpu(nodebuf[2]);
5188 +- c->u.ibpkey.high_pkey = le32_to_cpu(nodebuf[3]);
5189 ++ c->u.ibpkey.low_pkey = pkey_lo;
5190 ++ c->u.ibpkey.high_pkey = pkey_hi;
5191 +
5192 + rc = context_read_and_validate(&c->context[0],
5193 + p,
5194 +@@ -2239,7 +2249,10 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
5195 + if (rc)
5196 + goto out;
5197 + break;
5198 +- case OCON_IBENDPORT:
5199 ++ }
5200 ++ case OCON_IBENDPORT: {
5201 ++ u32 port;
5202 ++
5203 + rc = next_entry(buf, fp, sizeof(u32) * 2);
5204 + if (rc)
5205 + goto out;
5206 +@@ -2249,12 +2262,13 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
5207 + if (rc)
5208 + goto out;
5209 +
5210 +- if (buf[1] > 0xff || buf[1] == 0) {
5211 ++ port = le32_to_cpu(buf[1]);
5212 ++ if (port > U8_MAX || port == 0) {
5213 + rc = -EINVAL;
5214 + goto out;
5215 + }
5216 +
5217 +- c->u.ibendport.port = le32_to_cpu(buf[1]);
5218 ++ c->u.ibendport.port = port;
5219 +
5220 + rc = context_read_and_validate(&c->context[0],
5221 + p,
5222 +@@ -2262,7 +2276,8 @@ static int ocontext_read(struct policydb *p, struct policydb_compat_info *info,
5223 + if (rc)
5224 + goto out;
5225 + break;
5226 +- }
5227 ++ } /* end case */
5228 ++ } /* end switch */
5229 + }
5230 + }
5231 + rc = 0;
5232 +@@ -3105,6 +3120,7 @@ static int ocontext_write(struct policydb *p, struct policydb_compat_info *info,
5233 + {
5234 + unsigned int i, j, rc;
5235 + size_t nel, len;
5236 ++ __be64 prefixbuf[1];
5237 + __le32 buf[3];
5238 + u32 nodebuf[8];
5239 + struct ocontext *c;
5240 +@@ -3192,12 +3208,17 @@ static int ocontext_write(struct policydb *p, struct policydb_compat_info *info,
5241 + return rc;
5242 + break;
5243 + case OCON_IBPKEY:
5244 +- *((__be64 *)nodebuf) = cpu_to_be64(c->u.ibpkey.subnet_prefix);
5245 ++ /* subnet_prefix is in CPU order */
5246 ++ prefixbuf[0] = cpu_to_be64(c->u.ibpkey.subnet_prefix);
5247 +
5248 +- nodebuf[2] = cpu_to_le32(c->u.ibpkey.low_pkey);
5249 +- nodebuf[3] = cpu_to_le32(c->u.ibpkey.high_pkey);
5250 ++ rc = put_entry(prefixbuf, sizeof(u64), 1, fp);
5251 ++ if (rc)
5252 ++ return rc;
5253 ++
5254 ++ buf[0] = cpu_to_le32(c->u.ibpkey.low_pkey);
5255 ++ buf[1] = cpu_to_le32(c->u.ibpkey.high_pkey);
5256 +
5257 +- rc = put_entry(nodebuf, sizeof(u32), 4, fp);
5258 ++ rc = put_entry(buf, sizeof(u32), 2, fp);
5259 + if (rc)
5260 + return rc;
5261 + rc = context_write(p, &c->context[0], fp);
5262 +diff --git a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c
5263 +index 598d140bb7cb..5fc497c6d738 100644
5264 +--- a/sound/pci/cs46xx/dsp_spos.c
5265 ++++ b/sound/pci/cs46xx/dsp_spos.c
5266 +@@ -903,6 +903,9 @@ int cs46xx_dsp_proc_done (struct snd_cs46xx *chip)
5267 + struct dsp_spos_instance * ins = chip->dsp_spos_instance;
5268 + int i;
5269 +
5270 ++ if (!ins)
5271 ++ return 0;
5272 ++
5273 + snd_info_free_entry(ins->proc_sym_info_entry);
5274 + ins->proc_sym_info_entry = NULL;
5275 +
5276 +diff --git a/sound/usb/card.c b/sound/usb/card.c
5277 +index a105947eaf55..746a72e23cf9 100644
5278 +--- a/sound/usb/card.c
5279 ++++ b/sound/usb/card.c
5280 +@@ -246,7 +246,7 @@ static int snd_usb_create_streams(struct snd_usb_audio *chip, int ctrlif)
5281 + h1 = snd_usb_find_csint_desc(host_iface->extra,
5282 + host_iface->extralen,
5283 + NULL, UAC_HEADER);
5284 +- if (!h1) {
5285 ++ if (!h1 || h1->bLength < sizeof(*h1)) {
5286 + dev_err(&dev->dev, "cannot find UAC_HEADER\n");
5287 + return -EINVAL;
5288 + }
5289 +diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
5290 +index c63c84b54969..e7d441d0e839 100644
5291 +--- a/sound/usb/mixer.c
5292 ++++ b/sound/usb/mixer.c
5293 +@@ -753,8 +753,9 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state,
5294 + struct uac_mixer_unit_descriptor *desc)
5295 + {
5296 + int mu_channels;
5297 ++ void *c;
5298 +
5299 +- if (desc->bLength < 11)
5300 ++ if (desc->bLength < sizeof(*desc))
5301 + return -EINVAL;
5302 + if (!desc->bNrInPins)
5303 + return -EINVAL;
5304 +@@ -763,6 +764,8 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state,
5305 + case UAC_VERSION_1:
5306 + case UAC_VERSION_2:
5307 + default:
5308 ++ if (desc->bLength < sizeof(*desc) + desc->bNrInPins + 1)
5309 ++ return 0; /* no bmControls -> skip */
5310 + mu_channels = uac_mixer_unit_bNrChannels(desc);
5311 + break;
5312 + case UAC_VERSION_3:
5313 +@@ -772,7 +775,11 @@ static int uac_mixer_unit_get_channels(struct mixer_build *state,
5314 + }
5315 +
5316 + if (!mu_channels)
5317 +- return -EINVAL;
5318 ++ return 0;
5319 ++
5320 ++ c = uac_mixer_unit_bmControls(desc, state->mixer->protocol);
5321 ++ if (c - (void *)desc + (mu_channels - 1) / 8 >= desc->bLength)
5322 ++ return 0; /* no bmControls -> skip */
5323 +
5324 + return mu_channels;
5325 + }
5326 +@@ -944,7 +951,7 @@ static int check_input_term(struct mixer_build *state, int id,
5327 + struct uac_mixer_unit_descriptor *d = p1;
5328 +
5329 + err = uac_mixer_unit_get_channels(state, d);
5330 +- if (err < 0)
5331 ++ if (err <= 0)
5332 + return err;
5333 +
5334 + term->channels = err;
5335 +@@ -2068,11 +2075,15 @@ static int parse_audio_input_terminal(struct mixer_build *state, int unitid,
5336 +
5337 + if (state->mixer->protocol == UAC_VERSION_2) {
5338 + struct uac2_input_terminal_descriptor *d_v2 = raw_desc;
5339 ++ if (d_v2->bLength < sizeof(*d_v2))
5340 ++ return -EINVAL;
5341 + control = UAC2_TE_CONNECTOR;
5342 + term_id = d_v2->bTerminalID;
5343 + bmctls = le16_to_cpu(d_v2->bmControls);
5344 + } else if (state->mixer->protocol == UAC_VERSION_3) {
5345 + struct uac3_input_terminal_descriptor *d_v3 = raw_desc;
5346 ++ if (d_v3->bLength < sizeof(*d_v3))
5347 ++ return -EINVAL;
5348 + control = UAC3_TE_INSERTION;
5349 + term_id = d_v3->bTerminalID;
5350 + bmctls = le32_to_cpu(d_v3->bmControls);
5351 +@@ -2118,7 +2129,7 @@ static int parse_audio_mixer_unit(struct mixer_build *state, int unitid,
5352 + if (err < 0)
5353 + continue;
5354 + /* no bmControls field (e.g. Maya44) -> ignore */
5355 +- if (desc->bLength <= 10 + input_pins)
5356 ++ if (!num_outs)
5357 + continue;
5358 + err = check_input_term(state, desc->baSourceID[pin], &iterm);
5359 + if (err < 0)
5360 +@@ -2314,7 +2325,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
5361 + char *name)
5362 + {
5363 + struct uac_processing_unit_descriptor *desc = raw_desc;
5364 +- int num_ins = desc->bNrInPins;
5365 ++ int num_ins;
5366 + struct usb_mixer_elem_info *cval;
5367 + struct snd_kcontrol *kctl;
5368 + int i, err, nameid, type, len;
5369 +@@ -2329,7 +2340,13 @@ static int build_audio_procunit(struct mixer_build *state, int unitid,
5370 + 0, NULL, default_value_info
5371 + };
5372 +
5373 +- if (desc->bLength < 13 || desc->bLength < 13 + num_ins ||
5374 ++ if (desc->bLength < 13) {
5375 ++ usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
5376 ++ return -EINVAL;
5377 ++ }
5378 ++
5379 ++ num_ins = desc->bNrInPins;
5380 ++ if (desc->bLength < 13 + num_ins ||
5381 + desc->bLength < num_ins + uac_processing_unit_bControlSize(desc, state->mixer->protocol)) {
5382 + usb_audio_err(state->chip, "invalid %s descriptor (id %d)\n", name, unitid);
5383 + return -EINVAL;
5384 +diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
5385 +index 1c73b9ed44a6..57c6209a4ccb 100644
5386 +--- a/sound/usb/quirks-table.h
5387 ++++ b/sound/usb/quirks-table.h
5388 +@@ -3326,6 +3326,9 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
5389 + }
5390 + }
5391 + },
5392 ++ {
5393 ++ .ifnum = -1
5394 ++ },
5395 + }
5396 + }
5397 + },
5398 +@@ -3374,6 +3377,9 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
5399 + }
5400 + }
5401 + },
5402 ++ {
5403 ++ .ifnum = -1
5404 ++ },
5405 + }
5406 + }
5407 + },
5408 +diff --git a/sound/usb/stream.c b/sound/usb/stream.c
5409 +index 67cf849aa16b..d9e3de495c16 100644
5410 +--- a/sound/usb/stream.c
5411 ++++ b/sound/usb/stream.c
5412 +@@ -596,12 +596,8 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
5413 + csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT);
5414 +
5415 + if (!csep || csep->bLength < 7 ||
5416 +- csep->bDescriptorSubtype != UAC_EP_GENERAL) {
5417 +- usb_audio_warn(chip,
5418 +- "%u:%d : no or invalid class specific endpoint descriptor\n",
5419 +- iface_no, altsd->bAlternateSetting);
5420 +- return 0;
5421 +- }
5422 ++ csep->bDescriptorSubtype != UAC_EP_GENERAL)
5423 ++ goto error;
5424 +
5425 + if (protocol == UAC_VERSION_1) {
5426 + attributes = csep->bmAttributes;
5427 +@@ -609,6 +605,8 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
5428 + struct uac2_iso_endpoint_descriptor *csep2 =
5429 + (struct uac2_iso_endpoint_descriptor *) csep;
5430 +
5431 ++ if (csep2->bLength < sizeof(*csep2))
5432 ++ goto error;
5433 + attributes = csep->bmAttributes & UAC_EP_CS_ATTR_FILL_MAX;
5434 +
5435 + /* emulate the endpoint attributes of a v1 device */
5436 +@@ -618,12 +616,20 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
5437 + struct uac3_iso_endpoint_descriptor *csep3 =
5438 + (struct uac3_iso_endpoint_descriptor *) csep;
5439 +
5440 ++ if (csep3->bLength < sizeof(*csep3))
5441 ++ goto error;
5442 + /* emulate the endpoint attributes of a v1 device */
5443 + if (le32_to_cpu(csep3->bmControls) & UAC2_CONTROL_PITCH)
5444 + attributes |= UAC_EP_CS_ATTR_PITCH_CONTROL;
5445 + }
5446 +
5447 + return attributes;
5448 ++
5449 ++ error:
5450 ++ usb_audio_warn(chip,
5451 ++ "%u:%d : no or invalid class specific endpoint descriptor\n",
5452 ++ iface_no, altsd->bAlternateSetting);
5453 ++ return 0;
5454 + }
5455 +
5456 + /* find an input terminal descriptor (either UAC1 or UAC2) with the given
5457 +@@ -631,13 +637,17 @@ static int parse_uac_endpoint_attributes(struct snd_usb_audio *chip,
5458 + */
5459 + static void *
5460 + snd_usb_find_input_terminal_descriptor(struct usb_host_interface *ctrl_iface,
5461 +- int terminal_id)
5462 ++ int terminal_id, bool uac23)
5463 + {
5464 + struct uac2_input_terminal_descriptor *term = NULL;
5465 ++ size_t minlen = uac23 ? sizeof(struct uac2_input_terminal_descriptor) :
5466 ++ sizeof(struct uac_input_terminal_descriptor);
5467 +
5468 + while ((term = snd_usb_find_csint_desc(ctrl_iface->extra,
5469 + ctrl_iface->extralen,
5470 + term, UAC_INPUT_TERMINAL))) {
5471 ++ if (term->bLength < minlen)
5472 ++ continue;
5473 + if (term->bTerminalID == terminal_id)
5474 + return term;
5475 + }
5476 +@@ -655,7 +665,8 @@ snd_usb_find_output_terminal_descriptor(struct usb_host_interface *ctrl_iface,
5477 + while ((term = snd_usb_find_csint_desc(ctrl_iface->extra,
5478 + ctrl_iface->extralen,
5479 + term, UAC_OUTPUT_TERMINAL))) {
5480 +- if (term->bTerminalID == terminal_id)
5481 ++ if (term->bLength >= sizeof(*term) &&
5482 ++ term->bTerminalID == terminal_id)
5483 + return term;
5484 + }
5485 +
5486 +@@ -729,7 +740,8 @@ snd_usb_get_audioformat_uac12(struct snd_usb_audio *chip,
5487 + format = le16_to_cpu(as->wFormatTag); /* remember the format value */
5488 +
5489 + iterm = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf,
5490 +- as->bTerminalLink);
5491 ++ as->bTerminalLink,
5492 ++ false);
5493 + if (iterm) {
5494 + num_channels = iterm->bNrChannels;
5495 + chconfig = le16_to_cpu(iterm->wChannelConfig);
5496 +@@ -764,7 +776,8 @@ snd_usb_get_audioformat_uac12(struct snd_usb_audio *chip,
5497 + * to extract the clock
5498 + */
5499 + input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf,
5500 +- as->bTerminalLink);
5501 ++ as->bTerminalLink,
5502 ++ true);
5503 + if (input_term) {
5504 + clock = input_term->bCSourceID;
5505 + if (!chconfig && (num_channels == input_term->bNrChannels))
5506 +@@ -998,7 +1011,8 @@ snd_usb_get_audioformat_uac3(struct snd_usb_audio *chip,
5507 + * to extract the clock
5508 + */
5509 + input_term = snd_usb_find_input_terminal_descriptor(chip->ctrl_intf,
5510 +- as->bTerminalLink);
5511 ++ as->bTerminalLink,
5512 ++ true);
5513 + if (input_term) {
5514 + clock = input_term->bCSourceID;
5515 + goto found_clock;
5516 +diff --git a/tools/testing/nvdimm/test/iomap.c b/tools/testing/nvdimm/test/iomap.c
5517 +index ff9d3a5825e1..c6635fee27d8 100644
5518 +--- a/tools/testing/nvdimm/test/iomap.c
5519 ++++ b/tools/testing/nvdimm/test/iomap.c
5520 +@@ -104,16 +104,29 @@ void *__wrap_devm_memremap(struct device *dev, resource_size_t offset,
5521 + }
5522 + EXPORT_SYMBOL(__wrap_devm_memremap);
5523 +
5524 ++static void nfit_test_kill(void *_pgmap)
5525 ++{
5526 ++ struct dev_pagemap *pgmap = _pgmap;
5527 ++
5528 ++ pgmap->kill(pgmap->ref);
5529 ++}
5530 ++
5531 + void *__wrap_devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)
5532 + {
5533 + resource_size_t offset = pgmap->res.start;
5534 + struct nfit_test_resource *nfit_res = get_nfit_res(offset);
5535 +
5536 +- if (nfit_res)
5537 ++ if (nfit_res) {
5538 ++ int rc;
5539 ++
5540 ++ rc = devm_add_action_or_reset(dev, nfit_test_kill, pgmap);
5541 ++ if (rc)
5542 ++ return ERR_PTR(rc);
5543 + return nfit_res->buf + offset - nfit_res->res.start;
5544 ++ }
5545 + return devm_memremap_pages(dev, pgmap);
5546 + }
5547 +-EXPORT_SYMBOL(__wrap_devm_memremap_pages);
5548 ++EXPORT_SYMBOL_GPL(__wrap_devm_memremap_pages);
5549 +
5550 + pfn_t __wrap_phys_to_pfn_t(phys_addr_t addr, unsigned long flags)
5551 + {
5552 +diff --git a/tools/virtio/linux/kernel.h b/tools/virtio/linux/kernel.h
5553 +index fb22bccfbc8a..7ef45a4a3cba 100644
5554 +--- a/tools/virtio/linux/kernel.h
5555 ++++ b/tools/virtio/linux/kernel.h
5556 +@@ -23,6 +23,10 @@
5557 + #define PAGE_MASK (~(PAGE_SIZE-1))
5558 + #define PAGE_ALIGN(x) ((x + PAGE_SIZE - 1) & PAGE_MASK)
5559 +
5560 ++/* generic data direction definitions */
5561 ++#define READ 0
5562 ++#define WRITE 1
5563 ++
5564 + typedef unsigned long long phys_addr_t;
5565 + typedef unsigned long long dma_addr_t;
5566 + typedef size_t __kernel_size_t;