Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0106-4.19.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3385 - (show annotations) (download)
Fri Aug 2 11:47:07 2019 UTC (4 years, 8 months ago) by niro
File size: 184818 byte(s)
-linux-4.19.7
1 diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
2 index fa4eec22816d..0c404cda531a 100644
3 --- a/Documentation/admin-guide/kernel-parameters.txt
4 +++ b/Documentation/admin-guide/kernel-parameters.txt
5 @@ -4169,9 +4169,13 @@
6
7 spectre_v2= [X86] Control mitigation of Spectre variant 2
8 (indirect branch speculation) vulnerability.
9 + The default operation protects the kernel from
10 + user space attacks.
11
12 - on - unconditionally enable
13 - off - unconditionally disable
14 + on - unconditionally enable, implies
15 + spectre_v2_user=on
16 + off - unconditionally disable, implies
17 + spectre_v2_user=off
18 auto - kernel detects whether your CPU model is
19 vulnerable
20
21 @@ -4181,6 +4185,12 @@
22 CONFIG_RETPOLINE configuration option, and the
23 compiler with which the kernel was built.
24
25 + Selecting 'on' will also enable the mitigation
26 + against user space to user space task attacks.
27 +
28 + Selecting 'off' will disable both the kernel and
29 + the user space protections.
30 +
31 Specific mitigations can also be selected manually:
32
33 retpoline - replace indirect branches
34 @@ -4190,6 +4200,48 @@
35 Not specifying this option is equivalent to
36 spectre_v2=auto.
37
38 + spectre_v2_user=
39 + [X86] Control mitigation of Spectre variant 2
40 + (indirect branch speculation) vulnerability between
41 + user space tasks
42 +
43 + on - Unconditionally enable mitigations. Is
44 + enforced by spectre_v2=on
45 +
46 + off - Unconditionally disable mitigations. Is
47 + enforced by spectre_v2=off
48 +
49 + prctl - Indirect branch speculation is enabled,
50 + but mitigation can be enabled via prctl
51 + per thread. The mitigation control state
52 + is inherited on fork.
53 +
54 + prctl,ibpb
55 + - Like "prctl" above, but only STIBP is
56 + controlled per thread. IBPB is issued
57 + always when switching between different user
58 + space processes.
59 +
60 + seccomp
61 + - Same as "prctl" above, but all seccomp
62 + threads will enable the mitigation unless
63 + they explicitly opt out.
64 +
65 + seccomp,ibpb
66 + - Like "seccomp" above, but only STIBP is
67 + controlled per thread. IBPB is issued
68 + always when switching between different
69 + user space processes.
70 +
71 + auto - Kernel selects the mitigation depending on
72 + the available CPU features and vulnerability.
73 +
74 + Default mitigation:
75 + If CONFIG_SECCOMP=y then "seccomp", otherwise "prctl"
76 +
77 + Not specifying this option is equivalent to
78 + spectre_v2_user=auto.
79 +
80 spec_store_bypass_disable=
81 [HW] Control Speculative Store Bypass (SSB) Disable mitigation
82 (Speculative Store Bypass vulnerability)
83 diff --git a/Documentation/userspace-api/spec_ctrl.rst b/Documentation/userspace-api/spec_ctrl.rst
84 index 32f3d55c54b7..c4dbe6f7cdae 100644
85 --- a/Documentation/userspace-api/spec_ctrl.rst
86 +++ b/Documentation/userspace-api/spec_ctrl.rst
87 @@ -92,3 +92,12 @@ Speculation misfeature controls
88 * prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_ENABLE, 0, 0);
89 * prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_DISABLE, 0, 0);
90 * prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_STORE_BYPASS, PR_SPEC_FORCE_DISABLE, 0, 0);
91 +
92 +- PR_SPEC_INDIR_BRANCH: Indirect Branch Speculation in User Processes
93 + (Mitigate Spectre V2 style attacks against user processes)
94 +
95 + Invocations:
96 + * prctl(PR_GET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, 0, 0, 0);
97 + * prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_ENABLE, 0, 0);
98 + * prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_DISABLE, 0, 0);
99 + * prctl(PR_SET_SPECULATION_CTRL, PR_SPEC_INDIRECT_BRANCH, PR_SPEC_FORCE_DISABLE, 0, 0);
100 diff --git a/Makefile b/Makefile
101 index 20cbb8e84650..d2b4efcfb388 100644
102 --- a/Makefile
103 +++ b/Makefile
104 @@ -1,7 +1,7 @@
105 # SPDX-License-Identifier: GPL-2.0
106 VERSION = 4
107 PATCHLEVEL = 19
108 -SUBLEVEL = 6
109 +SUBLEVEL = 7
110 EXTRAVERSION =
111 NAME = "People's Front"
112
113 diff --git a/arch/arm/boot/dts/rk3288-veyron.dtsi b/arch/arm/boot/dts/rk3288-veyron.dtsi
114 index 2075120cfc4d..d8bf939a3aff 100644
115 --- a/arch/arm/boot/dts/rk3288-veyron.dtsi
116 +++ b/arch/arm/boot/dts/rk3288-veyron.dtsi
117 @@ -10,7 +10,11 @@
118 #include "rk3288.dtsi"
119
120 / {
121 - memory@0 {
122 + /*
123 + * The default coreboot on veyron devices ignores memory@0 nodes
124 + * and would instead create another memory node.
125 + */
126 + memory {
127 device_type = "memory";
128 reg = <0x0 0x0 0x0 0x80000000>;
129 };
130 diff --git a/arch/arm/kernel/ftrace.c b/arch/arm/kernel/ftrace.c
131 index 5617932a83df..ee673c09aa6c 100644
132 --- a/arch/arm/kernel/ftrace.c
133 +++ b/arch/arm/kernel/ftrace.c
134 @@ -227,9 +227,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
135 unsigned long frame_pointer)
136 {
137 unsigned long return_hooker = (unsigned long) &return_to_handler;
138 - struct ftrace_graph_ent trace;
139 unsigned long old;
140 - int err;
141
142 if (unlikely(atomic_read(&current->tracing_graph_pause)))
143 return;
144 @@ -237,21 +235,8 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
145 old = *parent;
146 *parent = return_hooker;
147
148 - trace.func = self_addr;
149 - trace.depth = current->curr_ret_stack + 1;
150 -
151 - /* Only trace if the calling function expects to */
152 - if (!ftrace_graph_entry(&trace)) {
153 + if (function_graph_enter(old, self_addr, frame_pointer, NULL))
154 *parent = old;
155 - return;
156 - }
157 -
158 - err = ftrace_push_return_trace(old, self_addr, &trace.depth,
159 - frame_pointer, NULL);
160 - if (err == -EBUSY) {
161 - *parent = old;
162 - return;
163 - }
164 }
165
166 #ifdef CONFIG_DYNAMIC_FTRACE
167 diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
168 index e0d64f862322..8ce4a79d9360 100644
169 --- a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
170 +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
171 @@ -153,7 +153,7 @@
172 };
173
174 &pcie0 {
175 - ep-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_LOW>;
176 + ep-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;
177 num-lanes = <4>;
178 pinctrl-names = "default";
179 pinctrl-0 = <&pcie_clkreqn_cpm>;
180 diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
181 index 50986e388d2b..57e962290df3 100644
182 --- a/arch/arm64/kernel/ftrace.c
183 +++ b/arch/arm64/kernel/ftrace.c
184 @@ -216,8 +216,6 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
185 {
186 unsigned long return_hooker = (unsigned long)&return_to_handler;
187 unsigned long old;
188 - struct ftrace_graph_ent trace;
189 - int err;
190
191 if (unlikely(atomic_read(&current->tracing_graph_pause)))
192 return;
193 @@ -229,18 +227,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
194 */
195 old = *parent;
196
197 - trace.func = self_addr;
198 - trace.depth = current->curr_ret_stack + 1;
199 -
200 - /* Only trace if the calling function expects to */
201 - if (!ftrace_graph_entry(&trace))
202 - return;
203 -
204 - err = ftrace_push_return_trace(old, self_addr, &trace.depth,
205 - frame_pointer, NULL);
206 - if (err == -EBUSY)
207 - return;
208 - else
209 + if (!function_graph_enter(old, self_addr, frame_pointer, NULL))
210 *parent = return_hooker;
211 }
212
213 diff --git a/arch/microblaze/kernel/ftrace.c b/arch/microblaze/kernel/ftrace.c
214 index d57563c58a26..224eea40e1ee 100644
215 --- a/arch/microblaze/kernel/ftrace.c
216 +++ b/arch/microblaze/kernel/ftrace.c
217 @@ -22,8 +22,7 @@
218 void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
219 {
220 unsigned long old;
221 - int faulted, err;
222 - struct ftrace_graph_ent trace;
223 + int faulted;
224 unsigned long return_hooker = (unsigned long)
225 &return_to_handler;
226
227 @@ -63,18 +62,8 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
228 return;
229 }
230
231 - err = ftrace_push_return_trace(old, self_addr, &trace.depth, 0, NULL);
232 - if (err == -EBUSY) {
233 + if (function_graph_enter(old, self_addr, 0, NULL))
234 *parent = old;
235 - return;
236 - }
237 -
238 - trace.func = self_addr;
239 - /* Only trace if the calling function expects to */
240 - if (!ftrace_graph_entry(&trace)) {
241 - current->curr_ret_stack--;
242 - *parent = old;
243 - }
244 }
245 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
246
247 diff --git a/arch/mips/kernel/ftrace.c b/arch/mips/kernel/ftrace.c
248 index 7f3dfdbc3657..b122cbb4aad1 100644
249 --- a/arch/mips/kernel/ftrace.c
250 +++ b/arch/mips/kernel/ftrace.c
251 @@ -322,7 +322,6 @@ void prepare_ftrace_return(unsigned long *parent_ra_addr, unsigned long self_ra,
252 unsigned long fp)
253 {
254 unsigned long old_parent_ra;
255 - struct ftrace_graph_ent trace;
256 unsigned long return_hooker = (unsigned long)
257 &return_to_handler;
258 int faulted, insns;
259 @@ -369,12 +368,6 @@ void prepare_ftrace_return(unsigned long *parent_ra_addr, unsigned long self_ra,
260 if (unlikely(faulted))
261 goto out;
262
263 - if (ftrace_push_return_trace(old_parent_ra, self_ra, &trace.depth, fp,
264 - NULL) == -EBUSY) {
265 - *parent_ra_addr = old_parent_ra;
266 - return;
267 - }
268 -
269 /*
270 * Get the recorded ip of the current mcount calling site in the
271 * __mcount_loc section, which will be used to filter the function
272 @@ -382,13 +375,10 @@ void prepare_ftrace_return(unsigned long *parent_ra_addr, unsigned long self_ra,
273 */
274
275 insns = core_kernel_text(self_ra) ? 2 : MCOUNT_OFFSET_INSNS + 1;
276 - trace.func = self_ra - (MCOUNT_INSN_SIZE * insns);
277 + self_ra -= (MCOUNT_INSN_SIZE * insns);
278
279 - /* Only trace if the calling function expects to */
280 - if (!ftrace_graph_entry(&trace)) {
281 - current->curr_ret_stack--;
282 + if (function_graph_enter(old_parent_ra, self_ra, fp, NULL))
283 *parent_ra_addr = old_parent_ra;
284 - }
285 return;
286 out:
287 ftrace_graph_stop();
288 diff --git a/arch/nds32/kernel/ftrace.c b/arch/nds32/kernel/ftrace.c
289 index a0a9679ad5de..8a41372551ff 100644
290 --- a/arch/nds32/kernel/ftrace.c
291 +++ b/arch/nds32/kernel/ftrace.c
292 @@ -211,29 +211,15 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
293 unsigned long frame_pointer)
294 {
295 unsigned long return_hooker = (unsigned long)&return_to_handler;
296 - struct ftrace_graph_ent trace;
297 unsigned long old;
298 - int err;
299
300 if (unlikely(atomic_read(&current->tracing_graph_pause)))
301 return;
302
303 old = *parent;
304
305 - trace.func = self_addr;
306 - trace.depth = current->curr_ret_stack + 1;
307 -
308 - /* Only trace if the calling function expects to */
309 - if (!ftrace_graph_entry(&trace))
310 - return;
311 -
312 - err = ftrace_push_return_trace(old, self_addr, &trace.depth,
313 - frame_pointer, NULL);
314 -
315 - if (err == -EBUSY)
316 - return;
317 -
318 - *parent = return_hooker;
319 + if (!function_graph_enter(old, self_addr, frame_pointer, NULL))
320 + *parent = return_hooker;
321 }
322
323 noinline void ftrace_graph_caller(void)
324 diff --git a/arch/parisc/kernel/ftrace.c b/arch/parisc/kernel/ftrace.c
325 index 6fa8535d3cce..e46a4157a894 100644
326 --- a/arch/parisc/kernel/ftrace.c
327 +++ b/arch/parisc/kernel/ftrace.c
328 @@ -30,7 +30,6 @@ static void __hot prepare_ftrace_return(unsigned long *parent,
329 unsigned long self_addr)
330 {
331 unsigned long old;
332 - struct ftrace_graph_ent trace;
333 extern int parisc_return_to_handler;
334
335 if (unlikely(ftrace_graph_is_dead()))
336 @@ -41,19 +40,9 @@ static void __hot prepare_ftrace_return(unsigned long *parent,
337
338 old = *parent;
339
340 - trace.func = self_addr;
341 - trace.depth = current->curr_ret_stack + 1;
342 -
343 - /* Only trace if the calling function expects to */
344 - if (!ftrace_graph_entry(&trace))
345 - return;
346 -
347 - if (ftrace_push_return_trace(old, self_addr, &trace.depth,
348 - 0, NULL) == -EBUSY)
349 - return;
350 -
351 - /* activate parisc_return_to_handler() as return point */
352 - *parent = (unsigned long) &parisc_return_to_handler;
353 + if (!function_graph_enter(old, self_addr, 0, NULL))
354 + /* activate parisc_return_to_handler() as return point */
355 + *parent = (unsigned long) &parisc_return_to_handler;
356 }
357 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
358
359 diff --git a/arch/powerpc/kernel/trace/ftrace.c b/arch/powerpc/kernel/trace/ftrace.c
360 index 4bfbb54dee51..19ef4f5866b6 100644
361 --- a/arch/powerpc/kernel/trace/ftrace.c
362 +++ b/arch/powerpc/kernel/trace/ftrace.c
363 @@ -697,7 +697,6 @@ int ftrace_disable_ftrace_graph_caller(void)
364 */
365 unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip)
366 {
367 - struct ftrace_graph_ent trace;
368 unsigned long return_hooker;
369
370 if (unlikely(ftrace_graph_is_dead()))
371 @@ -708,18 +707,8 @@ unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip)
372
373 return_hooker = ppc_function_entry(return_to_handler);
374
375 - trace.func = ip;
376 - trace.depth = current->curr_ret_stack + 1;
377 -
378 - /* Only trace if the calling function expects to */
379 - if (!ftrace_graph_entry(&trace))
380 - goto out;
381 -
382 - if (ftrace_push_return_trace(parent, ip, &trace.depth, 0,
383 - NULL) == -EBUSY)
384 - goto out;
385 -
386 - parent = return_hooker;
387 + if (!function_graph_enter(parent, ip, 0, NULL))
388 + parent = return_hooker;
389 out:
390 return parent;
391 }
392 diff --git a/arch/riscv/kernel/ftrace.c b/arch/riscv/kernel/ftrace.c
393 index 1157b6b52d25..c433f6d3dd64 100644
394 --- a/arch/riscv/kernel/ftrace.c
395 +++ b/arch/riscv/kernel/ftrace.c
396 @@ -132,7 +132,6 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
397 {
398 unsigned long return_hooker = (unsigned long)&return_to_handler;
399 unsigned long old;
400 - struct ftrace_graph_ent trace;
401 int err;
402
403 if (unlikely(atomic_read(&current->tracing_graph_pause)))
404 @@ -144,17 +143,8 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
405 */
406 old = *parent;
407
408 - trace.func = self_addr;
409 - trace.depth = current->curr_ret_stack + 1;
410 -
411 - if (!ftrace_graph_entry(&trace))
412 - return;
413 -
414 - err = ftrace_push_return_trace(old, self_addr, &trace.depth,
415 - frame_pointer, parent);
416 - if (err == -EBUSY)
417 - return;
418 - *parent = return_hooker;
419 + if (function_graph_enter(old, self_addr, frame_pointer, parent))
420 + *parent = return_hooker;
421 }
422
423 #ifdef CONFIG_DYNAMIC_FTRACE
424 diff --git a/arch/s390/kernel/ftrace.c b/arch/s390/kernel/ftrace.c
425 index 84be7f02d0c2..39b13d71a8fe 100644
426 --- a/arch/s390/kernel/ftrace.c
427 +++ b/arch/s390/kernel/ftrace.c
428 @@ -203,22 +203,13 @@ device_initcall(ftrace_plt_init);
429 */
430 unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip)
431 {
432 - struct ftrace_graph_ent trace;
433 -
434 if (unlikely(ftrace_graph_is_dead()))
435 goto out;
436 if (unlikely(atomic_read(&current->tracing_graph_pause)))
437 goto out;
438 ip -= MCOUNT_INSN_SIZE;
439 - trace.func = ip;
440 - trace.depth = current->curr_ret_stack + 1;
441 - /* Only trace if the calling function expects to. */
442 - if (!ftrace_graph_entry(&trace))
443 - goto out;
444 - if (ftrace_push_return_trace(parent, ip, &trace.depth, 0,
445 - NULL) == -EBUSY)
446 - goto out;
447 - parent = (unsigned long) return_to_handler;
448 + if (!function_graph_enter(parent, ip, 0, NULL))
449 + parent = (unsigned long) return_to_handler;
450 out:
451 return parent;
452 }
453 diff --git a/arch/sh/kernel/ftrace.c b/arch/sh/kernel/ftrace.c
454 index 96dd9f7da250..1b04270e5460 100644
455 --- a/arch/sh/kernel/ftrace.c
456 +++ b/arch/sh/kernel/ftrace.c
457 @@ -321,8 +321,7 @@ int ftrace_disable_ftrace_graph_caller(void)
458 void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
459 {
460 unsigned long old;
461 - int faulted, err;
462 - struct ftrace_graph_ent trace;
463 + int faulted;
464 unsigned long return_hooker = (unsigned long)&return_to_handler;
465
466 if (unlikely(ftrace_graph_is_dead()))
467 @@ -365,18 +364,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
468 return;
469 }
470
471 - err = ftrace_push_return_trace(old, self_addr, &trace.depth, 0, NULL);
472 - if (err == -EBUSY) {
473 + if (function_graph_enter(old, self_addr, 0, NULL))
474 __raw_writel(old, parent);
475 - return;
476 - }
477 -
478 - trace.func = self_addr;
479 -
480 - /* Only trace if the calling function expects to */
481 - if (!ftrace_graph_entry(&trace)) {
482 - current->curr_ret_stack--;
483 - __raw_writel(old, parent);
484 - }
485 }
486 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
487 diff --git a/arch/sparc/kernel/ftrace.c b/arch/sparc/kernel/ftrace.c
488 index 915dda4ae412..684b84ce397f 100644
489 --- a/arch/sparc/kernel/ftrace.c
490 +++ b/arch/sparc/kernel/ftrace.c
491 @@ -126,20 +126,11 @@ unsigned long prepare_ftrace_return(unsigned long parent,
492 unsigned long frame_pointer)
493 {
494 unsigned long return_hooker = (unsigned long) &return_to_handler;
495 - struct ftrace_graph_ent trace;
496
497 if (unlikely(atomic_read(&current->tracing_graph_pause)))
498 return parent + 8UL;
499
500 - trace.func = self_addr;
501 - trace.depth = current->curr_ret_stack + 1;
502 -
503 - /* Only trace if the calling function expects to */
504 - if (!ftrace_graph_entry(&trace))
505 - return parent + 8UL;
506 -
507 - if (ftrace_push_return_trace(parent, self_addr, &trace.depth,
508 - frame_pointer, NULL) == -EBUSY)
509 + if (function_graph_enter(parent, self_addr, frame_pointer, NULL))
510 return parent + 8UL;
511
512 return return_hooker;
513 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
514 index 1a0be022f91d..44c6a82b7ce5 100644
515 --- a/arch/x86/Kconfig
516 +++ b/arch/x86/Kconfig
517 @@ -441,10 +441,6 @@ config RETPOLINE
518 branches. Requires a compiler with -mindirect-branch=thunk-extern
519 support for full protection. The kernel may run slower.
520
521 - Without compiler support, at least indirect branches in assembler
522 - code are eliminated. Since this includes the syscall entry path,
523 - it is not entirely pointless.
524 -
525 config INTEL_RDT
526 bool "Intel Resource Director Technology support"
527 default n
528 @@ -1005,13 +1001,7 @@ config NR_CPUS
529 to the kernel image.
530
531 config SCHED_SMT
532 - bool "SMT (Hyperthreading) scheduler support"
533 - depends on SMP
534 - ---help---
535 - SMT scheduler support improves the CPU scheduler's decision making
536 - when dealing with Intel Pentium 4 chips with HyperThreading at a
537 - cost of slightly increased overhead in some places. If unsure say
538 - N here.
539 + def_bool y if SMP
540
541 config SCHED_MC
542 def_bool y
543 diff --git a/arch/x86/Makefile b/arch/x86/Makefile
544 index 8f6e7eb8ae9f..9298f0f3817a 100644
545 --- a/arch/x86/Makefile
546 +++ b/arch/x86/Makefile
547 @@ -223,9 +223,10 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
548
549 # Avoid indirect branches in kernel to deal with Spectre
550 ifdef CONFIG_RETPOLINE
551 -ifneq ($(RETPOLINE_CFLAGS),)
552 - KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) -DRETPOLINE
553 +ifeq ($(RETPOLINE_CFLAGS),)
554 + $(error You are building kernel with non-retpoline compiler, please update your compiler.)
555 endif
556 + KBUILD_CFLAGS += $(RETPOLINE_CFLAGS)
557 endif
558
559 archscripts: scripts_basic
560 diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
561 index dfb2f7c0d019..c8d08da5b308 100644
562 --- a/arch/x86/events/core.c
563 +++ b/arch/x86/events/core.c
564 @@ -438,26 +438,6 @@ int x86_setup_perfctr(struct perf_event *event)
565 if (config == -1LL)
566 return -EINVAL;
567
568 - /*
569 - * Branch tracing:
570 - */
571 - if (attr->config == PERF_COUNT_HW_BRANCH_INSTRUCTIONS &&
572 - !attr->freq && hwc->sample_period == 1) {
573 - /* BTS is not supported by this architecture. */
574 - if (!x86_pmu.bts_active)
575 - return -EOPNOTSUPP;
576 -
577 - /* BTS is currently only allowed for user-mode. */
578 - if (!attr->exclude_kernel)
579 - return -EOPNOTSUPP;
580 -
581 - /* disallow bts if conflicting events are present */
582 - if (x86_add_exclusive(x86_lbr_exclusive_lbr))
583 - return -EBUSY;
584 -
585 - event->destroy = hw_perf_lbr_event_destroy;
586 - }
587 -
588 hwc->config |= config;
589
590 return 0;
591 diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
592 index 035c37481f57..155fa4b53c56 100644
593 --- a/arch/x86/events/intel/core.c
594 +++ b/arch/x86/events/intel/core.c
595 @@ -2358,16 +2358,7 @@ done:
596 static struct event_constraint *
597 intel_bts_constraints(struct perf_event *event)
598 {
599 - struct hw_perf_event *hwc = &event->hw;
600 - unsigned int hw_event, bts_event;
601 -
602 - if (event->attr.freq)
603 - return NULL;
604 -
605 - hw_event = hwc->config & INTEL_ARCH_EVENT_MASK;
606 - bts_event = x86_pmu.event_map(PERF_COUNT_HW_BRANCH_INSTRUCTIONS);
607 -
608 - if (unlikely(hw_event == bts_event && hwc->sample_period == 1))
609 + if (unlikely(intel_pmu_has_bts(event)))
610 return &bts_constraint;
611
612 return NULL;
613 @@ -2986,10 +2977,51 @@ static unsigned long intel_pmu_large_pebs_flags(struct perf_event *event)
614 return flags;
615 }
616
617 +static int intel_pmu_bts_config(struct perf_event *event)
618 +{
619 + struct perf_event_attr *attr = &event->attr;
620 +
621 + if (unlikely(intel_pmu_has_bts(event))) {
622 + /* BTS is not supported by this architecture. */
623 + if (!x86_pmu.bts_active)
624 + return -EOPNOTSUPP;
625 +
626 + /* BTS is currently only allowed for user-mode. */
627 + if (!attr->exclude_kernel)
628 + return -EOPNOTSUPP;
629 +
630 + /* BTS is not allowed for precise events. */
631 + if (attr->precise_ip)
632 + return -EOPNOTSUPP;
633 +
634 + /* disallow bts if conflicting events are present */
635 + if (x86_add_exclusive(x86_lbr_exclusive_lbr))
636 + return -EBUSY;
637 +
638 + event->destroy = hw_perf_lbr_event_destroy;
639 + }
640 +
641 + return 0;
642 +}
643 +
644 +static int core_pmu_hw_config(struct perf_event *event)
645 +{
646 + int ret = x86_pmu_hw_config(event);
647 +
648 + if (ret)
649 + return ret;
650 +
651 + return intel_pmu_bts_config(event);
652 +}
653 +
654 static int intel_pmu_hw_config(struct perf_event *event)
655 {
656 int ret = x86_pmu_hw_config(event);
657
658 + if (ret)
659 + return ret;
660 +
661 + ret = intel_pmu_bts_config(event);
662 if (ret)
663 return ret;
664
665 @@ -3015,7 +3047,7 @@ static int intel_pmu_hw_config(struct perf_event *event)
666 /*
667 * BTS is set up earlier in this path, so don't account twice
668 */
669 - if (!intel_pmu_has_bts(event)) {
670 + if (!unlikely(intel_pmu_has_bts(event))) {
671 /* disallow lbr if conflicting events are present */
672 if (x86_add_exclusive(x86_lbr_exclusive_lbr))
673 return -EBUSY;
674 @@ -3478,7 +3510,7 @@ static __initconst const struct x86_pmu core_pmu = {
675 .enable_all = core_pmu_enable_all,
676 .enable = core_pmu_enable_event,
677 .disable = x86_pmu_disable_event,
678 - .hw_config = x86_pmu_hw_config,
679 + .hw_config = core_pmu_hw_config,
680 .schedule_events = x86_schedule_events,
681 .eventsel = MSR_ARCH_PERFMON_EVENTSEL0,
682 .perfctr = MSR_ARCH_PERFMON_PERFCTR0,
683 diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
684 index 156286335351..c5ad9cc61f4b 100644
685 --- a/arch/x86/events/perf_event.h
686 +++ b/arch/x86/events/perf_event.h
687 @@ -857,11 +857,16 @@ static inline int amd_pmu_init(void)
688
689 static inline bool intel_pmu_has_bts(struct perf_event *event)
690 {
691 - if (event->attr.config == PERF_COUNT_HW_BRANCH_INSTRUCTIONS &&
692 - !event->attr.freq && event->hw.sample_period == 1)
693 - return true;
694 + struct hw_perf_event *hwc = &event->hw;
695 + unsigned int hw_event, bts_event;
696 +
697 + if (event->attr.freq)
698 + return false;
699 +
700 + hw_event = hwc->config & INTEL_ARCH_EVENT_MASK;
701 + bts_event = x86_pmu.event_map(PERF_COUNT_HW_BRANCH_INSTRUCTIONS);
702
703 - return false;
704 + return hw_event == bts_event && hwc->sample_period == 1;
705 }
706
707 int intel_pmu_save_and_restart(struct perf_event *event);
708 diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
709 index 1c09a0d1771f..022845ee0c88 100644
710 --- a/arch/x86/include/asm/kvm_host.h
711 +++ b/arch/x86/include/asm/kvm_host.h
712 @@ -1046,7 +1046,8 @@ struct kvm_x86_ops {
713 bool (*has_wbinvd_exit)(void);
714
715 u64 (*read_l1_tsc_offset)(struct kvm_vcpu *vcpu);
716 - void (*write_tsc_offset)(struct kvm_vcpu *vcpu, u64 offset);
717 + /* Returns actual tsc_offset set in active VMCS */
718 + u64 (*write_l1_tsc_offset)(struct kvm_vcpu *vcpu, u64 offset);
719
720 void (*get_exit_info)(struct kvm_vcpu *vcpu, u64 *info1, u64 *info2);
721
722 diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
723 index 4731f0cf97c5..b3486c8b570a 100644
724 --- a/arch/x86/include/asm/msr-index.h
725 +++ b/arch/x86/include/asm/msr-index.h
726 @@ -41,9 +41,10 @@
727
728 #define MSR_IA32_SPEC_CTRL 0x00000048 /* Speculation Control */
729 #define SPEC_CTRL_IBRS (1 << 0) /* Indirect Branch Restricted Speculation */
730 -#define SPEC_CTRL_STIBP (1 << 1) /* Single Thread Indirect Branch Predictors */
731 +#define SPEC_CTRL_STIBP_SHIFT 1 /* Single Thread Indirect Branch Predictor (STIBP) bit */
732 +#define SPEC_CTRL_STIBP (1 << SPEC_CTRL_STIBP_SHIFT) /* STIBP mask */
733 #define SPEC_CTRL_SSBD_SHIFT 2 /* Speculative Store Bypass Disable bit */
734 -#define SPEC_CTRL_SSBD (1 << SPEC_CTRL_SSBD_SHIFT) /* Speculative Store Bypass Disable */
735 +#define SPEC_CTRL_SSBD (1 << SPEC_CTRL_SSBD_SHIFT) /* Speculative Store Bypass Disable */
736
737 #define MSR_IA32_PRED_CMD 0x00000049 /* Prediction Command */
738 #define PRED_CMD_IBPB (1 << 0) /* Indirect Branch Prediction Barrier */
739 diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
740 index fd2a8c1b88bc..032b6009baab 100644
741 --- a/arch/x86/include/asm/nospec-branch.h
742 +++ b/arch/x86/include/asm/nospec-branch.h
743 @@ -3,6 +3,8 @@
744 #ifndef _ASM_X86_NOSPEC_BRANCH_H_
745 #define _ASM_X86_NOSPEC_BRANCH_H_
746
747 +#include <linux/static_key.h>
748 +
749 #include <asm/alternative.h>
750 #include <asm/alternative-asm.h>
751 #include <asm/cpufeatures.h>
752 @@ -162,29 +164,35 @@
753 _ASM_PTR " 999b\n\t" \
754 ".popsection\n\t"
755
756 -#if defined(CONFIG_X86_64) && defined(RETPOLINE)
757 +#ifdef CONFIG_RETPOLINE
758 +#ifdef CONFIG_X86_64
759
760 /*
761 - * Since the inline asm uses the %V modifier which is only in newer GCC,
762 - * the 64-bit one is dependent on RETPOLINE not CONFIG_RETPOLINE.
763 + * Inline asm uses the %V modifier which is only in newer GCC
764 + * which is ensured when CONFIG_RETPOLINE is defined.
765 */
766 # define CALL_NOSPEC \
767 ANNOTATE_NOSPEC_ALTERNATIVE \
768 - ALTERNATIVE( \
769 + ALTERNATIVE_2( \
770 ANNOTATE_RETPOLINE_SAFE \
771 "call *%[thunk_target]\n", \
772 "call __x86_indirect_thunk_%V[thunk_target]\n", \
773 - X86_FEATURE_RETPOLINE)
774 + X86_FEATURE_RETPOLINE, \
775 + "lfence;\n" \
776 + ANNOTATE_RETPOLINE_SAFE \
777 + "call *%[thunk_target]\n", \
778 + X86_FEATURE_RETPOLINE_AMD)
779 # define THUNK_TARGET(addr) [thunk_target] "r" (addr)
780
781 -#elif defined(CONFIG_X86_32) && defined(CONFIG_RETPOLINE)
782 +#else /* CONFIG_X86_32 */
783 /*
784 * For i386 we use the original ret-equivalent retpoline, because
785 * otherwise we'll run out of registers. We don't care about CET
786 * here, anyway.
787 */
788 # define CALL_NOSPEC \
789 - ALTERNATIVE( \
790 + ANNOTATE_NOSPEC_ALTERNATIVE \
791 + ALTERNATIVE_2( \
792 ANNOTATE_RETPOLINE_SAFE \
793 "call *%[thunk_target]\n", \
794 " jmp 904f;\n" \
795 @@ -199,9 +207,14 @@
796 " ret;\n" \
797 " .align 16\n" \
798 "904: call 901b;\n", \
799 - X86_FEATURE_RETPOLINE)
800 + X86_FEATURE_RETPOLINE, \
801 + "lfence;\n" \
802 + ANNOTATE_RETPOLINE_SAFE \
803 + "call *%[thunk_target]\n", \
804 + X86_FEATURE_RETPOLINE_AMD)
805
806 # define THUNK_TARGET(addr) [thunk_target] "rm" (addr)
807 +#endif
808 #else /* No retpoline for C / inline asm */
809 # define CALL_NOSPEC "call *%[thunk_target]\n"
810 # define THUNK_TARGET(addr) [thunk_target] "rm" (addr)
811 @@ -210,13 +223,19 @@
812 /* The Spectre V2 mitigation variants */
813 enum spectre_v2_mitigation {
814 SPECTRE_V2_NONE,
815 - SPECTRE_V2_RETPOLINE_MINIMAL,
816 - SPECTRE_V2_RETPOLINE_MINIMAL_AMD,
817 SPECTRE_V2_RETPOLINE_GENERIC,
818 SPECTRE_V2_RETPOLINE_AMD,
819 SPECTRE_V2_IBRS_ENHANCED,
820 };
821
822 +/* The indirect branch speculation control variants */
823 +enum spectre_v2_user_mitigation {
824 + SPECTRE_V2_USER_NONE,
825 + SPECTRE_V2_USER_STRICT,
826 + SPECTRE_V2_USER_PRCTL,
827 + SPECTRE_V2_USER_SECCOMP,
828 +};
829 +
830 /* The Speculative Store Bypass disable variants */
831 enum ssb_mitigation {
832 SPEC_STORE_BYPASS_NONE,
833 @@ -294,6 +313,10 @@ do { \
834 preempt_enable(); \
835 } while (0)
836
837 +DECLARE_STATIC_KEY_FALSE(switch_to_cond_stibp);
838 +DECLARE_STATIC_KEY_FALSE(switch_mm_cond_ibpb);
839 +DECLARE_STATIC_KEY_FALSE(switch_mm_always_ibpb);
840 +
841 #endif /* __ASSEMBLY__ */
842
843 /*
844 diff --git a/arch/x86/include/asm/spec-ctrl.h b/arch/x86/include/asm/spec-ctrl.h
845 index ae7c2c5cd7f0..5393babc0598 100644
846 --- a/arch/x86/include/asm/spec-ctrl.h
847 +++ b/arch/x86/include/asm/spec-ctrl.h
848 @@ -53,12 +53,24 @@ static inline u64 ssbd_tif_to_spec_ctrl(u64 tifn)
849 return (tifn & _TIF_SSBD) >> (TIF_SSBD - SPEC_CTRL_SSBD_SHIFT);
850 }
851
852 +static inline u64 stibp_tif_to_spec_ctrl(u64 tifn)
853 +{
854 + BUILD_BUG_ON(TIF_SPEC_IB < SPEC_CTRL_STIBP_SHIFT);
855 + return (tifn & _TIF_SPEC_IB) >> (TIF_SPEC_IB - SPEC_CTRL_STIBP_SHIFT);
856 +}
857 +
858 static inline unsigned long ssbd_spec_ctrl_to_tif(u64 spec_ctrl)
859 {
860 BUILD_BUG_ON(TIF_SSBD < SPEC_CTRL_SSBD_SHIFT);
861 return (spec_ctrl & SPEC_CTRL_SSBD) << (TIF_SSBD - SPEC_CTRL_SSBD_SHIFT);
862 }
863
864 +static inline unsigned long stibp_spec_ctrl_to_tif(u64 spec_ctrl)
865 +{
866 + BUILD_BUG_ON(TIF_SPEC_IB < SPEC_CTRL_STIBP_SHIFT);
867 + return (spec_ctrl & SPEC_CTRL_STIBP) << (TIF_SPEC_IB - SPEC_CTRL_STIBP_SHIFT);
868 +}
869 +
870 static inline u64 ssbd_tif_to_amd_ls_cfg(u64 tifn)
871 {
872 return (tifn & _TIF_SSBD) ? x86_amd_ls_cfg_ssbd_mask : 0ULL;
873 @@ -70,11 +82,7 @@ extern void speculative_store_bypass_ht_init(void);
874 static inline void speculative_store_bypass_ht_init(void) { }
875 #endif
876
877 -extern void speculative_store_bypass_update(unsigned long tif);
878 -
879 -static inline void speculative_store_bypass_update_current(void)
880 -{
881 - speculative_store_bypass_update(current_thread_info()->flags);
882 -}
883 +extern void speculation_ctrl_update(unsigned long tif);
884 +extern void speculation_ctrl_update_current(void);
885
886 #endif
887 diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h
888 index 36bd243843d6..7cf1a270d891 100644
889 --- a/arch/x86/include/asm/switch_to.h
890 +++ b/arch/x86/include/asm/switch_to.h
891 @@ -11,9 +11,6 @@ struct task_struct *__switch_to_asm(struct task_struct *prev,
892
893 __visible struct task_struct *__switch_to(struct task_struct *prev,
894 struct task_struct *next);
895 -struct tss_struct;
896 -void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
897 - struct tss_struct *tss);
898
899 /* This runs runs on the previous thread's stack. */
900 static inline void prepare_switch_to(struct task_struct *next)
901 diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
902 index 2ff2a30a264f..82b73b75d67c 100644
903 --- a/arch/x86/include/asm/thread_info.h
904 +++ b/arch/x86/include/asm/thread_info.h
905 @@ -79,10 +79,12 @@ struct thread_info {
906 #define TIF_SIGPENDING 2 /* signal pending */
907 #define TIF_NEED_RESCHED 3 /* rescheduling necessary */
908 #define TIF_SINGLESTEP 4 /* reenable singlestep on user return*/
909 -#define TIF_SSBD 5 /* Reduced data speculation */
910 +#define TIF_SSBD 5 /* Speculative store bypass disable */
911 #define TIF_SYSCALL_EMU 6 /* syscall emulation active */
912 #define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
913 #define TIF_SECCOMP 8 /* secure computing */
914 +#define TIF_SPEC_IB 9 /* Indirect branch speculation mitigation */
915 +#define TIF_SPEC_FORCE_UPDATE 10 /* Force speculation MSR update in context switch */
916 #define TIF_USER_RETURN_NOTIFY 11 /* notify kernel of userspace return */
917 #define TIF_UPROBE 12 /* breakpointed or singlestepping */
918 #define TIF_PATCH_PENDING 13 /* pending live patching update */
919 @@ -110,6 +112,8 @@ struct thread_info {
920 #define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
921 #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
922 #define _TIF_SECCOMP (1 << TIF_SECCOMP)
923 +#define _TIF_SPEC_IB (1 << TIF_SPEC_IB)
924 +#define _TIF_SPEC_FORCE_UPDATE (1 << TIF_SPEC_FORCE_UPDATE)
925 #define _TIF_USER_RETURN_NOTIFY (1 << TIF_USER_RETURN_NOTIFY)
926 #define _TIF_UPROBE (1 << TIF_UPROBE)
927 #define _TIF_PATCH_PENDING (1 << TIF_PATCH_PENDING)
928 @@ -145,8 +149,18 @@ struct thread_info {
929 _TIF_FSCHECK)
930
931 /* flags to check in __switch_to() */
932 -#define _TIF_WORK_CTXSW \
933 - (_TIF_IO_BITMAP|_TIF_NOCPUID|_TIF_NOTSC|_TIF_BLOCKSTEP|_TIF_SSBD)
934 +#define _TIF_WORK_CTXSW_BASE \
935 + (_TIF_IO_BITMAP|_TIF_NOCPUID|_TIF_NOTSC|_TIF_BLOCKSTEP| \
936 + _TIF_SSBD | _TIF_SPEC_FORCE_UPDATE)
937 +
938 +/*
939 + * Avoid calls to __switch_to_xtra() on UP as STIBP is not evaluated.
940 + */
941 +#ifdef CONFIG_SMP
942 +# define _TIF_WORK_CTXSW (_TIF_WORK_CTXSW_BASE | _TIF_SPEC_IB)
943 +#else
944 +# define _TIF_WORK_CTXSW (_TIF_WORK_CTXSW_BASE)
945 +#endif
946
947 #define _TIF_WORK_CTXSW_PREV (_TIF_WORK_CTXSW|_TIF_USER_RETURN_NOTIFY)
948 #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW)
949 diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
950 index 0e2130d8d6b1..79ec7add5f98 100644
951 --- a/arch/x86/include/asm/tlbflush.h
952 +++ b/arch/x86/include/asm/tlbflush.h
953 @@ -185,10 +185,14 @@ struct tlb_state {
954
955 #define LOADED_MM_SWITCHING ((struct mm_struct *)1)
956
957 + /* Last user mm for optimizing IBPB */
958 + union {
959 + struct mm_struct *last_user_mm;
960 + unsigned long last_user_mm_ibpb;
961 + };
962 +
963 u16 loaded_mm_asid;
964 u16 next_asid;
965 - /* last user mm's ctx id */
966 - u64 last_ctx_id;
967
968 /*
969 * We can be in one of several states:
970 diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
971 index 40bdaea97fe7..78928f56cf72 100644
972 --- a/arch/x86/kernel/cpu/bugs.c
973 +++ b/arch/x86/kernel/cpu/bugs.c
974 @@ -14,6 +14,7 @@
975 #include <linux/module.h>
976 #include <linux/nospec.h>
977 #include <linux/prctl.h>
978 +#include <linux/sched/smt.h>
979
980 #include <asm/spec-ctrl.h>
981 #include <asm/cmdline.h>
982 @@ -35,12 +36,10 @@ static void __init spectre_v2_select_mitigation(void);
983 static void __init ssb_select_mitigation(void);
984 static void __init l1tf_select_mitigation(void);
985
986 -/*
987 - * Our boot-time value of the SPEC_CTRL MSR. We read it once so that any
988 - * writes to SPEC_CTRL contain whatever reserved bits have been set.
989 - */
990 -u64 __ro_after_init x86_spec_ctrl_base;
991 +/* The base value of the SPEC_CTRL MSR that always has to be preserved. */
992 +u64 x86_spec_ctrl_base;
993 EXPORT_SYMBOL_GPL(x86_spec_ctrl_base);
994 +static DEFINE_MUTEX(spec_ctrl_mutex);
995
996 /*
997 * The vendor and possibly platform specific bits which can be modified in
998 @@ -55,6 +54,13 @@ static u64 __ro_after_init x86_spec_ctrl_mask = SPEC_CTRL_IBRS;
999 u64 __ro_after_init x86_amd_ls_cfg_base;
1000 u64 __ro_after_init x86_amd_ls_cfg_ssbd_mask;
1001
1002 +/* Control conditional STIPB in switch_to() */
1003 +DEFINE_STATIC_KEY_FALSE(switch_to_cond_stibp);
1004 +/* Control conditional IBPB in switch_mm() */
1005 +DEFINE_STATIC_KEY_FALSE(switch_mm_cond_ibpb);
1006 +/* Control unconditional IBPB in switch_mm() */
1007 +DEFINE_STATIC_KEY_FALSE(switch_mm_always_ibpb);
1008 +
1009 void __init check_bugs(void)
1010 {
1011 identify_boot_cpu();
1012 @@ -125,31 +131,6 @@ void __init check_bugs(void)
1013 #endif
1014 }
1015
1016 -/* The kernel command line selection */
1017 -enum spectre_v2_mitigation_cmd {
1018 - SPECTRE_V2_CMD_NONE,
1019 - SPECTRE_V2_CMD_AUTO,
1020 - SPECTRE_V2_CMD_FORCE,
1021 - SPECTRE_V2_CMD_RETPOLINE,
1022 - SPECTRE_V2_CMD_RETPOLINE_GENERIC,
1023 - SPECTRE_V2_CMD_RETPOLINE_AMD,
1024 -};
1025 -
1026 -static const char *spectre_v2_strings[] = {
1027 - [SPECTRE_V2_NONE] = "Vulnerable",
1028 - [SPECTRE_V2_RETPOLINE_MINIMAL] = "Vulnerable: Minimal generic ASM retpoline",
1029 - [SPECTRE_V2_RETPOLINE_MINIMAL_AMD] = "Vulnerable: Minimal AMD ASM retpoline",
1030 - [SPECTRE_V2_RETPOLINE_GENERIC] = "Mitigation: Full generic retpoline",
1031 - [SPECTRE_V2_RETPOLINE_AMD] = "Mitigation: Full AMD retpoline",
1032 - [SPECTRE_V2_IBRS_ENHANCED] = "Mitigation: Enhanced IBRS",
1033 -};
1034 -
1035 -#undef pr_fmt
1036 -#define pr_fmt(fmt) "Spectre V2 : " fmt
1037 -
1038 -static enum spectre_v2_mitigation spectre_v2_enabled __ro_after_init =
1039 - SPECTRE_V2_NONE;
1040 -
1041 void
1042 x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool setguest)
1043 {
1044 @@ -171,6 +152,10 @@ x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool setguest)
1045 static_cpu_has(X86_FEATURE_AMD_SSBD))
1046 hostval |= ssbd_tif_to_spec_ctrl(ti->flags);
1047
1048 + /* Conditional STIBP enabled? */
1049 + if (static_branch_unlikely(&switch_to_cond_stibp))
1050 + hostval |= stibp_tif_to_spec_ctrl(ti->flags);
1051 +
1052 if (hostval != guestval) {
1053 msrval = setguest ? guestval : hostval;
1054 wrmsrl(MSR_IA32_SPEC_CTRL, msrval);
1055 @@ -204,7 +189,7 @@ x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool setguest)
1056 tif = setguest ? ssbd_spec_ctrl_to_tif(guestval) :
1057 ssbd_spec_ctrl_to_tif(hostval);
1058
1059 - speculative_store_bypass_update(tif);
1060 + speculation_ctrl_update(tif);
1061 }
1062 }
1063 EXPORT_SYMBOL_GPL(x86_virt_spec_ctrl);
1064 @@ -219,6 +204,15 @@ static void x86_amd_ssb_disable(void)
1065 wrmsrl(MSR_AMD64_LS_CFG, msrval);
1066 }
1067
1068 +#undef pr_fmt
1069 +#define pr_fmt(fmt) "Spectre V2 : " fmt
1070 +
1071 +static enum spectre_v2_mitigation spectre_v2_enabled __ro_after_init =
1072 + SPECTRE_V2_NONE;
1073 +
1074 +static enum spectre_v2_user_mitigation spectre_v2_user __ro_after_init =
1075 + SPECTRE_V2_USER_NONE;
1076 +
1077 #ifdef RETPOLINE
1078 static bool spectre_v2_bad_module;
1079
1080 @@ -240,67 +234,217 @@ static inline const char *spectre_v2_module_string(void)
1081 static inline const char *spectre_v2_module_string(void) { return ""; }
1082 #endif
1083
1084 -static void __init spec2_print_if_insecure(const char *reason)
1085 +static inline bool match_option(const char *arg, int arglen, const char *opt)
1086 {
1087 - if (boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
1088 - pr_info("%s selected on command line.\n", reason);
1089 + int len = strlen(opt);
1090 +
1091 + return len == arglen && !strncmp(arg, opt, len);
1092 }
1093
1094 -static void __init spec2_print_if_secure(const char *reason)
1095 +/* The kernel command line selection for spectre v2 */
1096 +enum spectre_v2_mitigation_cmd {
1097 + SPECTRE_V2_CMD_NONE,
1098 + SPECTRE_V2_CMD_AUTO,
1099 + SPECTRE_V2_CMD_FORCE,
1100 + SPECTRE_V2_CMD_RETPOLINE,
1101 + SPECTRE_V2_CMD_RETPOLINE_GENERIC,
1102 + SPECTRE_V2_CMD_RETPOLINE_AMD,
1103 +};
1104 +
1105 +enum spectre_v2_user_cmd {
1106 + SPECTRE_V2_USER_CMD_NONE,
1107 + SPECTRE_V2_USER_CMD_AUTO,
1108 + SPECTRE_V2_USER_CMD_FORCE,
1109 + SPECTRE_V2_USER_CMD_PRCTL,
1110 + SPECTRE_V2_USER_CMD_PRCTL_IBPB,
1111 + SPECTRE_V2_USER_CMD_SECCOMP,
1112 + SPECTRE_V2_USER_CMD_SECCOMP_IBPB,
1113 +};
1114 +
1115 +static const char * const spectre_v2_user_strings[] = {
1116 + [SPECTRE_V2_USER_NONE] = "User space: Vulnerable",
1117 + [SPECTRE_V2_USER_STRICT] = "User space: Mitigation: STIBP protection",
1118 + [SPECTRE_V2_USER_PRCTL] = "User space: Mitigation: STIBP via prctl",
1119 + [SPECTRE_V2_USER_SECCOMP] = "User space: Mitigation: STIBP via seccomp and prctl",
1120 +};
1121 +
1122 +static const struct {
1123 + const char *option;
1124 + enum spectre_v2_user_cmd cmd;
1125 + bool secure;
1126 +} v2_user_options[] __initdata = {
1127 + { "auto", SPECTRE_V2_USER_CMD_AUTO, false },
1128 + { "off", SPECTRE_V2_USER_CMD_NONE, false },
1129 + { "on", SPECTRE_V2_USER_CMD_FORCE, true },
1130 + { "prctl", SPECTRE_V2_USER_CMD_PRCTL, false },
1131 + { "prctl,ibpb", SPECTRE_V2_USER_CMD_PRCTL_IBPB, false },
1132 + { "seccomp", SPECTRE_V2_USER_CMD_SECCOMP, false },
1133 + { "seccomp,ibpb", SPECTRE_V2_USER_CMD_SECCOMP_IBPB, false },
1134 +};
1135 +
1136 +static void __init spec_v2_user_print_cond(const char *reason, bool secure)
1137 {
1138 - if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
1139 - pr_info("%s selected on command line.\n", reason);
1140 + if (boot_cpu_has_bug(X86_BUG_SPECTRE_V2) != secure)
1141 + pr_info("spectre_v2_user=%s forced on command line.\n", reason);
1142 }
1143
1144 -static inline bool retp_compiler(void)
1145 +static enum spectre_v2_user_cmd __init
1146 +spectre_v2_parse_user_cmdline(enum spectre_v2_mitigation_cmd v2_cmd)
1147 {
1148 - return __is_defined(RETPOLINE);
1149 + char arg[20];
1150 + int ret, i;
1151 +
1152 + switch (v2_cmd) {
1153 + case SPECTRE_V2_CMD_NONE:
1154 + return SPECTRE_V2_USER_CMD_NONE;
1155 + case SPECTRE_V2_CMD_FORCE:
1156 + return SPECTRE_V2_USER_CMD_FORCE;
1157 + default:
1158 + break;
1159 + }
1160 +
1161 + ret = cmdline_find_option(boot_command_line, "spectre_v2_user",
1162 + arg, sizeof(arg));
1163 + if (ret < 0)
1164 + return SPECTRE_V2_USER_CMD_AUTO;
1165 +
1166 + for (i = 0; i < ARRAY_SIZE(v2_user_options); i++) {
1167 + if (match_option(arg, ret, v2_user_options[i].option)) {
1168 + spec_v2_user_print_cond(v2_user_options[i].option,
1169 + v2_user_options[i].secure);
1170 + return v2_user_options[i].cmd;
1171 + }
1172 + }
1173 +
1174 + pr_err("Unknown user space protection option (%s). Switching to AUTO select\n", arg);
1175 + return SPECTRE_V2_USER_CMD_AUTO;
1176 }
1177
1178 -static inline bool match_option(const char *arg, int arglen, const char *opt)
1179 +static void __init
1180 +spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
1181 {
1182 - int len = strlen(opt);
1183 + enum spectre_v2_user_mitigation mode = SPECTRE_V2_USER_NONE;
1184 + bool smt_possible = IS_ENABLED(CONFIG_SMP);
1185 + enum spectre_v2_user_cmd cmd;
1186
1187 - return len == arglen && !strncmp(arg, opt, len);
1188 + if (!boot_cpu_has(X86_FEATURE_IBPB) && !boot_cpu_has(X86_FEATURE_STIBP))
1189 + return;
1190 +
1191 + if (cpu_smt_control == CPU_SMT_FORCE_DISABLED ||
1192 + cpu_smt_control == CPU_SMT_NOT_SUPPORTED)
1193 + smt_possible = false;
1194 +
1195 + cmd = spectre_v2_parse_user_cmdline(v2_cmd);
1196 + switch (cmd) {
1197 + case SPECTRE_V2_USER_CMD_NONE:
1198 + goto set_mode;
1199 + case SPECTRE_V2_USER_CMD_FORCE:
1200 + mode = SPECTRE_V2_USER_STRICT;
1201 + break;
1202 + case SPECTRE_V2_USER_CMD_PRCTL:
1203 + case SPECTRE_V2_USER_CMD_PRCTL_IBPB:
1204 + mode = SPECTRE_V2_USER_PRCTL;
1205 + break;
1206 + case SPECTRE_V2_USER_CMD_AUTO:
1207 + case SPECTRE_V2_USER_CMD_SECCOMP:
1208 + case SPECTRE_V2_USER_CMD_SECCOMP_IBPB:
1209 + if (IS_ENABLED(CONFIG_SECCOMP))
1210 + mode = SPECTRE_V2_USER_SECCOMP;
1211 + else
1212 + mode = SPECTRE_V2_USER_PRCTL;
1213 + break;
1214 + }
1215 +
1216 + /* Initialize Indirect Branch Prediction Barrier */
1217 + if (boot_cpu_has(X86_FEATURE_IBPB)) {
1218 + setup_force_cpu_cap(X86_FEATURE_USE_IBPB);
1219 +
1220 + switch (cmd) {
1221 + case SPECTRE_V2_USER_CMD_FORCE:
1222 + case SPECTRE_V2_USER_CMD_PRCTL_IBPB:
1223 + case SPECTRE_V2_USER_CMD_SECCOMP_IBPB:
1224 + static_branch_enable(&switch_mm_always_ibpb);
1225 + break;
1226 + case SPECTRE_V2_USER_CMD_PRCTL:
1227 + case SPECTRE_V2_USER_CMD_AUTO:
1228 + case SPECTRE_V2_USER_CMD_SECCOMP:
1229 + static_branch_enable(&switch_mm_cond_ibpb);
1230 + break;
1231 + default:
1232 + break;
1233 + }
1234 +
1235 + pr_info("mitigation: Enabling %s Indirect Branch Prediction Barrier\n",
1236 + static_key_enabled(&switch_mm_always_ibpb) ?
1237 + "always-on" : "conditional");
1238 + }
1239 +
1240 + /* If enhanced IBRS is enabled no STIPB required */
1241 + if (spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
1242 + return;
1243 +
1244 + /*
1245 + * If SMT is not possible or STIBP is not available clear the STIPB
1246 + * mode.
1247 + */
1248 + if (!smt_possible || !boot_cpu_has(X86_FEATURE_STIBP))
1249 + mode = SPECTRE_V2_USER_NONE;
1250 +set_mode:
1251 + spectre_v2_user = mode;
1252 + /* Only print the STIBP mode when SMT possible */
1253 + if (smt_possible)
1254 + pr_info("%s\n", spectre_v2_user_strings[mode]);
1255 }
1256
1257 +static const char * const spectre_v2_strings[] = {
1258 + [SPECTRE_V2_NONE] = "Vulnerable",
1259 + [SPECTRE_V2_RETPOLINE_GENERIC] = "Mitigation: Full generic retpoline",
1260 + [SPECTRE_V2_RETPOLINE_AMD] = "Mitigation: Full AMD retpoline",
1261 + [SPECTRE_V2_IBRS_ENHANCED] = "Mitigation: Enhanced IBRS",
1262 +};
1263 +
1264 static const struct {
1265 const char *option;
1266 enum spectre_v2_mitigation_cmd cmd;
1267 bool secure;
1268 -} mitigation_options[] = {
1269 - { "off", SPECTRE_V2_CMD_NONE, false },
1270 - { "on", SPECTRE_V2_CMD_FORCE, true },
1271 - { "retpoline", SPECTRE_V2_CMD_RETPOLINE, false },
1272 - { "retpoline,amd", SPECTRE_V2_CMD_RETPOLINE_AMD, false },
1273 - { "retpoline,generic", SPECTRE_V2_CMD_RETPOLINE_GENERIC, false },
1274 - { "auto", SPECTRE_V2_CMD_AUTO, false },
1275 +} mitigation_options[] __initdata = {
1276 + { "off", SPECTRE_V2_CMD_NONE, false },
1277 + { "on", SPECTRE_V2_CMD_FORCE, true },
1278 + { "retpoline", SPECTRE_V2_CMD_RETPOLINE, false },
1279 + { "retpoline,amd", SPECTRE_V2_CMD_RETPOLINE_AMD, false },
1280 + { "retpoline,generic", SPECTRE_V2_CMD_RETPOLINE_GENERIC, false },
1281 + { "auto", SPECTRE_V2_CMD_AUTO, false },
1282 };
1283
1284 +static void __init spec_v2_print_cond(const char *reason, bool secure)
1285 +{
1286 + if (boot_cpu_has_bug(X86_BUG_SPECTRE_V2) != secure)
1287 + pr_info("%s selected on command line.\n", reason);
1288 +}
1289 +
1290 static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
1291 {
1292 + enum spectre_v2_mitigation_cmd cmd = SPECTRE_V2_CMD_AUTO;
1293 char arg[20];
1294 int ret, i;
1295 - enum spectre_v2_mitigation_cmd cmd = SPECTRE_V2_CMD_AUTO;
1296
1297 if (cmdline_find_option_bool(boot_command_line, "nospectre_v2"))
1298 return SPECTRE_V2_CMD_NONE;
1299 - else {
1300 - ret = cmdline_find_option(boot_command_line, "spectre_v2", arg, sizeof(arg));
1301 - if (ret < 0)
1302 - return SPECTRE_V2_CMD_AUTO;
1303
1304 - for (i = 0; i < ARRAY_SIZE(mitigation_options); i++) {
1305 - if (!match_option(arg, ret, mitigation_options[i].option))
1306 - continue;
1307 - cmd = mitigation_options[i].cmd;
1308 - break;
1309 - }
1310 + ret = cmdline_find_option(boot_command_line, "spectre_v2", arg, sizeof(arg));
1311 + if (ret < 0)
1312 + return SPECTRE_V2_CMD_AUTO;
1313
1314 - if (i >= ARRAY_SIZE(mitigation_options)) {
1315 - pr_err("unknown option (%s). Switching to AUTO select\n", arg);
1316 - return SPECTRE_V2_CMD_AUTO;
1317 - }
1318 + for (i = 0; i < ARRAY_SIZE(mitigation_options); i++) {
1319 + if (!match_option(arg, ret, mitigation_options[i].option))
1320 + continue;
1321 + cmd = mitigation_options[i].cmd;
1322 + break;
1323 + }
1324 +
1325 + if (i >= ARRAY_SIZE(mitigation_options)) {
1326 + pr_err("unknown option (%s). Switching to AUTO select\n", arg);
1327 + return SPECTRE_V2_CMD_AUTO;
1328 }
1329
1330 if ((cmd == SPECTRE_V2_CMD_RETPOLINE ||
1331 @@ -317,11 +461,8 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
1332 return SPECTRE_V2_CMD_AUTO;
1333 }
1334
1335 - if (mitigation_options[i].secure)
1336 - spec2_print_if_secure(mitigation_options[i].option);
1337 - else
1338 - spec2_print_if_insecure(mitigation_options[i].option);
1339 -
1340 + spec_v2_print_cond(mitigation_options[i].option,
1341 + mitigation_options[i].secure);
1342 return cmd;
1343 }
1344
1345 @@ -377,14 +518,12 @@ retpoline_auto:
1346 pr_err("Spectre mitigation: LFENCE not serializing, switching to generic retpoline\n");
1347 goto retpoline_generic;
1348 }
1349 - mode = retp_compiler() ? SPECTRE_V2_RETPOLINE_AMD :
1350 - SPECTRE_V2_RETPOLINE_MINIMAL_AMD;
1351 + mode = SPECTRE_V2_RETPOLINE_AMD;
1352 setup_force_cpu_cap(X86_FEATURE_RETPOLINE_AMD);
1353 setup_force_cpu_cap(X86_FEATURE_RETPOLINE);
1354 } else {
1355 retpoline_generic:
1356 - mode = retp_compiler() ? SPECTRE_V2_RETPOLINE_GENERIC :
1357 - SPECTRE_V2_RETPOLINE_MINIMAL;
1358 + mode = SPECTRE_V2_RETPOLINE_GENERIC;
1359 setup_force_cpu_cap(X86_FEATURE_RETPOLINE);
1360 }
1361
1362 @@ -403,12 +542,6 @@ specv2_set_mode:
1363 setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
1364 pr_info("Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\n");
1365
1366 - /* Initialize Indirect Branch Prediction Barrier if supported */
1367 - if (boot_cpu_has(X86_FEATURE_IBPB)) {
1368 - setup_force_cpu_cap(X86_FEATURE_USE_IBPB);
1369 - pr_info("Spectre v2 mitigation: Enabling Indirect Branch Prediction Barrier\n");
1370 - }
1371 -
1372 /*
1373 * Retpoline means the kernel is safe because it has no indirect
1374 * branches. Enhanced IBRS protects firmware too, so, enable restricted
1375 @@ -424,6 +557,66 @@ specv2_set_mode:
1376 setup_force_cpu_cap(X86_FEATURE_USE_IBRS_FW);
1377 pr_info("Enabling Restricted Speculation for firmware calls\n");
1378 }
1379 +
1380 + /* Set up IBPB and STIBP depending on the general spectre V2 command */
1381 + spectre_v2_user_select_mitigation(cmd);
1382 +
1383 + /* Enable STIBP if appropriate */
1384 + arch_smt_update();
1385 +}
1386 +
1387 +static void update_stibp_msr(void * __unused)
1388 +{
1389 + wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base);
1390 +}
1391 +
1392 +/* Update x86_spec_ctrl_base in case SMT state changed. */
1393 +static void update_stibp_strict(void)
1394 +{
1395 + u64 mask = x86_spec_ctrl_base & ~SPEC_CTRL_STIBP;
1396 +
1397 + if (sched_smt_active())
1398 + mask |= SPEC_CTRL_STIBP;
1399 +
1400 + if (mask == x86_spec_ctrl_base)
1401 + return;
1402 +
1403 + pr_info("Update user space SMT mitigation: STIBP %s\n",
1404 + mask & SPEC_CTRL_STIBP ? "always-on" : "off");
1405 + x86_spec_ctrl_base = mask;
1406 + on_each_cpu(update_stibp_msr, NULL, 1);
1407 +}
1408 +
1409 +/* Update the static key controlling the evaluation of TIF_SPEC_IB */
1410 +static void update_indir_branch_cond(void)
1411 +{
1412 + if (sched_smt_active())
1413 + static_branch_enable(&switch_to_cond_stibp);
1414 + else
1415 + static_branch_disable(&switch_to_cond_stibp);
1416 +}
1417 +
1418 +void arch_smt_update(void)
1419 +{
1420 + /* Enhanced IBRS implies STIBP. No update required. */
1421 + if (spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
1422 + return;
1423 +
1424 + mutex_lock(&spec_ctrl_mutex);
1425 +
1426 + switch (spectre_v2_user) {
1427 + case SPECTRE_V2_USER_NONE:
1428 + break;
1429 + case SPECTRE_V2_USER_STRICT:
1430 + update_stibp_strict();
1431 + break;
1432 + case SPECTRE_V2_USER_PRCTL:
1433 + case SPECTRE_V2_USER_SECCOMP:
1434 + update_indir_branch_cond();
1435 + break;
1436 + }
1437 +
1438 + mutex_unlock(&spec_ctrl_mutex);
1439 }
1440
1441 #undef pr_fmt
1442 @@ -440,7 +633,7 @@ enum ssb_mitigation_cmd {
1443 SPEC_STORE_BYPASS_CMD_SECCOMP,
1444 };
1445
1446 -static const char *ssb_strings[] = {
1447 +static const char * const ssb_strings[] = {
1448 [SPEC_STORE_BYPASS_NONE] = "Vulnerable",
1449 [SPEC_STORE_BYPASS_DISABLE] = "Mitigation: Speculative Store Bypass disabled",
1450 [SPEC_STORE_BYPASS_PRCTL] = "Mitigation: Speculative Store Bypass disabled via prctl",
1451 @@ -450,7 +643,7 @@ static const char *ssb_strings[] = {
1452 static const struct {
1453 const char *option;
1454 enum ssb_mitigation_cmd cmd;
1455 -} ssb_mitigation_options[] = {
1456 +} ssb_mitigation_options[] __initdata = {
1457 { "auto", SPEC_STORE_BYPASS_CMD_AUTO }, /* Platform decides */
1458 { "on", SPEC_STORE_BYPASS_CMD_ON }, /* Disable Speculative Store Bypass */
1459 { "off", SPEC_STORE_BYPASS_CMD_NONE }, /* Don't touch Speculative Store Bypass */
1460 @@ -561,10 +754,25 @@ static void ssb_select_mitigation(void)
1461 #undef pr_fmt
1462 #define pr_fmt(fmt) "Speculation prctl: " fmt
1463
1464 -static int ssb_prctl_set(struct task_struct *task, unsigned long ctrl)
1465 +static void task_update_spec_tif(struct task_struct *tsk)
1466 {
1467 - bool update;
1468 + /* Force the update of the real TIF bits */
1469 + set_tsk_thread_flag(tsk, TIF_SPEC_FORCE_UPDATE);
1470
1471 + /*
1472 + * Immediately update the speculation control MSRs for the current
1473 + * task, but for a non-current task delay setting the CPU
1474 + * mitigation until it is scheduled next.
1475 + *
1476 + * This can only happen for SECCOMP mitigation. For PRCTL it's
1477 + * always the current task.
1478 + */
1479 + if (tsk == current)
1480 + speculation_ctrl_update_current();
1481 +}
1482 +
1483 +static int ssb_prctl_set(struct task_struct *task, unsigned long ctrl)
1484 +{
1485 if (ssb_mode != SPEC_STORE_BYPASS_PRCTL &&
1486 ssb_mode != SPEC_STORE_BYPASS_SECCOMP)
1487 return -ENXIO;
1488 @@ -575,28 +783,56 @@ static int ssb_prctl_set(struct task_struct *task, unsigned long ctrl)
1489 if (task_spec_ssb_force_disable(task))
1490 return -EPERM;
1491 task_clear_spec_ssb_disable(task);
1492 - update = test_and_clear_tsk_thread_flag(task, TIF_SSBD);
1493 + task_update_spec_tif(task);
1494 break;
1495 case PR_SPEC_DISABLE:
1496 task_set_spec_ssb_disable(task);
1497 - update = !test_and_set_tsk_thread_flag(task, TIF_SSBD);
1498 + task_update_spec_tif(task);
1499 break;
1500 case PR_SPEC_FORCE_DISABLE:
1501 task_set_spec_ssb_disable(task);
1502 task_set_spec_ssb_force_disable(task);
1503 - update = !test_and_set_tsk_thread_flag(task, TIF_SSBD);
1504 + task_update_spec_tif(task);
1505 break;
1506 default:
1507 return -ERANGE;
1508 }
1509 + return 0;
1510 +}
1511
1512 - /*
1513 - * If being set on non-current task, delay setting the CPU
1514 - * mitigation until it is next scheduled.
1515 - */
1516 - if (task == current && update)
1517 - speculative_store_bypass_update_current();
1518 -
1519 +static int ib_prctl_set(struct task_struct *task, unsigned long ctrl)
1520 +{
1521 + switch (ctrl) {
1522 + case PR_SPEC_ENABLE:
1523 + if (spectre_v2_user == SPECTRE_V2_USER_NONE)
1524 + return 0;
1525 + /*
1526 + * Indirect branch speculation is always disabled in strict
1527 + * mode.
1528 + */
1529 + if (spectre_v2_user == SPECTRE_V2_USER_STRICT)
1530 + return -EPERM;
1531 + task_clear_spec_ib_disable(task);
1532 + task_update_spec_tif(task);
1533 + break;
1534 + case PR_SPEC_DISABLE:
1535 + case PR_SPEC_FORCE_DISABLE:
1536 + /*
1537 + * Indirect branch speculation is always allowed when
1538 + * mitigation is force disabled.
1539 + */
1540 + if (spectre_v2_user == SPECTRE_V2_USER_NONE)
1541 + return -EPERM;
1542 + if (spectre_v2_user == SPECTRE_V2_USER_STRICT)
1543 + return 0;
1544 + task_set_spec_ib_disable(task);
1545 + if (ctrl == PR_SPEC_FORCE_DISABLE)
1546 + task_set_spec_ib_force_disable(task);
1547 + task_update_spec_tif(task);
1548 + break;
1549 + default:
1550 + return -ERANGE;
1551 + }
1552 return 0;
1553 }
1554
1555 @@ -606,6 +842,8 @@ int arch_prctl_spec_ctrl_set(struct task_struct *task, unsigned long which,
1556 switch (which) {
1557 case PR_SPEC_STORE_BYPASS:
1558 return ssb_prctl_set(task, ctrl);
1559 + case PR_SPEC_INDIRECT_BRANCH:
1560 + return ib_prctl_set(task, ctrl);
1561 default:
1562 return -ENODEV;
1563 }
1564 @@ -616,6 +854,8 @@ void arch_seccomp_spec_mitigate(struct task_struct *task)
1565 {
1566 if (ssb_mode == SPEC_STORE_BYPASS_SECCOMP)
1567 ssb_prctl_set(task, PR_SPEC_FORCE_DISABLE);
1568 + if (spectre_v2_user == SPECTRE_V2_USER_SECCOMP)
1569 + ib_prctl_set(task, PR_SPEC_FORCE_DISABLE);
1570 }
1571 #endif
1572
1573 @@ -638,11 +878,35 @@ static int ssb_prctl_get(struct task_struct *task)
1574 }
1575 }
1576
1577 +static int ib_prctl_get(struct task_struct *task)
1578 +{
1579 + if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
1580 + return PR_SPEC_NOT_AFFECTED;
1581 +
1582 + switch (spectre_v2_user) {
1583 + case SPECTRE_V2_USER_NONE:
1584 + return PR_SPEC_ENABLE;
1585 + case SPECTRE_V2_USER_PRCTL:
1586 + case SPECTRE_V2_USER_SECCOMP:
1587 + if (task_spec_ib_force_disable(task))
1588 + return PR_SPEC_PRCTL | PR_SPEC_FORCE_DISABLE;
1589 + if (task_spec_ib_disable(task))
1590 + return PR_SPEC_PRCTL | PR_SPEC_DISABLE;
1591 + return PR_SPEC_PRCTL | PR_SPEC_ENABLE;
1592 + case SPECTRE_V2_USER_STRICT:
1593 + return PR_SPEC_DISABLE;
1594 + default:
1595 + return PR_SPEC_NOT_AFFECTED;
1596 + }
1597 +}
1598 +
1599 int arch_prctl_spec_ctrl_get(struct task_struct *task, unsigned long which)
1600 {
1601 switch (which) {
1602 case PR_SPEC_STORE_BYPASS:
1603 return ssb_prctl_get(task);
1604 + case PR_SPEC_INDIRECT_BRANCH:
1605 + return ib_prctl_get(task);
1606 default:
1607 return -ENODEV;
1608 }
1609 @@ -780,7 +1044,7 @@ early_param("l1tf", l1tf_cmdline);
1610 #define L1TF_DEFAULT_MSG "Mitigation: PTE Inversion"
1611
1612 #if IS_ENABLED(CONFIG_KVM_INTEL)
1613 -static const char *l1tf_vmx_states[] = {
1614 +static const char * const l1tf_vmx_states[] = {
1615 [VMENTER_L1D_FLUSH_AUTO] = "auto",
1616 [VMENTER_L1D_FLUSH_NEVER] = "vulnerable",
1617 [VMENTER_L1D_FLUSH_COND] = "conditional cache flushes",
1618 @@ -796,13 +1060,14 @@ static ssize_t l1tf_show_state(char *buf)
1619
1620 if (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_EPT_DISABLED ||
1621 (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_NEVER &&
1622 - cpu_smt_control == CPU_SMT_ENABLED))
1623 + sched_smt_active())) {
1624 return sprintf(buf, "%s; VMX: %s\n", L1TF_DEFAULT_MSG,
1625 l1tf_vmx_states[l1tf_vmx_mitigation]);
1626 + }
1627
1628 return sprintf(buf, "%s; VMX: %s, SMT %s\n", L1TF_DEFAULT_MSG,
1629 l1tf_vmx_states[l1tf_vmx_mitigation],
1630 - cpu_smt_control == CPU_SMT_ENABLED ? "vulnerable" : "disabled");
1631 + sched_smt_active() ? "vulnerable" : "disabled");
1632 }
1633 #else
1634 static ssize_t l1tf_show_state(char *buf)
1635 @@ -811,6 +1076,36 @@ static ssize_t l1tf_show_state(char *buf)
1636 }
1637 #endif
1638
1639 +static char *stibp_state(void)
1640 +{
1641 + if (spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
1642 + return "";
1643 +
1644 + switch (spectre_v2_user) {
1645 + case SPECTRE_V2_USER_NONE:
1646 + return ", STIBP: disabled";
1647 + case SPECTRE_V2_USER_STRICT:
1648 + return ", STIBP: forced";
1649 + case SPECTRE_V2_USER_PRCTL:
1650 + case SPECTRE_V2_USER_SECCOMP:
1651 + if (static_key_enabled(&switch_to_cond_stibp))
1652 + return ", STIBP: conditional";
1653 + }
1654 + return "";
1655 +}
1656 +
1657 +static char *ibpb_state(void)
1658 +{
1659 + if (boot_cpu_has(X86_FEATURE_IBPB)) {
1660 + if (static_key_enabled(&switch_mm_always_ibpb))
1661 + return ", IBPB: always-on";
1662 + if (static_key_enabled(&switch_mm_cond_ibpb))
1663 + return ", IBPB: conditional";
1664 + return ", IBPB: disabled";
1665 + }
1666 + return "";
1667 +}
1668 +
1669 static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
1670 char *buf, unsigned int bug)
1671 {
1672 @@ -831,9 +1126,11 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
1673 return sprintf(buf, "Mitigation: __user pointer sanitization\n");
1674
1675 case X86_BUG_SPECTRE_V2:
1676 - return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
1677 - boot_cpu_has(X86_FEATURE_USE_IBPB) ? ", IBPB" : "",
1678 + return sprintf(buf, "%s%s%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled],
1679 + ibpb_state(),
1680 boot_cpu_has(X86_FEATURE_USE_IBRS_FW) ? ", IBRS_FW" : "",
1681 + stibp_state(),
1682 + boot_cpu_has(X86_FEATURE_RSB_CTXSW) ? ", RSB filling" : "",
1683 spectre_v2_module_string());
1684
1685 case X86_BUG_SPEC_STORE_BYPASS:
1686 diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
1687 index dd33c357548f..e12454e21b8a 100644
1688 --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
1689 +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
1690 @@ -56,7 +56,7 @@
1691 /* Threshold LVT offset is at MSR0xC0000410[15:12] */
1692 #define SMCA_THR_LVT_OFF 0xF000
1693
1694 -static bool thresholding_en;
1695 +static bool thresholding_irq_en;
1696
1697 static const char * const th_names[] = {
1698 "load_store",
1699 @@ -534,9 +534,8 @@ prepare_threshold_block(unsigned int bank, unsigned int block, u32 addr,
1700
1701 set_offset:
1702 offset = setup_APIC_mce_threshold(offset, new);
1703 -
1704 - if ((offset == new) && (mce_threshold_vector != amd_threshold_interrupt))
1705 - mce_threshold_vector = amd_threshold_interrupt;
1706 + if (offset == new)
1707 + thresholding_irq_en = true;
1708
1709 done:
1710 mce_threshold_block_init(&b, offset);
1711 @@ -1357,9 +1356,6 @@ int mce_threshold_remove_device(unsigned int cpu)
1712 {
1713 unsigned int bank;
1714
1715 - if (!thresholding_en)
1716 - return 0;
1717 -
1718 for (bank = 0; bank < mca_cfg.banks; ++bank) {
1719 if (!(per_cpu(bank_map, cpu) & (1 << bank)))
1720 continue;
1721 @@ -1377,9 +1373,6 @@ int mce_threshold_create_device(unsigned int cpu)
1722 struct threshold_bank **bp;
1723 int err = 0;
1724
1725 - if (!thresholding_en)
1726 - return 0;
1727 -
1728 bp = per_cpu(threshold_banks, cpu);
1729 if (bp)
1730 return 0;
1731 @@ -1408,9 +1401,6 @@ static __init int threshold_init_device(void)
1732 {
1733 unsigned lcpu = 0;
1734
1735 - if (mce_threshold_vector == amd_threshold_interrupt)
1736 - thresholding_en = true;
1737 -
1738 /* to hit CPUs online before the notifier is up */
1739 for_each_online_cpu(lcpu) {
1740 int err = mce_threshold_create_device(lcpu);
1741 @@ -1419,6 +1409,9 @@ static __init int threshold_init_device(void)
1742 return err;
1743 }
1744
1745 + if (thresholding_irq_en)
1746 + mce_threshold_vector = amd_threshold_interrupt;
1747 +
1748 return 0;
1749 }
1750 /*
1751 diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c
1752 index 61a949d84dfa..d99a8ee9e185 100644
1753 --- a/arch/x86/kernel/fpu/signal.c
1754 +++ b/arch/x86/kernel/fpu/signal.c
1755 @@ -344,10 +344,10 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size)
1756 sanitize_restored_xstate(tsk, &env, xfeatures, fx_only);
1757 }
1758
1759 + local_bh_disable();
1760 fpu->initialized = 1;
1761 - preempt_disable();
1762 fpu__restore(fpu);
1763 - preempt_enable();
1764 + local_bh_enable();
1765
1766 return err;
1767 } else {
1768 diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
1769 index 01ebcb6f263e..7ee8067cbf45 100644
1770 --- a/arch/x86/kernel/ftrace.c
1771 +++ b/arch/x86/kernel/ftrace.c
1772 @@ -994,7 +994,6 @@ void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent,
1773 {
1774 unsigned long old;
1775 int faulted;
1776 - struct ftrace_graph_ent trace;
1777 unsigned long return_hooker = (unsigned long)
1778 &return_to_handler;
1779
1780 @@ -1046,19 +1045,7 @@ void prepare_ftrace_return(unsigned long self_addr, unsigned long *parent,
1781 return;
1782 }
1783
1784 - trace.func = self_addr;
1785 - trace.depth = current->curr_ret_stack + 1;
1786 -
1787 - /* Only trace if the calling function expects to */
1788 - if (!ftrace_graph_entry(&trace)) {
1789 + if (function_graph_enter(old, self_addr, frame_pointer, parent))
1790 *parent = old;
1791 - return;
1792 - }
1793 -
1794 - if (ftrace_push_return_trace(old, self_addr, &trace.depth,
1795 - frame_pointer, parent) == -EBUSY) {
1796 - *parent = old;
1797 - return;
1798 - }
1799 }
1800 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
1801 diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
1802 index c93fcfdf1673..7d31192296a8 100644
1803 --- a/arch/x86/kernel/process.c
1804 +++ b/arch/x86/kernel/process.c
1805 @@ -40,6 +40,8 @@
1806 #include <asm/prctl.h>
1807 #include <asm/spec-ctrl.h>
1808
1809 +#include "process.h"
1810 +
1811 /*
1812 * per-CPU TSS segments. Threads are completely 'soft' on Linux,
1813 * no more per-task TSS's. The TSS size is kept cacheline-aligned
1814 @@ -252,11 +254,12 @@ void arch_setup_new_exec(void)
1815 enable_cpuid();
1816 }
1817
1818 -static inline void switch_to_bitmap(struct tss_struct *tss,
1819 - struct thread_struct *prev,
1820 +static inline void switch_to_bitmap(struct thread_struct *prev,
1821 struct thread_struct *next,
1822 unsigned long tifp, unsigned long tifn)
1823 {
1824 + struct tss_struct *tss = this_cpu_ptr(&cpu_tss_rw);
1825 +
1826 if (tifn & _TIF_IO_BITMAP) {
1827 /*
1828 * Copy the relevant range of the IO bitmap.
1829 @@ -395,32 +398,85 @@ static __always_inline void amd_set_ssb_virt_state(unsigned long tifn)
1830 wrmsrl(MSR_AMD64_VIRT_SPEC_CTRL, ssbd_tif_to_spec_ctrl(tifn));
1831 }
1832
1833 -static __always_inline void intel_set_ssb_state(unsigned long tifn)
1834 +/*
1835 + * Update the MSRs managing speculation control, during context switch.
1836 + *
1837 + * tifp: Previous task's thread flags
1838 + * tifn: Next task's thread flags
1839 + */
1840 +static __always_inline void __speculation_ctrl_update(unsigned long tifp,
1841 + unsigned long tifn)
1842 {
1843 - u64 msr = x86_spec_ctrl_base | ssbd_tif_to_spec_ctrl(tifn);
1844 + unsigned long tif_diff = tifp ^ tifn;
1845 + u64 msr = x86_spec_ctrl_base;
1846 + bool updmsr = false;
1847 +
1848 + /*
1849 + * If TIF_SSBD is different, select the proper mitigation
1850 + * method. Note that if SSBD mitigation is disabled or permanentely
1851 + * enabled this branch can't be taken because nothing can set
1852 + * TIF_SSBD.
1853 + */
1854 + if (tif_diff & _TIF_SSBD) {
1855 + if (static_cpu_has(X86_FEATURE_VIRT_SSBD)) {
1856 + amd_set_ssb_virt_state(tifn);
1857 + } else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD)) {
1858 + amd_set_core_ssb_state(tifn);
1859 + } else if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) ||
1860 + static_cpu_has(X86_FEATURE_AMD_SSBD)) {
1861 + msr |= ssbd_tif_to_spec_ctrl(tifn);
1862 + updmsr = true;
1863 + }
1864 + }
1865 +
1866 + /*
1867 + * Only evaluate TIF_SPEC_IB if conditional STIBP is enabled,
1868 + * otherwise avoid the MSR write.
1869 + */
1870 + if (IS_ENABLED(CONFIG_SMP) &&
1871 + static_branch_unlikely(&switch_to_cond_stibp)) {
1872 + updmsr |= !!(tif_diff & _TIF_SPEC_IB);
1873 + msr |= stibp_tif_to_spec_ctrl(tifn);
1874 + }
1875
1876 - wrmsrl(MSR_IA32_SPEC_CTRL, msr);
1877 + if (updmsr)
1878 + wrmsrl(MSR_IA32_SPEC_CTRL, msr);
1879 }
1880
1881 -static __always_inline void __speculative_store_bypass_update(unsigned long tifn)
1882 +static unsigned long speculation_ctrl_update_tif(struct task_struct *tsk)
1883 {
1884 - if (static_cpu_has(X86_FEATURE_VIRT_SSBD))
1885 - amd_set_ssb_virt_state(tifn);
1886 - else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD))
1887 - amd_set_core_ssb_state(tifn);
1888 - else
1889 - intel_set_ssb_state(tifn);
1890 + if (test_and_clear_tsk_thread_flag(tsk, TIF_SPEC_FORCE_UPDATE)) {
1891 + if (task_spec_ssb_disable(tsk))
1892 + set_tsk_thread_flag(tsk, TIF_SSBD);
1893 + else
1894 + clear_tsk_thread_flag(tsk, TIF_SSBD);
1895 +
1896 + if (task_spec_ib_disable(tsk))
1897 + set_tsk_thread_flag(tsk, TIF_SPEC_IB);
1898 + else
1899 + clear_tsk_thread_flag(tsk, TIF_SPEC_IB);
1900 + }
1901 + /* Return the updated threadinfo flags*/
1902 + return task_thread_info(tsk)->flags;
1903 }
1904
1905 -void speculative_store_bypass_update(unsigned long tif)
1906 +void speculation_ctrl_update(unsigned long tif)
1907 {
1908 + /* Forced update. Make sure all relevant TIF flags are different */
1909 preempt_disable();
1910 - __speculative_store_bypass_update(tif);
1911 + __speculation_ctrl_update(~tif, tif);
1912 preempt_enable();
1913 }
1914
1915 -void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
1916 - struct tss_struct *tss)
1917 +/* Called from seccomp/prctl update */
1918 +void speculation_ctrl_update_current(void)
1919 +{
1920 + preempt_disable();
1921 + speculation_ctrl_update(speculation_ctrl_update_tif(current));
1922 + preempt_enable();
1923 +}
1924 +
1925 +void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p)
1926 {
1927 struct thread_struct *prev, *next;
1928 unsigned long tifp, tifn;
1929 @@ -430,7 +486,7 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
1930
1931 tifn = READ_ONCE(task_thread_info(next_p)->flags);
1932 tifp = READ_ONCE(task_thread_info(prev_p)->flags);
1933 - switch_to_bitmap(tss, prev, next, tifp, tifn);
1934 + switch_to_bitmap(prev, next, tifp, tifn);
1935
1936 propagate_user_return_notify(prev_p, next_p);
1937
1938 @@ -451,8 +507,15 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
1939 if ((tifp ^ tifn) & _TIF_NOCPUID)
1940 set_cpuid_faulting(!!(tifn & _TIF_NOCPUID));
1941
1942 - if ((tifp ^ tifn) & _TIF_SSBD)
1943 - __speculative_store_bypass_update(tifn);
1944 + if (likely(!((tifp | tifn) & _TIF_SPEC_FORCE_UPDATE))) {
1945 + __speculation_ctrl_update(tifp, tifn);
1946 + } else {
1947 + speculation_ctrl_update_tif(prev_p);
1948 + tifn = speculation_ctrl_update_tif(next_p);
1949 +
1950 + /* Enforce MSR update to ensure consistent state */
1951 + __speculation_ctrl_update(~tifn, tifn);
1952 + }
1953 }
1954
1955 /*
1956 diff --git a/arch/x86/kernel/process.h b/arch/x86/kernel/process.h
1957 new file mode 100644
1958 index 000000000000..898e97cf6629
1959 --- /dev/null
1960 +++ b/arch/x86/kernel/process.h
1961 @@ -0,0 +1,39 @@
1962 +// SPDX-License-Identifier: GPL-2.0
1963 +//
1964 +// Code shared between 32 and 64 bit
1965 +
1966 +#include <asm/spec-ctrl.h>
1967 +
1968 +void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p);
1969 +
1970 +/*
1971 + * This needs to be inline to optimize for the common case where no extra
1972 + * work needs to be done.
1973 + */
1974 +static inline void switch_to_extra(struct task_struct *prev,
1975 + struct task_struct *next)
1976 +{
1977 + unsigned long next_tif = task_thread_info(next)->flags;
1978 + unsigned long prev_tif = task_thread_info(prev)->flags;
1979 +
1980 + if (IS_ENABLED(CONFIG_SMP)) {
1981 + /*
1982 + * Avoid __switch_to_xtra() invocation when conditional
1983 + * STIPB is disabled and the only different bit is
1984 + * TIF_SPEC_IB. For CONFIG_SMP=n TIF_SPEC_IB is not
1985 + * in the TIF_WORK_CTXSW masks.
1986 + */
1987 + if (!static_branch_likely(&switch_to_cond_stibp)) {
1988 + prev_tif &= ~_TIF_SPEC_IB;
1989 + next_tif &= ~_TIF_SPEC_IB;
1990 + }
1991 + }
1992 +
1993 + /*
1994 + * __switch_to_xtra() handles debug registers, i/o bitmaps,
1995 + * speculation mitigations etc.
1996 + */
1997 + if (unlikely(next_tif & _TIF_WORK_CTXSW_NEXT ||
1998 + prev_tif & _TIF_WORK_CTXSW_PREV))
1999 + __switch_to_xtra(prev, next);
2000 +}
2001 diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
2002 index 5046a3c9dec2..d3e593eb189f 100644
2003 --- a/arch/x86/kernel/process_32.c
2004 +++ b/arch/x86/kernel/process_32.c
2005 @@ -59,6 +59,8 @@
2006 #include <asm/intel_rdt_sched.h>
2007 #include <asm/proto.h>
2008
2009 +#include "process.h"
2010 +
2011 void __show_regs(struct pt_regs *regs, enum show_regs_mode mode)
2012 {
2013 unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
2014 @@ -232,7 +234,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
2015 struct fpu *prev_fpu = &prev->fpu;
2016 struct fpu *next_fpu = &next->fpu;
2017 int cpu = smp_processor_id();
2018 - struct tss_struct *tss = &per_cpu(cpu_tss_rw, cpu);
2019
2020 /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
2021
2022 @@ -264,12 +265,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
2023 if (get_kernel_rpl() && unlikely(prev->iopl != next->iopl))
2024 set_iopl_mask(next->iopl);
2025
2026 - /*
2027 - * Now maybe handle debug registers and/or IO bitmaps
2028 - */
2029 - if (unlikely(task_thread_info(prev_p)->flags & _TIF_WORK_CTXSW_PREV ||
2030 - task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT))
2031 - __switch_to_xtra(prev_p, next_p, tss);
2032 + switch_to_extra(prev_p, next_p);
2033
2034 /*
2035 * Leave lazy mode, flushing any hypercalls made here.
2036 diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
2037 index ea5ea850348d..a0854f283efd 100644
2038 --- a/arch/x86/kernel/process_64.c
2039 +++ b/arch/x86/kernel/process_64.c
2040 @@ -59,6 +59,8 @@
2041 #include <asm/unistd_32_ia32.h>
2042 #endif
2043
2044 +#include "process.h"
2045 +
2046 __visible DEFINE_PER_CPU(unsigned long, rsp_scratch);
2047
2048 /* Prints also some state that isn't saved in the pt_regs */
2049 @@ -422,7 +424,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
2050 struct fpu *prev_fpu = &prev->fpu;
2051 struct fpu *next_fpu = &next->fpu;
2052 int cpu = smp_processor_id();
2053 - struct tss_struct *tss = &per_cpu(cpu_tss_rw, cpu);
2054
2055 WARN_ON_ONCE(IS_ENABLED(CONFIG_DEBUG_ENTRY) &&
2056 this_cpu_read(irq_count) != -1);
2057 @@ -489,12 +490,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
2058 /* Reload sp0. */
2059 update_task_stack(next_p);
2060
2061 - /*
2062 - * Now maybe reload the debug registers and handle I/O bitmaps
2063 - */
2064 - if (unlikely(task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT ||
2065 - task_thread_info(prev_p)->flags & _TIF_WORK_CTXSW_PREV))
2066 - __switch_to_xtra(prev_p, next_p, tss);
2067 + switch_to_extra(prev_p, next_p);
2068
2069 #ifdef CONFIG_XEN_PV
2070 /*
2071 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
2072 index fbb0e6df121b..2216d21e955d 100644
2073 --- a/arch/x86/kvm/lapic.c
2074 +++ b/arch/x86/kvm/lapic.c
2075 @@ -571,6 +571,11 @@ int kvm_pv_send_ipi(struct kvm *kvm, unsigned long ipi_bitmap_low,
2076 rcu_read_lock();
2077 map = rcu_dereference(kvm->arch.apic_map);
2078
2079 + if (unlikely(!map)) {
2080 + count = -EOPNOTSUPP;
2081 + goto out;
2082 + }
2083 +
2084 if (min > map->max_apic_id)
2085 goto out;
2086 /* Bits above cluster_size are masked in the caller. */
2087 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
2088 index 51b953ad9d4e..1b82bc7c3cca 100644
2089 --- a/arch/x86/kvm/mmu.c
2090 +++ b/arch/x86/kvm/mmu.c
2091 @@ -5013,9 +5013,9 @@ static bool need_remote_flush(u64 old, u64 new)
2092 }
2093
2094 static u64 mmu_pte_write_fetch_gpte(struct kvm_vcpu *vcpu, gpa_t *gpa,
2095 - const u8 *new, int *bytes)
2096 + int *bytes)
2097 {
2098 - u64 gentry;
2099 + u64 gentry = 0;
2100 int r;
2101
2102 /*
2103 @@ -5027,22 +5027,12 @@ static u64 mmu_pte_write_fetch_gpte(struct kvm_vcpu *vcpu, gpa_t *gpa,
2104 /* Handle a 32-bit guest writing two halves of a 64-bit gpte */
2105 *gpa &= ~(gpa_t)7;
2106 *bytes = 8;
2107 - r = kvm_vcpu_read_guest(vcpu, *gpa, &gentry, 8);
2108 - if (r)
2109 - gentry = 0;
2110 - new = (const u8 *)&gentry;
2111 }
2112
2113 - switch (*bytes) {
2114 - case 4:
2115 - gentry = *(const u32 *)new;
2116 - break;
2117 - case 8:
2118 - gentry = *(const u64 *)new;
2119 - break;
2120 - default:
2121 - gentry = 0;
2122 - break;
2123 + if (*bytes == 4 || *bytes == 8) {
2124 + r = kvm_vcpu_read_guest_atomic(vcpu, *gpa, &gentry, *bytes);
2125 + if (r)
2126 + gentry = 0;
2127 }
2128
2129 return gentry;
2130 @@ -5146,8 +5136,6 @@ static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
2131
2132 pgprintk("%s: gpa %llx bytes %d\n", __func__, gpa, bytes);
2133
2134 - gentry = mmu_pte_write_fetch_gpte(vcpu, &gpa, new, &bytes);
2135 -
2136 /*
2137 * No need to care whether allocation memory is successful
2138 * or not since pte prefetch is skiped if it does not have
2139 @@ -5156,6 +5144,9 @@ static void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
2140 mmu_topup_memory_caches(vcpu);
2141
2142 spin_lock(&vcpu->kvm->mmu_lock);
2143 +
2144 + gentry = mmu_pte_write_fetch_gpte(vcpu, &gpa, &bytes);
2145 +
2146 ++vcpu->kvm->stat.mmu_pte_write;
2147 kvm_mmu_audit(vcpu, AUDIT_PRE_PTE_WRITE);
2148
2149 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
2150 index 61ccfb13899e..4397fa0c448f 100644
2151 --- a/arch/x86/kvm/svm.c
2152 +++ b/arch/x86/kvm/svm.c
2153 @@ -1444,7 +1444,7 @@ static u64 svm_read_l1_tsc_offset(struct kvm_vcpu *vcpu)
2154 return vcpu->arch.tsc_offset;
2155 }
2156
2157 -static void svm_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2158 +static u64 svm_write_l1_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2159 {
2160 struct vcpu_svm *svm = to_svm(vcpu);
2161 u64 g_tsc_offset = 0;
2162 @@ -1462,6 +1462,7 @@ static void svm_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2163 svm->vmcb->control.tsc_offset = offset + g_tsc_offset;
2164
2165 mark_dirty(svm->vmcb, VMCB_INTERCEPTS);
2166 + return svm->vmcb->control.tsc_offset;
2167 }
2168
2169 static void avic_init_vmcb(struct vcpu_svm *svm)
2170 @@ -2187,21 +2188,31 @@ out:
2171 return ERR_PTR(err);
2172 }
2173
2174 +static void svm_clear_current_vmcb(struct vmcb *vmcb)
2175 +{
2176 + int i;
2177 +
2178 + for_each_online_cpu(i)
2179 + cmpxchg(&per_cpu(svm_data, i)->current_vmcb, vmcb, NULL);
2180 +}
2181 +
2182 static void svm_free_vcpu(struct kvm_vcpu *vcpu)
2183 {
2184 struct vcpu_svm *svm = to_svm(vcpu);
2185
2186 + /*
2187 + * The vmcb page can be recycled, causing a false negative in
2188 + * svm_vcpu_load(). So, ensure that no logical CPU has this
2189 + * vmcb page recorded as its current vmcb.
2190 + */
2191 + svm_clear_current_vmcb(svm->vmcb);
2192 +
2193 __free_page(pfn_to_page(__sme_clr(svm->vmcb_pa) >> PAGE_SHIFT));
2194 __free_pages(virt_to_page(svm->msrpm), MSRPM_ALLOC_ORDER);
2195 __free_page(virt_to_page(svm->nested.hsave));
2196 __free_pages(virt_to_page(svm->nested.msrpm), MSRPM_ALLOC_ORDER);
2197 kvm_vcpu_uninit(vcpu);
2198 kmem_cache_free(kvm_vcpu_cache, svm);
2199 - /*
2200 - * The vmcb page can be recycled, causing a false negative in
2201 - * svm_vcpu_load(). So do a full IBPB now.
2202 - */
2203 - indirect_branch_prediction_barrier();
2204 }
2205
2206 static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
2207 @@ -7145,7 +7156,7 @@ static struct kvm_x86_ops svm_x86_ops __ro_after_init = {
2208 .has_wbinvd_exit = svm_has_wbinvd_exit,
2209
2210 .read_l1_tsc_offset = svm_read_l1_tsc_offset,
2211 - .write_tsc_offset = svm_write_tsc_offset,
2212 + .write_l1_tsc_offset = svm_write_l1_tsc_offset,
2213
2214 .set_tdp_cr3 = set_tdp_cr3,
2215
2216 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
2217 index 9f3def7baa6d..e55f7a90d4b2 100644
2218 --- a/arch/x86/kvm/vmx.c
2219 +++ b/arch/x86/kvm/vmx.c
2220 @@ -170,6 +170,7 @@ module_param_named(preemption_timer, enable_preemption_timer, bool, S_IRUGO);
2221 * refer SDM volume 3b section 21.6.13 & 22.1.3.
2222 */
2223 static unsigned int ple_gap = KVM_DEFAULT_PLE_GAP;
2224 +module_param(ple_gap, uint, 0444);
2225
2226 static unsigned int ple_window = KVM_VMX_DEFAULT_PLE_WINDOW;
2227 module_param(ple_window, uint, 0444);
2228 @@ -3433,11 +3434,9 @@ static u64 vmx_read_l1_tsc_offset(struct kvm_vcpu *vcpu)
2229 return vcpu->arch.tsc_offset;
2230 }
2231
2232 -/*
2233 - * writes 'offset' into guest's timestamp counter offset register
2234 - */
2235 -static void vmx_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2236 +static u64 vmx_write_l1_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2237 {
2238 + u64 active_offset = offset;
2239 if (is_guest_mode(vcpu)) {
2240 /*
2241 * We're here if L1 chose not to trap WRMSR to TSC. According
2242 @@ -3445,17 +3444,16 @@ static void vmx_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2243 * set for L2 remains unchanged, and still needs to be added
2244 * to the newly set TSC to get L2's TSC.
2245 */
2246 - struct vmcs12 *vmcs12;
2247 - /* recalculate vmcs02.TSC_OFFSET: */
2248 - vmcs12 = get_vmcs12(vcpu);
2249 - vmcs_write64(TSC_OFFSET, offset +
2250 - (nested_cpu_has(vmcs12, CPU_BASED_USE_TSC_OFFSETING) ?
2251 - vmcs12->tsc_offset : 0));
2252 + struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
2253 + if (nested_cpu_has(vmcs12, CPU_BASED_USE_TSC_OFFSETING))
2254 + active_offset += vmcs12->tsc_offset;
2255 } else {
2256 trace_kvm_write_tsc_offset(vcpu->vcpu_id,
2257 vmcs_read64(TSC_OFFSET), offset);
2258 - vmcs_write64(TSC_OFFSET, offset);
2259 }
2260 +
2261 + vmcs_write64(TSC_OFFSET, active_offset);
2262 + return active_offset;
2263 }
2264
2265 /*
2266 @@ -14203,7 +14201,7 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = {
2267 .has_wbinvd_exit = cpu_has_vmx_wbinvd_exit,
2268
2269 .read_l1_tsc_offset = vmx_read_l1_tsc_offset,
2270 - .write_tsc_offset = vmx_write_tsc_offset,
2271 + .write_l1_tsc_offset = vmx_write_l1_tsc_offset,
2272
2273 .set_tdp_cr3 = vmx_set_cr3,
2274
2275 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
2276 index ca717737347e..68b53f05a420 100644
2277 --- a/arch/x86/kvm/x86.c
2278 +++ b/arch/x86/kvm/x86.c
2279 @@ -1582,8 +1582,7 @@ EXPORT_SYMBOL_GPL(kvm_read_l1_tsc);
2280
2281 static void kvm_vcpu_write_tsc_offset(struct kvm_vcpu *vcpu, u64 offset)
2282 {
2283 - kvm_x86_ops->write_tsc_offset(vcpu, offset);
2284 - vcpu->arch.tsc_offset = offset;
2285 + vcpu->arch.tsc_offset = kvm_x86_ops->write_l1_tsc_offset(vcpu, offset);
2286 }
2287
2288 static inline bool kvm_check_tsc_unstable(void)
2289 @@ -1711,7 +1710,8 @@ EXPORT_SYMBOL_GPL(kvm_write_tsc);
2290 static inline void adjust_tsc_offset_guest(struct kvm_vcpu *vcpu,
2291 s64 adjustment)
2292 {
2293 - kvm_vcpu_write_tsc_offset(vcpu, vcpu->arch.tsc_offset + adjustment);
2294 + u64 tsc_offset = kvm_x86_ops->read_l1_tsc_offset(vcpu);
2295 + kvm_vcpu_write_tsc_offset(vcpu, tsc_offset + adjustment);
2296 }
2297
2298 static inline void adjust_tsc_offset_host(struct kvm_vcpu *vcpu, s64 adjustment)
2299 @@ -6788,6 +6788,7 @@ static int kvm_pv_clock_pairing(struct kvm_vcpu *vcpu, gpa_t paddr,
2300 clock_pairing.nsec = ts.tv_nsec;
2301 clock_pairing.tsc = kvm_read_l1_tsc(vcpu, cycle);
2302 clock_pairing.flags = 0;
2303 + memset(&clock_pairing.pad, 0, sizeof(clock_pairing.pad));
2304
2305 ret = 0;
2306 if (kvm_write_guest(vcpu->kvm, paddr, &clock_pairing,
2307 @@ -7313,7 +7314,8 @@ static void vcpu_scan_ioapic(struct kvm_vcpu *vcpu)
2308 else {
2309 if (vcpu->arch.apicv_active)
2310 kvm_x86_ops->sync_pir_to_irr(vcpu);
2311 - kvm_ioapic_scan_entry(vcpu, vcpu->arch.ioapic_handled_vectors);
2312 + if (ioapic_in_kernel(vcpu->kvm))
2313 + kvm_ioapic_scan_entry(vcpu, vcpu->arch.ioapic_handled_vectors);
2314 }
2315
2316 if (is_guest_mode(vcpu))
2317 diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
2318 index e96b99eb800c..a6d1b0241aea 100644
2319 --- a/arch/x86/mm/tlb.c
2320 +++ b/arch/x86/mm/tlb.c
2321 @@ -29,6 +29,12 @@
2322 * Implement flush IPI by CALL_FUNCTION_VECTOR, Alex Shi
2323 */
2324
2325 +/*
2326 + * Use bit 0 to mangle the TIF_SPEC_IB state into the mm pointer which is
2327 + * stored in cpu_tlb_state.last_user_mm_ibpb.
2328 + */
2329 +#define LAST_USER_MM_IBPB 0x1UL
2330 +
2331 /*
2332 * We get here when we do something requiring a TLB invalidation
2333 * but could not go invalidate all of the contexts. We do the
2334 @@ -180,6 +186,89 @@ static void sync_current_stack_to_mm(struct mm_struct *mm)
2335 }
2336 }
2337
2338 +static inline unsigned long mm_mangle_tif_spec_ib(struct task_struct *next)
2339 +{
2340 + unsigned long next_tif = task_thread_info(next)->flags;
2341 + unsigned long ibpb = (next_tif >> TIF_SPEC_IB) & LAST_USER_MM_IBPB;
2342 +
2343 + return (unsigned long)next->mm | ibpb;
2344 +}
2345 +
2346 +static void cond_ibpb(struct task_struct *next)
2347 +{
2348 + if (!next || !next->mm)
2349 + return;
2350 +
2351 + /*
2352 + * Both, the conditional and the always IBPB mode use the mm
2353 + * pointer to avoid the IBPB when switching between tasks of the
2354 + * same process. Using the mm pointer instead of mm->context.ctx_id
2355 + * opens a hypothetical hole vs. mm_struct reuse, which is more or
2356 + * less impossible to control by an attacker. Aside of that it
2357 + * would only affect the first schedule so the theoretically
2358 + * exposed data is not really interesting.
2359 + */
2360 + if (static_branch_likely(&switch_mm_cond_ibpb)) {
2361 + unsigned long prev_mm, next_mm;
2362 +
2363 + /*
2364 + * This is a bit more complex than the always mode because
2365 + * it has to handle two cases:
2366 + *
2367 + * 1) Switch from a user space task (potential attacker)
2368 + * which has TIF_SPEC_IB set to a user space task
2369 + * (potential victim) which has TIF_SPEC_IB not set.
2370 + *
2371 + * 2) Switch from a user space task (potential attacker)
2372 + * which has TIF_SPEC_IB not set to a user space task
2373 + * (potential victim) which has TIF_SPEC_IB set.
2374 + *
2375 + * This could be done by unconditionally issuing IBPB when
2376 + * a task which has TIF_SPEC_IB set is either scheduled in
2377 + * or out. Though that results in two flushes when:
2378 + *
2379 + * - the same user space task is scheduled out and later
2380 + * scheduled in again and only a kernel thread ran in
2381 + * between.
2382 + *
2383 + * - a user space task belonging to the same process is
2384 + * scheduled in after a kernel thread ran in between
2385 + *
2386 + * - a user space task belonging to the same process is
2387 + * scheduled in immediately.
2388 + *
2389 + * Optimize this with reasonably small overhead for the
2390 + * above cases. Mangle the TIF_SPEC_IB bit into the mm
2391 + * pointer of the incoming task which is stored in
2392 + * cpu_tlbstate.last_user_mm_ibpb for comparison.
2393 + */
2394 + next_mm = mm_mangle_tif_spec_ib(next);
2395 + prev_mm = this_cpu_read(cpu_tlbstate.last_user_mm_ibpb);
2396 +
2397 + /*
2398 + * Issue IBPB only if the mm's are different and one or
2399 + * both have the IBPB bit set.
2400 + */
2401 + if (next_mm != prev_mm &&
2402 + (next_mm | prev_mm) & LAST_USER_MM_IBPB)
2403 + indirect_branch_prediction_barrier();
2404 +
2405 + this_cpu_write(cpu_tlbstate.last_user_mm_ibpb, next_mm);
2406 + }
2407 +
2408 + if (static_branch_unlikely(&switch_mm_always_ibpb)) {
2409 + /*
2410 + * Only flush when switching to a user space task with a
2411 + * different context than the user space task which ran
2412 + * last on this CPU.
2413 + */
2414 + if (this_cpu_read(cpu_tlbstate.last_user_mm) != next->mm) {
2415 + indirect_branch_prediction_barrier();
2416 + this_cpu_write(cpu_tlbstate.last_user_mm, next->mm);
2417 + }
2418 + }
2419 +}
2420 +
2421 void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
2422 struct task_struct *tsk)
2423 {
2424 @@ -254,27 +343,13 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
2425 } else {
2426 u16 new_asid;
2427 bool need_flush;
2428 - u64 last_ctx_id = this_cpu_read(cpu_tlbstate.last_ctx_id);
2429
2430 /*
2431 * Avoid user/user BTB poisoning by flushing the branch
2432 * predictor when switching between processes. This stops
2433 * one process from doing Spectre-v2 attacks on another.
2434 - *
2435 - * As an optimization, flush indirect branches only when
2436 - * switching into processes that disable dumping. This
2437 - * protects high value processes like gpg, without having
2438 - * too high performance overhead. IBPB is *expensive*!
2439 - *
2440 - * This will not flush branches when switching into kernel
2441 - * threads. It will also not flush if we switch to idle
2442 - * thread and back to the same process. It will flush if we
2443 - * switch to a different non-dumpable process.
2444 */
2445 - if (tsk && tsk->mm &&
2446 - tsk->mm->context.ctx_id != last_ctx_id &&
2447 - get_dumpable(tsk->mm) != SUID_DUMP_USER)
2448 - indirect_branch_prediction_barrier();
2449 + cond_ibpb(tsk);
2450
2451 if (IS_ENABLED(CONFIG_VMAP_STACK)) {
2452 /*
2453 @@ -331,14 +406,6 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
2454 trace_tlb_flush_rcuidle(TLB_FLUSH_ON_TASK_SWITCH, 0);
2455 }
2456
2457 - /*
2458 - * Record last user mm's context id, so we can avoid
2459 - * flushing branch buffer with IBPB if we switch back
2460 - * to the same user.
2461 - */
2462 - if (next != &init_mm)
2463 - this_cpu_write(cpu_tlbstate.last_ctx_id, next->context.ctx_id);
2464 -
2465 /* Make sure we write CR3 before loaded_mm. */
2466 barrier();
2467
2468 @@ -419,7 +486,7 @@ void initialize_tlbstate_and_flush(void)
2469 write_cr3(build_cr3(mm->pgd, 0));
2470
2471 /* Reinitialize tlbstate. */
2472 - this_cpu_write(cpu_tlbstate.last_ctx_id, mm->context.ctx_id);
2473 + this_cpu_write(cpu_tlbstate.last_user_mm_ibpb, LAST_USER_MM_IBPB);
2474 this_cpu_write(cpu_tlbstate.loaded_mm_asid, 0);
2475 this_cpu_write(cpu_tlbstate.next_asid, 1);
2476 this_cpu_write(cpu_tlbstate.ctxs[0].ctx_id, mm->context.ctx_id);
2477 diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c
2478 index 67904f55f188..120dd746a147 100644
2479 --- a/arch/xtensa/kernel/asm-offsets.c
2480 +++ b/arch/xtensa/kernel/asm-offsets.c
2481 @@ -94,14 +94,14 @@ int main(void)
2482 DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp));
2483 DEFINE(THREAD_CPENABLE, offsetof (struct thread_info, cpenable));
2484 #if XTENSA_HAVE_COPROCESSORS
2485 - DEFINE(THREAD_XTREGS_CP0, offsetof (struct thread_info, xtregs_cp));
2486 - DEFINE(THREAD_XTREGS_CP1, offsetof (struct thread_info, xtregs_cp));
2487 - DEFINE(THREAD_XTREGS_CP2, offsetof (struct thread_info, xtregs_cp));
2488 - DEFINE(THREAD_XTREGS_CP3, offsetof (struct thread_info, xtregs_cp));
2489 - DEFINE(THREAD_XTREGS_CP4, offsetof (struct thread_info, xtregs_cp));
2490 - DEFINE(THREAD_XTREGS_CP5, offsetof (struct thread_info, xtregs_cp));
2491 - DEFINE(THREAD_XTREGS_CP6, offsetof (struct thread_info, xtregs_cp));
2492 - DEFINE(THREAD_XTREGS_CP7, offsetof (struct thread_info, xtregs_cp));
2493 + DEFINE(THREAD_XTREGS_CP0, offsetof(struct thread_info, xtregs_cp.cp0));
2494 + DEFINE(THREAD_XTREGS_CP1, offsetof(struct thread_info, xtregs_cp.cp1));
2495 + DEFINE(THREAD_XTREGS_CP2, offsetof(struct thread_info, xtregs_cp.cp2));
2496 + DEFINE(THREAD_XTREGS_CP3, offsetof(struct thread_info, xtregs_cp.cp3));
2497 + DEFINE(THREAD_XTREGS_CP4, offsetof(struct thread_info, xtregs_cp.cp4));
2498 + DEFINE(THREAD_XTREGS_CP5, offsetof(struct thread_info, xtregs_cp.cp5));
2499 + DEFINE(THREAD_XTREGS_CP6, offsetof(struct thread_info, xtregs_cp.cp6));
2500 + DEFINE(THREAD_XTREGS_CP7, offsetof(struct thread_info, xtregs_cp.cp7));
2501 #endif
2502 DEFINE(THREAD_XTREGS_USER, offsetof (struct thread_info, xtregs_user));
2503 DEFINE(XTREGS_USER_SIZE, sizeof(xtregs_user_t));
2504 diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
2505 index 483dcfb6e681..4bb68133a72a 100644
2506 --- a/arch/xtensa/kernel/process.c
2507 +++ b/arch/xtensa/kernel/process.c
2508 @@ -94,18 +94,21 @@ void coprocessor_release_all(struct thread_info *ti)
2509
2510 void coprocessor_flush_all(struct thread_info *ti)
2511 {
2512 - unsigned long cpenable;
2513 + unsigned long cpenable, old_cpenable;
2514 int i;
2515
2516 preempt_disable();
2517
2518 + RSR_CPENABLE(old_cpenable);
2519 cpenable = ti->cpenable;
2520 + WSR_CPENABLE(cpenable);
2521
2522 for (i = 0; i < XCHAL_CP_MAX; i++) {
2523 if ((cpenable & 1) != 0 && coprocessor_owner[i] == ti)
2524 coprocessor_flush(ti, i);
2525 cpenable >>= 1;
2526 }
2527 + WSR_CPENABLE(old_cpenable);
2528
2529 preempt_enable();
2530 }
2531 diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c
2532 index c0845cb1cbb9..d9541be0605a 100644
2533 --- a/arch/xtensa/kernel/ptrace.c
2534 +++ b/arch/xtensa/kernel/ptrace.c
2535 @@ -127,12 +127,37 @@ static int ptrace_setregs(struct task_struct *child, void __user *uregs)
2536 }
2537
2538
2539 +#if XTENSA_HAVE_COPROCESSORS
2540 +#define CP_OFFSETS(cp) \
2541 + { \
2542 + .elf_xtregs_offset = offsetof(elf_xtregs_t, cp), \
2543 + .ti_offset = offsetof(struct thread_info, xtregs_cp.cp), \
2544 + .sz = sizeof(xtregs_ ## cp ## _t), \
2545 + }
2546 +
2547 +static const struct {
2548 + size_t elf_xtregs_offset;
2549 + size_t ti_offset;
2550 + size_t sz;
2551 +} cp_offsets[] = {
2552 + CP_OFFSETS(cp0),
2553 + CP_OFFSETS(cp1),
2554 + CP_OFFSETS(cp2),
2555 + CP_OFFSETS(cp3),
2556 + CP_OFFSETS(cp4),
2557 + CP_OFFSETS(cp5),
2558 + CP_OFFSETS(cp6),
2559 + CP_OFFSETS(cp7),
2560 +};
2561 +#endif
2562 +
2563 static int ptrace_getxregs(struct task_struct *child, void __user *uregs)
2564 {
2565 struct pt_regs *regs = task_pt_regs(child);
2566 struct thread_info *ti = task_thread_info(child);
2567 elf_xtregs_t __user *xtregs = uregs;
2568 int ret = 0;
2569 + int i __maybe_unused;
2570
2571 if (!access_ok(VERIFY_WRITE, uregs, sizeof(elf_xtregs_t)))
2572 return -EIO;
2573 @@ -140,8 +165,13 @@ static int ptrace_getxregs(struct task_struct *child, void __user *uregs)
2574 #if XTENSA_HAVE_COPROCESSORS
2575 /* Flush all coprocessor registers to memory. */
2576 coprocessor_flush_all(ti);
2577 - ret |= __copy_to_user(&xtregs->cp0, &ti->xtregs_cp,
2578 - sizeof(xtregs_coprocessor_t));
2579 +
2580 + for (i = 0; i < ARRAY_SIZE(cp_offsets); ++i)
2581 + ret |= __copy_to_user((char __user *)xtregs +
2582 + cp_offsets[i].elf_xtregs_offset,
2583 + (const char *)ti +
2584 + cp_offsets[i].ti_offset,
2585 + cp_offsets[i].sz);
2586 #endif
2587 ret |= __copy_to_user(&xtregs->opt, &regs->xtregs_opt,
2588 sizeof(xtregs->opt));
2589 @@ -157,6 +187,7 @@ static int ptrace_setxregs(struct task_struct *child, void __user *uregs)
2590 struct pt_regs *regs = task_pt_regs(child);
2591 elf_xtregs_t *xtregs = uregs;
2592 int ret = 0;
2593 + int i __maybe_unused;
2594
2595 if (!access_ok(VERIFY_READ, uregs, sizeof(elf_xtregs_t)))
2596 return -EFAULT;
2597 @@ -166,8 +197,11 @@ static int ptrace_setxregs(struct task_struct *child, void __user *uregs)
2598 coprocessor_flush_all(ti);
2599 coprocessor_release_all(ti);
2600
2601 - ret |= __copy_from_user(&ti->xtregs_cp, &xtregs->cp0,
2602 - sizeof(xtregs_coprocessor_t));
2603 + for (i = 0; i < ARRAY_SIZE(cp_offsets); ++i)
2604 + ret |= __copy_from_user((char *)ti + cp_offsets[i].ti_offset,
2605 + (const char __user *)xtregs +
2606 + cp_offsets[i].elf_xtregs_offset,
2607 + cp_offsets[i].sz);
2608 #endif
2609 ret |= __copy_from_user(&regs->xtregs_opt, &xtregs->opt,
2610 sizeof(xtregs->opt));
2611 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
2612 index d58763b6b009..ce0e4d317d24 100644
2613 --- a/drivers/android/binder.c
2614 +++ b/drivers/android/binder.c
2615 @@ -2971,7 +2971,6 @@ static void binder_transaction(struct binder_proc *proc,
2616 t->buffer = NULL;
2617 goto err_binder_alloc_buf_failed;
2618 }
2619 - t->buffer->allow_user_free = 0;
2620 t->buffer->debug_id = t->debug_id;
2621 t->buffer->transaction = t;
2622 t->buffer->target_node = target_node;
2623 @@ -3465,14 +3464,18 @@ static int binder_thread_write(struct binder_proc *proc,
2624
2625 buffer = binder_alloc_prepare_to_free(&proc->alloc,
2626 data_ptr);
2627 - if (buffer == NULL) {
2628 - binder_user_error("%d:%d BC_FREE_BUFFER u%016llx no match\n",
2629 - proc->pid, thread->pid, (u64)data_ptr);
2630 - break;
2631 - }
2632 - if (!buffer->allow_user_free) {
2633 - binder_user_error("%d:%d BC_FREE_BUFFER u%016llx matched unreturned buffer\n",
2634 - proc->pid, thread->pid, (u64)data_ptr);
2635 + if (IS_ERR_OR_NULL(buffer)) {
2636 + if (PTR_ERR(buffer) == -EPERM) {
2637 + binder_user_error(
2638 + "%d:%d BC_FREE_BUFFER u%016llx matched unreturned or currently freeing buffer\n",
2639 + proc->pid, thread->pid,
2640 + (u64)data_ptr);
2641 + } else {
2642 + binder_user_error(
2643 + "%d:%d BC_FREE_BUFFER u%016llx no match\n",
2644 + proc->pid, thread->pid,
2645 + (u64)data_ptr);
2646 + }
2647 break;
2648 }
2649 binder_debug(BINDER_DEBUG_FREE_BUFFER,
2650 diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
2651 index 64fd96eada31..030c98f35cca 100644
2652 --- a/drivers/android/binder_alloc.c
2653 +++ b/drivers/android/binder_alloc.c
2654 @@ -151,16 +151,12 @@ static struct binder_buffer *binder_alloc_prepare_to_free_locked(
2655 else {
2656 /*
2657 * Guard against user threads attempting to
2658 - * free the buffer twice
2659 + * free the buffer when in use by kernel or
2660 + * after it's already been freed.
2661 */
2662 - if (buffer->free_in_progress) {
2663 - binder_alloc_debug(BINDER_DEBUG_USER_ERROR,
2664 - "%d:%d FREE_BUFFER u%016llx user freed buffer twice\n",
2665 - alloc->pid, current->pid,
2666 - (u64)user_ptr);
2667 - return NULL;
2668 - }
2669 - buffer->free_in_progress = 1;
2670 + if (!buffer->allow_user_free)
2671 + return ERR_PTR(-EPERM);
2672 + buffer->allow_user_free = 0;
2673 return buffer;
2674 }
2675 }
2676 @@ -500,7 +496,7 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
2677
2678 rb_erase(best_fit, &alloc->free_buffers);
2679 buffer->free = 0;
2680 - buffer->free_in_progress = 0;
2681 + buffer->allow_user_free = 0;
2682 binder_insert_allocated_buffer_locked(alloc, buffer);
2683 binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC,
2684 "%d: binder_alloc_buf size %zd got %pK\n",
2685 diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h
2686 index 9ef64e563856..fb3238c74c8a 100644
2687 --- a/drivers/android/binder_alloc.h
2688 +++ b/drivers/android/binder_alloc.h
2689 @@ -50,8 +50,7 @@ struct binder_buffer {
2690 unsigned free:1;
2691 unsigned allow_user_free:1;
2692 unsigned async_transaction:1;
2693 - unsigned free_in_progress:1;
2694 - unsigned debug_id:28;
2695 + unsigned debug_id:29;
2696
2697 struct binder_transaction *transaction;
2698
2699 diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
2700 index 75f38d19fcbe..dbc51154f122 100644
2701 --- a/drivers/dma/at_hdmac.c
2702 +++ b/drivers/dma/at_hdmac.c
2703 @@ -1641,6 +1641,12 @@ static void atc_free_chan_resources(struct dma_chan *chan)
2704 atchan->descs_allocated = 0;
2705 atchan->status = 0;
2706
2707 + /*
2708 + * Free atslave allocated in at_dma_xlate()
2709 + */
2710 + kfree(chan->private);
2711 + chan->private = NULL;
2712 +
2713 dev_vdbg(chan2dev(chan), "free_chan_resources: done\n");
2714 }
2715
2716 @@ -1675,7 +1681,7 @@ static struct dma_chan *at_dma_xlate(struct of_phandle_args *dma_spec,
2717 dma_cap_zero(mask);
2718 dma_cap_set(DMA_SLAVE, mask);
2719
2720 - atslave = devm_kzalloc(&dmac_pdev->dev, sizeof(*atslave), GFP_KERNEL);
2721 + atslave = kzalloc(sizeof(*atslave), GFP_KERNEL);
2722 if (!atslave)
2723 return NULL;
2724
2725 @@ -2000,6 +2006,8 @@ static int at_dma_remove(struct platform_device *pdev)
2726 struct resource *io;
2727
2728 at_dma_off(atdma);
2729 + if (pdev->dev.of_node)
2730 + of_dma_controller_free(pdev->dev.of_node);
2731 dma_async_device_unregister(&atdma->dma_common);
2732
2733 dma_pool_destroy(atdma->memset_pool);
2734 diff --git a/drivers/hid/hid-sensor-custom.c b/drivers/hid/hid-sensor-custom.c
2735 index e8a114157f87..bb012bc032e0 100644
2736 --- a/drivers/hid/hid-sensor-custom.c
2737 +++ b/drivers/hid/hid-sensor-custom.c
2738 @@ -358,7 +358,7 @@ static ssize_t show_value(struct device *dev, struct device_attribute *attr,
2739 sensor_inst->hsdev,
2740 sensor_inst->hsdev->usage,
2741 usage, report_id,
2742 - SENSOR_HUB_SYNC);
2743 + SENSOR_HUB_SYNC, false);
2744 } else if (!strncmp(name, "units", strlen("units")))
2745 value = sensor_inst->fields[field_index].attribute.units;
2746 else if (!strncmp(name, "unit-expo", strlen("unit-expo")))
2747 diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
2748 index 2b63487057c2..4256fdc5cd6d 100644
2749 --- a/drivers/hid/hid-sensor-hub.c
2750 +++ b/drivers/hid/hid-sensor-hub.c
2751 @@ -299,7 +299,8 @@ EXPORT_SYMBOL_GPL(sensor_hub_get_feature);
2752 int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
2753 u32 usage_id,
2754 u32 attr_usage_id, u32 report_id,
2755 - enum sensor_hub_read_flags flag)
2756 + enum sensor_hub_read_flags flag,
2757 + bool is_signed)
2758 {
2759 struct sensor_hub_data *data = hid_get_drvdata(hsdev->hdev);
2760 unsigned long flags;
2761 @@ -331,10 +332,16 @@ int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
2762 &hsdev->pending.ready, HZ*5);
2763 switch (hsdev->pending.raw_size) {
2764 case 1:
2765 - ret_val = *(u8 *)hsdev->pending.raw_data;
2766 + if (is_signed)
2767 + ret_val = *(s8 *)hsdev->pending.raw_data;
2768 + else
2769 + ret_val = *(u8 *)hsdev->pending.raw_data;
2770 break;
2771 case 2:
2772 - ret_val = *(u16 *)hsdev->pending.raw_data;
2773 + if (is_signed)
2774 + ret_val = *(s16 *)hsdev->pending.raw_data;
2775 + else
2776 + ret_val = *(u16 *)hsdev->pending.raw_data;
2777 break;
2778 case 4:
2779 ret_val = *(u32 *)hsdev->pending.raw_data;
2780 diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
2781 index 741857d80da1..2f164bd74687 100644
2782 --- a/drivers/hv/channel.c
2783 +++ b/drivers/hv/channel.c
2784 @@ -482,6 +482,14 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
2785 }
2786 wait_for_completion(&msginfo->waitevent);
2787
2788 + if (msginfo->response.gpadl_created.creation_status != 0) {
2789 + pr_err("Failed to establish GPADL: err = 0x%x\n",
2790 + msginfo->response.gpadl_created.creation_status);
2791 +
2792 + ret = -EDQUOT;
2793 + goto cleanup;
2794 + }
2795 +
2796 if (channel->rescind) {
2797 ret = -ENODEV;
2798 goto cleanup;
2799 diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c
2800 index 41d97faf5013..38ff374a3ca4 100644
2801 --- a/drivers/iio/accel/hid-sensor-accel-3d.c
2802 +++ b/drivers/iio/accel/hid-sensor-accel-3d.c
2803 @@ -149,6 +149,7 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev,
2804 int report_id = -1;
2805 u32 address;
2806 int ret_type;
2807 + s32 min;
2808 struct hid_sensor_hub_device *hsdev =
2809 accel_state->common_attributes.hsdev;
2810
2811 @@ -158,12 +159,14 @@ static int accel_3d_read_raw(struct iio_dev *indio_dev,
2812 case IIO_CHAN_INFO_RAW:
2813 hid_sensor_power_state(&accel_state->common_attributes, true);
2814 report_id = accel_state->accel[chan->scan_index].report_id;
2815 + min = accel_state->accel[chan->scan_index].logical_minimum;
2816 address = accel_3d_addresses[chan->scan_index];
2817 if (report_id >= 0)
2818 *val = sensor_hub_input_attr_get_raw_value(
2819 accel_state->common_attributes.hsdev,
2820 hsdev->usage, address, report_id,
2821 - SENSOR_HUB_SYNC);
2822 + SENSOR_HUB_SYNC,
2823 + min < 0);
2824 else {
2825 *val = 0;
2826 hid_sensor_power_state(&accel_state->common_attributes,
2827 diff --git a/drivers/iio/gyro/hid-sensor-gyro-3d.c b/drivers/iio/gyro/hid-sensor-gyro-3d.c
2828 index 36941e69f959..88e857c4baf4 100644
2829 --- a/drivers/iio/gyro/hid-sensor-gyro-3d.c
2830 +++ b/drivers/iio/gyro/hid-sensor-gyro-3d.c
2831 @@ -111,6 +111,7 @@ static int gyro_3d_read_raw(struct iio_dev *indio_dev,
2832 int report_id = -1;
2833 u32 address;
2834 int ret_type;
2835 + s32 min;
2836
2837 *val = 0;
2838 *val2 = 0;
2839 @@ -118,13 +119,15 @@ static int gyro_3d_read_raw(struct iio_dev *indio_dev,
2840 case IIO_CHAN_INFO_RAW:
2841 hid_sensor_power_state(&gyro_state->common_attributes, true);
2842 report_id = gyro_state->gyro[chan->scan_index].report_id;
2843 + min = gyro_state->gyro[chan->scan_index].logical_minimum;
2844 address = gyro_3d_addresses[chan->scan_index];
2845 if (report_id >= 0)
2846 *val = sensor_hub_input_attr_get_raw_value(
2847 gyro_state->common_attributes.hsdev,
2848 HID_USAGE_SENSOR_GYRO_3D, address,
2849 report_id,
2850 - SENSOR_HUB_SYNC);
2851 + SENSOR_HUB_SYNC,
2852 + min < 0);
2853 else {
2854 *val = 0;
2855 hid_sensor_power_state(&gyro_state->common_attributes,
2856 diff --git a/drivers/iio/humidity/hid-sensor-humidity.c b/drivers/iio/humidity/hid-sensor-humidity.c
2857 index beab6d6fd6e1..4bc95f31c730 100644
2858 --- a/drivers/iio/humidity/hid-sensor-humidity.c
2859 +++ b/drivers/iio/humidity/hid-sensor-humidity.c
2860 @@ -75,7 +75,8 @@ static int humidity_read_raw(struct iio_dev *indio_dev,
2861 HID_USAGE_SENSOR_HUMIDITY,
2862 HID_USAGE_SENSOR_ATMOSPHERIC_HUMIDITY,
2863 humid_st->humidity_attr.report_id,
2864 - SENSOR_HUB_SYNC);
2865 + SENSOR_HUB_SYNC,
2866 + humid_st->humidity_attr.logical_minimum < 0);
2867 hid_sensor_power_state(&humid_st->common_attributes, false);
2868
2869 return IIO_VAL_INT;
2870 diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
2871 index 406caaee9a3c..94f33250ba5a 100644
2872 --- a/drivers/iio/light/hid-sensor-als.c
2873 +++ b/drivers/iio/light/hid-sensor-als.c
2874 @@ -93,6 +93,7 @@ static int als_read_raw(struct iio_dev *indio_dev,
2875 int report_id = -1;
2876 u32 address;
2877 int ret_type;
2878 + s32 min;
2879
2880 *val = 0;
2881 *val2 = 0;
2882 @@ -102,8 +103,8 @@ static int als_read_raw(struct iio_dev *indio_dev,
2883 case CHANNEL_SCAN_INDEX_INTENSITY:
2884 case CHANNEL_SCAN_INDEX_ILLUM:
2885 report_id = als_state->als_illum.report_id;
2886 - address =
2887 - HID_USAGE_SENSOR_LIGHT_ILLUM;
2888 + min = als_state->als_illum.logical_minimum;
2889 + address = HID_USAGE_SENSOR_LIGHT_ILLUM;
2890 break;
2891 default:
2892 report_id = -1;
2893 @@ -116,7 +117,8 @@ static int als_read_raw(struct iio_dev *indio_dev,
2894 als_state->common_attributes.hsdev,
2895 HID_USAGE_SENSOR_ALS, address,
2896 report_id,
2897 - SENSOR_HUB_SYNC);
2898 + SENSOR_HUB_SYNC,
2899 + min < 0);
2900 hid_sensor_power_state(&als_state->common_attributes,
2901 false);
2902 } else {
2903 diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
2904 index 45107f7537b5..cf5a0c242609 100644
2905 --- a/drivers/iio/light/hid-sensor-prox.c
2906 +++ b/drivers/iio/light/hid-sensor-prox.c
2907 @@ -73,6 +73,7 @@ static int prox_read_raw(struct iio_dev *indio_dev,
2908 int report_id = -1;
2909 u32 address;
2910 int ret_type;
2911 + s32 min;
2912
2913 *val = 0;
2914 *val2 = 0;
2915 @@ -81,8 +82,8 @@ static int prox_read_raw(struct iio_dev *indio_dev,
2916 switch (chan->scan_index) {
2917 case CHANNEL_SCAN_INDEX_PRESENCE:
2918 report_id = prox_state->prox_attr.report_id;
2919 - address =
2920 - HID_USAGE_SENSOR_HUMAN_PRESENCE;
2921 + min = prox_state->prox_attr.logical_minimum;
2922 + address = HID_USAGE_SENSOR_HUMAN_PRESENCE;
2923 break;
2924 default:
2925 report_id = -1;
2926 @@ -95,7 +96,8 @@ static int prox_read_raw(struct iio_dev *indio_dev,
2927 prox_state->common_attributes.hsdev,
2928 HID_USAGE_SENSOR_PROX, address,
2929 report_id,
2930 - SENSOR_HUB_SYNC);
2931 + SENSOR_HUB_SYNC,
2932 + min < 0);
2933 hid_sensor_power_state(&prox_state->common_attributes,
2934 false);
2935 } else {
2936 diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
2937 index d55c4885211a..f3c0d41e5a8c 100644
2938 --- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c
2939 +++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
2940 @@ -163,21 +163,23 @@ static int magn_3d_read_raw(struct iio_dev *indio_dev,
2941 int report_id = -1;
2942 u32 address;
2943 int ret_type;
2944 + s32 min;
2945
2946 *val = 0;
2947 *val2 = 0;
2948 switch (mask) {
2949 case IIO_CHAN_INFO_RAW:
2950 hid_sensor_power_state(&magn_state->magn_flux_attributes, true);
2951 - report_id =
2952 - magn_state->magn[chan->address].report_id;
2953 + report_id = magn_state->magn[chan->address].report_id;
2954 + min = magn_state->magn[chan->address].logical_minimum;
2955 address = magn_3d_addresses[chan->address];
2956 if (report_id >= 0)
2957 *val = sensor_hub_input_attr_get_raw_value(
2958 magn_state->magn_flux_attributes.hsdev,
2959 HID_USAGE_SENSOR_COMPASS_3D, address,
2960 report_id,
2961 - SENSOR_HUB_SYNC);
2962 + SENSOR_HUB_SYNC,
2963 + min < 0);
2964 else {
2965 *val = 0;
2966 hid_sensor_power_state(
2967 diff --git a/drivers/iio/magnetometer/st_magn_buffer.c b/drivers/iio/magnetometer/st_magn_buffer.c
2968 index 0a9e8fadfa9d..37ab30566464 100644
2969 --- a/drivers/iio/magnetometer/st_magn_buffer.c
2970 +++ b/drivers/iio/magnetometer/st_magn_buffer.c
2971 @@ -30,11 +30,6 @@ int st_magn_trig_set_state(struct iio_trigger *trig, bool state)
2972 return st_sensors_set_dataready_irq(indio_dev, state);
2973 }
2974
2975 -static int st_magn_buffer_preenable(struct iio_dev *indio_dev)
2976 -{
2977 - return st_sensors_set_enable(indio_dev, true);
2978 -}
2979 -
2980 static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
2981 {
2982 int err;
2983 @@ -50,7 +45,7 @@ static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
2984 if (err < 0)
2985 goto st_magn_buffer_postenable_error;
2986
2987 - return err;
2988 + return st_sensors_set_enable(indio_dev, true);
2989
2990 st_magn_buffer_postenable_error:
2991 kfree(mdata->buffer_data);
2992 @@ -63,11 +58,11 @@ static int st_magn_buffer_predisable(struct iio_dev *indio_dev)
2993 int err;
2994 struct st_sensor_data *mdata = iio_priv(indio_dev);
2995
2996 - err = iio_triggered_buffer_predisable(indio_dev);
2997 + err = st_sensors_set_enable(indio_dev, false);
2998 if (err < 0)
2999 goto st_magn_buffer_predisable_error;
3000
3001 - err = st_sensors_set_enable(indio_dev, false);
3002 + err = iio_triggered_buffer_predisable(indio_dev);
3003
3004 st_magn_buffer_predisable_error:
3005 kfree(mdata->buffer_data);
3006 @@ -75,7 +70,6 @@ st_magn_buffer_predisable_error:
3007 }
3008
3009 static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = {
3010 - .preenable = &st_magn_buffer_preenable,
3011 .postenable = &st_magn_buffer_postenable,
3012 .predisable = &st_magn_buffer_predisable,
3013 };
3014 diff --git a/drivers/iio/orientation/hid-sensor-incl-3d.c b/drivers/iio/orientation/hid-sensor-incl-3d.c
3015 index 1e5451d1ff88..bdc5e4554ee4 100644
3016 --- a/drivers/iio/orientation/hid-sensor-incl-3d.c
3017 +++ b/drivers/iio/orientation/hid-sensor-incl-3d.c
3018 @@ -111,21 +111,23 @@ static int incl_3d_read_raw(struct iio_dev *indio_dev,
3019 int report_id = -1;
3020 u32 address;
3021 int ret_type;
3022 + s32 min;
3023
3024 *val = 0;
3025 *val2 = 0;
3026 switch (mask) {
3027 case IIO_CHAN_INFO_RAW:
3028 hid_sensor_power_state(&incl_state->common_attributes, true);
3029 - report_id =
3030 - incl_state->incl[chan->scan_index].report_id;
3031 + report_id = incl_state->incl[chan->scan_index].report_id;
3032 + min = incl_state->incl[chan->scan_index].logical_minimum;
3033 address = incl_3d_addresses[chan->scan_index];
3034 if (report_id >= 0)
3035 *val = sensor_hub_input_attr_get_raw_value(
3036 incl_state->common_attributes.hsdev,
3037 HID_USAGE_SENSOR_INCLINOMETER_3D, address,
3038 report_id,
3039 - SENSOR_HUB_SYNC);
3040 + SENSOR_HUB_SYNC,
3041 + min < 0);
3042 else {
3043 hid_sensor_power_state(&incl_state->common_attributes,
3044 false);
3045 diff --git a/drivers/iio/pressure/hid-sensor-press.c b/drivers/iio/pressure/hid-sensor-press.c
3046 index 4c437918f1d2..d7b1c00ceb4d 100644
3047 --- a/drivers/iio/pressure/hid-sensor-press.c
3048 +++ b/drivers/iio/pressure/hid-sensor-press.c
3049 @@ -77,6 +77,7 @@ static int press_read_raw(struct iio_dev *indio_dev,
3050 int report_id = -1;
3051 u32 address;
3052 int ret_type;
3053 + s32 min;
3054
3055 *val = 0;
3056 *val2 = 0;
3057 @@ -85,8 +86,8 @@ static int press_read_raw(struct iio_dev *indio_dev,
3058 switch (chan->scan_index) {
3059 case CHANNEL_SCAN_INDEX_PRESSURE:
3060 report_id = press_state->press_attr.report_id;
3061 - address =
3062 - HID_USAGE_SENSOR_ATMOSPHERIC_PRESSURE;
3063 + min = press_state->press_attr.logical_minimum;
3064 + address = HID_USAGE_SENSOR_ATMOSPHERIC_PRESSURE;
3065 break;
3066 default:
3067 report_id = -1;
3068 @@ -99,7 +100,8 @@ static int press_read_raw(struct iio_dev *indio_dev,
3069 press_state->common_attributes.hsdev,
3070 HID_USAGE_SENSOR_PRESSURE, address,
3071 report_id,
3072 - SENSOR_HUB_SYNC);
3073 + SENSOR_HUB_SYNC,
3074 + min < 0);
3075 hid_sensor_power_state(&press_state->common_attributes,
3076 false);
3077 } else {
3078 diff --git a/drivers/iio/temperature/hid-sensor-temperature.c b/drivers/iio/temperature/hid-sensor-temperature.c
3079 index beaf6fd3e337..b592fc4f007e 100644
3080 --- a/drivers/iio/temperature/hid-sensor-temperature.c
3081 +++ b/drivers/iio/temperature/hid-sensor-temperature.c
3082 @@ -76,7 +76,8 @@ static int temperature_read_raw(struct iio_dev *indio_dev,
3083 HID_USAGE_SENSOR_TEMPERATURE,
3084 HID_USAGE_SENSOR_DATA_ENVIRONMENTAL_TEMPERATURE,
3085 temp_st->temperature_attr.report_id,
3086 - SENSOR_HUB_SYNC);
3087 + SENSOR_HUB_SYNC,
3088 + temp_st->temperature_attr.logical_minimum < 0);
3089 hid_sensor_power_state(
3090 &temp_st->common_attributes,
3091 false);
3092 diff --git a/drivers/misc/mic/scif/scif_rma.c b/drivers/misc/mic/scif/scif_rma.c
3093 index c824329f7012..0e4193cb08cf 100644
3094 --- a/drivers/misc/mic/scif/scif_rma.c
3095 +++ b/drivers/misc/mic/scif/scif_rma.c
3096 @@ -416,7 +416,7 @@ static int scif_create_remote_lookup(struct scif_dev *remote_dev,
3097 if (err)
3098 goto error_window;
3099 err = scif_map_page(&window->num_pages_lookup.lookup[j],
3100 - vmalloc_dma_phys ?
3101 + vmalloc_num_pages ?
3102 vmalloc_to_page(&window->num_pages[i]) :
3103 virt_to_page(&window->num_pages[i]),
3104 remote_dev);
3105 diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
3106 index 768f584f8392..88f8a8fa93cd 100644
3107 --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
3108 +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
3109 @@ -1784,6 +1784,7 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog)
3110 bool if_up = netif_running(nic->netdev);
3111 struct bpf_prog *old_prog;
3112 bool bpf_attached = false;
3113 + int ret = 0;
3114
3115 /* For now just support only the usual MTU sized frames */
3116 if (prog && (dev->mtu > 1500)) {
3117 @@ -1817,8 +1818,12 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog)
3118 if (nic->xdp_prog) {
3119 /* Attach BPF program */
3120 nic->xdp_prog = bpf_prog_add(nic->xdp_prog, nic->rx_queues - 1);
3121 - if (!IS_ERR(nic->xdp_prog))
3122 + if (!IS_ERR(nic->xdp_prog)) {
3123 bpf_attached = true;
3124 + } else {
3125 + ret = PTR_ERR(nic->xdp_prog);
3126 + nic->xdp_prog = NULL;
3127 + }
3128 }
3129
3130 /* Calculate Tx queues needed for XDP and network stack */
3131 @@ -1830,7 +1835,7 @@ static int nicvf_xdp_setup(struct nicvf *nic, struct bpf_prog *prog)
3132 netif_trans_update(nic->netdev);
3133 }
3134
3135 - return 0;
3136 + return ret;
3137 }
3138
3139 static int nicvf_xdp(struct net_device *netdev, struct netdev_bpf *xdp)
3140 diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
3141 index 187a249ff2d1..fcaf18fa3904 100644
3142 --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
3143 +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
3144 @@ -585,10 +585,12 @@ static void nicvf_free_snd_queue(struct nicvf *nic, struct snd_queue *sq)
3145 if (!sq->dmem.base)
3146 return;
3147
3148 - if (sq->tso_hdrs)
3149 + if (sq->tso_hdrs) {
3150 dma_free_coherent(&nic->pdev->dev,
3151 sq->dmem.q_len * TSO_HEADER_SIZE,
3152 sq->tso_hdrs, sq->tso_hdrs_phys);
3153 + sq->tso_hdrs = NULL;
3154 + }
3155
3156 /* Free pending skbs in the queue */
3157 smp_rmb();
3158 diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c
3159 index 1c9ad3630c77..dfd1ad0b1cb9 100644
3160 --- a/drivers/net/ethernet/cortina/gemini.c
3161 +++ b/drivers/net/ethernet/cortina/gemini.c
3162 @@ -661,7 +661,7 @@ static void gmac_clean_txq(struct net_device *netdev, struct gmac_txq *txq,
3163
3164 u64_stats_update_begin(&port->tx_stats_syncp);
3165 port->tx_frag_stats[nfrags]++;
3166 - u64_stats_update_end(&port->ir_stats_syncp);
3167 + u64_stats_update_end(&port->tx_stats_syncp);
3168 }
3169 }
3170
3171 diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
3172 index 001b5f714c1b..aaedf1072460 100644
3173 --- a/drivers/net/ethernet/microchip/lan743x_main.c
3174 +++ b/drivers/net/ethernet/microchip/lan743x_main.c
3175 @@ -1675,7 +1675,7 @@ static int lan743x_tx_napi_poll(struct napi_struct *napi, int weight)
3176 netif_wake_queue(adapter->netdev);
3177 }
3178
3179 - if (!napi_complete_done(napi, weight))
3180 + if (!napi_complete(napi))
3181 goto done;
3182
3183 /* enable isr */
3184 @@ -1684,7 +1684,7 @@ static int lan743x_tx_napi_poll(struct napi_struct *napi, int weight)
3185 lan743x_csr_read(adapter, INT_STS);
3186
3187 done:
3188 - return weight;
3189 + return 0;
3190 }
3191
3192 static void lan743x_tx_ring_cleanup(struct lan743x_tx *tx)
3193 @@ -1873,9 +1873,9 @@ static int lan743x_tx_open(struct lan743x_tx *tx)
3194 tx->vector_flags = lan743x_intr_get_vector_flags(adapter,
3195 INT_BIT_DMA_TX_
3196 (tx->channel_number));
3197 - netif_napi_add(adapter->netdev,
3198 - &tx->napi, lan743x_tx_napi_poll,
3199 - tx->ring_size - 1);
3200 + netif_tx_napi_add(adapter->netdev,
3201 + &tx->napi, lan743x_tx_napi_poll,
3202 + tx->ring_size - 1);
3203 napi_enable(&tx->napi);
3204
3205 data = 0;
3206 @@ -3020,6 +3020,7 @@ static const struct dev_pm_ops lan743x_pm_ops = {
3207
3208 static const struct pci_device_id lan743x_pcidev_tbl[] = {
3209 { PCI_DEVICE(PCI_VENDOR_ID_SMSC, PCI_DEVICE_ID_SMSC_LAN7430) },
3210 + { PCI_DEVICE(PCI_VENDOR_ID_SMSC, PCI_DEVICE_ID_SMSC_LAN7431) },
3211 { 0, }
3212 };
3213
3214 diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h
3215 index 0e82b6368798..2d6eea18973e 100644
3216 --- a/drivers/net/ethernet/microchip/lan743x_main.h
3217 +++ b/drivers/net/ethernet/microchip/lan743x_main.h
3218 @@ -548,6 +548,7 @@ struct lan743x_adapter;
3219 /* SMSC acquired EFAR late 1990's, MCHP acquired SMSC 2012 */
3220 #define PCI_VENDOR_ID_SMSC PCI_VENDOR_ID_EFAR
3221 #define PCI_DEVICE_ID_SMSC_LAN7430 (0x7430)
3222 +#define PCI_DEVICE_ID_SMSC_LAN7431 (0x7431)
3223
3224 #define PCI_CONFIG_LENGTH (0x1000)
3225
3226 diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
3227 index 19ab8a7d1e48..733e35b7c4bb 100644
3228 --- a/drivers/net/phy/phy_device.c
3229 +++ b/drivers/net/phy/phy_device.c
3230 @@ -1930,6 +1930,14 @@ int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
3231 new_driver->mdiodrv.driver.remove = phy_remove;
3232 new_driver->mdiodrv.driver.owner = owner;
3233
3234 + /* The following works around an issue where the PHY driver doesn't bind
3235 + * to the device, resulting in the genphy driver being used instead of
3236 + * the dedicated driver. The root cause of the issue isn't known yet
3237 + * and seems to be in the base driver core. Once this is fixed we may
3238 + * remove this workaround.
3239 + */
3240 + new_driver->mdiodrv.driver.probe_type = PROBE_FORCE_SYNCHRONOUS;
3241 +
3242 retval = driver_register(&new_driver->mdiodrv.driver);
3243 if (retval) {
3244 pr_err("%s: Error %d in registering driver\n",
3245 diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
3246 index e9f101c9bae2..bfbb39f93554 100644
3247 --- a/drivers/net/rionet.c
3248 +++ b/drivers/net/rionet.c
3249 @@ -216,9 +216,9 @@ static int rionet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
3250 * it just report sending a packet to the target
3251 * (without actual packet transfer).
3252 */
3253 - dev_kfree_skb_any(skb);
3254 ndev->stats.tx_packets++;
3255 ndev->stats.tx_bytes += skb->len;
3256 + dev_kfree_skb_any(skb);
3257 }
3258 }
3259
3260 diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
3261 index 7275761a1177..3d8a70d3ea9b 100644
3262 --- a/drivers/net/usb/ipheth.c
3263 +++ b/drivers/net/usb/ipheth.c
3264 @@ -140,7 +140,6 @@ struct ipheth_device {
3265 struct usb_device *udev;
3266 struct usb_interface *intf;
3267 struct net_device *net;
3268 - struct sk_buff *tx_skb;
3269 struct urb *tx_urb;
3270 struct urb *rx_urb;
3271 unsigned char *tx_buf;
3272 @@ -230,6 +229,7 @@ static void ipheth_rcvbulk_callback(struct urb *urb)
3273 case -ENOENT:
3274 case -ECONNRESET:
3275 case -ESHUTDOWN:
3276 + case -EPROTO:
3277 return;
3278 case 0:
3279 break;
3280 @@ -281,7 +281,6 @@ static void ipheth_sndbulk_callback(struct urb *urb)
3281 dev_err(&dev->intf->dev, "%s: urb status: %d\n",
3282 __func__, status);
3283
3284 - dev_kfree_skb_irq(dev->tx_skb);
3285 if (status == 0)
3286 netif_wake_queue(dev->net);
3287 else
3288 @@ -423,7 +422,7 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
3289 if (skb->len > IPHETH_BUF_SIZE) {
3290 WARN(1, "%s: skb too large: %d bytes\n", __func__, skb->len);
3291 dev->net->stats.tx_dropped++;
3292 - dev_kfree_skb_irq(skb);
3293 + dev_kfree_skb_any(skb);
3294 return NETDEV_TX_OK;
3295 }
3296
3297 @@ -443,12 +442,11 @@ static int ipheth_tx(struct sk_buff *skb, struct net_device *net)
3298 dev_err(&dev->intf->dev, "%s: usb_submit_urb: %d\n",
3299 __func__, retval);
3300 dev->net->stats.tx_errors++;
3301 - dev_kfree_skb_irq(skb);
3302 + dev_kfree_skb_any(skb);
3303 } else {
3304 - dev->tx_skb = skb;
3305 -
3306 dev->net->stats.tx_packets++;
3307 dev->net->stats.tx_bytes += skb->len;
3308 + dev_consume_skb_any(skb);
3309 netif_stop_queue(net);
3310 }
3311
3312 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
3313 index ddfa3f24204c..c2ca6cd3fbe0 100644
3314 --- a/drivers/net/virtio_net.c
3315 +++ b/drivers/net/virtio_net.c
3316 @@ -70,7 +70,8 @@ static const unsigned long guest_offloads[] = {
3317 VIRTIO_NET_F_GUEST_TSO4,
3318 VIRTIO_NET_F_GUEST_TSO6,
3319 VIRTIO_NET_F_GUEST_ECN,
3320 - VIRTIO_NET_F_GUEST_UFO
3321 + VIRTIO_NET_F_GUEST_UFO,
3322 + VIRTIO_NET_F_GUEST_CSUM
3323 };
3324
3325 struct virtnet_stat_desc {
3326 @@ -2285,9 +2286,6 @@ static int virtnet_clear_guest_offloads(struct virtnet_info *vi)
3327 if (!vi->guest_offloads)
3328 return 0;
3329
3330 - if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))
3331 - offloads = 1ULL << VIRTIO_NET_F_GUEST_CSUM;
3332 -
3333 return virtnet_set_guest_offloads(vi, offloads);
3334 }
3335
3336 @@ -2297,8 +2295,6 @@ static int virtnet_restore_guest_offloads(struct virtnet_info *vi)
3337
3338 if (!vi->guest_offloads)
3339 return 0;
3340 - if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))
3341 - offloads |= 1ULL << VIRTIO_NET_F_GUEST_CSUM;
3342
3343 return virtnet_set_guest_offloads(vi, offloads);
3344 }
3345 @@ -2316,8 +2312,9 @@ static int virtnet_xdp_set(struct net_device *dev, struct bpf_prog *prog,
3346 && (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO4) ||
3347 virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_TSO6) ||
3348 virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_ECN) ||
3349 - virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_UFO))) {
3350 - NL_SET_ERR_MSG_MOD(extack, "Can't set XDP while host is implementing LRO, disable LRO first");
3351 + virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_UFO) ||
3352 + virtio_has_feature(vi->vdev, VIRTIO_NET_F_GUEST_CSUM))) {
3353 + NL_SET_ERR_MSG_MOD(extack, "Can't set XDP while host is implementing LRO/CSUM, disable LRO/CSUM first");
3354 return -EOPNOTSUPP;
3355 }
3356
3357 diff --git a/drivers/pci/controller/dwc/pci-layerscape.c b/drivers/pci/controller/dwc/pci-layerscape.c
3358 index 3724d3ef7008..7aa9a82b7ebd 100644
3359 --- a/drivers/pci/controller/dwc/pci-layerscape.c
3360 +++ b/drivers/pci/controller/dwc/pci-layerscape.c
3361 @@ -88,7 +88,7 @@ static void ls_pcie_disable_outbound_atus(struct ls_pcie *pcie)
3362 int i;
3363
3364 for (i = 0; i < PCIE_IATU_NUM; i++)
3365 - dw_pcie_disable_atu(pcie->pci, DW_PCIE_REGION_OUTBOUND, i);
3366 + dw_pcie_disable_atu(pcie->pci, i, DW_PCIE_REGION_OUTBOUND);
3367 }
3368
3369 static int ls1021_pcie_link_up(struct dw_pcie *pci)
3370 diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
3371 index 1e7b02221eac..de8635af4cde 100644
3372 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c
3373 +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
3374 @@ -440,7 +440,6 @@ int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
3375 tbl_offset = dw_pcie_readl_dbi(pci, reg);
3376 bir = (tbl_offset & PCI_MSIX_TABLE_BIR);
3377 tbl_offset &= PCI_MSIX_TABLE_OFFSET;
3378 - tbl_offset >>= 3;
3379
3380 reg = PCI_BASE_ADDRESS_0 + (4 * bir);
3381 bar_addr_upper = 0;
3382 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
3383 index 51b6c81671c1..afc4680c584f 100644
3384 --- a/drivers/pci/pci.c
3385 +++ b/drivers/pci/pci.c
3386 @@ -5473,9 +5473,13 @@ enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)
3387 u32 lnkcap2, lnkcap;
3388
3389 /*
3390 - * PCIe r4.0 sec 7.5.3.18 recommends using the Supported Link
3391 - * Speeds Vector in Link Capabilities 2 when supported, falling
3392 - * back to Max Link Speed in Link Capabilities otherwise.
3393 + * Link Capabilities 2 was added in PCIe r3.0, sec 7.8.18. The
3394 + * implementation note there recommends using the Supported Link
3395 + * Speeds Vector in Link Capabilities 2 when supported.
3396 + *
3397 + * Without Link Capabilities 2, i.e., prior to PCIe r3.0, software
3398 + * should use the Supported Link Speeds field in Link Capabilities,
3399 + * where only 2.5 GT/s and 5.0 GT/s speeds were defined.
3400 */
3401 pcie_capability_read_dword(dev, PCI_EXP_LNKCAP2, &lnkcap2);
3402 if (lnkcap2) { /* PCIe r3.0-compliant */
3403 @@ -5491,16 +5495,10 @@ enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)
3404 }
3405
3406 pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &lnkcap);
3407 - if (lnkcap) {
3408 - if (lnkcap & PCI_EXP_LNKCAP_SLS_16_0GB)
3409 - return PCIE_SPEED_16_0GT;
3410 - else if (lnkcap & PCI_EXP_LNKCAP_SLS_8_0GB)
3411 - return PCIE_SPEED_8_0GT;
3412 - else if (lnkcap & PCI_EXP_LNKCAP_SLS_5_0GB)
3413 - return PCIE_SPEED_5_0GT;
3414 - else if (lnkcap & PCI_EXP_LNKCAP_SLS_2_5GB)
3415 - return PCIE_SPEED_2_5GT;
3416 - }
3417 + if ((lnkcap & PCI_EXP_LNKCAP_SLS) == PCI_EXP_LNKCAP_SLS_5_0GB)
3418 + return PCIE_SPEED_5_0GT;
3419 + else if ((lnkcap & PCI_EXP_LNKCAP_SLS) == PCI_EXP_LNKCAP_SLS_2_5GB)
3420 + return PCIE_SPEED_2_5GT;
3421
3422 return PCI_SPEED_UNKNOWN;
3423 }
3424 diff --git a/drivers/rtc/rtc-hid-sensor-time.c b/drivers/rtc/rtc-hid-sensor-time.c
3425 index 2751dba850c6..3e1abb455472 100644
3426 --- a/drivers/rtc/rtc-hid-sensor-time.c
3427 +++ b/drivers/rtc/rtc-hid-sensor-time.c
3428 @@ -213,7 +213,7 @@ static int hid_rtc_read_time(struct device *dev, struct rtc_time *tm)
3429 /* get a report with all values through requesting one value */
3430 sensor_hub_input_attr_get_raw_value(time_state->common_attributes.hsdev,
3431 HID_USAGE_SENSOR_TIME, hid_time_addresses[0],
3432 - time_state->info[0].report_id, SENSOR_HUB_SYNC);
3433 + time_state->info[0].report_id, SENSOR_HUB_SYNC, false);
3434 /* wait for all values (event) */
3435 ret = wait_for_completion_killable_timeout(
3436 &time_state->comp_last_time, HZ*6);
3437 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
3438 index ffce6f39828a..b03515d43745 100644
3439 --- a/drivers/s390/net/qeth_core_main.c
3440 +++ b/drivers/s390/net/qeth_core_main.c
3441 @@ -4524,8 +4524,8 @@ static int qeth_snmp_command_cb(struct qeth_card *card,
3442 {
3443 struct qeth_ipa_cmd *cmd;
3444 struct qeth_arp_query_info *qinfo;
3445 - struct qeth_snmp_cmd *snmp;
3446 unsigned char *data;
3447 + void *snmp_data;
3448 __u16 data_len;
3449
3450 QETH_CARD_TEXT(card, 3, "snpcmdcb");
3451 @@ -4533,7 +4533,6 @@ static int qeth_snmp_command_cb(struct qeth_card *card,
3452 cmd = (struct qeth_ipa_cmd *) sdata;
3453 data = (unsigned char *)((char *)cmd - reply->offset);
3454 qinfo = (struct qeth_arp_query_info *) reply->param;
3455 - snmp = &cmd->data.setadapterparms.data.snmp;
3456
3457 if (cmd->hdr.return_code) {
3458 QETH_CARD_TEXT_(card, 4, "scer1%x", cmd->hdr.return_code);
3459 @@ -4546,10 +4545,15 @@ static int qeth_snmp_command_cb(struct qeth_card *card,
3460 return 0;
3461 }
3462 data_len = *((__u16 *)QETH_IPA_PDU_LEN_PDU1(data));
3463 - if (cmd->data.setadapterparms.hdr.seq_no == 1)
3464 - data_len -= (__u16)((char *)&snmp->data - (char *)cmd);
3465 - else
3466 - data_len -= (__u16)((char *)&snmp->request - (char *)cmd);
3467 + if (cmd->data.setadapterparms.hdr.seq_no == 1) {
3468 + snmp_data = &cmd->data.setadapterparms.data.snmp;
3469 + data_len -= offsetof(struct qeth_ipa_cmd,
3470 + data.setadapterparms.data.snmp);
3471 + } else {
3472 + snmp_data = &cmd->data.setadapterparms.data.snmp.request;
3473 + data_len -= offsetof(struct qeth_ipa_cmd,
3474 + data.setadapterparms.data.snmp.request);
3475 + }
3476
3477 /* check if there is enough room in userspace */
3478 if ((qinfo->udata_len - qinfo->udata_offset) < data_len) {
3479 @@ -4562,16 +4566,9 @@ static int qeth_snmp_command_cb(struct qeth_card *card,
3480 QETH_CARD_TEXT_(card, 4, "sseqn%i",
3481 cmd->data.setadapterparms.hdr.seq_no);
3482 /*copy entries to user buffer*/
3483 - if (cmd->data.setadapterparms.hdr.seq_no == 1) {
3484 - memcpy(qinfo->udata + qinfo->udata_offset,
3485 - (char *)snmp,
3486 - data_len + offsetof(struct qeth_snmp_cmd, data));
3487 - qinfo->udata_offset += offsetof(struct qeth_snmp_cmd, data);
3488 - } else {
3489 - memcpy(qinfo->udata + qinfo->udata_offset,
3490 - (char *)&snmp->request, data_len);
3491 - }
3492 + memcpy(qinfo->udata + qinfo->udata_offset, snmp_data, data_len);
3493 qinfo->udata_offset += data_len;
3494 +
3495 /* check if all replies received ... */
3496 QETH_CARD_TEXT_(card, 4, "srtot%i",
3497 cmd->data.setadapterparms.hdr.used_total);
3498 diff --git a/drivers/staging/most/core.c b/drivers/staging/most/core.c
3499 index f4c464625a67..52ad62722996 100644
3500 --- a/drivers/staging/most/core.c
3501 +++ b/drivers/staging/most/core.c
3502 @@ -351,7 +351,7 @@ static ssize_t set_datatype_show(struct device *dev,
3503
3504 for (i = 0; i < ARRAY_SIZE(ch_data_type); i++) {
3505 if (c->cfg.data_type & ch_data_type[i].most_ch_data_type)
3506 - return snprintf(buf, PAGE_SIZE, ch_data_type[i].name);
3507 + return snprintf(buf, PAGE_SIZE, "%s", ch_data_type[i].name);
3508 }
3509 return snprintf(buf, PAGE_SIZE, "unconfigured\n");
3510 }
3511 diff --git a/drivers/staging/mt7621-dma/mtk-hsdma.c b/drivers/staging/mt7621-dma/mtk-hsdma.c
3512 index df6ebf41bdea..5831f816c17b 100644
3513 --- a/drivers/staging/mt7621-dma/mtk-hsdma.c
3514 +++ b/drivers/staging/mt7621-dma/mtk-hsdma.c
3515 @@ -335,6 +335,8 @@ static int mtk_hsdma_start_transfer(struct mtk_hsdam_engine *hsdma,
3516 /* tx desc */
3517 src = sg->src_addr;
3518 for (i = 0; i < chan->desc->num_sgs; i++) {
3519 + tx_desc = &chan->tx_ring[chan->tx_idx];
3520 +
3521 if (len > HSDMA_MAX_PLEN)
3522 tlen = HSDMA_MAX_PLEN;
3523 else
3524 @@ -344,7 +346,6 @@ static int mtk_hsdma_start_transfer(struct mtk_hsdam_engine *hsdma,
3525 tx_desc->addr1 = src;
3526 tx_desc->flags |= HSDMA_DESC_PLEN1(tlen);
3527 } else {
3528 - tx_desc = &chan->tx_ring[chan->tx_idx];
3529 tx_desc->addr0 = src;
3530 tx_desc->flags = HSDMA_DESC_PLEN0(tlen);
3531
3532 diff --git a/drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c b/drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c
3533 index b8566ed898f1..aa98fbb17013 100644
3534 --- a/drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c
3535 +++ b/drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c
3536 @@ -82,7 +82,7 @@ static int rt2880_pinctrl_dt_node_to_map(struct pinctrl_dev *pctrldev,
3537 struct property *prop;
3538 const char *function_name, *group_name;
3539 int ret;
3540 - int ngroups;
3541 + int ngroups = 0;
3542 unsigned int reserved_maps = 0;
3543
3544 for_each_node_with_property(np_config, "group")
3545 diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
3546 index 85077947b9b8..85aba8a503cd 100644
3547 --- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
3548 +++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
3549 @@ -109,12 +109,12 @@ static void update_recvframe_phyinfo(union recv_frame *precvframe,
3550 rx_bssid = get_hdr_bssid(wlanhdr);
3551 pkt_info.bssid_match = ((!IsFrameTypeCtrl(wlanhdr)) &&
3552 !pattrib->icv_err && !pattrib->crc_err &&
3553 - !ether_addr_equal(rx_bssid, my_bssid));
3554 + ether_addr_equal(rx_bssid, my_bssid));
3555
3556 rx_ra = get_ra(wlanhdr);
3557 my_hwaddr = myid(&padapter->eeprompriv);
3558 pkt_info.to_self = pkt_info.bssid_match &&
3559 - !ether_addr_equal(rx_ra, my_hwaddr);
3560 + ether_addr_equal(rx_ra, my_hwaddr);
3561
3562
3563 pkt_info.is_beacon = pkt_info.bssid_match &&
3564 diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
3565 index af2234798fa8..db553f2e4c0b 100644
3566 --- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
3567 +++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
3568 @@ -1277,7 +1277,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy,
3569
3570 sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS);
3571 sinfo->tx_packets = psta->sta_stats.tx_pkts;
3572 -
3573 + sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
3574 }
3575
3576 /* for Ad-Hoc/AP mode */
3577 diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
3578 index bc05c69383b8..fe431302a030 100644
3579 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
3580 +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
3581 @@ -1787,6 +1787,7 @@ vchiq_compat_ioctl_await_completion(struct file *file,
3582 struct vchiq_await_completion32 args32;
3583 struct vchiq_completion_data32 completion32;
3584 unsigned int *msgbufcount32;
3585 + unsigned int msgbufcount_native;
3586 compat_uptr_t msgbuf32;
3587 void *msgbuf;
3588 void **msgbufptr;
3589 @@ -1898,7 +1899,11 @@ vchiq_compat_ioctl_await_completion(struct file *file,
3590 sizeof(completion32)))
3591 return -EFAULT;
3592
3593 - args32.msgbufcount--;
3594 + if (get_user(msgbufcount_native, &args->msgbufcount))
3595 + return -EFAULT;
3596 +
3597 + if (!msgbufcount_native)
3598 + args32.msgbufcount--;
3599
3600 msgbufcount32 =
3601 &((struct vchiq_await_completion32 __user *)arg)->msgbufcount;
3602 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
3603 index f9ff03e6af93..0690fcff0ea2 100644
3604 --- a/drivers/usb/core/quirks.c
3605 +++ b/drivers/usb/core/quirks.c
3606 @@ -209,6 +209,9 @@ static const struct usb_device_id usb_quirk_list[] = {
3607 /* Microsoft LifeCam-VX700 v2.0 */
3608 { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
3609
3610 + /* Cherry Stream G230 2.0 (G85-231) and 3.0 (G85-232) */
3611 + { USB_DEVICE(0x046a, 0x0023), .driver_info = USB_QUIRK_RESET_RESUME },
3612 +
3613 /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
3614 { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
3615 { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
3616 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
3617 index 2de1a3971a26..558949b826d0 100644
3618 --- a/drivers/usb/dwc3/gadget.c
3619 +++ b/drivers/usb/dwc3/gadget.c
3620 @@ -1461,9 +1461,6 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
3621 unsigned transfer_in_flight;
3622 unsigned started;
3623
3624 - if (dep->flags & DWC3_EP_STALL)
3625 - return 0;
3626 -
3627 if (dep->number > 1)
3628 trb = dwc3_ep_prev_trb(dep, dep->trb_enqueue);
3629 else
3630 @@ -1485,8 +1482,6 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol)
3631 else
3632 dep->flags |= DWC3_EP_STALL;
3633 } else {
3634 - if (!(dep->flags & DWC3_EP_STALL))
3635 - return 0;
3636
3637 ret = dwc3_send_clear_stall_ep_cmd(dep);
3638 if (ret)
3639 diff --git a/drivers/usb/storage/unusual_realtek.h b/drivers/usb/storage/unusual_realtek.h
3640 index d17cd95b55bb..6b2140f966ef 100644
3641 --- a/drivers/usb/storage/unusual_realtek.h
3642 +++ b/drivers/usb/storage/unusual_realtek.h
3643 @@ -27,4 +27,14 @@ UNUSUAL_DEV(0x0bda, 0x0159, 0x0000, 0x9999,
3644 "USB Card Reader",
3645 USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
3646
3647 +UNUSUAL_DEV(0x0bda, 0x0177, 0x0000, 0x9999,
3648 + "Realtek",
3649 + "USB Card Reader",
3650 + USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
3651 +
3652 +UNUSUAL_DEV(0x0bda, 0x0184, 0x0000, 0x9999,
3653 + "Realtek",
3654 + "USB Card Reader",
3655 + USB_SC_DEVICE, USB_PR_DEVICE, init_realtek_cr, 0),
3656 +
3657 #endif /* defined(CONFIG_USB_STORAGE_REALTEK) || ... */
3658 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
3659 index dc52ce5e495f..834a3f5ef642 100644
3660 --- a/fs/btrfs/disk-io.c
3661 +++ b/fs/btrfs/disk-io.c
3662 @@ -477,9 +477,9 @@ static int btree_read_extent_buffer_pages(struct btrfs_fs_info *fs_info,
3663 int mirror_num = 0;
3664 int failed_mirror = 0;
3665
3666 - clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
3667 io_tree = &BTRFS_I(fs_info->btree_inode)->io_tree;
3668 while (1) {
3669 + clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
3670 ret = read_extent_buffer_pages(io_tree, eb, WAIT_COMPLETE,
3671 mirror_num);
3672 if (!ret) {
3673 @@ -493,15 +493,6 @@ static int btree_read_extent_buffer_pages(struct btrfs_fs_info *fs_info,
3674 break;
3675 }
3676
3677 - /*
3678 - * This buffer's crc is fine, but its contents are corrupted, so
3679 - * there is no reason to read the other copies, they won't be
3680 - * any less wrong.
3681 - */
3682 - if (test_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags) ||
3683 - ret == -EUCLEAN)
3684 - break;
3685 -
3686 num_copies = btrfs_num_copies(fs_info,
3687 eb->start, eb->len);
3688 if (num_copies == 1)
3689 diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
3690 index 7d81cc415264..ca4902c66dc4 100644
3691 --- a/fs/btrfs/file.c
3692 +++ b/fs/btrfs/file.c
3693 @@ -2088,6 +2088,30 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
3694
3695 atomic_inc(&root->log_batch);
3696
3697 + /*
3698 + * Before we acquired the inode's lock, someone may have dirtied more
3699 + * pages in the target range. We need to make sure that writeback for
3700 + * any such pages does not start while we are logging the inode, because
3701 + * if it does, any of the following might happen when we are not doing a
3702 + * full inode sync:
3703 + *
3704 + * 1) We log an extent after its writeback finishes but before its
3705 + * checksums are added to the csum tree, leading to -EIO errors
3706 + * when attempting to read the extent after a log replay.
3707 + *
3708 + * 2) We can end up logging an extent before its writeback finishes.
3709 + * Therefore after the log replay we will have a file extent item
3710 + * pointing to an unwritten extent (and no data checksums as well).
3711 + *
3712 + * So trigger writeback for any eventual new dirty pages and then we
3713 + * wait for all ordered extents to complete below.
3714 + */
3715 + ret = start_ordered_ops(inode, start, end);
3716 + if (ret) {
3717 + inode_unlock(inode);
3718 + goto out;
3719 + }
3720 +
3721 /*
3722 * We have to do this here to avoid the priority inversion of waiting on
3723 * IO of a lower priority task while holding a transaciton open.
3724 diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
3725 index b070401406be..ff434663d65b 100644
3726 --- a/fs/btrfs/qgroup.c
3727 +++ b/fs/btrfs/qgroup.c
3728 @@ -2244,7 +2244,7 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, u64 srcid,
3729 int i;
3730 u64 *i_qgroups;
3731 struct btrfs_fs_info *fs_info = trans->fs_info;
3732 - struct btrfs_root *quota_root = fs_info->quota_root;
3733 + struct btrfs_root *quota_root;
3734 struct btrfs_qgroup *srcgroup;
3735 struct btrfs_qgroup *dstgroup;
3736 u32 level_size = 0;
3737 @@ -2254,6 +2254,7 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, u64 srcid,
3738 if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags))
3739 goto out;
3740
3741 + quota_root = fs_info->quota_root;
3742 if (!quota_root) {
3743 ret = -EINVAL;
3744 goto out;
3745 diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
3746 index 60bf8dfe7df4..0526b6c473c7 100644
3747 --- a/fs/btrfs/relocation.c
3748 +++ b/fs/btrfs/relocation.c
3749 @@ -3963,6 +3963,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
3750 restart:
3751 if (update_backref_cache(trans, &rc->backref_cache)) {
3752 btrfs_end_transaction(trans);
3753 + trans = NULL;
3754 continue;
3755 }
3756
3757 diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
3758 index 6601c9aa5e35..8ad145820ea8 100644
3759 --- a/fs/btrfs/super.c
3760 +++ b/fs/btrfs/super.c
3761 @@ -2235,6 +2235,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd,
3762 vol = memdup_user((void __user *)arg, sizeof(*vol));
3763 if (IS_ERR(vol))
3764 return PTR_ERR(vol);
3765 + vol->name[BTRFS_PATH_NAME_MAX] = '\0';
3766
3767 switch (cmd) {
3768 case BTRFS_IOC_SCAN_DEV:
3769 diff --git a/fs/direct-io.c b/fs/direct-io.c
3770 index 093fb54cd316..199146036093 100644
3771 --- a/fs/direct-io.c
3772 +++ b/fs/direct-io.c
3773 @@ -325,8 +325,8 @@ static ssize_t dio_complete(struct dio *dio, ssize_t ret, unsigned int flags)
3774 */
3775 dio->iocb->ki_pos += transferred;
3776
3777 - if (dio->op == REQ_OP_WRITE)
3778 - ret = generic_write_sync(dio->iocb, transferred);
3779 + if (ret > 0 && dio->op == REQ_OP_WRITE)
3780 + ret = generic_write_sync(dio->iocb, ret);
3781 dio->iocb->ki_complete(dio->iocb, ret, 0);
3782 }
3783
3784 diff --git a/fs/ext2/super.c b/fs/ext2/super.c
3785 index 73bd58fa13de..0c38e31ec938 100644
3786 --- a/fs/ext2/super.c
3787 +++ b/fs/ext2/super.c
3788 @@ -895,6 +895,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
3789 if (sb->s_magic != EXT2_SUPER_MAGIC)
3790 goto cantfind_ext2;
3791
3792 + opts.s_mount_opt = 0;
3793 /* Set defaults before we parse the mount options */
3794 def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
3795 if (def_mount_opts & EXT2_DEFM_DEBUG)
3796 diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
3797 index 62d9a659a8ff..dd8f10db82e9 100644
3798 --- a/fs/ext2/xattr.c
3799 +++ b/fs/ext2/xattr.c
3800 @@ -612,9 +612,9 @@ skip_replace:
3801 }
3802
3803 cleanup:
3804 - brelse(bh);
3805 if (!(bh && header == HDR(bh)))
3806 kfree(header);
3807 + brelse(bh);
3808 up_write(&EXT2_I(inode)->xattr_sem);
3809
3810 return error;
3811 diff --git a/fs/udf/super.c b/fs/udf/super.c
3812 index b997e3116e37..c495db7165ae 100644
3813 --- a/fs/udf/super.c
3814 +++ b/fs/udf/super.c
3815 @@ -831,16 +831,20 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
3816
3817
3818 ret = udf_dstrCS0toChar(sb, outstr, 31, pvoldesc->volIdent, 32);
3819 - if (ret < 0)
3820 - goto out_bh;
3821 -
3822 - strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret);
3823 + if (ret < 0) {
3824 + strcpy(UDF_SB(sb)->s_volume_ident, "InvalidName");
3825 + pr_warn("incorrect volume identification, setting to "
3826 + "'InvalidName'\n");
3827 + } else {
3828 + strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret);
3829 + }
3830 udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident);
3831
3832 ret = udf_dstrCS0toChar(sb, outstr, 127, pvoldesc->volSetIdent, 128);
3833 - if (ret < 0)
3834 + if (ret < 0) {
3835 + ret = 0;
3836 goto out_bh;
3837 -
3838 + }
3839 outstr[ret] = 0;
3840 udf_debug("volSetIdent[] = '%s'\n", outstr);
3841
3842 diff --git a/fs/udf/unicode.c b/fs/udf/unicode.c
3843 index 45234791fec2..5fcfa96463eb 100644
3844 --- a/fs/udf/unicode.c
3845 +++ b/fs/udf/unicode.c
3846 @@ -351,6 +351,11 @@ try_again:
3847 return u_len;
3848 }
3849
3850 +/*
3851 + * Convert CS0 dstring to output charset. Warning: This function may truncate
3852 + * input string if it is too long as it is used for informational strings only
3853 + * and it is better to truncate the string than to refuse mounting a media.
3854 + */
3855 int udf_dstrCS0toChar(struct super_block *sb, uint8_t *utf_o, int o_len,
3856 const uint8_t *ocu_i, int i_len)
3857 {
3858 @@ -359,9 +364,12 @@ int udf_dstrCS0toChar(struct super_block *sb, uint8_t *utf_o, int o_len,
3859 if (i_len > 0) {
3860 s_len = ocu_i[i_len - 1];
3861 if (s_len >= i_len) {
3862 - pr_err("incorrect dstring lengths (%d/%d)\n",
3863 - s_len, i_len);
3864 - return -EINVAL;
3865 + pr_warn("incorrect dstring lengths (%d/%d),"
3866 + " truncating\n", s_len, i_len);
3867 + s_len = i_len - 1;
3868 + /* 2-byte encoding? Need to round properly... */
3869 + if (ocu_i[0] == 16)
3870 + s_len -= (s_len - 1) & 2;
3871 }
3872 }
3873
3874 diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
3875 index 356d2b8568c1..cd58939dc977 100644
3876 --- a/fs/userfaultfd.c
3877 +++ b/fs/userfaultfd.c
3878 @@ -1361,6 +1361,19 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
3879 ret = -EINVAL;
3880 if (!vma_can_userfault(cur))
3881 goto out_unlock;
3882 +
3883 + /*
3884 + * UFFDIO_COPY will fill file holes even without
3885 + * PROT_WRITE. This check enforces that if this is a
3886 + * MAP_SHARED, the process has write permission to the backing
3887 + * file. If VM_MAYWRITE is set it also enforces that on a
3888 + * MAP_SHARED vma: there is no F_WRITE_SEAL and no further
3889 + * F_WRITE_SEAL can be taken until the vma is destroyed.
3890 + */
3891 + ret = -EPERM;
3892 + if (unlikely(!(cur->vm_flags & VM_MAYWRITE)))
3893 + goto out_unlock;
3894 +
3895 /*
3896 * If this vma contains ending address, and huge pages
3897 * check alignment.
3898 @@ -1406,6 +1419,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx,
3899 BUG_ON(!vma_can_userfault(vma));
3900 BUG_ON(vma->vm_userfaultfd_ctx.ctx &&
3901 vma->vm_userfaultfd_ctx.ctx != ctx);
3902 + WARN_ON(!(vma->vm_flags & VM_MAYWRITE));
3903
3904 /*
3905 * Nothing to do: this vma is already registered into this
3906 @@ -1552,6 +1566,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx,
3907 cond_resched();
3908
3909 BUG_ON(!vma_can_userfault(vma));
3910 + WARN_ON(!(vma->vm_flags & VM_MAYWRITE));
3911
3912 /*
3913 * Nothing to do: this vma is already registered into this
3914 diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
3915 index a397907e8d72..dd16e8218db3 100644
3916 --- a/include/linux/ftrace.h
3917 +++ b/include/linux/ftrace.h
3918 @@ -777,8 +777,8 @@ struct ftrace_ret_stack {
3919 extern void return_to_handler(void);
3920
3921 extern int
3922 -ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
3923 - unsigned long frame_pointer, unsigned long *retp);
3924 +function_graph_enter(unsigned long ret, unsigned long func,
3925 + unsigned long frame_pointer, unsigned long *retp);
3926
3927 unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
3928 unsigned long ret, unsigned long *retp);
3929 diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
3930 index 331dc377c275..dc12f5c4b076 100644
3931 --- a/include/linux/hid-sensor-hub.h
3932 +++ b/include/linux/hid-sensor-hub.h
3933 @@ -177,6 +177,7 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
3934 * @attr_usage_id: Attribute usage id as per spec
3935 * @report_id: Report id to look for
3936 * @flag: Synchronous or asynchronous read
3937 +* @is_signed: If true then fields < 32 bits will be sign-extended
3938 *
3939 * Issues a synchronous or asynchronous read request for an input attribute.
3940 * Returns data upto 32 bits.
3941 @@ -190,7 +191,8 @@ enum sensor_hub_read_flags {
3942 int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev,
3943 u32 usage_id,
3944 u32 attr_usage_id, u32 report_id,
3945 - enum sensor_hub_read_flags flag
3946 + enum sensor_hub_read_flags flag,
3947 + bool is_signed
3948 );
3949
3950 /**
3951 diff --git a/include/linux/net_dim.h b/include/linux/net_dim.h
3952 index c79e859408e6..fd458389f7d1 100644
3953 --- a/include/linux/net_dim.h
3954 +++ b/include/linux/net_dim.h
3955 @@ -406,6 +406,8 @@ static inline void net_dim(struct net_dim *dim,
3956 }
3957 /* fall through */
3958 case NET_DIM_START_MEASURE:
3959 + net_dim_sample(end_sample.event_ctr, end_sample.pkt_ctr, end_sample.byte_ctr,
3960 + &dim->start_sample);
3961 dim->state = NET_DIM_MEASURE_IN_PROGRESS;
3962 break;
3963 case NET_DIM_APPLY_NEW_PROFILE:
3964 diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
3965 index 4f36431c380b..561feb560619 100644
3966 --- a/include/linux/ptrace.h
3967 +++ b/include/linux/ptrace.h
3968 @@ -62,8 +62,8 @@ extern void exit_ptrace(struct task_struct *tracer, struct list_head *dead);
3969 #define PTRACE_MODE_READ 0x01
3970 #define PTRACE_MODE_ATTACH 0x02
3971 #define PTRACE_MODE_NOAUDIT 0x04
3972 -#define PTRACE_MODE_FSCREDS 0x08
3973 -#define PTRACE_MODE_REALCREDS 0x10
3974 +#define PTRACE_MODE_FSCREDS 0x08
3975 +#define PTRACE_MODE_REALCREDS 0x10
3976
3977 /* shorthands for READ/ATTACH and FSCREDS/REALCREDS combinations */
3978 #define PTRACE_MODE_READ_FSCREDS (PTRACE_MODE_READ | PTRACE_MODE_FSCREDS)
3979 diff --git a/include/linux/sched.h b/include/linux/sched.h
3980 index 977cb57d7bc9..4abb5bd74b04 100644
3981 --- a/include/linux/sched.h
3982 +++ b/include/linux/sched.h
3983 @@ -1108,6 +1108,7 @@ struct task_struct {
3984 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
3985 /* Index of current stored address in ret_stack: */
3986 int curr_ret_stack;
3987 + int curr_ret_depth;
3988
3989 /* Stack of return addresses for return function tracing: */
3990 struct ftrace_ret_stack *ret_stack;
3991 @@ -1439,6 +1440,8 @@ static inline bool is_percpu_thread(void)
3992 #define PFA_SPREAD_SLAB 2 /* Spread some slab caches over cpuset */
3993 #define PFA_SPEC_SSB_DISABLE 3 /* Speculative Store Bypass disabled */
3994 #define PFA_SPEC_SSB_FORCE_DISABLE 4 /* Speculative Store Bypass force disabled*/
3995 +#define PFA_SPEC_IB_DISABLE 5 /* Indirect branch speculation restricted */
3996 +#define PFA_SPEC_IB_FORCE_DISABLE 6 /* Indirect branch speculation permanently restricted */
3997
3998 #define TASK_PFA_TEST(name, func) \
3999 static inline bool task_##func(struct task_struct *p) \
4000 @@ -1470,6 +1473,13 @@ TASK_PFA_CLEAR(SPEC_SSB_DISABLE, spec_ssb_disable)
4001 TASK_PFA_TEST(SPEC_SSB_FORCE_DISABLE, spec_ssb_force_disable)
4002 TASK_PFA_SET(SPEC_SSB_FORCE_DISABLE, spec_ssb_force_disable)
4003
4004 +TASK_PFA_TEST(SPEC_IB_DISABLE, spec_ib_disable)
4005 +TASK_PFA_SET(SPEC_IB_DISABLE, spec_ib_disable)
4006 +TASK_PFA_CLEAR(SPEC_IB_DISABLE, spec_ib_disable)
4007 +
4008 +TASK_PFA_TEST(SPEC_IB_FORCE_DISABLE, spec_ib_force_disable)
4009 +TASK_PFA_SET(SPEC_IB_FORCE_DISABLE, spec_ib_force_disable)
4010 +
4011 static inline void
4012 current_restore_flags(unsigned long orig_flags, unsigned long flags)
4013 {
4014 diff --git a/include/linux/sched/smt.h b/include/linux/sched/smt.h
4015 new file mode 100644
4016 index 000000000000..59d3736c454c
4017 --- /dev/null
4018 +++ b/include/linux/sched/smt.h
4019 @@ -0,0 +1,20 @@
4020 +/* SPDX-License-Identifier: GPL-2.0 */
4021 +#ifndef _LINUX_SCHED_SMT_H
4022 +#define _LINUX_SCHED_SMT_H
4023 +
4024 +#include <linux/static_key.h>
4025 +
4026 +#ifdef CONFIG_SCHED_SMT
4027 +extern struct static_key_false sched_smt_present;
4028 +
4029 +static __always_inline bool sched_smt_active(void)
4030 +{
4031 + return static_branch_likely(&sched_smt_present);
4032 +}
4033 +#else
4034 +static inline bool sched_smt_active(void) { return false; }
4035 +#endif
4036 +
4037 +void arch_smt_update(void);
4038 +
4039 +#endif
4040 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
4041 index 17a13e4785fc..e6ef9cc05e60 100644
4042 --- a/include/linux/skbuff.h
4043 +++ b/include/linux/skbuff.h
4044 @@ -1311,6 +1311,22 @@ static inline void skb_zcopy_set(struct sk_buff *skb, struct ubuf_info *uarg)
4045 }
4046 }
4047
4048 +static inline void skb_zcopy_set_nouarg(struct sk_buff *skb, void *val)
4049 +{
4050 + skb_shinfo(skb)->destructor_arg = (void *)((uintptr_t) val | 0x1UL);
4051 + skb_shinfo(skb)->tx_flags |= SKBTX_ZEROCOPY_FRAG;
4052 +}
4053 +
4054 +static inline bool skb_zcopy_is_nouarg(struct sk_buff *skb)
4055 +{
4056 + return (uintptr_t) skb_shinfo(skb)->destructor_arg & 0x1UL;
4057 +}
4058 +
4059 +static inline void *skb_zcopy_get_nouarg(struct sk_buff *skb)
4060 +{
4061 + return (void *)((uintptr_t) skb_shinfo(skb)->destructor_arg & ~0x1UL);
4062 +}
4063 +
4064 /* Release a reference on a zerocopy structure */
4065 static inline void skb_zcopy_clear(struct sk_buff *skb, bool zerocopy)
4066 {
4067 @@ -1320,7 +1336,7 @@ static inline void skb_zcopy_clear(struct sk_buff *skb, bool zerocopy)
4068 if (uarg->callback == sock_zerocopy_callback) {
4069 uarg->zerocopy = uarg->zerocopy && zerocopy;
4070 sock_zerocopy_put(uarg);
4071 - } else {
4072 + } else if (!skb_zcopy_is_nouarg(skb)) {
4073 uarg->callback(uarg, zerocopy);
4074 }
4075
4076 diff --git a/include/linux/tcp.h b/include/linux/tcp.h
4077 index 263e37271afd..d2c8f280e48f 100644
4078 --- a/include/linux/tcp.h
4079 +++ b/include/linux/tcp.h
4080 @@ -196,6 +196,7 @@ struct tcp_sock {
4081 u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */
4082 u32 lsndtime; /* timestamp of last sent data packet (for restart window) */
4083 u32 last_oow_ack_time; /* timestamp of last out-of-window ACK */
4084 + u32 compressed_ack_rcv_nxt;
4085
4086 u32 tsoffset; /* timestamp offset */
4087
4088 diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
4089 index c0d7ea0bf5b6..b17201edfa09 100644
4090 --- a/include/uapi/linux/prctl.h
4091 +++ b/include/uapi/linux/prctl.h
4092 @@ -212,6 +212,7 @@ struct prctl_mm_map {
4093 #define PR_SET_SPECULATION_CTRL 53
4094 /* Speculation control variants */
4095 # define PR_SPEC_STORE_BYPASS 0
4096 +# define PR_SPEC_INDIRECT_BRANCH 1
4097 /* Return and control values for PR_SET/GET_SPECULATION_CTRL */
4098 # define PR_SPEC_NOT_AFFECTED 0
4099 # define PR_SPEC_PRCTL (1UL << 0)
4100 diff --git a/kernel/cpu.c b/kernel/cpu.c
4101 index 0097acec1c71..1699ff68c412 100644
4102 --- a/kernel/cpu.c
4103 +++ b/kernel/cpu.c
4104 @@ -10,6 +10,7 @@
4105 #include <linux/sched/signal.h>
4106 #include <linux/sched/hotplug.h>
4107 #include <linux/sched/task.h>
4108 +#include <linux/sched/smt.h>
4109 #include <linux/unistd.h>
4110 #include <linux/cpu.h>
4111 #include <linux/oom.h>
4112 @@ -346,6 +347,12 @@ void cpu_hotplug_enable(void)
4113 EXPORT_SYMBOL_GPL(cpu_hotplug_enable);
4114 #endif /* CONFIG_HOTPLUG_CPU */
4115
4116 +/*
4117 + * Architectures that need SMT-specific errata handling during SMT hotplug
4118 + * should override this.
4119 + */
4120 +void __weak arch_smt_update(void) { }
4121 +
4122 #ifdef CONFIG_HOTPLUG_SMT
4123 enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
4124 EXPORT_SYMBOL_GPL(cpu_smt_control);
4125 @@ -982,6 +989,7 @@ out:
4126 * concurrent CPU hotplug via cpu_add_remove_lock.
4127 */
4128 lockup_detector_cleanup();
4129 + arch_smt_update();
4130 return ret;
4131 }
4132
4133 @@ -1110,6 +1118,7 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target)
4134 ret = cpuhp_up_callbacks(cpu, st, target);
4135 out:
4136 cpus_write_unlock();
4137 + arch_smt_update();
4138 return ret;
4139 }
4140
4141 @@ -2052,8 +2061,10 @@ static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
4142 */
4143 cpuhp_offline_cpu_device(cpu);
4144 }
4145 - if (!ret)
4146 + if (!ret) {
4147 cpu_smt_control = ctrlval;
4148 + arch_smt_update();
4149 + }
4150 cpu_maps_update_done();
4151 return ret;
4152 }
4153 @@ -2064,6 +2075,7 @@ static int cpuhp_smt_enable(void)
4154
4155 cpu_maps_update_begin();
4156 cpu_smt_control = CPU_SMT_ENABLED;
4157 + arch_smt_update();
4158 for_each_present_cpu(cpu) {
4159 /* Skip online CPUs and CPUs on offline nodes */
4160 if (cpu_online(cpu) || !node_online(cpu_to_node(cpu)))
4161 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
4162 index 35551110d277..2beda4b726e2 100644
4163 --- a/kernel/sched/core.c
4164 +++ b/kernel/sched/core.c
4165 @@ -5741,15 +5741,10 @@ int sched_cpu_activate(unsigned int cpu)
4166
4167 #ifdef CONFIG_SCHED_SMT
4168 /*
4169 - * The sched_smt_present static key needs to be evaluated on every
4170 - * hotplug event because at boot time SMT might be disabled when
4171 - * the number of booted CPUs is limited.
4172 - *
4173 - * If then later a sibling gets hotplugged, then the key would stay
4174 - * off and SMT scheduling would never be functional.
4175 + * When going up, increment the number of cores with SMT present.
4176 */
4177 - if (cpumask_weight(cpu_smt_mask(cpu)) > 1)
4178 - static_branch_enable_cpuslocked(&sched_smt_present);
4179 + if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
4180 + static_branch_inc_cpuslocked(&sched_smt_present);
4181 #endif
4182 set_cpu_active(cpu, true);
4183
4184 @@ -5793,6 +5788,14 @@ int sched_cpu_deactivate(unsigned int cpu)
4185 */
4186 synchronize_rcu_mult(call_rcu, call_rcu_sched);
4187
4188 +#ifdef CONFIG_SCHED_SMT
4189 + /*
4190 + * When going down, decrement the number of cores with SMT present.
4191 + */
4192 + if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
4193 + static_branch_dec_cpuslocked(&sched_smt_present);
4194 +#endif
4195 +
4196 if (!sched_smp_initialized)
4197 return 0;
4198
4199 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
4200 index 9683f458aec7..6c25bbe87bd3 100644
4201 --- a/kernel/sched/sched.h
4202 +++ b/kernel/sched/sched.h
4203 @@ -23,6 +23,7 @@
4204 #include <linux/sched/prio.h>
4205 #include <linux/sched/rt.h>
4206 #include <linux/sched/signal.h>
4207 +#include <linux/sched/smt.h>
4208 #include <linux/sched/stat.h>
4209 #include <linux/sched/sysctl.h>
4210 #include <linux/sched/task.h>
4211 @@ -930,9 +931,6 @@ static inline int cpu_of(struct rq *rq)
4212
4213
4214 #ifdef CONFIG_SCHED_SMT
4215 -
4216 -extern struct static_key_false sched_smt_present;
4217 -
4218 extern void __update_idle_core(struct rq *rq);
4219
4220 static inline void update_idle_core(struct rq *rq)
4221 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
4222 index f536f601bd46..77734451cb05 100644
4223 --- a/kernel/trace/ftrace.c
4224 +++ b/kernel/trace/ftrace.c
4225 @@ -817,7 +817,7 @@ function_profile_call(unsigned long ip, unsigned long parent_ip,
4226 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
4227 static int profile_graph_entry(struct ftrace_graph_ent *trace)
4228 {
4229 - int index = trace->depth;
4230 + int index = current->curr_ret_stack;
4231
4232 function_profile_call(trace->func, 0, NULL, NULL);
4233
4234 @@ -852,7 +852,7 @@ static void profile_graph_return(struct ftrace_graph_ret *trace)
4235 if (!fgraph_graph_time) {
4236 int index;
4237
4238 - index = trace->depth;
4239 + index = current->curr_ret_stack;
4240
4241 /* Append this call time to the parent time to subtract */
4242 if (index)
4243 @@ -6814,6 +6814,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
4244 atomic_set(&t->tracing_graph_pause, 0);
4245 atomic_set(&t->trace_overrun, 0);
4246 t->curr_ret_stack = -1;
4247 + t->curr_ret_depth = -1;
4248 /* Make sure the tasks see the -1 first: */
4249 smp_wmb();
4250 t->ret_stack = ret_stack_list[start++];
4251 @@ -7038,6 +7039,7 @@ graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack)
4252 void ftrace_graph_init_idle_task(struct task_struct *t, int cpu)
4253 {
4254 t->curr_ret_stack = -1;
4255 + t->curr_ret_depth = -1;
4256 /*
4257 * The idle task has no parent, it either has its own
4258 * stack or no stack at all.
4259 @@ -7068,6 +7070,7 @@ void ftrace_graph_init_task(struct task_struct *t)
4260 /* Make sure we do not use the parent ret_stack */
4261 t->ret_stack = NULL;
4262 t->curr_ret_stack = -1;
4263 + t->curr_ret_depth = -1;
4264
4265 if (ftrace_graph_active) {
4266 struct ftrace_ret_stack *ret_stack;
4267 diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
4268 index 169b3c44ee97..2561460d7baf 100644
4269 --- a/kernel/trace/trace_functions_graph.c
4270 +++ b/kernel/trace/trace_functions_graph.c
4271 @@ -118,8 +118,8 @@ print_graph_duration(struct trace_array *tr, unsigned long long duration,
4272 struct trace_seq *s, u32 flags);
4273
4274 /* Add a function return address to the trace stack on thread info.*/
4275 -int
4276 -ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
4277 +static int
4278 +ftrace_push_return_trace(unsigned long ret, unsigned long func,
4279 unsigned long frame_pointer, unsigned long *retp)
4280 {
4281 unsigned long long calltime;
4282 @@ -177,9 +177,31 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
4283 #ifdef HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
4284 current->ret_stack[index].retp = retp;
4285 #endif
4286 - *depth = current->curr_ret_stack;
4287 + return 0;
4288 +}
4289 +
4290 +int function_graph_enter(unsigned long ret, unsigned long func,
4291 + unsigned long frame_pointer, unsigned long *retp)
4292 +{
4293 + struct ftrace_graph_ent trace;
4294 +
4295 + trace.func = func;
4296 + trace.depth = ++current->curr_ret_depth;
4297 +
4298 + if (ftrace_push_return_trace(ret, func,
4299 + frame_pointer, retp))
4300 + goto out;
4301 +
4302 + /* Only trace if the calling function expects to */
4303 + if (!ftrace_graph_entry(&trace))
4304 + goto out_ret;
4305
4306 return 0;
4307 + out_ret:
4308 + current->curr_ret_stack--;
4309 + out:
4310 + current->curr_ret_depth--;
4311 + return -EBUSY;
4312 }
4313
4314 /* Retrieve a function return address to the trace stack on thread info.*/
4315 @@ -241,7 +263,13 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,
4316 trace->func = current->ret_stack[index].func;
4317 trace->calltime = current->ret_stack[index].calltime;
4318 trace->overrun = atomic_read(&current->trace_overrun);
4319 - trace->depth = index;
4320 + trace->depth = current->curr_ret_depth--;
4321 + /*
4322 + * We still want to trace interrupts coming in if
4323 + * max_depth is set to 1. Make sure the decrement is
4324 + * seen before ftrace_graph_return.
4325 + */
4326 + barrier();
4327 }
4328
4329 /*
4330 @@ -255,6 +283,12 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)
4331
4332 ftrace_pop_return_trace(&trace, &ret, frame_pointer);
4333 trace.rettime = trace_clock_local();
4334 + ftrace_graph_return(&trace);
4335 + /*
4336 + * The ftrace_graph_return() may still access the current
4337 + * ret_stack structure, we need to make sure the update of
4338 + * curr_ret_stack is after that.
4339 + */
4340 barrier();
4341 current->curr_ret_stack--;
4342 /*
4343 @@ -267,13 +301,6 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)
4344 return ret;
4345 }
4346
4347 - /*
4348 - * The trace should run after decrementing the ret counter
4349 - * in case an interrupt were to come in. We don't want to
4350 - * lose the interrupt if max_depth is set.
4351 - */
4352 - ftrace_graph_return(&trace);
4353 -
4354 if (unlikely(!ret)) {
4355 ftrace_graph_stop();
4356 WARN_ON(1);
4357 diff --git a/lib/test_kmod.c b/lib/test_kmod.c
4358 index e3ddd836491f..d82d022111e0 100644
4359 --- a/lib/test_kmod.c
4360 +++ b/lib/test_kmod.c
4361 @@ -1214,7 +1214,6 @@ void unregister_test_dev_kmod(struct kmod_test_device *test_dev)
4362
4363 dev_info(test_dev->dev, "removing interface\n");
4364 misc_deregister(&test_dev->misc_dev);
4365 - kfree(&test_dev->misc_dev.name);
4366
4367 mutex_unlock(&test_dev->config_mutex);
4368 mutex_unlock(&test_dev->trigger_mutex);
4369 diff --git a/mm/huge_memory.c b/mm/huge_memory.c
4370 index deed97fba979..15310f14c25e 100644
4371 --- a/mm/huge_memory.c
4372 +++ b/mm/huge_memory.c
4373 @@ -2322,7 +2322,7 @@ void vma_adjust_trans_huge(struct vm_area_struct *vma,
4374 }
4375 }
4376
4377 -static void freeze_page(struct page *page)
4378 +static void unmap_page(struct page *page)
4379 {
4380 enum ttu_flags ttu_flags = TTU_IGNORE_MLOCK | TTU_IGNORE_ACCESS |
4381 TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD;
4382 @@ -2337,7 +2337,7 @@ static void freeze_page(struct page *page)
4383 VM_BUG_ON_PAGE(!unmap_success, page);
4384 }
4385
4386 -static void unfreeze_page(struct page *page)
4387 +static void remap_page(struct page *page)
4388 {
4389 int i;
4390 if (PageTransHuge(page)) {
4391 @@ -2373,6 +2373,12 @@ static void __split_huge_page_tail(struct page *head, int tail,
4392 (1L << PG_unevictable) |
4393 (1L << PG_dirty)));
4394
4395 + /* ->mapping in first tail page is compound_mapcount */
4396 + VM_BUG_ON_PAGE(tail > 2 && page_tail->mapping != TAIL_MAPPING,
4397 + page_tail);
4398 + page_tail->mapping = head->mapping;
4399 + page_tail->index = head->index + tail;
4400 +
4401 /* Page flags must be visible before we make the page non-compound. */
4402 smp_wmb();
4403
4404 @@ -2393,12 +2399,6 @@ static void __split_huge_page_tail(struct page *head, int tail,
4405 if (page_is_idle(head))
4406 set_page_idle(page_tail);
4407
4408 - /* ->mapping in first tail page is compound_mapcount */
4409 - VM_BUG_ON_PAGE(tail > 2 && page_tail->mapping != TAIL_MAPPING,
4410 - page_tail);
4411 - page_tail->mapping = head->mapping;
4412 -
4413 - page_tail->index = head->index + tail;
4414 page_cpupid_xchg_last(page_tail, page_cpupid_last(head));
4415
4416 /*
4417 @@ -2410,12 +2410,11 @@ static void __split_huge_page_tail(struct page *head, int tail,
4418 }
4419
4420 static void __split_huge_page(struct page *page, struct list_head *list,
4421 - unsigned long flags)
4422 + pgoff_t end, unsigned long flags)
4423 {
4424 struct page *head = compound_head(page);
4425 struct zone *zone = page_zone(head);
4426 struct lruvec *lruvec;
4427 - pgoff_t end = -1;
4428 int i;
4429
4430 lruvec = mem_cgroup_page_lruvec(head, zone->zone_pgdat);
4431 @@ -2423,9 +2422,6 @@ static void __split_huge_page(struct page *page, struct list_head *list,
4432 /* complete memcg works before add pages to LRU */
4433 mem_cgroup_split_huge_fixup(head);
4434
4435 - if (!PageAnon(page))
4436 - end = DIV_ROUND_UP(i_size_read(head->mapping->host), PAGE_SIZE);
4437 -
4438 for (i = HPAGE_PMD_NR - 1; i >= 1; i--) {
4439 __split_huge_page_tail(head, i, lruvec, list);
4440 /* Some pages can be beyond i_size: drop them from page cache */
4441 @@ -2454,7 +2450,7 @@ static void __split_huge_page(struct page *page, struct list_head *list,
4442
4443 spin_unlock_irqrestore(zone_lru_lock(page_zone(head)), flags);
4444
4445 - unfreeze_page(head);
4446 + remap_page(head);
4447
4448 for (i = 0; i < HPAGE_PMD_NR; i++) {
4449 struct page *subpage = head + i;
4450 @@ -2597,6 +2593,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)
4451 int count, mapcount, extra_pins, ret;
4452 bool mlocked;
4453 unsigned long flags;
4454 + pgoff_t end;
4455
4456 VM_BUG_ON_PAGE(is_huge_zero_page(page), page);
4457 VM_BUG_ON_PAGE(!PageLocked(page), page);
4458 @@ -2619,6 +2616,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)
4459 ret = -EBUSY;
4460 goto out;
4461 }
4462 + end = -1;
4463 mapping = NULL;
4464 anon_vma_lock_write(anon_vma);
4465 } else {
4466 @@ -2632,10 +2630,19 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)
4467
4468 anon_vma = NULL;
4469 i_mmap_lock_read(mapping);
4470 +
4471 + /*
4472 + *__split_huge_page() may need to trim off pages beyond EOF:
4473 + * but on 32-bit, i_size_read() takes an irq-unsafe seqlock,
4474 + * which cannot be nested inside the page tree lock. So note
4475 + * end now: i_size itself may be changed at any moment, but
4476 + * head page lock is good enough to serialize the trimming.
4477 + */
4478 + end = DIV_ROUND_UP(i_size_read(mapping->host), PAGE_SIZE);
4479 }
4480
4481 /*
4482 - * Racy check if we can split the page, before freeze_page() will
4483 + * Racy check if we can split the page, before unmap_page() will
4484 * split PMDs
4485 */
4486 if (!can_split_huge_page(head, &extra_pins)) {
4487 @@ -2644,7 +2651,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)
4488 }
4489
4490 mlocked = PageMlocked(page);
4491 - freeze_page(head);
4492 + unmap_page(head);
4493 VM_BUG_ON_PAGE(compound_mapcount(head), head);
4494
4495 /* Make sure the page is not on per-CPU pagevec as it takes pin */
4496 @@ -2681,7 +2688,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)
4497 if (mapping)
4498 __dec_node_page_state(page, NR_SHMEM_THPS);
4499 spin_unlock(&pgdata->split_queue_lock);
4500 - __split_huge_page(page, list, flags);
4501 + __split_huge_page(page, list, end, flags);
4502 if (PageSwapCache(head)) {
4503 swp_entry_t entry = { .val = page_private(head) };
4504
4505 @@ -2701,7 +2708,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list)
4506 fail: if (mapping)
4507 xa_unlock(&mapping->i_pages);
4508 spin_unlock_irqrestore(zone_lru_lock(page_zone(head)), flags);
4509 - unfreeze_page(head);
4510 + remap_page(head);
4511 ret = -EBUSY;
4512 }
4513
4514 diff --git a/mm/khugepaged.c b/mm/khugepaged.c
4515 index a31d740e6cd1..fde5820be24d 100644
4516 --- a/mm/khugepaged.c
4517 +++ b/mm/khugepaged.c
4518 @@ -1287,7 +1287,7 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
4519 * collapse_shmem - collapse small tmpfs/shmem pages into huge one.
4520 *
4521 * Basic scheme is simple, details are more complex:
4522 - * - allocate and freeze a new huge page;
4523 + * - allocate and lock a new huge page;
4524 * - scan over radix tree replacing old pages the new one
4525 * + swap in pages if necessary;
4526 * + fill in gaps;
4527 @@ -1295,11 +1295,11 @@ static void retract_page_tables(struct address_space *mapping, pgoff_t pgoff)
4528 * - if replacing succeed:
4529 * + copy data over;
4530 * + free old pages;
4531 - * + unfreeze huge page;
4532 + * + unlock huge page;
4533 * - if replacing failed;
4534 * + put all pages back and unfreeze them;
4535 * + restore gaps in the radix-tree;
4536 - * + free huge page;
4537 + * + unlock and free huge page;
4538 */
4539 static void collapse_shmem(struct mm_struct *mm,
4540 struct address_space *mapping, pgoff_t start,
4541 @@ -1330,18 +1330,15 @@ static void collapse_shmem(struct mm_struct *mm,
4542 goto out;
4543 }
4544
4545 + __SetPageLocked(new_page);
4546 + __SetPageSwapBacked(new_page);
4547 new_page->index = start;
4548 new_page->mapping = mapping;
4549 - __SetPageSwapBacked(new_page);
4550 - __SetPageLocked(new_page);
4551 - BUG_ON(!page_ref_freeze(new_page, 1));
4552 -
4553
4554 /*
4555 - * At this point the new_page is 'frozen' (page_count() is zero), locked
4556 - * and not up-to-date. It's safe to insert it into radix tree, because
4557 - * nobody would be able to map it or use it in other way until we
4558 - * unfreeze it.
4559 + * At this point the new_page is locked and not up-to-date.
4560 + * It's safe to insert it into the page cache, because nobody would
4561 + * be able to map it or use it in another way until we unlock it.
4562 */
4563
4564 index = start;
4565 @@ -1349,19 +1346,29 @@ static void collapse_shmem(struct mm_struct *mm,
4566 radix_tree_for_each_slot(slot, &mapping->i_pages, &iter, start) {
4567 int n = min(iter.index, end) - index;
4568
4569 + /*
4570 + * Stop if extent has been hole-punched, and is now completely
4571 + * empty (the more obvious i_size_read() check would take an
4572 + * irq-unsafe seqlock on 32-bit).
4573 + */
4574 + if (n >= HPAGE_PMD_NR) {
4575 + result = SCAN_TRUNCATED;
4576 + goto tree_locked;
4577 + }
4578 +
4579 /*
4580 * Handle holes in the radix tree: charge it from shmem and
4581 * insert relevant subpage of new_page into the radix-tree.
4582 */
4583 if (n && !shmem_charge(mapping->host, n)) {
4584 result = SCAN_FAIL;
4585 - break;
4586 + goto tree_locked;
4587 }
4588 - nr_none += n;
4589 for (; index < min(iter.index, end); index++) {
4590 radix_tree_insert(&mapping->i_pages, index,
4591 new_page + (index % HPAGE_PMD_NR));
4592 }
4593 + nr_none += n;
4594
4595 /* We are done. */
4596 if (index >= end)
4597 @@ -1377,12 +1384,12 @@ static void collapse_shmem(struct mm_struct *mm,
4598 result = SCAN_FAIL;
4599 goto tree_unlocked;
4600 }
4601 - xa_lock_irq(&mapping->i_pages);
4602 } else if (trylock_page(page)) {
4603 get_page(page);
4604 + xa_unlock_irq(&mapping->i_pages);
4605 } else {
4606 result = SCAN_PAGE_LOCK;
4607 - break;
4608 + goto tree_locked;
4609 }
4610
4611 /*
4612 @@ -1391,17 +1398,24 @@ static void collapse_shmem(struct mm_struct *mm,
4613 */
4614 VM_BUG_ON_PAGE(!PageLocked(page), page);
4615 VM_BUG_ON_PAGE(!PageUptodate(page), page);
4616 - VM_BUG_ON_PAGE(PageTransCompound(page), page);
4617 +
4618 + /*
4619 + * If file was truncated then extended, or hole-punched, before
4620 + * we locked the first page, then a THP might be there already.
4621 + */
4622 + if (PageTransCompound(page)) {
4623 + result = SCAN_PAGE_COMPOUND;
4624 + goto out_unlock;
4625 + }
4626
4627 if (page_mapping(page) != mapping) {
4628 result = SCAN_TRUNCATED;
4629 goto out_unlock;
4630 }
4631 - xa_unlock_irq(&mapping->i_pages);
4632
4633 if (isolate_lru_page(page)) {
4634 result = SCAN_DEL_PAGE_LRU;
4635 - goto out_isolate_failed;
4636 + goto out_unlock;
4637 }
4638
4639 if (page_mapped(page))
4640 @@ -1422,7 +1436,9 @@ static void collapse_shmem(struct mm_struct *mm,
4641 */
4642 if (!page_ref_freeze(page, 3)) {
4643 result = SCAN_PAGE_COUNT;
4644 - goto out_lru;
4645 + xa_unlock_irq(&mapping->i_pages);
4646 + putback_lru_page(page);
4647 + goto out_unlock;
4648 }
4649
4650 /*
4651 @@ -1438,17 +1454,10 @@ static void collapse_shmem(struct mm_struct *mm,
4652 slot = radix_tree_iter_resume(slot, &iter);
4653 index++;
4654 continue;
4655 -out_lru:
4656 - xa_unlock_irq(&mapping->i_pages);
4657 - putback_lru_page(page);
4658 -out_isolate_failed:
4659 - unlock_page(page);
4660 - put_page(page);
4661 - goto tree_unlocked;
4662 out_unlock:
4663 unlock_page(page);
4664 put_page(page);
4665 - break;
4666 + goto tree_unlocked;
4667 }
4668
4669 /*
4670 @@ -1456,14 +1465,18 @@ out_unlock:
4671 * This code only triggers if there's nothing in radix tree
4672 * beyond 'end'.
4673 */
4674 - if (result == SCAN_SUCCEED && index < end) {
4675 + if (index < end) {
4676 int n = end - index;
4677
4678 + /* Stop if extent has been truncated, and is now empty */
4679 + if (n >= HPAGE_PMD_NR) {
4680 + result = SCAN_TRUNCATED;
4681 + goto tree_locked;
4682 + }
4683 if (!shmem_charge(mapping->host, n)) {
4684 result = SCAN_FAIL;
4685 goto tree_locked;
4686 }
4687 -
4688 for (; index < end; index++) {
4689 radix_tree_insert(&mapping->i_pages, index,
4690 new_page + (index % HPAGE_PMD_NR));
4691 @@ -1471,59 +1484,64 @@ out_unlock:
4692 nr_none += n;
4693 }
4694
4695 + __inc_node_page_state(new_page, NR_SHMEM_THPS);
4696 + if (nr_none) {
4697 + struct zone *zone = page_zone(new_page);
4698 +
4699 + __mod_node_page_state(zone->zone_pgdat, NR_FILE_PAGES, nr_none);
4700 + __mod_node_page_state(zone->zone_pgdat, NR_SHMEM, nr_none);
4701 + }
4702 +
4703 tree_locked:
4704 xa_unlock_irq(&mapping->i_pages);
4705 tree_unlocked:
4706
4707 if (result == SCAN_SUCCEED) {
4708 - unsigned long flags;
4709 - struct zone *zone = page_zone(new_page);
4710 -
4711 /*
4712 * Replacing old pages with new one has succeed, now we need to
4713 * copy the content and free old pages.
4714 */
4715 + index = start;
4716 list_for_each_entry_safe(page, tmp, &pagelist, lru) {
4717 + while (index < page->index) {
4718 + clear_highpage(new_page + (index % HPAGE_PMD_NR));
4719 + index++;
4720 + }
4721 copy_highpage(new_page + (page->index % HPAGE_PMD_NR),
4722 page);
4723 list_del(&page->lru);
4724 - unlock_page(page);
4725 - page_ref_unfreeze(page, 1);
4726 page->mapping = NULL;
4727 + page_ref_unfreeze(page, 1);
4728 ClearPageActive(page);
4729 ClearPageUnevictable(page);
4730 + unlock_page(page);
4731 put_page(page);
4732 + index++;
4733 }
4734 -
4735 - local_irq_save(flags);
4736 - __inc_node_page_state(new_page, NR_SHMEM_THPS);
4737 - if (nr_none) {
4738 - __mod_node_page_state(zone->zone_pgdat, NR_FILE_PAGES, nr_none);
4739 - __mod_node_page_state(zone->zone_pgdat, NR_SHMEM, nr_none);
4740 + while (index < end) {
4741 + clear_highpage(new_page + (index % HPAGE_PMD_NR));
4742 + index++;
4743 }
4744 - local_irq_restore(flags);
4745
4746 - /*
4747 - * Remove pte page tables, so we can re-faulti
4748 - * the page as huge.
4749 - */
4750 - retract_page_tables(mapping, start);
4751 -
4752 - /* Everything is ready, let's unfreeze the new_page */
4753 - set_page_dirty(new_page);
4754 SetPageUptodate(new_page);
4755 - page_ref_unfreeze(new_page, HPAGE_PMD_NR);
4756 + page_ref_add(new_page, HPAGE_PMD_NR - 1);
4757 + set_page_dirty(new_page);
4758 mem_cgroup_commit_charge(new_page, memcg, false, true);
4759 lru_cache_add_anon(new_page);
4760 - unlock_page(new_page);
4761
4762 + /*
4763 + * Remove pte page tables, so we can re-fault the page as huge.
4764 + */
4765 + retract_page_tables(mapping, start);
4766 *hpage = NULL;
4767
4768 khugepaged_pages_collapsed++;
4769 } else {
4770 /* Something went wrong: rollback changes to the radix-tree */
4771 - shmem_uncharge(mapping->host, nr_none);
4772 xa_lock_irq(&mapping->i_pages);
4773 + mapping->nrpages -= nr_none;
4774 + shmem_uncharge(mapping->host, nr_none);
4775 +
4776 radix_tree_for_each_slot(slot, &mapping->i_pages, &iter, start) {
4777 if (iter.index >= end)
4778 break;
4779 @@ -1546,19 +1564,18 @@ tree_unlocked:
4780 radix_tree_replace_slot(&mapping->i_pages, slot, page);
4781 slot = radix_tree_iter_resume(slot, &iter);
4782 xa_unlock_irq(&mapping->i_pages);
4783 - putback_lru_page(page);
4784 unlock_page(page);
4785 + putback_lru_page(page);
4786 xa_lock_irq(&mapping->i_pages);
4787 }
4788 VM_BUG_ON(nr_none);
4789 xa_unlock_irq(&mapping->i_pages);
4790
4791 - /* Unfreeze new_page, caller would take care about freeing it */
4792 - page_ref_unfreeze(new_page, 1);
4793 mem_cgroup_cancel_charge(new_page, memcg, true);
4794 - unlock_page(new_page);
4795 new_page->mapping = NULL;
4796 }
4797 +
4798 + unlock_page(new_page);
4799 out:
4800 VM_BUG_ON(!list_empty(&pagelist));
4801 /* TODO: tracepoints */
4802 diff --git a/mm/rmap.c b/mm/rmap.c
4803 index 1e79fac3186b..85b7f9423352 100644
4804 --- a/mm/rmap.c
4805 +++ b/mm/rmap.c
4806 @@ -1627,16 +1627,9 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
4807 address + PAGE_SIZE);
4808 } else {
4809 /*
4810 - * We should not need to notify here as we reach this
4811 - * case only from freeze_page() itself only call from
4812 - * split_huge_page_to_list() so everything below must
4813 - * be true:
4814 - * - page is not anonymous
4815 - * - page is locked
4816 - *
4817 - * So as it is a locked file back page thus it can not
4818 - * be remove from the page cache and replace by a new
4819 - * page before mmu_notifier_invalidate_range_end so no
4820 + * This is a locked file-backed page, thus it cannot
4821 + * be removed from the page cache and replaced by a new
4822 + * page before mmu_notifier_invalidate_range_end, so no
4823 * concurrent thread might update its page table to
4824 * point at new page while a device still is using this
4825 * page.
4826 diff --git a/mm/shmem.c b/mm/shmem.c
4827 index 38d228a30fdc..0b02b539072e 100644
4828 --- a/mm/shmem.c
4829 +++ b/mm/shmem.c
4830 @@ -297,12 +297,14 @@ bool shmem_charge(struct inode *inode, long pages)
4831 if (!shmem_inode_acct_block(inode, pages))
4832 return false;
4833
4834 + /* nrpages adjustment first, then shmem_recalc_inode() when balanced */
4835 + inode->i_mapping->nrpages += pages;
4836 +
4837 spin_lock_irqsave(&info->lock, flags);
4838 info->alloced += pages;
4839 inode->i_blocks += pages * BLOCKS_PER_PAGE;
4840 shmem_recalc_inode(inode);
4841 spin_unlock_irqrestore(&info->lock, flags);
4842 - inode->i_mapping->nrpages += pages;
4843
4844 return true;
4845 }
4846 @@ -312,6 +314,8 @@ void shmem_uncharge(struct inode *inode, long pages)
4847 struct shmem_inode_info *info = SHMEM_I(inode);
4848 unsigned long flags;
4849
4850 + /* nrpages adjustment done by __delete_from_page_cache() or caller */
4851 +
4852 spin_lock_irqsave(&info->lock, flags);
4853 info->alloced -= pages;
4854 inode->i_blocks -= pages * BLOCKS_PER_PAGE;
4855 @@ -1547,11 +1551,13 @@ static int shmem_replace_page(struct page **pagep, gfp_t gfp,
4856 {
4857 struct page *oldpage, *newpage;
4858 struct address_space *swap_mapping;
4859 + swp_entry_t entry;
4860 pgoff_t swap_index;
4861 int error;
4862
4863 oldpage = *pagep;
4864 - swap_index = page_private(oldpage);
4865 + entry.val = page_private(oldpage);
4866 + swap_index = swp_offset(entry);
4867 swap_mapping = page_mapping(oldpage);
4868
4869 /*
4870 @@ -1570,7 +1576,7 @@ static int shmem_replace_page(struct page **pagep, gfp_t gfp,
4871 __SetPageLocked(newpage);
4872 __SetPageSwapBacked(newpage);
4873 SetPageUptodate(newpage);
4874 - set_page_private(newpage, swap_index);
4875 + set_page_private(newpage, entry.val);
4876 SetPageSwapCache(newpage);
4877
4878 /*
4879 diff --git a/mm/truncate.c b/mm/truncate.c
4880 index 1d2fb2dca96f..71b65aab8077 100644
4881 --- a/mm/truncate.c
4882 +++ b/mm/truncate.c
4883 @@ -520,9 +520,13 @@ void truncate_inode_pages_final(struct address_space *mapping)
4884 */
4885 xa_lock_irq(&mapping->i_pages);
4886 xa_unlock_irq(&mapping->i_pages);
4887 -
4888 - truncate_inode_pages(mapping, 0);
4889 }
4890 +
4891 + /*
4892 + * Cleancache needs notification even if there are no pages or shadow
4893 + * entries.
4894 + */
4895 + truncate_inode_pages(mapping, 0);
4896 }
4897 EXPORT_SYMBOL(truncate_inode_pages_final);
4898
4899 diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
4900 index 5029f241908f..f0af11b1cdf3 100644
4901 --- a/mm/userfaultfd.c
4902 +++ b/mm/userfaultfd.c
4903 @@ -205,8 +205,9 @@ retry:
4904 if (!dst_vma || !is_vm_hugetlb_page(dst_vma))
4905 goto out_unlock;
4906 /*
4907 - * Only allow __mcopy_atomic_hugetlb on userfaultfd
4908 - * registered ranges.
4909 + * Check the vma is registered in uffd, this is
4910 + * required to enforce the VM_MAYWRITE check done at
4911 + * uffd registration time.
4912 */
4913 if (!dst_vma->vm_userfaultfd_ctx.ctx)
4914 goto out_unlock;
4915 @@ -449,13 +450,9 @@ retry:
4916 if (!dst_vma)
4917 goto out_unlock;
4918 /*
4919 - * Be strict and only allow __mcopy_atomic on userfaultfd
4920 - * registered ranges to prevent userland errors going
4921 - * unnoticed. As far as the VM consistency is concerned, it
4922 - * would be perfectly safe to remove this check, but there's
4923 - * no useful usage for __mcopy_atomic ouside of userfaultfd
4924 - * registered ranges. This is after all why these are ioctls
4925 - * belonging to the userfaultfd and not syscalls.
4926 + * Check the vma is registered in uffd, this is required to
4927 + * enforce the VM_MAYWRITE check done at uffd registration
4928 + * time.
4929 */
4930 if (!dst_vma->vm_userfaultfd_ctx.ctx)
4931 goto out_unlock;
4932 diff --git a/net/core/dev.c b/net/core/dev.c
4933 index 097c02101450..22af88c47756 100644
4934 --- a/net/core/dev.c
4935 +++ b/net/core/dev.c
4936 @@ -5945,11 +5945,14 @@ bool napi_complete_done(struct napi_struct *n, int work_done)
4937 if (work_done)
4938 timeout = n->dev->gro_flush_timeout;
4939
4940 + /* When the NAPI instance uses a timeout and keeps postponing
4941 + * it, we need to bound somehow the time packets are kept in
4942 + * the GRO layer
4943 + */
4944 + napi_gro_flush(n, !!timeout);
4945 if (timeout)
4946 hrtimer_start(&n->timer, ns_to_ktime(timeout),
4947 HRTIMER_MODE_REL_PINNED);
4948 - else
4949 - napi_gro_flush(n, false);
4950 }
4951 if (unlikely(!list_empty(&n->poll_list))) {
4952 /* If n->poll_list is not empty, we need to mask irqs */
4953 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
4954 index f817f336595d..abbbd7fd17fe 100644
4955 --- a/net/core/skbuff.c
4956 +++ b/net/core/skbuff.c
4957 @@ -4912,6 +4912,11 @@ void skb_scrub_packet(struct sk_buff *skb, bool xnet)
4958 nf_reset(skb);
4959 nf_reset_trace(skb);
4960
4961 +#ifdef CONFIG_NET_SWITCHDEV
4962 + skb->offload_fwd_mark = 0;
4963 + skb->offload_mr_fwd_mark = 0;
4964 +#endif
4965 +
4966 if (!xnet)
4967 return;
4968
4969 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
4970 index 72898cbef43d..664fa7d8f7d9 100644
4971 --- a/net/ipv4/tcp_input.c
4972 +++ b/net/ipv4/tcp_input.c
4973 @@ -4276,7 +4276,7 @@ static void tcp_sack_new_ofo_skb(struct sock *sk, u32 seq, u32 end_seq)
4974 * If the sack array is full, forget about the last one.
4975 */
4976 if (this_sack >= TCP_NUM_SACKS) {
4977 - if (tp->compressed_ack)
4978 + if (tp->compressed_ack > TCP_FASTRETRANS_THRESH)
4979 tcp_send_ack(sk);
4980 this_sack--;
4981 tp->rx_opt.num_sacks--;
4982 @@ -5196,7 +5196,17 @@ send_now:
4983 if (!tcp_is_sack(tp) ||
4984 tp->compressed_ack >= sock_net(sk)->ipv4.sysctl_tcp_comp_sack_nr)
4985 goto send_now;
4986 - tp->compressed_ack++;
4987 +
4988 + if (tp->compressed_ack_rcv_nxt != tp->rcv_nxt) {
4989 + tp->compressed_ack_rcv_nxt = tp->rcv_nxt;
4990 + if (tp->compressed_ack > TCP_FASTRETRANS_THRESH)
4991 + NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPACKCOMPRESSED,
4992 + tp->compressed_ack - TCP_FASTRETRANS_THRESH);
4993 + tp->compressed_ack = 0;
4994 + }
4995 +
4996 + if (++tp->compressed_ack <= TCP_FASTRETRANS_THRESH)
4997 + goto send_now;
4998
4999 if (hrtimer_is_queued(&tp->compressed_ack_timer))
5000 return;
5001 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
5002 index 597dbd749f05..68f65ddf9e3c 100644
5003 --- a/net/ipv4/tcp_output.c
5004 +++ b/net/ipv4/tcp_output.c
5005 @@ -165,10 +165,10 @@ static inline void tcp_event_ack_sent(struct sock *sk, unsigned int pkts,
5006 {
5007 struct tcp_sock *tp = tcp_sk(sk);
5008
5009 - if (unlikely(tp->compressed_ack)) {
5010 + if (unlikely(tp->compressed_ack > TCP_FASTRETRANS_THRESH)) {
5011 NET_ADD_STATS(sock_net(sk), LINUX_MIB_TCPACKCOMPRESSED,
5012 - tp->compressed_ack);
5013 - tp->compressed_ack = 0;
5014 + tp->compressed_ack - TCP_FASTRETRANS_THRESH);
5015 + tp->compressed_ack = TCP_FASTRETRANS_THRESH;
5016 if (hrtimer_try_to_cancel(&tp->compressed_ack_timer) == 1)
5017 __sock_put(sk);
5018 }
5019 diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
5020 index 7fdf222a0bdf..57eae8d70ba1 100644
5021 --- a/net/ipv4/tcp_timer.c
5022 +++ b/net/ipv4/tcp_timer.c
5023 @@ -740,7 +740,7 @@ static enum hrtimer_restart tcp_compressed_ack_kick(struct hrtimer *timer)
5024
5025 bh_lock_sock(sk);
5026 if (!sock_owned_by_user(sk)) {
5027 - if (tp->compressed_ack)
5028 + if (tp->compressed_ack > TCP_FASTRETRANS_THRESH)
5029 tcp_send_ack(sk);
5030 } else {
5031 if (!test_and_set_bit(TCP_DELACK_TIMER_DEFERRED,
5032 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
5033 index d6e94dc7e290..6477b131e809 100644
5034 --- a/net/packet/af_packet.c
5035 +++ b/net/packet/af_packet.c
5036 @@ -2394,7 +2394,7 @@ static void tpacket_destruct_skb(struct sk_buff *skb)
5037 void *ph;
5038 __u32 ts;
5039
5040 - ph = skb_shinfo(skb)->destructor_arg;
5041 + ph = skb_zcopy_get_nouarg(skb);
5042 packet_dec_pending(&po->tx_ring);
5043
5044 ts = __packet_set_timestamp(po, ph, skb);
5045 @@ -2461,7 +2461,7 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
5046 skb->mark = po->sk.sk_mark;
5047 skb->tstamp = sockc->transmit_time;
5048 sock_tx_timestamp(&po->sk, sockc->tsflags, &skb_shinfo(skb)->tx_flags);
5049 - skb_shinfo(skb)->destructor_arg = ph.raw;
5050 + skb_zcopy_set_nouarg(skb, ph.raw);
5051
5052 skb_reserve(skb, hlen);
5053 skb_reset_network_header(skb);
5054 diff --git a/net/tipc/node.c b/net/tipc/node.c
5055 index 2afc4f8c37a7..488019766433 100644
5056 --- a/net/tipc/node.c
5057 +++ b/net/tipc/node.c
5058 @@ -584,12 +584,15 @@ static void tipc_node_clear_links(struct tipc_node *node)
5059 /* tipc_node_cleanup - delete nodes that does not
5060 * have active links for NODE_CLEANUP_AFTER time
5061 */
5062 -static int tipc_node_cleanup(struct tipc_node *peer)
5063 +static bool tipc_node_cleanup(struct tipc_node *peer)
5064 {
5065 struct tipc_net *tn = tipc_net(peer->net);
5066 bool deleted = false;
5067
5068 - spin_lock_bh(&tn->node_list_lock);
5069 + /* If lock held by tipc_node_stop() the node will be deleted anyway */
5070 + if (!spin_trylock_bh(&tn->node_list_lock))
5071 + return false;
5072 +
5073 tipc_node_write_lock(peer);
5074
5075 if (!node_is_up(peer) && time_after(jiffies, peer->delete_at)) {
5076 diff --git a/scripts/Makefile.build b/scripts/Makefile.build
5077 index 54da4b070db3..64fac0ad32d6 100644
5078 --- a/scripts/Makefile.build
5079 +++ b/scripts/Makefile.build
5080 @@ -248,10 +248,8 @@ ifdef CONFIG_GCOV_KERNEL
5081 objtool_args += --no-unreachable
5082 endif
5083 ifdef CONFIG_RETPOLINE
5084 -ifneq ($(RETPOLINE_CFLAGS),)
5085 objtool_args += --retpoline
5086 endif
5087 -endif
5088
5089
5090 ifdef CONFIG_MODVERSIONS
5091 diff --git a/sound/core/control.c b/sound/core/control.c
5092 index 9aa15bfc7936..649d3217590e 100644
5093 --- a/sound/core/control.c
5094 +++ b/sound/core/control.c
5095 @@ -348,6 +348,40 @@ static int snd_ctl_find_hole(struct snd_card *card, unsigned int count)
5096 return 0;
5097 }
5098
5099 +/* add a new kcontrol object; call with card->controls_rwsem locked */
5100 +static int __snd_ctl_add(struct snd_card *card, struct snd_kcontrol *kcontrol)
5101 +{
5102 + struct snd_ctl_elem_id id;
5103 + unsigned int idx;
5104 + unsigned int count;
5105 +
5106 + id = kcontrol->id;
5107 + if (id.index > UINT_MAX - kcontrol->count)
5108 + return -EINVAL;
5109 +
5110 + if (snd_ctl_find_id(card, &id)) {
5111 + dev_err(card->dev,
5112 + "control %i:%i:%i:%s:%i is already present\n",
5113 + id.iface, id.device, id.subdevice, id.name, id.index);
5114 + return -EBUSY;
5115 + }
5116 +
5117 + if (snd_ctl_find_hole(card, kcontrol->count) < 0)
5118 + return -ENOMEM;
5119 +
5120 + list_add_tail(&kcontrol->list, &card->controls);
5121 + card->controls_count += kcontrol->count;
5122 + kcontrol->id.numid = card->last_numid + 1;
5123 + card->last_numid += kcontrol->count;
5124 +
5125 + id = kcontrol->id;
5126 + count = kcontrol->count;
5127 + for (idx = 0; idx < count; idx++, id.index++, id.numid++)
5128 + snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_ADD, &id);
5129 +
5130 + return 0;
5131 +}
5132 +
5133 /**
5134 * snd_ctl_add - add the control instance to the card
5135 * @card: the card instance
5136 @@ -364,45 +398,18 @@ static int snd_ctl_find_hole(struct snd_card *card, unsigned int count)
5137 */
5138 int snd_ctl_add(struct snd_card *card, struct snd_kcontrol *kcontrol)
5139 {
5140 - struct snd_ctl_elem_id id;
5141 - unsigned int idx;
5142 - unsigned int count;
5143 int err = -EINVAL;
5144
5145 if (! kcontrol)
5146 return err;
5147 if (snd_BUG_ON(!card || !kcontrol->info))
5148 goto error;
5149 - id = kcontrol->id;
5150 - if (id.index > UINT_MAX - kcontrol->count)
5151 - goto error;
5152
5153 down_write(&card->controls_rwsem);
5154 - if (snd_ctl_find_id(card, &id)) {
5155 - up_write(&card->controls_rwsem);
5156 - dev_err(card->dev, "control %i:%i:%i:%s:%i is already present\n",
5157 - id.iface,
5158 - id.device,
5159 - id.subdevice,
5160 - id.name,
5161 - id.index);
5162 - err = -EBUSY;
5163 - goto error;
5164 - }
5165 - if (snd_ctl_find_hole(card, kcontrol->count) < 0) {
5166 - up_write(&card->controls_rwsem);
5167 - err = -ENOMEM;
5168 - goto error;
5169 - }
5170 - list_add_tail(&kcontrol->list, &card->controls);
5171 - card->controls_count += kcontrol->count;
5172 - kcontrol->id.numid = card->last_numid + 1;
5173 - card->last_numid += kcontrol->count;
5174 - id = kcontrol->id;
5175 - count = kcontrol->count;
5176 + err = __snd_ctl_add(card, kcontrol);
5177 up_write(&card->controls_rwsem);
5178 - for (idx = 0; idx < count; idx++, id.index++, id.numid++)
5179 - snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_ADD, &id);
5180 + if (err < 0)
5181 + goto error;
5182 return 0;
5183
5184 error:
5185 @@ -1361,9 +1368,12 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
5186 kctl->tlv.c = snd_ctl_elem_user_tlv;
5187
5188 /* This function manage to free the instance on failure. */
5189 - err = snd_ctl_add(card, kctl);
5190 - if (err < 0)
5191 - return err;
5192 + down_write(&card->controls_rwsem);
5193 + err = __snd_ctl_add(card, kctl);
5194 + if (err < 0) {
5195 + snd_ctl_free_one(kctl);
5196 + goto unlock;
5197 + }
5198 offset = snd_ctl_get_ioff(kctl, &info->id);
5199 snd_ctl_build_ioff(&info->id, kctl, offset);
5200 /*
5201 @@ -1374,10 +1384,10 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
5202 * which locks the element.
5203 */
5204
5205 - down_write(&card->controls_rwsem);
5206 card->user_ctl_count++;
5207 - up_write(&card->controls_rwsem);
5208
5209 + unlock:
5210 + up_write(&card->controls_rwsem);
5211 return 0;
5212 }
5213
5214 diff --git a/sound/isa/wss/wss_lib.c b/sound/isa/wss/wss_lib.c
5215 index 32453f81b95a..3a5008837576 100644
5216 --- a/sound/isa/wss/wss_lib.c
5217 +++ b/sound/isa/wss/wss_lib.c
5218 @@ -1531,7 +1531,6 @@ static int snd_wss_playback_open(struct snd_pcm_substream *substream)
5219 if (err < 0) {
5220 if (chip->release_dma)
5221 chip->release_dma(chip, chip->dma_private_data, chip->dma1);
5222 - snd_free_pages(runtime->dma_area, runtime->dma_bytes);
5223 return err;
5224 }
5225 chip->playback_substream = substream;
5226 @@ -1572,7 +1571,6 @@ static int snd_wss_capture_open(struct snd_pcm_substream *substream)
5227 if (err < 0) {
5228 if (chip->release_dma)
5229 chip->release_dma(chip, chip->dma_private_data, chip->dma2);
5230 - snd_free_pages(runtime->dma_area, runtime->dma_bytes);
5231 return err;
5232 }
5233 chip->capture_substream = substream;
5234 diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
5235 index f4459d1a9d67..27b468f057dd 100644
5236 --- a/sound/pci/ac97/ac97_codec.c
5237 +++ b/sound/pci/ac97/ac97_codec.c
5238 @@ -824,7 +824,7 @@ static int snd_ac97_put_spsa(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_
5239 {
5240 struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol);
5241 int reg = kcontrol->private_value & 0xff;
5242 - int shift = (kcontrol->private_value >> 8) & 0xff;
5243 + int shift = (kcontrol->private_value >> 8) & 0x0f;
5244 int mask = (kcontrol->private_value >> 16) & 0xff;
5245 // int invert = (kcontrol->private_value >> 24) & 0xff;
5246 unsigned short value, old, new;
5247 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
5248 index 625cb6c7b7d6..5810be2c6c34 100644
5249 --- a/sound/pci/hda/hda_intel.c
5250 +++ b/sound/pci/hda/hda_intel.c
5251 @@ -2256,6 +2256,8 @@ static struct snd_pci_quirk power_save_blacklist[] = {
5252 /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
5253 SND_PCI_QUIRK(0x1849, 0xc892, "Asrock B85M-ITX", 0),
5254 /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
5255 + SND_PCI_QUIRK(0x1849, 0x0397, "Asrock N68C-S UCC", 0),
5256 + /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
5257 SND_PCI_QUIRK(0x1849, 0x7662, "Asrock H81M-HDS", 0),
5258 /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
5259 SND_PCI_QUIRK(0x1043, 0x8733, "Asus Prime X370-Pro", 0),
5260 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5261 index e58537e13ad3..cf5d26642bcd 100644
5262 --- a/sound/pci/hda/patch_realtek.c
5263 +++ b/sound/pci/hda/patch_realtek.c
5264 @@ -388,6 +388,7 @@ static void alc_fill_eapd_coef(struct hda_codec *codec)
5265 case 0x10ec0285:
5266 case 0x10ec0298:
5267 case 0x10ec0289:
5268 + case 0x10ec0300:
5269 alc_update_coef_idx(codec, 0x10, 1<<9, 0);
5270 break;
5271 case 0x10ec0275:
5272 @@ -2830,6 +2831,7 @@ enum {
5273 ALC269_TYPE_ALC215,
5274 ALC269_TYPE_ALC225,
5275 ALC269_TYPE_ALC294,
5276 + ALC269_TYPE_ALC300,
5277 ALC269_TYPE_ALC700,
5278 };
5279
5280 @@ -2864,6 +2866,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
5281 case ALC269_TYPE_ALC215:
5282 case ALC269_TYPE_ALC225:
5283 case ALC269_TYPE_ALC294:
5284 + case ALC269_TYPE_ALC300:
5285 case ALC269_TYPE_ALC700:
5286 ssids = alc269_ssids;
5287 break;
5288 @@ -5358,6 +5361,16 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec,
5289 spec->gen.preferred_dacs = preferred_pairs;
5290 }
5291
5292 +/* The DAC of NID 0x3 will introduce click/pop noise on headphones, so invalidate it */
5293 +static void alc285_fixup_invalidate_dacs(struct hda_codec *codec,
5294 + const struct hda_fixup *fix, int action)
5295 +{
5296 + if (action != HDA_FIXUP_ACT_PRE_PROBE)
5297 + return;
5298 +
5299 + snd_hda_override_wcaps(codec, 0x03, 0);
5300 +}
5301 +
5302 /* for hda_fixup_thinkpad_acpi() */
5303 #include "thinkpad_helper.c"
5304
5305 @@ -5495,6 +5508,8 @@ enum {
5306 ALC255_FIXUP_DELL_HEADSET_MIC,
5307 ALC295_FIXUP_HP_X360,
5308 ALC221_FIXUP_HP_HEADSET_MIC,
5309 + ALC285_FIXUP_LENOVO_HEADPHONE_NOISE,
5310 + ALC295_FIXUP_HP_AUTO_MUTE,
5311 };
5312
5313 static const struct hda_fixup alc269_fixups[] = {
5314 @@ -5659,6 +5674,8 @@ static const struct hda_fixup alc269_fixups[] = {
5315 [ALC269_FIXUP_HP_MUTE_LED_MIC3] = {
5316 .type = HDA_FIXUP_FUNC,
5317 .v.func = alc269_fixup_hp_mute_led_mic3,
5318 + .chained = true,
5319 + .chain_id = ALC295_FIXUP_HP_AUTO_MUTE
5320 },
5321 [ALC269_FIXUP_HP_GPIO_LED] = {
5322 .type = HDA_FIXUP_FUNC,
5323 @@ -6362,6 +6379,14 @@ static const struct hda_fixup alc269_fixups[] = {
5324 .chained = true,
5325 .chain_id = ALC269_FIXUP_HEADSET_MIC
5326 },
5327 + [ALC285_FIXUP_LENOVO_HEADPHONE_NOISE] = {
5328 + .type = HDA_FIXUP_FUNC,
5329 + .v.func = alc285_fixup_invalidate_dacs,
5330 + },
5331 + [ALC295_FIXUP_HP_AUTO_MUTE] = {
5332 + .type = HDA_FIXUP_FUNC,
5333 + .v.func = alc_fixup_auto_mute_via_amp,
5334 + },
5335 };
5336
5337 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5338 @@ -6532,6 +6557,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
5339 SND_PCI_QUIRK(0x144d, 0xc740, "Samsung Ativ book 8 (NP870Z5G)", ALC269_FIXUP_ATIV_BOOK_8),
5340 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
5341 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
5342 + SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
5343 SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC233_FIXUP_LENOVO_MULTI_CODECS),
5344 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
5345 SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
5346 @@ -7034,6 +7060,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
5347 {0x12, 0x90a60130},
5348 {0x19, 0x03a11020},
5349 {0x21, 0x0321101f}),
5350 + SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_HEADPHONE_NOISE,
5351 + {0x12, 0x90a60130},
5352 + {0x14, 0x90170110},
5353 + {0x19, 0x04a11040},
5354 + {0x21, 0x04211020}),
5355 SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
5356 {0x12, 0x90a60120},
5357 {0x14, 0x90170110},
5358 @@ -7295,6 +7326,10 @@ static int patch_alc269(struct hda_codec *codec)
5359 spec->gen.mixer_nid = 0; /* ALC2x4 does not have any loopback mixer path */
5360 alc_update_coef_idx(codec, 0x6b, 0x0018, (1<<4) | (1<<3)); /* UAJ MIC Vref control by verb */
5361 break;
5362 + case 0x10ec0300:
5363 + spec->codec_variant = ALC269_TYPE_ALC300;
5364 + spec->gen.mixer_nid = 0; /* no loopback on ALC300 */
5365 + break;
5366 case 0x10ec0700:
5367 case 0x10ec0701:
5368 case 0x10ec0703:
5369 @@ -8404,6 +8439,7 @@ static const struct hda_device_id snd_hda_id_realtek[] = {
5370 HDA_CODEC_ENTRY(0x10ec0295, "ALC295", patch_alc269),
5371 HDA_CODEC_ENTRY(0x10ec0298, "ALC298", patch_alc269),
5372 HDA_CODEC_ENTRY(0x10ec0299, "ALC299", patch_alc269),
5373 + HDA_CODEC_ENTRY(0x10ec0300, "ALC300", patch_alc269),
5374 HDA_CODEC_REV_ENTRY(0x10ec0861, 0x100340, "ALC660", patch_alc861),
5375 HDA_CODEC_ENTRY(0x10ec0660, "ALC660-VD", patch_alc861vd),
5376 HDA_CODEC_ENTRY(0x10ec0861, "ALC861", patch_alc861),
5377 diff --git a/sound/soc/codecs/pcm186x.h b/sound/soc/codecs/pcm186x.h
5378 index 2c6ba55bf394..bb3f0c42a1cd 100644
5379 --- a/sound/soc/codecs/pcm186x.h
5380 +++ b/sound/soc/codecs/pcm186x.h
5381 @@ -139,7 +139,7 @@ enum pcm186x_type {
5382 #define PCM186X_MAX_REGISTER PCM186X_CURR_TRIM_CTRL
5383
5384 /* PCM186X_PAGE */
5385 -#define PCM186X_RESET 0xff
5386 +#define PCM186X_RESET 0xfe
5387
5388 /* PCM186X_ADCX_INPUT_SEL_X */
5389 #define PCM186X_ADC_INPUT_SEL_POL BIT(7)
5390 diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
5391 index db6976f4ddaa..9d9f6e41d81c 100644
5392 --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
5393 +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
5394 @@ -19,6 +19,7 @@
5395 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5396 */
5397
5398 +#include <linux/dmi.h>
5399 #include <linux/module.h>
5400 #include <linux/platform_device.h>
5401 #include <linux/slab.h>
5402 @@ -35,6 +36,8 @@
5403 #define CHT_PLAT_CLK_3_HZ 19200000
5404 #define CHT_CODEC_DAI "HiFi"
5405
5406 +#define QUIRK_PMC_PLT_CLK_0 0x01
5407 +
5408 struct cht_mc_private {
5409 struct clk *mclk;
5410 struct snd_soc_jack jack;
5411 @@ -385,11 +388,29 @@ static struct snd_soc_card snd_soc_card_cht = {
5412 .num_controls = ARRAY_SIZE(cht_mc_controls),
5413 };
5414
5415 +static const struct dmi_system_id cht_max98090_quirk_table[] = {
5416 + {
5417 + /* Swanky model Chromebook (Toshiba Chromebook 2) */
5418 + .matches = {
5419 + DMI_MATCH(DMI_PRODUCT_NAME, "Swanky"),
5420 + },
5421 + .driver_data = (void *)QUIRK_PMC_PLT_CLK_0,
5422 + },
5423 + {}
5424 +};
5425 +
5426 static int snd_cht_mc_probe(struct platform_device *pdev)
5427 {
5428 + const struct dmi_system_id *dmi_id;
5429 struct device *dev = &pdev->dev;
5430 int ret_val = 0;
5431 struct cht_mc_private *drv;
5432 + const char *mclk_name;
5433 + int quirks = 0;
5434 +
5435 + dmi_id = dmi_first_match(cht_max98090_quirk_table);
5436 + if (dmi_id)
5437 + quirks = (unsigned long)dmi_id->driver_data;
5438
5439 drv = devm_kzalloc(&pdev->dev, sizeof(*drv), GFP_KERNEL);
5440 if (!drv)
5441 @@ -411,11 +432,16 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
5442 snd_soc_card_cht.dev = &pdev->dev;
5443 snd_soc_card_set_drvdata(&snd_soc_card_cht, drv);
5444
5445 - drv->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3");
5446 + if (quirks & QUIRK_PMC_PLT_CLK_0)
5447 + mclk_name = "pmc_plt_clk_0";
5448 + else
5449 + mclk_name = "pmc_plt_clk_3";
5450 +
5451 + drv->mclk = devm_clk_get(&pdev->dev, mclk_name);
5452 if (IS_ERR(drv->mclk)) {
5453 dev_err(&pdev->dev,
5454 - "Failed to get MCLK from pmc_plt_clk_3: %ld\n",
5455 - PTR_ERR(drv->mclk));
5456 + "Failed to get MCLK from %s: %ld\n",
5457 + mclk_name, PTR_ERR(drv->mclk));
5458 return PTR_ERR(drv->mclk);
5459 }
5460
5461 diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c
5462 index e73c962590eb..079063d8038d 100644
5463 --- a/sound/sparc/cs4231.c
5464 +++ b/sound/sparc/cs4231.c
5465 @@ -1146,10 +1146,8 @@ static int snd_cs4231_playback_open(struct snd_pcm_substream *substream)
5466 runtime->hw = snd_cs4231_playback;
5467
5468 err = snd_cs4231_open(chip, CS4231_MODE_PLAY);
5469 - if (err < 0) {
5470 - snd_free_pages(runtime->dma_area, runtime->dma_bytes);
5471 + if (err < 0)
5472 return err;
5473 - }
5474 chip->playback_substream = substream;
5475 chip->p_periods_sent = 0;
5476 snd_pcm_set_sync(substream);
5477 @@ -1167,10 +1165,8 @@ static int snd_cs4231_capture_open(struct snd_pcm_substream *substream)
5478 runtime->hw = snd_cs4231_capture;
5479
5480 err = snd_cs4231_open(chip, CS4231_MODE_RECORD);
5481 - if (err < 0) {
5482 - snd_free_pages(runtime->dma_area, runtime->dma_bytes);
5483 + if (err < 0)
5484 return err;
5485 - }
5486 chip->capture_substream = substream;
5487 chip->c_periods_sent = 0;
5488 snd_pcm_set_sync(substream);
5489 diff --git a/tools/include/uapi/linux/prctl.h b/tools/include/uapi/linux/prctl.h
5490 index c0d7ea0bf5b6..b17201edfa09 100644
5491 --- a/tools/include/uapi/linux/prctl.h
5492 +++ b/tools/include/uapi/linux/prctl.h
5493 @@ -212,6 +212,7 @@ struct prctl_mm_map {
5494 #define PR_SET_SPECULATION_CTRL 53
5495 /* Speculation control variants */
5496 # define PR_SPEC_STORE_BYPASS 0
5497 +# define PR_SPEC_INDIRECT_BRANCH 1
5498 /* Return and control values for PR_SET/GET_SPECULATION_CTRL */
5499 # define PR_SPEC_NOT_AFFECTED 0
5500 # define PR_SPEC_PRCTL (1UL << 0)