Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0295-5.4.196-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3637 - (show annotations) (download)
Mon Oct 24 12:40:44 2022 UTC (19 months ago) by niro
File size: 91580 byte(s)
-add missing
1 diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt
2 index 7193505a98cab..8f8d97f65d737 100644
3 --- a/Documentation/DMA-attributes.txt
4 +++ b/Documentation/DMA-attributes.txt
5 @@ -156,13 +156,3 @@ accesses to DMA buffers in both privileged "supervisor" and unprivileged
6 subsystem that the buffer is fully accessible at the elevated privilege
7 level (and ideally inaccessible or at least read-only at the
8 lesser-privileged levels).
9 -
10 -DMA_ATTR_PRIVILEGED
11 --------------------
12 -
13 -Some advanced peripherals such as remote processors and GPUs perform
14 -accesses to DMA buffers in both privileged "supervisor" and unprivileged
15 -"user" modes. This attribute is used to indicate to the DMA-mapping
16 -subsystem that the buffer is fully accessible at the elevated privilege
17 -level (and ideally inaccessible or at least read-only at the
18 -lesser-privileged levels).
19 diff --git a/Makefile b/Makefile
20 index 4297d0107bd6c..c064ed925552d 100644
21 --- a/Makefile
22 +++ b/Makefile
23 @@ -1,7 +1,7 @@
24 # SPDX-License-Identifier: GPL-2.0
25 VERSION = 5
26 PATCHLEVEL = 4
27 -SUBLEVEL = 195
28 +SUBLEVEL = 196
29 EXTRAVERSION =
30 NAME = Kleptomaniac Octopus
31
32 diff --git a/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi b/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
33 index f310f4d3bcc7c..ac723fe898c76 100644
34 --- a/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
35 +++ b/arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi
36 @@ -117,11 +117,6 @@
37 groups = "FWSPID";
38 };
39
40 - pinctrl_fwqspid_default: fwqspid_default {
41 - function = "FWSPID";
42 - groups = "FWQSPID";
43 - };
44 -
45 pinctrl_fwspiwp_default: fwspiwp_default {
46 function = "FWSPIWP";
47 groups = "FWSPIWP";
48 @@ -653,12 +648,12 @@
49 };
50
51 pinctrl_qspi1_default: qspi1_default {
52 - function = "QSPI1";
53 + function = "SPI1";
54 groups = "QSPI1";
55 };
56
57 pinctrl_qspi2_default: qspi2_default {
58 - function = "QSPI2";
59 + function = "SPI2";
60 groups = "QSPI2";
61 };
62
63 diff --git a/arch/arm/boot/dts/imx7-colibri.dtsi b/arch/arm/boot/dts/imx7-colibri.dtsi
64 index 8bba03de51ad4..1e61e38621066 100644
65 --- a/arch/arm/boot/dts/imx7-colibri.dtsi
66 +++ b/arch/arm/boot/dts/imx7-colibri.dtsi
67 @@ -77,7 +77,7 @@
68
69 dailink_master: simple-audio-card,codec {
70 sound-dai = <&codec>;
71 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
72 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
73 };
74 };
75 };
76 @@ -152,7 +152,7 @@
77 compatible = "fsl,sgtl5000";
78 #sound-dai-cells = <0>;
79 reg = <0x0a>;
80 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
81 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
82 pinctrl-names = "default";
83 pinctrl-0 = <&pinctrl_sai1_mclk>;
84 VDDA-supply = <&reg_module_3v3_avdd>;
85 diff --git a/arch/arm/boot/dts/imx7-mba7.dtsi b/arch/arm/boot/dts/imx7-mba7.dtsi
86 index 50abf18ad30b2..887497e3bb4b8 100644
87 --- a/arch/arm/boot/dts/imx7-mba7.dtsi
88 +++ b/arch/arm/boot/dts/imx7-mba7.dtsi
89 @@ -250,7 +250,7 @@
90 tlv320aic32x4: audio-codec@18 {
91 compatible = "ti,tlv320aic32x4";
92 reg = <0x18>;
93 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
94 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
95 clock-names = "mclk";
96 ldoin-supply = <&reg_audio_3v3>;
97 iov-supply = <&reg_audio_3v3>;
98 diff --git a/arch/arm/boot/dts/imx7d-nitrogen7.dts b/arch/arm/boot/dts/imx7d-nitrogen7.dts
99 index 6b4acea1ef795..ecfa179ccab1c 100644
100 --- a/arch/arm/boot/dts/imx7d-nitrogen7.dts
101 +++ b/arch/arm/boot/dts/imx7d-nitrogen7.dts
102 @@ -284,7 +284,7 @@
103 codec: wm8960@1a {
104 compatible = "wlf,wm8960";
105 reg = <0x1a>;
106 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
107 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
108 clock-names = "mclk";
109 wlf,shared-lrclk;
110 };
111 diff --git a/arch/arm/boot/dts/imx7d-pico-hobbit.dts b/arch/arm/boot/dts/imx7d-pico-hobbit.dts
112 index 7b2198a9372c6..d917dc4f2f227 100644
113 --- a/arch/arm/boot/dts/imx7d-pico-hobbit.dts
114 +++ b/arch/arm/boot/dts/imx7d-pico-hobbit.dts
115 @@ -31,7 +31,7 @@
116
117 dailink_master: simple-audio-card,codec {
118 sound-dai = <&sgtl5000>;
119 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
120 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
121 };
122 };
123 };
124 @@ -41,7 +41,7 @@
125 #sound-dai-cells = <0>;
126 reg = <0x0a>;
127 compatible = "fsl,sgtl5000";
128 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
129 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
130 VDDA-supply = <&reg_2p5v>;
131 VDDIO-supply = <&reg_vref_1v8>;
132 };
133 diff --git a/arch/arm/boot/dts/imx7d-pico-pi.dts b/arch/arm/boot/dts/imx7d-pico-pi.dts
134 index 70bea95c06d83..f263e391e24cb 100644
135 --- a/arch/arm/boot/dts/imx7d-pico-pi.dts
136 +++ b/arch/arm/boot/dts/imx7d-pico-pi.dts
137 @@ -31,7 +31,7 @@
138
139 dailink_master: simple-audio-card,codec {
140 sound-dai = <&sgtl5000>;
141 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
142 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
143 };
144 };
145 };
146 @@ -41,7 +41,7 @@
147 #sound-dai-cells = <0>;
148 reg = <0x0a>;
149 compatible = "fsl,sgtl5000";
150 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
151 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
152 VDDA-supply = <&reg_2p5v>;
153 VDDIO-supply = <&reg_vref_1v8>;
154 };
155 diff --git a/arch/arm/boot/dts/imx7d-sdb.dts b/arch/arm/boot/dts/imx7d-sdb.dts
156 index 869efbc4af42c..a97cda17e484e 100644
157 --- a/arch/arm/boot/dts/imx7d-sdb.dts
158 +++ b/arch/arm/boot/dts/imx7d-sdb.dts
159 @@ -356,7 +356,7 @@
160 codec: wm8960@1a {
161 compatible = "wlf,wm8960";
162 reg = <0x1a>;
163 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
164 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
165 clock-names = "mclk";
166 wlf,shared-lrclk;
167 };
168 diff --git a/arch/arm/boot/dts/imx7s-warp.dts b/arch/arm/boot/dts/imx7s-warp.dts
169 index d6b4888fa686b..e035dd5bf4f62 100644
170 --- a/arch/arm/boot/dts/imx7s-warp.dts
171 +++ b/arch/arm/boot/dts/imx7s-warp.dts
172 @@ -75,7 +75,7 @@
173
174 dailink_master: simple-audio-card,codec {
175 sound-dai = <&codec>;
176 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
177 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
178 };
179 };
180 };
181 @@ -232,7 +232,7 @@
182 #sound-dai-cells = <0>;
183 reg = <0x0a>;
184 compatible = "fsl,sgtl5000";
185 - clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_CLK>;
186 + clocks = <&clks IMX7D_AUDIO_MCLK_ROOT_DIV>;
187 pinctrl-names = "default";
188 pinctrl-0 = <&pinctrl_sai1_mclk>;
189 VDDA-supply = <&vgen4_reg>;
190 diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
191 index 3d65fa56a0e5d..8e8efe28d7995 100644
192 --- a/arch/arm/kernel/entry-armv.S
193 +++ b/arch/arm/kernel/entry-armv.S
194 @@ -1043,7 +1043,7 @@ vector_bhb_loop8_\name:
195
196 @ bhb workaround
197 mov r0, #8
198 -3: b . + 4
199 +3: W(b) . + 4
200 subs r0, r0, #1
201 bne 3b
202 dsb
203 diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
204 index db798eac74315..8247749998259 100644
205 --- a/arch/arm/kernel/stacktrace.c
206 +++ b/arch/arm/kernel/stacktrace.c
207 @@ -53,17 +53,17 @@ int notrace unwind_frame(struct stackframe *frame)
208 return -EINVAL;
209
210 frame->sp = frame->fp;
211 - frame->fp = *(unsigned long *)(fp);
212 - frame->pc = *(unsigned long *)(fp + 4);
213 + frame->fp = READ_ONCE_NOCHECK(*(unsigned long *)(fp));
214 + frame->pc = READ_ONCE_NOCHECK(*(unsigned long *)(fp + 4));
215 #else
216 /* check current frame pointer is within bounds */
217 if (fp < low + 12 || fp > high - 4)
218 return -EINVAL;
219
220 /* restore the registers from the stack frame */
221 - frame->fp = *(unsigned long *)(fp - 12);
222 - frame->sp = *(unsigned long *)(fp - 8);
223 - frame->pc = *(unsigned long *)(fp - 4);
224 + frame->fp = READ_ONCE_NOCHECK(*(unsigned long *)(fp - 12));
225 + frame->sp = READ_ONCE_NOCHECK(*(unsigned long *)(fp - 8));
226 + frame->pc = READ_ONCE_NOCHECK(*(unsigned long *)(fp - 4));
227 #endif
228
229 return 0;
230 diff --git a/arch/arm/mm/proc-v7-bugs.c b/arch/arm/mm/proc-v7-bugs.c
231 index 097ef85bb7f21..bcb9181601d9b 100644
232 --- a/arch/arm/mm/proc-v7-bugs.c
233 +++ b/arch/arm/mm/proc-v7-bugs.c
234 @@ -301,6 +301,7 @@ void cpu_v7_ca15_ibe(void)
235 {
236 if (check_spectre_auxcr(this_cpu_ptr(&spectre_warned), BIT(0)))
237 cpu_v7_spectre_v2_init();
238 + cpu_v7_spectre_bhb_init();
239 }
240
241 void cpu_v7_bugs_init(void)
242 diff --git a/arch/mips/lantiq/falcon/sysctrl.c b/arch/mips/lantiq/falcon/sysctrl.c
243 index 037b08f3257e0..a2837a54d9726 100644
244 --- a/arch/mips/lantiq/falcon/sysctrl.c
245 +++ b/arch/mips/lantiq/falcon/sysctrl.c
246 @@ -167,6 +167,8 @@ static inline void clkdev_add_sys(const char *dev, unsigned int module,
247 {
248 struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
249
250 + if (!clk)
251 + return;
252 clk->cl.dev_id = dev;
253 clk->cl.con_id = NULL;
254 clk->cl.clk = clk;
255 diff --git a/arch/mips/lantiq/xway/gptu.c b/arch/mips/lantiq/xway/gptu.c
256 index 3d5683e75cf1e..200fe9ff641d6 100644
257 --- a/arch/mips/lantiq/xway/gptu.c
258 +++ b/arch/mips/lantiq/xway/gptu.c
259 @@ -122,6 +122,8 @@ static inline void clkdev_add_gptu(struct device *dev, const char *con,
260 {
261 struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
262
263 + if (!clk)
264 + return;
265 clk->cl.dev_id = dev_name(dev);
266 clk->cl.con_id = con;
267 clk->cl.clk = clk;
268 diff --git a/arch/mips/lantiq/xway/sysctrl.c b/arch/mips/lantiq/xway/sysctrl.c
269 index 2ee68d6e8bb99..6c2d9779ac727 100644
270 --- a/arch/mips/lantiq/xway/sysctrl.c
271 +++ b/arch/mips/lantiq/xway/sysctrl.c
272 @@ -311,6 +311,8 @@ static void clkdev_add_pmu(const char *dev, const char *con, bool deactivate,
273 {
274 struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
275
276 + if (!clk)
277 + return;
278 clk->cl.dev_id = dev;
279 clk->cl.con_id = con;
280 clk->cl.clk = clk;
281 @@ -334,6 +336,8 @@ static void clkdev_add_cgu(const char *dev, const char *con,
282 {
283 struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
284
285 + if (!clk)
286 + return;
287 clk->cl.dev_id = dev;
288 clk->cl.con_id = con;
289 clk->cl.clk = clk;
290 @@ -352,24 +356,28 @@ static void clkdev_add_pci(void)
291 struct clk *clk_ext = kzalloc(sizeof(struct clk), GFP_KERNEL);
292
293 /* main pci clock */
294 - clk->cl.dev_id = "17000000.pci";
295 - clk->cl.con_id = NULL;
296 - clk->cl.clk = clk;
297 - clk->rate = CLOCK_33M;
298 - clk->rates = valid_pci_rates;
299 - clk->enable = pci_enable;
300 - clk->disable = pmu_disable;
301 - clk->module = 0;
302 - clk->bits = PMU_PCI;
303 - clkdev_add(&clk->cl);
304 + if (clk) {
305 + clk->cl.dev_id = "17000000.pci";
306 + clk->cl.con_id = NULL;
307 + clk->cl.clk = clk;
308 + clk->rate = CLOCK_33M;
309 + clk->rates = valid_pci_rates;
310 + clk->enable = pci_enable;
311 + clk->disable = pmu_disable;
312 + clk->module = 0;
313 + clk->bits = PMU_PCI;
314 + clkdev_add(&clk->cl);
315 + }
316
317 /* use internal/external bus clock */
318 - clk_ext->cl.dev_id = "17000000.pci";
319 - clk_ext->cl.con_id = "external";
320 - clk_ext->cl.clk = clk_ext;
321 - clk_ext->enable = pci_ext_enable;
322 - clk_ext->disable = pci_ext_disable;
323 - clkdev_add(&clk_ext->cl);
324 + if (clk_ext) {
325 + clk_ext->cl.dev_id = "17000000.pci";
326 + clk_ext->cl.con_id = "external";
327 + clk_ext->cl.clk = clk_ext;
328 + clk_ext->enable = pci_ext_enable;
329 + clk_ext->disable = pci_ext_disable;
330 + clkdev_add(&clk_ext->cl);
331 + }
332 }
333
334 /* xway socs can generate clocks on gpio pins */
335 @@ -389,9 +397,15 @@ static void clkdev_add_clkout(void)
336 char *name;
337
338 name = kzalloc(sizeof("clkout0"), GFP_KERNEL);
339 + if (!name)
340 + continue;
341 sprintf(name, "clkout%d", i);
342
343 clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
344 + if (!clk) {
345 + kfree(name);
346 + continue;
347 + }
348 clk->cl.dev_id = "1f103000.cgu";
349 clk->cl.con_id = name;
350 clk->cl.clk = clk;
351 diff --git a/arch/x86/crypto/chacha-avx512vl-x86_64.S b/arch/x86/crypto/chacha-avx512vl-x86_64.S
352 index 848f9c75fd4f5..596f91e3a774e 100644
353 --- a/arch/x86/crypto/chacha-avx512vl-x86_64.S
354 +++ b/arch/x86/crypto/chacha-avx512vl-x86_64.S
355 @@ -172,7 +172,7 @@ ENTRY(chacha_2block_xor_avx512vl)
356 # xor remaining bytes from partial register into output
357 mov %rcx,%rax
358 and $0xf,%rcx
359 - jz .Ldone8
360 + jz .Ldone2
361 mov %rax,%r9
362 and $~0xf,%r9
363
364 @@ -438,7 +438,7 @@ ENTRY(chacha_4block_xor_avx512vl)
365 # xor remaining bytes from partial register into output
366 mov %rcx,%rax
367 and $0xf,%rcx
368 - jz .Ldone8
369 + jz .Ldone4
370 mov %rax,%r9
371 and $~0xf,%r9
372
373 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
374 index d3877dd713aef..015da62e4ad75 100644
375 --- a/arch/x86/kvm/mmu.c
376 +++ b/arch/x86/kvm/mmu.c
377 @@ -5821,6 +5821,7 @@ static void kvm_zap_obsolete_pages(struct kvm *kvm)
378 {
379 struct kvm_mmu_page *sp, *node;
380 int nr_zapped, batch = 0;
381 + bool unstable;
382
383 restart:
384 list_for_each_entry_safe_reverse(sp, node,
385 @@ -5853,11 +5854,12 @@ restart:
386 goto restart;
387 }
388
389 - if (__kvm_mmu_prepare_zap_page(kvm, sp,
390 - &kvm->arch.zapped_obsolete_pages, &nr_zapped)) {
391 - batch += nr_zapped;
392 + unstable = __kvm_mmu_prepare_zap_page(kvm, sp,
393 + &kvm->arch.zapped_obsolete_pages, &nr_zapped);
394 + batch += nr_zapped;
395 +
396 + if (unstable)
397 goto restart;
398 - }
399 }
400
401 /*
402 diff --git a/arch/x86/um/shared/sysdep/syscalls_64.h b/arch/x86/um/shared/sysdep/syscalls_64.h
403 index 8a7d5e1da98e5..1e6875b4ffd83 100644
404 --- a/arch/x86/um/shared/sysdep/syscalls_64.h
405 +++ b/arch/x86/um/shared/sysdep/syscalls_64.h
406 @@ -10,13 +10,12 @@
407 #include <linux/msg.h>
408 #include <linux/shm.h>
409
410 -typedef long syscall_handler_t(void);
411 +typedef long syscall_handler_t(long, long, long, long, long, long);
412
413 extern syscall_handler_t *sys_call_table[];
414
415 #define EXECUTE_SYSCALL(syscall, regs) \
416 - (((long (*)(long, long, long, long, long, long)) \
417 - (*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(&regs->regs), \
418 + (((*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(&regs->regs), \
419 UPT_SYSCALL_ARG2(&regs->regs), \
420 UPT_SYSCALL_ARG3(&regs->regs), \
421 UPT_SYSCALL_ARG4(&regs->regs), \
422 diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
423 index 64e6ec2c32a76..9d9777ded5f7b 100644
424 --- a/arch/x86/xen/smp_pv.c
425 +++ b/arch/x86/xen/smp_pv.c
426 @@ -53,6 +53,7 @@ static DEFINE_PER_CPU(struct xen_common_irq, xen_irq_work) = { .irq = -1 };
427 static DEFINE_PER_CPU(struct xen_common_irq, xen_pmu_irq) = { .irq = -1 };
428
429 static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id);
430 +void asm_cpu_bringup_and_idle(void);
431
432 static void cpu_bringup(void)
433 {
434 @@ -310,7 +311,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
435 * pointing just below where pt_regs would be if it were a normal
436 * kernel entry.
437 */
438 - ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
439 + ctxt->user_regs.eip = (unsigned long)asm_cpu_bringup_and_idle;
440 ctxt->flags = VGCF_IN_KERNEL;
441 ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */
442 ctxt->user_regs.ds = __USER_DS;
443 diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
444 index c1d8b90aa4e2d..142da85474801 100644
445 --- a/arch/x86/xen/xen-head.S
446 +++ b/arch/x86/xen/xen-head.S
447 @@ -35,7 +35,11 @@ ENTRY(startup_xen)
448 rep __ASM_SIZE(stos)
449
450 mov %_ASM_SI, xen_start_info
451 - mov $init_thread_union+THREAD_SIZE, %_ASM_SP
452 +#ifdef CONFIG_X86_64
453 + mov initial_stack(%rip), %rsp
454 +#else
455 + mov initial_stack, %esp
456 +#endif
457
458 #ifdef CONFIG_X86_64
459 /* Set up %gs.
460 @@ -51,9 +55,19 @@ ENTRY(startup_xen)
461 wrmsr
462 #endif
463
464 - jmp xen_start_kernel
465 + call xen_start_kernel
466 END(startup_xen)
467 __FINIT
468 +
469 +#ifdef CONFIG_XEN_PV_SMP
470 +.pushsection .text
471 +SYM_CODE_START(asm_cpu_bringup_and_idle)
472 + UNWIND_HINT_EMPTY
473 +
474 + call cpu_bringup_and_idle
475 +SYM_CODE_END(asm_cpu_bringup_and_idle)
476 +.popsection
477 +#endif
478 #endif
479
480 .pushsection .text
481 diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
482 index 1d443d17cf7c5..d46806182b051 100644
483 --- a/block/bfq-iosched.c
484 +++ b/block/bfq-iosched.c
485 @@ -2251,6 +2251,9 @@ static int bfq_request_merge(struct request_queue *q, struct request **req,
486 __rq = bfq_find_rq_fmerge(bfqd, bio, q);
487 if (__rq && elv_bio_merge_ok(__rq, bio)) {
488 *req = __rq;
489 +
490 + if (blk_discard_mergable(__rq))
491 + return ELEVATOR_DISCARD_MERGE;
492 return ELEVATOR_FRONT_MERGE;
493 }
494
495 diff --git a/block/blk-merge.c b/block/blk-merge.c
496 index a62692d135660..5219064cd72bb 100644
497 --- a/block/blk-merge.c
498 +++ b/block/blk-merge.c
499 @@ -721,21 +721,6 @@ static void blk_account_io_merge(struct request *req)
500 part_stat_unlock();
501 }
502 }
503 -/*
504 - * Two cases of handling DISCARD merge:
505 - * If max_discard_segments > 1, the driver takes every bio
506 - * as a range and send them to controller together. The ranges
507 - * needn't to be contiguous.
508 - * Otherwise, the bios/requests will be handled as same as
509 - * others which should be contiguous.
510 - */
511 -static inline bool blk_discard_mergable(struct request *req)
512 -{
513 - if (req_op(req) == REQ_OP_DISCARD &&
514 - queue_max_discard_segments(req->q) > 1)
515 - return true;
516 - return false;
517 -}
518
519 static enum elv_merge blk_try_req_merge(struct request *req,
520 struct request *next)
521 diff --git a/block/elevator.c b/block/elevator.c
522 index 78805c74ea8a4..3ba826230c578 100644
523 --- a/block/elevator.c
524 +++ b/block/elevator.c
525 @@ -337,6 +337,9 @@ enum elv_merge elv_merge(struct request_queue *q, struct request **req,
526 __rq = elv_rqhash_find(q, bio->bi_iter.bi_sector);
527 if (__rq && elv_bio_merge_ok(__rq, bio)) {
528 *req = __rq;
529 +
530 + if (blk_discard_mergable(__rq))
531 + return ELEVATOR_DISCARD_MERGE;
532 return ELEVATOR_BACK_MERGE;
533 }
534
535 diff --git a/block/mq-deadline.c b/block/mq-deadline.c
536 index 19c6922e85f1b..6d6dda5cfffa3 100644
537 --- a/block/mq-deadline.c
538 +++ b/block/mq-deadline.c
539 @@ -452,6 +452,8 @@ static int dd_request_merge(struct request_queue *q, struct request **rq,
540
541 if (elv_bio_merge_ok(__rq, bio)) {
542 *rq = __rq;
543 + if (blk_discard_mergable(__rq))
544 + return ELEVATOR_DISCARD_MERGE;
545 return ELEVATOR_FRONT_MERGE;
546 }
547 }
548 diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
549 index 4f6b76bd957ef..12ab50d295484 100644
550 --- a/drivers/base/firmware_loader/main.c
551 +++ b/drivers/base/firmware_loader/main.c
552 @@ -761,6 +761,8 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
553 enum fw_opt opt_flags)
554 {
555 struct firmware *fw = NULL;
556 + struct cred *kern_cred = NULL;
557 + const struct cred *old_cred;
558 int ret;
559
560 if (!firmware_p)
561 @@ -776,6 +778,18 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
562 if (ret <= 0) /* error or already assigned */
563 goto out;
564
565 + /*
566 + * We are about to try to access the firmware file. Because we may have been
567 + * called by a driver when serving an unrelated request from userland, we use
568 + * the kernel credentials to read the file.
569 + */
570 + kern_cred = prepare_kernel_cred(NULL);
571 + if (!kern_cred) {
572 + ret = -ENOMEM;
573 + goto out;
574 + }
575 + old_cred = override_creds(kern_cred);
576 +
577 ret = fw_get_filesystem_firmware(device, fw->priv, "", NULL);
578 #ifdef CONFIG_FW_LOADER_COMPRESS
579 if (ret == -ENOENT)
580 @@ -792,6 +806,9 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
581 } else
582 ret = assign_fw(fw, device, opt_flags);
583
584 + revert_creds(old_cred);
585 + put_cred(kern_cred);
586 +
587 out:
588 if (ret < 0) {
589 fw_abort_batch_reqs(fw);
590 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
591 index a18155cdce416..ba10fa24fa1f1 100644
592 --- a/drivers/block/drbd/drbd_main.c
593 +++ b/drivers/block/drbd/drbd_main.c
594 @@ -183,7 +183,7 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr,
595 unsigned int set_size)
596 {
597 struct drbd_request *r;
598 - struct drbd_request *req = NULL;
599 + struct drbd_request *req = NULL, *tmp = NULL;
600 int expect_epoch = 0;
601 int expect_size = 0;
602
603 @@ -237,8 +237,11 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr,
604 * to catch requests being barrier-acked "unexpectedly".
605 * It usually should find the same req again, or some READ preceding it. */
606 list_for_each_entry(req, &connection->transfer_log, tl_requests)
607 - if (req->epoch == expect_epoch)
608 + if (req->epoch == expect_epoch) {
609 + tmp = req;
610 break;
611 + }
612 + req = list_prepare_entry(tmp, &connection->transfer_log, tl_requests);
613 list_for_each_entry_safe_from(req, r, &connection->transfer_log, tl_requests) {
614 if (req->epoch != expect_epoch)
615 break;
616 diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
617 index f24e3791e8400..e133ff5fa5961 100644
618 --- a/drivers/block/floppy.c
619 +++ b/drivers/block/floppy.c
620 @@ -521,8 +521,8 @@ static unsigned long fdc_busy;
621 static DECLARE_WAIT_QUEUE_HEAD(fdc_wait);
622 static DECLARE_WAIT_QUEUE_HEAD(command_done);
623
624 -/* Errors during formatting are counted here. */
625 -static int format_errors;
626 +/* errors encountered on the current (or last) request */
627 +static int floppy_errors;
628
629 /* Format request descriptor. */
630 static struct format_descr format_req;
631 @@ -542,7 +542,6 @@ static struct format_descr format_req;
632 static char *floppy_track_buffer;
633 static int max_buffer_sectors;
634
635 -static int *errors;
636 typedef void (*done_f)(int);
637 static const struct cont_t {
638 void (*interrupt)(void);
639 @@ -1435,7 +1434,7 @@ static int interpret_errors(void)
640 if (DP->flags & FTD_MSG)
641 DPRINT("Over/Underrun - retrying\n");
642 bad = 0;
643 - } else if (*errors >= DP->max_errors.reporting) {
644 + } else if (floppy_errors >= DP->max_errors.reporting) {
645 print_errors();
646 }
647 if (ST2 & ST2_WC || ST2 & ST2_BC)
648 @@ -2055,7 +2054,7 @@ static void bad_flp_intr(void)
649 if (!next_valid_format())
650 return;
651 }
652 - err_count = ++(*errors);
653 + err_count = ++floppy_errors;
654 INFBOUND(DRWE->badness, err_count);
655 if (err_count > DP->max_errors.abort)
656 cont->done(0);
657 @@ -2200,9 +2199,8 @@ static int do_format(int drive, struct format_descr *tmp_format_req)
658 return -EINVAL;
659 }
660 format_req = *tmp_format_req;
661 - format_errors = 0;
662 cont = &format_cont;
663 - errors = &format_errors;
664 + floppy_errors = 0;
665 ret = wait_til_done(redo_format, true);
666 if (ret == -EINTR)
667 return -EINTR;
668 @@ -2677,7 +2675,7 @@ static int make_raw_rw_request(void)
669 */
670 if (!direct ||
671 (indirect * 2 > direct * 3 &&
672 - *errors < DP->max_errors.read_track &&
673 + floppy_errors < DP->max_errors.read_track &&
674 ((!probing ||
675 (DP->read_track & (1 << DRS->probed_format)))))) {
676 max_size = blk_rq_sectors(current_req);
677 @@ -2801,10 +2799,11 @@ static int set_next_request(void)
678 current_req = list_first_entry_or_null(&floppy_reqs, struct request,
679 queuelist);
680 if (current_req) {
681 - current_req->error_count = 0;
682 + floppy_errors = 0;
683 list_del_init(&current_req->queuelist);
684 + return 1;
685 }
686 - return current_req != NULL;
687 + return 0;
688 }
689
690 static void redo_fd_request(void)
691 @@ -2860,7 +2859,6 @@ do_request:
692 _floppy = floppy_type + DP->autodetect[DRS->probed_format];
693 } else
694 probing = 0;
695 - errors = &(current_req->error_count);
696 tmp = make_raw_rw_request();
697 if (tmp < 2) {
698 request_done(tmp);
699 diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
700 index d7fe1303f79dc..0e7ec5075689a 100644
701 --- a/drivers/clk/at91/clk-generated.c
702 +++ b/drivers/clk/at91/clk-generated.c
703 @@ -105,6 +105,10 @@ static void clk_generated_best_diff(struct clk_rate_request *req,
704 tmp_rate = parent_rate;
705 else
706 tmp_rate = parent_rate / div;
707 +
708 + if (tmp_rate < req->min_rate || tmp_rate > req->max_rate)
709 + return;
710 +
711 tmp_diff = abs(req->rate - tmp_rate);
712
713 if (*best_diff < 0 || *best_diff >= tmp_diff) {
714 diff --git a/drivers/crypto/qcom-rng.c b/drivers/crypto/qcom-rng.c
715 index 3a633a0c40fdf..6cc4fd005fe07 100644
716 --- a/drivers/crypto/qcom-rng.c
717 +++ b/drivers/crypto/qcom-rng.c
718 @@ -64,6 +64,7 @@ static int qcom_rng_read(struct qcom_rng *rng, u8 *data, unsigned int max)
719 } else {
720 /* copy only remaining bytes */
721 memcpy(data, &val, max - currsize);
722 + break;
723 }
724 } while (currsize < max);
725
726 diff --git a/drivers/crypto/stm32/stm32-crc32.c b/drivers/crypto/stm32/stm32-crc32.c
727 index fb640e0ea6140..2ecc970f5cae5 100644
728 --- a/drivers/crypto/stm32/stm32-crc32.c
729 +++ b/drivers/crypto/stm32/stm32-crc32.c
730 @@ -332,8 +332,10 @@ static int stm32_crc_remove(struct platform_device *pdev)
731 struct stm32_crc *crc = platform_get_drvdata(pdev);
732 int ret = pm_runtime_get_sync(crc->dev);
733
734 - if (ret < 0)
735 + if (ret < 0) {
736 + pm_runtime_put_noidle(crc->dev);
737 return ret;
738 + }
739
740 spin_lock(&crc_list.lock);
741 list_del(&crc->list);
742 diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
743 index 89a053b1d2799..b5ae28fce9a89 100644
744 --- a/drivers/gpio/gpio-mvebu.c
745 +++ b/drivers/gpio/gpio-mvebu.c
746 @@ -697,6 +697,9 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
747 unsigned long flags;
748 unsigned int on, off;
749
750 + if (state->polarity != PWM_POLARITY_NORMAL)
751 + return -EINVAL;
752 +
753 val = (unsigned long long) mvpwm->clk_rate * state->duty_cycle;
754 do_div(val, NSEC_PER_SEC);
755 if (val > UINT_MAX)
756 diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
757 index 58776f2d69ff8..1ae612c796eef 100644
758 --- a/drivers/gpio/gpio-vf610.c
759 +++ b/drivers/gpio/gpio-vf610.c
760 @@ -125,9 +125,13 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
761 {
762 struct vf610_gpio_port *port = gpiochip_get_data(chip);
763 unsigned long mask = BIT(gpio);
764 + u32 val;
765
766 - if (port->sdata && port->sdata->have_paddr)
767 - vf610_gpio_writel(mask, port->gpio_base + GPIO_PDDR);
768 + if (port->sdata && port->sdata->have_paddr) {
769 + val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR);
770 + val |= mask;
771 + vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR);
772 + }
773
774 vf610_gpio_set(chip, gpio, value);
775
776 diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
777 index 2de1eebe591f9..1ff13af133243 100644
778 --- a/drivers/gpu/drm/drm_dp_mst_topology.c
779 +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
780 @@ -3657,6 +3657,7 @@ static void fetch_monitor_name(struct drm_dp_mst_topology_mgr *mgr,
781
782 mst_edid = drm_dp_mst_get_edid(port->connector, mgr, port);
783 drm_edid_get_monitor_name(mst_edid, name, namelen);
784 + kfree(mst_edid);
785 }
786
787 /**
788 diff --git a/drivers/i2c/busses/i2c-mt7621.c b/drivers/i2c/busses/i2c-mt7621.c
789 index 62df8379bc895..65e72101b393b 100644
790 --- a/drivers/i2c/busses/i2c-mt7621.c
791 +++ b/drivers/i2c/busses/i2c-mt7621.c
792 @@ -304,7 +304,8 @@ static int mtk_i2c_probe(struct platform_device *pdev)
793
794 if (i2c->bus_freq == 0) {
795 dev_warn(i2c->dev, "clock-frequency 0 not supported\n");
796 - return -EINVAL;
797 + ret = -EINVAL;
798 + goto err_disable_clk;
799 }
800
801 adap = &i2c->adap;
802 @@ -322,10 +323,15 @@ static int mtk_i2c_probe(struct platform_device *pdev)
803
804 ret = i2c_add_adapter(adap);
805 if (ret < 0)
806 - return ret;
807 + goto err_disable_clk;
808
809 dev_info(&pdev->dev, "clock %u kHz\n", i2c->bus_freq / 1000);
810
811 + return 0;
812 +
813 +err_disable_clk:
814 + clk_disable_unprepare(i2c->clk);
815 +
816 return ret;
817 }
818
819 diff --git a/drivers/input/input.c b/drivers/input/input.c
820 index e2eb9b9b8363d..0e16a9980c6a1 100644
821 --- a/drivers/input/input.c
822 +++ b/drivers/input/input.c
823 @@ -47,6 +47,17 @@ static DEFINE_MUTEX(input_mutex);
824
825 static const struct input_value input_value_sync = { EV_SYN, SYN_REPORT, 1 };
826
827 +static const unsigned int input_max_code[EV_CNT] = {
828 + [EV_KEY] = KEY_MAX,
829 + [EV_REL] = REL_MAX,
830 + [EV_ABS] = ABS_MAX,
831 + [EV_MSC] = MSC_MAX,
832 + [EV_SW] = SW_MAX,
833 + [EV_LED] = LED_MAX,
834 + [EV_SND] = SND_MAX,
835 + [EV_FF] = FF_MAX,
836 +};
837 +
838 static inline int is_event_supported(unsigned int code,
839 unsigned long *bm, unsigned int max)
840 {
841 @@ -1978,6 +1989,14 @@ EXPORT_SYMBOL(input_get_timestamp);
842 */
843 void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)
844 {
845 + if (type < EV_CNT && input_max_code[type] &&
846 + code > input_max_code[type]) {
847 + pr_err("%s: invalid code %u for type %u\n", __func__, code,
848 + type);
849 + dump_stack();
850 + return;
851 + }
852 +
853 switch (type) {
854 case EV_KEY:
855 __set_bit(code, dev->keybit);
856 diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c
857 index 22839dde1d09f..bc6f6a2ac4b9d 100644
858 --- a/drivers/input/touchscreen/ili210x.c
859 +++ b/drivers/input/touchscreen/ili210x.c
860 @@ -290,9 +290,9 @@ static int ili210x_i2c_probe(struct i2c_client *client,
861 if (error)
862 return error;
863
864 - usleep_range(50, 100);
865 + usleep_range(12000, 15000);
866 gpiod_set_value_cansleep(reset_gpio, 0);
867 - msleep(100);
868 + msleep(160);
869 }
870
871 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
872 diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
873 index cd8805d71d977..be1dd504d5b1d 100644
874 --- a/drivers/input/touchscreen/stmfts.c
875 +++ b/drivers/input/touchscreen/stmfts.c
876 @@ -339,11 +339,11 @@ static int stmfts_input_open(struct input_dev *dev)
877
878 err = pm_runtime_get_sync(&sdata->client->dev);
879 if (err < 0)
880 - return err;
881 + goto out;
882
883 err = i2c_smbus_write_byte(sdata->client, STMFTS_MS_MT_SENSE_ON);
884 if (err)
885 - return err;
886 + goto out;
887
888 mutex_lock(&sdata->mutex);
889 sdata->running = true;
890 @@ -366,7 +366,9 @@ static int stmfts_input_open(struct input_dev *dev)
891 "failed to enable touchkey\n");
892 }
893
894 - return 0;
895 +out:
896 + pm_runtime_put_noidle(&sdata->client->dev);
897 + return err;
898 }
899
900 static void stmfts_input_close(struct input_dev *dev)
901 diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
902 index 362ad361d5861..709f117fd5772 100644
903 --- a/drivers/mmc/core/block.c
904 +++ b/drivers/mmc/core/block.c
905 @@ -1126,7 +1126,7 @@ static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
906 card->erase_arg == MMC_TRIM_ARG ?
907 INAND_CMD38_ARG_TRIM :
908 INAND_CMD38_ARG_ERASE,
909 - 0);
910 + card->ext_csd.generic_cmd6_time);
911 }
912 if (!err)
913 err = mmc_erase(card, from, nr, card->erase_arg);
914 @@ -1168,7 +1168,7 @@ retry:
915 arg == MMC_SECURE_TRIM1_ARG ?
916 INAND_CMD38_ARG_SECTRIM1 :
917 INAND_CMD38_ARG_SECERASE,
918 - 0);
919 + card->ext_csd.generic_cmd6_time);
920 if (err)
921 goto out_retry;
922 }
923 @@ -1186,7 +1186,7 @@ retry:
924 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
925 INAND_CMD38_ARG_EXT_CSD,
926 INAND_CMD38_ARG_SECTRIM2,
927 - 0);
928 + card->ext_csd.generic_cmd6_time);
929 if (err)
930 goto out_retry;
931 }
932 diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
933 index 09311c2bd8588..d495ba2f368cb 100644
934 --- a/drivers/mmc/core/mmc_ops.c
935 +++ b/drivers/mmc/core/mmc_ops.c
936 @@ -19,7 +19,9 @@
937 #include "host.h"
938 #include "mmc_ops.h"
939
940 -#define MMC_OPS_TIMEOUT_MS (10 * 60 * 1000) /* 10 minute timeout */
941 +#define MMC_OPS_TIMEOUT_MS (10 * 60 * 1000) /* 10min*/
942 +#define MMC_BKOPS_TIMEOUT_MS (120 * 1000) /* 120s */
943 +#define MMC_CACHE_FLUSH_TIMEOUT_MS (30 * 1000) /* 30s */
944
945 static const u8 tuning_blk_pattern_4bit[] = {
946 0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
947 @@ -458,10 +460,6 @@ static int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms,
948 bool expired = false;
949 bool busy = false;
950
951 - /* We have an unspecified cmd timeout, use the fallback value. */
952 - if (!timeout_ms)
953 - timeout_ms = MMC_OPS_TIMEOUT_MS;
954 -
955 /*
956 * In cases when not allowed to poll by using CMD13 or because we aren't
957 * capable of polling by using ->card_busy(), then rely on waiting the
958 @@ -534,6 +532,12 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
959
960 mmc_retune_hold(host);
961
962 + if (!timeout_ms) {
963 + pr_warn("%s: unspecified timeout for CMD6 - use generic\n",
964 + mmc_hostname(host));
965 + timeout_ms = card->ext_csd.generic_cmd6_time;
966 + }
967 +
968 /*
969 * If the cmd timeout and the max_busy_timeout of the host are both
970 * specified, let's validate them. A failure means we need to prevent
971 @@ -542,7 +546,7 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
972 * which also means they are on their own when it comes to deal with the
973 * busy timeout.
974 */
975 - if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) && timeout_ms &&
976 + if (!(host->caps & MMC_CAP_NEED_RSP_BUSY) &&
977 host->max_busy_timeout && (timeout_ms > host->max_busy_timeout))
978 use_r1b_resp = false;
979
980 @@ -554,10 +558,6 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
981 cmd.flags = MMC_CMD_AC;
982 if (use_r1b_resp) {
983 cmd.flags |= MMC_RSP_SPI_R1B | MMC_RSP_R1B;
984 - /*
985 - * A busy_timeout of zero means the host can decide to use
986 - * whatever value it finds suitable.
987 - */
988 cmd.busy_timeout = timeout_ms;
989 } else {
990 cmd.flags |= MMC_RSP_SPI_R1 | MMC_RSP_R1;
991 @@ -943,7 +943,7 @@ void mmc_run_bkops(struct mmc_card *card)
992 * urgent levels by using an asynchronous background task, when idle.
993 */
994 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
995 - EXT_CSD_BKOPS_START, 1, MMC_OPS_TIMEOUT_MS);
996 + EXT_CSD_BKOPS_START, 1, MMC_BKOPS_TIMEOUT_MS);
997 if (err)
998 pr_warn("%s: Error %d starting bkops\n",
999 mmc_hostname(card->host), err);
1000 @@ -961,7 +961,8 @@ int mmc_flush_cache(struct mmc_card *card)
1001
1002 if (mmc_cache_enabled(card->host)) {
1003 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1004 - EXT_CSD_FLUSH_CACHE, 1, 0);
1005 + EXT_CSD_FLUSH_CACHE, 1,
1006 + MMC_CACHE_FLUSH_TIMEOUT_MS);
1007 if (err)
1008 pr_err("%s: cache flush error %d\n",
1009 mmc_hostname(card->host), err);
1010 diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
1011 index 2ad3fa6316ce3..cb5954eeb4090 100644
1012 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
1013 +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
1014 @@ -674,6 +674,13 @@ static int hw_atl_b0_hw_ring_tx_head_update(struct aq_hw_s *self,
1015 err = -ENXIO;
1016 goto err_exit;
1017 }
1018 +
1019 + /* Validate that the new hw_head_ is reasonable. */
1020 + if (hw_head_ >= ring->size) {
1021 + err = -ENXIO;
1022 + goto err_exit;
1023 + }
1024 +
1025 ring->hw_head = hw_head_;
1026 err = aq_hw_err_from_flags(self);
1027
1028 diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
1029 index 002a374f197bd..78219a9943a73 100644
1030 --- a/drivers/net/ethernet/cadence/macb_main.c
1031 +++ b/drivers/net/ethernet/cadence/macb_main.c
1032 @@ -927,7 +927,6 @@ static void gem_rx_refill(struct macb_queue *queue)
1033 /* Make hw descriptor updates visible to CPU */
1034 rmb();
1035
1036 - queue->rx_prepared_head++;
1037 desc = macb_rx_desc(queue, entry);
1038
1039 if (!queue->rx_skbuff[entry]) {
1040 @@ -966,6 +965,7 @@ static void gem_rx_refill(struct macb_queue *queue)
1041 dma_wmb();
1042 desc->addr &= ~MACB_BIT(RX_USED);
1043 }
1044 + queue->rx_prepared_head++;
1045 }
1046
1047 /* Make descriptor updates visible to hardware */
1048 diff --git a/drivers/net/ethernet/dec/tulip/tulip_core.c b/drivers/net/ethernet/dec/tulip/tulip_core.c
1049 index 3e3e08698876b..fea4223ad6f15 100644
1050 --- a/drivers/net/ethernet/dec/tulip/tulip_core.c
1051 +++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
1052 @@ -1410,8 +1410,10 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1053
1054 /* alloc_etherdev ensures aligned and zeroed private structures */
1055 dev = alloc_etherdev (sizeof (*tp));
1056 - if (!dev)
1057 + if (!dev) {
1058 + pci_disable_device(pdev);
1059 return -ENOMEM;
1060 + }
1061
1062 SET_NETDEV_DEV(dev, &pdev->dev);
1063 if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
1064 @@ -1788,6 +1790,7 @@ err_out_free_res:
1065
1066 err_out_free_netdev:
1067 free_netdev (dev);
1068 + pci_disable_device(pdev);
1069 return -ENODEV;
1070 }
1071
1072 diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
1073 index 3eea68f3a5262..88750a96cb3f2 100644
1074 --- a/drivers/net/ethernet/intel/ice/ice_main.c
1075 +++ b/drivers/net/ethernet/intel/ice/ice_main.c
1076 @@ -3561,9 +3561,10 @@ static int ice_up_complete(struct ice_vsi *vsi)
1077 netif_carrier_on(vsi->netdev);
1078 }
1079
1080 - /* clear this now, and the first stats read will be used as baseline */
1081 - vsi->stat_offsets_loaded = false;
1082 -
1083 + /* Perform an initial read of the statistics registers now to
1084 + * set the baseline so counters are ready when interface is up
1085 + */
1086 + ice_update_eth_stats(vsi);
1087 ice_service_task_schedule(pf);
1088
1089 return 0;
1090 diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
1091 index 3df25b231ab5c..26c8d09ad4ddb 100644
1092 --- a/drivers/net/ethernet/intel/igb/igb_main.c
1093 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
1094 @@ -5318,7 +5318,8 @@ static void igb_watchdog_task(struct work_struct *work)
1095 break;
1096 }
1097
1098 - if (adapter->link_speed != SPEED_1000)
1099 + if (adapter->link_speed != SPEED_1000 ||
1100 + !hw->phy.ops.read_reg)
1101 goto no_wait;
1102
1103 /* wait for Remote receiver status OK */
1104 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
1105 index 2465165cbea73..73291051808f9 100644
1106 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
1107 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
1108 @@ -3980,6 +3980,13 @@ static netdev_features_t mlx5e_fix_features(struct net_device *netdev,
1109 }
1110 }
1111
1112 + if (params->xdp_prog) {
1113 + if (features & NETIF_F_LRO) {
1114 + netdev_warn(netdev, "LRO is incompatible with XDP\n");
1115 + features &= ~NETIF_F_LRO;
1116 + }
1117 + }
1118 +
1119 if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_CQE_COMPRESS)) {
1120 features &= ~NETIF_F_RXHASH;
1121 if (netdev->features & NETIF_F_RXHASH)
1122 diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
1123 index da2862d596813..5e81cd317a32f 100644
1124 --- a/drivers/net/ethernet/qlogic/qla3xxx.c
1125 +++ b/drivers/net/ethernet/qlogic/qla3xxx.c
1126 @@ -3629,7 +3629,8 @@ static void ql_reset_work(struct work_struct *work)
1127 qdev->mem_map_registers;
1128 unsigned long hw_flags;
1129
1130 - if (test_bit((QL_RESET_PER_SCSI | QL_RESET_START), &qdev->flags)) {
1131 + if (test_bit(QL_RESET_PER_SCSI, &qdev->flags) ||
1132 + test_bit(QL_RESET_START, &qdev->flags)) {
1133 clear_bit(QL_LINK_MASTER, &qdev->flags);
1134
1135 /*
1136 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1137 index 9cbc0179d24ec..9931724c4727d 100644
1138 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1139 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1140 @@ -4531,7 +4531,7 @@ int stmmac_dvr_probe(struct device *device,
1141 dev_info(priv->device, "TSO feature enabled\n");
1142 }
1143
1144 - if (priv->dma_cap.sphen) {
1145 + if (priv->dma_cap.sphen && !priv->plat->sph_disable) {
1146 ndev->hw_features |= NETIF_F_GRO;
1147 priv->sph = true;
1148 dev_info(priv->device, "SPH feature enabled\n");
1149 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
1150 index 292045f4581f7..0edcf3f704b74 100644
1151 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
1152 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
1153 @@ -119,6 +119,7 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
1154 plat->has_gmac4 = 1;
1155 plat->force_sf_dma_mode = 0;
1156 plat->tso_en = 1;
1157 + plat->sph_disable = 1;
1158
1159 plat->rx_sched_algorithm = MTL_RX_ALGORITHM_SP;
1160
1161 @@ -481,7 +482,7 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
1162 return -ENOMEM;
1163
1164 /* Enable pci device */
1165 - ret = pci_enable_device(pdev);
1166 + ret = pcim_enable_device(pdev);
1167 if (ret) {
1168 dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n",
1169 __func__);
1170 @@ -538,8 +539,6 @@ static void stmmac_pci_remove(struct pci_dev *pdev)
1171 pcim_iounmap_regions(pdev, BIT(i));
1172 break;
1173 }
1174 -
1175 - pci_disable_device(pdev);
1176 }
1177
1178 static int __maybe_unused stmmac_pci_suspend(struct device *dev)
1179 diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
1180 index cf090f88dac03..609f65530b9b0 100644
1181 --- a/drivers/net/vmxnet3/vmxnet3_drv.c
1182 +++ b/drivers/net/vmxnet3/vmxnet3_drv.c
1183 @@ -595,6 +595,7 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
1184 if (dma_mapping_error(&adapter->pdev->dev,
1185 rbi->dma_addr)) {
1186 dev_kfree_skb_any(rbi->skb);
1187 + rbi->skb = NULL;
1188 rq->stats.rx_buf_alloc_failure++;
1189 break;
1190 }
1191 @@ -619,6 +620,7 @@ vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
1192 if (dma_mapping_error(&adapter->pdev->dev,
1193 rbi->dma_addr)) {
1194 put_page(rbi->page);
1195 + rbi->page = NULL;
1196 rq->stats.rx_buf_alloc_failure++;
1197 break;
1198 }
1199 @@ -1584,6 +1586,10 @@ vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,
1200 u32 i, ring_idx;
1201 struct Vmxnet3_RxDesc *rxd;
1202
1203 + /* ring has already been cleaned up */
1204 + if (!rq->rx_ring[0].base)
1205 + return;
1206 +
1207 for (ring_idx = 0; ring_idx < 2; ring_idx++) {
1208 for (i = 0; i < rq->rx_ring[ring_idx].size; i++) {
1209 #ifdef __BIG_ENDIAN_BITFIELD
1210 diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
1211 index 6a9a42809f972..79e22618817de 100644
1212 --- a/drivers/nvme/host/core.c
1213 +++ b/drivers/nvme/host/core.c
1214 @@ -4047,6 +4047,7 @@ void nvme_start_ctrl(struct nvme_ctrl *ctrl)
1215 if (ctrl->queue_count > 1) {
1216 nvme_queue_scan(ctrl);
1217 nvme_start_queues(ctrl);
1218 + nvme_mpath_update(ctrl);
1219 }
1220 ctrl->created = true;
1221 }
1222 diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
1223 index 4d615337e6e22..811f7b96b5517 100644
1224 --- a/drivers/nvme/host/multipath.c
1225 +++ b/drivers/nvme/host/multipath.c
1226 @@ -501,8 +501,17 @@ static void nvme_update_ns_ana_state(struct nvme_ana_group_desc *desc,
1227 ns->ana_grpid = le32_to_cpu(desc->grpid);
1228 ns->ana_state = desc->state;
1229 clear_bit(NVME_NS_ANA_PENDING, &ns->flags);
1230 -
1231 - if (nvme_state_is_live(ns->ana_state))
1232 + /*
1233 + * nvme_mpath_set_live() will trigger I/O to the multipath path device
1234 + * and in turn to this path device. However we cannot accept this I/O
1235 + * if the controller is not live. This may deadlock if called from
1236 + * nvme_mpath_init_identify() and the ctrl will never complete
1237 + * initialization, preventing I/O from completing. For this case we
1238 + * will reprocess the ANA log page in nvme_mpath_update() once the
1239 + * controller is ready.
1240 + */
1241 + if (nvme_state_is_live(ns->ana_state) &&
1242 + ns->ctrl->state == NVME_CTRL_LIVE)
1243 nvme_mpath_set_live(ns);
1244 }
1245
1246 @@ -586,6 +595,18 @@ static void nvme_ana_work(struct work_struct *work)
1247 nvme_read_ana_log(ctrl);
1248 }
1249
1250 +void nvme_mpath_update(struct nvme_ctrl *ctrl)
1251 +{
1252 + u32 nr_change_groups = 0;
1253 +
1254 + if (!ctrl->ana_log_buf)
1255 + return;
1256 +
1257 + mutex_lock(&ctrl->ana_lock);
1258 + nvme_parse_ana_log(ctrl, &nr_change_groups, nvme_update_ana_state);
1259 + mutex_unlock(&ctrl->ana_lock);
1260 +}
1261 +
1262 static void nvme_anatt_timeout(struct timer_list *t)
1263 {
1264 struct nvme_ctrl *ctrl = from_timer(ctrl, t, anatt_timer);
1265 diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
1266 index 2df90d4355b9a..1d1431dd4f9e3 100644
1267 --- a/drivers/nvme/host/nvme.h
1268 +++ b/drivers/nvme/host/nvme.h
1269 @@ -551,6 +551,7 @@ void nvme_mpath_add_disk(struct nvme_ns *ns, struct nvme_id_ns *id);
1270 void nvme_mpath_remove_disk(struct nvme_ns_head *head);
1271 int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, struct nvme_id_ctrl *id);
1272 void nvme_mpath_init_ctrl(struct nvme_ctrl *ctrl);
1273 +void nvme_mpath_update(struct nvme_ctrl *ctrl);
1274 void nvme_mpath_uninit(struct nvme_ctrl *ctrl);
1275 void nvme_mpath_stop(struct nvme_ctrl *ctrl);
1276 bool nvme_mpath_clear_current_path(struct nvme_ns *ns);
1277 @@ -648,6 +649,9 @@ static inline int nvme_mpath_init_identify(struct nvme_ctrl *ctrl,
1278 "Please enable CONFIG_NVME_MULTIPATH for full support of multi-port devices.\n");
1279 return 0;
1280 }
1281 +static inline void nvme_mpath_update(struct nvme_ctrl *ctrl)
1282 +{
1283 +}
1284 static inline void nvme_mpath_uninit(struct nvme_ctrl *ctrl)
1285 {
1286 }
1287 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
1288 index b9550cd4280ca..d539eb379743e 100644
1289 --- a/drivers/pci/pci.c
1290 +++ b/drivers/pci/pci.c
1291 @@ -2613,6 +2613,16 @@ static const struct dmi_system_id bridge_d3_blacklist[] = {
1292 DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
1293 DMI_MATCH(DMI_BOARD_NAME, "X299 DESIGNARE EX-CF"),
1294 },
1295 + /*
1296 + * Downstream device is not accessible after putting a root port
1297 + * into D3cold and back into D0 on Elo i2.
1298 + */
1299 + .ident = "Elo i2",
1300 + .matches = {
1301 + DMI_MATCH(DMI_SYS_VENDOR, "Elo Touch Solutions"),
1302 + DMI_MATCH(DMI_PRODUCT_NAME, "Elo i2"),
1303 + DMI_MATCH(DMI_PRODUCT_VERSION, "RevB"),
1304 + },
1305 },
1306 #endif
1307 { }
1308 diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
1309 index 6ae484989d1f5..c4b57e1df192a 100644
1310 --- a/drivers/platform/chrome/cros_ec_debugfs.c
1311 +++ b/drivers/platform/chrome/cros_ec_debugfs.c
1312 @@ -26,6 +26,9 @@
1313
1314 #define CIRC_ADD(idx, size, value) (((idx) + (value)) & ((size) - 1))
1315
1316 +/* waitqueue for log readers */
1317 +static DECLARE_WAIT_QUEUE_HEAD(cros_ec_debugfs_log_wq);
1318 +
1319 /**
1320 * struct cros_ec_debugfs - EC debugging information.
1321 *
1322 @@ -34,7 +37,6 @@
1323 * @log_buffer: circular buffer for console log information
1324 * @read_msg: preallocated EC command and buffer to read console log
1325 * @log_mutex: mutex to protect circular buffer
1326 - * @log_wq: waitqueue for log readers
1327 * @log_poll_work: recurring task to poll EC for new console log data
1328 * @panicinfo_blob: panicinfo debugfs blob
1329 */
1330 @@ -45,7 +47,6 @@ struct cros_ec_debugfs {
1331 struct circ_buf log_buffer;
1332 struct cros_ec_command *read_msg;
1333 struct mutex log_mutex;
1334 - wait_queue_head_t log_wq;
1335 struct delayed_work log_poll_work;
1336 /* EC panicinfo */
1337 struct debugfs_blob_wrapper panicinfo_blob;
1338 @@ -108,7 +109,7 @@ static void cros_ec_console_log_work(struct work_struct *__work)
1339 buf_space--;
1340 }
1341
1342 - wake_up(&debug_info->log_wq);
1343 + wake_up(&cros_ec_debugfs_log_wq);
1344 }
1345
1346 mutex_unlock(&debug_info->log_mutex);
1347 @@ -142,7 +143,7 @@ static ssize_t cros_ec_console_log_read(struct file *file, char __user *buf,
1348
1349 mutex_unlock(&debug_info->log_mutex);
1350
1351 - ret = wait_event_interruptible(debug_info->log_wq,
1352 + ret = wait_event_interruptible(cros_ec_debugfs_log_wq,
1353 CIRC_CNT(cb->head, cb->tail, LOG_SIZE));
1354 if (ret < 0)
1355 return ret;
1356 @@ -174,7 +175,7 @@ static __poll_t cros_ec_console_log_poll(struct file *file,
1357 struct cros_ec_debugfs *debug_info = file->private_data;
1358 __poll_t mask = 0;
1359
1360 - poll_wait(file, &debug_info->log_wq, wait);
1361 + poll_wait(file, &cros_ec_debugfs_log_wq, wait);
1362
1363 mutex_lock(&debug_info->log_mutex);
1364 if (CIRC_CNT(debug_info->log_buffer.head,
1365 @@ -359,7 +360,6 @@ static int cros_ec_create_console_log(struct cros_ec_debugfs *debug_info)
1366 debug_info->log_buffer.tail = 0;
1367
1368 mutex_init(&debug_info->log_mutex);
1369 - init_waitqueue_head(&debug_info->log_wq);
1370
1371 debugfs_create_file("console_log", S_IFREG | 0444, debug_info->dir,
1372 debug_info, &cros_ec_console_log_fops);
1373 diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
1374 index 9458e6d6686ac..8b434213bc7ad 100644
1375 --- a/drivers/rtc/class.c
1376 +++ b/drivers/rtc/class.c
1377 @@ -26,6 +26,15 @@ struct class *rtc_class;
1378 static void rtc_device_release(struct device *dev)
1379 {
1380 struct rtc_device *rtc = to_rtc_device(dev);
1381 + struct timerqueue_head *head = &rtc->timerqueue;
1382 + struct timerqueue_node *node;
1383 +
1384 + mutex_lock(&rtc->ops_lock);
1385 + while ((node = timerqueue_getnext(head)))
1386 + timerqueue_del(head, node);
1387 + mutex_unlock(&rtc->ops_lock);
1388 +
1389 + cancel_work_sync(&rtc->irqwork);
1390
1391 ida_simple_remove(&rtc_ida, rtc->id);
1392 kfree(rtc);
1393 diff --git a/drivers/rtc/rtc-mc146818-lib.c b/drivers/rtc/rtc-mc146818-lib.c
1394 index 5add637c9ad23..b036ff33fbe61 100644
1395 --- a/drivers/rtc/rtc-mc146818-lib.c
1396 +++ b/drivers/rtc/rtc-mc146818-lib.c
1397 @@ -99,6 +99,17 @@ unsigned int mc146818_get_time(struct rtc_time *time)
1398 }
1399 EXPORT_SYMBOL_GPL(mc146818_get_time);
1400
1401 +/* AMD systems don't allow access to AltCentury with DV1 */
1402 +static bool apply_amd_register_a_behavior(void)
1403 +{
1404 +#ifdef CONFIG_X86
1405 + if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD ||
1406 + boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)
1407 + return true;
1408 +#endif
1409 + return false;
1410 +}
1411 +
1412 /* Set the current date and time in the real time clock. */
1413 int mc146818_set_time(struct rtc_time *time)
1414 {
1415 @@ -172,7 +183,10 @@ int mc146818_set_time(struct rtc_time *time)
1416 save_control = CMOS_READ(RTC_CONTROL);
1417 CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL);
1418 save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
1419 - CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
1420 + if (apply_amd_register_a_behavior())
1421 + CMOS_WRITE((save_freq_select & ~RTC_AMD_BANK_SELECT), RTC_FREQ_SELECT);
1422 + else
1423 + CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
1424
1425 #ifdef CONFIG_MACH_DECSTATION
1426 CMOS_WRITE(real_yrs, RTC_DEC_YEAR);
1427 diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
1428 index df598c377161d..cb97565b6a333 100644
1429 --- a/drivers/scsi/qla2xxx/qla_target.c
1430 +++ b/drivers/scsi/qla2xxx/qla_target.c
1431 @@ -3768,6 +3768,9 @@ int qlt_abort_cmd(struct qla_tgt_cmd *cmd)
1432
1433 spin_lock_irqsave(&cmd->cmd_lock, flags);
1434 if (cmd->aborted) {
1435 + if (cmd->sg_mapped)
1436 + qlt_unmap_sg(vha, cmd);
1437 +
1438 spin_unlock_irqrestore(&cmd->cmd_lock, flags);
1439 /*
1440 * It's normal to see 2 calls in this path:
1441 diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
1442 index 1058aba8d5734..3e0267ead718d 100644
1443 --- a/drivers/vhost/net.c
1444 +++ b/drivers/vhost/net.c
1445 @@ -1446,13 +1446,9 @@ err:
1446 return ERR_PTR(r);
1447 }
1448
1449 -static struct ptr_ring *get_tap_ptr_ring(int fd)
1450 +static struct ptr_ring *get_tap_ptr_ring(struct file *file)
1451 {
1452 struct ptr_ring *ring;
1453 - struct file *file = fget(fd);
1454 -
1455 - if (!file)
1456 - return NULL;
1457 ring = tun_get_tx_ring(file);
1458 if (!IS_ERR(ring))
1459 goto out;
1460 @@ -1461,7 +1457,6 @@ static struct ptr_ring *get_tap_ptr_ring(int fd)
1461 goto out;
1462 ring = NULL;
1463 out:
1464 - fput(file);
1465 return ring;
1466 }
1467
1468 @@ -1548,8 +1543,12 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
1469 r = vhost_net_enable_vq(n, vq);
1470 if (r)
1471 goto err_used;
1472 - if (index == VHOST_NET_VQ_RX)
1473 - nvq->rx_ring = get_tap_ptr_ring(fd);
1474 + if (index == VHOST_NET_VQ_RX) {
1475 + if (sock)
1476 + nvq->rx_ring = get_tap_ptr_ring(sock->file);
1477 + else
1478 + nvq->rx_ring = NULL;
1479 + }
1480
1481 oldubufs = nvq->ubufs;
1482 nvq->ubufs = ubufs;
1483 diff --git a/fs/afs/inode.c b/fs/afs/inode.c
1484 index 4f58b28a1edd2..90eac3ec01cbc 100644
1485 --- a/fs/afs/inode.c
1486 +++ b/fs/afs/inode.c
1487 @@ -734,10 +734,22 @@ int afs_getattr(const struct path *path, struct kstat *stat,
1488 {
1489 struct inode *inode = d_inode(path->dentry);
1490 struct afs_vnode *vnode = AFS_FS_I(inode);
1491 - int seq = 0;
1492 + struct key *key;
1493 + int ret, seq = 0;
1494
1495 _enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation);
1496
1497 + if (!(query_flags & AT_STATX_DONT_SYNC) &&
1498 + !test_bit(AFS_VNODE_CB_PROMISED, &vnode->flags)) {
1499 + key = afs_request_key(vnode->volume->cell);
1500 + if (IS_ERR(key))
1501 + return PTR_ERR(key);
1502 + ret = afs_validate(vnode, key);
1503 + key_put(key);
1504 + if (ret < 0)
1505 + return ret;
1506 + }
1507 +
1508 do {
1509 read_seqbegin_or_lock(&vnode->cb_lock, &seq);
1510 generic_fillattr(inode, stat);
1511 diff --git a/fs/file_table.c b/fs/file_table.c
1512 index 30d55c9a1744a..70e8fb68a1717 100644
1513 --- a/fs/file_table.c
1514 +++ b/fs/file_table.c
1515 @@ -375,6 +375,7 @@ void __fput_sync(struct file *file)
1516 }
1517
1518 EXPORT_SYMBOL(fput);
1519 +EXPORT_SYMBOL(__fput_sync);
1520
1521 void __init files_init(void)
1522 {
1523 diff --git a/fs/nilfs2/btnode.c b/fs/nilfs2/btnode.c
1524 index 4391fd3abd8f8..e00e184b12615 100644
1525 --- a/fs/nilfs2/btnode.c
1526 +++ b/fs/nilfs2/btnode.c
1527 @@ -20,6 +20,23 @@
1528 #include "page.h"
1529 #include "btnode.h"
1530
1531 +
1532 +/**
1533 + * nilfs_init_btnc_inode - initialize B-tree node cache inode
1534 + * @btnc_inode: inode to be initialized
1535 + *
1536 + * nilfs_init_btnc_inode() sets up an inode for B-tree node cache.
1537 + */
1538 +void nilfs_init_btnc_inode(struct inode *btnc_inode)
1539 +{
1540 + struct nilfs_inode_info *ii = NILFS_I(btnc_inode);
1541 +
1542 + btnc_inode->i_mode = S_IFREG;
1543 + ii->i_flags = 0;
1544 + memset(&ii->i_bmap_data, 0, sizeof(struct nilfs_bmap));
1545 + mapping_set_gfp_mask(btnc_inode->i_mapping, GFP_NOFS);
1546 +}
1547 +
1548 void nilfs_btnode_cache_clear(struct address_space *btnc)
1549 {
1550 invalidate_mapping_pages(btnc, 0, -1);
1551 @@ -29,7 +46,7 @@ void nilfs_btnode_cache_clear(struct address_space *btnc)
1552 struct buffer_head *
1553 nilfs_btnode_create_block(struct address_space *btnc, __u64 blocknr)
1554 {
1555 - struct inode *inode = NILFS_BTNC_I(btnc);
1556 + struct inode *inode = btnc->host;
1557 struct buffer_head *bh;
1558
1559 bh = nilfs_grab_buffer(inode, btnc, blocknr, BIT(BH_NILFS_Node));
1560 @@ -57,7 +74,7 @@ int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr,
1561 struct buffer_head **pbh, sector_t *submit_ptr)
1562 {
1563 struct buffer_head *bh;
1564 - struct inode *inode = NILFS_BTNC_I(btnc);
1565 + struct inode *inode = btnc->host;
1566 struct page *page;
1567 int err;
1568
1569 @@ -157,7 +174,7 @@ int nilfs_btnode_prepare_change_key(struct address_space *btnc,
1570 struct nilfs_btnode_chkey_ctxt *ctxt)
1571 {
1572 struct buffer_head *obh, *nbh;
1573 - struct inode *inode = NILFS_BTNC_I(btnc);
1574 + struct inode *inode = btnc->host;
1575 __u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;
1576 int err;
1577
1578 diff --git a/fs/nilfs2/btnode.h b/fs/nilfs2/btnode.h
1579 index 0f88dbc9bcb3e..05ab64d354dc9 100644
1580 --- a/fs/nilfs2/btnode.h
1581 +++ b/fs/nilfs2/btnode.h
1582 @@ -30,6 +30,7 @@ struct nilfs_btnode_chkey_ctxt {
1583 struct buffer_head *newbh;
1584 };
1585
1586 +void nilfs_init_btnc_inode(struct inode *btnc_inode);
1587 void nilfs_btnode_cache_clear(struct address_space *);
1588 struct buffer_head *nilfs_btnode_create_block(struct address_space *btnc,
1589 __u64 blocknr);
1590 diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c
1591 index 23e043eca237b..919d1238ce45f 100644
1592 --- a/fs/nilfs2/btree.c
1593 +++ b/fs/nilfs2/btree.c
1594 @@ -58,7 +58,8 @@ static void nilfs_btree_free_path(struct nilfs_btree_path *path)
1595 static int nilfs_btree_get_new_block(const struct nilfs_bmap *btree,
1596 __u64 ptr, struct buffer_head **bhp)
1597 {
1598 - struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache;
1599 + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode;
1600 + struct address_space *btnc = btnc_inode->i_mapping;
1601 struct buffer_head *bh;
1602
1603 bh = nilfs_btnode_create_block(btnc, ptr);
1604 @@ -470,7 +471,8 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr,
1605 struct buffer_head **bhp,
1606 const struct nilfs_btree_readahead_info *ra)
1607 {
1608 - struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache;
1609 + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode;
1610 + struct address_space *btnc = btnc_inode->i_mapping;
1611 struct buffer_head *bh, *ra_bh;
1612 sector_t submit_ptr = 0;
1613 int ret;
1614 @@ -1742,6 +1744,10 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *btree, __u64 key,
1615 dat = nilfs_bmap_get_dat(btree);
1616 }
1617
1618 + ret = nilfs_attach_btree_node_cache(&NILFS_BMAP_I(btree)->vfs_inode);
1619 + if (ret < 0)
1620 + return ret;
1621 +
1622 ret = nilfs_bmap_prepare_alloc_ptr(btree, dreq, dat);
1623 if (ret < 0)
1624 return ret;
1625 @@ -1914,7 +1920,7 @@ static int nilfs_btree_prepare_update_v(struct nilfs_bmap *btree,
1626 path[level].bp_ctxt.newkey = path[level].bp_newreq.bpr_ptr;
1627 path[level].bp_ctxt.bh = path[level].bp_bh;
1628 ret = nilfs_btnode_prepare_change_key(
1629 - &NILFS_BMAP_I(btree)->i_btnode_cache,
1630 + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
1631 &path[level].bp_ctxt);
1632 if (ret < 0) {
1633 nilfs_dat_abort_update(dat,
1634 @@ -1940,7 +1946,7 @@ static void nilfs_btree_commit_update_v(struct nilfs_bmap *btree,
1635
1636 if (buffer_nilfs_node(path[level].bp_bh)) {
1637 nilfs_btnode_commit_change_key(
1638 - &NILFS_BMAP_I(btree)->i_btnode_cache,
1639 + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
1640 &path[level].bp_ctxt);
1641 path[level].bp_bh = path[level].bp_ctxt.bh;
1642 }
1643 @@ -1959,7 +1965,7 @@ static void nilfs_btree_abort_update_v(struct nilfs_bmap *btree,
1644 &path[level].bp_newreq.bpr_req);
1645 if (buffer_nilfs_node(path[level].bp_bh))
1646 nilfs_btnode_abort_change_key(
1647 - &NILFS_BMAP_I(btree)->i_btnode_cache,
1648 + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
1649 &path[level].bp_ctxt);
1650 }
1651
1652 @@ -2135,7 +2141,8 @@ static void nilfs_btree_add_dirty_buffer(struct nilfs_bmap *btree,
1653 static void nilfs_btree_lookup_dirty_buffers(struct nilfs_bmap *btree,
1654 struct list_head *listp)
1655 {
1656 - struct address_space *btcache = &NILFS_BMAP_I(btree)->i_btnode_cache;
1657 + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode;
1658 + struct address_space *btcache = btnc_inode->i_mapping;
1659 struct list_head lists[NILFS_BTREE_LEVEL_MAX];
1660 struct pagevec pvec;
1661 struct buffer_head *bh, *head;
1662 @@ -2189,12 +2196,12 @@ static int nilfs_btree_assign_p(struct nilfs_bmap *btree,
1663 path[level].bp_ctxt.newkey = blocknr;
1664 path[level].bp_ctxt.bh = *bh;
1665 ret = nilfs_btnode_prepare_change_key(
1666 - &NILFS_BMAP_I(btree)->i_btnode_cache,
1667 + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
1668 &path[level].bp_ctxt);
1669 if (ret < 0)
1670 return ret;
1671 nilfs_btnode_commit_change_key(
1672 - &NILFS_BMAP_I(btree)->i_btnode_cache,
1673 + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
1674 &path[level].bp_ctxt);
1675 *bh = path[level].bp_ctxt.bh;
1676 }
1677 @@ -2399,6 +2406,10 @@ int nilfs_btree_init(struct nilfs_bmap *bmap)
1678
1679 if (nilfs_btree_root_broken(nilfs_btree_get_root(bmap), bmap->b_inode))
1680 ret = -EIO;
1681 + else
1682 + ret = nilfs_attach_btree_node_cache(
1683 + &NILFS_BMAP_I(bmap)->vfs_inode);
1684 +
1685 return ret;
1686 }
1687
1688 diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c
1689 index 6f4066636be9a..a3523a243e113 100644
1690 --- a/fs/nilfs2/dat.c
1691 +++ b/fs/nilfs2/dat.c
1692 @@ -497,7 +497,9 @@ int nilfs_dat_read(struct super_block *sb, size_t entry_size,
1693 di = NILFS_DAT_I(dat);
1694 lockdep_set_class(&di->mi.mi_sem, &dat_lock_key);
1695 nilfs_palloc_setup_cache(dat, &di->palloc_cache);
1696 - nilfs_mdt_setup_shadow_map(dat, &di->shadow);
1697 + err = nilfs_mdt_setup_shadow_map(dat, &di->shadow);
1698 + if (err)
1699 + goto failed;
1700
1701 err = nilfs_read_inode_common(dat, raw_inode);
1702 if (err)
1703 diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c
1704 index aa3c328ee189c..114774ac2185a 100644
1705 --- a/fs/nilfs2/gcinode.c
1706 +++ b/fs/nilfs2/gcinode.c
1707 @@ -126,9 +126,10 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff,
1708 int nilfs_gccache_submit_read_node(struct inode *inode, sector_t pbn,
1709 __u64 vbn, struct buffer_head **out_bh)
1710 {
1711 + struct inode *btnc_inode = NILFS_I(inode)->i_assoc_inode;
1712 int ret;
1713
1714 - ret = nilfs_btnode_submit_block(&NILFS_I(inode)->i_btnode_cache,
1715 + ret = nilfs_btnode_submit_block(btnc_inode->i_mapping,
1716 vbn ? : pbn, pbn, REQ_OP_READ, 0,
1717 out_bh, &pbn);
1718 if (ret == -EEXIST) /* internal code (cache hit) */
1719 @@ -170,7 +171,7 @@ int nilfs_init_gcinode(struct inode *inode)
1720 ii->i_flags = 0;
1721 nilfs_bmap_init_gc(ii->i_bmap);
1722
1723 - return 0;
1724 + return nilfs_attach_btree_node_cache(inode);
1725 }
1726
1727 /**
1728 @@ -185,7 +186,7 @@ void nilfs_remove_all_gcinodes(struct the_nilfs *nilfs)
1729 ii = list_first_entry(head, struct nilfs_inode_info, i_dirty);
1730 list_del_init(&ii->i_dirty);
1731 truncate_inode_pages(&ii->vfs_inode.i_data, 0);
1732 - nilfs_btnode_cache_clear(&ii->i_btnode_cache);
1733 + nilfs_btnode_cache_clear(ii->i_assoc_inode->i_mapping);
1734 iput(&ii->vfs_inode);
1735 }
1736 }
1737 diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
1738 index 671085512e0fd..35b0bfe9324f2 100644
1739 --- a/fs/nilfs2/inode.c
1740 +++ b/fs/nilfs2/inode.c
1741 @@ -28,12 +28,16 @@
1742 * @cno: checkpoint number
1743 * @root: pointer on NILFS root object (mounted checkpoint)
1744 * @for_gc: inode for GC flag
1745 + * @for_btnc: inode for B-tree node cache flag
1746 + * @for_shadow: inode for shadowed page cache flag
1747 */
1748 struct nilfs_iget_args {
1749 u64 ino;
1750 __u64 cno;
1751 struct nilfs_root *root;
1752 - int for_gc;
1753 + bool for_gc;
1754 + bool for_btnc;
1755 + bool for_shadow;
1756 };
1757
1758 static int nilfs_iget_test(struct inode *inode, void *opaque);
1759 @@ -322,7 +326,8 @@ static int nilfs_insert_inode_locked(struct inode *inode,
1760 unsigned long ino)
1761 {
1762 struct nilfs_iget_args args = {
1763 - .ino = ino, .root = root, .cno = 0, .for_gc = 0
1764 + .ino = ino, .root = root, .cno = 0, .for_gc = false,
1765 + .for_btnc = false, .for_shadow = false
1766 };
1767
1768 return insert_inode_locked4(inode, ino, nilfs_iget_test, &args);
1769 @@ -534,6 +539,19 @@ static int nilfs_iget_test(struct inode *inode, void *opaque)
1770 return 0;
1771
1772 ii = NILFS_I(inode);
1773 + if (test_bit(NILFS_I_BTNC, &ii->i_state)) {
1774 + if (!args->for_btnc)
1775 + return 0;
1776 + } else if (args->for_btnc) {
1777 + return 0;
1778 + }
1779 + if (test_bit(NILFS_I_SHADOW, &ii->i_state)) {
1780 + if (!args->for_shadow)
1781 + return 0;
1782 + } else if (args->for_shadow) {
1783 + return 0;
1784 + }
1785 +
1786 if (!test_bit(NILFS_I_GCINODE, &ii->i_state))
1787 return !args->for_gc;
1788
1789 @@ -545,15 +563,17 @@ static int nilfs_iget_set(struct inode *inode, void *opaque)
1790 struct nilfs_iget_args *args = opaque;
1791
1792 inode->i_ino = args->ino;
1793 - if (args->for_gc) {
1794 + NILFS_I(inode)->i_cno = args->cno;
1795 + NILFS_I(inode)->i_root = args->root;
1796 + if (args->root && args->ino == NILFS_ROOT_INO)
1797 + nilfs_get_root(args->root);
1798 +
1799 + if (args->for_gc)
1800 NILFS_I(inode)->i_state = BIT(NILFS_I_GCINODE);
1801 - NILFS_I(inode)->i_cno = args->cno;
1802 - NILFS_I(inode)->i_root = NULL;
1803 - } else {
1804 - if (args->root && args->ino == NILFS_ROOT_INO)
1805 - nilfs_get_root(args->root);
1806 - NILFS_I(inode)->i_root = args->root;
1807 - }
1808 + if (args->for_btnc)
1809 + NILFS_I(inode)->i_state |= BIT(NILFS_I_BTNC);
1810 + if (args->for_shadow)
1811 + NILFS_I(inode)->i_state |= BIT(NILFS_I_SHADOW);
1812 return 0;
1813 }
1814
1815 @@ -561,7 +581,8 @@ struct inode *nilfs_ilookup(struct super_block *sb, struct nilfs_root *root,
1816 unsigned long ino)
1817 {
1818 struct nilfs_iget_args args = {
1819 - .ino = ino, .root = root, .cno = 0, .for_gc = 0
1820 + .ino = ino, .root = root, .cno = 0, .for_gc = false,
1821 + .for_btnc = false, .for_shadow = false
1822 };
1823
1824 return ilookup5(sb, ino, nilfs_iget_test, &args);
1825 @@ -571,7 +592,8 @@ struct inode *nilfs_iget_locked(struct super_block *sb, struct nilfs_root *root,
1826 unsigned long ino)
1827 {
1828 struct nilfs_iget_args args = {
1829 - .ino = ino, .root = root, .cno = 0, .for_gc = 0
1830 + .ino = ino, .root = root, .cno = 0, .for_gc = false,
1831 + .for_btnc = false, .for_shadow = false
1832 };
1833
1834 return iget5_locked(sb, ino, nilfs_iget_test, nilfs_iget_set, &args);
1835 @@ -602,7 +624,8 @@ struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino,
1836 __u64 cno)
1837 {
1838 struct nilfs_iget_args args = {
1839 - .ino = ino, .root = NULL, .cno = cno, .for_gc = 1
1840 + .ino = ino, .root = NULL, .cno = cno, .for_gc = true,
1841 + .for_btnc = false, .for_shadow = false
1842 };
1843 struct inode *inode;
1844 int err;
1845 @@ -622,6 +645,113 @@ struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino,
1846 return inode;
1847 }
1848
1849 +/**
1850 + * nilfs_attach_btree_node_cache - attach a B-tree node cache to the inode
1851 + * @inode: inode object
1852 + *
1853 + * nilfs_attach_btree_node_cache() attaches a B-tree node cache to @inode,
1854 + * or does nothing if the inode already has it. This function allocates
1855 + * an additional inode to maintain page cache of B-tree nodes one-on-one.
1856 + *
1857 + * Return Value: On success, 0 is returned. On errors, one of the following
1858 + * negative error code is returned.
1859 + *
1860 + * %-ENOMEM - Insufficient memory available.
1861 + */
1862 +int nilfs_attach_btree_node_cache(struct inode *inode)
1863 +{
1864 + struct nilfs_inode_info *ii = NILFS_I(inode);
1865 + struct inode *btnc_inode;
1866 + struct nilfs_iget_args args;
1867 +
1868 + if (ii->i_assoc_inode)
1869 + return 0;
1870 +
1871 + args.ino = inode->i_ino;
1872 + args.root = ii->i_root;
1873 + args.cno = ii->i_cno;
1874 + args.for_gc = test_bit(NILFS_I_GCINODE, &ii->i_state) != 0;
1875 + args.for_btnc = true;
1876 + args.for_shadow = test_bit(NILFS_I_SHADOW, &ii->i_state) != 0;
1877 +
1878 + btnc_inode = iget5_locked(inode->i_sb, inode->i_ino, nilfs_iget_test,
1879 + nilfs_iget_set, &args);
1880 + if (unlikely(!btnc_inode))
1881 + return -ENOMEM;
1882 + if (btnc_inode->i_state & I_NEW) {
1883 + nilfs_init_btnc_inode(btnc_inode);
1884 + unlock_new_inode(btnc_inode);
1885 + }
1886 + NILFS_I(btnc_inode)->i_assoc_inode = inode;
1887 + NILFS_I(btnc_inode)->i_bmap = ii->i_bmap;
1888 + ii->i_assoc_inode = btnc_inode;
1889 +
1890 + return 0;
1891 +}
1892 +
1893 +/**
1894 + * nilfs_detach_btree_node_cache - detach the B-tree node cache from the inode
1895 + * @inode: inode object
1896 + *
1897 + * nilfs_detach_btree_node_cache() detaches the B-tree node cache and its
1898 + * holder inode bound to @inode, or does nothing if @inode doesn't have it.
1899 + */
1900 +void nilfs_detach_btree_node_cache(struct inode *inode)
1901 +{
1902 + struct nilfs_inode_info *ii = NILFS_I(inode);
1903 + struct inode *btnc_inode = ii->i_assoc_inode;
1904 +
1905 + if (btnc_inode) {
1906 + NILFS_I(btnc_inode)->i_assoc_inode = NULL;
1907 + ii->i_assoc_inode = NULL;
1908 + iput(btnc_inode);
1909 + }
1910 +}
1911 +
1912 +/**
1913 + * nilfs_iget_for_shadow - obtain inode for shadow mapping
1914 + * @inode: inode object that uses shadow mapping
1915 + *
1916 + * nilfs_iget_for_shadow() allocates a pair of inodes that holds page
1917 + * caches for shadow mapping. The page cache for data pages is set up
1918 + * in one inode and the one for b-tree node pages is set up in the
1919 + * other inode, which is attached to the former inode.
1920 + *
1921 + * Return Value: On success, a pointer to the inode for data pages is
1922 + * returned. On errors, one of the following negative error code is returned
1923 + * in a pointer type.
1924 + *
1925 + * %-ENOMEM - Insufficient memory available.
1926 + */
1927 +struct inode *nilfs_iget_for_shadow(struct inode *inode)
1928 +{
1929 + struct nilfs_iget_args args = {
1930 + .ino = inode->i_ino, .root = NULL, .cno = 0, .for_gc = false,
1931 + .for_btnc = false, .for_shadow = true
1932 + };
1933 + struct inode *s_inode;
1934 + int err;
1935 +
1936 + s_inode = iget5_locked(inode->i_sb, inode->i_ino, nilfs_iget_test,
1937 + nilfs_iget_set, &args);
1938 + if (unlikely(!s_inode))
1939 + return ERR_PTR(-ENOMEM);
1940 + if (!(s_inode->i_state & I_NEW))
1941 + return inode;
1942 +
1943 + NILFS_I(s_inode)->i_flags = 0;
1944 + memset(NILFS_I(s_inode)->i_bmap, 0, sizeof(struct nilfs_bmap));
1945 + mapping_set_gfp_mask(s_inode->i_mapping, GFP_NOFS);
1946 +
1947 + err = nilfs_attach_btree_node_cache(s_inode);
1948 + if (unlikely(err)) {
1949 + iget_failed(s_inode);
1950 + return ERR_PTR(err);
1951 + }
1952 + unlock_new_inode(s_inode);
1953 + return s_inode;
1954 +}
1955 +
1956 void nilfs_write_inode_common(struct inode *inode,
1957 struct nilfs_inode *raw_inode, int has_bmap)
1958 {
1959 @@ -770,7 +900,8 @@ static void nilfs_clear_inode(struct inode *inode)
1960 if (test_bit(NILFS_I_BMAP, &ii->i_state))
1961 nilfs_bmap_clear(ii->i_bmap);
1962
1963 - nilfs_btnode_cache_clear(&ii->i_btnode_cache);
1964 + if (!test_bit(NILFS_I_BTNC, &ii->i_state))
1965 + nilfs_detach_btree_node_cache(inode);
1966
1967 if (ii->i_root && inode->i_ino == NILFS_ROOT_INO)
1968 nilfs_put_root(ii->i_root);
1969 diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c
1970 index 700870a92bc4a..7c9055d767d16 100644
1971 --- a/fs/nilfs2/mdt.c
1972 +++ b/fs/nilfs2/mdt.c
1973 @@ -469,9 +469,18 @@ int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz)
1974 void nilfs_mdt_clear(struct inode *inode)
1975 {
1976 struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
1977 + struct nilfs_shadow_map *shadow = mdi->mi_shadow;
1978
1979 if (mdi->mi_palloc_cache)
1980 nilfs_palloc_destroy_cache(inode);
1981 +
1982 + if (shadow) {
1983 + struct inode *s_inode = shadow->inode;
1984 +
1985 + shadow->inode = NULL;
1986 + iput(s_inode);
1987 + mdi->mi_shadow = NULL;
1988 + }
1989 }
1990
1991 /**
1992 @@ -505,12 +514,15 @@ int nilfs_mdt_setup_shadow_map(struct inode *inode,
1993 struct nilfs_shadow_map *shadow)
1994 {
1995 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
1996 + struct inode *s_inode;
1997
1998 INIT_LIST_HEAD(&shadow->frozen_buffers);
1999 - address_space_init_once(&shadow->frozen_data);
2000 - nilfs_mapping_init(&shadow->frozen_data, inode);
2001 - address_space_init_once(&shadow->frozen_btnodes);
2002 - nilfs_mapping_init(&shadow->frozen_btnodes, inode);
2003 +
2004 + s_inode = nilfs_iget_for_shadow(inode);
2005 + if (IS_ERR(s_inode))
2006 + return PTR_ERR(s_inode);
2007 +
2008 + shadow->inode = s_inode;
2009 mi->mi_shadow = shadow;
2010 return 0;
2011 }
2012 @@ -524,14 +536,15 @@ int nilfs_mdt_save_to_shadow_map(struct inode *inode)
2013 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
2014 struct nilfs_inode_info *ii = NILFS_I(inode);
2015 struct nilfs_shadow_map *shadow = mi->mi_shadow;
2016 + struct inode *s_inode = shadow->inode;
2017 int ret;
2018
2019 - ret = nilfs_copy_dirty_pages(&shadow->frozen_data, inode->i_mapping);
2020 + ret = nilfs_copy_dirty_pages(s_inode->i_mapping, inode->i_mapping);
2021 if (ret)
2022 goto out;
2023
2024 - ret = nilfs_copy_dirty_pages(&shadow->frozen_btnodes,
2025 - &ii->i_btnode_cache);
2026 + ret = nilfs_copy_dirty_pages(NILFS_I(s_inode)->i_assoc_inode->i_mapping,
2027 + ii->i_assoc_inode->i_mapping);
2028 if (ret)
2029 goto out;
2030
2031 @@ -547,7 +560,7 @@ int nilfs_mdt_freeze_buffer(struct inode *inode, struct buffer_head *bh)
2032 struct page *page;
2033 int blkbits = inode->i_blkbits;
2034
2035 - page = grab_cache_page(&shadow->frozen_data, bh->b_page->index);
2036 + page = grab_cache_page(shadow->inode->i_mapping, bh->b_page->index);
2037 if (!page)
2038 return -ENOMEM;
2039
2040 @@ -579,7 +592,7 @@ nilfs_mdt_get_frozen_buffer(struct inode *inode, struct buffer_head *bh)
2041 struct page *page;
2042 int n;
2043
2044 - page = find_lock_page(&shadow->frozen_data, bh->b_page->index);
2045 + page = find_lock_page(shadow->inode->i_mapping, bh->b_page->index);
2046 if (page) {
2047 if (page_has_buffers(page)) {
2048 n = bh_offset(bh) >> inode->i_blkbits;
2049 @@ -620,10 +633,11 @@ void nilfs_mdt_restore_from_shadow_map(struct inode *inode)
2050 nilfs_palloc_clear_cache(inode);
2051
2052 nilfs_clear_dirty_pages(inode->i_mapping, true);
2053 - nilfs_copy_back_pages(inode->i_mapping, &shadow->frozen_data);
2054 + nilfs_copy_back_pages(inode->i_mapping, shadow->inode->i_mapping);
2055
2056 - nilfs_clear_dirty_pages(&ii->i_btnode_cache, true);
2057 - nilfs_copy_back_pages(&ii->i_btnode_cache, &shadow->frozen_btnodes);
2058 + nilfs_clear_dirty_pages(ii->i_assoc_inode->i_mapping, true);
2059 + nilfs_copy_back_pages(ii->i_assoc_inode->i_mapping,
2060 + NILFS_I(shadow->inode)->i_assoc_inode->i_mapping);
2061
2062 nilfs_bmap_restore(ii->i_bmap, &shadow->bmap_store);
2063
2064 @@ -638,10 +652,11 @@ void nilfs_mdt_clear_shadow_map(struct inode *inode)
2065 {
2066 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
2067 struct nilfs_shadow_map *shadow = mi->mi_shadow;
2068 + struct inode *shadow_btnc_inode = NILFS_I(shadow->inode)->i_assoc_inode;
2069
2070 down_write(&mi->mi_sem);
2071 nilfs_release_frozen_buffers(shadow);
2072 - truncate_inode_pages(&shadow->frozen_data, 0);
2073 - truncate_inode_pages(&shadow->frozen_btnodes, 0);
2074 + truncate_inode_pages(shadow->inode->i_mapping, 0);
2075 + truncate_inode_pages(shadow_btnc_inode->i_mapping, 0);
2076 up_write(&mi->mi_sem);
2077 }
2078 diff --git a/fs/nilfs2/mdt.h b/fs/nilfs2/mdt.h
2079 index e77aea4bb921c..9d8ac0d27c16e 100644
2080 --- a/fs/nilfs2/mdt.h
2081 +++ b/fs/nilfs2/mdt.h
2082 @@ -18,14 +18,12 @@
2083 /**
2084 * struct nilfs_shadow_map - shadow mapping of meta data file
2085 * @bmap_store: shadow copy of bmap state
2086 - * @frozen_data: shadowed dirty data pages
2087 - * @frozen_btnodes: shadowed dirty b-tree nodes' pages
2088 + * @inode: holder of page caches used in shadow mapping
2089 * @frozen_buffers: list of frozen buffers
2090 */
2091 struct nilfs_shadow_map {
2092 struct nilfs_bmap_store bmap_store;
2093 - struct address_space frozen_data;
2094 - struct address_space frozen_btnodes;
2095 + struct inode *inode;
2096 struct list_head frozen_buffers;
2097 };
2098
2099 diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
2100 index 42395ba52da62..4895d978369a1 100644
2101 --- a/fs/nilfs2/nilfs.h
2102 +++ b/fs/nilfs2/nilfs.h
2103 @@ -28,7 +28,7 @@
2104 * @i_xattr: <TODO>
2105 * @i_dir_start_lookup: page index of last successful search
2106 * @i_cno: checkpoint number for GC inode
2107 - * @i_btnode_cache: cached pages of b-tree nodes
2108 + * @i_assoc_inode: associated inode (B-tree node cache holder or back pointer)
2109 * @i_dirty: list for connecting dirty files
2110 * @xattr_sem: semaphore for extended attributes processing
2111 * @i_bh: buffer contains disk inode
2112 @@ -43,7 +43,7 @@ struct nilfs_inode_info {
2113 __u64 i_xattr; /* sector_t ??? */
2114 __u32 i_dir_start_lookup;
2115 __u64 i_cno; /* check point number for GC inode */
2116 - struct address_space i_btnode_cache;
2117 + struct inode *i_assoc_inode;
2118 struct list_head i_dirty; /* List for connecting dirty files */
2119
2120 #ifdef CONFIG_NILFS_XATTR
2121 @@ -75,13 +75,6 @@ NILFS_BMAP_I(const struct nilfs_bmap *bmap)
2122 return container_of(bmap, struct nilfs_inode_info, i_bmap_data);
2123 }
2124
2125 -static inline struct inode *NILFS_BTNC_I(struct address_space *btnc)
2126 -{
2127 - struct nilfs_inode_info *ii =
2128 - container_of(btnc, struct nilfs_inode_info, i_btnode_cache);
2129 - return &ii->vfs_inode;
2130 -}
2131 -
2132 /*
2133 * Dynamic state flags of NILFS on-memory inode (i_state)
2134 */
2135 @@ -98,6 +91,8 @@ enum {
2136 NILFS_I_INODE_SYNC, /* dsync is not allowed for inode */
2137 NILFS_I_BMAP, /* has bmap and btnode_cache */
2138 NILFS_I_GCINODE, /* inode for GC, on memory only */
2139 + NILFS_I_BTNC, /* inode for btree node cache */
2140 + NILFS_I_SHADOW, /* inode for shadowed page cache */
2141 };
2142
2143 /*
2144 @@ -264,6 +259,9 @@ struct inode *nilfs_iget(struct super_block *sb, struct nilfs_root *root,
2145 unsigned long ino);
2146 extern struct inode *nilfs_iget_for_gc(struct super_block *sb,
2147 unsigned long ino, __u64 cno);
2148 +int nilfs_attach_btree_node_cache(struct inode *inode);
2149 +void nilfs_detach_btree_node_cache(struct inode *inode);
2150 +struct inode *nilfs_iget_for_shadow(struct inode *inode);
2151 extern void nilfs_update_inode(struct inode *, struct buffer_head *, int);
2152 extern void nilfs_truncate(struct inode *);
2153 extern void nilfs_evict_inode(struct inode *);
2154 diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c
2155 index d7fc8d369d89e..98d21ad9a073f 100644
2156 --- a/fs/nilfs2/page.c
2157 +++ b/fs/nilfs2/page.c
2158 @@ -450,10 +450,9 @@ void nilfs_mapping_init(struct address_space *mapping, struct inode *inode)
2159 /*
2160 * NILFS2 needs clear_page_dirty() in the following two cases:
2161 *
2162 - * 1) For B-tree node pages and data pages of the dat/gcdat, NILFS2 clears
2163 - * page dirty flags when it copies back pages from the shadow cache
2164 - * (gcdat->{i_mapping,i_btnode_cache}) to its original cache
2165 - * (dat->{i_mapping,i_btnode_cache}).
2166 + * 1) For B-tree node pages and data pages of DAT file, NILFS2 clears dirty
2167 + * flag of pages when it copies back pages from shadow cache to the
2168 + * original cache.
2169 *
2170 * 2) Some B-tree operations like insertion or deletion may dispose buffers
2171 * in dirty state, and this needs to cancel the dirty state of their pages.
2172 diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
2173 index 91b58c897f92d..eb3ac76190887 100644
2174 --- a/fs/nilfs2/segment.c
2175 +++ b/fs/nilfs2/segment.c
2176 @@ -738,15 +738,18 @@ static void nilfs_lookup_dirty_node_buffers(struct inode *inode,
2177 struct list_head *listp)
2178 {
2179 struct nilfs_inode_info *ii = NILFS_I(inode);
2180 - struct address_space *mapping = &ii->i_btnode_cache;
2181 + struct inode *btnc_inode = ii->i_assoc_inode;
2182 struct pagevec pvec;
2183 struct buffer_head *bh, *head;
2184 unsigned int i;
2185 pgoff_t index = 0;
2186
2187 + if (!btnc_inode)
2188 + return;
2189 +
2190 pagevec_init(&pvec);
2191
2192 - while (pagevec_lookup_tag(&pvec, mapping, &index,
2193 + while (pagevec_lookup_tag(&pvec, btnc_inode->i_mapping, &index,
2194 PAGECACHE_TAG_DIRTY)) {
2195 for (i = 0; i < pagevec_count(&pvec); i++) {
2196 bh = head = page_buffers(pvec.pages[i]);
2197 @@ -2410,7 +2413,7 @@ nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)
2198 continue;
2199 list_del_init(&ii->i_dirty);
2200 truncate_inode_pages(&ii->vfs_inode.i_data, 0);
2201 - nilfs_btnode_cache_clear(&ii->i_btnode_cache);
2202 + nilfs_btnode_cache_clear(ii->i_assoc_inode->i_mapping);
2203 iput(&ii->vfs_inode);
2204 }
2205 }
2206 diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
2207 index 5729ee86da9ae..b5bc9f0c6a406 100644
2208 --- a/fs/nilfs2/super.c
2209 +++ b/fs/nilfs2/super.c
2210 @@ -151,7 +151,8 @@ struct inode *nilfs_alloc_inode(struct super_block *sb)
2211 ii->i_bh = NULL;
2212 ii->i_state = 0;
2213 ii->i_cno = 0;
2214 - nilfs_mapping_init(&ii->i_btnode_cache, &ii->vfs_inode);
2215 + ii->i_assoc_inode = NULL;
2216 + ii->i_bmap = &ii->i_bmap_data;
2217 return &ii->vfs_inode;
2218 }
2219
2220 @@ -1375,8 +1376,6 @@ static void nilfs_inode_init_once(void *obj)
2221 #ifdef CONFIG_NILFS_XATTR
2222 init_rwsem(&ii->xattr_sem);
2223 #endif
2224 - address_space_init_once(&ii->i_btnode_cache);
2225 - ii->i_bmap = &ii->i_bmap_data;
2226 inode_init_once(&ii->vfs_inode);
2227 }
2228
2229 diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
2230 index 8cc766743270f..308c2d8cdca19 100644
2231 --- a/include/linux/blkdev.h
2232 +++ b/include/linux/blkdev.h
2233 @@ -1409,6 +1409,22 @@ static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector
2234 return offset << SECTOR_SHIFT;
2235 }
2236
2237 +/*
2238 + * Two cases of handling DISCARD merge:
2239 + * If max_discard_segments > 1, the driver takes every bio
2240 + * as a range and send them to controller together. The ranges
2241 + * needn't to be contiguous.
2242 + * Otherwise, the bios/requests will be handled as same as
2243 + * others which should be contiguous.
2244 + */
2245 +static inline bool blk_discard_mergable(struct request *req)
2246 +{
2247 + if (req_op(req) == REQ_OP_DISCARD &&
2248 + queue_max_discard_segments(req->q) > 1)
2249 + return true;
2250 + return false;
2251 +}
2252 +
2253 static inline int bdev_discard_alignment(struct block_device *bdev)
2254 {
2255 struct request_queue *q = bdev_get_queue(bdev);
2256 diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
2257 index da90f20e11c1c..4d450672b7d66 100644
2258 --- a/include/linux/dma-mapping.h
2259 +++ b/include/linux/dma-mapping.h
2260 @@ -70,14 +70,6 @@
2261 */
2262 #define DMA_ATTR_PRIVILEGED (1UL << 9)
2263
2264 -/*
2265 - * This is a hint to the DMA-mapping subsystem that the device is expected
2266 - * to overwrite the entire mapped size, thus the caller does not require any
2267 - * of the previous buffer contents to be preserved. This allows
2268 - * bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers.
2269 - */
2270 -#define DMA_ATTR_OVERWRITE (1UL << 10)
2271 -
2272 /*
2273 * A dma_addr_t can hold any valid DMA or bus address for the platform.
2274 * It can be given to a device to use as a DMA source or target. A CPU cannot
2275 diff --git a/include/linux/mc146818rtc.h b/include/linux/mc146818rtc.h
2276 index 0661af17a7584..1e02058113944 100644
2277 --- a/include/linux/mc146818rtc.h
2278 +++ b/include/linux/mc146818rtc.h
2279 @@ -86,6 +86,8 @@ struct cmos_rtc_board_info {
2280 /* 2 values for divider stage reset, others for "testing purposes only" */
2281 # define RTC_DIV_RESET1 0x60
2282 # define RTC_DIV_RESET2 0x70
2283 + /* In AMD BKDG bit 5 and 6 are reserved, bit 4 is for select dv0 bank */
2284 +# define RTC_AMD_BANK_SELECT 0x10
2285 /* Periodic intr. / Square wave rate select. 0=none, 1=32.8kHz,... 15=2Hz */
2286 # define RTC_RATE_SELECT 0x0F
2287
2288 diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
2289 index dc60d03c4b606..0b35747c9837a 100644
2290 --- a/include/linux/stmmac.h
2291 +++ b/include/linux/stmmac.h
2292 @@ -179,5 +179,6 @@ struct plat_stmmacenet_data {
2293 int mac_port_sel_speed;
2294 bool en_tx_lpi_clockgating;
2295 int has_xgmac;
2296 + bool sph_disable;
2297 };
2298 #endif
2299 diff --git a/include/linux/sunrpc/xprtsock.h b/include/linux/sunrpc/xprtsock.h
2300 index a940de03808dd..46deca97e806d 100644
2301 --- a/include/linux/sunrpc/xprtsock.h
2302 +++ b/include/linux/sunrpc/xprtsock.h
2303 @@ -90,6 +90,7 @@ struct sock_xprt {
2304 #define XPRT_SOCK_WAKE_WRITE (5)
2305 #define XPRT_SOCK_WAKE_PENDING (6)
2306 #define XPRT_SOCK_WAKE_DISCONNECT (7)
2307 +#define XPRT_SOCK_CONNECT_SENT (8)
2308
2309 #endif /* __KERNEL__ */
2310
2311 diff --git a/include/uapi/linux/dma-buf.h b/include/uapi/linux/dma-buf.h
2312 index 7f30393b92c3b..f76d11725c6c6 100644
2313 --- a/include/uapi/linux/dma-buf.h
2314 +++ b/include/uapi/linux/dma-buf.h
2315 @@ -44,7 +44,7 @@ struct dma_buf_sync {
2316 * between them in actual uapi, they're just different numbers.
2317 */
2318 #define DMA_BUF_SET_NAME _IOW(DMA_BUF_BASE, 1, const char *)
2319 -#define DMA_BUF_SET_NAME_A _IOW(DMA_BUF_BASE, 1, u32)
2320 -#define DMA_BUF_SET_NAME_B _IOW(DMA_BUF_BASE, 1, u64)
2321 +#define DMA_BUF_SET_NAME_A _IOW(DMA_BUF_BASE, 1, __u32)
2322 +#define DMA_BUF_SET_NAME_B _IOW(DMA_BUF_BASE, 1, __u64)
2323
2324 #endif
2325 diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
2326 index f17b771856d1c..913cb71198af4 100644
2327 --- a/kernel/dma/swiotlb.c
2328 +++ b/kernel/dma/swiotlb.c
2329 @@ -571,11 +571,14 @@ found:
2330 */
2331 for (i = 0; i < nslots; i++)
2332 io_tlb_orig_addr[index+i] = orig_addr + (i << IO_TLB_SHIFT);
2333 - if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
2334 - (!(attrs & DMA_ATTR_OVERWRITE) || dir == DMA_TO_DEVICE ||
2335 - dir == DMA_BIDIRECTIONAL))
2336 - swiotlb_bounce(orig_addr, tlb_addr, mapping_size, DMA_TO_DEVICE);
2337 -
2338 + /*
2339 + * When dir == DMA_FROM_DEVICE we could omit the copy from the orig
2340 + * to the tlb buffer, if we knew for sure the device will
2341 + * overwirte the entire current content. But we don't. Thus
2342 + * unconditional bounce may prevent leaking swiotlb content (i.e.
2343 + * kernel memory) to user-space.
2344 + */
2345 + swiotlb_bounce(orig_addr, tlb_addr, mapping_size, DMA_TO_DEVICE);
2346 return tlb_addr;
2347 }
2348
2349 diff --git a/kernel/events/core.c b/kernel/events/core.c
2350 index 52f4a9e467040..8336dcb2bd432 100644
2351 --- a/kernel/events/core.c
2352 +++ b/kernel/events/core.c
2353 @@ -11114,6 +11114,9 @@ SYSCALL_DEFINE5(perf_event_open,
2354 * Do not allow to attach to a group in a different task
2355 * or CPU context. If we're moving SW events, we'll fix
2356 * this up later, so allow that.
2357 + *
2358 + * Racy, not holding group_leader->ctx->mutex, see comment with
2359 + * perf_event_ctx_lock().
2360 */
2361 if (!move_group && group_leader->ctx != ctx)
2362 goto err_context;
2363 @@ -11181,6 +11184,7 @@ SYSCALL_DEFINE5(perf_event_open,
2364 } else {
2365 perf_event_ctx_unlock(group_leader, gctx);
2366 move_group = 0;
2367 + goto not_move_group;
2368 }
2369 }
2370
2371 @@ -11197,7 +11201,17 @@ SYSCALL_DEFINE5(perf_event_open,
2372 }
2373 } else {
2374 mutex_lock(&ctx->mutex);
2375 +
2376 + /*
2377 + * Now that we hold ctx->lock, (re)validate group_leader->ctx == ctx,
2378 + * see the group_leader && !move_group test earlier.
2379 + */
2380 + if (group_leader && group_leader->ctx != ctx) {
2381 + err = -EINVAL;
2382 + goto err_locked;
2383 + }
2384 }
2385 +not_move_group:
2386
2387 if (ctx->task == TASK_TOMBSTONE) {
2388 err = -ESRCH;
2389 diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
2390 index 09b1dd8cd8536..464f6a619444d 100644
2391 --- a/net/bridge/br_input.c
2392 +++ b/net/bridge/br_input.c
2393 @@ -42,6 +42,13 @@ static int br_pass_frame_up(struct sk_buff *skb)
2394 u64_stats_update_end(&brstats->syncp);
2395
2396 vg = br_vlan_group_rcu(br);
2397 +
2398 + /* Reset the offload_fwd_mark because there could be a stacked
2399 + * bridge above, and it should not think this bridge it doing
2400 + * that bridge's work forwarding out its ports.
2401 + */
2402 + br_switchdev_frame_unmark(skb);
2403 +
2404 /* Bridge is just like any other port. Make sure the
2405 * packet is allowed except in promisc modue when someone
2406 * may be running packet capture.
2407 diff --git a/net/key/af_key.c b/net/key/af_key.c
2408 index 2ac9560020f91..f67d3ba72c496 100644
2409 --- a/net/key/af_key.c
2410 +++ b/net/key/af_key.c
2411 @@ -2830,8 +2830,10 @@ static int pfkey_process(struct sock *sk, struct sk_buff *skb, const struct sadb
2412 void *ext_hdrs[SADB_EXT_MAX];
2413 int err;
2414
2415 - pfkey_broadcast(skb_clone(skb, GFP_KERNEL), GFP_KERNEL,
2416 - BROADCAST_PROMISC_ONLY, NULL, sock_net(sk));
2417 + err = pfkey_broadcast(skb_clone(skb, GFP_KERNEL), GFP_KERNEL,
2418 + BROADCAST_PROMISC_ONLY, NULL, sock_net(sk));
2419 + if (err)
2420 + return err;
2421
2422 memset(ext_hdrs, 0, sizeof(ext_hdrs));
2423 err = parse_exthdrs(skb, hdr, ext_hdrs);
2424 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2425 index ab91683d94596..99d5f8b58e92e 100644
2426 --- a/net/mac80211/rx.c
2427 +++ b/net/mac80211/rx.c
2428 @@ -1400,8 +1400,7 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx,
2429 goto dont_reorder;
2430
2431 /* not part of a BA session */
2432 - if (ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK &&
2433 - ack_policy != IEEE80211_QOS_CTL_ACK_POLICY_NORMAL)
2434 + if (ack_policy == IEEE80211_QOS_CTL_ACK_POLICY_NOACK)
2435 goto dont_reorder;
2436
2437 /* new, potentially un-ordered, ampdu frame - process it */
2438 diff --git a/net/nfc/nci/data.c b/net/nfc/nci/data.c
2439 index ce3382be937ff..b002e18f38c81 100644
2440 --- a/net/nfc/nci/data.c
2441 +++ b/net/nfc/nci/data.c
2442 @@ -118,7 +118,7 @@ static int nci_queue_tx_data_frags(struct nci_dev *ndev,
2443
2444 skb_frag = nci_skb_alloc(ndev,
2445 (NCI_DATA_HDR_SIZE + frag_len),
2446 - GFP_KERNEL);
2447 + GFP_ATOMIC);
2448 if (skb_frag == NULL) {
2449 rc = -ENOMEM;
2450 goto free_exit;
2451 diff --git a/net/nfc/nci/hci.c b/net/nfc/nci/hci.c
2452 index 04e55ccb33836..4fe336ff2bfa1 100644
2453 --- a/net/nfc/nci/hci.c
2454 +++ b/net/nfc/nci/hci.c
2455 @@ -153,7 +153,7 @@ static int nci_hci_send_data(struct nci_dev *ndev, u8 pipe,
2456
2457 i = 0;
2458 skb = nci_skb_alloc(ndev, conn_info->max_pkt_payload_len +
2459 - NCI_DATA_HDR_SIZE, GFP_KERNEL);
2460 + NCI_DATA_HDR_SIZE, GFP_ATOMIC);
2461 if (!skb)
2462 return -ENOMEM;
2463
2464 @@ -186,7 +186,7 @@ static int nci_hci_send_data(struct nci_dev *ndev, u8 pipe,
2465 if (i < data_len) {
2466 skb = nci_skb_alloc(ndev,
2467 conn_info->max_pkt_payload_len +
2468 - NCI_DATA_HDR_SIZE, GFP_KERNEL);
2469 + NCI_DATA_HDR_SIZE, GFP_ATOMIC);
2470 if (!skb)
2471 return -ENOMEM;
2472
2473 diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
2474 index 305cb190e9979..f095a0fb75c6d 100644
2475 --- a/net/sched/act_pedit.c
2476 +++ b/net/sched/act_pedit.c
2477 @@ -231,6 +231,10 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla,
2478 for (i = 0; i < p->tcfp_nkeys; ++i) {
2479 u32 cur = p->tcfp_keys[i].off;
2480
2481 + /* sanitize the shift value for any later use */
2482 + p->tcfp_keys[i].shift = min_t(size_t, BITS_PER_TYPE(int) - 1,
2483 + p->tcfp_keys[i].shift);
2484 +
2485 /* The AT option can read a single byte, we can bound the actual
2486 * value with uchar max.
2487 */
2488 diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
2489 index 8ac579778e487..94ae95c57f78a 100644
2490 --- a/net/sunrpc/xprt.c
2491 +++ b/net/sunrpc/xprt.c
2492 @@ -717,21 +717,30 @@ void xprt_disconnect_done(struct rpc_xprt *xprt)
2493 EXPORT_SYMBOL_GPL(xprt_disconnect_done);
2494
2495 /**
2496 - * xprt_force_disconnect - force a transport to disconnect
2497 + * xprt_schedule_autoclose_locked - Try to schedule an autoclose RPC call
2498 * @xprt: transport to disconnect
2499 - *
2500 */
2501 -void xprt_force_disconnect(struct rpc_xprt *xprt)
2502 +static void xprt_schedule_autoclose_locked(struct rpc_xprt *xprt)
2503 {
2504 - /* Don't race with the test_bit() in xprt_clear_locked() */
2505 - spin_lock(&xprt->transport_lock);
2506 - set_bit(XPRT_CLOSE_WAIT, &xprt->state);
2507 - /* Try to schedule an autoclose RPC call */
2508 + if (test_and_set_bit(XPRT_CLOSE_WAIT, &xprt->state))
2509 + return;
2510 if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0)
2511 queue_work(xprtiod_workqueue, &xprt->task_cleanup);
2512 else if (xprt->snd_task && !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
2513 rpc_wake_up_queued_task_set_status(&xprt->pending,
2514 xprt->snd_task, -ENOTCONN);
2515 +}
2516 +
2517 +/**
2518 + * xprt_force_disconnect - force a transport to disconnect
2519 + * @xprt: transport to disconnect
2520 + *
2521 + */
2522 +void xprt_force_disconnect(struct rpc_xprt *xprt)
2523 +{
2524 + /* Don't race with the test_bit() in xprt_clear_locked() */
2525 + spin_lock(&xprt->transport_lock);
2526 + xprt_schedule_autoclose_locked(xprt);
2527 spin_unlock(&xprt->transport_lock);
2528 }
2529 EXPORT_SYMBOL_GPL(xprt_force_disconnect);
2530 @@ -771,11 +780,7 @@ void xprt_conditional_disconnect(struct rpc_xprt *xprt, unsigned int cookie)
2531 goto out;
2532 if (test_bit(XPRT_CLOSING, &xprt->state))
2533 goto out;
2534 - set_bit(XPRT_CLOSE_WAIT, &xprt->state);
2535 - /* Try to schedule an autoclose RPC call */
2536 - if (test_and_set_bit(XPRT_LOCKED, &xprt->state) == 0)
2537 - queue_work(xprtiod_workqueue, &xprt->task_cleanup);
2538 - xprt_wake_pending_tasks(xprt, -EAGAIN);
2539 + xprt_schedule_autoclose_locked(xprt);
2540 out:
2541 spin_unlock(&xprt->transport_lock);
2542 }
2543 @@ -863,10 +868,7 @@ void xprt_connect(struct rpc_task *task)
2544 if (!xprt_lock_write(xprt, task))
2545 return;
2546
2547 - if (test_and_clear_bit(XPRT_CLOSE_WAIT, &xprt->state))
2548 - xprt->ops->close(xprt);
2549 -
2550 - if (!xprt_connected(xprt)) {
2551 + if (!xprt_connected(xprt) && !test_bit(XPRT_CLOSE_WAIT, &xprt->state)) {
2552 task->tk_rqstp->rq_connect_cookie = xprt->connect_cookie;
2553 rpc_sleep_on_timeout(&xprt->pending, task, NULL,
2554 xprt_request_timeout(task->tk_rqstp));
2555 diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
2556 index 43bc02dea80c8..81f0e03b71b6d 100644
2557 --- a/net/sunrpc/xprtsock.c
2558 +++ b/net/sunrpc/xprtsock.c
2559 @@ -989,7 +989,7 @@ static int xs_local_send_request(struct rpc_rqst *req)
2560
2561 /* Close the stream if the previous transmission was incomplete */
2562 if (xs_send_request_was_aborted(transport, req)) {
2563 - xs_close(xprt);
2564 + xprt_force_disconnect(xprt);
2565 return -ENOTCONN;
2566 }
2567
2568 @@ -1027,7 +1027,7 @@ static int xs_local_send_request(struct rpc_rqst *req)
2569 -status);
2570 /* fall through */
2571 case -EPIPE:
2572 - xs_close(xprt);
2573 + xprt_force_disconnect(xprt);
2574 status = -ENOTCONN;
2575 }
2576
2577 @@ -1303,6 +1303,16 @@ static void xs_reset_transport(struct sock_xprt *transport)
2578
2579 if (sk == NULL)
2580 return;
2581 + /*
2582 + * Make sure we're calling this in a context from which it is safe
2583 + * to call __fput_sync(). In practice that means rpciod and the
2584 + * system workqueue.
2585 + */
2586 + if (!(current->flags & PF_WQ_WORKER)) {
2587 + WARN_ON_ONCE(1);
2588 + set_bit(XPRT_CLOSE_WAIT, &xprt->state);
2589 + return;
2590 + }
2591
2592 if (atomic_read(&transport->xprt.swapper))
2593 sk_clear_memalloc(sk);
2594 @@ -1326,7 +1336,7 @@ static void xs_reset_transport(struct sock_xprt *transport)
2595 mutex_unlock(&transport->recv_mutex);
2596
2597 trace_rpc_socket_close(xprt, sock);
2598 - fput(filp);
2599 + __fput_sync(filp);
2600
2601 xprt_disconnect_done(xprt);
2602 }
2603 @@ -2384,10 +2394,14 @@ static void xs_tcp_setup_socket(struct work_struct *work)
2604 struct rpc_xprt *xprt = &transport->xprt;
2605 int status = -EIO;
2606
2607 - if (!sock) {
2608 - sock = xs_create_sock(xprt, transport,
2609 - xs_addr(xprt)->sa_family, SOCK_STREAM,
2610 - IPPROTO_TCP, true);
2611 + if (xprt_connected(xprt))
2612 + goto out;
2613 + if (test_and_clear_bit(XPRT_SOCK_CONNECT_SENT,
2614 + &transport->sock_state) ||
2615 + !sock) {
2616 + xs_reset_transport(transport);
2617 + sock = xs_create_sock(xprt, transport, xs_addr(xprt)->sa_family,
2618 + SOCK_STREAM, IPPROTO_TCP, true);
2619 if (IS_ERR(sock)) {
2620 status = PTR_ERR(sock);
2621 goto out;
2622 @@ -2418,6 +2432,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
2623 break;
2624 case 0:
2625 case -EINPROGRESS:
2626 + set_bit(XPRT_SOCK_CONNECT_SENT, &transport->sock_state);
2627 + fallthrough;
2628 case -EALREADY:
2629 xprt_unlock_connect(xprt, transport);
2630 return;
2631 @@ -2471,11 +2487,7 @@ static void xs_connect(struct rpc_xprt *xprt, struct rpc_task *task)
2632
2633 if (transport->sock != NULL) {
2634 dprintk("RPC: xs_connect delayed xprt %p for %lu "
2635 - "seconds\n",
2636 - xprt, xprt->reestablish_timeout / HZ);
2637 -
2638 - /* Start by resetting any existing state */
2639 - xs_reset_transport(transport);
2640 + "seconds\n", xprt, xprt->reestablish_timeout / HZ);
2641
2642 delay = xprt_reconnect_delay(xprt);
2643 xprt_reconnect_backoff(xprt, XS_TCP_INIT_REEST_TO);
2644 diff --git a/sound/isa/wavefront/wavefront_synth.c b/sound/isa/wavefront/wavefront_synth.c
2645 index d6420d224d097..09b368761cc00 100644
2646 --- a/sound/isa/wavefront/wavefront_synth.c
2647 +++ b/sound/isa/wavefront/wavefront_synth.c
2648 @@ -1088,7 +1088,8 @@ wavefront_send_sample (snd_wavefront_t *dev,
2649
2650 if (dataptr < data_end) {
2651
2652 - __get_user (sample_short, dataptr);
2653 + if (get_user(sample_short, dataptr))
2654 + return -EFAULT;
2655 dataptr += skip;
2656
2657 if (data_is_unsigned) { /* GUS ? */
2658 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2659 index 851ea79da31cd..78b5a0f22a415 100644
2660 --- a/sound/pci/hda/patch_realtek.c
2661 +++ b/sound/pci/hda/patch_realtek.c
2662 @@ -10233,6 +10233,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
2663 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
2664 SND_PCI_QUIRK(0x14cd, 0x5003, "USI", ALC662_FIXUP_USI_HEADSET_MODE),
2665 SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC662_FIXUP_LENOVO_MULTI_CODECS),
2666 + SND_PCI_QUIRK(0x17aa, 0x1057, "Lenovo P360", ALC897_FIXUP_HEADSET_MIC_PIN),
2667 SND_PCI_QUIRK(0x17aa, 0x32ca, "Lenovo ThinkCentre M80", ALC897_FIXUP_HEADSET_MIC_PIN),
2668 SND_PCI_QUIRK(0x17aa, 0x32cb, "Lenovo ThinkCentre M70", ALC897_FIXUP_HEADSET_MIC_PIN),
2669 SND_PCI_QUIRK(0x17aa, 0x32cf, "Lenovo ThinkCentre M950", ALC897_FIXUP_HEADSET_MIC_PIN),
2670 diff --git a/tools/objtool/check.c b/tools/objtool/check.c
2671 index 06aaf04e629c2..bae6b261481db 100644
2672 --- a/tools/objtool/check.c
2673 +++ b/tools/objtool/check.c
2674 @@ -144,6 +144,7 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
2675 "usercopy_abort",
2676 "machine_real_restart",
2677 "rewind_stack_do_exit",
2678 + "cpu_bringup_and_idle",
2679 };
2680
2681 if (!func)
2682 diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
2683 index 5797253b97005..69d62e57a0c36 100644
2684 --- a/tools/perf/bench/numa.c
2685 +++ b/tools/perf/bench/numa.c
2686 @@ -1630,7 +1630,7 @@ static int __bench_numa(const char *name)
2687 "GB/sec,", "total-speed", "GB/sec total speed");
2688
2689 if (g->p.show_details >= 2) {
2690 - char tname[14 + 2 * 10 + 1];
2691 + char tname[14 + 2 * 11 + 1];
2692 struct thread_data *td;
2693 for (p = 0; p < g->p.nr_proc; p++) {
2694 for (t = 0; t < g->p.nr_threads; t++) {
2695 diff --git a/tools/testing/selftests/net/fcnal-test.sh b/tools/testing/selftests/net/fcnal-test.sh
2696 index 157822331954d..d2ac09b35dcf5 100755
2697 --- a/tools/testing/selftests/net/fcnal-test.sh
2698 +++ b/tools/testing/selftests/net/fcnal-test.sh
2699 @@ -757,10 +757,16 @@ ipv4_ping()
2700 setup
2701 set_sysctl net.ipv4.raw_l3mdev_accept=1 2>/dev/null
2702 ipv4_ping_novrf
2703 + setup
2704 + set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
2705 + ipv4_ping_novrf
2706
2707 log_subsection "With VRF"
2708 setup "yes"
2709 ipv4_ping_vrf
2710 + setup "yes"
2711 + set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
2712 + ipv4_ping_vrf
2713 }
2714
2715 ################################################################################
2716 @@ -2005,10 +2011,16 @@ ipv6_ping()
2717 log_subsection "No VRF"
2718 setup
2719 ipv6_ping_novrf
2720 + setup
2721 + set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
2722 + ipv6_ping_novrf
2723
2724 log_subsection "With VRF"
2725 setup "yes"
2726 ipv6_ping_vrf
2727 + setup "yes"
2728 + set_sysctl net.ipv4.ping_group_range='0 2147483647' 2>/dev/null
2729 + ipv6_ping_vrf
2730 }
2731
2732 ################################################################################