Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0114-4.19.15-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


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