Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0149-5.4.50-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3535 - (show annotations) (download)
Wed Jul 8 10:50:05 2020 UTC (3 years, 10 months ago) by niro
File size: 183383 byte(s)
-linux-5.4.50
1 diff --git a/Makefile b/Makefile
2 index 72230ad23299..380e398b2995 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 49
10 +SUBLEVEL = 50
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/arm/boot/dts/am335x-pocketbeagle.dts b/arch/arm/boot/dts/am335x-pocketbeagle.dts
15 index ff4f919d22f6..abf2badce53d 100644
16 --- a/arch/arm/boot/dts/am335x-pocketbeagle.dts
17 +++ b/arch/arm/boot/dts/am335x-pocketbeagle.dts
18 @@ -88,7 +88,6 @@
19 AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT_PULLUP, MUX_MODE0)
20 AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT_PULLUP, MUX_MODE0)
21 AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT_PULLUP, MUX_MODE0)
22 - AM33XX_PADCONF(AM335X_PIN_MCASP0_ACLKR, PIN_INPUT, MUX_MODE4) /* (B12) mcasp0_aclkr.mmc0_sdwp */
23 >;
24 };
25
26 diff --git a/arch/arm/boot/dts/bcm-nsp.dtsi b/arch/arm/boot/dts/bcm-nsp.dtsi
27 index da6d70f09ef1..418e6b97cb2e 100644
28 --- a/arch/arm/boot/dts/bcm-nsp.dtsi
29 +++ b/arch/arm/boot/dts/bcm-nsp.dtsi
30 @@ -257,10 +257,10 @@
31 status = "disabled";
32 };
33
34 - mailbox: mailbox@25000 {
35 + mailbox: mailbox@25c00 {
36 compatible = "brcm,iproc-fa2-mbox";
37 - reg = <0x25000 0x445>;
38 - interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
39 + reg = <0x25c00 0x400>;
40 + interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
41 #mbox-cells = <1>;
42 brcm,rx-status-len = <32>;
43 brcm,use-bcm-hdr;
44 diff --git a/arch/arm/boot/dts/omap4-duovero-parlor.dts b/arch/arm/boot/dts/omap4-duovero-parlor.dts
45 index 8047e8cdb3af..4548d87534e3 100644
46 --- a/arch/arm/boot/dts/omap4-duovero-parlor.dts
47 +++ b/arch/arm/boot/dts/omap4-duovero-parlor.dts
48 @@ -139,7 +139,7 @@
49 ethernet@gpmc {
50 reg = <5 0 0xff>;
51 interrupt-parent = <&gpio2>;
52 - interrupts = <12 IRQ_TYPE_EDGE_FALLING>; /* gpio_44 */
53 + interrupts = <12 IRQ_TYPE_LEVEL_LOW>; /* gpio_44 */
54
55 phy-mode = "mii";
56
57 diff --git a/arch/arm/mach-imx/pm-imx5.c b/arch/arm/mach-imx/pm-imx5.c
58 index f057df813f83..e9962b48e30c 100644
59 --- a/arch/arm/mach-imx/pm-imx5.c
60 +++ b/arch/arm/mach-imx/pm-imx5.c
61 @@ -295,14 +295,14 @@ static int __init imx_suspend_alloc_ocram(
62 if (!ocram_pool) {
63 pr_warn("%s: ocram pool unavailable!\n", __func__);
64 ret = -ENODEV;
65 - goto put_node;
66 + goto put_device;
67 }
68
69 ocram_base = gen_pool_alloc(ocram_pool, size);
70 if (!ocram_base) {
71 pr_warn("%s: unable to alloc ocram!\n", __func__);
72 ret = -ENOMEM;
73 - goto put_node;
74 + goto put_device;
75 }
76
77 phys = gen_pool_virt_to_phys(ocram_pool, ocram_base);
78 @@ -312,6 +312,8 @@ static int __init imx_suspend_alloc_ocram(
79 if (virt_out)
80 *virt_out = virt;
81
82 +put_device:
83 + put_device(&pdev->dev);
84 put_node:
85 of_node_put(node);
86
87 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
88 index 203664c40d3d..eb74aa182661 100644
89 --- a/arch/arm/mach-omap2/omap_hwmod.c
90 +++ b/arch/arm/mach-omap2/omap_hwmod.c
91 @@ -3535,7 +3535,7 @@ static const struct omap_hwmod_reset dra7_reset_quirks[] = {
92 };
93
94 static const struct omap_hwmod_reset omap_reset_quirks[] = {
95 - { .match = "dss", .len = 3, .reset = omap_dss_reset, },
96 + { .match = "dss_core", .len = 8, .reset = omap_dss_reset, },
97 { .match = "hdq1w", .len = 5, .reset = omap_hdq1w_reset, },
98 { .match = "i2c", .len = 3, .reset = omap_i2c_reset, },
99 { .match = "wd_timer", .len = 8, .reset = omap2_wd_timer_reset, },
100 diff --git a/arch/arm64/boot/dts/freescale/imx8mm-evk.dts b/arch/arm64/boot/dts/freescale/imx8mm-evk.dts
101 index 13137451b438..b9f8b7aac8ff 100644
102 --- a/arch/arm64/boot/dts/freescale/imx8mm-evk.dts
103 +++ b/arch/arm64/boot/dts/freescale/imx8mm-evk.dts
104 @@ -231,7 +231,7 @@
105
106 ldo1_reg: LDO1 {
107 regulator-name = "LDO1";
108 - regulator-min-microvolt = <3000000>;
109 + regulator-min-microvolt = <1600000>;
110 regulator-max-microvolt = <3300000>;
111 regulator-boot-on;
112 regulator-always-on;
113 @@ -239,7 +239,7 @@
114
115 ldo2_reg: LDO2 {
116 regulator-name = "LDO2";
117 - regulator-min-microvolt = <900000>;
118 + regulator-min-microvolt = <800000>;
119 regulator-max-microvolt = <900000>;
120 regulator-boot-on;
121 regulator-always-on;
122 diff --git a/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts b/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
123 index 11c705d225d0..9ad1d43b8ce7 100644
124 --- a/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
125 +++ b/arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
126 @@ -268,7 +268,7 @@
127
128 ldo1_reg: LDO1 {
129 regulator-name = "LDO1";
130 - regulator-min-microvolt = <3000000>;
131 + regulator-min-microvolt = <1600000>;
132 regulator-max-microvolt = <3300000>;
133 regulator-boot-on;
134 regulator-always-on;
135 @@ -276,7 +276,7 @@
136
137 ldo2_reg: LDO2 {
138 regulator-name = "LDO2";
139 - regulator-min-microvolt = <900000>;
140 + regulator-min-microvolt = <800000>;
141 regulator-max-microvolt = <900000>;
142 regulator-boot-on;
143 regulator-always-on;
144 diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
145 index 1765e5284994..04b982a2799e 100644
146 --- a/arch/arm64/kernel/fpsimd.c
147 +++ b/arch/arm64/kernel/fpsimd.c
148 @@ -338,7 +338,7 @@ static unsigned int find_supported_vector_length(unsigned int vl)
149 return sve_vl_from_vq(__bit_to_vq(bit));
150 }
151
152 -#ifdef CONFIG_SYSCTL
153 +#if defined(CONFIG_ARM64_SVE) && defined(CONFIG_SYSCTL)
154
155 static int sve_proc_do_default_vl(struct ctl_table *table, int write,
156 void __user *buffer, size_t *lenp,
157 @@ -384,9 +384,9 @@ static int __init sve_sysctl_init(void)
158 return 0;
159 }
160
161 -#else /* ! CONFIG_SYSCTL */
162 +#else /* ! (CONFIG_ARM64_SVE && CONFIG_SYSCTL) */
163 static int __init sve_sysctl_init(void) { return 0; }
164 -#endif /* ! CONFIG_SYSCTL */
165 +#endif /* ! (CONFIG_ARM64_SVE && CONFIG_SYSCTL) */
166
167 #define ZREG(sve_state, vq, n) ((char *)(sve_state) + \
168 (SVE_SIG_ZREG_OFFSET(vq, n) - SVE_SIG_REGS_OFFSET))
169 diff --git a/arch/arm64/kernel/perf_regs.c b/arch/arm64/kernel/perf_regs.c
170 index 0bbac612146e..666b225aeb3a 100644
171 --- a/arch/arm64/kernel/perf_regs.c
172 +++ b/arch/arm64/kernel/perf_regs.c
173 @@ -15,15 +15,34 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
174 return 0;
175
176 /*
177 - * Compat (i.e. 32 bit) mode:
178 - * - PC has been set in the pt_regs struct in kernel_entry,
179 - * - Handle SP and LR here.
180 + * Our handling of compat tasks (PERF_SAMPLE_REGS_ABI_32) is weird, but
181 + * we're stuck with it for ABI compatability reasons.
182 + *
183 + * For a 32-bit consumer inspecting a 32-bit task, then it will look at
184 + * the first 16 registers (see arch/arm/include/uapi/asm/perf_regs.h).
185 + * These correspond directly to a prefix of the registers saved in our
186 + * 'struct pt_regs', with the exception of the PC, so we copy that down
187 + * (x15 corresponds to SP_hyp in the architecture).
188 + *
189 + * So far, so good.
190 + *
191 + * The oddity arises when a 64-bit consumer looks at a 32-bit task and
192 + * asks for registers beyond PERF_REG_ARM_MAX. In this case, we return
193 + * SP_usr, LR_usr and PC in the positions where the AArch64 SP, LR and
194 + * PC registers would normally live. The initial idea was to allow a
195 + * 64-bit unwinder to unwind a 32-bit task and, although it's not clear
196 + * how well that works in practice, somebody might be relying on it.
197 + *
198 + * At the time we make a sample, we don't know whether the consumer is
199 + * 32-bit or 64-bit, so we have to cater for both possibilities.
200 */
201 if (compat_user_mode(regs)) {
202 if ((u32)idx == PERF_REG_ARM64_SP)
203 return regs->compat_sp;
204 if ((u32)idx == PERF_REG_ARM64_LR)
205 return regs->compat_lr;
206 + if (idx == 15)
207 + return regs->pc;
208 }
209
210 if ((u32)idx == PERF_REG_ARM64_SP)
211 diff --git a/arch/riscv/include/asm/cmpxchg.h b/arch/riscv/include/asm/cmpxchg.h
212 index d969bab4a26b..262e5bbb2776 100644
213 --- a/arch/riscv/include/asm/cmpxchg.h
214 +++ b/arch/riscv/include/asm/cmpxchg.h
215 @@ -179,7 +179,7 @@
216 " bnez %1, 0b\n" \
217 "1:\n" \
218 : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \
219 - : "rJ" (__old), "rJ" (__new) \
220 + : "rJ" ((long)__old), "rJ" (__new) \
221 : "memory"); \
222 break; \
223 case 8: \
224 @@ -224,7 +224,7 @@
225 RISCV_ACQUIRE_BARRIER \
226 "1:\n" \
227 : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \
228 - : "rJ" (__old), "rJ" (__new) \
229 + : "rJ" ((long)__old), "rJ" (__new) \
230 : "memory"); \
231 break; \
232 case 8: \
233 @@ -270,7 +270,7 @@
234 " bnez %1, 0b\n" \
235 "1:\n" \
236 : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \
237 - : "rJ" (__old), "rJ" (__new) \
238 + : "rJ" ((long)__old), "rJ" (__new) \
239 : "memory"); \
240 break; \
241 case 8: \
242 @@ -316,7 +316,7 @@
243 " fence rw, rw\n" \
244 "1:\n" \
245 : "=&r" (__ret), "=&r" (__rc), "+A" (*__ptr) \
246 - : "rJ" (__old), "rJ" (__new) \
247 + : "rJ" ((long)__old), "rJ" (__new) \
248 : "memory"); \
249 break; \
250 case 8: \
251 diff --git a/arch/riscv/kernel/sys_riscv.c b/arch/riscv/kernel/sys_riscv.c
252 index f3619f59d85c..12f8a7fce78b 100644
253 --- a/arch/riscv/kernel/sys_riscv.c
254 +++ b/arch/riscv/kernel/sys_riscv.c
255 @@ -8,6 +8,7 @@
256 #include <linux/syscalls.h>
257 #include <asm/unistd.h>
258 #include <asm/cacheflush.h>
259 +#include <asm-generic/mman-common.h>
260
261 static long riscv_sys_mmap(unsigned long addr, unsigned long len,
262 unsigned long prot, unsigned long flags,
263 @@ -16,6 +17,11 @@ static long riscv_sys_mmap(unsigned long addr, unsigned long len,
264 {
265 if (unlikely(offset & (~PAGE_MASK >> page_shift_offset)))
266 return -EINVAL;
267 +
268 + if ((prot & PROT_WRITE) && (prot & PROT_EXEC))
269 + if (unlikely(!(prot & PROT_READ)))
270 + return -EINVAL;
271 +
272 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
273 offset >> (PAGE_SHIFT - page_shift_offset));
274 }
275 diff --git a/arch/s390/include/asm/vdso.h b/arch/s390/include/asm/vdso.h
276 index 169d7604eb80..f3ba84fa9bd1 100644
277 --- a/arch/s390/include/asm/vdso.h
278 +++ b/arch/s390/include/asm/vdso.h
279 @@ -36,6 +36,7 @@ struct vdso_data {
280 __u32 tk_shift; /* Shift used for xtime_nsec 0x60 */
281 __u32 ts_dir; /* TOD steering direction 0x64 */
282 __u64 ts_end; /* TOD steering end 0x68 */
283 + __u32 hrtimer_res; /* hrtimer resolution 0x70 */
284 };
285
286 struct vdso_per_cpu_data {
287 diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c
288 index b6628586ab70..a65cb4924bdb 100644
289 --- a/arch/s390/kernel/asm-offsets.c
290 +++ b/arch/s390/kernel/asm-offsets.c
291 @@ -76,6 +76,7 @@ int main(void)
292 OFFSET(__VDSO_TK_SHIFT, vdso_data, tk_shift);
293 OFFSET(__VDSO_TS_DIR, vdso_data, ts_dir);
294 OFFSET(__VDSO_TS_END, vdso_data, ts_end);
295 + OFFSET(__VDSO_CLOCK_REALTIME_RES, vdso_data, hrtimer_res);
296 OFFSET(__VDSO_ECTG_BASE, vdso_per_cpu_data, ectg_timer_base);
297 OFFSET(__VDSO_ECTG_USER, vdso_per_cpu_data, ectg_user_time);
298 OFFSET(__VDSO_CPU_NR, vdso_per_cpu_data, cpu_nr);
299 @@ -87,7 +88,6 @@ int main(void)
300 DEFINE(__CLOCK_REALTIME_COARSE, CLOCK_REALTIME_COARSE);
301 DEFINE(__CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC_COARSE);
302 DEFINE(__CLOCK_THREAD_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID);
303 - DEFINE(__CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
304 DEFINE(__CLOCK_COARSE_RES, LOW_RES_NSEC);
305 BLANK();
306 /* idle data offsets */
307 diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
308 index bc85987727f0..c544b7a11ebb 100644
309 --- a/arch/s390/kernel/entry.S
310 +++ b/arch/s390/kernel/entry.S
311 @@ -368,9 +368,9 @@ ENTRY(system_call)
312 jnz .Lsysc_nr_ok
313 # svc 0: system call number in %r1
314 llgfr %r1,%r1 # clear high word in r1
315 + sth %r1,__PT_INT_CODE+2(%r11)
316 cghi %r1,NR_syscalls
317 jnl .Lsysc_nr_ok
318 - sth %r1,__PT_INT_CODE+2(%r11)
319 slag %r8,%r1,3
320 .Lsysc_nr_ok:
321 xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
322 diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
323 index ad71132374f0..5aa786063eb3 100644
324 --- a/arch/s390/kernel/ptrace.c
325 +++ b/arch/s390/kernel/ptrace.c
326 @@ -324,6 +324,25 @@ static inline void __poke_user_per(struct task_struct *child,
327 child->thread.per_user.end = data;
328 }
329
330 +static void fixup_int_code(struct task_struct *child, addr_t data)
331 +{
332 + struct pt_regs *regs = task_pt_regs(child);
333 + int ilc = regs->int_code >> 16;
334 + u16 insn;
335 +
336 + if (ilc > 6)
337 + return;
338 +
339 + if (ptrace_access_vm(child, regs->psw.addr - (regs->int_code >> 16),
340 + &insn, sizeof(insn), FOLL_FORCE) != sizeof(insn))
341 + return;
342 +
343 + /* double check that tracee stopped on svc instruction */
344 + if ((insn >> 8) != 0xa)
345 + return;
346 +
347 + regs->int_code = 0x20000 | (data & 0xffff);
348 +}
349 /*
350 * Write a word to the user area of a process at location addr. This
351 * operation does have an additional problem compared to peek_user.
352 @@ -335,7 +354,9 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
353 struct user *dummy = NULL;
354 addr_t offset;
355
356 +
357 if (addr < (addr_t) &dummy->regs.acrs) {
358 + struct pt_regs *regs = task_pt_regs(child);
359 /*
360 * psw and gprs are stored on the stack
361 */
362 @@ -353,7 +374,11 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
363 /* Invalid addressing mode bits */
364 return -EINVAL;
365 }
366 - *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data;
367 +
368 + if (test_pt_regs_flag(regs, PIF_SYSCALL) &&
369 + addr == offsetof(struct user, regs.gprs[2]))
370 + fixup_int_code(child, data);
371 + *(addr_t *)((addr_t) &regs->psw + addr) = data;
372
373 } else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) {
374 /*
375 @@ -719,6 +744,10 @@ static int __poke_user_compat(struct task_struct *child,
376 regs->psw.mask = (regs->psw.mask & ~PSW_MASK_BA) |
377 (__u64)(tmp & PSW32_ADDR_AMODE);
378 } else {
379 +
380 + if (test_pt_regs_flag(regs, PIF_SYSCALL) &&
381 + addr == offsetof(struct compat_user, regs.gprs[2]))
382 + fixup_int_code(child, data);
383 /* gpr 0-15 */
384 *(__u32*)((addr_t) &regs->psw + addr*2 + 4) = tmp;
385 }
386 @@ -844,11 +873,9 @@ asmlinkage long do_syscall_trace_enter(struct pt_regs *regs)
387 * call number to gprs[2].
388 */
389 if (test_thread_flag(TIF_SYSCALL_TRACE) &&
390 - (tracehook_report_syscall_entry(regs) ||
391 - regs->gprs[2] >= NR_syscalls)) {
392 + tracehook_report_syscall_entry(regs)) {
393 /*
394 - * Tracing decided this syscall should not happen or the
395 - * debugger stored an invalid system call number. Skip
396 + * Tracing decided this syscall should not happen. Skip
397 * the system call and the system call restart handling.
398 */
399 clear_pt_regs_flag(regs, PIF_SYSCALL);
400 diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
401 index e8766beee5ad..8ea9db599d38 100644
402 --- a/arch/s390/kernel/time.c
403 +++ b/arch/s390/kernel/time.c
404 @@ -310,6 +310,7 @@ void update_vsyscall(struct timekeeper *tk)
405
406 vdso_data->tk_mult = tk->tkr_mono.mult;
407 vdso_data->tk_shift = tk->tkr_mono.shift;
408 + vdso_data->hrtimer_res = hrtimer_resolution;
409 smp_wmb();
410 ++vdso_data->tb_update_count;
411 }
412 diff --git a/arch/s390/kernel/vdso64/Makefile b/arch/s390/kernel/vdso64/Makefile
413 index bec19e7e6e1c..4a66a1cb919b 100644
414 --- a/arch/s390/kernel/vdso64/Makefile
415 +++ b/arch/s390/kernel/vdso64/Makefile
416 @@ -18,8 +18,8 @@ KBUILD_AFLAGS_64 += -m64 -s
417
418 KBUILD_CFLAGS_64 := $(filter-out -m64,$(KBUILD_CFLAGS))
419 KBUILD_CFLAGS_64 += -m64 -fPIC -shared -fno-common -fno-builtin
420 -KBUILD_CFLAGS_64 += -nostdlib -Wl,-soname=linux-vdso64.so.1 \
421 - -Wl,--hash-style=both
422 +ldflags-y := -fPIC -shared -nostdlib -soname=linux-vdso64.so.1 \
423 + --hash-style=both --build-id -T
424
425 $(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_64)
426 $(targets:%=$(obj)/%.dbg): KBUILD_AFLAGS = $(KBUILD_AFLAGS_64)
427 @@ -37,8 +37,8 @@ KASAN_SANITIZE := n
428 $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so
429
430 # link rule for the .so file, .lds has to be first
431 -$(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE
432 - $(call if_changed,vdso64ld)
433 +$(obj)/vdso64.so.dbg: $(obj)/vdso64.lds $(obj-vdso64) FORCE
434 + $(call if_changed,ld)
435
436 # strip rule for the .so file
437 $(obj)/%.so: OBJCOPYFLAGS := -S
438 @@ -50,8 +50,6 @@ $(obj-vdso64): %.o: %.S FORCE
439 $(call if_changed_dep,vdso64as)
440
441 # actual build commands
442 -quiet_cmd_vdso64ld = VDSO64L $@
443 - cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $(filter %.lds %.o,$^) -o $@
444 quiet_cmd_vdso64as = VDSO64A $@
445 cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
446
447 diff --git a/arch/s390/kernel/vdso64/clock_getres.S b/arch/s390/kernel/vdso64/clock_getres.S
448 index 081435398e0a..0c79caa32b59 100644
449 --- a/arch/s390/kernel/vdso64/clock_getres.S
450 +++ b/arch/s390/kernel/vdso64/clock_getres.S
451 @@ -17,12 +17,14 @@
452 .type __kernel_clock_getres,@function
453 __kernel_clock_getres:
454 CFI_STARTPROC
455 - larl %r1,4f
456 + larl %r1,3f
457 + lg %r0,0(%r1)
458 cghi %r2,__CLOCK_REALTIME_COARSE
459 je 0f
460 cghi %r2,__CLOCK_MONOTONIC_COARSE
461 je 0f
462 - larl %r1,3f
463 + larl %r1,_vdso_data
464 + llgf %r0,__VDSO_CLOCK_REALTIME_RES(%r1)
465 cghi %r2,__CLOCK_REALTIME
466 je 0f
467 cghi %r2,__CLOCK_MONOTONIC
468 @@ -36,7 +38,6 @@ __kernel_clock_getres:
469 jz 2f
470 0: ltgr %r3,%r3
471 jz 1f /* res == NULL */
472 - lg %r0,0(%r1)
473 xc 0(8,%r3),0(%r3) /* set tp->tv_sec to zero */
474 stg %r0,8(%r3) /* store tp->tv_usec */
475 1: lghi %r2,0
476 @@ -45,6 +46,5 @@ __kernel_clock_getres:
477 svc 0
478 br %r14
479 CFI_ENDPROC
480 -3: .quad __CLOCK_REALTIME_RES
481 -4: .quad __CLOCK_COARSE_RES
482 +3: .quad __CLOCK_COARSE_RES
483 .size __kernel_clock_getres,.-__kernel_clock_getres
484 diff --git a/arch/sparc/kernel/ptrace_32.c b/arch/sparc/kernel/ptrace_32.c
485 index 60f7205ebe40..646dd58169ec 100644
486 --- a/arch/sparc/kernel/ptrace_32.c
487 +++ b/arch/sparc/kernel/ptrace_32.c
488 @@ -168,12 +168,17 @@ static int genregs32_set(struct task_struct *target,
489 if (ret || !count)
490 return ret;
491 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
492 - &regs->y,
493 + &regs->npc,
494 34 * sizeof(u32), 35 * sizeof(u32));
495 if (ret || !count)
496 return ret;
497 + ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
498 + &regs->y,
499 + 35 * sizeof(u32), 36 * sizeof(u32));
500 + if (ret || !count)
501 + return ret;
502 return user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
503 - 35 * sizeof(u32), 38 * sizeof(u32));
504 + 36 * sizeof(u32), 38 * sizeof(u32));
505 }
506
507 static int fpregs32_get(struct task_struct *target,
508 diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
509 index 7d91a3f5b26a..742de9d97ba1 100644
510 --- a/arch/x86/include/asm/kvm_host.h
511 +++ b/arch/x86/include/asm/kvm_host.h
512 @@ -1160,7 +1160,7 @@ struct kvm_x86_ops {
513 void (*enable_log_dirty_pt_masked)(struct kvm *kvm,
514 struct kvm_memory_slot *slot,
515 gfn_t offset, unsigned long mask);
516 - int (*write_log_dirty)(struct kvm_vcpu *vcpu);
517 + int (*write_log_dirty)(struct kvm_vcpu *vcpu, gpa_t l2_gpa);
518
519 /* pmu operations of sub-arch */
520 const struct kvm_pmu_ops *pmu_ops;
521 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
522 index 650df6d21049..9b3f25e14608 100644
523 --- a/arch/x86/kernel/cpu/common.c
524 +++ b/arch/x86/kernel/cpu/common.c
525 @@ -366,6 +366,9 @@ out:
526 cr4_clear_bits(X86_CR4_UMIP);
527 }
528
529 +/* These bits should not change their value after CPU init is finished. */
530 +static const unsigned long cr4_pinned_mask =
531 + X86_CR4_SMEP | X86_CR4_SMAP | X86_CR4_UMIP | X86_CR4_FSGSBASE;
532 static DEFINE_STATIC_KEY_FALSE_RO(cr_pinning);
533 static unsigned long cr4_pinned_bits __ro_after_init;
534
535 @@ -390,20 +393,20 @@ EXPORT_SYMBOL(native_write_cr0);
536
537 void native_write_cr4(unsigned long val)
538 {
539 - unsigned long bits_missing = 0;
540 + unsigned long bits_changed = 0;
541
542 set_register:
543 asm volatile("mov %0,%%cr4": "+r" (val), "+m" (cr4_pinned_bits));
544
545 if (static_branch_likely(&cr_pinning)) {
546 - if (unlikely((val & cr4_pinned_bits) != cr4_pinned_bits)) {
547 - bits_missing = ~val & cr4_pinned_bits;
548 - val |= bits_missing;
549 + if (unlikely((val & cr4_pinned_mask) != cr4_pinned_bits)) {
550 + bits_changed = (val & cr4_pinned_mask) ^ cr4_pinned_bits;
551 + val = (val & ~cr4_pinned_mask) | cr4_pinned_bits;
552 goto set_register;
553 }
554 - /* Warn after we've set the missing bits. */
555 - WARN_ONCE(bits_missing, "CR4 bits went missing: %lx!?\n",
556 - bits_missing);
557 + /* Warn after we've corrected the changed bits. */
558 + WARN_ONCE(bits_changed, "pinned CR4 bits changed: 0x%lx!?\n",
559 + bits_changed);
560 }
561 }
562 EXPORT_SYMBOL(native_write_cr4);
563 @@ -415,7 +418,7 @@ void cr4_init(void)
564 if (boot_cpu_has(X86_FEATURE_PCID))
565 cr4 |= X86_CR4_PCIDE;
566 if (static_branch_likely(&cr_pinning))
567 - cr4 |= cr4_pinned_bits;
568 + cr4 = (cr4 & ~cr4_pinned_mask) | cr4_pinned_bits;
569
570 __write_cr4(cr4);
571
572 @@ -430,10 +433,7 @@ void cr4_init(void)
573 */
574 static void __init setup_cr_pinning(void)
575 {
576 - unsigned long mask;
577 -
578 - mask = (X86_CR4_SMEP | X86_CR4_SMAP | X86_CR4_UMIP);
579 - cr4_pinned_bits = this_cpu_read(cpu_tlbstate.cr4) & mask;
580 + cr4_pinned_bits = this_cpu_read(cpu_tlbstate.cr4) & cr4_pinned_mask;
581 static_key_enable(&cr_pinning.key);
582 }
583
584 diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
585 index 20856d80dce3..54b711bc0607 100644
586 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
587 +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
588 @@ -1027,6 +1027,7 @@ static int rdt_cdp_peer_get(struct rdt_resource *r, struct rdt_domain *d,
589 _d_cdp = rdt_find_domain(_r_cdp, d->id, NULL);
590 if (WARN_ON(IS_ERR_OR_NULL(_d_cdp))) {
591 _r_cdp = NULL;
592 + _d_cdp = NULL;
593 ret = -EINVAL;
594 }
595
596 diff --git a/arch/x86/kernel/cpu/umwait.c b/arch/x86/kernel/cpu/umwait.c
597 index c222f283b456..32b4dc9030aa 100644
598 --- a/arch/x86/kernel/cpu/umwait.c
599 +++ b/arch/x86/kernel/cpu/umwait.c
600 @@ -17,12 +17,6 @@
601 */
602 static u32 umwait_control_cached = UMWAIT_CTRL_VAL(100000, UMWAIT_C02_ENABLE);
603
604 -u32 get_umwait_control_msr(void)
605 -{
606 - return umwait_control_cached;
607 -}
608 -EXPORT_SYMBOL_GPL(get_umwait_control_msr);
609 -
610 /*
611 * Cache the original IA32_UMWAIT_CONTROL MSR value which is configured by
612 * hardware or BIOS before kernel boot.
613 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
614 index a3824ae9a634..aab02ea2d2cb 100644
615 --- a/arch/x86/kvm/mmu.c
616 +++ b/arch/x86/kvm/mmu.c
617 @@ -1819,10 +1819,10 @@ void kvm_arch_mmu_enable_log_dirty_pt_masked(struct kvm *kvm,
618 * Emulate arch specific page modification logging for the
619 * nested hypervisor
620 */
621 -int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu)
622 +int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu, gpa_t l2_gpa)
623 {
624 if (kvm_x86_ops->write_log_dirty)
625 - return kvm_x86_ops->write_log_dirty(vcpu);
626 + return kvm_x86_ops->write_log_dirty(vcpu, l2_gpa);
627
628 return 0;
629 }
630 diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
631 index d55674f44a18..6f2208cf30df 100644
632 --- a/arch/x86/kvm/mmu.h
633 +++ b/arch/x86/kvm/mmu.h
634 @@ -209,7 +209,7 @@ void kvm_mmu_gfn_disallow_lpage(struct kvm_memory_slot *slot, gfn_t gfn);
635 void kvm_mmu_gfn_allow_lpage(struct kvm_memory_slot *slot, gfn_t gfn);
636 bool kvm_mmu_slot_gfn_write_protect(struct kvm *kvm,
637 struct kvm_memory_slot *slot, u64 gfn);
638 -int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu);
639 +int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu, gpa_t l2_gpa);
640
641 int kvm_mmu_post_init_vm(struct kvm *kvm);
642 void kvm_mmu_pre_destroy_vm(struct kvm *kvm);
643 diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
644 index 4e3f137ffa8c..a20fc1ba607f 100644
645 --- a/arch/x86/kvm/paging_tmpl.h
646 +++ b/arch/x86/kvm/paging_tmpl.h
647 @@ -220,7 +220,7 @@ static inline unsigned FNAME(gpte_access)(u64 gpte)
648 static int FNAME(update_accessed_dirty_bits)(struct kvm_vcpu *vcpu,
649 struct kvm_mmu *mmu,
650 struct guest_walker *walker,
651 - int write_fault)
652 + gpa_t addr, int write_fault)
653 {
654 unsigned level, index;
655 pt_element_t pte, orig_pte;
656 @@ -245,7 +245,7 @@ static int FNAME(update_accessed_dirty_bits)(struct kvm_vcpu *vcpu,
657 !(pte & PT_GUEST_DIRTY_MASK)) {
658 trace_kvm_mmu_set_dirty_bit(table_gfn, index, sizeof(pte));
659 #if PTTYPE == PTTYPE_EPT
660 - if (kvm_arch_write_log_dirty(vcpu))
661 + if (kvm_arch_write_log_dirty(vcpu, addr))
662 return -EINVAL;
663 #endif
664 pte |= PT_GUEST_DIRTY_MASK;
665 @@ -442,7 +442,8 @@ retry_walk:
666 (PT_GUEST_DIRTY_SHIFT - PT_GUEST_ACCESSED_SHIFT);
667
668 if (unlikely(!accessed_dirty)) {
669 - ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker, write_fault);
670 + ret = FNAME(update_accessed_dirty_bits)(vcpu, mmu, walker,
671 + addr, write_fault);
672 if (unlikely(ret < 0))
673 goto error;
674 else if (ret)
675 diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
676 index 5fac01865a2d..10e6471896cd 100644
677 --- a/arch/x86/kvm/vmx/vmx.c
678 +++ b/arch/x86/kvm/vmx/vmx.c
679 @@ -6427,23 +6427,6 @@ static void atomic_switch_perf_msrs(struct vcpu_vmx *vmx)
680 msrs[i].host, false);
681 }
682
683 -static void atomic_switch_umwait_control_msr(struct vcpu_vmx *vmx)
684 -{
685 - u32 host_umwait_control;
686 -
687 - if (!vmx_has_waitpkg(vmx))
688 - return;
689 -
690 - host_umwait_control = get_umwait_control_msr();
691 -
692 - if (vmx->msr_ia32_umwait_control != host_umwait_control)
693 - add_atomic_switch_msr(vmx, MSR_IA32_UMWAIT_CONTROL,
694 - vmx->msr_ia32_umwait_control,
695 - host_umwait_control, false);
696 - else
697 - clear_atomic_switch_msr(vmx, MSR_IA32_UMWAIT_CONTROL);
698 -}
699 -
700 static void vmx_update_hv_timer(struct kvm_vcpu *vcpu)
701 {
702 struct vcpu_vmx *vmx = to_vmx(vcpu);
703 @@ -6533,7 +6516,6 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
704 pt_guest_enter(vmx);
705
706 atomic_switch_perf_msrs(vmx);
707 - atomic_switch_umwait_control_msr(vmx);
708
709 if (enable_preemption_timer)
710 vmx_update_hv_timer(vcpu);
711 @@ -7272,11 +7254,11 @@ static void vmx_flush_log_dirty(struct kvm *kvm)
712 kvm_flush_pml_buffers(kvm);
713 }
714
715 -static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu)
716 +static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu, gpa_t gpa)
717 {
718 struct vmcs12 *vmcs12;
719 struct vcpu_vmx *vmx = to_vmx(vcpu);
720 - gpa_t gpa, dst;
721 + gpa_t dst;
722
723 if (is_guest_mode(vcpu)) {
724 WARN_ON_ONCE(vmx->nested.pml_full);
725 @@ -7295,7 +7277,7 @@ static int vmx_write_pml_buffer(struct kvm_vcpu *vcpu)
726 return 1;
727 }
728
729 - gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS) & ~0xFFFull;
730 + gpa &= ~0xFFFull;
731 dst = vmcs12->pml_address + sizeof(u64) * vmcs12->guest_pml_index;
732
733 if (kvm_write_guest_page(vcpu->kvm, gpa_to_gfn(dst), &gpa,
734 diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h
735 index 295c5f83842e..a1919ec7fd10 100644
736 --- a/arch/x86/kvm/vmx/vmx.h
737 +++ b/arch/x86/kvm/vmx/vmx.h
738 @@ -14,8 +14,6 @@
739 extern const u32 vmx_msr_index[];
740 extern u64 host_efer;
741
742 -extern u32 get_umwait_control_msr(void);
743 -
744 #define MSR_TYPE_R 1
745 #define MSR_TYPE_W 2
746 #define MSR_TYPE_RW 3
747 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
748 index fff279fb173b..eed1866ae4d3 100644
749 --- a/arch/x86/kvm/x86.c
750 +++ b/arch/x86/kvm/x86.c
751 @@ -2753,7 +2753,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
752 return kvm_mtrr_set_msr(vcpu, msr, data);
753 case MSR_IA32_APICBASE:
754 return kvm_set_apic_base(vcpu, msr_info);
755 - case APIC_BASE_MSR ... APIC_BASE_MSR + 0x3ff:
756 + case APIC_BASE_MSR ... APIC_BASE_MSR + 0xff:
757 return kvm_x2apic_msr_write(vcpu, msr, data);
758 case MSR_IA32_TSCDEADLINE:
759 kvm_set_lapic_tscdeadline_msr(vcpu, data);
760 @@ -3057,7 +3057,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
761 case MSR_IA32_APICBASE:
762 msr_info->data = kvm_get_apic_base(vcpu);
763 break;
764 - case APIC_BASE_MSR ... APIC_BASE_MSR + 0x3ff:
765 + case APIC_BASE_MSR ... APIC_BASE_MSR + 0xff:
766 return kvm_x2apic_msr_read(vcpu, msr_info->index, &msr_info->data);
767 break;
768 case MSR_IA32_TSCDEADLINE:
769 diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
770 index fff28c6f73a2..b0dfac3d3df7 100644
771 --- a/arch/x86/lib/usercopy_64.c
772 +++ b/arch/x86/lib/usercopy_64.c
773 @@ -24,6 +24,7 @@ unsigned long __clear_user(void __user *addr, unsigned long size)
774 asm volatile(
775 " testq %[size8],%[size8]\n"
776 " jz 4f\n"
777 + " .align 16\n"
778 "0: movq $0,(%[dst])\n"
779 " addq $8,%[dst]\n"
780 " decl %%ecx ; jnz 0b\n"
781 diff --git a/block/bio-integrity.c b/block/bio-integrity.c
782 index bf62c25cde8f..ae07dd78e951 100644
783 --- a/block/bio-integrity.c
784 +++ b/block/bio-integrity.c
785 @@ -278,7 +278,6 @@ bool bio_integrity_prep(struct bio *bio)
786
787 if (ret == 0) {
788 printk(KERN_ERR "could not attach integrity payload\n");
789 - kfree(buf);
790 status = BLK_STS_RESOURCE;
791 goto err_end_io;
792 }
793 diff --git a/block/blk-mq.c b/block/blk-mq.c
794 index 0550366e25d8..f1b930a300a3 100644
795 --- a/block/blk-mq.c
796 +++ b/block/blk-mq.c
797 @@ -3279,7 +3279,9 @@ static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set,
798
799 if (set->nr_maps == 1 && nr_hw_queues > nr_cpu_ids)
800 nr_hw_queues = nr_cpu_ids;
801 - if (nr_hw_queues < 1 || nr_hw_queues == set->nr_hw_queues)
802 + if (nr_hw_queues < 1)
803 + return;
804 + if (set->nr_maps == 1 && nr_hw_queues == set->nr_hw_queues)
805 return;
806
807 list_for_each_entry(q, &set->tag_list, tag_set_list)
808 diff --git a/drivers/acpi/acpi_configfs.c b/drivers/acpi/acpi_configfs.c
809 index 57d9d574d4dd..01738d8e888e 100644
810 --- a/drivers/acpi/acpi_configfs.c
811 +++ b/drivers/acpi/acpi_configfs.c
812 @@ -11,6 +11,7 @@
813 #include <linux/module.h>
814 #include <linux/configfs.h>
815 #include <linux/acpi.h>
816 +#include <linux/security.h>
817
818 #include "acpica/accommon.h"
819 #include "acpica/actables.h"
820 @@ -28,7 +29,10 @@ static ssize_t acpi_table_aml_write(struct config_item *cfg,
821 {
822 const struct acpi_table_header *header = data;
823 struct acpi_table *table;
824 - int ret;
825 + int ret = security_locked_down(LOCKDOWN_ACPI_TABLES);
826 +
827 + if (ret)
828 + return ret;
829
830 table = container_of(cfg, struct acpi_table, cfg);
831
832 diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
833 index 3a89909b50a6..76c668c05fa0 100644
834 --- a/drivers/acpi/sysfs.c
835 +++ b/drivers/acpi/sysfs.c
836 @@ -938,13 +938,13 @@ static void __exit interrupt_stats_exit(void)
837 }
838
839 static ssize_t
840 -acpi_show_profile(struct device *dev, struct device_attribute *attr,
841 +acpi_show_profile(struct kobject *kobj, struct kobj_attribute *attr,
842 char *buf)
843 {
844 return sprintf(buf, "%d\n", acpi_gbl_FADT.preferred_profile);
845 }
846
847 -static const struct device_attribute pm_profile_attr =
848 +static const struct kobj_attribute pm_profile_attr =
849 __ATTR(pm_profile, S_IRUGO, acpi_show_profile, NULL);
850
851 static ssize_t hotplug_enabled_show(struct kobject *kobj,
852 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
853 index 34a6de65aa7e..5e6586af21b7 100644
854 --- a/drivers/android/binder.c
855 +++ b/drivers/android/binder.c
856 @@ -4688,8 +4688,15 @@ static struct binder_thread *binder_get_thread(struct binder_proc *proc)
857
858 static void binder_free_proc(struct binder_proc *proc)
859 {
860 + struct binder_device *device;
861 +
862 BUG_ON(!list_empty(&proc->todo));
863 BUG_ON(!list_empty(&proc->delivered_death));
864 + device = container_of(proc->context, struct binder_device, context);
865 + if (refcount_dec_and_test(&device->ref)) {
866 + kfree(proc->context->name);
867 + kfree(device);
868 + }
869 binder_alloc_deferred_release(&proc->alloc);
870 put_task_struct(proc->tsk);
871 binder_stats_deleted(BINDER_STAT_PROC);
872 @@ -5408,7 +5415,6 @@ static int binder_node_release(struct binder_node *node, int refs)
873 static void binder_deferred_release(struct binder_proc *proc)
874 {
875 struct binder_context *context = proc->context;
876 - struct binder_device *device;
877 struct rb_node *n;
878 int threads, nodes, incoming_refs, outgoing_refs, active_transactions;
879
880 @@ -5425,12 +5431,6 @@ static void binder_deferred_release(struct binder_proc *proc)
881 context->binder_context_mgr_node = NULL;
882 }
883 mutex_unlock(&context->context_mgr_node_lock);
884 - device = container_of(proc->context, struct binder_device, context);
885 - if (refcount_dec_and_test(&device->ref)) {
886 - kfree(context->name);
887 - kfree(device);
888 - }
889 - proc->context = NULL;
890 binder_inner_proc_lock(proc);
891 /*
892 * Make sure proc stays alive after we
893 diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
894 index 5af34a3201ed..5596c9b6ebf2 100644
895 --- a/drivers/ata/libata-scsi.c
896 +++ b/drivers/ata/libata-scsi.c
897 @@ -3978,12 +3978,13 @@ static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)
898 {
899 struct scsi_cmnd *scmd = qc->scsicmd;
900 const u8 *cdb = scmd->cmnd;
901 - const u8 *p;
902 u8 pg, spg;
903 unsigned six_byte, pg_len, hdr_len, bd_len;
904 int len;
905 u16 fp = (u16)-1;
906 u8 bp = 0xff;
907 + u8 buffer[64];
908 + const u8 *p = buffer;
909
910 VPRINTK("ENTER\n");
911
912 @@ -4017,12 +4018,14 @@ static unsigned int ata_scsi_mode_select_xlat(struct ata_queued_cmd *qc)
913 if (!scsi_sg_count(scmd) || scsi_sglist(scmd)->length < len)
914 goto invalid_param_len;
915
916 - p = page_address(sg_page(scsi_sglist(scmd)));
917 -
918 /* Move past header and block descriptors. */
919 if (len < hdr_len)
920 goto invalid_param_len;
921
922 + if (!sg_copy_to_buffer(scsi_sglist(scmd), scsi_sg_count(scmd),
923 + buffer, sizeof(buffer)))
924 + goto invalid_param_len;
925 +
926 if (six_byte)
927 bd_len = p[3];
928 else
929 diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c
930 index 3495e1733a8e..c35b7b993133 100644
931 --- a/drivers/ata/sata_rcar.c
932 +++ b/drivers/ata/sata_rcar.c
933 @@ -905,7 +905,7 @@ static int sata_rcar_probe(struct platform_device *pdev)
934 pm_runtime_enable(dev);
935 ret = pm_runtime_get_sync(dev);
936 if (ret < 0)
937 - goto err_pm_disable;
938 + goto err_pm_put;
939
940 host = ata_host_alloc(dev, 1);
941 if (!host) {
942 @@ -935,7 +935,6 @@ static int sata_rcar_probe(struct platform_device *pdev)
943
944 err_pm_put:
945 pm_runtime_put(dev);
946 -err_pm_disable:
947 pm_runtime_disable(dev);
948 return ret;
949 }
950 @@ -989,8 +988,10 @@ static int sata_rcar_resume(struct device *dev)
951 int ret;
952
953 ret = pm_runtime_get_sync(dev);
954 - if (ret < 0)
955 + if (ret < 0) {
956 + pm_runtime_put(dev);
957 return ret;
958 + }
959
960 if (priv->type == RCAR_GEN3_SATA) {
961 sata_rcar_init_module(priv);
962 @@ -1015,8 +1016,10 @@ static int sata_rcar_restore(struct device *dev)
963 int ret;
964
965 ret = pm_runtime_get_sync(dev);
966 - if (ret < 0)
967 + if (ret < 0) {
968 + pm_runtime_put(dev);
969 return ret;
970 + }
971
972 sata_rcar_setup_port(host);
973
974 diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
975 index 59f911e57719..508bbd6ea439 100644
976 --- a/drivers/base/regmap/regmap.c
977 +++ b/drivers/base/regmap/regmap.c
978 @@ -1356,6 +1356,7 @@ void regmap_exit(struct regmap *map)
979 if (map->hwlock)
980 hwspin_lock_free(map->hwlock);
981 kfree_const(map->name);
982 + kfree(map->patch);
983 kfree(map);
984 }
985 EXPORT_SYMBOL_GPL(regmap_exit);
986 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
987 index 57ed6b70d295..565e35e69f24 100644
988 --- a/drivers/block/loop.c
989 +++ b/drivers/block/loop.c
990 @@ -1284,7 +1284,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
991 if (lo->lo_offset != info->lo_offset ||
992 lo->lo_sizelimit != info->lo_sizelimit) {
993 sync_blockdev(lo->lo_device);
994 - kill_bdev(lo->lo_device);
995 + invalidate_bdev(lo->lo_device);
996 }
997
998 /* I/O need to be drained during transfer transition */
999 @@ -1558,12 +1558,12 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
1000
1001 if (lo->lo_queue->limits.logical_block_size != arg) {
1002 sync_blockdev(lo->lo_device);
1003 - kill_bdev(lo->lo_device);
1004 + invalidate_bdev(lo->lo_device);
1005 }
1006
1007 blk_mq_freeze_queue(lo->lo_queue);
1008
1009 - /* kill_bdev should have truncated all the pages */
1010 + /* invalidate_bdev should have truncated all the pages */
1011 if (lo->lo_queue->limits.logical_block_size != arg &&
1012 lo->lo_device->bd_inode->i_mapping->nrpages) {
1013 err = -EAGAIN;
1014 diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
1015 index f0bc0841cbc4..553c0e279621 100644
1016 --- a/drivers/bus/ti-sysc.c
1017 +++ b/drivers/bus/ti-sysc.c
1018 @@ -880,10 +880,13 @@ static int sysc_enable_module(struct device *dev)
1019 regbits = ddata->cap->regbits;
1020 reg = sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]);
1021
1022 - /* Set CLOCKACTIVITY, we only use it for ick */
1023 + /*
1024 + * Set CLOCKACTIVITY, we only use it for ick. And we only configure it
1025 + * based on the SYSC_QUIRK_USE_CLOCKACT flag, not based on the hardware
1026 + * capabilities. See the old HWMOD_SET_DEFAULT_CLOCKACT flag.
1027 + */
1028 if (regbits->clkact_shift >= 0 &&
1029 - (ddata->cfg.quirks & SYSC_QUIRK_USE_CLOCKACT ||
1030 - ddata->cfg.sysc_val & BIT(regbits->clkact_shift)))
1031 + (ddata->cfg.quirks & SYSC_QUIRK_USE_CLOCKACT))
1032 reg |= SYSC_CLOCACT_ICK << regbits->clkact_shift;
1033
1034 /* Set SIDLE mode */
1035 @@ -938,6 +941,9 @@ set_autoidle:
1036 sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1037 }
1038
1039 + /* Flush posted write */
1040 + sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]);
1041 +
1042 if (ddata->module_enable_quirk)
1043 ddata->module_enable_quirk(ddata);
1044
1045 @@ -1018,6 +1024,9 @@ set_sidle:
1046 reg |= 1 << regbits->autoidle_shift;
1047 sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1048
1049 + /* Flush posted write */
1050 + sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]);
1051 +
1052 return 0;
1053 }
1054
1055 diff --git a/drivers/char/hw_random/ks-sa-rng.c b/drivers/char/hw_random/ks-sa-rng.c
1056 index a67430010aa6..5c7d3dfcfdd0 100644
1057 --- a/drivers/char/hw_random/ks-sa-rng.c
1058 +++ b/drivers/char/hw_random/ks-sa-rng.c
1059 @@ -208,6 +208,7 @@ static int ks_sa_rng_probe(struct platform_device *pdev)
1060 ret = pm_runtime_get_sync(dev);
1061 if (ret < 0) {
1062 dev_err(dev, "Failed to enable SA power-domain\n");
1063 + pm_runtime_put_noidle(dev);
1064 pm_runtime_disable(dev);
1065 return ret;
1066 }
1067 diff --git a/drivers/clk/sifive/fu540-prci.c b/drivers/clk/sifive/fu540-prci.c
1068 index 6282ee2f361c..a8901f90a61a 100644
1069 --- a/drivers/clk/sifive/fu540-prci.c
1070 +++ b/drivers/clk/sifive/fu540-prci.c
1071 @@ -586,7 +586,10 @@ static int sifive_fu540_prci_probe(struct platform_device *pdev)
1072 struct __prci_data *pd;
1073 int r;
1074
1075 - pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
1076 + pd = devm_kzalloc(dev,
1077 + struct_size(pd, hw_clks.hws,
1078 + ARRAY_SIZE(__prci_init_clocks)),
1079 + GFP_KERNEL);
1080 if (!pd)
1081 return -ENOMEM;
1082
1083 diff --git a/drivers/firmware/efi/esrt.c b/drivers/firmware/efi/esrt.c
1084 index d6dd5f503fa2..e8f71a50ba89 100644
1085 --- a/drivers/firmware/efi/esrt.c
1086 +++ b/drivers/firmware/efi/esrt.c
1087 @@ -181,7 +181,7 @@ static int esre_create_sysfs_entry(void *esre, int entry_num)
1088 rc = kobject_init_and_add(&entry->kobj, &esre1_ktype, NULL,
1089 "entry%d", entry_num);
1090 if (rc) {
1091 - kfree(entry);
1092 + kobject_put(&entry->kobj);
1093 return rc;
1094 }
1095 }
1096 diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
1097 index bd715012185c..23fc16dc92b4 100644
1098 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
1099 +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
1100 @@ -1273,8 +1273,12 @@ static int sdma_v5_0_sw_fini(void *handle)
1101 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1102 int i;
1103
1104 - for (i = 0; i < adev->sdma.num_instances; i++)
1105 + for (i = 0; i < adev->sdma.num_instances; i++) {
1106 + if (adev->sdma.instance[i].fw != NULL)
1107 + release_firmware(adev->sdma.instance[i].fw);
1108 +
1109 amdgpu_ring_fini(&adev->sdma.instance[i].ring);
1110 + }
1111
1112 return 0;
1113 }
1114 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1115 index 40e3fc0c6942..aa0a617b8d44 100644
1116 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1117 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
1118 @@ -312,6 +312,7 @@ struct kfd_process *kfd_create_process(struct file *filep)
1119 (int)process->lead_thread->pid);
1120 if (ret) {
1121 pr_warn("Creating procfs pid directory failed");
1122 + kobject_put(process->kobj);
1123 goto out;
1124 }
1125
1126 diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
1127 index 207435fa4f2c..51d07a4561ce 100644
1128 --- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
1129 +++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c
1130 @@ -1862,7 +1862,7 @@ bool calculate_user_regamma_ramp(struct dc_transfer_func *output_tf,
1131
1132 kfree(rgb_regamma);
1133 rgb_regamma_alloc_fail:
1134 - kvfree(rgb_user);
1135 + kfree(rgb_user);
1136 rgb_user_alloc_fail:
1137 return ret;
1138 }
1139 diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
1140 index d9e62ca65ab8..bd2e577c701f 100644
1141 --- a/drivers/gpu/drm/radeon/ni_dpm.c
1142 +++ b/drivers/gpu/drm/radeon/ni_dpm.c
1143 @@ -2128,7 +2128,7 @@ static int ni_init_smc_spll_table(struct radeon_device *rdev)
1144 if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
1145 ret = -EINVAL;
1146
1147 - if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
1148 + if (fb_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT))
1149 ret = -EINVAL;
1150
1151 if (clk_v & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_SHIFT))
1152 diff --git a/drivers/gpu/drm/rcar-du/Kconfig b/drivers/gpu/drm/rcar-du/Kconfig
1153 index 1529849e217e..7cdba77b1420 100644
1154 --- a/drivers/gpu/drm/rcar-du/Kconfig
1155 +++ b/drivers/gpu/drm/rcar-du/Kconfig
1156 @@ -23,6 +23,7 @@ config DRM_RCAR_DW_HDMI
1157 config DRM_RCAR_LVDS
1158 tristate "R-Car DU LVDS Encoder Support"
1159 depends on DRM && DRM_BRIDGE && OF
1160 + select DRM_KMS_HELPER
1161 select DRM_PANEL
1162 select OF_FLATTREE
1163 select OF_OVERLAY
1164 diff --git a/drivers/i2c/busses/i2c-fsi.c b/drivers/i2c/busses/i2c-fsi.c
1165 index e0c256922d4f..977d6f524649 100644
1166 --- a/drivers/i2c/busses/i2c-fsi.c
1167 +++ b/drivers/i2c/busses/i2c-fsi.c
1168 @@ -98,7 +98,7 @@
1169 #define I2C_STAT_DAT_REQ BIT(25)
1170 #define I2C_STAT_CMD_COMP BIT(24)
1171 #define I2C_STAT_STOP_ERR BIT(23)
1172 -#define I2C_STAT_MAX_PORT GENMASK(19, 16)
1173 +#define I2C_STAT_MAX_PORT GENMASK(22, 16)
1174 #define I2C_STAT_ANY_INT BIT(15)
1175 #define I2C_STAT_SCL_IN BIT(11)
1176 #define I2C_STAT_SDA_IN BIT(10)
1177 diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
1178 index dbc43cfec19d..331f7cca9bab 100644
1179 --- a/drivers/i2c/busses/i2c-tegra.c
1180 +++ b/drivers/i2c/busses/i2c-tegra.c
1181 @@ -1719,14 +1719,9 @@ static int tegra_i2c_remove(struct platform_device *pdev)
1182 static int __maybe_unused tegra_i2c_suspend(struct device *dev)
1183 {
1184 struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
1185 - int err;
1186
1187 i2c_mark_adapter_suspended(&i2c_dev->adapter);
1188
1189 - err = pm_runtime_force_suspend(dev);
1190 - if (err < 0)
1191 - return err;
1192 -
1193 return 0;
1194 }
1195
1196 @@ -1747,10 +1742,6 @@ static int __maybe_unused tegra_i2c_resume(struct device *dev)
1197 if (err)
1198 return err;
1199
1200 - err = pm_runtime_force_resume(dev);
1201 - if (err < 0)
1202 - return err;
1203 -
1204 i2c_mark_adapter_resumed(&i2c_dev->adapter);
1205
1206 return 0;
1207 diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c
1208 index 3ac426a8ab5a..c2ae8c8cd429 100644
1209 --- a/drivers/i2c/i2c-core-smbus.c
1210 +++ b/drivers/i2c/i2c-core-smbus.c
1211 @@ -495,6 +495,13 @@ static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr,
1212 break;
1213 case I2C_SMBUS_BLOCK_DATA:
1214 case I2C_SMBUS_BLOCK_PROC_CALL:
1215 + if (msg[1].buf[0] > I2C_SMBUS_BLOCK_MAX) {
1216 + dev_err(&adapter->dev,
1217 + "Invalid block size returned: %d\n",
1218 + msg[1].buf[0]);
1219 + status = -EPROTO;
1220 + goto cleanup;
1221 + }
1222 for (i = 0; i < msg[1].buf[0] + 1; i++)
1223 data->block[i] = msg[1].buf[i];
1224 break;
1225 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
1226 index 8f776b7de45e..e3cd9d2b0dd2 100644
1227 --- a/drivers/infiniband/core/cma.c
1228 +++ b/drivers/infiniband/core/cma.c
1229 @@ -1631,6 +1631,8 @@ static struct rdma_id_private *cma_find_listener(
1230 {
1231 struct rdma_id_private *id_priv, *id_priv_dev;
1232
1233 + lockdep_assert_held(&lock);
1234 +
1235 if (!bind_list)
1236 return ERR_PTR(-EINVAL);
1237
1238 @@ -1677,6 +1679,7 @@ cma_ib_id_from_event(struct ib_cm_id *cm_id,
1239 }
1240 }
1241
1242 + mutex_lock(&lock);
1243 /*
1244 * Net namespace might be getting deleted while route lookup,
1245 * cm_id lookup is in progress. Therefore, perform netdevice
1246 @@ -1718,6 +1721,7 @@ cma_ib_id_from_event(struct ib_cm_id *cm_id,
1247 id_priv = cma_find_listener(bind_list, cm_id, ib_event, req, *net_dev);
1248 err:
1249 rcu_read_unlock();
1250 + mutex_unlock(&lock);
1251 if (IS_ERR(id_priv) && *net_dev) {
1252 dev_put(*net_dev);
1253 *net_dev = NULL;
1254 @@ -2473,6 +2477,8 @@ static void cma_listen_on_dev(struct rdma_id_private *id_priv,
1255 struct net *net = id_priv->id.route.addr.dev_addr.net;
1256 int ret;
1257
1258 + lockdep_assert_held(&lock);
1259 +
1260 if (cma_family(id_priv) == AF_IB && !rdma_cap_ib_cm(cma_dev->device, 1))
1261 return;
1262
1263 @@ -3245,6 +3251,8 @@ static void cma_bind_port(struct rdma_bind_list *bind_list,
1264 u64 sid, mask;
1265 __be16 port;
1266
1267 + lockdep_assert_held(&lock);
1268 +
1269 addr = cma_src_addr(id_priv);
1270 port = htons(bind_list->port);
1271
1272 @@ -3273,6 +3281,8 @@ static int cma_alloc_port(enum rdma_ucm_port_space ps,
1273 struct rdma_bind_list *bind_list;
1274 int ret;
1275
1276 + lockdep_assert_held(&lock);
1277 +
1278 bind_list = kzalloc(sizeof *bind_list, GFP_KERNEL);
1279 if (!bind_list)
1280 return -ENOMEM;
1281 @@ -3299,6 +3309,8 @@ static int cma_port_is_unique(struct rdma_bind_list *bind_list,
1282 struct sockaddr *saddr = cma_src_addr(id_priv);
1283 __be16 dport = cma_port(daddr);
1284
1285 + lockdep_assert_held(&lock);
1286 +
1287 hlist_for_each_entry(cur_id, &bind_list->owners, node) {
1288 struct sockaddr *cur_daddr = cma_dst_addr(cur_id);
1289 struct sockaddr *cur_saddr = cma_src_addr(cur_id);
1290 @@ -3338,6 +3350,8 @@ static int cma_alloc_any_port(enum rdma_ucm_port_space ps,
1291 unsigned int rover;
1292 struct net *net = id_priv->id.route.addr.dev_addr.net;
1293
1294 + lockdep_assert_held(&lock);
1295 +
1296 inet_get_local_port_range(net, &low, &high);
1297 remaining = (high - low) + 1;
1298 rover = prandom_u32() % remaining + low;
1299 @@ -3385,6 +3399,8 @@ static int cma_check_port(struct rdma_bind_list *bind_list,
1300 struct rdma_id_private *cur_id;
1301 struct sockaddr *addr, *cur_addr;
1302
1303 + lockdep_assert_held(&lock);
1304 +
1305 addr = cma_src_addr(id_priv);
1306 hlist_for_each_entry(cur_id, &bind_list->owners, node) {
1307 if (id_priv == cur_id)
1308 @@ -3415,6 +3431,8 @@ static int cma_use_port(enum rdma_ucm_port_space ps,
1309 unsigned short snum;
1310 int ret;
1311
1312 + lockdep_assert_held(&lock);
1313 +
1314 snum = ntohs(cma_port(cma_src_addr(id_priv)));
1315 if (snum < PROT_SOCK && !capable(CAP_NET_BIND_SERVICE))
1316 return -EACCES;
1317 diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
1318 index 9947d16edef2..2284930b5f91 100644
1319 --- a/drivers/infiniband/core/mad.c
1320 +++ b/drivers/infiniband/core/mad.c
1321 @@ -639,10 +639,10 @@ static void unregister_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
1322 xa_erase(&ib_mad_clients, mad_agent_priv->agent.hi_tid);
1323
1324 flush_workqueue(port_priv->wq);
1325 - ib_cancel_rmpp_recvs(mad_agent_priv);
1326
1327 deref_mad_agent(mad_agent_priv);
1328 wait_for_completion(&mad_agent_priv->comp);
1329 + ib_cancel_rmpp_recvs(mad_agent_priv);
1330
1331 ib_mad_agent_security_cleanup(&mad_agent_priv->agent);
1332
1333 @@ -2960,6 +2960,7 @@ static int ib_mad_post_receive_mads(struct ib_mad_qp_info *qp_info,
1334 DMA_FROM_DEVICE);
1335 if (unlikely(ib_dma_mapping_error(qp_info->port_priv->device,
1336 sg_list.addr))) {
1337 + kfree(mad_priv);
1338 ret = -ENOMEM;
1339 break;
1340 }
1341 diff --git a/drivers/infiniband/hw/hfi1/debugfs.c b/drivers/infiniband/hw/hfi1/debugfs.c
1342 index d268bf9c42ee..c29da2f4e339 100644
1343 --- a/drivers/infiniband/hw/hfi1/debugfs.c
1344 +++ b/drivers/infiniband/hw/hfi1/debugfs.c
1345 @@ -985,15 +985,10 @@ static ssize_t qsfp2_debugfs_read(struct file *file, char __user *buf,
1346 static int __i2c_debugfs_open(struct inode *in, struct file *fp, u32 target)
1347 {
1348 struct hfi1_pportdata *ppd;
1349 - int ret;
1350
1351 ppd = private2ppd(fp);
1352
1353 - ret = acquire_chip_resource(ppd->dd, i2c_target(target), 0);
1354 - if (ret) /* failed - release the module */
1355 - module_put(THIS_MODULE);
1356 -
1357 - return ret;
1358 + return acquire_chip_resource(ppd->dd, i2c_target(target), 0);
1359 }
1360
1361 static int i2c1_debugfs_open(struct inode *in, struct file *fp)
1362 @@ -1013,7 +1008,6 @@ static int __i2c_debugfs_release(struct inode *in, struct file *fp, u32 target)
1363 ppd = private2ppd(fp);
1364
1365 release_chip_resource(ppd->dd, i2c_target(target));
1366 - module_put(THIS_MODULE);
1367
1368 return 0;
1369 }
1370 @@ -1031,18 +1025,10 @@ static int i2c2_debugfs_release(struct inode *in, struct file *fp)
1371 static int __qsfp_debugfs_open(struct inode *in, struct file *fp, u32 target)
1372 {
1373 struct hfi1_pportdata *ppd;
1374 - int ret;
1375 -
1376 - if (!try_module_get(THIS_MODULE))
1377 - return -ENODEV;
1378
1379 ppd = private2ppd(fp);
1380
1381 - ret = acquire_chip_resource(ppd->dd, i2c_target(target), 0);
1382 - if (ret) /* failed - release the module */
1383 - module_put(THIS_MODULE);
1384 -
1385 - return ret;
1386 + return acquire_chip_resource(ppd->dd, i2c_target(target), 0);
1387 }
1388
1389 static int qsfp1_debugfs_open(struct inode *in, struct file *fp)
1390 @@ -1062,7 +1048,6 @@ static int __qsfp_debugfs_release(struct inode *in, struct file *fp, u32 target)
1391 ppd = private2ppd(fp);
1392
1393 release_chip_resource(ppd->dd, i2c_target(target));
1394 - module_put(THIS_MODULE);
1395
1396 return 0;
1397 }
1398 diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
1399 index 5e9732990be5..a7a926b7b562 100644
1400 --- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
1401 +++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
1402 @@ -150,8 +150,17 @@ qedr_iw_issue_event(void *context,
1403 if (params->cm_info) {
1404 event.ird = params->cm_info->ird;
1405 event.ord = params->cm_info->ord;
1406 - event.private_data_len = params->cm_info->private_data_len;
1407 - event.private_data = (void *)params->cm_info->private_data;
1408 + /* Only connect_request and reply have valid private data
1409 + * the rest of the events this may be left overs from
1410 + * connection establishment. CONNECT_REQUEST is issued via
1411 + * qedr_iw_mpa_request
1412 + */
1413 + if (event_type == IW_CM_EVENT_CONNECT_REPLY) {
1414 + event.private_data_len =
1415 + params->cm_info->private_data_len;
1416 + event.private_data =
1417 + (void *)params->cm_info->private_data;
1418 + }
1419 }
1420
1421 if (ep->cm_id)
1422 diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
1423 index d35465389357..19556c62c7ea 100644
1424 --- a/drivers/infiniband/sw/rdmavt/qp.c
1425 +++ b/drivers/infiniband/sw/rdmavt/qp.c
1426 @@ -1196,7 +1196,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
1427 err = alloc_ud_wq_attr(qp, rdi->dparms.node);
1428 if (err) {
1429 ret = (ERR_PTR(err));
1430 - goto bail_driver_priv;
1431 + goto bail_rq_rvt;
1432 }
1433
1434 err = alloc_qpn(rdi, &rdi->qp_dev->qpn_table,
1435 @@ -1300,9 +1300,11 @@ bail_qpn:
1436 rvt_free_qpn(&rdi->qp_dev->qpn_table, qp->ibqp.qp_num);
1437
1438 bail_rq_wq:
1439 - rvt_free_rq(&qp->r_rq);
1440 free_ud_wq_attr(qp);
1441
1442 +bail_rq_rvt:
1443 + rvt_free_rq(&qp->r_rq);
1444 +
1445 bail_driver_priv:
1446 rdi->driver_f.qp_priv_free(rdi, qp);
1447
1448 diff --git a/drivers/infiniband/sw/siw/siw_qp_rx.c b/drivers/infiniband/sw/siw/siw_qp_rx.c
1449 index c0a887240325..0520e70084f9 100644
1450 --- a/drivers/infiniband/sw/siw/siw_qp_rx.c
1451 +++ b/drivers/infiniband/sw/siw/siw_qp_rx.c
1452 @@ -139,7 +139,8 @@ static int siw_rx_pbl(struct siw_rx_stream *srx, int *pbl_idx,
1453 break;
1454
1455 bytes = min(bytes, len);
1456 - if (siw_rx_kva(srx, (void *)buf_addr, bytes) == bytes) {
1457 + if (siw_rx_kva(srx, (void *)(uintptr_t)buf_addr, bytes) ==
1458 + bytes) {
1459 copied += bytes;
1460 offset += bytes;
1461 len -= bytes;
1462 diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c
1463 index 9e393b9c5091..30ac0ba55864 100644
1464 --- a/drivers/iommu/dmar.c
1465 +++ b/drivers/iommu/dmar.c
1466 @@ -898,7 +898,8 @@ int __init detect_intel_iommu(void)
1467 if (!ret)
1468 ret = dmar_walk_dmar_table((struct acpi_table_dmar *)dmar_tbl,
1469 &validate_drhd_cb);
1470 - if (!ret && !no_iommu && !iommu_detected && !dmar_disabled) {
1471 + if (!ret && !no_iommu && !iommu_detected &&
1472 + (!dmar_disabled || dmar_platform_optin())) {
1473 iommu_detected = 1;
1474 /* Make sure ACS will be enabled */
1475 pci_request_acs();
1476 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
1477 index 773ac2b0d606..6366b5fbb3a4 100644
1478 --- a/drivers/iommu/intel-iommu.c
1479 +++ b/drivers/iommu/intel-iommu.c
1480 @@ -611,6 +611,12 @@ struct intel_iommu *domain_get_iommu(struct dmar_domain *domain)
1481 return g_iommus[iommu_id];
1482 }
1483
1484 +static inline bool iommu_paging_structure_coherency(struct intel_iommu *iommu)
1485 +{
1486 + return sm_supported(iommu) ?
1487 + ecap_smpwc(iommu->ecap) : ecap_coherent(iommu->ecap);
1488 +}
1489 +
1490 static void domain_update_iommu_coherency(struct dmar_domain *domain)
1491 {
1492 struct dmar_drhd_unit *drhd;
1493 @@ -622,7 +628,7 @@ static void domain_update_iommu_coherency(struct dmar_domain *domain)
1494
1495 for_each_domain_iommu(i, domain) {
1496 found = true;
1497 - if (!ecap_coherent(g_iommus[i]->ecap)) {
1498 + if (!iommu_paging_structure_coherency(g_iommus[i])) {
1499 domain->iommu_coherency = 0;
1500 break;
1501 }
1502 @@ -633,7 +639,7 @@ static void domain_update_iommu_coherency(struct dmar_domain *domain)
1503 /* No hardware attached; use lowest common denominator */
1504 rcu_read_lock();
1505 for_each_active_iommu(iommu, drhd) {
1506 - if (!ecap_coherent(iommu->ecap)) {
1507 + if (!iommu_paging_structure_coherency(iommu)) {
1508 domain->iommu_coherency = 0;
1509 break;
1510 }
1511 @@ -2090,7 +2096,8 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
1512
1513 context_set_fault_enable(context);
1514 context_set_present(context);
1515 - domain_flush_cache(domain, context, sizeof(*context));
1516 + if (!ecap_coherent(iommu->ecap))
1517 + clflush_cache_range(context, sizeof(*context));
1518
1519 /*
1520 * It's a non-present to present mapping. If hardware doesn't cache
1521 diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c
1522 index 0d6ca723257f..67eb4e972cc3 100644
1523 --- a/drivers/md/dm-writecache.c
1524 +++ b/drivers/md/dm-writecache.c
1525 @@ -279,6 +279,8 @@ static int persistent_memory_claim(struct dm_writecache *wc)
1526 while (daa-- && i < p) {
1527 pages[i++] = pfn_t_to_page(pfn);
1528 pfn.val++;
1529 + if (!(i & 15))
1530 + cond_resched();
1531 }
1532 } while (i < p);
1533 wc->memory_map = vmap(pages, p, VM_MAP, PAGE_KERNEL);
1534 @@ -805,6 +807,8 @@ static void writecache_discard(struct dm_writecache *wc, sector_t start, sector_
1535 writecache_wait_for_ios(wc, WRITE);
1536 discarded_something = true;
1537 }
1538 + if (!writecache_entry_is_committed(wc, e))
1539 + wc->uncommitted_blocks--;
1540 writecache_free_entry(wc, e);
1541 }
1542
1543 diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c
1544 index d4bbcdfd691a..aa693c8e285a 100644
1545 --- a/drivers/net/ethernet/atheros/alx/main.c
1546 +++ b/drivers/net/ethernet/atheros/alx/main.c
1547 @@ -1249,8 +1249,12 @@ out_disable_adv_intr:
1548
1549 static void __alx_stop(struct alx_priv *alx)
1550 {
1551 - alx_halt(alx);
1552 alx_free_irq(alx);
1553 +
1554 + cancel_work_sync(&alx->link_check_wk);
1555 + cancel_work_sync(&alx->reset_wk);
1556 +
1557 + alx_halt(alx);
1558 alx_free_rings(alx);
1559 alx_free_napis(alx);
1560 }
1561 @@ -1858,9 +1862,6 @@ static void alx_remove(struct pci_dev *pdev)
1562 struct alx_priv *alx = pci_get_drvdata(pdev);
1563 struct alx_hw *hw = &alx->hw;
1564
1565 - cancel_work_sync(&alx->link_check_wk);
1566 - cancel_work_sync(&alx->reset_wk);
1567 -
1568 /* restore permanent mac address */
1569 alx_set_macaddr(hw, hw->perm_addr);
1570
1571 diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1572 index 3d3b1005d076..03f82786c0b9 100644
1573 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1574 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1575 @@ -1591,11 +1591,6 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
1576 goto out;
1577 }
1578
1579 - if (skb_padto(skb, ETH_ZLEN)) {
1580 - ret = NETDEV_TX_OK;
1581 - goto out;
1582 - }
1583 -
1584 /* Retain how many bytes will be sent on the wire, without TSB inserted
1585 * by transmit checksum offload
1586 */
1587 @@ -1644,6 +1639,9 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
1588 len_stat = (size << DMA_BUFLENGTH_SHIFT) |
1589 (priv->hw_params->qtag_mask << DMA_TX_QTAG_SHIFT);
1590
1591 + /* Note: if we ever change from DMA_TX_APPEND_CRC below we
1592 + * will need to restore software padding of "runt" packets
1593 + */
1594 if (!i) {
1595 len_stat |= DMA_TX_APPEND_CRC | DMA_SOP;
1596 if (skb->ip_summed == CHECKSUM_PARTIAL)
1597 diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
1598 index ca3aa1250dd1..e12ba81288e6 100644
1599 --- a/drivers/net/ethernet/broadcom/tg3.c
1600 +++ b/drivers/net/ethernet/broadcom/tg3.c
1601 @@ -18176,8 +18176,8 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
1602
1603 rtnl_lock();
1604
1605 - /* We probably don't have netdev yet */
1606 - if (!netdev || !netif_running(netdev))
1607 + /* Could be second call or maybe we don't have netdev yet */
1608 + if (!netdev || tp->pcierr_recovery || !netif_running(netdev))
1609 goto done;
1610
1611 /* We needn't recover from permanent error */
1612 diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
1613 index e6fe2870137b..a440c1cf0b61 100644
1614 --- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c
1615 +++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
1616 @@ -506,41 +506,20 @@ u64 cxgb4_select_ntuple(struct net_device *dev,
1617 }
1618 EXPORT_SYMBOL(cxgb4_select_ntuple);
1619
1620 -/*
1621 - * Called when address resolution fails for an L2T entry to handle packets
1622 - * on the arpq head. If a packet specifies a failure handler it is invoked,
1623 - * otherwise the packet is sent to the device.
1624 - */
1625 -static void handle_failed_resolution(struct adapter *adap, struct l2t_entry *e)
1626 -{
1627 - struct sk_buff *skb;
1628 -
1629 - while ((skb = __skb_dequeue(&e->arpq)) != NULL) {
1630 - const struct l2t_skb_cb *cb = L2T_SKB_CB(skb);
1631 -
1632 - spin_unlock(&e->lock);
1633 - if (cb->arp_err_handler)
1634 - cb->arp_err_handler(cb->handle, skb);
1635 - else
1636 - t4_ofld_send(adap, skb);
1637 - spin_lock(&e->lock);
1638 - }
1639 -}
1640 -
1641 /*
1642 * Called when the host's neighbor layer makes a change to some entry that is
1643 * loaded into the HW L2 table.
1644 */
1645 void t4_l2t_update(struct adapter *adap, struct neighbour *neigh)
1646 {
1647 - struct l2t_entry *e;
1648 - struct sk_buff_head *arpq = NULL;
1649 - struct l2t_data *d = adap->l2t;
1650 unsigned int addr_len = neigh->tbl->key_len;
1651 u32 *addr = (u32 *) neigh->primary_key;
1652 - int ifidx = neigh->dev->ifindex;
1653 - int hash = addr_hash(d, addr, addr_len, ifidx);
1654 + int hash, ifidx = neigh->dev->ifindex;
1655 + struct sk_buff_head *arpq = NULL;
1656 + struct l2t_data *d = adap->l2t;
1657 + struct l2t_entry *e;
1658
1659 + hash = addr_hash(d, addr, addr_len, ifidx);
1660 read_lock_bh(&d->lock);
1661 for (e = d->l2tab[hash].first; e; e = e->next)
1662 if (!addreq(e, addr) && e->ifindex == ifidx) {
1663 @@ -573,8 +552,25 @@ void t4_l2t_update(struct adapter *adap, struct neighbour *neigh)
1664 write_l2e(adap, e, 0);
1665 }
1666
1667 - if (arpq)
1668 - handle_failed_resolution(adap, e);
1669 + if (arpq) {
1670 + struct sk_buff *skb;
1671 +
1672 + /* Called when address resolution fails for an L2T
1673 + * entry to handle packets on the arpq head. If a
1674 + * packet specifies a failure handler it is invoked,
1675 + * otherwise the packet is sent to the device.
1676 + */
1677 + while ((skb = __skb_dequeue(&e->arpq)) != NULL) {
1678 + const struct l2t_skb_cb *cb = L2T_SKB_CB(skb);
1679 +
1680 + spin_unlock(&e->lock);
1681 + if (cb->arp_err_handler)
1682 + cb->arp_err_handler(cb->handle, skb);
1683 + else
1684 + t4_ofld_send(adap, skb);
1685 + spin_lock(&e->lock);
1686 + }
1687 + }
1688 spin_unlock_bh(&e->lock);
1689 }
1690
1691 diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
1692 index b6ff89307409..4ef4d41b0d8d 100644
1693 --- a/drivers/net/ethernet/freescale/enetc/enetc.c
1694 +++ b/drivers/net/ethernet/freescale/enetc/enetc.c
1695 @@ -254,7 +254,7 @@ static irqreturn_t enetc_msix(int irq, void *data)
1696 /* disable interrupts */
1697 enetc_wr_reg(v->rbier, 0);
1698
1699 - for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
1700 + for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
1701 enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i), 0);
1702
1703 napi_schedule_irqoff(&v->napi);
1704 @@ -290,7 +290,7 @@ static int enetc_poll(struct napi_struct *napi, int budget)
1705 /* enable interrupts */
1706 enetc_wr_reg(v->rbier, ENETC_RBIER_RXTIE);
1707
1708 - for_each_set_bit(i, &v->tx_rings_map, v->count_tx_rings)
1709 + for_each_set_bit(i, &v->tx_rings_map, ENETC_MAX_NUM_TXQS)
1710 enetc_wr_reg(v->tbier_base + ENETC_BDR_OFF(i),
1711 ENETC_TBIER_TXTIE);
1712
1713 diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
1714 index c5be4ebd8437..aa32a5b04112 100644
1715 --- a/drivers/net/ethernet/ibm/ibmveth.c
1716 +++ b/drivers/net/ethernet/ibm/ibmveth.c
1717 @@ -1682,7 +1682,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
1718 }
1719
1720 netdev->min_mtu = IBMVETH_MIN_MTU;
1721 - netdev->max_mtu = ETH_MAX_MTU;
1722 + netdev->max_mtu = ETH_MAX_MTU - IBMVETH_BUFF_OH;
1723
1724 memcpy(netdev->dev_addr, mac_addr_p, ETH_ALEN);
1725
1726 diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
1727 index 5a42ddeecfe5..4f503b9a674c 100644
1728 --- a/drivers/net/ethernet/ibm/ibmvnic.c
1729 +++ b/drivers/net/ethernet/ibm/ibmvnic.c
1730 @@ -779,12 +779,13 @@ static int ibmvnic_login(struct net_device *netdev)
1731 struct ibmvnic_adapter *adapter = netdev_priv(netdev);
1732 unsigned long timeout = msecs_to_jiffies(30000);
1733 int retry_count = 0;
1734 + int retries = 10;
1735 bool retry;
1736 int rc;
1737
1738 do {
1739 retry = false;
1740 - if (retry_count > IBMVNIC_MAX_QUEUES) {
1741 + if (retry_count > retries) {
1742 netdev_warn(netdev, "Login attempts exceeded\n");
1743 return -1;
1744 }
1745 @@ -799,11 +800,23 @@ static int ibmvnic_login(struct net_device *netdev)
1746
1747 if (!wait_for_completion_timeout(&adapter->init_done,
1748 timeout)) {
1749 - netdev_warn(netdev, "Login timed out\n");
1750 - return -1;
1751 + netdev_warn(netdev, "Login timed out, retrying...\n");
1752 + retry = true;
1753 + adapter->init_done_rc = 0;
1754 + retry_count++;
1755 + continue;
1756 }
1757
1758 - if (adapter->init_done_rc == PARTIALSUCCESS) {
1759 + if (adapter->init_done_rc == ABORTED) {
1760 + netdev_warn(netdev, "Login aborted, retrying...\n");
1761 + retry = true;
1762 + adapter->init_done_rc = 0;
1763 + retry_count++;
1764 + /* FW or device may be busy, so
1765 + * wait a bit before retrying login
1766 + */
1767 + msleep(500);
1768 + } else if (adapter->init_done_rc == PARTIALSUCCESS) {
1769 retry_count++;
1770 release_sub_crqs(adapter, 1);
1771
1772 diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
1773 index cf5d447af7db..0f136f1af5d1 100644
1774 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
1775 +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
1776 @@ -1541,7 +1541,7 @@ static void mvpp2_read_stats(struct mvpp2_port *port)
1777 for (q = 0; q < port->ntxqs; q++)
1778 for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_txq_regs); i++)
1779 *pstats++ += mvpp2_read_index(port->priv,
1780 - MVPP22_CTRS_TX_CTR(port->id, i),
1781 + MVPP22_CTRS_TX_CTR(port->id, q),
1782 mvpp2_ethtool_txq_regs[i].offset);
1783
1784 /* Rxqs are numbered from 0 from the user standpoint, but not from the
1785 @@ -1550,7 +1550,7 @@ static void mvpp2_read_stats(struct mvpp2_port *port)
1786 for (q = 0; q < port->nrxqs; q++)
1787 for (i = 0; i < ARRAY_SIZE(mvpp2_ethtool_rxq_regs); i++)
1788 *pstats++ += mvpp2_read_index(port->priv,
1789 - port->first_rxq + i,
1790 + port->first_rxq + q,
1791 mvpp2_ethtool_rxq_regs[i].offset);
1792 }
1793
1794 diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.c b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
1795 index 8e1bdf58b9e7..1d6dfba0c034 100644
1796 --- a/drivers/net/ethernet/qlogic/qed/qed_cxt.c
1797 +++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
1798 @@ -396,7 +396,7 @@ static void qed_cxt_qm_iids(struct qed_hwfn *p_hwfn,
1799 vf_tids += segs[NUM_TASK_PF_SEGMENTS].count;
1800 }
1801
1802 - iids->vf_cids += vf_cids * p_mngr->vf_count;
1803 + iids->vf_cids = vf_cids;
1804 iids->tids += vf_tids * p_mngr->vf_count;
1805
1806 DP_VERBOSE(p_hwfn, QED_MSG_ILT,
1807 diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
1808 index 0bf91df80d47..ecd14474a603 100644
1809 --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
1810 +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
1811 @@ -1368,6 +1368,8 @@ static void qed_dbg_user_data_free(struct qed_hwfn *p_hwfn)
1812
1813 void qed_resc_free(struct qed_dev *cdev)
1814 {
1815 + struct qed_rdma_info *rdma_info;
1816 + struct qed_hwfn *p_hwfn;
1817 int i;
1818
1819 if (IS_VF(cdev)) {
1820 @@ -1385,7 +1387,8 @@ void qed_resc_free(struct qed_dev *cdev)
1821 qed_llh_free(cdev);
1822
1823 for_each_hwfn(cdev, i) {
1824 - struct qed_hwfn *p_hwfn = &cdev->hwfns[i];
1825 + p_hwfn = cdev->hwfns + i;
1826 + rdma_info = p_hwfn->p_rdma_info;
1827
1828 qed_cxt_mngr_free(p_hwfn);
1829 qed_qm_info_free(p_hwfn);
1830 @@ -1404,8 +1407,10 @@ void qed_resc_free(struct qed_dev *cdev)
1831 qed_ooo_free(p_hwfn);
1832 }
1833
1834 - if (QED_IS_RDMA_PERSONALITY(p_hwfn))
1835 + if (QED_IS_RDMA_PERSONALITY(p_hwfn) && rdma_info) {
1836 + qed_spq_unregister_async_cb(p_hwfn, rdma_info->proto);
1837 qed_rdma_info_free(p_hwfn);
1838 + }
1839
1840 qed_iov_free(p_hwfn);
1841 qed_l2_free(p_hwfn);
1842 diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
1843 index 65ec16a31658..2b3102a2fe5c 100644
1844 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
1845 +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
1846 @@ -2832,8 +2832,6 @@ int qed_iwarp_stop(struct qed_hwfn *p_hwfn)
1847 if (rc)
1848 return rc;
1849
1850 - qed_spq_unregister_async_cb(p_hwfn, PROTOCOLID_IWARP);
1851 -
1852 return qed_iwarp_ll2_stop(p_hwfn);
1853 }
1854
1855 diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c
1856 index e49fada85410..83817bb50e9f 100644
1857 --- a/drivers/net/ethernet/qlogic/qed/qed_roce.c
1858 +++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c
1859 @@ -113,7 +113,6 @@ void qed_roce_stop(struct qed_hwfn *p_hwfn)
1860 break;
1861 }
1862 }
1863 - qed_spq_unregister_async_cb(p_hwfn, PROTOCOLID_ROCE);
1864 }
1865
1866 static void qed_rdma_copy_gids(struct qed_rdma_qp *qp, __le32 *src_gid,
1867 diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c
1868 index 856051f50eb7..adc2c8f3d48e 100644
1869 --- a/drivers/net/ethernet/qlogic/qed/qed_vf.c
1870 +++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c
1871 @@ -81,12 +81,17 @@ static void qed_vf_pf_req_end(struct qed_hwfn *p_hwfn, int req_status)
1872 mutex_unlock(&(p_hwfn->vf_iov_info->mutex));
1873 }
1874
1875 +#define QED_VF_CHANNEL_USLEEP_ITERATIONS 90
1876 +#define QED_VF_CHANNEL_USLEEP_DELAY 100
1877 +#define QED_VF_CHANNEL_MSLEEP_ITERATIONS 10
1878 +#define QED_VF_CHANNEL_MSLEEP_DELAY 25
1879 +
1880 static int qed_send_msg2pf(struct qed_hwfn *p_hwfn, u8 *done, u32 resp_size)
1881 {
1882 union vfpf_tlvs *p_req = p_hwfn->vf_iov_info->vf2pf_request;
1883 struct ustorm_trigger_vf_zone trigger;
1884 struct ustorm_vf_zone *zone_data;
1885 - int rc = 0, time = 100;
1886 + int iter, rc = 0;
1887
1888 zone_data = (struct ustorm_vf_zone *)PXP_VF_BAR0_START_USDM_ZONE_B;
1889
1890 @@ -126,11 +131,19 @@ static int qed_send_msg2pf(struct qed_hwfn *p_hwfn, u8 *done, u32 resp_size)
1891 REG_WR(p_hwfn, (uintptr_t)&zone_data->trigger, *((u32 *)&trigger));
1892
1893 /* When PF would be done with the response, it would write back to the
1894 - * `done' address. Poll until then.
1895 + * `done' address from a coherent DMA zone. Poll until then.
1896 */
1897 - while ((!*done) && time) {
1898 - msleep(25);
1899 - time--;
1900 +
1901 + iter = QED_VF_CHANNEL_USLEEP_ITERATIONS;
1902 + while (!*done && iter--) {
1903 + udelay(QED_VF_CHANNEL_USLEEP_DELAY);
1904 + dma_rmb();
1905 + }
1906 +
1907 + iter = QED_VF_CHANNEL_MSLEEP_ITERATIONS;
1908 + while (!*done && iter--) {
1909 + msleep(QED_VF_CHANNEL_MSLEEP_DELAY);
1910 + dma_rmb();
1911 }
1912
1913 if (!*done) {
1914 diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
1915 index 1da6b5bda80a..2c3d654c8454 100644
1916 --- a/drivers/net/ethernet/qlogic/qede/qede_main.c
1917 +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
1918 @@ -1158,7 +1158,7 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level,
1919
1920 /* PTP not supported on VFs */
1921 if (!is_vf)
1922 - qede_ptp_enable(edev, (mode == QEDE_PROBE_NORMAL));
1923 + qede_ptp_enable(edev);
1924
1925 edev->ops->register_ops(cdev, &qede_ll_ops, edev);
1926
1927 @@ -1247,6 +1247,7 @@ static void __qede_remove(struct pci_dev *pdev, enum qede_remove_mode mode)
1928 if (system_state == SYSTEM_POWER_OFF)
1929 return;
1930 qed_ops->common->remove(cdev);
1931 + edev->cdev = NULL;
1932
1933 /* Since this can happen out-of-sync with other flows,
1934 * don't release the netdevice until after slowpath stop
1935 diff --git a/drivers/net/ethernet/qlogic/qede/qede_ptp.c b/drivers/net/ethernet/qlogic/qede/qede_ptp.c
1936 index f815435cf106..2d3b2fa92df5 100644
1937 --- a/drivers/net/ethernet/qlogic/qede/qede_ptp.c
1938 +++ b/drivers/net/ethernet/qlogic/qede/qede_ptp.c
1939 @@ -411,6 +411,7 @@ void qede_ptp_disable(struct qede_dev *edev)
1940 if (ptp->tx_skb) {
1941 dev_kfree_skb_any(ptp->tx_skb);
1942 ptp->tx_skb = NULL;
1943 + clear_bit_unlock(QEDE_FLAGS_PTP_TX_IN_PRORGESS, &edev->flags);
1944 }
1945
1946 /* Disable PTP in HW */
1947 @@ -422,7 +423,7 @@ void qede_ptp_disable(struct qede_dev *edev)
1948 edev->ptp = NULL;
1949 }
1950
1951 -static int qede_ptp_init(struct qede_dev *edev, bool init_tc)
1952 +static int qede_ptp_init(struct qede_dev *edev)
1953 {
1954 struct qede_ptp *ptp;
1955 int rc;
1956 @@ -443,25 +444,19 @@ static int qede_ptp_init(struct qede_dev *edev, bool init_tc)
1957 /* Init work queue for Tx timestamping */
1958 INIT_WORK(&ptp->work, qede_ptp_task);
1959
1960 - /* Init cyclecounter and timecounter. This is done only in the first
1961 - * load. If done in every load, PTP application will fail when doing
1962 - * unload / load (e.g. MTU change) while it is running.
1963 - */
1964 - if (init_tc) {
1965 - memset(&ptp->cc, 0, sizeof(ptp->cc));
1966 - ptp->cc.read = qede_ptp_read_cc;
1967 - ptp->cc.mask = CYCLECOUNTER_MASK(64);
1968 - ptp->cc.shift = 0;
1969 - ptp->cc.mult = 1;
1970 -
1971 - timecounter_init(&ptp->tc, &ptp->cc,
1972 - ktime_to_ns(ktime_get_real()));
1973 - }
1974 + /* Init cyclecounter and timecounter */
1975 + memset(&ptp->cc, 0, sizeof(ptp->cc));
1976 + ptp->cc.read = qede_ptp_read_cc;
1977 + ptp->cc.mask = CYCLECOUNTER_MASK(64);
1978 + ptp->cc.shift = 0;
1979 + ptp->cc.mult = 1;
1980
1981 - return rc;
1982 + timecounter_init(&ptp->tc, &ptp->cc, ktime_to_ns(ktime_get_real()));
1983 +
1984 + return 0;
1985 }
1986
1987 -int qede_ptp_enable(struct qede_dev *edev, bool init_tc)
1988 +int qede_ptp_enable(struct qede_dev *edev)
1989 {
1990 struct qede_ptp *ptp;
1991 int rc;
1992 @@ -482,7 +477,7 @@ int qede_ptp_enable(struct qede_dev *edev, bool init_tc)
1993
1994 edev->ptp = ptp;
1995
1996 - rc = qede_ptp_init(edev, init_tc);
1997 + rc = qede_ptp_init(edev);
1998 if (rc)
1999 goto err1;
2000
2001 diff --git a/drivers/net/ethernet/qlogic/qede/qede_ptp.h b/drivers/net/ethernet/qlogic/qede/qede_ptp.h
2002 index 691a14c4b2c5..89c7f3cf3ee2 100644
2003 --- a/drivers/net/ethernet/qlogic/qede/qede_ptp.h
2004 +++ b/drivers/net/ethernet/qlogic/qede/qede_ptp.h
2005 @@ -41,7 +41,7 @@ void qede_ptp_rx_ts(struct qede_dev *edev, struct sk_buff *skb);
2006 void qede_ptp_tx_ts(struct qede_dev *edev, struct sk_buff *skb);
2007 int qede_ptp_hw_ts(struct qede_dev *edev, struct ifreq *req);
2008 void qede_ptp_disable(struct qede_dev *edev);
2009 -int qede_ptp_enable(struct qede_dev *edev, bool init_tc);
2010 +int qede_ptp_enable(struct qede_dev *edev);
2011 int qede_ptp_get_ts_info(struct qede_dev *edev, struct ethtool_ts_info *ts);
2012
2013 static inline void qede_ptp_record_rx_ts(struct qede_dev *edev,
2014 diff --git a/drivers/net/ethernet/qlogic/qede/qede_rdma.c b/drivers/net/ethernet/qlogic/qede/qede_rdma.c
2015 index 2d873ae8a234..668ccc9d49f8 100644
2016 --- a/drivers/net/ethernet/qlogic/qede/qede_rdma.c
2017 +++ b/drivers/net/ethernet/qlogic/qede/qede_rdma.c
2018 @@ -105,6 +105,7 @@ static void qede_rdma_destroy_wq(struct qede_dev *edev)
2019
2020 qede_rdma_cleanup_event(edev);
2021 destroy_workqueue(edev->rdma_info.rdma_wq);
2022 + edev->rdma_info.rdma_wq = NULL;
2023 }
2024
2025 int qede_rdma_dev_add(struct qede_dev *edev, bool recovery)
2026 @@ -325,7 +326,7 @@ static void qede_rdma_add_event(struct qede_dev *edev,
2027 if (edev->rdma_info.exp_recovery)
2028 return;
2029
2030 - if (!edev->rdma_info.qedr_dev)
2031 + if (!edev->rdma_info.qedr_dev || !edev->rdma_info.rdma_wq)
2032 return;
2033
2034 /* We don't want the cleanup flow to start while we're allocating and
2035 diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c
2036 index 786b158bd305..5abb3f9684ff 100644
2037 --- a/drivers/net/ethernet/rocker/rocker_main.c
2038 +++ b/drivers/net/ethernet/rocker/rocker_main.c
2039 @@ -647,10 +647,10 @@ static int rocker_dma_rings_init(struct rocker *rocker)
2040 err_dma_event_ring_bufs_alloc:
2041 rocker_dma_ring_destroy(rocker, &rocker->event_ring);
2042 err_dma_event_ring_create:
2043 + rocker_dma_cmd_ring_waits_free(rocker);
2044 +err_dma_cmd_ring_waits_alloc:
2045 rocker_dma_ring_bufs_free(rocker, &rocker->cmd_ring,
2046 PCI_DMA_BIDIRECTIONAL);
2047 -err_dma_cmd_ring_waits_alloc:
2048 - rocker_dma_cmd_ring_waits_free(rocker);
2049 err_dma_cmd_ring_bufs_alloc:
2050 rocker_dma_ring_destroy(rocker, &rocker->cmd_ring);
2051 return err;
2052 diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
2053 index cac75c7d1d01..19d9d78a6df2 100644
2054 --- a/drivers/net/geneve.c
2055 +++ b/drivers/net/geneve.c
2056 @@ -1649,6 +1649,7 @@ static int geneve_changelink(struct net_device *dev, struct nlattr *tb[],
2057 geneve->collect_md = metadata;
2058 geneve->use_udp6_rx_checksums = use_udp6_rx_checksums;
2059 geneve->ttl_inherit = ttl_inherit;
2060 + geneve->df = df;
2061 geneve_unquiesce(geneve, gs4, gs6);
2062
2063 return 0;
2064 diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
2065 index 0907c3d8d94a..dba52a5c378a 100644
2066 --- a/drivers/net/phy/phy_device.c
2067 +++ b/drivers/net/phy/phy_device.c
2068 @@ -797,8 +797,10 @@ static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
2069
2070 /* Grab the bits from PHYIR2, and put them in the lower half */
2071 phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
2072 - if (phy_reg < 0)
2073 - return -EIO;
2074 + if (phy_reg < 0) {
2075 + /* returning -ENODEV doesn't stop bus scanning */
2076 + return (phy_reg == -EIO || phy_reg == -ENODEV) ? -ENODEV : -EIO;
2077 + }
2078
2079 *phy_id |= phy_reg;
2080
2081 diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
2082 index daa54486ab09..df2f7cc6dc03 100644
2083 --- a/drivers/net/usb/ax88179_178a.c
2084 +++ b/drivers/net/usb/ax88179_178a.c
2085 @@ -1387,10 +1387,10 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
2086 }
2087
2088 if (pkt_cnt == 0) {
2089 - /* Skip IP alignment psudo header */
2090 - skb_pull(skb, 2);
2091 skb->len = pkt_len;
2092 - skb_set_tail_pointer(skb, pkt_len);
2093 + /* Skip IP alignment pseudo header */
2094 + skb_pull(skb, 2);
2095 + skb_set_tail_pointer(skb, skb->len);
2096 skb->truesize = pkt_len + sizeof(struct sk_buff);
2097 ax88179_rx_checksum(skb, pkt_hdr);
2098 return 1;
2099 @@ -1399,8 +1399,9 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
2100 ax_skb = skb_clone(skb, GFP_ATOMIC);
2101 if (ax_skb) {
2102 ax_skb->len = pkt_len;
2103 - ax_skb->data = skb->data + 2;
2104 - skb_set_tail_pointer(ax_skb, pkt_len);
2105 + /* Skip IP alignment pseudo header */
2106 + skb_pull(ax_skb, 2);
2107 + skb_set_tail_pointer(ax_skb, ax_skb->len);
2108 ax_skb->truesize = pkt_len + sizeof(struct sk_buff);
2109 ax88179_rx_checksum(ax_skb, pkt_hdr);
2110 usbnet_skb_return(dev, ax_skb);
2111 diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
2112 index 56caddeabb5e..772eb05e57af 100644
2113 --- a/drivers/nvme/host/multipath.c
2114 +++ b/drivers/nvme/host/multipath.c
2115 @@ -413,11 +413,10 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)
2116 {
2117 struct nvme_ns_head *head = ns->head;
2118
2119 - lockdep_assert_held(&ns->head->lock);
2120 -
2121 if (!head->disk)
2122 return;
2123
2124 + mutex_lock(&head->lock);
2125 if (!(head->disk->flags & GENHD_FL_UP))
2126 device_add_disk(&head->subsys->dev, head->disk,
2127 nvme_ns_id_attr_groups);
2128 @@ -430,9 +429,10 @@ static void nvme_mpath_set_live(struct nvme_ns *ns)
2129 __nvme_find_path(head, node);
2130 srcu_read_unlock(&head->srcu, srcu_idx);
2131 }
2132 + mutex_unlock(&head->lock);
2133
2134 - synchronize_srcu(&ns->head->srcu);
2135 - kblockd_schedule_work(&ns->head->requeue_work);
2136 + synchronize_srcu(&head->srcu);
2137 + kblockd_schedule_work(&head->requeue_work);
2138 }
2139
2140 static int nvme_parse_ana_log(struct nvme_ctrl *ctrl, void *data,
2141 @@ -483,14 +483,12 @@ static inline bool nvme_state_is_live(enum nvme_ana_state state)
2142 static void nvme_update_ns_ana_state(struct nvme_ana_group_desc *desc,
2143 struct nvme_ns *ns)
2144 {
2145 - mutex_lock(&ns->head->lock);
2146 ns->ana_grpid = le32_to_cpu(desc->grpid);
2147 ns->ana_state = desc->state;
2148 clear_bit(NVME_NS_ANA_PENDING, &ns->flags);
2149
2150 if (nvme_state_is_live(ns->ana_state))
2151 nvme_mpath_set_live(ns);
2152 - mutex_unlock(&ns->head->lock);
2153 }
2154
2155 static int nvme_update_ana_state(struct nvme_ctrl *ctrl,
2156 @@ -661,10 +659,8 @@ void nvme_mpath_add_disk(struct nvme_ns *ns, struct nvme_id_ns *id)
2157 nvme_parse_ana_log(ns->ctrl, ns, nvme_set_ns_ana_state);
2158 mutex_unlock(&ns->ctrl->ana_lock);
2159 } else {
2160 - mutex_lock(&ns->head->lock);
2161 ns->ana_state = NVME_ANA_OPTIMIZED;
2162 nvme_mpath_set_live(ns);
2163 - mutex_unlock(&ns->head->lock);
2164 }
2165 }
2166
2167 diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
2168 index f1fece5b9c06..3769ad08eadf 100644
2169 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
2170 +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
2171 @@ -170,6 +170,7 @@ struct pmic_gpio_state {
2172 struct regmap *map;
2173 struct pinctrl_dev *ctrl;
2174 struct gpio_chip chip;
2175 + struct irq_chip irq;
2176 };
2177
2178 static const struct pinconf_generic_params pmic_gpio_bindings[] = {
2179 @@ -917,16 +918,6 @@ static int pmic_gpio_populate(struct pmic_gpio_state *state,
2180 return 0;
2181 }
2182
2183 -static struct irq_chip pmic_gpio_irq_chip = {
2184 - .name = "spmi-gpio",
2185 - .irq_ack = irq_chip_ack_parent,
2186 - .irq_mask = irq_chip_mask_parent,
2187 - .irq_unmask = irq_chip_unmask_parent,
2188 - .irq_set_type = irq_chip_set_type_parent,
2189 - .irq_set_wake = irq_chip_set_wake_parent,
2190 - .flags = IRQCHIP_MASK_ON_SUSPEND,
2191 -};
2192 -
2193 static int pmic_gpio_domain_translate(struct irq_domain *domain,
2194 struct irq_fwspec *fwspec,
2195 unsigned long *hwirq,
2196 @@ -1053,8 +1044,16 @@ static int pmic_gpio_probe(struct platform_device *pdev)
2197 if (!parent_domain)
2198 return -ENXIO;
2199
2200 + state->irq.name = "spmi-gpio",
2201 + state->irq.irq_ack = irq_chip_ack_parent,
2202 + state->irq.irq_mask = irq_chip_mask_parent,
2203 + state->irq.irq_unmask = irq_chip_unmask_parent,
2204 + state->irq.irq_set_type = irq_chip_set_type_parent,
2205 + state->irq.irq_set_wake = irq_chip_set_wake_parent,
2206 + state->irq.flags = IRQCHIP_MASK_ON_SUSPEND,
2207 +
2208 girq = &state->chip.irq;
2209 - girq->chip = &pmic_gpio_irq_chip;
2210 + girq->chip = &state->irq;
2211 girq->default_type = IRQ_TYPE_NONE;
2212 girq->handler = handle_level_irq;
2213 girq->fwnode = of_node_to_fwnode(state->dev->of_node);
2214 diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.c b/drivers/pinctrl/tegra/pinctrl-tegra.c
2215 index e9a7cbb9aa33..01bcef2c01bc 100644
2216 --- a/drivers/pinctrl/tegra/pinctrl-tegra.c
2217 +++ b/drivers/pinctrl/tegra/pinctrl-tegra.c
2218 @@ -685,8 +685,8 @@ static int tegra_pinctrl_resume(struct device *dev)
2219 }
2220
2221 const struct dev_pm_ops tegra_pinctrl_pm = {
2222 - .suspend = &tegra_pinctrl_suspend,
2223 - .resume = &tegra_pinctrl_resume
2224 + .suspend_noirq = &tegra_pinctrl_suspend,
2225 + .resume_noirq = &tegra_pinctrl_resume
2226 };
2227
2228 static bool gpio_node_has_range(const char *compatible)
2229 diff --git a/drivers/regulator/pfuze100-regulator.c b/drivers/regulator/pfuze100-regulator.c
2230 index 689537927f6f..4c8e8b472287 100644
2231 --- a/drivers/regulator/pfuze100-regulator.c
2232 +++ b/drivers/regulator/pfuze100-regulator.c
2233 @@ -209,6 +209,19 @@ static const struct regulator_ops pfuze100_swb_regulator_ops = {
2234
2235 };
2236
2237 +static const struct regulator_ops pfuze3000_sw_regulator_ops = {
2238 + .enable = regulator_enable_regmap,
2239 + .disable = regulator_disable_regmap,
2240 + .is_enabled = regulator_is_enabled_regmap,
2241 + .list_voltage = regulator_list_voltage_table,
2242 + .map_voltage = regulator_map_voltage_ascend,
2243 + .set_voltage_sel = regulator_set_voltage_sel_regmap,
2244 + .get_voltage_sel = regulator_get_voltage_sel_regmap,
2245 + .set_voltage_time_sel = regulator_set_voltage_time_sel,
2246 + .set_ramp_delay = pfuze100_set_ramp_delay,
2247 +
2248 +};
2249 +
2250 #define PFUZE100_FIXED_REG(_chip, _name, base, voltage) \
2251 [_chip ## _ ## _name] = { \
2252 .desc = { \
2253 @@ -318,23 +331,28 @@ static const struct regulator_ops pfuze100_swb_regulator_ops = {
2254 .stby_mask = 0x20, \
2255 }
2256
2257 -
2258 -#define PFUZE3000_SW2_REG(_chip, _name, base, min, max, step) { \
2259 - .desc = { \
2260 - .name = #_name,\
2261 - .n_voltages = ((max) - (min)) / (step) + 1, \
2262 - .ops = &pfuze100_sw_regulator_ops, \
2263 - .type = REGULATOR_VOLTAGE, \
2264 - .id = _chip ## _ ## _name, \
2265 - .owner = THIS_MODULE, \
2266 - .min_uV = (min), \
2267 - .uV_step = (step), \
2268 - .vsel_reg = (base) + PFUZE100_VOL_OFFSET, \
2269 - .vsel_mask = 0x7, \
2270 - }, \
2271 - .stby_reg = (base) + PFUZE100_STANDBY_OFFSET, \
2272 - .stby_mask = 0x7, \
2273 -}
2274 +/* No linar case for the some switches of PFUZE3000 */
2275 +#define PFUZE3000_SW_REG(_chip, _name, base, mask, voltages) \
2276 + [_chip ## _ ## _name] = { \
2277 + .desc = { \
2278 + .name = #_name, \
2279 + .n_voltages = ARRAY_SIZE(voltages), \
2280 + .ops = &pfuze3000_sw_regulator_ops, \
2281 + .type = REGULATOR_VOLTAGE, \
2282 + .id = _chip ## _ ## _name, \
2283 + .owner = THIS_MODULE, \
2284 + .volt_table = voltages, \
2285 + .vsel_reg = (base) + PFUZE100_VOL_OFFSET, \
2286 + .vsel_mask = (mask), \
2287 + .enable_reg = (base) + PFUZE100_MODE_OFFSET, \
2288 + .enable_mask = 0xf, \
2289 + .enable_val = 0x8, \
2290 + .enable_time = 500, \
2291 + }, \
2292 + .stby_reg = (base) + PFUZE100_STANDBY_OFFSET, \
2293 + .stby_mask = (mask), \
2294 + .sw_reg = true, \
2295 + }
2296
2297 #define PFUZE3000_SW3_REG(_chip, _name, base, min, max, step) { \
2298 .desc = { \
2299 @@ -391,9 +409,9 @@ static struct pfuze_regulator pfuze200_regulators[] = {
2300 };
2301
2302 static struct pfuze_regulator pfuze3000_regulators[] = {
2303 - PFUZE100_SWB_REG(PFUZE3000, SW1A, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
2304 + PFUZE3000_SW_REG(PFUZE3000, SW1A, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
2305 PFUZE100_SW_REG(PFUZE3000, SW1B, PFUZE100_SW1CVOL, 700000, 1475000, 25000),
2306 - PFUZE100_SWB_REG(PFUZE3000, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
2307 + PFUZE3000_SW_REG(PFUZE3000, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
2308 PFUZE3000_SW3_REG(PFUZE3000, SW3, PFUZE100_SW3AVOL, 900000, 1650000, 50000),
2309 PFUZE100_SWB_REG(PFUZE3000, SWBST, PFUZE100_SWBSTCON1, 0x3, pfuze100_swbst),
2310 PFUZE100_SWB_REG(PFUZE3000, VSNVS, PFUZE100_VSNVSVOL, 0x7, pfuze100_vsnvs),
2311 @@ -407,8 +425,8 @@ static struct pfuze_regulator pfuze3000_regulators[] = {
2312 };
2313
2314 static struct pfuze_regulator pfuze3001_regulators[] = {
2315 - PFUZE100_SWB_REG(PFUZE3001, SW1, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
2316 - PFUZE100_SWB_REG(PFUZE3001, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
2317 + PFUZE3000_SW_REG(PFUZE3001, SW1, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
2318 + PFUZE3000_SW_REG(PFUZE3001, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
2319 PFUZE3000_SW3_REG(PFUZE3001, SW3, PFUZE100_SW3AVOL, 900000, 1650000, 50000),
2320 PFUZE100_SWB_REG(PFUZE3001, VSNVS, PFUZE100_VSNVSVOL, 0x7, pfuze100_vsnvs),
2321 PFUZE100_VGEN_REG(PFUZE3001, VLDO1, PFUZE100_VGEN1VOL, 1800000, 3300000, 100000),
2322 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
2323 index fe70e9875bde..5043f0fcf399 100644
2324 --- a/drivers/s390/net/qeth_core_main.c
2325 +++ b/drivers/s390/net/qeth_core_main.c
2326 @@ -4163,9 +4163,6 @@ static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
2327 int fallback = *(int *)reply->param;
2328
2329 QETH_CARD_TEXT(card, 4, "setaccb");
2330 - if (cmd->hdr.return_code)
2331 - return -EIO;
2332 - qeth_setadpparms_inspect_rc(cmd);
2333
2334 access_ctrl_req = &cmd->data.setadapterparms.data.set_access_ctrl;
2335 QETH_CARD_TEXT_(card, 2, "rc=%d",
2336 @@ -4175,7 +4172,7 @@ static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
2337 QETH_DBF_MESSAGE(3, "ERR:SET_ACCESS_CTRL(%#x) on device %x: %#x\n",
2338 access_ctrl_req->subcmd_code, CARD_DEVID(card),
2339 cmd->data.setadapterparms.hdr.return_code);
2340 - switch (cmd->data.setadapterparms.hdr.return_code) {
2341 + switch (qeth_setadpparms_inspect_rc(cmd)) {
2342 case SET_ACCESS_CTRL_RC_SUCCESS:
2343 if (card->options.isolation == ISOLATION_MODE_NONE) {
2344 dev_info(&card->gdev->dev,
2345 diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
2346 index cb84125ab80d..08dc2efb7d8a 100644
2347 --- a/drivers/s390/scsi/zfcp_erp.c
2348 +++ b/drivers/s390/scsi/zfcp_erp.c
2349 @@ -576,7 +576,10 @@ static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act)
2350 ZFCP_STATUS_ERP_TIMEDOUT)) {
2351 req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
2352 zfcp_dbf_rec_run("erscf_1", act);
2353 - req->erp_action = NULL;
2354 + /* lock-free concurrent access with
2355 + * zfcp_erp_timeout_handler()
2356 + */
2357 + WRITE_ONCE(req->erp_action, NULL);
2358 }
2359 if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
2360 zfcp_dbf_rec_run("erscf_2", act);
2361 @@ -612,8 +615,14 @@ void zfcp_erp_notify(struct zfcp_erp_action *erp_action, unsigned long set_mask)
2362 void zfcp_erp_timeout_handler(struct timer_list *t)
2363 {
2364 struct zfcp_fsf_req *fsf_req = from_timer(fsf_req, t, timer);
2365 - struct zfcp_erp_action *act = fsf_req->erp_action;
2366 + struct zfcp_erp_action *act;
2367
2368 + if (fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED)
2369 + return;
2370 + /* lock-free concurrent access with zfcp_erp_strategy_check_fsfreq() */
2371 + act = READ_ONCE(fsf_req->erp_action);
2372 + if (!act)
2373 + return;
2374 zfcp_erp_notify(act, ZFCP_STATUS_ERP_TIMEDOUT);
2375 }
2376
2377 diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
2378 index 14d9f41977f1..95abffd9ad10 100644
2379 --- a/drivers/scsi/lpfc/lpfc_init.c
2380 +++ b/drivers/scsi/lpfc/lpfc_init.c
2381 @@ -11542,7 +11542,8 @@ lpfc_sli4_hba_unset(struct lpfc_hba *phba)
2382 lpfc_sli4_xri_exchange_busy_wait(phba);
2383
2384 /* per-phba callback de-registration for hotplug event */
2385 - lpfc_cpuhp_remove(phba);
2386 + if (phba->pport)
2387 + lpfc_cpuhp_remove(phba);
2388
2389 /* Disable PCI subsystem interrupt */
2390 lpfc_sli4_disable_intr(phba);
2391 diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
2392 index 84bb4a048016..a44de4c5dcf6 100644
2393 --- a/drivers/scsi/qla2xxx/qla_gs.c
2394 +++ b/drivers/scsi/qla2xxx/qla_gs.c
2395 @@ -3638,7 +3638,9 @@ void qla24xx_async_gnnft_done(scsi_qla_host_t *vha, srb_t *sp)
2396 qla2x00_clear_loop_id(fcport);
2397 fcport->flags |= FCF_FABRIC_DEVICE;
2398 } else if (fcport->d_id.b24 != rp->id.b24 ||
2399 - fcport->scan_needed) {
2400 + (fcport->scan_needed &&
2401 + fcport->port_type != FCT_INITIATOR &&
2402 + fcport->port_type != FCT_NVME_INITIATOR)) {
2403 qlt_schedule_sess_for_deletion(fcport);
2404 }
2405 fcport->d_id.b24 = rp->id.b24;
2406 diff --git a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
2407 index ea3ea2a6b314..f6678ba6d4bc 100644
2408 --- a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
2409 +++ b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
2410 @@ -1845,12 +1845,14 @@ int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie, uint var_ie_l
2411 pIE = (struct ndis_80211_var_ie *)rtw_get_ie(pvar_ie, _SUPPORTEDRATES_IE_, &ie_len, var_ie_len);
2412 if (!pIE)
2413 return _FAIL;
2414 + if (ie_len > sizeof(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates))
2415 + return _FAIL;
2416
2417 memcpy(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates, pIE->data, ie_len);
2418 supportRateNum = ie_len;
2419
2420 pIE = (struct ndis_80211_var_ie *)rtw_get_ie(pvar_ie, _EXT_SUPPORTEDRATES_IE_, &ie_len, var_ie_len);
2421 - if (pIE)
2422 + if (pIE && (ie_len <= sizeof(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates) - supportRateNum))
2423 memcpy((pmlmeinfo->FW_sta_info[cam_idx].SupportedRates + supportRateNum), pIE->data, ie_len);
2424
2425 return _SUCCESS;
2426 diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
2427 index f8e43a6faea9..cdcc64ea2554 100644
2428 --- a/drivers/tty/hvc/hvc_console.c
2429 +++ b/drivers/tty/hvc/hvc_console.c
2430 @@ -75,8 +75,6 @@ static LIST_HEAD(hvc_structs);
2431 */
2432 static DEFINE_MUTEX(hvc_structs_mutex);
2433
2434 -/* Mutex to serialize hvc_open */
2435 -static DEFINE_MUTEX(hvc_open_mutex);
2436 /*
2437 * This value is used to assign a tty->index value to a hvc_struct based
2438 * upon order of exposure via hvc_probe(), when we can not match it to
2439 @@ -348,24 +346,16 @@ static int hvc_install(struct tty_driver *driver, struct tty_struct *tty)
2440 */
2441 static int hvc_open(struct tty_struct *tty, struct file * filp)
2442 {
2443 - struct hvc_struct *hp;
2444 + struct hvc_struct *hp = tty->driver_data;
2445 unsigned long flags;
2446 int rc = 0;
2447
2448 - mutex_lock(&hvc_open_mutex);
2449 -
2450 - hp = tty->driver_data;
2451 - if (!hp) {
2452 - rc = -EIO;
2453 - goto out;
2454 - }
2455 -
2456 spin_lock_irqsave(&hp->port.lock, flags);
2457 /* Check and then increment for fast path open. */
2458 if (hp->port.count++ > 0) {
2459 spin_unlock_irqrestore(&hp->port.lock, flags);
2460 hvc_kick();
2461 - goto out;
2462 + return 0;
2463 } /* else count == 0 */
2464 spin_unlock_irqrestore(&hp->port.lock, flags);
2465
2466 @@ -393,8 +383,6 @@ static int hvc_open(struct tty_struct *tty, struct file * filp)
2467 /* Force wakeup of the polling thread */
2468 hvc_kick();
2469
2470 -out:
2471 - mutex_unlock(&hvc_open_mutex);
2472 return rc;
2473 }
2474
2475 diff --git a/drivers/usb/cdns3/ep0.c b/drivers/usb/cdns3/ep0.c
2476 index e71240b386b4..da4c5eb03d7e 100644
2477 --- a/drivers/usb/cdns3/ep0.c
2478 +++ b/drivers/usb/cdns3/ep0.c
2479 @@ -327,7 +327,8 @@ static int cdns3_ep0_feature_handle_device(struct cdns3_device *priv_dev,
2480 if (!set || (tmode & 0xff) != 0)
2481 return -EINVAL;
2482
2483 - switch (tmode >> 8) {
2484 + tmode >>= 8;
2485 + switch (tmode) {
2486 case TEST_J:
2487 case TEST_K:
2488 case TEST_SE0_NAK:
2489 @@ -711,15 +712,17 @@ static int cdns3_gadget_ep0_queue(struct usb_ep *ep,
2490 int ret = 0;
2491 u8 zlp = 0;
2492
2493 + spin_lock_irqsave(&priv_dev->lock, flags);
2494 trace_cdns3_ep0_queue(priv_dev, request);
2495
2496 /* cancel the request if controller receive new SETUP packet. */
2497 - if (cdns3_check_new_setup(priv_dev))
2498 + if (cdns3_check_new_setup(priv_dev)) {
2499 + spin_unlock_irqrestore(&priv_dev->lock, flags);
2500 return -ECONNRESET;
2501 + }
2502
2503 /* send STATUS stage. Should be called only for SET_CONFIGURATION */
2504 if (priv_dev->ep0_stage == CDNS3_STATUS_STAGE) {
2505 - spin_lock_irqsave(&priv_dev->lock, flags);
2506 cdns3_select_ep(priv_dev, 0x00);
2507
2508 erdy_sent = !priv_dev->hw_configured_flag;
2509 @@ -744,7 +747,6 @@ static int cdns3_gadget_ep0_queue(struct usb_ep *ep,
2510 return 0;
2511 }
2512
2513 - spin_lock_irqsave(&priv_dev->lock, flags);
2514 if (!list_empty(&priv_ep->pending_req_list)) {
2515 dev_err(priv_dev->dev,
2516 "can't handle multiple requests for ep0\n");
2517 diff --git a/drivers/usb/cdns3/trace.h b/drivers/usb/cdns3/trace.h
2518 index e92348c9b4d7..7cc8bebaa07d 100644
2519 --- a/drivers/usb/cdns3/trace.h
2520 +++ b/drivers/usb/cdns3/trace.h
2521 @@ -150,7 +150,7 @@ DECLARE_EVENT_CLASS(cdns3_log_ep0_irq,
2522 __dynamic_array(char, str, CDNS3_MSG_MAX)
2523 ),
2524 TP_fast_assign(
2525 - __entry->ep_dir = priv_dev->ep0_data_dir;
2526 + __entry->ep_dir = priv_dev->selected_ep;
2527 __entry->ep_sts = ep_sts;
2528 ),
2529 TP_printk("%s", cdns3_decode_ep0_irq(__get_str(str),
2530 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
2531 index f67088bb8218..d5187b50fc82 100644
2532 --- a/drivers/usb/class/cdc-acm.c
2533 +++ b/drivers/usb/class/cdc-acm.c
2534 @@ -1689,6 +1689,8 @@ static int acm_pre_reset(struct usb_interface *intf)
2535
2536 static const struct usb_device_id acm_ids[] = {
2537 /* quirky and broken devices */
2538 + { USB_DEVICE(0x0424, 0x274e), /* Microchip Technology, Inc. (formerly SMSC) */
2539 + .driver_info = DISABLE_ECHO, }, /* DISABLE ECHO in termios flag */
2540 { USB_DEVICE(0x076d, 0x0006), /* Denso Cradle CU-321 */
2541 .driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
2542 { USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
2543 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
2544 index 3e8efe759c3e..e0b77674869c 100644
2545 --- a/drivers/usb/core/quirks.c
2546 +++ b/drivers/usb/core/quirks.c
2547 @@ -218,11 +218,12 @@ static const struct usb_device_id usb_quirk_list[] = {
2548 /* Logitech HD Webcam C270 */
2549 { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
2550
2551 - /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
2552 + /* Logitech HD Pro Webcams C920, C920-C, C922, C925e and C930e */
2553 { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
2554 { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
2555 { USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
2556 { USB_DEVICE(0x046d, 0x085b), .driver_info = USB_QUIRK_DELAY_INIT },
2557 + { USB_DEVICE(0x046d, 0x085c), .driver_info = USB_QUIRK_DELAY_INIT },
2558
2559 /* Logitech ConferenceCam CC3000e */
2560 { USB_DEVICE(0x046d, 0x0847), .driver_info = USB_QUIRK_DELAY_INIT },
2561 diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
2562 index 7fd0900a9cb0..f7528f732b2a 100644
2563 --- a/drivers/usb/dwc2/gadget.c
2564 +++ b/drivers/usb/dwc2/gadget.c
2565 @@ -4886,12 +4886,6 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg)
2566 epnum, 0);
2567 }
2568
2569 - ret = usb_add_gadget_udc(dev, &hsotg->gadget);
2570 - if (ret) {
2571 - dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep,
2572 - hsotg->ctrl_req);
2573 - return ret;
2574 - }
2575 dwc2_hsotg_dump(hsotg);
2576
2577 return 0;
2578 diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
2579 index 3c6ce09a6db5..15e55808cf4e 100644
2580 --- a/drivers/usb/dwc2/platform.c
2581 +++ b/drivers/usb/dwc2/platform.c
2582 @@ -507,6 +507,17 @@ static int dwc2_driver_probe(struct platform_device *dev)
2583 if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
2584 dwc2_lowlevel_hw_disable(hsotg);
2585
2586 +#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || \
2587 + IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
2588 + /* Postponed adding a new gadget to the udc class driver list */
2589 + if (hsotg->gadget_enabled) {
2590 + retval = usb_add_gadget_udc(hsotg->dev, &hsotg->gadget);
2591 + if (retval) {
2592 + dwc2_hsotg_remove(hsotg);
2593 + goto error;
2594 + }
2595 + }
2596 +#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
2597 return 0;
2598
2599 error:
2600 diff --git a/drivers/usb/gadget/udc/mv_udc_core.c b/drivers/usb/gadget/udc/mv_udc_core.c
2601 index cafde053788b..80a1b52c656e 100644
2602 --- a/drivers/usb/gadget/udc/mv_udc_core.c
2603 +++ b/drivers/usb/gadget/udc/mv_udc_core.c
2604 @@ -2313,7 +2313,8 @@ static int mv_udc_probe(struct platform_device *pdev)
2605 return 0;
2606
2607 err_create_workqueue:
2608 - destroy_workqueue(udc->qwork);
2609 + if (udc->qwork)
2610 + destroy_workqueue(udc->qwork);
2611 err_destroy_dma:
2612 dma_pool_destroy(udc->dtd_pool);
2613 err_free_dma:
2614 diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c
2615 index 01debfd03d4a..84d59a611511 100644
2616 --- a/drivers/usb/host/ehci-exynos.c
2617 +++ b/drivers/usb/host/ehci-exynos.c
2618 @@ -203,9 +203,8 @@ static int exynos_ehci_probe(struct platform_device *pdev)
2619 hcd->rsrc_len = resource_size(res);
2620
2621 irq = platform_get_irq(pdev, 0);
2622 - if (!irq) {
2623 - dev_err(&pdev->dev, "Failed to get IRQ\n");
2624 - err = -ENODEV;
2625 + if (irq < 0) {
2626 + err = irq;
2627 goto fail_io;
2628 }
2629
2630 diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
2631 index b0882c13a1d1..66713c253765 100644
2632 --- a/drivers/usb/host/ehci-pci.c
2633 +++ b/drivers/usb/host/ehci-pci.c
2634 @@ -216,6 +216,13 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
2635 ehci_info(ehci, "applying MosChip frame-index workaround\n");
2636 ehci->frame_index_bug = 1;
2637 break;
2638 + case PCI_VENDOR_ID_HUAWEI:
2639 + /* Synopsys HC bug */
2640 + if (pdev->device == 0xa239) {
2641 + ehci_info(ehci, "applying Synopsys HC workaround\n");
2642 + ehci->has_synopsys_hc_bug = 1;
2643 + }
2644 + break;
2645 }
2646
2647 /* optional debug port, normally in the first BAR */
2648 diff --git a/drivers/usb/host/ohci-sm501.c b/drivers/usb/host/ohci-sm501.c
2649 index cff965240327..b91d50da6127 100644
2650 --- a/drivers/usb/host/ohci-sm501.c
2651 +++ b/drivers/usb/host/ohci-sm501.c
2652 @@ -191,6 +191,7 @@ static int ohci_hcd_sm501_drv_remove(struct platform_device *pdev)
2653 struct resource *mem;
2654
2655 usb_remove_hcd(hcd);
2656 + iounmap(hcd->regs);
2657 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
2658 usb_put_hcd(hcd);
2659 mem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
2660 diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c
2661 index b18a6baef204..85f1ff0399a9 100644
2662 --- a/drivers/usb/host/xhci-mtk.c
2663 +++ b/drivers/usb/host/xhci-mtk.c
2664 @@ -592,6 +592,9 @@ static int xhci_mtk_remove(struct platform_device *dev)
2665 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
2666 struct usb_hcd *shared_hcd = xhci->shared_hcd;
2667
2668 + pm_runtime_put_noidle(&dev->dev);
2669 + pm_runtime_disable(&dev->dev);
2670 +
2671 usb_remove_hcd(shared_hcd);
2672 xhci->shared_hcd = NULL;
2673 device_init_wakeup(&dev->dev, false);
2674 @@ -602,8 +605,6 @@ static int xhci_mtk_remove(struct platform_device *dev)
2675 xhci_mtk_sch_exit(mtk);
2676 xhci_mtk_clks_disable(mtk);
2677 xhci_mtk_ldos_disable(mtk);
2678 - pm_runtime_put_sync(&dev->dev);
2679 - pm_runtime_disable(&dev->dev);
2680
2681 return 0;
2682 }
2683 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
2684 index 81b54a3d2910..11a65854d3f0 100644
2685 --- a/drivers/usb/host/xhci.c
2686 +++ b/drivers/usb/host/xhci.c
2687 @@ -1430,6 +1430,7 @@ static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id,
2688 xhci->devs[slot_id]->out_ctx, ep_index);
2689
2690 ep_ctx = xhci_get_ep_ctx(xhci, command->in_ctx, ep_index);
2691 + ep_ctx->ep_info &= cpu_to_le32(~EP_STATE_MASK);/* must clear */
2692 ep_ctx->ep_info2 &= cpu_to_le32(~MAX_PACKET_MASK);
2693 ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet_size));
2694
2695 @@ -4390,6 +4391,9 @@ static int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
2696 int hird, exit_latency;
2697 int ret;
2698
2699 + if (xhci->quirks & XHCI_HW_LPM_DISABLE)
2700 + return -EPERM;
2701 +
2702 if (hcd->speed >= HCD_USB3 || !xhci->hw_lpm_support ||
2703 !udev->lpm_capable)
2704 return -EPERM;
2705 @@ -4412,7 +4416,7 @@ static int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
2706 xhci_dbg(xhci, "%s port %d USB2 hardware LPM\n",
2707 enable ? "enable" : "disable", port_num + 1);
2708
2709 - if (enable && !(xhci->quirks & XHCI_HW_LPM_DISABLE)) {
2710 + if (enable) {
2711 /* Host supports BESL timeout instead of HIRD */
2712 if (udev->usb2_hw_lpm_besl_capable) {
2713 /* if device doesn't have a preferred BESL value use a
2714 @@ -4471,6 +4475,9 @@ static int xhci_set_usb2_hardware_lpm(struct usb_hcd *hcd,
2715 mutex_lock(hcd->bandwidth_mutex);
2716 xhci_change_max_exit_latency(xhci, udev, 0);
2717 mutex_unlock(hcd->bandwidth_mutex);
2718 + readl_poll_timeout(ports[port_num]->addr, pm_val,
2719 + (pm_val & PORT_PLS_MASK) == XDEV_U0,
2720 + 100, 10000);
2721 return 0;
2722 }
2723 }
2724 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
2725 index 23a1abdc2b43..c656b41b57b5 100644
2726 --- a/drivers/usb/host/xhci.h
2727 +++ b/drivers/usb/host/xhci.h
2728 @@ -716,7 +716,7 @@ struct xhci_ep_ctx {
2729 * 4 - TRB error
2730 * 5-7 - reserved
2731 */
2732 -#define EP_STATE_MASK (0xf)
2733 +#define EP_STATE_MASK (0x7)
2734 #define EP_STATE_DISABLED 0
2735 #define EP_STATE_RUNNING 1
2736 #define EP_STATE_HALTED 2
2737 diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
2738 index 86637cd066cf..05cdad13933b 100644
2739 --- a/drivers/usb/renesas_usbhs/fifo.c
2740 +++ b/drivers/usb/renesas_usbhs/fifo.c
2741 @@ -803,7 +803,8 @@ static int __usbhsf_dma_map_ctrl(struct usbhs_pkt *pkt, int map)
2742 return info->dma_map_ctrl(chan->device->dev, pkt, map);
2743 }
2744
2745 -static void usbhsf_dma_complete(void *arg);
2746 +static void usbhsf_dma_complete(void *arg,
2747 + const struct dmaengine_result *result);
2748 static void usbhsf_dma_xfer_preparing(struct usbhs_pkt *pkt)
2749 {
2750 struct usbhs_pipe *pipe = pkt->pipe;
2751 @@ -813,6 +814,7 @@ static void usbhsf_dma_xfer_preparing(struct usbhs_pkt *pkt)
2752 struct dma_chan *chan;
2753 struct device *dev = usbhs_priv_to_dev(priv);
2754 enum dma_transfer_direction dir;
2755 + dma_cookie_t cookie;
2756
2757 fifo = usbhs_pipe_to_fifo(pipe);
2758 if (!fifo)
2759 @@ -827,11 +829,11 @@ static void usbhsf_dma_xfer_preparing(struct usbhs_pkt *pkt)
2760 if (!desc)
2761 return;
2762
2763 - desc->callback = usbhsf_dma_complete;
2764 - desc->callback_param = pipe;
2765 + desc->callback_result = usbhsf_dma_complete;
2766 + desc->callback_param = pkt;
2767
2768 - pkt->cookie = dmaengine_submit(desc);
2769 - if (pkt->cookie < 0) {
2770 + cookie = dmaengine_submit(desc);
2771 + if (cookie < 0) {
2772 dev_err(dev, "Failed to submit dma descriptor\n");
2773 return;
2774 }
2775 @@ -1152,12 +1154,10 @@ static size_t usbhs_dma_calc_received_size(struct usbhs_pkt *pkt,
2776 struct dma_chan *chan, int dtln)
2777 {
2778 struct usbhs_pipe *pipe = pkt->pipe;
2779 - struct dma_tx_state state;
2780 size_t received_size;
2781 int maxp = usbhs_pipe_get_maxpacket(pipe);
2782
2783 - dmaengine_tx_status(chan, pkt->cookie, &state);
2784 - received_size = pkt->length - state.residue;
2785 + received_size = pkt->length - pkt->dma_result->residue;
2786
2787 if (dtln) {
2788 received_size -= USBHS_USB_DMAC_XFER_SIZE;
2789 @@ -1363,13 +1363,16 @@ static int usbhsf_irq_ready(struct usbhs_priv *priv,
2790 return 0;
2791 }
2792
2793 -static void usbhsf_dma_complete(void *arg)
2794 +static void usbhsf_dma_complete(void *arg,
2795 + const struct dmaengine_result *result)
2796 {
2797 - struct usbhs_pipe *pipe = arg;
2798 + struct usbhs_pkt *pkt = arg;
2799 + struct usbhs_pipe *pipe = pkt->pipe;
2800 struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
2801 struct device *dev = usbhs_priv_to_dev(priv);
2802 int ret;
2803
2804 + pkt->dma_result = result;
2805 ret = usbhsf_pkt_handler(pipe, USBHSF_PKT_DMA_DONE);
2806 if (ret < 0)
2807 dev_err(dev, "dma_complete run_error %d : %d\n",
2808 diff --git a/drivers/usb/renesas_usbhs/fifo.h b/drivers/usb/renesas_usbhs/fifo.h
2809 index c3d3cc35cee0..4a7dc23ce3d3 100644
2810 --- a/drivers/usb/renesas_usbhs/fifo.h
2811 +++ b/drivers/usb/renesas_usbhs/fifo.h
2812 @@ -50,7 +50,7 @@ struct usbhs_pkt {
2813 struct usbhs_pkt *pkt);
2814 struct work_struct work;
2815 dma_addr_t dma;
2816 - dma_cookie_t cookie;
2817 + const struct dmaengine_result *dma_result;
2818 void *buf;
2819 int length;
2820 int trans;
2821 diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
2822 index 017389021b96..b56a0880a044 100644
2823 --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
2824 +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
2825 @@ -179,26 +179,6 @@ out:
2826 return tcpci_irq(chip->tcpci);
2827 }
2828
2829 -static int rt1711h_init_alert(struct rt1711h_chip *chip,
2830 - struct i2c_client *client)
2831 -{
2832 - int ret;
2833 -
2834 - /* Disable chip interrupts before requesting irq */
2835 - ret = rt1711h_write16(chip, TCPC_ALERT_MASK, 0);
2836 - if (ret < 0)
2837 - return ret;
2838 -
2839 - ret = devm_request_threaded_irq(chip->dev, client->irq, NULL,
2840 - rt1711h_irq,
2841 - IRQF_ONESHOT | IRQF_TRIGGER_LOW,
2842 - dev_name(chip->dev), chip);
2843 - if (ret < 0)
2844 - return ret;
2845 - enable_irq_wake(client->irq);
2846 - return 0;
2847 -}
2848 -
2849 static int rt1711h_sw_reset(struct rt1711h_chip *chip)
2850 {
2851 int ret;
2852 @@ -260,7 +240,8 @@ static int rt1711h_probe(struct i2c_client *client,
2853 if (ret < 0)
2854 return ret;
2855
2856 - ret = rt1711h_init_alert(chip, client);
2857 + /* Disable chip interrupts before requesting irq */
2858 + ret = rt1711h_write16(chip, TCPC_ALERT_MASK, 0);
2859 if (ret < 0)
2860 return ret;
2861
2862 @@ -271,6 +252,14 @@ static int rt1711h_probe(struct i2c_client *client,
2863 if (IS_ERR_OR_NULL(chip->tcpci))
2864 return PTR_ERR(chip->tcpci);
2865
2866 + ret = devm_request_threaded_irq(chip->dev, client->irq, NULL,
2867 + rt1711h_irq,
2868 + IRQF_ONESHOT | IRQF_TRIGGER_LOW,
2869 + dev_name(chip->dev), chip);
2870 + if (ret < 0)
2871 + return ret;
2872 + enable_irq_wake(client->irq);
2873 +
2874 return 0;
2875 }
2876
2877 diff --git a/fs/afs/cell.c b/fs/afs/cell.c
2878 index 78ba5f932287..296b489861a9 100644
2879 --- a/fs/afs/cell.c
2880 +++ b/fs/afs/cell.c
2881 @@ -154,10 +154,17 @@ static struct afs_cell *afs_alloc_cell(struct afs_net *net,
2882 return ERR_PTR(-ENOMEM);
2883 }
2884
2885 + cell->name = kmalloc(namelen + 1, GFP_KERNEL);
2886 + if (!cell->name) {
2887 + kfree(cell);
2888 + return ERR_PTR(-ENOMEM);
2889 + }
2890 +
2891 cell->net = net;
2892 cell->name_len = namelen;
2893 for (i = 0; i < namelen; i++)
2894 cell->name[i] = tolower(name[i]);
2895 + cell->name[i] = 0;
2896
2897 atomic_set(&cell->usage, 2);
2898 INIT_WORK(&cell->manager, afs_manage_cell);
2899 @@ -203,6 +210,7 @@ parse_failed:
2900 if (ret == -EINVAL)
2901 printk(KERN_ERR "kAFS: bad VL server IP address\n");
2902 error:
2903 + kfree(cell->name);
2904 kfree(cell);
2905 _leave(" = %d", ret);
2906 return ERR_PTR(ret);
2907 @@ -483,6 +491,7 @@ static void afs_cell_destroy(struct rcu_head *rcu)
2908
2909 afs_put_vlserverlist(cell->net, rcu_access_pointer(cell->vl_servers));
2910 key_put(cell->anonymous_key);
2911 + kfree(cell->name);
2912 kfree(cell);
2913
2914 _leave(" [destroyed]");
2915 diff --git a/fs/afs/internal.h b/fs/afs/internal.h
2916 index 555ad7c9afcb..7fe88d918b23 100644
2917 --- a/fs/afs/internal.h
2918 +++ b/fs/afs/internal.h
2919 @@ -397,7 +397,7 @@ struct afs_cell {
2920 struct afs_vlserver_list __rcu *vl_servers;
2921
2922 u8 name_len; /* Length of name */
2923 - char name[64 + 1]; /* Cell name, case-flattened and NUL-padded */
2924 + char *name; /* Cell name, case-flattened and NUL-padded */
2925 };
2926
2927 /*
2928 diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
2929 index c2dd94e1b274..42d69e77f89d 100644
2930 --- a/fs/btrfs/block-group.c
2931 +++ b/fs/btrfs/block-group.c
2932 @@ -910,7 +910,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2933 path = btrfs_alloc_path();
2934 if (!path) {
2935 ret = -ENOMEM;
2936 - goto out_put_group;
2937 + goto out;
2938 }
2939
2940 /*
2941 @@ -948,7 +948,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2942 ret = btrfs_orphan_add(trans, BTRFS_I(inode));
2943 if (ret) {
2944 btrfs_add_delayed_iput(inode);
2945 - goto out_put_group;
2946 + goto out;
2947 }
2948 clear_nlink(inode);
2949 /* One for the block groups ref */
2950 @@ -971,13 +971,13 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2951
2952 ret = btrfs_search_slot(trans, tree_root, &key, path, -1, 1);
2953 if (ret < 0)
2954 - goto out_put_group;
2955 + goto out;
2956 if (ret > 0)
2957 btrfs_release_path(path);
2958 if (ret == 0) {
2959 ret = btrfs_del_item(trans, tree_root, path);
2960 if (ret)
2961 - goto out_put_group;
2962 + goto out;
2963 btrfs_release_path(path);
2964 }
2965
2966 @@ -986,6 +986,9 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2967 &fs_info->block_group_cache_tree);
2968 RB_CLEAR_NODE(&block_group->cache_node);
2969
2970 + /* Once for the block groups rbtree */
2971 + btrfs_put_block_group(block_group);
2972 +
2973 if (fs_info->first_logical_byte == block_group->key.objectid)
2974 fs_info->first_logical_byte = (u64)-1;
2975 spin_unlock(&fs_info->block_group_cache_lock);
2976 @@ -1094,10 +1097,7 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2977
2978 ret = remove_block_group_free_space(trans, block_group);
2979 if (ret)
2980 - goto out_put_group;
2981 -
2982 - /* Once for the block groups rbtree */
2983 - btrfs_put_block_group(block_group);
2984 + goto out;
2985
2986 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
2987 if (ret > 0)
2988 @@ -1120,10 +1120,9 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
2989 free_extent_map(em);
2990 }
2991
2992 -out_put_group:
2993 +out:
2994 /* Once for the lookup reference */
2995 btrfs_put_block_group(block_group);
2996 -out:
2997 if (remove_rsv)
2998 btrfs_delayed_refs_rsv_release(fs_info, 1);
2999 btrfs_free_path(path);
3000 diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
3001 index 6d2c277c6e0a..36cd210ee2ef 100644
3002 --- a/fs/btrfs/ctree.h
3003 +++ b/fs/btrfs/ctree.h
3004 @@ -940,6 +940,8 @@ enum {
3005 BTRFS_ROOT_DEAD_RELOC_TREE,
3006 /* Mark dead root stored on device whose cleanup needs to be resumed */
3007 BTRFS_ROOT_DEAD_TREE,
3008 + /* The root has a log tree. Used only for subvolume roots. */
3009 + BTRFS_ROOT_HAS_LOG_TREE,
3010 };
3011
3012 /*
3013 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3014 index 127cdecbe872..280c45c91ddc 100644
3015 --- a/fs/btrfs/inode.c
3016 +++ b/fs/btrfs/inode.c
3017 @@ -975,6 +975,7 @@ static noinline int cow_file_range(struct inode *inode,
3018 u64 num_bytes;
3019 unsigned long ram_size;
3020 u64 cur_alloc_size = 0;
3021 + u64 min_alloc_size;
3022 u64 blocksize = fs_info->sectorsize;
3023 struct btrfs_key ins;
3024 struct extent_map *em;
3025 @@ -1025,10 +1026,26 @@ static noinline int cow_file_range(struct inode *inode,
3026 btrfs_drop_extent_cache(BTRFS_I(inode), start,
3027 start + num_bytes - 1, 0);
3028
3029 + /*
3030 + * Relocation relies on the relocated extents to have exactly the same
3031 + * size as the original extents. Normally writeback for relocation data
3032 + * extents follows a NOCOW path because relocation preallocates the
3033 + * extents. However, due to an operation such as scrub turning a block
3034 + * group to RO mode, it may fallback to COW mode, so we must make sure
3035 + * an extent allocated during COW has exactly the requested size and can
3036 + * not be split into smaller extents, otherwise relocation breaks and
3037 + * fails during the stage where it updates the bytenr of file extent
3038 + * items.
3039 + */
3040 + if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID)
3041 + min_alloc_size = num_bytes;
3042 + else
3043 + min_alloc_size = fs_info->sectorsize;
3044 +
3045 while (num_bytes > 0) {
3046 cur_alloc_size = num_bytes;
3047 ret = btrfs_reserve_extent(root, cur_alloc_size, cur_alloc_size,
3048 - fs_info->sectorsize, 0, alloc_hint,
3049 + min_alloc_size, 0, alloc_hint,
3050 &ins, 1, 1);
3051 if (ret < 0)
3052 goto out_unlock;
3053 @@ -1328,6 +1345,8 @@ static int fallback_to_cow(struct inode *inode, struct page *locked_page,
3054 int *page_started, unsigned long *nr_written)
3055 {
3056 const bool is_space_ino = btrfs_is_free_space_inode(BTRFS_I(inode));
3057 + const bool is_reloc_ino = (BTRFS_I(inode)->root->root_key.objectid ==
3058 + BTRFS_DATA_RELOC_TREE_OBJECTID);
3059 const u64 range_bytes = end + 1 - start;
3060 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
3061 u64 range_start = start;
3062 @@ -1358,18 +1377,23 @@ static int fallback_to_cow(struct inode *inode, struct page *locked_page,
3063 * data space info, which we incremented in the step above.
3064 *
3065 * If we need to fallback to cow and the inode corresponds to a free
3066 - * space cache inode, we must also increment bytes_may_use of the data
3067 - * space_info for the same reason. Space caches always get a prealloc
3068 + * space cache inode or an inode of the data relocation tree, we must
3069 + * also increment bytes_may_use of the data space_info for the same
3070 + * reason. Space caches and relocated data extents always get a prealloc
3071 * extent for them, however scrub or balance may have set the block
3072 - * group that contains that extent to RO mode.
3073 + * group that contains that extent to RO mode and therefore force COW
3074 + * when starting writeback.
3075 */
3076 count = count_range_bits(io_tree, &range_start, end, range_bytes,
3077 EXTENT_NORESERVE, 0);
3078 - if (count > 0 || is_space_ino) {
3079 - const u64 bytes = is_space_ino ? range_bytes : count;
3080 + if (count > 0 || is_space_ino || is_reloc_ino) {
3081 + u64 bytes = count;
3082 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
3083 struct btrfs_space_info *sinfo = fs_info->data_sinfo;
3084
3085 + if (is_space_ino || is_reloc_ino)
3086 + bytes = range_bytes;
3087 +
3088 spin_lock(&sinfo->lock);
3089 btrfs_space_info_update_bytes_may_use(fs_info, sinfo, bytes);
3090 spin_unlock(&sinfo->lock);
3091 @@ -8833,9 +8857,6 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
3092 dio_data.overwrite = 1;
3093 inode_unlock(inode);
3094 relock = true;
3095 - } else if (iocb->ki_flags & IOCB_NOWAIT) {
3096 - ret = -EAGAIN;
3097 - goto out;
3098 }
3099 ret = btrfs_delalloc_reserve_space(inode, &data_reserved,
3100 offset, count);
3101 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
3102 index 7d464b049507..f46afbff668e 100644
3103 --- a/fs/btrfs/tree-log.c
3104 +++ b/fs/btrfs/tree-log.c
3105 @@ -167,6 +167,7 @@ static int start_log_trans(struct btrfs_trans_handle *trans,
3106 if (ret)
3107 goto out;
3108
3109 + set_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);
3110 clear_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);
3111 root->log_start_pid = current->pid;
3112 }
3113 @@ -193,6 +194,9 @@ static int join_running_log_trans(struct btrfs_root *root)
3114 {
3115 int ret = -ENOENT;
3116
3117 + if (!test_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state))
3118 + return ret;
3119 +
3120 mutex_lock(&root->log_mutex);
3121 if (root->log_root) {
3122 ret = 0;
3123 @@ -3327,6 +3331,7 @@ int btrfs_free_log(struct btrfs_trans_handle *trans, struct btrfs_root *root)
3124 if (root->log_root) {
3125 free_log_tree(trans, root->log_root);
3126 root->log_root = NULL;
3127 + clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);
3128 }
3129 return 0;
3130 }
3131 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
3132 index 58915d882285..7ccbfc656478 100644
3133 --- a/fs/cifs/smb2ops.c
3134 +++ b/fs/cifs/smb2ops.c
3135 @@ -736,6 +736,7 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon, struct cifs_fid *pfid)
3136 /* close extra handle outside of crit sec */
3137 SMB2_close(xid, tcon, fid.persistent_fid, fid.volatile_fid);
3138 }
3139 + rc = 0;
3140 goto oshr_free;
3141 }
3142
3143 @@ -2969,6 +2970,11 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
3144 trace_smb3_zero_enter(xid, cfile->fid.persistent_fid, tcon->tid,
3145 ses->Suid, offset, len);
3146
3147 + /*
3148 + * We zero the range through ioctl, so we need remove the page caches
3149 + * first, otherwise the data may be inconsistent with the server.
3150 + */
3151 + truncate_pagecache_range(inode, offset, offset + len - 1);
3152
3153 /* if file not oplocked can't be sure whether asking to extend size */
3154 if (!CIFS_CACHE_READ(cifsi))
3155 @@ -3035,6 +3041,12 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
3156 return rc;
3157 }
3158
3159 + /*
3160 + * We implement the punch hole through ioctl, so we need remove the page
3161 + * caches first, otherwise the data may be inconsistent with the server.
3162 + */
3163 + truncate_pagecache_range(inode, offset, offset + len - 1);
3164 +
3165 cifs_dbg(FYI, "Offset %lld len %lld\n", offset, len);
3166
3167 fsctl_buf.FileOffset = cpu_to_le64(offset);
3168 diff --git a/fs/erofs/zdata.h b/fs/erofs/zdata.h
3169 index faf950189bd7..568d5a493876 100644
3170 --- a/fs/erofs/zdata.h
3171 +++ b/fs/erofs/zdata.h
3172 @@ -148,22 +148,22 @@ static inline void z_erofs_onlinepage_init(struct page *page)
3173 static inline void z_erofs_onlinepage_fixup(struct page *page,
3174 uintptr_t index, bool down)
3175 {
3176 - unsigned long *p, o, v, id;
3177 -repeat:
3178 - p = &page_private(page);
3179 - o = READ_ONCE(*p);
3180 + union z_erofs_onlinepage_converter u = { .v = &page_private(page) };
3181 + int orig, orig_index, val;
3182
3183 - id = o >> Z_EROFS_ONLINEPAGE_INDEX_SHIFT;
3184 - if (id) {
3185 +repeat:
3186 + orig = atomic_read(u.o);
3187 + orig_index = orig >> Z_EROFS_ONLINEPAGE_INDEX_SHIFT;
3188 + if (orig_index) {
3189 if (!index)
3190 return;
3191
3192 - DBG_BUGON(id != index);
3193 + DBG_BUGON(orig_index != index);
3194 }
3195
3196 - v = (index << Z_EROFS_ONLINEPAGE_INDEX_SHIFT) |
3197 - ((o & Z_EROFS_ONLINEPAGE_COUNT_MASK) + (unsigned int)down);
3198 - if (cmpxchg(p, o, v) != o)
3199 + val = (index << Z_EROFS_ONLINEPAGE_INDEX_SHIFT) |
3200 + ((orig & Z_EROFS_ONLINEPAGE_COUNT_MASK) + (unsigned int)down);
3201 + if (atomic_cmpxchg(u.o, orig, val) != orig)
3202 goto repeat;
3203 }
3204
3205 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
3206 index 6b0bf4ebd812..70cf8c5760c7 100644
3207 --- a/fs/nfs/direct.c
3208 +++ b/fs/nfs/direct.c
3209 @@ -367,8 +367,6 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq)
3210 {
3211 struct inode *inode = dreq->inode;
3212
3213 - inode_dio_end(inode);
3214 -
3215 if (dreq->iocb) {
3216 long res = (long) dreq->error;
3217 if (dreq->count != 0) {
3218 @@ -380,7 +378,10 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq)
3219
3220 complete(&dreq->completion);
3221
3222 + igrab(inode);
3223 nfs_direct_req_release(dreq);
3224 + inode_dio_end(inode);
3225 + iput(inode);
3226 }
3227
3228 static void nfs_direct_read_completion(struct nfs_pgio_header *hdr)
3229 @@ -510,8 +511,10 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
3230 * generic layer handle the completion.
3231 */
3232 if (requested_bytes == 0) {
3233 - inode_dio_end(inode);
3234 + igrab(inode);
3235 nfs_direct_req_release(dreq);
3236 + inode_dio_end(inode);
3237 + iput(inode);
3238 return result < 0 ? result : -EIO;
3239 }
3240
3241 @@ -923,8 +926,10 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
3242 * generic layer handle the completion.
3243 */
3244 if (requested_bytes == 0) {
3245 - inode_dio_end(inode);
3246 + igrab(inode);
3247 nfs_direct_req_release(dreq);
3248 + inode_dio_end(inode);
3249 + iput(inode);
3250 return result < 0 ? result : -EIO;
3251 }
3252
3253 diff --git a/fs/nfs/file.c b/fs/nfs/file.c
3254 index 95dc90570786..7b3136753205 100644
3255 --- a/fs/nfs/file.c
3256 +++ b/fs/nfs/file.c
3257 @@ -83,6 +83,7 @@ nfs_file_release(struct inode *inode, struct file *filp)
3258 dprintk("NFS: release(%pD2)\n", filp);
3259
3260 nfs_inc_stats(inode, NFSIOS_VFSRELEASE);
3261 + inode_dio_wait(inode);
3262 nfs_file_clear_open_context(filp);
3263 return 0;
3264 }
3265 diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
3266 index 5657b7f2611f..1741d902b0d8 100644
3267 --- a/fs/nfs/flexfilelayout/flexfilelayout.c
3268 +++ b/fs/nfs/flexfilelayout/flexfilelayout.c
3269 @@ -984,9 +984,8 @@ retry:
3270 goto out_mds;
3271
3272 /* Use a direct mapping of ds_idx to pgio mirror_idx */
3273 - if (WARN_ON_ONCE(pgio->pg_mirror_count !=
3274 - FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg)))
3275 - goto out_mds;
3276 + if (pgio->pg_mirror_count != FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg))
3277 + goto out_eagain;
3278
3279 for (i = 0; i < pgio->pg_mirror_count; i++) {
3280 mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i);
3281 @@ -1008,7 +1007,10 @@ retry:
3282 (NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR))
3283 pgio->pg_maxretrans = io_maxretrans;
3284 return;
3285 -
3286 +out_eagain:
3287 + pnfs_generic_pg_cleanup(pgio);
3288 + pgio->pg_error = -EAGAIN;
3289 + return;
3290 out_mds:
3291 trace_pnfs_mds_fallback_pg_init_write(pgio->pg_inode,
3292 0, NFS4_MAX_UINT64, IOMODE_RW,
3293 @@ -1018,6 +1020,7 @@ out_mds:
3294 pgio->pg_lseg = NULL;
3295 pgio->pg_maxretrans = 0;
3296 nfs_pageio_reset_write_mds(pgio);
3297 + pgio->pg_error = -EAGAIN;
3298 }
3299
3300 static unsigned int
3301 diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
3302 index 8a2e284ccfcd..e2c34c704185 100644
3303 --- a/fs/ocfs2/dlmglue.c
3304 +++ b/fs/ocfs2/dlmglue.c
3305 @@ -689,6 +689,12 @@ static void ocfs2_nfs_sync_lock_res_init(struct ocfs2_lock_res *res,
3306 &ocfs2_nfs_sync_lops, osb);
3307 }
3308
3309 +static void ocfs2_nfs_sync_lock_init(struct ocfs2_super *osb)
3310 +{
3311 + ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb);
3312 + init_rwsem(&osb->nfs_sync_rwlock);
3313 +}
3314 +
3315 void ocfs2_trim_fs_lock_res_init(struct ocfs2_super *osb)
3316 {
3317 struct ocfs2_lock_res *lockres = &osb->osb_trim_fs_lockres;
3318 @@ -2855,6 +2861,11 @@ int ocfs2_nfs_sync_lock(struct ocfs2_super *osb, int ex)
3319 if (ocfs2_is_hard_readonly(osb))
3320 return -EROFS;
3321
3322 + if (ex)
3323 + down_write(&osb->nfs_sync_rwlock);
3324 + else
3325 + down_read(&osb->nfs_sync_rwlock);
3326 +
3327 if (ocfs2_mount_local(osb))
3328 return 0;
3329
3330 @@ -2873,6 +2884,10 @@ void ocfs2_nfs_sync_unlock(struct ocfs2_super *osb, int ex)
3331 if (!ocfs2_mount_local(osb))
3332 ocfs2_cluster_unlock(osb, lockres,
3333 ex ? LKM_EXMODE : LKM_PRMODE);
3334 + if (ex)
3335 + up_write(&osb->nfs_sync_rwlock);
3336 + else
3337 + up_read(&osb->nfs_sync_rwlock);
3338 }
3339
3340 int ocfs2_trim_fs_lock(struct ocfs2_super *osb,
3341 @@ -3340,7 +3355,7 @@ int ocfs2_dlm_init(struct ocfs2_super *osb)
3342 local:
3343 ocfs2_super_lock_res_init(&osb->osb_super_lockres, osb);
3344 ocfs2_rename_lock_res_init(&osb->osb_rename_lockres, osb);
3345 - ocfs2_nfs_sync_lock_res_init(&osb->osb_nfs_sync_lockres, osb);
3346 + ocfs2_nfs_sync_lock_init(osb);
3347 ocfs2_orphan_scan_lock_res_init(&osb->osb_orphan_scan.os_lockres, osb);
3348
3349 osb->cconn = conn;
3350 diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
3351 index 9150cfa4df7d..9461bd3e1c0c 100644
3352 --- a/fs/ocfs2/ocfs2.h
3353 +++ b/fs/ocfs2/ocfs2.h
3354 @@ -394,6 +394,7 @@ struct ocfs2_super
3355 struct ocfs2_lock_res osb_super_lockres;
3356 struct ocfs2_lock_res osb_rename_lockres;
3357 struct ocfs2_lock_res osb_nfs_sync_lockres;
3358 + struct rw_semaphore nfs_sync_rwlock;
3359 struct ocfs2_lock_res osb_trim_fs_lockres;
3360 struct mutex obs_trim_fs_mutex;
3361 struct ocfs2_dlm_debug *osb_dlm_debug;
3362 diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h
3363 index 0db4a7ec58a2..dcef83c8796d 100644
3364 --- a/fs/ocfs2/ocfs2_fs.h
3365 +++ b/fs/ocfs2/ocfs2_fs.h
3366 @@ -290,7 +290,7 @@
3367 #define OCFS2_MAX_SLOTS 255
3368
3369 /* Slot map indicator for an empty slot */
3370 -#define OCFS2_INVALID_SLOT -1
3371 +#define OCFS2_INVALID_SLOT ((u16)-1)
3372
3373 #define OCFS2_VOL_UUID_LEN 16
3374 #define OCFS2_MAX_VOL_LABEL_LEN 64
3375 @@ -326,8 +326,8 @@ struct ocfs2_system_inode_info {
3376 enum {
3377 BAD_BLOCK_SYSTEM_INODE = 0,
3378 GLOBAL_INODE_ALLOC_SYSTEM_INODE,
3379 +#define OCFS2_FIRST_ONLINE_SYSTEM_INODE GLOBAL_INODE_ALLOC_SYSTEM_INODE
3380 SLOT_MAP_SYSTEM_INODE,
3381 -#define OCFS2_FIRST_ONLINE_SYSTEM_INODE SLOT_MAP_SYSTEM_INODE
3382 HEARTBEAT_SYSTEM_INODE,
3383 GLOBAL_BITMAP_SYSTEM_INODE,
3384 USER_QUOTA_SYSTEM_INODE,
3385 diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
3386 index 69c21a3843af..503e724d39f5 100644
3387 --- a/fs/ocfs2/suballoc.c
3388 +++ b/fs/ocfs2/suballoc.c
3389 @@ -2827,9 +2827,12 @@ int ocfs2_test_inode_bit(struct ocfs2_super *osb, u64 blkno, int *res)
3390 goto bail;
3391 }
3392
3393 - inode_alloc_inode =
3394 - ocfs2_get_system_file_inode(osb, INODE_ALLOC_SYSTEM_INODE,
3395 - suballoc_slot);
3396 + if (suballoc_slot == (u16)OCFS2_INVALID_SLOT)
3397 + inode_alloc_inode = ocfs2_get_system_file_inode(osb,
3398 + GLOBAL_INODE_ALLOC_SYSTEM_INODE, suballoc_slot);
3399 + else
3400 + inode_alloc_inode = ocfs2_get_system_file_inode(osb,
3401 + INODE_ALLOC_SYSTEM_INODE, suballoc_slot);
3402 if (!inode_alloc_inode) {
3403 /* the error code could be inaccurate, but we are not able to
3404 * get the correct one. */
3405 diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
3406 index 533b04aaf6f6..0a36f532cf86 100644
3407 --- a/fs/xfs/libxfs/xfs_alloc.c
3408 +++ b/fs/xfs/libxfs/xfs_alloc.c
3409 @@ -2598,6 +2598,13 @@ xfs_agf_verify(
3410 be32_to_cpu(agf->agf_flcount) <= xfs_agfl_size(mp)))
3411 return __this_address;
3412
3413 + if (be32_to_cpu(agf->agf_length) > mp->m_sb.sb_dblocks)
3414 + return __this_address;
3415 +
3416 + if (be32_to_cpu(agf->agf_freeblks) < be32_to_cpu(agf->agf_longest) ||
3417 + be32_to_cpu(agf->agf_freeblks) > be32_to_cpu(agf->agf_length))
3418 + return __this_address;
3419 +
3420 if (be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) < 1 ||
3421 be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) < 1 ||
3422 be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) > XFS_BTREE_MAXLEVELS ||
3423 @@ -2609,6 +2616,10 @@ xfs_agf_verify(
3424 be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) > XFS_BTREE_MAXLEVELS))
3425 return __this_address;
3426
3427 + if (xfs_sb_version_hasrmapbt(&mp->m_sb) &&
3428 + be32_to_cpu(agf->agf_rmap_blocks) > be32_to_cpu(agf->agf_length))
3429 + return __this_address;
3430 +
3431 /*
3432 * during growfs operations, the perag is not fully initialised,
3433 * so we can't use it for any useful checking. growfs ensures we can't
3434 @@ -2622,6 +2633,11 @@ xfs_agf_verify(
3435 be32_to_cpu(agf->agf_btreeblks) > be32_to_cpu(agf->agf_length))
3436 return __this_address;
3437
3438 + if (xfs_sb_version_hasreflink(&mp->m_sb) &&
3439 + be32_to_cpu(agf->agf_refcount_blocks) >
3440 + be32_to_cpu(agf->agf_length))
3441 + return __this_address;
3442 +
3443 if (xfs_sb_version_hasreflink(&mp->m_sb) &&
3444 (be32_to_cpu(agf->agf_refcount_level) < 1 ||
3445 be32_to_cpu(agf->agf_refcount_level) > XFS_BTREE_MAXLEVELS))
3446 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
3447 index b580a35f50ea..ec3081ab04c0 100644
3448 --- a/include/linux/netdevice.h
3449 +++ b/include/linux/netdevice.h
3450 @@ -3043,7 +3043,7 @@ static inline int dev_recursion_level(void)
3451 return this_cpu_read(softnet_data.xmit.recursion);
3452 }
3453
3454 -#define XMIT_RECURSION_LIMIT 10
3455 +#define XMIT_RECURSION_LIMIT 8
3456 static inline bool dev_xmit_recursion(void)
3457 {
3458 return unlikely(__this_cpu_read(softnet_data.xmit.recursion) >
3459 diff --git a/include/linux/qed/qed_chain.h b/include/linux/qed/qed_chain.h
3460 index 733fad7dfbed..6d15040c642c 100644
3461 --- a/include/linux/qed/qed_chain.h
3462 +++ b/include/linux/qed/qed_chain.h
3463 @@ -207,28 +207,34 @@ static inline u32 qed_chain_get_cons_idx_u32(struct qed_chain *p_chain)
3464
3465 static inline u16 qed_chain_get_elem_left(struct qed_chain *p_chain)
3466 {
3467 + u16 elem_per_page = p_chain->elem_per_page;
3468 + u32 prod = p_chain->u.chain16.prod_idx;
3469 + u32 cons = p_chain->u.chain16.cons_idx;
3470 u16 used;
3471
3472 - used = (u16) (((u32)0x10000 +
3473 - (u32)p_chain->u.chain16.prod_idx) -
3474 - (u32)p_chain->u.chain16.cons_idx);
3475 + if (prod < cons)
3476 + prod += (u32)U16_MAX + 1;
3477 +
3478 + used = (u16)(prod - cons);
3479 if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR)
3480 - used -= p_chain->u.chain16.prod_idx / p_chain->elem_per_page -
3481 - p_chain->u.chain16.cons_idx / p_chain->elem_per_page;
3482 + used -= prod / elem_per_page - cons / elem_per_page;
3483
3484 return (u16)(p_chain->capacity - used);
3485 }
3486
3487 static inline u32 qed_chain_get_elem_left_u32(struct qed_chain *p_chain)
3488 {
3489 + u16 elem_per_page = p_chain->elem_per_page;
3490 + u64 prod = p_chain->u.chain32.prod_idx;
3491 + u64 cons = p_chain->u.chain32.cons_idx;
3492 u32 used;
3493
3494 - used = (u32) (((u64)0x100000000ULL +
3495 - (u64)p_chain->u.chain32.prod_idx) -
3496 - (u64)p_chain->u.chain32.cons_idx);
3497 + if (prod < cons)
3498 + prod += (u64)U32_MAX + 1;
3499 +
3500 + used = (u32)(prod - cons);
3501 if (p_chain->mode == QED_CHAIN_MODE_NEXT_PTR)
3502 - used -= p_chain->u.chain32.prod_idx / p_chain->elem_per_page -
3503 - p_chain->u.chain32.cons_idx / p_chain->elem_per_page;
3504 + used -= (u32)(prod / elem_per_page - cons / elem_per_page);
3505
3506 return p_chain->capacity - used;
3507 }
3508 diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
3509 index 131ea1bad458..eccfd3a4e4c8 100644
3510 --- a/include/linux/tpm_eventlog.h
3511 +++ b/include/linux/tpm_eventlog.h
3512 @@ -81,6 +81,8 @@ struct tcg_efi_specid_event_algs {
3513 u16 digest_size;
3514 } __packed;
3515
3516 +#define TCG_SPECID_SIG "Spec ID Event03"
3517 +
3518 struct tcg_efi_specid_event_head {
3519 u8 signature[16];
3520 u32 platform_class;
3521 @@ -171,6 +173,7 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
3522 int i;
3523 int j;
3524 u32 count, event_type;
3525 + const u8 zero_digest[sizeof(event_header->digest)] = {0};
3526
3527 marker = event;
3528 marker_start = marker;
3529 @@ -198,10 +201,19 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
3530 count = READ_ONCE(event->count);
3531 event_type = READ_ONCE(event->event_type);
3532
3533 + /* Verify that it's the log header */
3534 + if (event_header->pcr_idx != 0 ||
3535 + event_header->event_type != NO_ACTION ||
3536 + memcmp(event_header->digest, zero_digest, sizeof(zero_digest))) {
3537 + size = 0;
3538 + goto out;
3539 + }
3540 +
3541 efispecid = (struct tcg_efi_specid_event_head *)event_header->event;
3542
3543 /* Check if event is malformed. */
3544 - if (count > efispecid->num_algs) {
3545 + if (memcmp(efispecid->signature, TCG_SPECID_SIG,
3546 + sizeof(TCG_SPECID_SIG)) || count > efispecid->num_algs) {
3547 size = 0;
3548 goto out;
3549 }
3550 diff --git a/include/net/sctp/constants.h b/include/net/sctp/constants.h
3551 index 823afc42a3aa..06e1deeef464 100644
3552 --- a/include/net/sctp/constants.h
3553 +++ b/include/net/sctp/constants.h
3554 @@ -341,11 +341,13 @@ enum {
3555 ipv4_is_anycast_6to4(a))
3556
3557 /* Flags used for the bind address copy functions. */
3558 -#define SCTP_ADDR6_ALLOWED 0x00000001 /* IPv6 address is allowed by
3559 +#define SCTP_ADDR4_ALLOWED 0x00000001 /* IPv4 address is allowed by
3560 local sock family */
3561 -#define SCTP_ADDR4_PEERSUPP 0x00000002 /* IPv4 address is supported by
3562 +#define SCTP_ADDR6_ALLOWED 0x00000002 /* IPv6 address is allowed by
3563 + local sock family */
3564 +#define SCTP_ADDR4_PEERSUPP 0x00000004 /* IPv4 address is supported by
3565 peer */
3566 -#define SCTP_ADDR6_PEERSUPP 0x00000004 /* IPv6 address is supported by
3567 +#define SCTP_ADDR6_PEERSUPP 0x00000008 /* IPv6 address is supported by
3568 peer */
3569
3570 /* Reasons to retransmit. */
3571 diff --git a/include/net/sock.h b/include/net/sock.h
3572 index 6c5a3809483e..8263bbf756a2 100644
3573 --- a/include/net/sock.h
3574 +++ b/include/net/sock.h
3575 @@ -1803,7 +1803,6 @@ static inline int sk_rx_queue_get(const struct sock *sk)
3576
3577 static inline void sk_set_socket(struct sock *sk, struct socket *sock)
3578 {
3579 - sk_tx_queue_clear(sk);
3580 sk->sk_socket = sock;
3581 }
3582
3583 diff --git a/include/net/xfrm.h b/include/net/xfrm.h
3584 index aa08a7a5f6ac..fb391c00c19a 100644
3585 --- a/include/net/xfrm.h
3586 +++ b/include/net/xfrm.h
3587 @@ -1012,6 +1012,7 @@ struct xfrm_offload {
3588 #define XFRM_GRO 32
3589 #define XFRM_ESP_NO_TRAILER 64
3590 #define XFRM_DEV_RESUME 128
3591 +#define XFRM_XMIT 256
3592
3593 __u32 status;
3594 #define CRYPTO_SUCCESS 1
3595 diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c
3596 index 869e2e1860e8..b701af27a779 100644
3597 --- a/kernel/bpf/cgroup.c
3598 +++ b/kernel/bpf/cgroup.c
3599 @@ -966,16 +966,23 @@ static bool __cgroup_bpf_prog_array_is_empty(struct cgroup *cgrp,
3600
3601 static int sockopt_alloc_buf(struct bpf_sockopt_kern *ctx, int max_optlen)
3602 {
3603 - if (unlikely(max_optlen > PAGE_SIZE) || max_optlen < 0)
3604 + if (unlikely(max_optlen < 0))
3605 return -EINVAL;
3606
3607 + if (unlikely(max_optlen > PAGE_SIZE)) {
3608 + /* We don't expose optvals that are greater than PAGE_SIZE
3609 + * to the BPF program.
3610 + */
3611 + max_optlen = PAGE_SIZE;
3612 + }
3613 +
3614 ctx->optval = kzalloc(max_optlen, GFP_USER);
3615 if (!ctx->optval)
3616 return -ENOMEM;
3617
3618 ctx->optval_end = ctx->optval + max_optlen;
3619
3620 - return 0;
3621 + return max_optlen;
3622 }
3623
3624 static void sockopt_free_buf(struct bpf_sockopt_kern *ctx)
3625 @@ -1009,13 +1016,13 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock *sk, int *level,
3626 */
3627 max_optlen = max_t(int, 16, *optlen);
3628
3629 - ret = sockopt_alloc_buf(&ctx, max_optlen);
3630 - if (ret)
3631 - return ret;
3632 + max_optlen = sockopt_alloc_buf(&ctx, max_optlen);
3633 + if (max_optlen < 0)
3634 + return max_optlen;
3635
3636 ctx.optlen = *optlen;
3637
3638 - if (copy_from_user(ctx.optval, optval, *optlen) != 0) {
3639 + if (copy_from_user(ctx.optval, optval, min(*optlen, max_optlen)) != 0) {
3640 ret = -EFAULT;
3641 goto out;
3642 }
3643 @@ -1043,8 +1050,14 @@ int __cgroup_bpf_run_filter_setsockopt(struct sock *sk, int *level,
3644 /* export any potential modifications */
3645 *level = ctx.level;
3646 *optname = ctx.optname;
3647 - *optlen = ctx.optlen;
3648 - *kernel_optval = ctx.optval;
3649 +
3650 + /* optlen == 0 from BPF indicates that we should
3651 + * use original userspace data.
3652 + */
3653 + if (ctx.optlen != 0) {
3654 + *optlen = ctx.optlen;
3655 + *kernel_optval = ctx.optval;
3656 + }
3657 }
3658
3659 out:
3660 @@ -1076,12 +1089,12 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level,
3661 __cgroup_bpf_prog_array_is_empty(cgrp, BPF_CGROUP_GETSOCKOPT))
3662 return retval;
3663
3664 - ret = sockopt_alloc_buf(&ctx, max_optlen);
3665 - if (ret)
3666 - return ret;
3667 -
3668 ctx.optlen = max_optlen;
3669
3670 + max_optlen = sockopt_alloc_buf(&ctx, max_optlen);
3671 + if (max_optlen < 0)
3672 + return max_optlen;
3673 +
3674 if (!retval) {
3675 /* If kernel getsockopt finished successfully,
3676 * copy whatever was returned to the user back
3677 @@ -1095,10 +1108,8 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level,
3678 goto out;
3679 }
3680
3681 - if (ctx.optlen > max_optlen)
3682 - ctx.optlen = max_optlen;
3683 -
3684 - if (copy_from_user(ctx.optval, optval, ctx.optlen) != 0) {
3685 + if (copy_from_user(ctx.optval, optval,
3686 + min(ctx.optlen, max_optlen)) != 0) {
3687 ret = -EFAULT;
3688 goto out;
3689 }
3690 @@ -1127,10 +1138,12 @@ int __cgroup_bpf_run_filter_getsockopt(struct sock *sk, int level,
3691 goto out;
3692 }
3693
3694 - if (copy_to_user(optval, ctx.optval, ctx.optlen) ||
3695 - put_user(ctx.optlen, optlen)) {
3696 - ret = -EFAULT;
3697 - goto out;
3698 + if (ctx.optlen != 0) {
3699 + if (copy_to_user(optval, ctx.optval, ctx.optlen) ||
3700 + put_user(ctx.optlen, optlen)) {
3701 + ret = -EFAULT;
3702 + goto out;
3703 + }
3704 }
3705
3706 ret = ctx.retval;
3707 diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
3708 index b4b6b77f309c..6684696fa457 100644
3709 --- a/kernel/bpf/devmap.c
3710 +++ b/kernel/bpf/devmap.c
3711 @@ -88,12 +88,13 @@ struct bpf_dtab {
3712 static DEFINE_SPINLOCK(dev_map_lock);
3713 static LIST_HEAD(dev_map_list);
3714
3715 -static struct hlist_head *dev_map_create_hash(unsigned int entries)
3716 +static struct hlist_head *dev_map_create_hash(unsigned int entries,
3717 + int numa_node)
3718 {
3719 int i;
3720 struct hlist_head *hash;
3721
3722 - hash = kmalloc_array(entries, sizeof(*hash), GFP_KERNEL);
3723 + hash = bpf_map_area_alloc(entries * sizeof(*hash), numa_node);
3724 if (hash != NULL)
3725 for (i = 0; i < entries; i++)
3726 INIT_HLIST_HEAD(&hash[i]);
3727 @@ -151,7 +152,8 @@ static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr)
3728 INIT_LIST_HEAD(per_cpu_ptr(dtab->flush_list, cpu));
3729
3730 if (attr->map_type == BPF_MAP_TYPE_DEVMAP_HASH) {
3731 - dtab->dev_index_head = dev_map_create_hash(dtab->n_buckets);
3732 + dtab->dev_index_head = dev_map_create_hash(dtab->n_buckets,
3733 + dtab->map.numa_node);
3734 if (!dtab->dev_index_head)
3735 goto free_percpu;
3736
3737 @@ -249,7 +251,7 @@ static void dev_map_free(struct bpf_map *map)
3738 }
3739 }
3740
3741 - kfree(dtab->dev_index_head);
3742 + bpf_map_area_free(dtab->dev_index_head);
3743 } else {
3744 for (i = 0; i < dtab->map.max_entries; i++) {
3745 struct bpf_dtab_netdev *dev;
3746 diff --git a/kernel/kprobes.c b/kernel/kprobes.c
3747 index 195ecb955fcc..950a5cfd262c 100644
3748 --- a/kernel/kprobes.c
3749 +++ b/kernel/kprobes.c
3750 @@ -326,7 +326,8 @@ struct kprobe *get_kprobe(void *addr)
3751 struct kprobe *p;
3752
3753 head = &kprobe_table[hash_ptr(addr, KPROBE_HASH_BITS)];
3754 - hlist_for_each_entry_rcu(p, head, hlist) {
3755 + hlist_for_each_entry_rcu(p, head, hlist,
3756 + lockdep_is_held(&kprobe_mutex)) {
3757 if (p->addr == addr)
3758 return p;
3759 }
3760 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
3761 index 361cbc2dc966..7238ef445daf 100644
3762 --- a/kernel/sched/core.c
3763 +++ b/kernel/sched/core.c
3764 @@ -4447,7 +4447,8 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
3765 */
3766 if (dl_prio(prio)) {
3767 if (!dl_prio(p->normal_prio) ||
3768 - (pi_task && dl_entity_preempt(&pi_task->dl, &p->dl))) {
3769 + (pi_task && dl_prio(pi_task->prio) &&
3770 + dl_entity_preempt(&pi_task->dl, &p->dl))) {
3771 p->dl.dl_boosted = 1;
3772 queue_flag |= ENQUEUE_REPLENISH;
3773 } else
3774 diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
3775 index 08bdee0480b3..4cb00538a207 100644
3776 --- a/kernel/sched/deadline.c
3777 +++ b/kernel/sched/deadline.c
3778 @@ -2693,6 +2693,7 @@ void __dl_clear_params(struct task_struct *p)
3779 dl_se->dl_bw = 0;
3780 dl_se->dl_density = 0;
3781
3782 + dl_se->dl_boosted = 0;
3783 dl_se->dl_throttled = 0;
3784 dl_se->dl_yielded = 0;
3785 dl_se->dl_non_contending = 0;
3786 diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
3787 index a677aa84ccb6..eaee960153e1 100644
3788 --- a/kernel/trace/blktrace.c
3789 +++ b/kernel/trace/blktrace.c
3790 @@ -3,6 +3,9 @@
3791 * Copyright (C) 2006 Jens Axboe <axboe@kernel.dk>
3792 *
3793 */
3794 +
3795 +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
3796 +
3797 #include <linux/kernel.h>
3798 #include <linux/blkdev.h>
3799 #include <linux/blktrace_api.h>
3800 @@ -495,6 +498,16 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
3801 */
3802 strreplace(buts->name, '/', '_');
3803
3804 + /*
3805 + * bdev can be NULL, as with scsi-generic, this is a helpful as
3806 + * we can be.
3807 + */
3808 + if (q->blk_trace) {
3809 + pr_warn("Concurrent blktraces are not allowed on %s\n",
3810 + buts->name);
3811 + return -EBUSY;
3812 + }
3813 +
3814 bt = kzalloc(sizeof(*bt), GFP_KERNEL);
3815 if (!bt)
3816 return -ENOMEM;
3817 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
3818 index 4bf050fcfe3b..9a2581fe7ed5 100644
3819 --- a/kernel/trace/ring_buffer.c
3820 +++ b/kernel/trace/ring_buffer.c
3821 @@ -2358,7 +2358,7 @@ rb_update_event(struct ring_buffer_per_cpu *cpu_buffer,
3822 if (unlikely(info->add_timestamp)) {
3823 bool abs = ring_buffer_time_stamp_abs(cpu_buffer->buffer);
3824
3825 - event = rb_add_time_stamp(event, info->delta, abs);
3826 + event = rb_add_time_stamp(event, abs ? info->delta : delta, abs);
3827 length -= RB_LEN_TIME_EXTEND;
3828 delta = 0;
3829 }
3830 diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
3831 index de840de87a18..e913d41a4194 100644
3832 --- a/kernel/trace/trace_events_trigger.c
3833 +++ b/kernel/trace/trace_events_trigger.c
3834 @@ -216,11 +216,17 @@ static int event_trigger_regex_open(struct inode *inode, struct file *file)
3835
3836 static int trigger_process_regex(struct trace_event_file *file, char *buff)
3837 {
3838 - char *command, *next = buff;
3839 + char *command, *next;
3840 struct event_command *p;
3841 int ret = -EINVAL;
3842
3843 + next = buff = skip_spaces(buff);
3844 command = strsep(&next, ": \t");
3845 + if (next) {
3846 + next = skip_spaces(next);
3847 + if (!*next)
3848 + next = NULL;
3849 + }
3850 command = (command[0] != '!') ? command : command + 1;
3851
3852 mutex_lock(&trigger_cmd_mutex);
3853 @@ -630,8 +636,14 @@ event_trigger_callback(struct event_command *cmd_ops,
3854 int ret;
3855
3856 /* separate the trigger from the filter (t:n [if filter]) */
3857 - if (param && isdigit(param[0]))
3858 + if (param && isdigit(param[0])) {
3859 trigger = strsep(&param, " \t");
3860 + if (param) {
3861 + param = skip_spaces(param);
3862 + if (!*param)
3863 + param = NULL;
3864 + }
3865 + }
3866
3867 trigger_ops = cmd_ops->get_trigger_ops(cmd, trigger);
3868
3869 @@ -1368,6 +1380,11 @@ int event_enable_trigger_func(struct event_command *cmd_ops,
3870 trigger = strsep(&param, " \t");
3871 if (!trigger)
3872 return -EINVAL;
3873 + if (param) {
3874 + param = skip_spaces(param);
3875 + if (!*param)
3876 + param = NULL;
3877 + }
3878
3879 system = strsep(&trigger, ":");
3880 if (!trigger)
3881 diff --git a/lib/test_objagg.c b/lib/test_objagg.c
3882 index 72c1abfa154d..da137939a410 100644
3883 --- a/lib/test_objagg.c
3884 +++ b/lib/test_objagg.c
3885 @@ -979,10 +979,10 @@ err_check_expect_stats2:
3886 err_world2_obj_get:
3887 for (i--; i >= 0; i--)
3888 world_obj_put(&world2, objagg, hints_case->key_ids[i]);
3889 - objagg_hints_put(hints);
3890 - objagg_destroy(objagg2);
3891 i = hints_case->key_ids_count;
3892 + objagg_destroy(objagg2);
3893 err_check_expect_hints_stats:
3894 + objagg_hints_put(hints);
3895 err_hints_get:
3896 err_check_expect_stats:
3897 err_world_obj_get:
3898 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
3899 index 0d6f3ea86738..a3f4c35bb5fa 100644
3900 --- a/mm/memcontrol.c
3901 +++ b/mm/memcontrol.c
3902 @@ -2895,8 +2895,10 @@ static void memcg_schedule_kmem_cache_create(struct mem_cgroup *memcg,
3903 return;
3904
3905 cw = kmalloc(sizeof(*cw), GFP_NOWAIT | __GFP_NOWARN);
3906 - if (!cw)
3907 + if (!cw) {
3908 + css_put(&memcg->css);
3909 return;
3910 + }
3911
3912 cw->memcg = memcg;
3913 cw->cachep = cachep;
3914 diff --git a/mm/slab_common.c b/mm/slab_common.c
3915 index ade6c257d4b4..8c1ffbf7de45 100644
3916 --- a/mm/slab_common.c
3917 +++ b/mm/slab_common.c
3918 @@ -1740,7 +1740,7 @@ void kzfree(const void *p)
3919 if (unlikely(ZERO_OR_NULL_PTR(mem)))
3920 return;
3921 ks = ksize(mem);
3922 - memset(mem, 0, ks);
3923 + memzero_explicit(mem, ks);
3924 kfree(mem);
3925 }
3926 EXPORT_SYMBOL(kzfree);
3927 diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
3928 index ce2ab14ee605..cecb4223440e 100644
3929 --- a/net/bridge/br_private.h
3930 +++ b/net/bridge/br_private.h
3931 @@ -208,8 +208,8 @@ struct net_bridge_port_group {
3932 struct rcu_head rcu;
3933 struct timer_list timer;
3934 struct br_ip addr;
3935 + unsigned char eth_addr[ETH_ALEN] __aligned(2);
3936 unsigned char flags;
3937 - unsigned char eth_addr[ETH_ALEN];
3938 };
3939
3940 struct net_bridge_mdb_entry {
3941 diff --git a/net/core/dev.c b/net/core/dev.c
3942 index 204d87e7c9b1..727965565d31 100644
3943 --- a/net/core/dev.c
3944 +++ b/net/core/dev.c
3945 @@ -3832,10 +3832,12 @@ int dev_direct_xmit(struct sk_buff *skb, u16 queue_id)
3946
3947 local_bh_disable();
3948
3949 + dev_xmit_recursion_inc();
3950 HARD_TX_LOCK(dev, txq, smp_processor_id());
3951 if (!netif_xmit_frozen_or_drv_stopped(txq))
3952 ret = netdev_start_xmit(skb, dev, txq, false);
3953 HARD_TX_UNLOCK(dev, txq);
3954 + dev_xmit_recursion_dec();
3955
3956 local_bh_enable();
3957
3958 @@ -9114,6 +9116,13 @@ int register_netdevice(struct net_device *dev)
3959 rcu_barrier();
3960
3961 dev->reg_state = NETREG_UNREGISTERED;
3962 + /* We should put the kobject that hold in
3963 + * netdev_unregister_kobject(), otherwise
3964 + * the net device cannot be freed when
3965 + * driver calls free_netdev(), because the
3966 + * kobject is being hold.
3967 + */
3968 + kobject_put(&dev->dev.kobj);
3969 }
3970 /*
3971 * Prevent userspace races by waiting until the network
3972 diff --git a/net/core/sock.c b/net/core/sock.c
3973 index 0adf7a9e5a90..078791a6649a 100644
3974 --- a/net/core/sock.c
3975 +++ b/net/core/sock.c
3976 @@ -709,7 +709,7 @@ bool sk_mc_loop(struct sock *sk)
3977 return inet6_sk(sk)->mc_loop;
3978 #endif
3979 }
3980 - WARN_ON(1);
3981 + WARN_ON_ONCE(1);
3982 return true;
3983 }
3984 EXPORT_SYMBOL(sk_mc_loop);
3985 @@ -1679,6 +1679,7 @@ struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
3986 cgroup_sk_alloc(&sk->sk_cgrp_data);
3987 sock_update_classid(&sk->sk_cgrp_data);
3988 sock_update_netprioidx(&sk->sk_cgrp_data);
3989 + sk_tx_queue_clear(sk);
3990 }
3991
3992 return sk;
3993 @@ -1895,6 +1896,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
3994 */
3995 sk_refcnt_debug_inc(newsk);
3996 sk_set_socket(newsk, NULL);
3997 + sk_tx_queue_clear(newsk);
3998 RCU_INIT_POINTER(newsk->sk_wq, NULL);
3999
4000 if (newsk->sk_prot->sockets_allocated)
4001 diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
4002 index 01588eef0cee..b1b3220917ca 100644
4003 --- a/net/ipv4/fib_semantics.c
4004 +++ b/net/ipv4/fib_semantics.c
4005 @@ -1100,7 +1100,7 @@ static int fib_check_nh_v4_gw(struct net *net, struct fib_nh *nh, u32 table,
4006 if (fl4.flowi4_scope < RT_SCOPE_LINK)
4007 fl4.flowi4_scope = RT_SCOPE_LINK;
4008
4009 - if (table)
4010 + if (table && table != RT_TABLE_MAIN)
4011 tbl = fib_get_table(net, table);
4012
4013 if (tbl)
4014 diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
4015 index cd4b84310d92..a0b4dc54f8a6 100644
4016 --- a/net/ipv4/ip_tunnel.c
4017 +++ b/net/ipv4/ip_tunnel.c
4018 @@ -85,9 +85,10 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
4019 __be32 remote, __be32 local,
4020 __be32 key)
4021 {
4022 - unsigned int hash;
4023 struct ip_tunnel *t, *cand = NULL;
4024 struct hlist_head *head;
4025 + struct net_device *ndev;
4026 + unsigned int hash;
4027
4028 hash = ip_tunnel_hash(key, remote);
4029 head = &itn->tunnels[hash];
4030 @@ -162,8 +163,9 @@ struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn,
4031 if (t && t->dev->flags & IFF_UP)
4032 return t;
4033
4034 - if (itn->fb_tunnel_dev && itn->fb_tunnel_dev->flags & IFF_UP)
4035 - return netdev_priv(itn->fb_tunnel_dev);
4036 + ndev = READ_ONCE(itn->fb_tunnel_dev);
4037 + if (ndev && ndev->flags & IFF_UP)
4038 + return netdev_priv(ndev);
4039
4040 return NULL;
4041 }
4042 @@ -1245,9 +1247,9 @@ void ip_tunnel_uninit(struct net_device *dev)
4043 struct ip_tunnel_net *itn;
4044
4045 itn = net_generic(net, tunnel->ip_tnl_net_id);
4046 - /* fb_tunnel_dev will be unregisted in net-exit call. */
4047 - if (itn->fb_tunnel_dev != dev)
4048 - ip_tunnel_del(itn, netdev_priv(dev));
4049 + ip_tunnel_del(itn, netdev_priv(dev));
4050 + if (itn->fb_tunnel_dev == dev)
4051 + WRITE_ONCE(itn->fb_tunnel_dev, NULL);
4052
4053 dst_cache_reset(&tunnel->dst_cache);
4054 }
4055 diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
4056 index 1b3d032a4df2..ee6c38a73325 100644
4057 --- a/net/ipv4/tcp_cubic.c
4058 +++ b/net/ipv4/tcp_cubic.c
4059 @@ -404,6 +404,8 @@ static void hystart_update(struct sock *sk, u32 delay)
4060
4061 if (hystart_detect & HYSTART_DELAY) {
4062 /* obtain the minimum delay of more than sampling packets */
4063 + if (ca->curr_rtt > delay)
4064 + ca->curr_rtt = delay;
4065 if (ca->sample_cnt < HYSTART_MIN_SAMPLES) {
4066 if (ca->curr_rtt == 0 || ca->curr_rtt > delay)
4067 ca->curr_rtt = delay;
4068 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
4069 index 677facbeed26..3e63dc9c3eba 100644
4070 --- a/net/ipv4/tcp_input.c
4071 +++ b/net/ipv4/tcp_input.c
4072 @@ -260,7 +260,8 @@ static void tcp_ecn_accept_cwr(struct sock *sk, const struct sk_buff *skb)
4073 * cwnd may be very low (even just 1 packet), so we should ACK
4074 * immediately.
4075 */
4076 - inet_csk(sk)->icsk_ack.pending |= ICSK_ACK_NOW;
4077 + if (TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq)
4078 + inet_csk(sk)->icsk_ack.pending |= ICSK_ACK_NOW;
4079 }
4080 }
4081
4082 @@ -3682,6 +3683,15 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
4083 tcp_in_ack_event(sk, ack_ev_flags);
4084 }
4085
4086 + /* This is a deviation from RFC3168 since it states that:
4087 + * "When the TCP data sender is ready to set the CWR bit after reducing
4088 + * the congestion window, it SHOULD set the CWR bit only on the first
4089 + * new data packet that it transmits."
4090 + * We accept CWR on pure ACKs to be more robust
4091 + * with widely-deployed TCP implementations that do this.
4092 + */
4093 + tcp_ecn_accept_cwr(sk, skb);
4094 +
4095 /* We passed data and got it acked, remove any soft error
4096 * log. Something worked...
4097 */
4098 @@ -4587,7 +4597,11 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
4099 if (tcp_ooo_try_coalesce(sk, tp->ooo_last_skb,
4100 skb, &fragstolen)) {
4101 coalesce_done:
4102 - tcp_grow_window(sk, skb);
4103 + /* For non sack flows, do not grow window to force DUPACK
4104 + * and trigger fast retransmit.
4105 + */
4106 + if (tcp_is_sack(tp))
4107 + tcp_grow_window(sk, skb);
4108 kfree_skb_partial(skb, fragstolen);
4109 skb = NULL;
4110 goto add_sack;
4111 @@ -4671,7 +4685,11 @@ add_sack:
4112 tcp_sack_new_ofo_skb(sk, seq, end_seq);
4113 end:
4114 if (skb) {
4115 - tcp_grow_window(sk, skb);
4116 + /* For non sack flows, do not grow window to force DUPACK
4117 + * and trigger fast retransmit.
4118 + */
4119 + if (tcp_is_sack(tp))
4120 + tcp_grow_window(sk, skb);
4121 skb_condense(skb);
4122 skb_set_owner_r(skb, sk);
4123 }
4124 @@ -4771,8 +4789,6 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
4125 skb_dst_drop(skb);
4126 __skb_pull(skb, tcp_hdr(skb)->doff * 4);
4127
4128 - tcp_ecn_accept_cwr(sk, skb);
4129 -
4130 tp->rx_opt.dsack = 0;
4131
4132 /* Queue data for delivery to the user.
4133 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
4134 index 9ec05a1df5e1..04d76f043e18 100644
4135 --- a/net/ipv6/ip6_gre.c
4136 +++ b/net/ipv6/ip6_gre.c
4137 @@ -127,6 +127,7 @@ static struct ip6_tnl *ip6gre_tunnel_lookup(struct net_device *dev,
4138 gre_proto == htons(ETH_P_ERSPAN2)) ?
4139 ARPHRD_ETHER : ARPHRD_IP6GRE;
4140 int score, cand_score = 4;
4141 + struct net_device *ndev;
4142
4143 for_each_ip_tunnel_rcu(t, ign->tunnels_r_l[h0 ^ h1]) {
4144 if (!ipv6_addr_equal(local, &t->parms.laddr) ||
4145 @@ -238,9 +239,9 @@ static struct ip6_tnl *ip6gre_tunnel_lookup(struct net_device *dev,
4146 if (t && t->dev->flags & IFF_UP)
4147 return t;
4148
4149 - dev = ign->fb_tunnel_dev;
4150 - if (dev && dev->flags & IFF_UP)
4151 - return netdev_priv(dev);
4152 + ndev = READ_ONCE(ign->fb_tunnel_dev);
4153 + if (ndev && ndev->flags & IFF_UP)
4154 + return netdev_priv(ndev);
4155
4156 return NULL;
4157 }
4158 @@ -413,6 +414,8 @@ static void ip6gre_tunnel_uninit(struct net_device *dev)
4159
4160 ip6gre_tunnel_unlink_md(ign, t);
4161 ip6gre_tunnel_unlink(ign, t);
4162 + if (ign->fb_tunnel_dev == dev)
4163 + WRITE_ONCE(ign->fb_tunnel_dev, NULL);
4164 dst_cache_reset(&t->dst_cache);
4165 dev_put(dev);
4166 }
4167 diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
4168 index eaa4c2cc2fbb..c875c9b6edbe 100644
4169 --- a/net/ipv6/mcast.c
4170 +++ b/net/ipv6/mcast.c
4171 @@ -2618,6 +2618,7 @@ void ipv6_mc_destroy_dev(struct inet6_dev *idev)
4172 idev->mc_list = i->next;
4173
4174 write_unlock_bh(&idev->lock);
4175 + ip6_mc_clear_src(i);
4176 ma_put(i);
4177 write_lock_bh(&idev->lock);
4178 }
4179 diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
4180 index 75da200aa5d8..133a3f1b6f56 100644
4181 --- a/net/netfilter/ipset/ip_set_core.c
4182 +++ b/net/netfilter/ipset/ip_set_core.c
4183 @@ -382,6 +382,8 @@ ip_set_elem_len(struct ip_set *set, struct nlattr *tb[], size_t len,
4184 for (id = 0; id < IPSET_EXT_ID_MAX; id++) {
4185 if (!add_extension(id, cadt_flags, tb))
4186 continue;
4187 + if (align < ip_set_extensions[id].align)
4188 + align = ip_set_extensions[id].align;
4189 len = ALIGN(len, ip_set_extensions[id].align);
4190 set->offset[id] = len;
4191 set->extensions |= ip_set_extensions[id].type;
4192 diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
4193 index 99352f09deaa..3d96dab10449 100644
4194 --- a/net/openvswitch/actions.c
4195 +++ b/net/openvswitch/actions.c
4196 @@ -1146,9 +1146,10 @@ static int execute_check_pkt_len(struct datapath *dp, struct sk_buff *skb,
4197 struct sw_flow_key *key,
4198 const struct nlattr *attr, bool last)
4199 {
4200 + struct ovs_skb_cb *ovs_cb = OVS_CB(skb);
4201 const struct nlattr *actions, *cpl_arg;
4202 + int len, max_len, rem = nla_len(attr);
4203 const struct check_pkt_len_arg *arg;
4204 - int rem = nla_len(attr);
4205 bool clone_flow_key;
4206
4207 /* The first netlink attribute in 'attr' is always
4208 @@ -1157,7 +1158,11 @@ static int execute_check_pkt_len(struct datapath *dp, struct sk_buff *skb,
4209 cpl_arg = nla_data(attr);
4210 arg = nla_data(cpl_arg);
4211
4212 - if (skb->len <= arg->pkt_len) {
4213 + len = ovs_cb->mru ? ovs_cb->mru + skb->mac_len : skb->len;
4214 + max_len = arg->pkt_len;
4215 +
4216 + if ((skb_is_gso(skb) && skb_gso_validate_mac_len(skb, max_len)) ||
4217 + len <= max_len) {
4218 /* Second netlink attribute in 'attr' is always
4219 * 'OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL'.
4220 */
4221 diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
4222 index b7611cc159e5..032ed76c0166 100644
4223 --- a/net/rxrpc/call_accept.c
4224 +++ b/net/rxrpc/call_accept.c
4225 @@ -22,6 +22,11 @@
4226 #include <net/ip.h>
4227 #include "ar-internal.h"
4228
4229 +static void rxrpc_dummy_notify(struct sock *sk, struct rxrpc_call *call,
4230 + unsigned long user_call_ID)
4231 +{
4232 +}
4233 +
4234 /*
4235 * Preallocate a single service call, connection and peer and, if possible,
4236 * give them a user ID and attach the user's side of the ID to them.
4237 @@ -228,6 +233,8 @@ void rxrpc_discard_prealloc(struct rxrpc_sock *rx)
4238 if (rx->discard_new_call) {
4239 _debug("discard %lx", call->user_call_ID);
4240 rx->discard_new_call(call, call->user_call_ID);
4241 + if (call->notify_rx)
4242 + call->notify_rx = rxrpc_dummy_notify;
4243 rxrpc_put_call(call, rxrpc_call_put_kernel);
4244 }
4245 rxrpc_call_completed(call);
4246 diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
4247 index 3be4177baf70..22dec6049e1b 100644
4248 --- a/net/rxrpc/input.c
4249 +++ b/net/rxrpc/input.c
4250 @@ -723,13 +723,12 @@ static void rxrpc_input_ackinfo(struct rxrpc_call *call, struct sk_buff *skb,
4251 ntohl(ackinfo->rxMTU), ntohl(ackinfo->maxMTU),
4252 rwind, ntohl(ackinfo->jumbo_max));
4253
4254 + if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
4255 + rwind = RXRPC_RXTX_BUFF_SIZE - 1;
4256 if (call->tx_winsize != rwind) {
4257 - if (rwind > RXRPC_RXTX_BUFF_SIZE - 1)
4258 - rwind = RXRPC_RXTX_BUFF_SIZE - 1;
4259 if (rwind > call->tx_winsize)
4260 wake = true;
4261 - trace_rxrpc_rx_rwind_change(call, sp->hdr.serial,
4262 - ntohl(ackinfo->rwind), wake);
4263 + trace_rxrpc_rx_rwind_change(call, sp->hdr.serial, rwind, wake);
4264 call->tx_winsize = rwind;
4265 }
4266
4267 diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
4268 index 2277369feae5..5d605bab9afc 100644
4269 --- a/net/sched/sch_cake.c
4270 +++ b/net/sched/sch_cake.c
4271 @@ -1515,32 +1515,51 @@ static unsigned int cake_drop(struct Qdisc *sch, struct sk_buff **to_free)
4272 return idx + (tin << 16);
4273 }
4274
4275 -static u8 cake_handle_diffserv(struct sk_buff *skb, u16 wash)
4276 +static u8 cake_handle_diffserv(struct sk_buff *skb, bool wash)
4277 {
4278 - int wlen = skb_network_offset(skb);
4279 + const int offset = skb_network_offset(skb);
4280 + u16 *buf, buf_;
4281 u8 dscp;
4282
4283 switch (tc_skb_protocol(skb)) {
4284 case htons(ETH_P_IP):
4285 - wlen += sizeof(struct iphdr);
4286 - if (!pskb_may_pull(skb, wlen) ||
4287 - skb_try_make_writable(skb, wlen))
4288 + buf = skb_header_pointer(skb, offset, sizeof(buf_), &buf_);
4289 + if (unlikely(!buf))
4290 return 0;
4291
4292 - dscp = ipv4_get_dsfield(ip_hdr(skb)) >> 2;
4293 - if (wash && dscp)
4294 + /* ToS is in the second byte of iphdr */
4295 + dscp = ipv4_get_dsfield((struct iphdr *)buf) >> 2;
4296 +
4297 + if (wash && dscp) {
4298 + const int wlen = offset + sizeof(struct iphdr);
4299 +
4300 + if (!pskb_may_pull(skb, wlen) ||
4301 + skb_try_make_writable(skb, wlen))
4302 + return 0;
4303 +
4304 ipv4_change_dsfield(ip_hdr(skb), INET_ECN_MASK, 0);
4305 + }
4306 +
4307 return dscp;
4308
4309 case htons(ETH_P_IPV6):
4310 - wlen += sizeof(struct ipv6hdr);
4311 - if (!pskb_may_pull(skb, wlen) ||
4312 - skb_try_make_writable(skb, wlen))
4313 + buf = skb_header_pointer(skb, offset, sizeof(buf_), &buf_);
4314 + if (unlikely(!buf))
4315 return 0;
4316
4317 - dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> 2;
4318 - if (wash && dscp)
4319 + /* Traffic class is in the first and second bytes of ipv6hdr */
4320 + dscp = ipv6_get_dsfield((struct ipv6hdr *)buf) >> 2;
4321 +
4322 + if (wash && dscp) {
4323 + const int wlen = offset + sizeof(struct ipv6hdr);
4324 +
4325 + if (!pskb_may_pull(skb, wlen) ||
4326 + skb_try_make_writable(skb, wlen))
4327 + return 0;
4328 +
4329 ipv6_change_dsfield(ipv6_hdr(skb), INET_ECN_MASK, 0);
4330 + }
4331 +
4332 return dscp;
4333
4334 case htons(ETH_P_ARP):
4335 @@ -1557,14 +1576,17 @@ static struct cake_tin_data *cake_select_tin(struct Qdisc *sch,
4336 {
4337 struct cake_sched_data *q = qdisc_priv(sch);
4338 u32 tin, mark;
4339 + bool wash;
4340 u8 dscp;
4341
4342 /* Tin selection: Default to diffserv-based selection, allow overriding
4343 - * using firewall marks or skb->priority.
4344 + * using firewall marks or skb->priority. Call DSCP parsing early if
4345 + * wash is enabled, otherwise defer to below to skip unneeded parsing.
4346 */
4347 - dscp = cake_handle_diffserv(skb,
4348 - q->rate_flags & CAKE_FLAG_WASH);
4349 mark = (skb->mark & q->fwmark_mask) >> q->fwmark_shft;
4350 + wash = !!(q->rate_flags & CAKE_FLAG_WASH);
4351 + if (wash)
4352 + dscp = cake_handle_diffserv(skb, wash);
4353
4354 if (q->tin_mode == CAKE_DIFFSERV_BESTEFFORT)
4355 tin = 0;
4356 @@ -1578,6 +1600,8 @@ static struct cake_tin_data *cake_select_tin(struct Qdisc *sch,
4357 tin = q->tin_order[TC_H_MIN(skb->priority) - 1];
4358
4359 else {
4360 + if (!wash)
4361 + dscp = cake_handle_diffserv(skb, wash);
4362 tin = q->tin_index[dscp];
4363
4364 if (unlikely(tin >= q->tin_cnt))
4365 @@ -2679,7 +2703,7 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt,
4366 qdisc_watchdog_init(&q->watchdog, sch);
4367
4368 if (opt) {
4369 - int err = cake_change(sch, opt, extack);
4370 + err = cake_change(sch, opt, extack);
4371
4372 if (err)
4373 return err;
4374 @@ -2996,7 +3020,7 @@ static int cake_dump_class_stats(struct Qdisc *sch, unsigned long cl,
4375 PUT_STAT_S32(BLUE_TIMER_US,
4376 ktime_to_us(
4377 ktime_sub(now,
4378 - flow->cvars.blue_timer)));
4379 + flow->cvars.blue_timer)));
4380 }
4381 if (flow->cvars.dropping) {
4382 PUT_STAT_S32(DROP_NEXT_US,
4383 diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
4384 index 7c3c5fdb82a9..896c9037155a 100644
4385 --- a/net/sched/sch_generic.c
4386 +++ b/net/sched/sch_generic.c
4387 @@ -469,6 +469,7 @@ void __netdev_watchdog_up(struct net_device *dev)
4388 dev_hold(dev);
4389 }
4390 }
4391 +EXPORT_SYMBOL_GPL(__netdev_watchdog_up);
4392
4393 static void dev_watchdog_up(struct net_device *dev)
4394 {
4395 diff --git a/net/sctp/associola.c b/net/sctp/associola.c
4396 index 41839b85c268..fb6f62264e87 100644
4397 --- a/net/sctp/associola.c
4398 +++ b/net/sctp/associola.c
4399 @@ -1569,12 +1569,15 @@ void sctp_assoc_rwnd_decrease(struct sctp_association *asoc, unsigned int len)
4400 int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc,
4401 enum sctp_scope scope, gfp_t gfp)
4402 {
4403 + struct sock *sk = asoc->base.sk;
4404 int flags;
4405
4406 /* Use scoping rules to determine the subset of addresses from
4407 * the endpoint.
4408 */
4409 - flags = (PF_INET6 == asoc->base.sk->sk_family) ? SCTP_ADDR6_ALLOWED : 0;
4410 + flags = (PF_INET6 == sk->sk_family) ? SCTP_ADDR6_ALLOWED : 0;
4411 + if (!inet_v6_ipv6only(sk))
4412 + flags |= SCTP_ADDR4_ALLOWED;
4413 if (asoc->peer.ipv4_address)
4414 flags |= SCTP_ADDR4_PEERSUPP;
4415 if (asoc->peer.ipv6_address)
4416 diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c
4417 index 53bc61537f44..701c5a4e441d 100644
4418 --- a/net/sctp/bind_addr.c
4419 +++ b/net/sctp/bind_addr.c
4420 @@ -461,6 +461,7 @@ static int sctp_copy_one_addr(struct net *net, struct sctp_bind_addr *dest,
4421 * well as the remote peer.
4422 */
4423 if ((((AF_INET == addr->sa.sa_family) &&
4424 + (flags & SCTP_ADDR4_ALLOWED) &&
4425 (flags & SCTP_ADDR4_PEERSUPP))) ||
4426 (((AF_INET6 == addr->sa.sa_family) &&
4427 (flags & SCTP_ADDR6_ALLOWED) &&
4428 diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
4429 index 237c88eeb538..981c7cbca46a 100644
4430 --- a/net/sctp/protocol.c
4431 +++ b/net/sctp/protocol.c
4432 @@ -148,7 +148,8 @@ int sctp_copy_local_addr_list(struct net *net, struct sctp_bind_addr *bp,
4433 * sock as well as the remote peer.
4434 */
4435 if (addr->a.sa.sa_family == AF_INET &&
4436 - !(copy_flags & SCTP_ADDR4_PEERSUPP))
4437 + (!(copy_flags & SCTP_ADDR4_ALLOWED) ||
4438 + !(copy_flags & SCTP_ADDR4_PEERSUPP)))
4439 continue;
4440 if (addr->a.sa.sa_family == AF_INET6 &&
4441 (!(copy_flags & SCTP_ADDR6_ALLOWED) ||
4442 diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
4443 index b71a39ded930..37792675ed57 100644
4444 --- a/net/sunrpc/rpc_pipe.c
4445 +++ b/net/sunrpc/rpc_pipe.c
4446 @@ -1317,6 +1317,7 @@ rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data)
4447 q.len = strlen(gssd_dummy_clnt_dir[0].name);
4448 clnt_dentry = d_hash_and_lookup(gssd_dentry, &q);
4449 if (!clnt_dentry) {
4450 + __rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1);
4451 pipe_dentry = ERR_PTR(-ENOENT);
4452 goto out;
4453 }
4454 diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
4455 index 451ca7ec321c..7ef37054071f 100644
4456 --- a/net/sunrpc/xdr.c
4457 +++ b/net/sunrpc/xdr.c
4458 @@ -1118,6 +1118,7 @@ xdr_buf_subsegment(struct xdr_buf *buf, struct xdr_buf *subbuf,
4459 base = 0;
4460 } else {
4461 base -= buf->head[0].iov_len;
4462 + subbuf->head[0].iov_base = buf->head[0].iov_base;
4463 subbuf->head[0].iov_len = 0;
4464 }
4465
4466 @@ -1130,6 +1131,8 @@ xdr_buf_subsegment(struct xdr_buf *buf, struct xdr_buf *subbuf,
4467 base = 0;
4468 } else {
4469 base -= buf->page_len;
4470 + subbuf->pages = buf->pages;
4471 + subbuf->page_base = 0;
4472 subbuf->page_len = 0;
4473 }
4474
4475 @@ -1141,6 +1144,7 @@ xdr_buf_subsegment(struct xdr_buf *buf, struct xdr_buf *subbuf,
4476 base = 0;
4477 } else {
4478 base -= buf->tail[0].iov_len;
4479 + subbuf->tail[0].iov_base = buf->tail[0].iov_base;
4480 subbuf->tail[0].iov_len = 0;
4481 }
4482
4483 diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
4484 index ef5102b60589..c56e6cfc4a62 100644
4485 --- a/net/sunrpc/xprtrdma/rpc_rdma.c
4486 +++ b/net/sunrpc/xprtrdma/rpc_rdma.c
4487 @@ -1246,8 +1246,7 @@ rpcrdma_decode_error(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep,
4488 be32_to_cpup(p), be32_to_cpu(rep->rr_xid));
4489 }
4490
4491 - r_xprt->rx_stats.bad_reply_count++;
4492 - return -EREMOTEIO;
4493 + return -EIO;
4494 }
4495
4496 /* Perform XID lookup, reconstruction of the RPC reply, and
4497 @@ -1284,13 +1283,11 @@ out:
4498 spin_unlock(&xprt->queue_lock);
4499 return;
4500
4501 -/* If the incoming reply terminated a pending RPC, the next
4502 - * RPC call will post a replacement receive buffer as it is
4503 - * being marshaled.
4504 - */
4505 out_badheader:
4506 trace_xprtrdma_reply_hdr(rep);
4507 r_xprt->rx_stats.bad_reply_count++;
4508 + rqst->rq_task->tk_status = status;
4509 + status = 0;
4510 goto out;
4511 }
4512
4513 diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c
4514 index c365b918be35..bb2292b5260c 100644
4515 --- a/net/xfrm/xfrm_device.c
4516 +++ b/net/xfrm/xfrm_device.c
4517 @@ -82,7 +82,7 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur
4518 struct xfrm_offload *xo = xfrm_offload(skb);
4519 struct sec_path *sp;
4520
4521 - if (!xo)
4522 + if (!xo || (xo->flags & XFRM_XMIT))
4523 return skb;
4524
4525 if (!(features & NETIF_F_HW_ESP))
4526 @@ -103,6 +103,8 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur
4527 return skb;
4528 }
4529
4530 + xo->flags |= XFRM_XMIT;
4531 +
4532 if (skb_is_gso(skb)) {
4533 struct net_device *dev = skb->dev;
4534
4535 diff --git a/samples/bpf/xdp_monitor_user.c b/samples/bpf/xdp_monitor_user.c
4536 index dd558cbb2309..ef53b93db573 100644
4537 --- a/samples/bpf/xdp_monitor_user.c
4538 +++ b/samples/bpf/xdp_monitor_user.c
4539 @@ -509,11 +509,8 @@ static void *alloc_rec_per_cpu(int record_size)
4540 {
4541 unsigned int nr_cpus = bpf_num_possible_cpus();
4542 void *array;
4543 - size_t size;
4544
4545 - size = record_size * nr_cpus;
4546 - array = malloc(size);
4547 - memset(array, 0, size);
4548 + array = calloc(nr_cpus, record_size);
4549 if (!array) {
4550 fprintf(stderr, "Mem alloc error (nr_cpus:%u)\n", nr_cpus);
4551 exit(EXIT_FAIL_MEM);
4552 @@ -528,8 +525,7 @@ static struct stats_record *alloc_stats_record(void)
4553 int i;
4554
4555 /* Alloc main stats_record structure */
4556 - rec = malloc(sizeof(*rec));
4557 - memset(rec, 0, sizeof(*rec));
4558 + rec = calloc(1, sizeof(*rec));
4559 if (!rec) {
4560 fprintf(stderr, "Mem alloc error\n");
4561 exit(EXIT_FAIL_MEM);
4562 diff --git a/samples/bpf/xdp_redirect_cpu_kern.c b/samples/bpf/xdp_redirect_cpu_kern.c
4563 index cfcc31e51197..d94a999b4b4b 100644
4564 --- a/samples/bpf/xdp_redirect_cpu_kern.c
4565 +++ b/samples/bpf/xdp_redirect_cpu_kern.c
4566 @@ -15,7 +15,7 @@
4567 #include "bpf_helpers.h"
4568 #include "hash_func01.h"
4569
4570 -#define MAX_CPUS 64 /* WARNING - sync with _user.c */
4571 +#define MAX_CPUS NR_CPUS
4572
4573 /* Special map type that can XDP_REDIRECT frames to another CPU */
4574 struct {
4575 diff --git a/samples/bpf/xdp_redirect_cpu_user.c b/samples/bpf/xdp_redirect_cpu_user.c
4576 index 8b862a7a6c6a..0a7672556822 100644
4577 --- a/samples/bpf/xdp_redirect_cpu_user.c
4578 +++ b/samples/bpf/xdp_redirect_cpu_user.c
4579 @@ -13,6 +13,7 @@ static const char *__doc__ =
4580 #include <unistd.h>
4581 #include <locale.h>
4582 #include <sys/resource.h>
4583 +#include <sys/sysinfo.h>
4584 #include <getopt.h>
4585 #include <net/if.h>
4586 #include <time.h>
4587 @@ -24,8 +25,6 @@ static const char *__doc__ =
4588 #include <arpa/inet.h>
4589 #include <linux/if_link.h>
4590
4591 -#define MAX_CPUS 64 /* WARNING - sync with _kern.c */
4592 -
4593 /* How many xdp_progs are defined in _kern.c */
4594 #define MAX_PROG 6
4595
4596 @@ -40,6 +39,7 @@ static char *ifname;
4597 static __u32 prog_id;
4598
4599 static __u32 xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST;
4600 +static int n_cpus;
4601 static int cpu_map_fd;
4602 static int rx_cnt_map_fd;
4603 static int redirect_err_cnt_map_fd;
4604 @@ -170,7 +170,7 @@ struct stats_record {
4605 struct record redir_err;
4606 struct record kthread;
4607 struct record exception;
4608 - struct record enq[MAX_CPUS];
4609 + struct record enq[];
4610 };
4611
4612 static bool map_collect_percpu(int fd, __u32 key, struct record *rec)
4613 @@ -210,11 +210,8 @@ static struct datarec *alloc_record_per_cpu(void)
4614 {
4615 unsigned int nr_cpus = bpf_num_possible_cpus();
4616 struct datarec *array;
4617 - size_t size;
4618
4619 - size = sizeof(struct datarec) * nr_cpus;
4620 - array = malloc(size);
4621 - memset(array, 0, size);
4622 + array = calloc(nr_cpus, sizeof(struct datarec));
4623 if (!array) {
4624 fprintf(stderr, "Mem alloc error (nr_cpus:%u)\n", nr_cpus);
4625 exit(EXIT_FAIL_MEM);
4626 @@ -225,19 +222,20 @@ static struct datarec *alloc_record_per_cpu(void)
4627 static struct stats_record *alloc_stats_record(void)
4628 {
4629 struct stats_record *rec;
4630 - int i;
4631 + int i, size;
4632
4633 - rec = malloc(sizeof(*rec));
4634 - memset(rec, 0, sizeof(*rec));
4635 + size = sizeof(*rec) + n_cpus * sizeof(struct record);
4636 + rec = malloc(size);
4637 if (!rec) {
4638 fprintf(stderr, "Mem alloc error\n");
4639 exit(EXIT_FAIL_MEM);
4640 }
4641 + memset(rec, 0, size);
4642 rec->rx_cnt.cpu = alloc_record_per_cpu();
4643 rec->redir_err.cpu = alloc_record_per_cpu();
4644 rec->kthread.cpu = alloc_record_per_cpu();
4645 rec->exception.cpu = alloc_record_per_cpu();
4646 - for (i = 0; i < MAX_CPUS; i++)
4647 + for (i = 0; i < n_cpus; i++)
4648 rec->enq[i].cpu = alloc_record_per_cpu();
4649
4650 return rec;
4651 @@ -247,7 +245,7 @@ static void free_stats_record(struct stats_record *r)
4652 {
4653 int i;
4654
4655 - for (i = 0; i < MAX_CPUS; i++)
4656 + for (i = 0; i < n_cpus; i++)
4657 free(r->enq[i].cpu);
4658 free(r->exception.cpu);
4659 free(r->kthread.cpu);
4660 @@ -350,7 +348,7 @@ static void stats_print(struct stats_record *stats_rec,
4661 }
4662
4663 /* cpumap enqueue stats */
4664 - for (to_cpu = 0; to_cpu < MAX_CPUS; to_cpu++) {
4665 + for (to_cpu = 0; to_cpu < n_cpus; to_cpu++) {
4666 char *fmt = "%-15s %3d:%-3d %'-14.0f %'-11.0f %'-10.2f %s\n";
4667 char *fm2 = "%-15s %3s:%-3d %'-14.0f %'-11.0f %'-10.2f %s\n";
4668 char *errstr = "";
4669 @@ -475,7 +473,7 @@ static void stats_collect(struct stats_record *rec)
4670 map_collect_percpu(fd, 1, &rec->redir_err);
4671
4672 fd = cpumap_enqueue_cnt_map_fd;
4673 - for (i = 0; i < MAX_CPUS; i++)
4674 + for (i = 0; i < n_cpus; i++)
4675 map_collect_percpu(fd, i, &rec->enq[i]);
4676
4677 fd = cpumap_kthread_cnt_map_fd;
4678 @@ -549,10 +547,10 @@ static int create_cpu_entry(__u32 cpu, __u32 queue_size,
4679 */
4680 static void mark_cpus_unavailable(void)
4681 {
4682 - __u32 invalid_cpu = MAX_CPUS;
4683 + __u32 invalid_cpu = n_cpus;
4684 int ret, i;
4685
4686 - for (i = 0; i < MAX_CPUS; i++) {
4687 + for (i = 0; i < n_cpus; i++) {
4688 ret = bpf_map_update_elem(cpus_available_map_fd, &i,
4689 &invalid_cpu, 0);
4690 if (ret) {
4691 @@ -688,6 +686,8 @@ int main(int argc, char **argv)
4692 int prog_fd;
4693 __u32 qsize;
4694
4695 + n_cpus = get_nprocs_conf();
4696 +
4697 /* Notice: choosing he queue size is very important with the
4698 * ixgbe driver, because it's driver page recycling trick is
4699 * dependend on pages being returned quickly. The number of
4700 @@ -757,7 +757,7 @@ int main(int argc, char **argv)
4701 case 'c':
4702 /* Add multiple CPUs */
4703 add_cpu = strtoul(optarg, NULL, 0);
4704 - if (add_cpu >= MAX_CPUS) {
4705 + if (add_cpu >= n_cpus) {
4706 fprintf(stderr,
4707 "--cpu nr too large for cpumap err(%d):%s\n",
4708 errno, strerror(errno));
4709 diff --git a/samples/bpf/xdp_rxq_info_user.c b/samples/bpf/xdp_rxq_info_user.c
4710 index b88df17853b8..21d6e5067a83 100644
4711 --- a/samples/bpf/xdp_rxq_info_user.c
4712 +++ b/samples/bpf/xdp_rxq_info_user.c
4713 @@ -198,11 +198,8 @@ static struct datarec *alloc_record_per_cpu(void)
4714 {
4715 unsigned int nr_cpus = bpf_num_possible_cpus();
4716 struct datarec *array;
4717 - size_t size;
4718
4719 - size = sizeof(struct datarec) * nr_cpus;
4720 - array = malloc(size);
4721 - memset(array, 0, size);
4722 + array = calloc(nr_cpus, sizeof(struct datarec));
4723 if (!array) {
4724 fprintf(stderr, "Mem alloc error (nr_cpus:%u)\n", nr_cpus);
4725 exit(EXIT_FAIL_MEM);
4726 @@ -214,11 +211,8 @@ static struct record *alloc_record_per_rxq(void)
4727 {
4728 unsigned int nr_rxqs = bpf_map__def(rx_queue_index_map)->max_entries;
4729 struct record *array;
4730 - size_t size;
4731
4732 - size = sizeof(struct record) * nr_rxqs;
4733 - array = malloc(size);
4734 - memset(array, 0, size);
4735 + array = calloc(nr_rxqs, sizeof(struct record));
4736 if (!array) {
4737 fprintf(stderr, "Mem alloc error (nr_rxqs:%u)\n", nr_rxqs);
4738 exit(EXIT_FAIL_MEM);
4739 @@ -232,8 +226,7 @@ static struct stats_record *alloc_stats_record(void)
4740 struct stats_record *rec;
4741 int i;
4742
4743 - rec = malloc(sizeof(*rec));
4744 - memset(rec, 0, sizeof(*rec));
4745 + rec = calloc(1, sizeof(struct stats_record));
4746 if (!rec) {
4747 fprintf(stderr, "Mem alloc error\n");
4748 exit(EXIT_FAIL_MEM);
4749 diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
4750 index d1dd4a6b6adb..7da10afc92c6 100644
4751 --- a/scripts/Kbuild.include
4752 +++ b/scripts/Kbuild.include
4753 @@ -82,20 +82,21 @@ cc-cross-prefix = $(firstword $(foreach c, $(1), \
4754 $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c))))
4755
4756 # output directory for tests below
4757 -TMPOUT := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/)
4758 +TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$
4759
4760 # try-run
4761 # Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
4762 # Exit code chooses option. "$$TMP" serves as a temporary file and is
4763 # automatically cleaned up.
4764 try-run = $(shell set -e; \
4765 - TMP="$(TMPOUT).$$$$.tmp"; \
4766 - TMPO="$(TMPOUT).$$$$.o"; \
4767 + TMP=$(TMPOUT)/tmp; \
4768 + TMPO=$(TMPOUT)/tmp.o; \
4769 + mkdir -p $(TMPOUT); \
4770 + trap "rm -rf $(TMPOUT)" EXIT; \
4771 if ($(1)) >/dev/null 2>&1; \
4772 then echo "$(2)"; \
4773 else echo "$(3)"; \
4774 - fi; \
4775 - rm -f "$$TMP" "$$TMPO")
4776 + fi)
4777
4778 # as-option
4779 # Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
4780 diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
4781 index 74eab03e31d4..f9b19524da11 100644
4782 --- a/scripts/recordmcount.h
4783 +++ b/scripts/recordmcount.h
4784 @@ -29,6 +29,11 @@
4785 #undef has_rel_mcount
4786 #undef tot_relsize
4787 #undef get_mcountsym
4788 +#undef find_symtab
4789 +#undef get_shnum
4790 +#undef set_shnum
4791 +#undef get_shstrndx
4792 +#undef get_symindex
4793 #undef get_sym_str_and_relp
4794 #undef do_func
4795 #undef Elf_Addr
4796 @@ -58,6 +63,11 @@
4797 # define __has_rel_mcount __has64_rel_mcount
4798 # define has_rel_mcount has64_rel_mcount
4799 # define tot_relsize tot64_relsize
4800 +# define find_symtab find_symtab64
4801 +# define get_shnum get_shnum64
4802 +# define set_shnum set_shnum64
4803 +# define get_shstrndx get_shstrndx64
4804 +# define get_symindex get_symindex64
4805 # define get_sym_str_and_relp get_sym_str_and_relp_64
4806 # define do_func do64
4807 # define get_mcountsym get_mcountsym_64
4808 @@ -91,6 +101,11 @@
4809 # define __has_rel_mcount __has32_rel_mcount
4810 # define has_rel_mcount has32_rel_mcount
4811 # define tot_relsize tot32_relsize
4812 +# define find_symtab find_symtab32
4813 +# define get_shnum get_shnum32
4814 +# define set_shnum set_shnum32
4815 +# define get_shstrndx get_shstrndx32
4816 +# define get_symindex get_symindex32
4817 # define get_sym_str_and_relp get_sym_str_and_relp_32
4818 # define do_func do32
4819 # define get_mcountsym get_mcountsym_32
4820 @@ -173,6 +188,67 @@ static int MIPS_is_fake_mcount(Elf_Rel const *rp)
4821 return is_fake;
4822 }
4823
4824 +static unsigned int get_symindex(Elf_Sym const *sym, Elf32_Word const *symtab,
4825 + Elf32_Word const *symtab_shndx)
4826 +{
4827 + unsigned long offset;
4828 + int index;
4829 +
4830 + if (sym->st_shndx != SHN_XINDEX)
4831 + return w2(sym->st_shndx);
4832 +
4833 + offset = (unsigned long)sym - (unsigned long)symtab;
4834 + index = offset / sizeof(*sym);
4835 +
4836 + return w(symtab_shndx[index]);
4837 +}
4838 +
4839 +static unsigned int get_shnum(Elf_Ehdr const *ehdr, Elf_Shdr const *shdr0)
4840 +{
4841 + if (shdr0 && !ehdr->e_shnum)
4842 + return w(shdr0->sh_size);
4843 +
4844 + return w2(ehdr->e_shnum);
4845 +}
4846 +
4847 +static void set_shnum(Elf_Ehdr *ehdr, Elf_Shdr *shdr0, unsigned int new_shnum)
4848 +{
4849 + if (new_shnum >= SHN_LORESERVE) {
4850 + ehdr->e_shnum = 0;
4851 + shdr0->sh_size = w(new_shnum);
4852 + } else
4853 + ehdr->e_shnum = w2(new_shnum);
4854 +}
4855 +
4856 +static int get_shstrndx(Elf_Ehdr const *ehdr, Elf_Shdr const *shdr0)
4857 +{
4858 + if (ehdr->e_shstrndx != SHN_XINDEX)
4859 + return w2(ehdr->e_shstrndx);
4860 +
4861 + return w(shdr0->sh_link);
4862 +}
4863 +
4864 +static void find_symtab(Elf_Ehdr *const ehdr, Elf_Shdr const *shdr0,
4865 + unsigned const nhdr, Elf32_Word **symtab,
4866 + Elf32_Word **symtab_shndx)
4867 +{
4868 + Elf_Shdr const *relhdr;
4869 + unsigned k;
4870 +
4871 + *symtab = NULL;
4872 + *symtab_shndx = NULL;
4873 +
4874 + for (relhdr = shdr0, k = nhdr; k; --k, ++relhdr) {
4875 + if (relhdr->sh_type == SHT_SYMTAB)
4876 + *symtab = (void *)ehdr + relhdr->sh_offset;
4877 + else if (relhdr->sh_type == SHT_SYMTAB_SHNDX)
4878 + *symtab_shndx = (void *)ehdr + relhdr->sh_offset;
4879 +
4880 + if (*symtab && *symtab_shndx)
4881 + break;
4882 + }
4883 +}
4884 +
4885 /* Append the new shstrtab, Elf_Shdr[], __mcount_loc and its relocations. */
4886 static int append_func(Elf_Ehdr *const ehdr,
4887 Elf_Shdr *const shstr,
4888 @@ -188,10 +264,12 @@ static int append_func(Elf_Ehdr *const ehdr,
4889 char const *mc_name = (sizeof(Elf_Rela) == rel_entsize)
4890 ? ".rela__mcount_loc"
4891 : ".rel__mcount_loc";
4892 - unsigned const old_shnum = w2(ehdr->e_shnum);
4893 uint_t const old_shoff = _w(ehdr->e_shoff);
4894 uint_t const old_shstr_sh_size = _w(shstr->sh_size);
4895 uint_t const old_shstr_sh_offset = _w(shstr->sh_offset);
4896 + Elf_Shdr *const shdr0 = (Elf_Shdr *)(old_shoff + (void *)ehdr);
4897 + unsigned int const old_shnum = get_shnum(ehdr, shdr0);
4898 + unsigned int const new_shnum = 2 + old_shnum; /* {.rel,}__mcount_loc */
4899 uint_t t = 1 + strlen(mc_name) + _w(shstr->sh_size);
4900 uint_t new_e_shoff;
4901
4902 @@ -201,6 +279,8 @@ static int append_func(Elf_Ehdr *const ehdr,
4903 t += (_align & -t); /* word-byte align */
4904 new_e_shoff = t;
4905
4906 + set_shnum(ehdr, shdr0, new_shnum);
4907 +
4908 /* body for new shstrtab */
4909 if (ulseek(sb.st_size, SEEK_SET) < 0)
4910 return -1;
4911 @@ -255,7 +335,6 @@ static int append_func(Elf_Ehdr *const ehdr,
4912 return -1;
4913
4914 ehdr->e_shoff = _w(new_e_shoff);
4915 - ehdr->e_shnum = w2(2 + w2(ehdr->e_shnum)); /* {.rel,}__mcount_loc */
4916 if (ulseek(0, SEEK_SET) < 0)
4917 return -1;
4918 if (uwrite(ehdr, sizeof(*ehdr)) < 0)
4919 @@ -434,6 +513,8 @@ static int find_secsym_ndx(unsigned const txtndx,
4920 uint_t *const recvalp,
4921 unsigned int *sym_index,
4922 Elf_Shdr const *const symhdr,
4923 + Elf32_Word const *symtab,
4924 + Elf32_Word const *symtab_shndx,
4925 Elf_Ehdr const *const ehdr)
4926 {
4927 Elf_Sym const *const sym0 = (Elf_Sym const *)(_w(symhdr->sh_offset)
4928 @@ -445,7 +526,7 @@ static int find_secsym_ndx(unsigned const txtndx,
4929 for (symp = sym0, t = nsym; t; --t, ++symp) {
4930 unsigned int const st_bind = ELF_ST_BIND(symp->st_info);
4931
4932 - if (txtndx == w2(symp->st_shndx)
4933 + if (txtndx == get_symindex(symp, symtab, symtab_shndx)
4934 /* avoid STB_WEAK */
4935 && (STB_LOCAL == st_bind || STB_GLOBAL == st_bind)) {
4936 /* function symbols on ARM have quirks, avoid them */
4937 @@ -516,21 +597,23 @@ static unsigned tot_relsize(Elf_Shdr const *const shdr0,
4938 return totrelsz;
4939 }
4940
4941 -
4942 /* Overall supervision for Elf32 ET_REL file. */
4943 static int do_func(Elf_Ehdr *const ehdr, char const *const fname,
4944 unsigned const reltype)
4945 {
4946 Elf_Shdr *const shdr0 = (Elf_Shdr *)(_w(ehdr->e_shoff)
4947 + (void *)ehdr);
4948 - unsigned const nhdr = w2(ehdr->e_shnum);
4949 - Elf_Shdr *const shstr = &shdr0[w2(ehdr->e_shstrndx)];
4950 + unsigned const nhdr = get_shnum(ehdr, shdr0);
4951 + Elf_Shdr *const shstr = &shdr0[get_shstrndx(ehdr, shdr0)];
4952 char const *const shstrtab = (char const *)(_w(shstr->sh_offset)
4953 + (void *)ehdr);
4954
4955 Elf_Shdr const *relhdr;
4956 unsigned k;
4957
4958 + Elf32_Word *symtab;
4959 + Elf32_Word *symtab_shndx;
4960 +
4961 /* Upper bound on space: assume all relevant relocs are for mcount. */
4962 unsigned totrelsz;
4963
4964 @@ -561,6 +644,8 @@ static int do_func(Elf_Ehdr *const ehdr, char const *const fname,
4965 return -1;
4966 }
4967
4968 + find_symtab(ehdr, shdr0, nhdr, &symtab, &symtab_shndx);
4969 +
4970 for (relhdr = shdr0, k = nhdr; k; --k, ++relhdr) {
4971 char const *const txtname = has_rel_mcount(relhdr, shdr0,
4972 shstrtab, fname);
4973 @@ -577,6 +662,7 @@ static int do_func(Elf_Ehdr *const ehdr, char const *const fname,
4974 result = find_secsym_ndx(w(relhdr->sh_info), txtname,
4975 &recval, &recsym,
4976 &shdr0[symsec_sh_link],
4977 + symtab, symtab_shndx,
4978 ehdr);
4979 if (result)
4980 goto out;
4981 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
4982 index d41c91468ab3..e78c4367b6c8 100644
4983 --- a/sound/pci/hda/patch_hdmi.c
4984 +++ b/sound/pci/hda/patch_hdmi.c
4985 @@ -4146,6 +4146,11 @@ HDA_CODEC_ENTRY(0x10de0095, "GPU 95 HDMI/DP", patch_nvhdmi),
4986 HDA_CODEC_ENTRY(0x10de0097, "GPU 97 HDMI/DP", patch_nvhdmi),
4987 HDA_CODEC_ENTRY(0x10de0098, "GPU 98 HDMI/DP", patch_nvhdmi),
4988 HDA_CODEC_ENTRY(0x10de0099, "GPU 99 HDMI/DP", patch_nvhdmi),
4989 +HDA_CODEC_ENTRY(0x10de009a, "GPU 9a HDMI/DP", patch_nvhdmi),
4990 +HDA_CODEC_ENTRY(0x10de009d, "GPU 9d HDMI/DP", patch_nvhdmi),
4991 +HDA_CODEC_ENTRY(0x10de009e, "GPU 9e HDMI/DP", patch_nvhdmi),
4992 +HDA_CODEC_ENTRY(0x10de009f, "GPU 9f HDMI/DP", patch_nvhdmi),
4993 +HDA_CODEC_ENTRY(0x10de00a0, "GPU a0 HDMI/DP", patch_nvhdmi),
4994 HDA_CODEC_ENTRY(0x10de8001, "MCP73 HDMI", patch_nvhdmi_2ch),
4995 HDA_CODEC_ENTRY(0x10de8067, "MCP67/68 HDMI", patch_nvhdmi_2ch),
4996 HDA_CODEC_ENTRY(0x11069f80, "VX900 HDMI/DP", patch_via_hdmi),
4997 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4998 index 459a7d61326e..34868459104d 100644
4999 --- a/sound/pci/hda/patch_realtek.c
5000 +++ b/sound/pci/hda/patch_realtek.c
5001 @@ -2460,6 +2460,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
5002 SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
5003 SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_CLEVO_P950),
5004 SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_CLEVO_P950),
5005 + SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
5006 SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
5007 SND_PCI_QUIRK(0x1462, 0x1275, "MSI-GL63", ALC1220_FIXUP_CLEVO_P950),
5008 SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
5009 @@ -7435,6 +7436,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5010 SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
5011 SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
5012 SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
5013 + SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
5014 + SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED),
5015 SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_LED),
5016 SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
5017 SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
5018 diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
5019 index 537dc69256f0..a4ebd6ddaba1 100644
5020 --- a/sound/soc/fsl/fsl_ssi.c
5021 +++ b/sound/soc/fsl/fsl_ssi.c
5022 @@ -678,8 +678,9 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
5023 struct regmap *regs = ssi->regs;
5024 u32 pm = 999, div2, psr, stccr, mask, afreq, factor, i;
5025 unsigned long clkrate, baudrate, tmprate;
5026 - unsigned int slots = params_channels(hw_params);
5027 - unsigned int slot_width = 32;
5028 + unsigned int channels = params_channels(hw_params);
5029 + unsigned int slot_width = params_width(hw_params);
5030 + unsigned int slots = 2;
5031 u64 sub, savesub = 100000;
5032 unsigned int freq;
5033 bool baudclk_is_used;
5034 @@ -688,10 +689,14 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
5035 /* Override slots and slot_width if being specifically set... */
5036 if (ssi->slots)
5037 slots = ssi->slots;
5038 - /* ...but keep 32 bits if slots is 2 -- I2S Master mode */
5039 - if (ssi->slot_width && slots != 2)
5040 + if (ssi->slot_width)
5041 slot_width = ssi->slot_width;
5042
5043 + /* ...but force 32 bits for stereo audio using I2S Master Mode */
5044 + if (channels == 2 &&
5045 + (ssi->i2s_net & SSI_SCR_I2S_MODE_MASK) == SSI_SCR_I2S_MODE_MASTER)
5046 + slot_width = 32;
5047 +
5048 /* Generate bit clock based on the slot number and slot width */
5049 freq = slots * slot_width * params_rate(hw_params);
5050
5051 diff --git a/sound/soc/qcom/common.c b/sound/soc/qcom/common.c
5052 index 6c20bdd850f3..8ada4ecba847 100644
5053 --- a/sound/soc/qcom/common.c
5054 +++ b/sound/soc/qcom/common.c
5055 @@ -4,6 +4,7 @@
5056
5057 #include <linux/module.h>
5058 #include "common.h"
5059 +#include "qdsp6/q6afe.h"
5060
5061 int qcom_snd_parse_of(struct snd_soc_card *card)
5062 {
5063 @@ -101,6 +102,15 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
5064 }
5065 link->no_pcm = 1;
5066 link->ignore_pmdown_time = 1;
5067 +
5068 + if (q6afe_is_rx_port(link->id)) {
5069 + link->dpcm_playback = 1;
5070 + link->dpcm_capture = 0;
5071 + } else {
5072 + link->dpcm_playback = 0;
5073 + link->dpcm_capture = 1;
5074 + }
5075 +
5076 } else {
5077 dlc = devm_kzalloc(dev, sizeof(*dlc), GFP_KERNEL);
5078 if (!dlc)
5079 @@ -113,12 +123,12 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
5080 link->codecs->dai_name = "snd-soc-dummy-dai";
5081 link->codecs->name = "snd-soc-dummy";
5082 link->dynamic = 1;
5083 + link->dpcm_playback = 1;
5084 + link->dpcm_capture = 1;
5085 }
5086
5087 link->ignore_suspend = 1;
5088 link->nonatomic = 1;
5089 - link->dpcm_playback = 1;
5090 - link->dpcm_capture = 1;
5091 link->stream_name = link->name;
5092 link++;
5093
5094 diff --git a/sound/soc/qcom/qdsp6/q6afe.c b/sound/soc/qcom/qdsp6/q6afe.c
5095 index e0945f7a58c8..0ce4eb60f984 100644
5096 --- a/sound/soc/qcom/qdsp6/q6afe.c
5097 +++ b/sound/soc/qcom/qdsp6/q6afe.c
5098 @@ -800,6 +800,14 @@ int q6afe_get_port_id(int index)
5099 }
5100 EXPORT_SYMBOL_GPL(q6afe_get_port_id);
5101
5102 +int q6afe_is_rx_port(int index)
5103 +{
5104 + if (index < 0 || index >= AFE_PORT_MAX)
5105 + return -EINVAL;
5106 +
5107 + return port_maps[index].is_rx;
5108 +}
5109 +EXPORT_SYMBOL_GPL(q6afe_is_rx_port);
5110 static int afe_apr_send_pkt(struct q6afe *afe, struct apr_pkt *pkt,
5111 struct q6afe_port *port)
5112 {
5113 diff --git a/sound/soc/qcom/qdsp6/q6afe.h b/sound/soc/qcom/qdsp6/q6afe.h
5114 index c7ed5422baff..1a0f80a14afe 100644
5115 --- a/sound/soc/qcom/qdsp6/q6afe.h
5116 +++ b/sound/soc/qcom/qdsp6/q6afe.h
5117 @@ -198,6 +198,7 @@ int q6afe_port_start(struct q6afe_port *port);
5118 int q6afe_port_stop(struct q6afe_port *port);
5119 void q6afe_port_put(struct q6afe_port *port);
5120 int q6afe_get_port_id(int index);
5121 +int q6afe_is_rx_port(int index);
5122 void q6afe_hdmi_port_prepare(struct q6afe_port *port,
5123 struct q6afe_hdmi_cfg *cfg);
5124 void q6afe_slim_port_prepare(struct q6afe_port *port,
5125 diff --git a/sound/soc/qcom/qdsp6/q6asm.c b/sound/soc/qcom/qdsp6/q6asm.c
5126 index e8141a33a55e..835ac98a789c 100644
5127 --- a/sound/soc/qcom/qdsp6/q6asm.c
5128 +++ b/sound/soc/qcom/qdsp6/q6asm.c
5129 @@ -25,6 +25,7 @@
5130 #define ASM_STREAM_CMD_FLUSH 0x00010BCE
5131 #define ASM_SESSION_CMD_PAUSE 0x00010BD3
5132 #define ASM_DATA_CMD_EOS 0x00010BDB
5133 +#define ASM_DATA_EVENT_RENDERED_EOS 0x00010C1C
5134 #define ASM_NULL_POPP_TOPOLOGY 0x00010C68
5135 #define ASM_STREAM_CMD_FLUSH_READBUFS 0x00010C09
5136 #define ASM_STREAM_CMD_SET_ENCDEC_PARAM 0x00010C10
5137 @@ -546,9 +547,6 @@ static int32_t q6asm_stream_callback(struct apr_device *adev,
5138 case ASM_SESSION_CMD_SUSPEND:
5139 client_event = ASM_CLIENT_EVENT_CMD_SUSPEND_DONE;
5140 break;
5141 - case ASM_DATA_CMD_EOS:
5142 - client_event = ASM_CLIENT_EVENT_CMD_EOS_DONE;
5143 - break;
5144 case ASM_STREAM_CMD_FLUSH:
5145 client_event = ASM_CLIENT_EVENT_CMD_FLUSH_DONE;
5146 break;
5147 @@ -651,6 +649,9 @@ static int32_t q6asm_stream_callback(struct apr_device *adev,
5148 spin_unlock_irqrestore(&ac->lock, flags);
5149 }
5150
5151 + break;
5152 + case ASM_DATA_EVENT_RENDERED_EOS:
5153 + client_event = ASM_CLIENT_EVENT_CMD_EOS_DONE;
5154 break;
5155 }
5156
5157 diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c
5158 index 7cd42fcfcf38..1707414cfa92 100644
5159 --- a/sound/soc/rockchip/rockchip_pdm.c
5160 +++ b/sound/soc/rockchip/rockchip_pdm.c
5161 @@ -590,8 +590,10 @@ static int rockchip_pdm_resume(struct device *dev)
5162 int ret;
5163
5164 ret = pm_runtime_get_sync(dev);
5165 - if (ret < 0)
5166 + if (ret < 0) {
5167 + pm_runtime_put(dev);
5168 return ret;
5169 + }
5170
5171 ret = regcache_sync(pdm->regmap);
5172
5173 diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
5174 index f55afe3a98e3..9079c380228f 100644
5175 --- a/sound/usb/mixer.c
5176 +++ b/sound/usb/mixer.c
5177 @@ -576,8 +576,9 @@ static int check_matrix_bitmap(unsigned char *bmap,
5178 * if failed, give up and free the control instance.
5179 */
5180
5181 -int snd_usb_mixer_add_control(struct usb_mixer_elem_list *list,
5182 - struct snd_kcontrol *kctl)
5183 +int snd_usb_mixer_add_list(struct usb_mixer_elem_list *list,
5184 + struct snd_kcontrol *kctl,
5185 + bool is_std_info)
5186 {
5187 struct usb_mixer_interface *mixer = list->mixer;
5188 int err;
5189 @@ -591,6 +592,7 @@ int snd_usb_mixer_add_control(struct usb_mixer_elem_list *list,
5190 return err;
5191 }
5192 list->kctl = kctl;
5193 + list->is_std_info = is_std_info;
5194 list->next_id_elem = mixer->id_elems[list->id];
5195 mixer->id_elems[list->id] = list;
5196 return 0;
5197 @@ -3213,8 +3215,11 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid)
5198 unitid = delegate_notify(mixer, unitid, NULL, NULL);
5199
5200 for_each_mixer_elem(list, mixer, unitid) {
5201 - struct usb_mixer_elem_info *info =
5202 - mixer_elem_list_to_info(list);
5203 + struct usb_mixer_elem_info *info;
5204 +
5205 + if (!list->is_std_info)
5206 + continue;
5207 + info = mixer_elem_list_to_info(list);
5208 /* invalidate cache, so the value is read from the device */
5209 info->cached = 0;
5210 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
5211 @@ -3294,6 +3299,8 @@ static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer,
5212
5213 if (!list->kctl)
5214 continue;
5215 + if (!list->is_std_info)
5216 + continue;
5217
5218 info = mixer_elem_list_to_info(list);
5219 if (count > 1 && info->control != control)
5220 diff --git a/sound/usb/mixer.h b/sound/usb/mixer.h
5221 index 8e0fb7fdf1a0..01b5e5cc2221 100644
5222 --- a/sound/usb/mixer.h
5223 +++ b/sound/usb/mixer.h
5224 @@ -66,6 +66,7 @@ struct usb_mixer_elem_list {
5225 struct usb_mixer_elem_list *next_id_elem; /* list of controls with same id */
5226 struct snd_kcontrol *kctl;
5227 unsigned int id;
5228 + bool is_std_info;
5229 usb_mixer_elem_dump_func_t dump;
5230 usb_mixer_elem_resume_func_t resume;
5231 };
5232 @@ -103,8 +104,12 @@ void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid);
5233 int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval,
5234 int request, int validx, int value_set);
5235
5236 -int snd_usb_mixer_add_control(struct usb_mixer_elem_list *list,
5237 - struct snd_kcontrol *kctl);
5238 +int snd_usb_mixer_add_list(struct usb_mixer_elem_list *list,
5239 + struct snd_kcontrol *kctl,
5240 + bool is_std_info);
5241 +
5242 +#define snd_usb_mixer_add_control(list, kctl) \
5243 + snd_usb_mixer_add_list(list, kctl, true)
5244
5245 void snd_usb_mixer_elem_init_std(struct usb_mixer_elem_list *list,
5246 struct usb_mixer_interface *mixer,
5247 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
5248 index dc181066c799..d39bf5b648d1 100644
5249 --- a/sound/usb/mixer_quirks.c
5250 +++ b/sound/usb/mixer_quirks.c
5251 @@ -157,7 +157,8 @@ static int add_single_ctl_with_resume(struct usb_mixer_interface *mixer,
5252 return -ENOMEM;
5253 }
5254 kctl->private_free = snd_usb_mixer_elem_free;
5255 - return snd_usb_mixer_add_control(list, kctl);
5256 + /* don't use snd_usb_mixer_add_control() here, this is a special list element */
5257 + return snd_usb_mixer_add_list(list, kctl, false);
5258 }
5259
5260 /*
5261 diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
5262 index 6c391e5fad2a..b971d9aaa64a 100644
5263 --- a/sound/usb/pcm.c
5264 +++ b/sound/usb/pcm.c
5265 @@ -349,6 +349,7 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
5266 ifnum = 0;
5267 goto add_sync_ep_from_ifnum;
5268 case USB_ID(0x07fd, 0x0008): /* MOTU M Series */
5269 + case USB_ID(0x31e9, 0x0002): /* Solid State Logic SSL2+ */
5270 ep = 0x81;
5271 ifnum = 2;
5272 goto add_sync_ep_from_ifnum;
5273 @@ -1778,6 +1779,7 @@ static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream
5274 return 0;
5275 case SNDRV_PCM_TRIGGER_STOP:
5276 stop_endpoints(subs, false);
5277 + subs->data_endpoint->retire_data_urb = NULL;
5278 subs->running = 0;
5279 return 0;
5280 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
5281 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
5282 index 092720ce2c55..bf5083a20b6d 100644
5283 --- a/sound/usb/quirks.c
5284 +++ b/sound/usb/quirks.c
5285 @@ -1461,6 +1461,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
5286 static bool is_itf_usb_dsd_dac(unsigned int id)
5287 {
5288 switch (id) {
5289 + case USB_ID(0x154e, 0x1002): /* Denon DCD-1500RE */
5290 case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
5291 case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
5292 case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
5293 @@ -1602,6 +1603,14 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
5294 chip->usb_id == USB_ID(0x0951, 0x16ad)) &&
5295 (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
5296 usleep_range(1000, 2000);
5297 +
5298 + /*
5299 + * Samsung USBC Headset (AKG) need a tiny delay after each
5300 + * class compliant request. (Model number: AAM625R or AAM627R)
5301 + */
5302 + if (chip->usb_id == USB_ID(0x04e8, 0xa051) &&
5303 + (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
5304 + usleep_range(5000, 6000);
5305 }
5306
5307 /*
5308 diff --git a/tools/testing/selftests/net/so_txtime.c b/tools/testing/selftests/net/so_txtime.c
5309 index 383bac05ac32..ceaad78e9667 100644
5310 --- a/tools/testing/selftests/net/so_txtime.c
5311 +++ b/tools/testing/selftests/net/so_txtime.c
5312 @@ -15,8 +15,9 @@
5313 #include <inttypes.h>
5314 #include <linux/net_tstamp.h>
5315 #include <linux/errqueue.h>
5316 +#include <linux/if_ether.h>
5317 #include <linux/ipv6.h>
5318 -#include <linux/tcp.h>
5319 +#include <linux/udp.h>
5320 #include <stdbool.h>
5321 #include <stdlib.h>
5322 #include <stdio.h>
5323 @@ -140,8 +141,8 @@ static void do_recv_errqueue_timeout(int fdt)
5324 {
5325 char control[CMSG_SPACE(sizeof(struct sock_extended_err)) +
5326 CMSG_SPACE(sizeof(struct sockaddr_in6))] = {0};
5327 - char data[sizeof(struct ipv6hdr) +
5328 - sizeof(struct tcphdr) + 1];
5329 + char data[sizeof(struct ethhdr) + sizeof(struct ipv6hdr) +
5330 + sizeof(struct udphdr) + 1];
5331 struct sock_extended_err *err;
5332 struct msghdr msg = {0};
5333 struct iovec iov = {0};
5334 @@ -159,6 +160,8 @@ static void do_recv_errqueue_timeout(int fdt)
5335 msg.msg_controllen = sizeof(control);
5336
5337 while (1) {
5338 + const char *reason;
5339 +
5340 ret = recvmsg(fdt, &msg, MSG_ERRQUEUE);
5341 if (ret == -1 && errno == EAGAIN)
5342 break;
5343 @@ -176,14 +179,30 @@ static void do_recv_errqueue_timeout(int fdt)
5344 err = (struct sock_extended_err *)CMSG_DATA(cm);
5345 if (err->ee_origin != SO_EE_ORIGIN_TXTIME)
5346 error(1, 0, "errqueue: origin 0x%x\n", err->ee_origin);
5347 - if (err->ee_code != ECANCELED)
5348 - error(1, 0, "errqueue: code 0x%x\n", err->ee_code);
5349 +
5350 + switch (err->ee_errno) {
5351 + case ECANCELED:
5352 + if (err->ee_code != SO_EE_CODE_TXTIME_MISSED)
5353 + error(1, 0, "errqueue: unknown ECANCELED %u\n",
5354 + err->ee_code);
5355 + reason = "missed txtime";
5356 + break;
5357 + case EINVAL:
5358 + if (err->ee_code != SO_EE_CODE_TXTIME_INVALID_PARAM)
5359 + error(1, 0, "errqueue: unknown EINVAL %u\n",
5360 + err->ee_code);
5361 + reason = "invalid txtime";
5362 + break;
5363 + default:
5364 + error(1, 0, "errqueue: errno %u code %u\n",
5365 + err->ee_errno, err->ee_code);
5366 + };
5367
5368 tstamp = ((int64_t) err->ee_data) << 32 | err->ee_info;
5369 tstamp -= (int64_t) glob_tstart;
5370 tstamp /= 1000 * 1000;
5371 - fprintf(stderr, "send: pkt %c at %" PRId64 "ms dropped\n",
5372 - data[ret - 1], tstamp);
5373 + fprintf(stderr, "send: pkt %c at %" PRId64 "ms dropped: %s\n",
5374 + data[ret - 1], tstamp, reason);
5375
5376 msg.msg_flags = 0;
5377 msg.msg_controllen = sizeof(control);