Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0162-4.14.63-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 5 months ago) by niro
File size: 179128 byte(s)
-added up to patches-4.14.79
1 diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu
2 index 8355e79350b7..6cae60929cb6 100644
3 --- a/Documentation/ABI/testing/sysfs-devices-system-cpu
4 +++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
5 @@ -379,6 +379,7 @@ What: /sys/devices/system/cpu/vulnerabilities
6 /sys/devices/system/cpu/vulnerabilities/spectre_v1
7 /sys/devices/system/cpu/vulnerabilities/spectre_v2
8 /sys/devices/system/cpu/vulnerabilities/spec_store_bypass
9 + /sys/devices/system/cpu/vulnerabilities/l1tf
10 Date: January 2018
11 Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
12 Description: Information about CPU vulnerabilities
13 @@ -390,3 +391,26 @@ Description: Information about CPU vulnerabilities
14 "Not affected" CPU is not affected by the vulnerability
15 "Vulnerable" CPU is affected and no mitigation in effect
16 "Mitigation: $M" CPU is affected and mitigation $M is in effect
17 +
18 + Details about the l1tf file can be found in
19 + Documentation/admin-guide/l1tf.rst
20 +
21 +What: /sys/devices/system/cpu/smt
22 + /sys/devices/system/cpu/smt/active
23 + /sys/devices/system/cpu/smt/control
24 +Date: June 2018
25 +Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
26 +Description: Control Symetric Multi Threading (SMT)
27 +
28 + active: Tells whether SMT is active (enabled and siblings online)
29 +
30 + control: Read/write interface to control SMT. Possible
31 + values:
32 +
33 + "on" SMT is enabled
34 + "off" SMT is disabled
35 + "forceoff" SMT is force disabled. Cannot be changed.
36 + "notsupported" SMT is not supported by the CPU
37 +
38 + If control status is "forceoff" or "notsupported" writes
39 + are rejected.
40 diff --git a/Documentation/admin-guide/index.rst b/Documentation/admin-guide/index.rst
41 index 5bb9161dbe6a..78f8f00c369f 100644
42 --- a/Documentation/admin-guide/index.rst
43 +++ b/Documentation/admin-guide/index.rst
44 @@ -17,6 +17,15 @@ etc.
45 kernel-parameters
46 devices
47
48 +This section describes CPU vulnerabilities and provides an overview of the
49 +possible mitigations along with guidance for selecting mitigations if they
50 +are configurable at compile, boot or run time.
51 +
52 +.. toctree::
53 + :maxdepth: 1
54 +
55 + l1tf
56 +
57 Here is a set of documents aimed at users who are trying to track down
58 problems and bugs in particular.
59
60 diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
61 index d6d7669e667f..9841bad6f271 100644
62 --- a/Documentation/admin-guide/kernel-parameters.txt
63 +++ b/Documentation/admin-guide/kernel-parameters.txt
64 @@ -1888,10 +1888,84 @@
65 (virtualized real and unpaged mode) on capable
66 Intel chips. Default is 1 (enabled)
67
68 + kvm-intel.vmentry_l1d_flush=[KVM,Intel] Mitigation for L1 Terminal Fault
69 + CVE-2018-3620.
70 +
71 + Valid arguments: never, cond, always
72 +
73 + always: L1D cache flush on every VMENTER.
74 + cond: Flush L1D on VMENTER only when the code between
75 + VMEXIT and VMENTER can leak host memory.
76 + never: Disables the mitigation
77 +
78 + Default is cond (do L1 cache flush in specific instances)
79 +
80 kvm-intel.vpid= [KVM,Intel] Disable Virtual Processor Identification
81 feature (tagged TLBs) on capable Intel chips.
82 Default is 1 (enabled)
83
84 + l1tf= [X86] Control mitigation of the L1TF vulnerability on
85 + affected CPUs
86 +
87 + The kernel PTE inversion protection is unconditionally
88 + enabled and cannot be disabled.
89 +
90 + full
91 + Provides all available mitigations for the
92 + L1TF vulnerability. Disables SMT and
93 + enables all mitigations in the
94 + hypervisors, i.e. unconditional L1D flush.
95 +
96 + SMT control and L1D flush control via the
97 + sysfs interface is still possible after
98 + boot. Hypervisors will issue a warning
99 + when the first VM is started in a
100 + potentially insecure configuration,
101 + i.e. SMT enabled or L1D flush disabled.
102 +
103 + full,force
104 + Same as 'full', but disables SMT and L1D
105 + flush runtime control. Implies the
106 + 'nosmt=force' command line option.
107 + (i.e. sysfs control of SMT is disabled.)
108 +
109 + flush
110 + Leaves SMT enabled and enables the default
111 + hypervisor mitigation, i.e. conditional
112 + L1D flush.
113 +
114 + SMT control and L1D flush control via the
115 + sysfs interface is still possible after
116 + boot. Hypervisors will issue a warning
117 + when the first VM is started in a
118 + potentially insecure configuration,
119 + i.e. SMT enabled or L1D flush disabled.
120 +
121 + flush,nosmt
122 +
123 + Disables SMT and enables the default
124 + hypervisor mitigation.
125 +
126 + SMT control and L1D flush control via the
127 + sysfs interface is still possible after
128 + boot. Hypervisors will issue a warning
129 + when the first VM is started in a
130 + potentially insecure configuration,
131 + i.e. SMT enabled or L1D flush disabled.
132 +
133 + flush,nowarn
134 + Same as 'flush', but hypervisors will not
135 + warn when a VM is started in a potentially
136 + insecure configuration.
137 +
138 + off
139 + Disables hypervisor mitigations and doesn't
140 + emit any warnings.
141 +
142 + Default is 'flush'.
143 +
144 + For details see: Documentation/admin-guide/l1tf.rst
145 +
146 l2cr= [PPC]
147
148 l3cr= [PPC]
149 @@ -2595,6 +2669,10 @@
150 nosmt [KNL,S390] Disable symmetric multithreading (SMT).
151 Equivalent to smt=1.
152
153 + [KNL,x86] Disable symmetric multithreading (SMT).
154 + nosmt=force: Force disable SMT, cannot be undone
155 + via the sysfs control file.
156 +
157 nospectre_v2 [X86] Disable all mitigations for the Spectre variant 2
158 (indirect branch prediction) vulnerability. System may
159 allow data leaks with this option, which is equivalent
160 diff --git a/Documentation/admin-guide/l1tf.rst b/Documentation/admin-guide/l1tf.rst
161 new file mode 100644
162 index 000000000000..bae52b845de0
163 --- /dev/null
164 +++ b/Documentation/admin-guide/l1tf.rst
165 @@ -0,0 +1,610 @@
166 +L1TF - L1 Terminal Fault
167 +========================
168 +
169 +L1 Terminal Fault is a hardware vulnerability which allows unprivileged
170 +speculative access to data which is available in the Level 1 Data Cache
171 +when the page table entry controlling the virtual address, which is used
172 +for the access, has the Present bit cleared or other reserved bits set.
173 +
174 +Affected processors
175 +-------------------
176 +
177 +This vulnerability affects a wide range of Intel processors. The
178 +vulnerability is not present on:
179 +
180 + - Processors from AMD, Centaur and other non Intel vendors
181 +
182 + - Older processor models, where the CPU family is < 6
183 +
184 + - A range of Intel ATOM processors (Cedarview, Cloverview, Lincroft,
185 + Penwell, Pineview, Silvermont, Airmont, Merrifield)
186 +
187 + - The Intel XEON PHI family
188 +
189 + - Intel processors which have the ARCH_CAP_RDCL_NO bit set in the
190 + IA32_ARCH_CAPABILITIES MSR. If the bit is set the CPU is not affected
191 + by the Meltdown vulnerability either. These CPUs should become
192 + available by end of 2018.
193 +
194 +Whether a processor is affected or not can be read out from the L1TF
195 +vulnerability file in sysfs. See :ref:`l1tf_sys_info`.
196 +
197 +Related CVEs
198 +------------
199 +
200 +The following CVE entries are related to the L1TF vulnerability:
201 +
202 + ============= ================= ==============================
203 + CVE-2018-3615 L1 Terminal Fault SGX related aspects
204 + CVE-2018-3620 L1 Terminal Fault OS, SMM related aspects
205 + CVE-2018-3646 L1 Terminal Fault Virtualization related aspects
206 + ============= ================= ==============================
207 +
208 +Problem
209 +-------
210 +
211 +If an instruction accesses a virtual address for which the relevant page
212 +table entry (PTE) has the Present bit cleared or other reserved bits set,
213 +then speculative execution ignores the invalid PTE and loads the referenced
214 +data if it is present in the Level 1 Data Cache, as if the page referenced
215 +by the address bits in the PTE was still present and accessible.
216 +
217 +While this is a purely speculative mechanism and the instruction will raise
218 +a page fault when it is retired eventually, the pure act of loading the
219 +data and making it available to other speculative instructions opens up the
220 +opportunity for side channel attacks to unprivileged malicious code,
221 +similar to the Meltdown attack.
222 +
223 +While Meltdown breaks the user space to kernel space protection, L1TF
224 +allows to attack any physical memory address in the system and the attack
225 +works across all protection domains. It allows an attack of SGX and also
226 +works from inside virtual machines because the speculation bypasses the
227 +extended page table (EPT) protection mechanism.
228 +
229 +
230 +Attack scenarios
231 +----------------
232 +
233 +1. Malicious user space
234 +^^^^^^^^^^^^^^^^^^^^^^^
235 +
236 + Operating Systems store arbitrary information in the address bits of a
237 + PTE which is marked non present. This allows a malicious user space
238 + application to attack the physical memory to which these PTEs resolve.
239 + In some cases user-space can maliciously influence the information
240 + encoded in the address bits of the PTE, thus making attacks more
241 + deterministic and more practical.
242 +
243 + The Linux kernel contains a mitigation for this attack vector, PTE
244 + inversion, which is permanently enabled and has no performance
245 + impact. The kernel ensures that the address bits of PTEs, which are not
246 + marked present, never point to cacheable physical memory space.
247 +
248 + A system with an up to date kernel is protected against attacks from
249 + malicious user space applications.
250 +
251 +2. Malicious guest in a virtual machine
252 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
253 +
254 + The fact that L1TF breaks all domain protections allows malicious guest
255 + OSes, which can control the PTEs directly, and malicious guest user
256 + space applications, which run on an unprotected guest kernel lacking the
257 + PTE inversion mitigation for L1TF, to attack physical host memory.
258 +
259 + A special aspect of L1TF in the context of virtualization is symmetric
260 + multi threading (SMT). The Intel implementation of SMT is called
261 + HyperThreading. The fact that Hyperthreads on the affected processors
262 + share the L1 Data Cache (L1D) is important for this. As the flaw allows
263 + only to attack data which is present in L1D, a malicious guest running
264 + on one Hyperthread can attack the data which is brought into the L1D by
265 + the context which runs on the sibling Hyperthread of the same physical
266 + core. This context can be host OS, host user space or a different guest.
267 +
268 + If the processor does not support Extended Page Tables, the attack is
269 + only possible, when the hypervisor does not sanitize the content of the
270 + effective (shadow) page tables.
271 +
272 + While solutions exist to mitigate these attack vectors fully, these
273 + mitigations are not enabled by default in the Linux kernel because they
274 + can affect performance significantly. The kernel provides several
275 + mechanisms which can be utilized to address the problem depending on the
276 + deployment scenario. The mitigations, their protection scope and impact
277 + are described in the next sections.
278 +
279 + The default mitigations and the rationale for choosing them are explained
280 + at the end of this document. See :ref:`default_mitigations`.
281 +
282 +.. _l1tf_sys_info:
283 +
284 +L1TF system information
285 +-----------------------
286 +
287 +The Linux kernel provides a sysfs interface to enumerate the current L1TF
288 +status of the system: whether the system is vulnerable, and which
289 +mitigations are active. The relevant sysfs file is:
290 +
291 +/sys/devices/system/cpu/vulnerabilities/l1tf
292 +
293 +The possible values in this file are:
294 +
295 + =========================== ===============================
296 + 'Not affected' The processor is not vulnerable
297 + 'Mitigation: PTE Inversion' The host protection is active
298 + =========================== ===============================
299 +
300 +If KVM/VMX is enabled and the processor is vulnerable then the following
301 +information is appended to the 'Mitigation: PTE Inversion' part:
302 +
303 + - SMT status:
304 +
305 + ===================== ================
306 + 'VMX: SMT vulnerable' SMT is enabled
307 + 'VMX: SMT disabled' SMT is disabled
308 + ===================== ================
309 +
310 + - L1D Flush mode:
311 +
312 + ================================ ====================================
313 + 'L1D vulnerable' L1D flushing is disabled
314 +
315 + 'L1D conditional cache flushes' L1D flush is conditionally enabled
316 +
317 + 'L1D cache flushes' L1D flush is unconditionally enabled
318 + ================================ ====================================
319 +
320 +The resulting grade of protection is discussed in the following sections.
321 +
322 +
323 +Host mitigation mechanism
324 +-------------------------
325 +
326 +The kernel is unconditionally protected against L1TF attacks from malicious
327 +user space running on the host.
328 +
329 +
330 +Guest mitigation mechanisms
331 +---------------------------
332 +
333 +.. _l1d_flush:
334 +
335 +1. L1D flush on VMENTER
336 +^^^^^^^^^^^^^^^^^^^^^^^
337 +
338 + To make sure that a guest cannot attack data which is present in the L1D
339 + the hypervisor flushes the L1D before entering the guest.
340 +
341 + Flushing the L1D evicts not only the data which should not be accessed
342 + by a potentially malicious guest, it also flushes the guest
343 + data. Flushing the L1D has a performance impact as the processor has to
344 + bring the flushed guest data back into the L1D. Depending on the
345 + frequency of VMEXIT/VMENTER and the type of computations in the guest
346 + performance degradation in the range of 1% to 50% has been observed. For
347 + scenarios where guest VMEXIT/VMENTER are rare the performance impact is
348 + minimal. Virtio and mechanisms like posted interrupts are designed to
349 + confine the VMEXITs to a bare minimum, but specific configurations and
350 + application scenarios might still suffer from a high VMEXIT rate.
351 +
352 + The kernel provides two L1D flush modes:
353 + - conditional ('cond')
354 + - unconditional ('always')
355 +
356 + The conditional mode avoids L1D flushing after VMEXITs which execute
357 + only audited code paths before the corresponding VMENTER. These code
358 + paths have been verified that they cannot expose secrets or other
359 + interesting data to an attacker, but they can leak information about the
360 + address space layout of the hypervisor.
361 +
362 + Unconditional mode flushes L1D on all VMENTER invocations and provides
363 + maximum protection. It has a higher overhead than the conditional
364 + mode. The overhead cannot be quantified correctly as it depends on the
365 + workload scenario and the resulting number of VMEXITs.
366 +
367 + The general recommendation is to enable L1D flush on VMENTER. The kernel
368 + defaults to conditional mode on affected processors.
369 +
370 + **Note**, that L1D flush does not prevent the SMT problem because the
371 + sibling thread will also bring back its data into the L1D which makes it
372 + attackable again.
373 +
374 + L1D flush can be controlled by the administrator via the kernel command
375 + line and sysfs control files. See :ref:`mitigation_control_command_line`
376 + and :ref:`mitigation_control_kvm`.
377 +
378 +.. _guest_confinement:
379 +
380 +2. Guest VCPU confinement to dedicated physical cores
381 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
382 +
383 + To address the SMT problem, it is possible to make a guest or a group of
384 + guests affine to one or more physical cores. The proper mechanism for
385 + that is to utilize exclusive cpusets to ensure that no other guest or
386 + host tasks can run on these cores.
387 +
388 + If only a single guest or related guests run on sibling SMT threads on
389 + the same physical core then they can only attack their own memory and
390 + restricted parts of the host memory.
391 +
392 + Host memory is attackable, when one of the sibling SMT threads runs in
393 + host OS (hypervisor) context and the other in guest context. The amount
394 + of valuable information from the host OS context depends on the context
395 + which the host OS executes, i.e. interrupts, soft interrupts and kernel
396 + threads. The amount of valuable data from these contexts cannot be
397 + declared as non-interesting for an attacker without deep inspection of
398 + the code.
399 +
400 + **Note**, that assigning guests to a fixed set of physical cores affects
401 + the ability of the scheduler to do load balancing and might have
402 + negative effects on CPU utilization depending on the hosting
403 + scenario. Disabling SMT might be a viable alternative for particular
404 + scenarios.
405 +
406 + For further information about confining guests to a single or to a group
407 + of cores consult the cpusets documentation:
408 +
409 + https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt
410 +
411 +.. _interrupt_isolation:
412 +
413 +3. Interrupt affinity
414 +^^^^^^^^^^^^^^^^^^^^^
415 +
416 + Interrupts can be made affine to logical CPUs. This is not universally
417 + true because there are types of interrupts which are truly per CPU
418 + interrupts, e.g. the local timer interrupt. Aside of that multi queue
419 + devices affine their interrupts to single CPUs or groups of CPUs per
420 + queue without allowing the administrator to control the affinities.
421 +
422 + Moving the interrupts, which can be affinity controlled, away from CPUs
423 + which run untrusted guests, reduces the attack vector space.
424 +
425 + Whether the interrupts with are affine to CPUs, which run untrusted
426 + guests, provide interesting data for an attacker depends on the system
427 + configuration and the scenarios which run on the system. While for some
428 + of the interrupts it can be assumed that they won't expose interesting
429 + information beyond exposing hints about the host OS memory layout, there
430 + is no way to make general assumptions.
431 +
432 + Interrupt affinity can be controlled by the administrator via the
433 + /proc/irq/$NR/smp_affinity[_list] files. Limited documentation is
434 + available at:
435 +
436 + https://www.kernel.org/doc/Documentation/IRQ-affinity.txt
437 +
438 +.. _smt_control:
439 +
440 +4. SMT control
441 +^^^^^^^^^^^^^^
442 +
443 + To prevent the SMT issues of L1TF it might be necessary to disable SMT
444 + completely. Disabling SMT can have a significant performance impact, but
445 + the impact depends on the hosting scenario and the type of workloads.
446 + The impact of disabling SMT needs also to be weighted against the impact
447 + of other mitigation solutions like confining guests to dedicated cores.
448 +
449 + The kernel provides a sysfs interface to retrieve the status of SMT and
450 + to control it. It also provides a kernel command line interface to
451 + control SMT.
452 +
453 + The kernel command line interface consists of the following options:
454 +
455 + =========== ==========================================================
456 + nosmt Affects the bring up of the secondary CPUs during boot. The
457 + kernel tries to bring all present CPUs online during the
458 + boot process. "nosmt" makes sure that from each physical
459 + core only one - the so called primary (hyper) thread is
460 + activated. Due to a design flaw of Intel processors related
461 + to Machine Check Exceptions the non primary siblings have
462 + to be brought up at least partially and are then shut down
463 + again. "nosmt" can be undone via the sysfs interface.
464 +
465 + nosmt=force Has the same effect as "nosmt" but it does not allow to
466 + undo the SMT disable via the sysfs interface.
467 + =========== ==========================================================
468 +
469 + The sysfs interface provides two files:
470 +
471 + - /sys/devices/system/cpu/smt/control
472 + - /sys/devices/system/cpu/smt/active
473 +
474 + /sys/devices/system/cpu/smt/control:
475 +
476 + This file allows to read out the SMT control state and provides the
477 + ability to disable or (re)enable SMT. The possible states are:
478 +
479 + ============== ===================================================
480 + on SMT is supported by the CPU and enabled. All
481 + logical CPUs can be onlined and offlined without
482 + restrictions.
483 +
484 + off SMT is supported by the CPU and disabled. Only
485 + the so called primary SMT threads can be onlined
486 + and offlined without restrictions. An attempt to
487 + online a non-primary sibling is rejected
488 +
489 + forceoff Same as 'off' but the state cannot be controlled.
490 + Attempts to write to the control file are rejected.
491 +
492 + notsupported The processor does not support SMT. It's therefore
493 + not affected by the SMT implications of L1TF.
494 + Attempts to write to the control file are rejected.
495 + ============== ===================================================
496 +
497 + The possible states which can be written into this file to control SMT
498 + state are:
499 +
500 + - on
501 + - off
502 + - forceoff
503 +
504 + /sys/devices/system/cpu/smt/active:
505 +
506 + This file reports whether SMT is enabled and active, i.e. if on any
507 + physical core two or more sibling threads are online.
508 +
509 + SMT control is also possible at boot time via the l1tf kernel command
510 + line parameter in combination with L1D flush control. See
511 + :ref:`mitigation_control_command_line`.
512 +
513 +5. Disabling EPT
514 +^^^^^^^^^^^^^^^^
515 +
516 + Disabling EPT for virtual machines provides full mitigation for L1TF even
517 + with SMT enabled, because the effective page tables for guests are
518 + managed and sanitized by the hypervisor. Though disabling EPT has a
519 + significant performance impact especially when the Meltdown mitigation
520 + KPTI is enabled.
521 +
522 + EPT can be disabled in the hypervisor via the 'kvm-intel.ept' parameter.
523 +
524 +There is ongoing research and development for new mitigation mechanisms to
525 +address the performance impact of disabling SMT or EPT.
526 +
527 +.. _mitigation_control_command_line:
528 +
529 +Mitigation control on the kernel command line
530 +---------------------------------------------
531 +
532 +The kernel command line allows to control the L1TF mitigations at boot
533 +time with the option "l1tf=". The valid arguments for this option are:
534 +
535 + ============ =============================================================
536 + full Provides all available mitigations for the L1TF
537 + vulnerability. Disables SMT and enables all mitigations in
538 + the hypervisors, i.e. unconditional L1D flushing
539 +
540 + SMT control and L1D flush control via the sysfs interface
541 + is still possible after boot. Hypervisors will issue a
542 + warning when the first VM is started in a potentially
543 + insecure configuration, i.e. SMT enabled or L1D flush
544 + disabled.
545 +
546 + full,force Same as 'full', but disables SMT and L1D flush runtime
547 + control. Implies the 'nosmt=force' command line option.
548 + (i.e. sysfs control of SMT is disabled.)
549 +
550 + flush Leaves SMT enabled and enables the default hypervisor
551 + mitigation, i.e. conditional L1D flushing
552 +
553 + SMT control and L1D flush control via the sysfs interface
554 + is still possible after boot. Hypervisors will issue a
555 + warning when the first VM is started in a potentially
556 + insecure configuration, i.e. SMT enabled or L1D flush
557 + disabled.
558 +
559 + flush,nosmt Disables SMT and enables the default hypervisor mitigation,
560 + i.e. conditional L1D flushing.
561 +
562 + SMT control and L1D flush control via the sysfs interface
563 + is still possible after boot. Hypervisors will issue a
564 + warning when the first VM is started in a potentially
565 + insecure configuration, i.e. SMT enabled or L1D flush
566 + disabled.
567 +
568 + flush,nowarn Same as 'flush', but hypervisors will not warn when a VM is
569 + started in a potentially insecure configuration.
570 +
571 + off Disables hypervisor mitigations and doesn't emit any
572 + warnings.
573 + ============ =============================================================
574 +
575 +The default is 'flush'. For details about L1D flushing see :ref:`l1d_flush`.
576 +
577 +
578 +.. _mitigation_control_kvm:
579 +
580 +Mitigation control for KVM - module parameter
581 +-------------------------------------------------------------
582 +
583 +The KVM hypervisor mitigation mechanism, flushing the L1D cache when
584 +entering a guest, can be controlled with a module parameter.
585 +
586 +The option/parameter is "kvm-intel.vmentry_l1d_flush=". It takes the
587 +following arguments:
588 +
589 + ============ ==============================================================
590 + always L1D cache flush on every VMENTER.
591 +
592 + cond Flush L1D on VMENTER only when the code between VMEXIT and
593 + VMENTER can leak host memory which is considered
594 + interesting for an attacker. This still can leak host memory
595 + which allows e.g. to determine the hosts address space layout.
596 +
597 + never Disables the mitigation
598 + ============ ==============================================================
599 +
600 +The parameter can be provided on the kernel command line, as a module
601 +parameter when loading the modules and at runtime modified via the sysfs
602 +file:
603 +
604 +/sys/module/kvm_intel/parameters/vmentry_l1d_flush
605 +
606 +The default is 'cond'. If 'l1tf=full,force' is given on the kernel command
607 +line, then 'always' is enforced and the kvm-intel.vmentry_l1d_flush
608 +module parameter is ignored and writes to the sysfs file are rejected.
609 +
610 +
611 +Mitigation selection guide
612 +--------------------------
613 +
614 +1. No virtualization in use
615 +^^^^^^^^^^^^^^^^^^^^^^^^^^^
616 +
617 + The system is protected by the kernel unconditionally and no further
618 + action is required.
619 +
620 +2. Virtualization with trusted guests
621 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
622 +
623 + If the guest comes from a trusted source and the guest OS kernel is
624 + guaranteed to have the L1TF mitigations in place the system is fully
625 + protected against L1TF and no further action is required.
626 +
627 + To avoid the overhead of the default L1D flushing on VMENTER the
628 + administrator can disable the flushing via the kernel command line and
629 + sysfs control files. See :ref:`mitigation_control_command_line` and
630 + :ref:`mitigation_control_kvm`.
631 +
632 +
633 +3. Virtualization with untrusted guests
634 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
635 +
636 +3.1. SMT not supported or disabled
637 +""""""""""""""""""""""""""""""""""
638 +
639 + If SMT is not supported by the processor or disabled in the BIOS or by
640 + the kernel, it's only required to enforce L1D flushing on VMENTER.
641 +
642 + Conditional L1D flushing is the default behaviour and can be tuned. See
643 + :ref:`mitigation_control_command_line` and :ref:`mitigation_control_kvm`.
644 +
645 +3.2. EPT not supported or disabled
646 +""""""""""""""""""""""""""""""""""
647 +
648 + If EPT is not supported by the processor or disabled in the hypervisor,
649 + the system is fully protected. SMT can stay enabled and L1D flushing on
650 + VMENTER is not required.
651 +
652 + EPT can be disabled in the hypervisor via the 'kvm-intel.ept' parameter.
653 +
654 +3.3. SMT and EPT supported and active
655 +"""""""""""""""""""""""""""""""""""""
656 +
657 + If SMT and EPT are supported and active then various degrees of
658 + mitigations can be employed:
659 +
660 + - L1D flushing on VMENTER:
661 +
662 + L1D flushing on VMENTER is the minimal protection requirement, but it
663 + is only potent in combination with other mitigation methods.
664 +
665 + Conditional L1D flushing is the default behaviour and can be tuned. See
666 + :ref:`mitigation_control_command_line` and :ref:`mitigation_control_kvm`.
667 +
668 + - Guest confinement:
669 +
670 + Confinement of guests to a single or a group of physical cores which
671 + are not running any other processes, can reduce the attack surface
672 + significantly, but interrupts, soft interrupts and kernel threads can
673 + still expose valuable data to a potential attacker. See
674 + :ref:`guest_confinement`.
675 +
676 + - Interrupt isolation:
677 +
678 + Isolating the guest CPUs from interrupts can reduce the attack surface
679 + further, but still allows a malicious guest to explore a limited amount
680 + of host physical memory. This can at least be used to gain knowledge
681 + about the host address space layout. The interrupts which have a fixed
682 + affinity to the CPUs which run the untrusted guests can depending on
683 + the scenario still trigger soft interrupts and schedule kernel threads
684 + which might expose valuable information. See
685 + :ref:`interrupt_isolation`.
686 +
687 +The above three mitigation methods combined can provide protection to a
688 +certain degree, but the risk of the remaining attack surface has to be
689 +carefully analyzed. For full protection the following methods are
690 +available:
691 +
692 + - Disabling SMT:
693 +
694 + Disabling SMT and enforcing the L1D flushing provides the maximum
695 + amount of protection. This mitigation is not depending on any of the
696 + above mitigation methods.
697 +
698 + SMT control and L1D flushing can be tuned by the command line
699 + parameters 'nosmt', 'l1tf', 'kvm-intel.vmentry_l1d_flush' and at run
700 + time with the matching sysfs control files. See :ref:`smt_control`,
701 + :ref:`mitigation_control_command_line` and
702 + :ref:`mitigation_control_kvm`.
703 +
704 + - Disabling EPT:
705 +
706 + Disabling EPT provides the maximum amount of protection as well. It is
707 + not depending on any of the above mitigation methods. SMT can stay
708 + enabled and L1D flushing is not required, but the performance impact is
709 + significant.
710 +
711 + EPT can be disabled in the hypervisor via the 'kvm-intel.ept'
712 + parameter.
713 +
714 +3.4. Nested virtual machines
715 +""""""""""""""""""""""""""""
716 +
717 +When nested virtualization is in use, three operating systems are involved:
718 +the bare metal hypervisor, the nested hypervisor and the nested virtual
719 +machine. VMENTER operations from the nested hypervisor into the nested
720 +guest will always be processed by the bare metal hypervisor. If KVM is the
721 +bare metal hypervisor it wiil:
722 +
723 + - Flush the L1D cache on every switch from the nested hypervisor to the
724 + nested virtual machine, so that the nested hypervisor's secrets are not
725 + exposed to the nested virtual machine;
726 +
727 + - Flush the L1D cache on every switch from the nested virtual machine to
728 + the nested hypervisor; this is a complex operation, and flushing the L1D
729 + cache avoids that the bare metal hypervisor's secrets are exposed to the
730 + nested virtual machine;
731 +
732 + - Instruct the nested hypervisor to not perform any L1D cache flush. This
733 + is an optimization to avoid double L1D flushing.
734 +
735 +
736 +.. _default_mitigations:
737 +
738 +Default mitigations
739 +-------------------
740 +
741 + The kernel default mitigations for vulnerable processors are:
742 +
743 + - PTE inversion to protect against malicious user space. This is done
744 + unconditionally and cannot be controlled.
745 +
746 + - L1D conditional flushing on VMENTER when EPT is enabled for
747 + a guest.
748 +
749 + The kernel does not by default enforce the disabling of SMT, which leaves
750 + SMT systems vulnerable when running untrusted guests with EPT enabled.
751 +
752 + The rationale for this choice is:
753 +
754 + - Force disabling SMT can break existing setups, especially with
755 + unattended updates.
756 +
757 + - If regular users run untrusted guests on their machine, then L1TF is
758 + just an add on to other malware which might be embedded in an untrusted
759 + guest, e.g. spam-bots or attacks on the local network.
760 +
761 + There is no technical way to prevent a user from running untrusted code
762 + on their machines blindly.
763 +
764 + - It's technically extremely unlikely and from today's knowledge even
765 + impossible that L1TF can be exploited via the most popular attack
766 + mechanisms like JavaScript because these mechanisms have no way to
767 + control PTEs. If this would be possible and not other mitigation would
768 + be possible, then the default might be different.
769 +
770 + - The administrators of cloud and hosting setups have to carefully
771 + analyze the risk for their scenarios and make the appropriate
772 + mitigation choices, which might even vary across their deployed
773 + machines and also result in other changes of their overall setup.
774 + There is no way for the kernel to provide a sensible default for this
775 + kind of scenarios.
776 diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
777 index 88ad78c6f605..5d12166bd66b 100644
778 --- a/Documentation/virtual/kvm/api.txt
779 +++ b/Documentation/virtual/kvm/api.txt
780 @@ -123,14 +123,15 @@ memory layout to fit in user mode), check KVM_CAP_MIPS_VZ and use the
781 flag KVM_VM_MIPS_VZ.
782
783
784 -4.3 KVM_GET_MSR_INDEX_LIST
785 +4.3 KVM_GET_MSR_INDEX_LIST, KVM_GET_MSR_FEATURE_INDEX_LIST
786
787 -Capability: basic
788 +Capability: basic, KVM_CAP_GET_MSR_FEATURES for KVM_GET_MSR_FEATURE_INDEX_LIST
789 Architectures: x86
790 -Type: system
791 +Type: system ioctl
792 Parameters: struct kvm_msr_list (in/out)
793 Returns: 0 on success; -1 on error
794 Errors:
795 + EFAULT: the msr index list cannot be read from or written to
796 E2BIG: the msr index list is to be to fit in the array specified by
797 the user.
798
799 @@ -139,16 +140,23 @@ struct kvm_msr_list {
800 __u32 indices[0];
801 };
802
803 -This ioctl returns the guest msrs that are supported. The list varies
804 -by kvm version and host processor, but does not change otherwise. The
805 -user fills in the size of the indices array in nmsrs, and in return
806 -kvm adjusts nmsrs to reflect the actual number of msrs and fills in
807 -the indices array with their numbers.
808 +The user fills in the size of the indices array in nmsrs, and in return
809 +kvm adjusts nmsrs to reflect the actual number of msrs and fills in the
810 +indices array with their numbers.
811 +
812 +KVM_GET_MSR_INDEX_LIST returns the guest msrs that are supported. The list
813 +varies by kvm version and host processor, but does not change otherwise.
814
815 Note: if kvm indicates supports MCE (KVM_CAP_MCE), then the MCE bank MSRs are
816 not returned in the MSR list, as different vcpus can have a different number
817 of banks, as set via the KVM_X86_SETUP_MCE ioctl.
818
819 +KVM_GET_MSR_FEATURE_INDEX_LIST returns the list of MSRs that can be passed
820 +to the KVM_GET_MSRS system ioctl. This lets userspace probe host capabilities
821 +and processor features that are exposed via MSRs (e.g., VMX capabilities).
822 +This list also varies by kvm version and host processor, but does not change
823 +otherwise.
824 +
825
826 4.4 KVM_CHECK_EXTENSION
827
828 @@ -475,14 +483,22 @@ Support for this has been removed. Use KVM_SET_GUEST_DEBUG instead.
829
830 4.18 KVM_GET_MSRS
831
832 -Capability: basic
833 +Capability: basic (vcpu), KVM_CAP_GET_MSR_FEATURES (system)
834 Architectures: x86
835 -Type: vcpu ioctl
836 +Type: system ioctl, vcpu ioctl
837 Parameters: struct kvm_msrs (in/out)
838 -Returns: 0 on success, -1 on error
839 +Returns: number of msrs successfully returned;
840 + -1 on error
841 +
842 +When used as a system ioctl:
843 +Reads the values of MSR-based features that are available for the VM. This
844 +is similar to KVM_GET_SUPPORTED_CPUID, but it returns MSR indices and values.
845 +The list of msr-based features can be obtained using KVM_GET_MSR_FEATURE_INDEX_LIST
846 +in a system ioctl.
847
848 +When used as a vcpu ioctl:
849 Reads model-specific registers from the vcpu. Supported msr indices can
850 -be obtained using KVM_GET_MSR_INDEX_LIST.
851 +be obtained using KVM_GET_MSR_INDEX_LIST in a system ioctl.
852
853 struct kvm_msrs {
854 __u32 nmsrs; /* number of msrs in entries */
855 diff --git a/Makefile b/Makefile
856 index d407ecfdee0b..f3bb9428b3dc 100644
857 --- a/Makefile
858 +++ b/Makefile
859 @@ -1,7 +1,7 @@
860 # SPDX-License-Identifier: GPL-2.0
861 VERSION = 4
862 PATCHLEVEL = 14
863 -SUBLEVEL = 62
864 +SUBLEVEL = 63
865 EXTRAVERSION =
866 NAME = Petit Gorille
867
868 diff --git a/arch/Kconfig b/arch/Kconfig
869 index 400b9e1b2f27..4e01862f58e4 100644
870 --- a/arch/Kconfig
871 +++ b/arch/Kconfig
872 @@ -13,6 +13,9 @@ config KEXEC_CORE
873 config HAVE_IMA_KEXEC
874 bool
875
876 +config HOTPLUG_SMT
877 + bool
878 +
879 config OPROFILE
880 tristate "OProfile system profiling"
881 depends on PROFILING
882 diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
883 index 6c7eb54be9e2..d64438bfa68b 100644
884 --- a/arch/arm/boot/dts/imx6sx.dtsi
885 +++ b/arch/arm/boot/dts/imx6sx.dtsi
886 @@ -1305,7 +1305,7 @@
887 0x82000000 0 0x08000000 0x08000000 0 0x00f00000>;
888 bus-range = <0x00 0xff>;
889 num-lanes = <1>;
890 - interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
891 + interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
892 clocks = <&clks IMX6SX_CLK_PCIE_REF_125M>,
893 <&clks IMX6SX_CLK_PCIE_AXI>,
894 <&clks IMX6SX_CLK_LVDS1_OUT>,
895 diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
896 index 1fd3eb5b66c6..89e684fd795f 100644
897 --- a/arch/parisc/Kconfig
898 +++ b/arch/parisc/Kconfig
899 @@ -201,7 +201,7 @@ config PREFETCH
900
901 config MLONGCALLS
902 bool "Enable the -mlong-calls compiler option for big kernels"
903 - def_bool y if (!MODULES)
904 + default y
905 depends on PA8X00
906 help
907 If you configure the kernel to include many drivers built-in instead
908 diff --git a/arch/parisc/include/asm/barrier.h b/arch/parisc/include/asm/barrier.h
909 new file mode 100644
910 index 000000000000..dbaaca84f27f
911 --- /dev/null
912 +++ b/arch/parisc/include/asm/barrier.h
913 @@ -0,0 +1,32 @@
914 +/* SPDX-License-Identifier: GPL-2.0 */
915 +#ifndef __ASM_BARRIER_H
916 +#define __ASM_BARRIER_H
917 +
918 +#ifndef __ASSEMBLY__
919 +
920 +/* The synchronize caches instruction executes as a nop on systems in
921 + which all memory references are performed in order. */
922 +#define synchronize_caches() __asm__ __volatile__ ("sync" : : : "memory")
923 +
924 +#if defined(CONFIG_SMP)
925 +#define mb() do { synchronize_caches(); } while (0)
926 +#define rmb() mb()
927 +#define wmb() mb()
928 +#define dma_rmb() mb()
929 +#define dma_wmb() mb()
930 +#else
931 +#define mb() barrier()
932 +#define rmb() barrier()
933 +#define wmb() barrier()
934 +#define dma_rmb() barrier()
935 +#define dma_wmb() barrier()
936 +#endif
937 +
938 +#define __smp_mb() mb()
939 +#define __smp_rmb() mb()
940 +#define __smp_wmb() mb()
941 +
942 +#include <asm-generic/barrier.h>
943 +
944 +#endif /* !__ASSEMBLY__ */
945 +#endif /* __ASM_BARRIER_H */
946 diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
947 index e95207c0565e..1b4732e20137 100644
948 --- a/arch/parisc/kernel/entry.S
949 +++ b/arch/parisc/kernel/entry.S
950 @@ -481,6 +481,8 @@
951 /* Release pa_tlb_lock lock without reloading lock address. */
952 .macro tlb_unlock0 spc,tmp
953 #ifdef CONFIG_SMP
954 + or,COND(=) %r0,\spc,%r0
955 + sync
956 or,COND(=) %r0,\spc,%r0
957 stw \spc,0(\tmp)
958 #endif
959 diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S
960 index 67b0f7532e83..3e163df49cf3 100644
961 --- a/arch/parisc/kernel/pacache.S
962 +++ b/arch/parisc/kernel/pacache.S
963 @@ -354,6 +354,7 @@ ENDPROC_CFI(flush_data_cache_local)
964 .macro tlb_unlock la,flags,tmp
965 #ifdef CONFIG_SMP
966 ldi 1,\tmp
967 + sync
968 stw \tmp,0(\la)
969 mtsm \flags
970 #endif
971 diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
972 index e775f80ae28c..4886a6db42e9 100644
973 --- a/arch/parisc/kernel/syscall.S
974 +++ b/arch/parisc/kernel/syscall.S
975 @@ -633,6 +633,7 @@ cas_action:
976 sub,<> %r28, %r25, %r0
977 2: stw,ma %r24, 0(%r26)
978 /* Free lock */
979 + sync
980 stw,ma %r20, 0(%sr2,%r20)
981 #if ENABLE_LWS_DEBUG
982 /* Clear thread register indicator */
983 @@ -647,6 +648,7 @@ cas_action:
984 3:
985 /* Error occurred on load or store */
986 /* Free lock */
987 + sync
988 stw %r20, 0(%sr2,%r20)
989 #if ENABLE_LWS_DEBUG
990 stw %r0, 4(%sr2,%r20)
991 @@ -848,6 +850,7 @@ cas2_action:
992
993 cas2_end:
994 /* Free lock */
995 + sync
996 stw,ma %r20, 0(%sr2,%r20)
997 /* Enable interrupts */
998 ssm PSW_SM_I, %r0
999 @@ -858,6 +861,7 @@ cas2_end:
1000 22:
1001 /* Error occurred on load or store */
1002 /* Free lock */
1003 + sync
1004 stw %r20, 0(%sr2,%r20)
1005 ssm PSW_SM_I, %r0
1006 ldo 1(%r0),%r28
1007 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
1008 index 7483cd514c32..1c63a4b5320d 100644
1009 --- a/arch/x86/Kconfig
1010 +++ b/arch/x86/Kconfig
1011 @@ -176,6 +176,7 @@ config X86
1012 select HAVE_SYSCALL_TRACEPOINTS
1013 select HAVE_UNSTABLE_SCHED_CLOCK
1014 select HAVE_USER_RETURN_NOTIFIER
1015 + select HOTPLUG_SMT if SMP
1016 select IRQ_FORCED_THREADING
1017 select PCI_LOCKLESS_CONFIG
1018 select PERF_EVENTS
1019 diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
1020 index 5f01671c68f2..a1ed92aae12a 100644
1021 --- a/arch/x86/include/asm/apic.h
1022 +++ b/arch/x86/include/asm/apic.h
1023 @@ -10,6 +10,7 @@
1024 #include <asm/fixmap.h>
1025 #include <asm/mpspec.h>
1026 #include <asm/msr.h>
1027 +#include <asm/hardirq.h>
1028
1029 #define ARCH_APICTIMER_STOPS_ON_C3 1
1030
1031 @@ -613,12 +614,20 @@ extern int default_check_phys_apicid_present(int phys_apicid);
1032 #endif
1033
1034 #endif /* CONFIG_X86_LOCAL_APIC */
1035 +
1036 +#ifdef CONFIG_SMP
1037 +bool apic_id_is_primary_thread(unsigned int id);
1038 +#else
1039 +static inline bool apic_id_is_primary_thread(unsigned int id) { return false; }
1040 +#endif
1041 +
1042 extern void irq_enter(void);
1043 extern void irq_exit(void);
1044
1045 static inline void entering_irq(void)
1046 {
1047 irq_enter();
1048 + kvm_set_cpu_l1tf_flush_l1d();
1049 }
1050
1051 static inline void entering_ack_irq(void)
1052 @@ -631,6 +640,7 @@ static inline void ipi_entering_ack_irq(void)
1053 {
1054 irq_enter();
1055 ack_APIC_irq();
1056 + kvm_set_cpu_l1tf_flush_l1d();
1057 }
1058
1059 static inline void exiting_irq(void)
1060 diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
1061 index 403e97d5e243..8418462298e7 100644
1062 --- a/arch/x86/include/asm/cpufeatures.h
1063 +++ b/arch/x86/include/asm/cpufeatures.h
1064 @@ -219,6 +219,7 @@
1065 #define X86_FEATURE_IBPB ( 7*32+26) /* Indirect Branch Prediction Barrier */
1066 #define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
1067 #define X86_FEATURE_ZEN ( 7*32+28) /* "" CPU is AMD family 0x17 (Zen) */
1068 +#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
1069
1070 /* Virtualization flags: Linux defined, word 8 */
1071 #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
1072 @@ -338,6 +339,7 @@
1073 #define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
1074 #define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */
1075 #define X86_FEATURE_INTEL_STIBP (18*32+27) /* "" Single Thread Indirect Branch Predictors */
1076 +#define X86_FEATURE_FLUSH_L1D (18*32+28) /* Flush L1D cache */
1077 #define X86_FEATURE_ARCH_CAPABILITIES (18*32+29) /* IA32_ARCH_CAPABILITIES MSR (Intel) */
1078 #define X86_FEATURE_SPEC_CTRL_SSBD (18*32+31) /* "" Speculative Store Bypass Disable */
1079
1080 @@ -370,5 +372,6 @@
1081 #define X86_BUG_SPECTRE_V1 X86_BUG(15) /* CPU is affected by Spectre variant 1 attack with conditional branches */
1082 #define X86_BUG_SPECTRE_V2 X86_BUG(16) /* CPU is affected by Spectre variant 2 attack with indirect branches */
1083 #define X86_BUG_SPEC_STORE_BYPASS X86_BUG(17) /* CPU is affected by speculative store bypass attack */
1084 +#define X86_BUG_L1TF X86_BUG(18) /* CPU is affected by L1 Terminal Fault */
1085
1086 #endif /* _ASM_X86_CPUFEATURES_H */
1087 diff --git a/arch/x86/include/asm/dmi.h b/arch/x86/include/asm/dmi.h
1088 index 0ab2ab27ad1f..b825cb201251 100644
1089 --- a/arch/x86/include/asm/dmi.h
1090 +++ b/arch/x86/include/asm/dmi.h
1091 @@ -4,8 +4,8 @@
1092
1093 #include <linux/compiler.h>
1094 #include <linux/init.h>
1095 +#include <linux/io.h>
1096
1097 -#include <asm/io.h>
1098 #include <asm/setup.h>
1099
1100 static __always_inline __init void *dmi_alloc(unsigned len)
1101 diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h
1102 index 51cc979dd364..486c843273c4 100644
1103 --- a/arch/x86/include/asm/hardirq.h
1104 +++ b/arch/x86/include/asm/hardirq.h
1105 @@ -3,10 +3,12 @@
1106 #define _ASM_X86_HARDIRQ_H
1107
1108 #include <linux/threads.h>
1109 -#include <linux/irq.h>
1110
1111 typedef struct {
1112 - unsigned int __softirq_pending;
1113 + u16 __softirq_pending;
1114 +#if IS_ENABLED(CONFIG_KVM_INTEL)
1115 + u8 kvm_cpu_l1tf_flush_l1d;
1116 +#endif
1117 unsigned int __nmi_count; /* arch dependent */
1118 #ifdef CONFIG_X86_LOCAL_APIC
1119 unsigned int apic_timer_irqs; /* arch dependent */
1120 @@ -62,4 +64,24 @@ extern u64 arch_irq_stat_cpu(unsigned int cpu);
1121 extern u64 arch_irq_stat(void);
1122 #define arch_irq_stat arch_irq_stat
1123
1124 +
1125 +#if IS_ENABLED(CONFIG_KVM_INTEL)
1126 +static inline void kvm_set_cpu_l1tf_flush_l1d(void)
1127 +{
1128 + __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 1);
1129 +}
1130 +
1131 +static inline void kvm_clear_cpu_l1tf_flush_l1d(void)
1132 +{
1133 + __this_cpu_write(irq_stat.kvm_cpu_l1tf_flush_l1d, 0);
1134 +}
1135 +
1136 +static inline bool kvm_get_cpu_l1tf_flush_l1d(void)
1137 +{
1138 + return __this_cpu_read(irq_stat.kvm_cpu_l1tf_flush_l1d);
1139 +}
1140 +#else /* !IS_ENABLED(CONFIG_KVM_INTEL) */
1141 +static inline void kvm_set_cpu_l1tf_flush_l1d(void) { }
1142 +#endif /* IS_ENABLED(CONFIG_KVM_INTEL) */
1143 +
1144 #endif /* _ASM_X86_HARDIRQ_H */
1145 diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h
1146 index c4fc17220df9..c14f2a74b2be 100644
1147 --- a/arch/x86/include/asm/irqflags.h
1148 +++ b/arch/x86/include/asm/irqflags.h
1149 @@ -13,6 +13,8 @@
1150 * Interrupt control:
1151 */
1152
1153 +/* Declaration required for gcc < 4.9 to prevent -Werror=missing-prototypes */
1154 +extern inline unsigned long native_save_fl(void);
1155 extern inline unsigned long native_save_fl(void)
1156 {
1157 unsigned long flags;
1158 diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
1159 index 174b9c41efce..4015b88383ce 100644
1160 --- a/arch/x86/include/asm/kvm_host.h
1161 +++ b/arch/x86/include/asm/kvm_host.h
1162 @@ -17,6 +17,7 @@
1163 #include <linux/tracepoint.h>
1164 #include <linux/cpumask.h>
1165 #include <linux/irq_work.h>
1166 +#include <linux/irq.h>
1167
1168 #include <linux/kvm.h>
1169 #include <linux/kvm_para.h>
1170 @@ -506,6 +507,7 @@ struct kvm_vcpu_arch {
1171 u64 smbase;
1172 bool tpr_access_reporting;
1173 u64 ia32_xss;
1174 + u64 microcode_version;
1175
1176 /*
1177 * Paging state of the vcpu
1178 @@ -693,6 +695,9 @@ struct kvm_vcpu_arch {
1179
1180 /* be preempted when it's in kernel-mode(cpl=0) */
1181 bool preempted_in_kernel;
1182 +
1183 + /* Flush the L1 Data cache for L1TF mitigation on VMENTER */
1184 + bool l1tf_flush_l1d;
1185 };
1186
1187 struct kvm_lpage_info {
1188 @@ -862,6 +867,7 @@ struct kvm_vcpu_stat {
1189 u64 signal_exits;
1190 u64 irq_window_exits;
1191 u64 nmi_window_exits;
1192 + u64 l1d_flush;
1193 u64 halt_exits;
1194 u64 halt_successful_poll;
1195 u64 halt_attempted_poll;
1196 @@ -1061,6 +1067,8 @@ struct kvm_x86_ops {
1197 void (*cancel_hv_timer)(struct kvm_vcpu *vcpu);
1198
1199 void (*setup_mce)(struct kvm_vcpu *vcpu);
1200 +
1201 + int (*get_msr_feature)(struct kvm_msr_entry *entry);
1202 };
1203
1204 struct kvm_arch_async_pf {
1205 @@ -1366,6 +1374,7 @@ int kvm_cpu_get_interrupt(struct kvm_vcpu *v);
1206 void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event);
1207 void kvm_vcpu_reload_apic_access_page(struct kvm_vcpu *vcpu);
1208
1209 +u64 kvm_get_arch_capabilities(void);
1210 void kvm_define_shared_msr(unsigned index, u32 msr);
1211 int kvm_set_shared_msr(unsigned index, u64 val, u64 mask);
1212
1213 diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
1214 index 504b21692d32..ef7eec669a1b 100644
1215 --- a/arch/x86/include/asm/msr-index.h
1216 +++ b/arch/x86/include/asm/msr-index.h
1217 @@ -70,12 +70,19 @@
1218 #define MSR_IA32_ARCH_CAPABILITIES 0x0000010a
1219 #define ARCH_CAP_RDCL_NO (1 << 0) /* Not susceptible to Meltdown */
1220 #define ARCH_CAP_IBRS_ALL (1 << 1) /* Enhanced IBRS support */
1221 +#define ARCH_CAP_SKIP_VMENTRY_L1DFLUSH (1 << 3) /* Skip L1D flush on vmentry */
1222 #define ARCH_CAP_SSB_NO (1 << 4) /*
1223 * Not susceptible to Speculative Store Bypass
1224 * attack, so no Speculative Store Bypass
1225 * control required.
1226 */
1227
1228 +#define MSR_IA32_FLUSH_CMD 0x0000010b
1229 +#define L1D_FLUSH (1 << 0) /*
1230 + * Writeback and invalidate the
1231 + * L1 data cache.
1232 + */
1233 +
1234 #define MSR_IA32_BBL_CR_CTL 0x00000119
1235 #define MSR_IA32_BBL_CR_CTL3 0x0000011e
1236
1237 diff --git a/arch/x86/include/asm/page_32_types.h b/arch/x86/include/asm/page_32_types.h
1238 index aa30c3241ea7..0d5c739eebd7 100644
1239 --- a/arch/x86/include/asm/page_32_types.h
1240 +++ b/arch/x86/include/asm/page_32_types.h
1241 @@ -29,8 +29,13 @@
1242 #define N_EXCEPTION_STACKS 1
1243
1244 #ifdef CONFIG_X86_PAE
1245 -/* 44=32+12, the limit we can fit into an unsigned long pfn */
1246 -#define __PHYSICAL_MASK_SHIFT 44
1247 +/*
1248 + * This is beyond the 44 bit limit imposed by the 32bit long pfns,
1249 + * but we need the full mask to make sure inverted PROT_NONE
1250 + * entries have all the host bits set in a guest.
1251 + * The real limit is still 44 bits.
1252 + */
1253 +#define __PHYSICAL_MASK_SHIFT 52
1254 #define __VIRTUAL_MASK_SHIFT 32
1255
1256 #else /* !CONFIG_X86_PAE */
1257 diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h
1258 index 685ffe8a0eaf..60d0f9015317 100644
1259 --- a/arch/x86/include/asm/pgtable-2level.h
1260 +++ b/arch/x86/include/asm/pgtable-2level.h
1261 @@ -95,4 +95,21 @@ static inline unsigned long pte_bitop(unsigned long value, unsigned int rightshi
1262 #define __pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low })
1263 #define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
1264
1265 +/* No inverted PFNs on 2 level page tables */
1266 +
1267 +static inline u64 protnone_mask(u64 val)
1268 +{
1269 + return 0;
1270 +}
1271 +
1272 +static inline u64 flip_protnone_guard(u64 oldval, u64 val, u64 mask)
1273 +{
1274 + return val;
1275 +}
1276 +
1277 +static inline bool __pte_needs_invert(u64 val)
1278 +{
1279 + return false;
1280 +}
1281 +
1282 #endif /* _ASM_X86_PGTABLE_2LEVEL_H */
1283 diff --git a/arch/x86/include/asm/pgtable-3level.h b/arch/x86/include/asm/pgtable-3level.h
1284 index bc4af5453802..9dc19b4a2a87 100644
1285 --- a/arch/x86/include/asm/pgtable-3level.h
1286 +++ b/arch/x86/include/asm/pgtable-3level.h
1287 @@ -206,12 +206,43 @@ static inline pud_t native_pudp_get_and_clear(pud_t *pudp)
1288 #endif
1289
1290 /* Encode and de-code a swap entry */
1291 +#define SWP_TYPE_BITS 5
1292 +
1293 +#define SWP_OFFSET_FIRST_BIT (_PAGE_BIT_PROTNONE + 1)
1294 +
1295 +/* We always extract/encode the offset by shifting it all the way up, and then down again */
1296 +#define SWP_OFFSET_SHIFT (SWP_OFFSET_FIRST_BIT + SWP_TYPE_BITS)
1297 +
1298 #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > 5)
1299 #define __swp_type(x) (((x).val) & 0x1f)
1300 #define __swp_offset(x) ((x).val >> 5)
1301 #define __swp_entry(type, offset) ((swp_entry_t){(type) | (offset) << 5})
1302 -#define __pte_to_swp_entry(pte) ((swp_entry_t){ (pte).pte_high })
1303 -#define __swp_entry_to_pte(x) ((pte_t){ { .pte_high = (x).val } })
1304 +
1305 +/*
1306 + * Normally, __swp_entry() converts from arch-independent swp_entry_t to
1307 + * arch-dependent swp_entry_t, and __swp_entry_to_pte() just stores the result
1308 + * to pte. But here we have 32bit swp_entry_t and 64bit pte, and need to use the
1309 + * whole 64 bits. Thus, we shift the "real" arch-dependent conversion to
1310 + * __swp_entry_to_pte() through the following helper macro based on 64bit
1311 + * __swp_entry().
1312 + */
1313 +#define __swp_pteval_entry(type, offset) ((pteval_t) { \
1314 + (~(pteval_t)(offset) << SWP_OFFSET_SHIFT >> SWP_TYPE_BITS) \
1315 + | ((pteval_t)(type) << (64 - SWP_TYPE_BITS)) })
1316 +
1317 +#define __swp_entry_to_pte(x) ((pte_t){ .pte = \
1318 + __swp_pteval_entry(__swp_type(x), __swp_offset(x)) })
1319 +/*
1320 + * Analogically, __pte_to_swp_entry() doesn't just extract the arch-dependent
1321 + * swp_entry_t, but also has to convert it from 64bit to the 32bit
1322 + * intermediate representation, using the following macros based on 64bit
1323 + * __swp_type() and __swp_offset().
1324 + */
1325 +#define __pteval_swp_type(x) ((unsigned long)((x).pte >> (64 - SWP_TYPE_BITS)))
1326 +#define __pteval_swp_offset(x) ((unsigned long)(~((x).pte) << SWP_TYPE_BITS >> SWP_OFFSET_SHIFT))
1327 +
1328 +#define __pte_to_swp_entry(pte) (__swp_entry(__pteval_swp_type(pte), \
1329 + __pteval_swp_offset(pte)))
1330
1331 #define gup_get_pte gup_get_pte
1332 /*
1333 @@ -260,4 +291,6 @@ static inline pte_t gup_get_pte(pte_t *ptep)
1334 return pte;
1335 }
1336
1337 +#include <asm/pgtable-invert.h>
1338 +
1339 #endif /* _ASM_X86_PGTABLE_3LEVEL_H */
1340 diff --git a/arch/x86/include/asm/pgtable-invert.h b/arch/x86/include/asm/pgtable-invert.h
1341 new file mode 100644
1342 index 000000000000..44b1203ece12
1343 --- /dev/null
1344 +++ b/arch/x86/include/asm/pgtable-invert.h
1345 @@ -0,0 +1,32 @@
1346 +/* SPDX-License-Identifier: GPL-2.0 */
1347 +#ifndef _ASM_PGTABLE_INVERT_H
1348 +#define _ASM_PGTABLE_INVERT_H 1
1349 +
1350 +#ifndef __ASSEMBLY__
1351 +
1352 +static inline bool __pte_needs_invert(u64 val)
1353 +{
1354 + return !(val & _PAGE_PRESENT);
1355 +}
1356 +
1357 +/* Get a mask to xor with the page table entry to get the correct pfn. */
1358 +static inline u64 protnone_mask(u64 val)
1359 +{
1360 + return __pte_needs_invert(val) ? ~0ull : 0;
1361 +}
1362 +
1363 +static inline u64 flip_protnone_guard(u64 oldval, u64 val, u64 mask)
1364 +{
1365 + /*
1366 + * When a PTE transitions from NONE to !NONE or vice-versa
1367 + * invert the PFN part to stop speculation.
1368 + * pte_pfn undoes this when needed.
1369 + */
1370 + if (__pte_needs_invert(oldval) != __pte_needs_invert(val))
1371 + val = (val & ~mask) | (~val & mask);
1372 + return val;
1373 +}
1374 +
1375 +#endif /* __ASSEMBLY__ */
1376 +
1377 +#endif
1378 diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
1379 index 5c790e93657d..6a4b1a54ff47 100644
1380 --- a/arch/x86/include/asm/pgtable.h
1381 +++ b/arch/x86/include/asm/pgtable.h
1382 @@ -185,19 +185,29 @@ static inline int pte_special(pte_t pte)
1383 return pte_flags(pte) & _PAGE_SPECIAL;
1384 }
1385
1386 +/* Entries that were set to PROT_NONE are inverted */
1387 +
1388 +static inline u64 protnone_mask(u64 val);
1389 +
1390 static inline unsigned long pte_pfn(pte_t pte)
1391 {
1392 - return (pte_val(pte) & PTE_PFN_MASK) >> PAGE_SHIFT;
1393 + phys_addr_t pfn = pte_val(pte);
1394 + pfn ^= protnone_mask(pfn);
1395 + return (pfn & PTE_PFN_MASK) >> PAGE_SHIFT;
1396 }
1397
1398 static inline unsigned long pmd_pfn(pmd_t pmd)
1399 {
1400 - return (pmd_val(pmd) & pmd_pfn_mask(pmd)) >> PAGE_SHIFT;
1401 + phys_addr_t pfn = pmd_val(pmd);
1402 + pfn ^= protnone_mask(pfn);
1403 + return (pfn & pmd_pfn_mask(pmd)) >> PAGE_SHIFT;
1404 }
1405
1406 static inline unsigned long pud_pfn(pud_t pud)
1407 {
1408 - return (pud_val(pud) & pud_pfn_mask(pud)) >> PAGE_SHIFT;
1409 + phys_addr_t pfn = pud_val(pud);
1410 + pfn ^= protnone_mask(pfn);
1411 + return (pfn & pud_pfn_mask(pud)) >> PAGE_SHIFT;
1412 }
1413
1414 static inline unsigned long p4d_pfn(p4d_t p4d)
1415 @@ -400,11 +410,6 @@ static inline pmd_t pmd_mkwrite(pmd_t pmd)
1416 return pmd_set_flags(pmd, _PAGE_RW);
1417 }
1418
1419 -static inline pmd_t pmd_mknotpresent(pmd_t pmd)
1420 -{
1421 - return pmd_clear_flags(pmd, _PAGE_PRESENT | _PAGE_PROTNONE);
1422 -}
1423 -
1424 static inline pud_t pud_set_flags(pud_t pud, pudval_t set)
1425 {
1426 pudval_t v = native_pud_val(pud);
1427 @@ -459,11 +464,6 @@ static inline pud_t pud_mkwrite(pud_t pud)
1428 return pud_set_flags(pud, _PAGE_RW);
1429 }
1430
1431 -static inline pud_t pud_mknotpresent(pud_t pud)
1432 -{
1433 - return pud_clear_flags(pud, _PAGE_PRESENT | _PAGE_PROTNONE);
1434 -}
1435 -
1436 #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY
1437 static inline int pte_soft_dirty(pte_t pte)
1438 {
1439 @@ -528,25 +528,45 @@ static inline pgprotval_t massage_pgprot(pgprot_t pgprot)
1440
1441 static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
1442 {
1443 - return __pte(((phys_addr_t)page_nr << PAGE_SHIFT) |
1444 - massage_pgprot(pgprot));
1445 + phys_addr_t pfn = (phys_addr_t)page_nr << PAGE_SHIFT;
1446 + pfn ^= protnone_mask(pgprot_val(pgprot));
1447 + pfn &= PTE_PFN_MASK;
1448 + return __pte(pfn | massage_pgprot(pgprot));
1449 }
1450
1451 static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
1452 {
1453 - return __pmd(((phys_addr_t)page_nr << PAGE_SHIFT) |
1454 - massage_pgprot(pgprot));
1455 + phys_addr_t pfn = (phys_addr_t)page_nr << PAGE_SHIFT;
1456 + pfn ^= protnone_mask(pgprot_val(pgprot));
1457 + pfn &= PHYSICAL_PMD_PAGE_MASK;
1458 + return __pmd(pfn | massage_pgprot(pgprot));
1459 }
1460
1461 static inline pud_t pfn_pud(unsigned long page_nr, pgprot_t pgprot)
1462 {
1463 - return __pud(((phys_addr_t)page_nr << PAGE_SHIFT) |
1464 - massage_pgprot(pgprot));
1465 + phys_addr_t pfn = (phys_addr_t)page_nr << PAGE_SHIFT;
1466 + pfn ^= protnone_mask(pgprot_val(pgprot));
1467 + pfn &= PHYSICAL_PUD_PAGE_MASK;
1468 + return __pud(pfn | massage_pgprot(pgprot));
1469 }
1470
1471 +static inline pmd_t pmd_mknotpresent(pmd_t pmd)
1472 +{
1473 + return pfn_pmd(pmd_pfn(pmd),
1474 + __pgprot(pmd_flags(pmd) & ~(_PAGE_PRESENT|_PAGE_PROTNONE)));
1475 +}
1476 +
1477 +static inline pud_t pud_mknotpresent(pud_t pud)
1478 +{
1479 + return pfn_pud(pud_pfn(pud),
1480 + __pgprot(pud_flags(pud) & ~(_PAGE_PRESENT|_PAGE_PROTNONE)));
1481 +}
1482 +
1483 +static inline u64 flip_protnone_guard(u64 oldval, u64 val, u64 mask);
1484 +
1485 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
1486 {
1487 - pteval_t val = pte_val(pte);
1488 + pteval_t val = pte_val(pte), oldval = val;
1489
1490 /*
1491 * Chop off the NX bit (if present), and add the NX portion of
1492 @@ -554,17 +574,17 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
1493 */
1494 val &= _PAGE_CHG_MASK;
1495 val |= massage_pgprot(newprot) & ~_PAGE_CHG_MASK;
1496 -
1497 + val = flip_protnone_guard(oldval, val, PTE_PFN_MASK);
1498 return __pte(val);
1499 }
1500
1501 static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
1502 {
1503 - pmdval_t val = pmd_val(pmd);
1504 + pmdval_t val = pmd_val(pmd), oldval = val;
1505
1506 val &= _HPAGE_CHG_MASK;
1507 val |= massage_pgprot(newprot) & ~_HPAGE_CHG_MASK;
1508 -
1509 + val = flip_protnone_guard(oldval, val, PHYSICAL_PMD_PAGE_MASK);
1510 return __pmd(val);
1511 }
1512
1513 @@ -1274,6 +1294,14 @@ static inline bool pud_access_permitted(pud_t pud, bool write)
1514 return __pte_access_permitted(pud_val(pud), write);
1515 }
1516
1517 +#define __HAVE_ARCH_PFN_MODIFY_ALLOWED 1
1518 +extern bool pfn_modify_allowed(unsigned long pfn, pgprot_t prot);
1519 +
1520 +static inline bool arch_has_pfn_modify_check(void)
1521 +{
1522 + return boot_cpu_has_bug(X86_BUG_L1TF);
1523 +}
1524 +
1525 #include <asm-generic/pgtable.h>
1526 #endif /* __ASSEMBLY__ */
1527
1528 diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
1529 index 1149d2112b2e..4ecb72831938 100644
1530 --- a/arch/x86/include/asm/pgtable_64.h
1531 +++ b/arch/x86/include/asm/pgtable_64.h
1532 @@ -276,7 +276,7 @@ static inline int pgd_large(pgd_t pgd) { return 0; }
1533 *
1534 * | ... | 11| 10| 9|8|7|6|5| 4| 3|2| 1|0| <- bit number
1535 * | ... |SW3|SW2|SW1|G|L|D|A|CD|WT|U| W|P| <- bit names
1536 - * | OFFSET (14->63) | TYPE (9-13) |0|0|X|X| X| X|X|SD|0| <- swp entry
1537 + * | TYPE (59-63) | ~OFFSET (9-58) |0|0|X|X| X| X|X|SD|0| <- swp entry
1538 *
1539 * G (8) is aliased and used as a PROT_NONE indicator for
1540 * !present ptes. We need to start storing swap entries above
1541 @@ -289,20 +289,34 @@ static inline int pgd_large(pgd_t pgd) { return 0; }
1542 *
1543 * Bit 7 in swp entry should be 0 because pmd_present checks not only P,
1544 * but also L and G.
1545 + *
1546 + * The offset is inverted by a binary not operation to make the high
1547 + * physical bits set.
1548 */
1549 -#define SWP_TYPE_FIRST_BIT (_PAGE_BIT_PROTNONE + 1)
1550 -#define SWP_TYPE_BITS 5
1551 -/* Place the offset above the type: */
1552 -#define SWP_OFFSET_FIRST_BIT (SWP_TYPE_FIRST_BIT + SWP_TYPE_BITS)
1553 +#define SWP_TYPE_BITS 5
1554 +
1555 +#define SWP_OFFSET_FIRST_BIT (_PAGE_BIT_PROTNONE + 1)
1556 +
1557 +/* We always extract/encode the offset by shifting it all the way up, and then down again */
1558 +#define SWP_OFFSET_SHIFT (SWP_OFFSET_FIRST_BIT+SWP_TYPE_BITS)
1559
1560 #define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > SWP_TYPE_BITS)
1561
1562 -#define __swp_type(x) (((x).val >> (SWP_TYPE_FIRST_BIT)) \
1563 - & ((1U << SWP_TYPE_BITS) - 1))
1564 -#define __swp_offset(x) ((x).val >> SWP_OFFSET_FIRST_BIT)
1565 -#define __swp_entry(type, offset) ((swp_entry_t) { \
1566 - ((type) << (SWP_TYPE_FIRST_BIT)) \
1567 - | ((offset) << SWP_OFFSET_FIRST_BIT) })
1568 +/* Extract the high bits for type */
1569 +#define __swp_type(x) ((x).val >> (64 - SWP_TYPE_BITS))
1570 +
1571 +/* Shift up (to get rid of type), then down to get value */
1572 +#define __swp_offset(x) (~(x).val << SWP_TYPE_BITS >> SWP_OFFSET_SHIFT)
1573 +
1574 +/*
1575 + * Shift the offset up "too far" by TYPE bits, then down again
1576 + * The offset is inverted by a binary not operation to make the high
1577 + * physical bits set.
1578 + */
1579 +#define __swp_entry(type, offset) ((swp_entry_t) { \
1580 + (~(unsigned long)(offset) << SWP_OFFSET_SHIFT >> SWP_TYPE_BITS) \
1581 + | ((unsigned long)(type) << (64-SWP_TYPE_BITS)) })
1582 +
1583 #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val((pte)) })
1584 #define __pmd_to_swp_entry(pmd) ((swp_entry_t) { pmd_val((pmd)) })
1585 #define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
1586 @@ -346,5 +360,7 @@ static inline bool gup_fast_permitted(unsigned long start, int nr_pages,
1587 return true;
1588 }
1589
1590 +#include <asm/pgtable-invert.h>
1591 +
1592 #endif /* !__ASSEMBLY__ */
1593 #endif /* _ASM_X86_PGTABLE_64_H */
1594 diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
1595 index 3222c7746cb1..0e856c0628b3 100644
1596 --- a/arch/x86/include/asm/processor.h
1597 +++ b/arch/x86/include/asm/processor.h
1598 @@ -180,6 +180,11 @@ extern const struct seq_operations cpuinfo_op;
1599
1600 extern void cpu_detect(struct cpuinfo_x86 *c);
1601
1602 +static inline unsigned long l1tf_pfn_limit(void)
1603 +{
1604 + return BIT(boot_cpu_data.x86_phys_bits - 1 - PAGE_SHIFT) - 1;
1605 +}
1606 +
1607 extern void early_cpu_init(void);
1608 extern void identify_boot_cpu(void);
1609 extern void identify_secondary_cpu(struct cpuinfo_x86 *);
1610 @@ -969,4 +974,16 @@ bool xen_set_default_idle(void);
1611 void stop_this_cpu(void *dummy);
1612 void df_debug(struct pt_regs *regs, long error_code);
1613 void microcode_check(void);
1614 +
1615 +enum l1tf_mitigations {
1616 + L1TF_MITIGATION_OFF,
1617 + L1TF_MITIGATION_FLUSH_NOWARN,
1618 + L1TF_MITIGATION_FLUSH,
1619 + L1TF_MITIGATION_FLUSH_NOSMT,
1620 + L1TF_MITIGATION_FULL,
1621 + L1TF_MITIGATION_FULL_FORCE
1622 +};
1623 +
1624 +extern enum l1tf_mitigations l1tf_mitigation;
1625 +
1626 #endif /* _ASM_X86_PROCESSOR_H */
1627 diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
1628 index 461f53d27708..fe2ee61880a8 100644
1629 --- a/arch/x86/include/asm/smp.h
1630 +++ b/arch/x86/include/asm/smp.h
1631 @@ -170,7 +170,6 @@ static inline int wbinvd_on_all_cpus(void)
1632 wbinvd();
1633 return 0;
1634 }
1635 -#define smp_num_siblings 1
1636 #endif /* CONFIG_SMP */
1637
1638 extern unsigned disabled_cpus;
1639 diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
1640 index c1d2a9892352..453cf38a1c33 100644
1641 --- a/arch/x86/include/asm/topology.h
1642 +++ b/arch/x86/include/asm/topology.h
1643 @@ -123,13 +123,17 @@ static inline int topology_max_smt_threads(void)
1644 }
1645
1646 int topology_update_package_map(unsigned int apicid, unsigned int cpu);
1647 -extern int topology_phys_to_logical_pkg(unsigned int pkg);
1648 +int topology_phys_to_logical_pkg(unsigned int pkg);
1649 +bool topology_is_primary_thread(unsigned int cpu);
1650 +bool topology_smt_supported(void);
1651 #else
1652 #define topology_max_packages() (1)
1653 static inline int
1654 topology_update_package_map(unsigned int apicid, unsigned int cpu) { return 0; }
1655 static inline int topology_phys_to_logical_pkg(unsigned int pkg) { return 0; }
1656 static inline int topology_max_smt_threads(void) { return 1; }
1657 +static inline bool topology_is_primary_thread(unsigned int cpu) { return true; }
1658 +static inline bool topology_smt_supported(void) { return false; }
1659 #endif
1660
1661 static inline void arch_fix_phys_package_id(int num, u32 slot)
1662 diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h
1663 index 7c300299e12e..08c14aec26ac 100644
1664 --- a/arch/x86/include/asm/vmx.h
1665 +++ b/arch/x86/include/asm/vmx.h
1666 @@ -571,4 +571,15 @@ enum vm_instruction_error_number {
1667 VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID = 28,
1668 };
1669
1670 +enum vmx_l1d_flush_state {
1671 + VMENTER_L1D_FLUSH_AUTO,
1672 + VMENTER_L1D_FLUSH_NEVER,
1673 + VMENTER_L1D_FLUSH_COND,
1674 + VMENTER_L1D_FLUSH_ALWAYS,
1675 + VMENTER_L1D_FLUSH_EPT_DISABLED,
1676 + VMENTER_L1D_FLUSH_NOT_REQUIRED,
1677 +};
1678 +
1679 +extern enum vmx_l1d_flush_state l1tf_vmx_mitigation;
1680 +
1681 #endif
1682 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
1683 index f48a51335538..2e64178f284d 100644
1684 --- a/arch/x86/kernel/apic/apic.c
1685 +++ b/arch/x86/kernel/apic/apic.c
1686 @@ -34,6 +34,7 @@
1687 #include <linux/dmi.h>
1688 #include <linux/smp.h>
1689 #include <linux/mm.h>
1690 +#include <linux/irq.h>
1691
1692 #include <asm/trace/irq_vectors.h>
1693 #include <asm/irq_remapping.h>
1694 @@ -56,6 +57,7 @@
1695 #include <asm/hypervisor.h>
1696 #include <asm/cpu_device_id.h>
1697 #include <asm/intel-family.h>
1698 +#include <asm/irq_regs.h>
1699
1700 unsigned int num_processors;
1701
1702 @@ -2092,6 +2094,23 @@ static int cpuid_to_apicid[] = {
1703 [0 ... NR_CPUS - 1] = -1,
1704 };
1705
1706 +#ifdef CONFIG_SMP
1707 +/**
1708 + * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread
1709 + * @id: APIC ID to check
1710 + */
1711 +bool apic_id_is_primary_thread(unsigned int apicid)
1712 +{
1713 + u32 mask;
1714 +
1715 + if (smp_num_siblings == 1)
1716 + return true;
1717 + /* Isolate the SMT bit(s) in the APICID and check for 0 */
1718 + mask = (1U << (fls(smp_num_siblings) - 1)) - 1;
1719 + return !(apicid & mask);
1720 +}
1721 +#endif
1722 +
1723 /*
1724 * Should use this API to allocate logical CPU IDs to keep nr_logical_cpuids
1725 * and cpuid_to_apicid[] synchronized.
1726 diff --git a/arch/x86/kernel/apic/htirq.c b/arch/x86/kernel/apic/htirq.c
1727 index 56ccf9346b08..741de281ed5d 100644
1728 --- a/arch/x86/kernel/apic/htirq.c
1729 +++ b/arch/x86/kernel/apic/htirq.c
1730 @@ -16,6 +16,8 @@
1731 #include <linux/device.h>
1732 #include <linux/pci.h>
1733 #include <linux/htirq.h>
1734 +#include <linux/irq.h>
1735 +
1736 #include <asm/irqdomain.h>
1737 #include <asm/hw_irq.h>
1738 #include <asm/apic.h>
1739 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
1740 index 3b89b27945ff..96a8a68f9c79 100644
1741 --- a/arch/x86/kernel/apic/io_apic.c
1742 +++ b/arch/x86/kernel/apic/io_apic.c
1743 @@ -33,6 +33,7 @@
1744
1745 #include <linux/mm.h>
1746 #include <linux/interrupt.h>
1747 +#include <linux/irq.h>
1748 #include <linux/init.h>
1749 #include <linux/delay.h>
1750 #include <linux/sched.h>
1751 diff --git a/arch/x86/kernel/apic/msi.c b/arch/x86/kernel/apic/msi.c
1752 index 9b18be764422..f10e7f93b0e2 100644
1753 --- a/arch/x86/kernel/apic/msi.c
1754 +++ b/arch/x86/kernel/apic/msi.c
1755 @@ -12,6 +12,7 @@
1756 */
1757 #include <linux/mm.h>
1758 #include <linux/interrupt.h>
1759 +#include <linux/irq.h>
1760 #include <linux/pci.h>
1761 #include <linux/dmar.h>
1762 #include <linux/hpet.h>
1763 diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
1764 index 2ce1c708b8ee..b958082c74a7 100644
1765 --- a/arch/x86/kernel/apic/vector.c
1766 +++ b/arch/x86/kernel/apic/vector.c
1767 @@ -11,6 +11,7 @@
1768 * published by the Free Software Foundation.
1769 */
1770 #include <linux/interrupt.h>
1771 +#include <linux/irq.h>
1772 #include <linux/init.h>
1773 #include <linux/compiler.h>
1774 #include <linux/slab.h>
1775 diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
1776 index 90574f731c05..dda741bd5789 100644
1777 --- a/arch/x86/kernel/cpu/amd.c
1778 +++ b/arch/x86/kernel/cpu/amd.c
1779 @@ -298,7 +298,6 @@ static int nearby_node(int apicid)
1780 }
1781 #endif
1782
1783 -#ifdef CONFIG_SMP
1784 /*
1785 * Fix up cpu_core_id for pre-F17h systems to be in the
1786 * [0 .. cores_per_node - 1] range. Not really needed but
1787 @@ -315,6 +314,13 @@ static void legacy_fixup_core_id(struct cpuinfo_x86 *c)
1788 c->cpu_core_id %= cus_per_node;
1789 }
1790
1791 +
1792 +static void amd_get_topology_early(struct cpuinfo_x86 *c)
1793 +{
1794 + if (cpu_has(c, X86_FEATURE_TOPOEXT))
1795 + smp_num_siblings = ((cpuid_ebx(0x8000001e) >> 8) & 0xff) + 1;
1796 +}
1797 +
1798 /*
1799 * Fixup core topology information for
1800 * (1) AMD multi-node processors
1801 @@ -333,7 +339,6 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
1802 cpuid(0x8000001e, &eax, &ebx, &ecx, &edx);
1803
1804 node_id = ecx & 0xff;
1805 - smp_num_siblings = ((ebx >> 8) & 0xff) + 1;
1806
1807 if (c->x86 == 0x15)
1808 c->cu_id = ebx & 0xff;
1809 @@ -376,7 +381,6 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
1810 legacy_fixup_core_id(c);
1811 }
1812 }
1813 -#endif
1814
1815 /*
1816 * On a AMD dual core setup the lower bits of the APIC id distinguish the cores.
1817 @@ -384,7 +388,6 @@ static void amd_get_topology(struct cpuinfo_x86 *c)
1818 */
1819 static void amd_detect_cmp(struct cpuinfo_x86 *c)
1820 {
1821 -#ifdef CONFIG_SMP
1822 unsigned bits;
1823 int cpu = smp_processor_id();
1824
1825 @@ -396,16 +399,11 @@ static void amd_detect_cmp(struct cpuinfo_x86 *c)
1826 /* use socket ID also for last level cache */
1827 per_cpu(cpu_llc_id, cpu) = c->phys_proc_id;
1828 amd_get_topology(c);
1829 -#endif
1830 }
1831
1832 u16 amd_get_nb_id(int cpu)
1833 {
1834 - u16 id = 0;
1835 -#ifdef CONFIG_SMP
1836 - id = per_cpu(cpu_llc_id, cpu);
1837 -#endif
1838 - return id;
1839 + return per_cpu(cpu_llc_id, cpu);
1840 }
1841 EXPORT_SYMBOL_GPL(amd_get_nb_id);
1842
1843 @@ -579,6 +577,7 @@ static void bsp_init_amd(struct cpuinfo_x86 *c)
1844
1845 static void early_init_amd(struct cpuinfo_x86 *c)
1846 {
1847 + u64 value;
1848 u32 dummy;
1849
1850 early_init_amd_mc(c);
1851 @@ -668,6 +667,22 @@ static void early_init_amd(struct cpuinfo_x86 *c)
1852 clear_cpu_cap(c, X86_FEATURE_SME);
1853 }
1854 }
1855 +
1856 + /* Re-enable TopologyExtensions if switched off by BIOS */
1857 + if (c->x86 == 0x15 &&
1858 + (c->x86_model >= 0x10 && c->x86_model <= 0x6f) &&
1859 + !cpu_has(c, X86_FEATURE_TOPOEXT)) {
1860 +
1861 + if (msr_set_bit(0xc0011005, 54) > 0) {
1862 + rdmsrl(0xc0011005, value);
1863 + if (value & BIT_64(54)) {
1864 + set_cpu_cap(c, X86_FEATURE_TOPOEXT);
1865 + pr_info_once(FW_INFO "CPU: Re-enabling disabled Topology Extensions Support.\n");
1866 + }
1867 + }
1868 + }
1869 +
1870 + amd_get_topology_early(c);
1871 }
1872
1873 static void init_amd_k8(struct cpuinfo_x86 *c)
1874 @@ -759,19 +774,6 @@ static void init_amd_bd(struct cpuinfo_x86 *c)
1875 {
1876 u64 value;
1877
1878 - /* re-enable TopologyExtensions if switched off by BIOS */
1879 - if ((c->x86_model >= 0x10) && (c->x86_model <= 0x6f) &&
1880 - !cpu_has(c, X86_FEATURE_TOPOEXT)) {
1881 -
1882 - if (msr_set_bit(0xc0011005, 54) > 0) {
1883 - rdmsrl(0xc0011005, value);
1884 - if (value & BIT_64(54)) {
1885 - set_cpu_cap(c, X86_FEATURE_TOPOEXT);
1886 - pr_info_once(FW_INFO "CPU: Re-enabling disabled Topology Extensions Support.\n");
1887 - }
1888 - }
1889 - }
1890 -
1891 /*
1892 * The way access filter has a performance penalty on some workloads.
1893 * Disable it on the affected CPUs.
1894 @@ -835,15 +837,8 @@ static void init_amd(struct cpuinfo_x86 *c)
1895
1896 cpu_detect_cache_sizes(c);
1897
1898 - /* Multi core CPU? */
1899 - if (c->extended_cpuid_level >= 0x80000008) {
1900 - amd_detect_cmp(c);
1901 - srat_detect_node(c);
1902 - }
1903 -
1904 -#ifdef CONFIG_X86_32
1905 - detect_ht(c);
1906 -#endif
1907 + amd_detect_cmp(c);
1908 + srat_detect_node(c);
1909
1910 init_amd_cacheinfo(c);
1911
1912 diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
1913 index 7416fc206b4a..edfc64a8a154 100644
1914 --- a/arch/x86/kernel/cpu/bugs.c
1915 +++ b/arch/x86/kernel/cpu/bugs.c
1916 @@ -22,14 +22,17 @@
1917 #include <asm/processor-flags.h>
1918 #include <asm/fpu/internal.h>
1919 #include <asm/msr.h>
1920 +#include <asm/vmx.h>
1921 #include <asm/paravirt.h>
1922 #include <asm/alternative.h>
1923 #include <asm/pgtable.h>
1924 #include <asm/set_memory.h>
1925 #include <asm/intel-family.h>
1926 +#include <asm/e820/api.h>
1927
1928 static void __init spectre_v2_select_mitigation(void);
1929 static void __init ssb_select_mitigation(void);
1930 +static void __init l1tf_select_mitigation(void);
1931
1932 /*
1933 * Our boot-time value of the SPEC_CTRL MSR. We read it once so that any
1934 @@ -55,6 +58,12 @@ void __init check_bugs(void)
1935 {
1936 identify_boot_cpu();
1937
1938 + /*
1939 + * identify_boot_cpu() initialized SMT support information, let the
1940 + * core code know.
1941 + */
1942 + cpu_smt_check_topology_early();
1943 +
1944 if (!IS_ENABLED(CONFIG_SMP)) {
1945 pr_info("CPU: ");
1946 print_cpu_info(&boot_cpu_data);
1947 @@ -81,6 +90,8 @@ void __init check_bugs(void)
1948 */
1949 ssb_select_mitigation();
1950
1951 + l1tf_select_mitigation();
1952 +
1953 #ifdef CONFIG_X86_32
1954 /*
1955 * Check whether we are able to run this kernel safely on SMP.
1956 @@ -311,23 +322,6 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
1957 return cmd;
1958 }
1959
1960 -/* Check for Skylake-like CPUs (for RSB handling) */
1961 -static bool __init is_skylake_era(void)
1962 -{
1963 - if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
1964 - boot_cpu_data.x86 == 6) {
1965 - switch (boot_cpu_data.x86_model) {
1966 - case INTEL_FAM6_SKYLAKE_MOBILE:
1967 - case INTEL_FAM6_SKYLAKE_DESKTOP:
1968 - case INTEL_FAM6_SKYLAKE_X:
1969 - case INTEL_FAM6_KABYLAKE_MOBILE:
1970 - case INTEL_FAM6_KABYLAKE_DESKTOP:
1971 - return true;
1972 - }
1973 - }
1974 - return false;
1975 -}
1976 -
1977 static void __init spectre_v2_select_mitigation(void)
1978 {
1979 enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline();
1980 @@ -388,22 +382,15 @@ retpoline_auto:
1981 pr_info("%s\n", spectre_v2_strings[mode]);
1982
1983 /*
1984 - * If neither SMEP nor PTI are available, there is a risk of
1985 - * hitting userspace addresses in the RSB after a context switch
1986 - * from a shallow call stack to a deeper one. To prevent this fill
1987 - * the entire RSB, even when using IBRS.
1988 + * If spectre v2 protection has been enabled, unconditionally fill
1989 + * RSB during a context switch; this protects against two independent
1990 + * issues:
1991 *
1992 - * Skylake era CPUs have a separate issue with *underflow* of the
1993 - * RSB, when they will predict 'ret' targets from the generic BTB.
1994 - * The proper mitigation for this is IBRS. If IBRS is not supported
1995 - * or deactivated in favour of retpolines the RSB fill on context
1996 - * switch is required.
1997 + * - RSB underflow (and switch to BTB) on Skylake+
1998 + * - SpectreRSB variant of spectre v2 on X86_BUG_SPECTRE_V2 CPUs
1999 */
2000 - if ((!boot_cpu_has(X86_FEATURE_PTI) &&
2001 - !boot_cpu_has(X86_FEATURE_SMEP)) || is_skylake_era()) {
2002 - setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
2003 - pr_info("Spectre v2 mitigation: Filling RSB on context switch\n");
2004 - }
2005 + setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
2006 + pr_info("Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\n");
2007
2008 /* Initialize Indirect Branch Prediction Barrier if supported */
2009 if (boot_cpu_has(X86_FEATURE_IBPB)) {
2010 @@ -654,8 +641,121 @@ void x86_spec_ctrl_setup_ap(void)
2011 x86_amd_ssb_disable();
2012 }
2013
2014 +#undef pr_fmt
2015 +#define pr_fmt(fmt) "L1TF: " fmt
2016 +
2017 +/* Default mitigation for L1TF-affected CPUs */
2018 +enum l1tf_mitigations l1tf_mitigation __ro_after_init = L1TF_MITIGATION_FLUSH;
2019 +#if IS_ENABLED(CONFIG_KVM_INTEL)
2020 +EXPORT_SYMBOL_GPL(l1tf_mitigation);
2021 +
2022 +enum vmx_l1d_flush_state l1tf_vmx_mitigation = VMENTER_L1D_FLUSH_AUTO;
2023 +EXPORT_SYMBOL_GPL(l1tf_vmx_mitigation);
2024 +#endif
2025 +
2026 +static void __init l1tf_select_mitigation(void)
2027 +{
2028 + u64 half_pa;
2029 +
2030 + if (!boot_cpu_has_bug(X86_BUG_L1TF))
2031 + return;
2032 +
2033 + switch (l1tf_mitigation) {
2034 + case L1TF_MITIGATION_OFF:
2035 + case L1TF_MITIGATION_FLUSH_NOWARN:
2036 + case L1TF_MITIGATION_FLUSH:
2037 + break;
2038 + case L1TF_MITIGATION_FLUSH_NOSMT:
2039 + case L1TF_MITIGATION_FULL:
2040 + cpu_smt_disable(false);
2041 + break;
2042 + case L1TF_MITIGATION_FULL_FORCE:
2043 + cpu_smt_disable(true);
2044 + break;
2045 + }
2046 +
2047 +#if CONFIG_PGTABLE_LEVELS == 2
2048 + pr_warn("Kernel not compiled for PAE. No mitigation for L1TF\n");
2049 + return;
2050 +#endif
2051 +
2052 + /*
2053 + * This is extremely unlikely to happen because almost all
2054 + * systems have far more MAX_PA/2 than RAM can be fit into
2055 + * DIMM slots.
2056 + */
2057 + half_pa = (u64)l1tf_pfn_limit() << PAGE_SHIFT;
2058 + if (e820__mapped_any(half_pa, ULLONG_MAX - half_pa, E820_TYPE_RAM)) {
2059 + pr_warn("System has more than MAX_PA/2 memory. L1TF mitigation not effective.\n");
2060 + return;
2061 + }
2062 +
2063 + setup_force_cpu_cap(X86_FEATURE_L1TF_PTEINV);
2064 +}
2065 +
2066 +static int __init l1tf_cmdline(char *str)
2067 +{
2068 + if (!boot_cpu_has_bug(X86_BUG_L1TF))
2069 + return 0;
2070 +
2071 + if (!str)
2072 + return -EINVAL;
2073 +
2074 + if (!strcmp(str, "off"))
2075 + l1tf_mitigation = L1TF_MITIGATION_OFF;
2076 + else if (!strcmp(str, "flush,nowarn"))
2077 + l1tf_mitigation = L1TF_MITIGATION_FLUSH_NOWARN;
2078 + else if (!strcmp(str, "flush"))
2079 + l1tf_mitigation = L1TF_MITIGATION_FLUSH;
2080 + else if (!strcmp(str, "flush,nosmt"))
2081 + l1tf_mitigation = L1TF_MITIGATION_FLUSH_NOSMT;
2082 + else if (!strcmp(str, "full"))
2083 + l1tf_mitigation = L1TF_MITIGATION_FULL;
2084 + else if (!strcmp(str, "full,force"))
2085 + l1tf_mitigation = L1TF_MITIGATION_FULL_FORCE;
2086 +
2087 + return 0;
2088 +}
2089 +early_param("l1tf", l1tf_cmdline);
2090 +
2091 +#undef pr_fmt
2092 +
2093 #ifdef CONFIG_SYSFS
2094
2095 +#define L1TF_DEFAULT_MSG "Mitigation: PTE Inversion"
2096 +
2097 +#if IS_ENABLED(CONFIG_KVM_INTEL)
2098 +static const char *l1tf_vmx_states[] = {
2099 + [VMENTER_L1D_FLUSH_AUTO] = "auto",
2100 + [VMENTER_L1D_FLUSH_NEVER] = "vulnerable",
2101 + [VMENTER_L1D_FLUSH_COND] = "conditional cache flushes",
2102 + [VMENTER_L1D_FLUSH_ALWAYS] = "cache flushes",
2103 + [VMENTER_L1D_FLUSH_EPT_DISABLED] = "EPT disabled",
2104 + [VMENTER_L1D_FLUSH_NOT_REQUIRED] = "flush not necessary"
2105 +};
2106 +
2107 +static ssize_t l1tf_show_state(char *buf)
2108 +{
2109 + if (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_AUTO)
2110 + return sprintf(buf, "%s\n", L1TF_DEFAULT_MSG);
2111 +
2112 + if (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_EPT_DISABLED ||
2113 + (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_NEVER &&
2114 + cpu_smt_control == CPU_SMT_ENABLED))
2115 + return sprintf(buf, "%s; VMX: %s\n", L1TF_DEFAULT_MSG,
2116 + l1tf_vmx_states[l1tf_vmx_mitigation]);
2117 +
2118 + return sprintf(buf, "%s; VMX: %s, SMT %s\n", L1TF_DEFAULT_MSG,
2119 + l1tf_vmx_states[l1tf_vmx_mitigation],
2120 + cpu_smt_control == CPU_SMT_ENABLED ? "vulnerable" : "disabled");
2121 +}
2122 +#else
2123 +static ssize_t l1tf_show_state(char *buf)
2124 +{
2125 + return sprintf(buf, "%s\n", L1TF_DEFAULT_MSG);
2126 +}
2127 +#endif
2128 +
2129 static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr,
2130 char *buf, unsigned int bug)
2131 {
2132 @@ -681,6 +781,10 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
2133 case X86_BUG_SPEC_STORE_BYPASS:
2134 return sprintf(buf, "%s\n", ssb_strings[ssb_mode]);
2135
2136 + case X86_BUG_L1TF:
2137 + if (boot_cpu_has(X86_FEATURE_L1TF_PTEINV))
2138 + return l1tf_show_state(buf);
2139 + break;
2140 default:
2141 break;
2142 }
2143 @@ -707,4 +811,9 @@ ssize_t cpu_show_spec_store_bypass(struct device *dev, struct device_attribute *
2144 {
2145 return cpu_show_common(dev, attr, buf, X86_BUG_SPEC_STORE_BYPASS);
2146 }
2147 +
2148 +ssize_t cpu_show_l1tf(struct device *dev, struct device_attribute *attr, char *buf)
2149 +{
2150 + return cpu_show_common(dev, attr, buf, X86_BUG_L1TF);
2151 +}
2152 #endif
2153 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
2154 index 48e98964ecad..dd02ee4fa8cd 100644
2155 --- a/arch/x86/kernel/cpu/common.c
2156 +++ b/arch/x86/kernel/cpu/common.c
2157 @@ -66,6 +66,13 @@ cpumask_var_t cpu_callin_mask;
2158 /* representing cpus for which sibling maps can be computed */
2159 cpumask_var_t cpu_sibling_setup_mask;
2160
2161 +/* Number of siblings per CPU package */
2162 +int smp_num_siblings = 1;
2163 +EXPORT_SYMBOL(smp_num_siblings);
2164 +
2165 +/* Last level cache ID of each logical CPU */
2166 +DEFINE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id) = BAD_APICID;
2167 +
2168 /* correctly size the local cpu masks */
2169 void __init setup_cpu_local_masks(void)
2170 {
2171 @@ -614,33 +621,36 @@ static void cpu_detect_tlb(struct cpuinfo_x86 *c)
2172 tlb_lld_4m[ENTRIES], tlb_lld_1g[ENTRIES]);
2173 }
2174
2175 -void detect_ht(struct cpuinfo_x86 *c)
2176 +int detect_ht_early(struct cpuinfo_x86 *c)
2177 {
2178 #ifdef CONFIG_SMP
2179 u32 eax, ebx, ecx, edx;
2180 - int index_msb, core_bits;
2181 - static bool printed;
2182
2183 if (!cpu_has(c, X86_FEATURE_HT))
2184 - return;
2185 + return -1;
2186
2187 if (cpu_has(c, X86_FEATURE_CMP_LEGACY))
2188 - goto out;
2189 + return -1;
2190
2191 if (cpu_has(c, X86_FEATURE_XTOPOLOGY))
2192 - return;
2193 + return -1;
2194
2195 cpuid(1, &eax, &ebx, &ecx, &edx);
2196
2197 smp_num_siblings = (ebx & 0xff0000) >> 16;
2198 -
2199 - if (smp_num_siblings == 1) {
2200 + if (smp_num_siblings == 1)
2201 pr_info_once("CPU0: Hyper-Threading is disabled\n");
2202 - goto out;
2203 - }
2204 +#endif
2205 + return 0;
2206 +}
2207
2208 - if (smp_num_siblings <= 1)
2209 - goto out;
2210 +void detect_ht(struct cpuinfo_x86 *c)
2211 +{
2212 +#ifdef CONFIG_SMP
2213 + int index_msb, core_bits;
2214 +
2215 + if (detect_ht_early(c) < 0)
2216 + return;
2217
2218 index_msb = get_count_order(smp_num_siblings);
2219 c->phys_proc_id = apic->phys_pkg_id(c->initial_apicid, index_msb);
2220 @@ -653,15 +663,6 @@ void detect_ht(struct cpuinfo_x86 *c)
2221
2222 c->cpu_core_id = apic->phys_pkg_id(c->initial_apicid, index_msb) &
2223 ((1 << core_bits) - 1);
2224 -
2225 -out:
2226 - if (!printed && (c->x86_max_cores * smp_num_siblings) > 1) {
2227 - pr_info("CPU: Physical Processor ID: %d\n",
2228 - c->phys_proc_id);
2229 - pr_info("CPU: Processor Core ID: %d\n",
2230 - c->cpu_core_id);
2231 - printed = 1;
2232 - }
2233 #endif
2234 }
2235
2236 @@ -933,6 +934,21 @@ static const __initconst struct x86_cpu_id cpu_no_spec_store_bypass[] = {
2237 {}
2238 };
2239
2240 +static const __initconst struct x86_cpu_id cpu_no_l1tf[] = {
2241 + /* in addition to cpu_no_speculation */
2242 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT1 },
2243 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_SILVERMONT2 },
2244 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_AIRMONT },
2245 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_MERRIFIELD },
2246 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_MOOREFIELD },
2247 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_GOLDMONT },
2248 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_DENVERTON },
2249 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_GEMINI_LAKE },
2250 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_XEON_PHI_KNL },
2251 + { X86_VENDOR_INTEL, 6, INTEL_FAM6_XEON_PHI_KNM },
2252 + {}
2253 +};
2254 +
2255 static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
2256 {
2257 u64 ia32_cap = 0;
2258 @@ -958,6 +974,11 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
2259 return;
2260
2261 setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN);
2262 +
2263 + if (x86_match_cpu(cpu_no_l1tf))
2264 + return;
2265 +
2266 + setup_force_cpu_bug(X86_BUG_L1TF);
2267 }
2268
2269 /*
2270 diff --git a/arch/x86/kernel/cpu/cpu.h b/arch/x86/kernel/cpu/cpu.h
2271 index 37672d299e35..cca588407dca 100644
2272 --- a/arch/x86/kernel/cpu/cpu.h
2273 +++ b/arch/x86/kernel/cpu/cpu.h
2274 @@ -47,6 +47,8 @@ extern const struct cpu_dev *const __x86_cpu_dev_start[],
2275
2276 extern void get_cpu_cap(struct cpuinfo_x86 *c);
2277 extern void cpu_detect_cache_sizes(struct cpuinfo_x86 *c);
2278 +extern int detect_extended_topology_early(struct cpuinfo_x86 *c);
2279 +extern int detect_ht_early(struct cpuinfo_x86 *c);
2280
2281 unsigned int aperfmperf_get_khz(int cpu);
2282
2283 diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
2284 index 0b2330e19169..278be092b300 100644
2285 --- a/arch/x86/kernel/cpu/intel.c
2286 +++ b/arch/x86/kernel/cpu/intel.c
2287 @@ -301,6 +301,13 @@ static void early_init_intel(struct cpuinfo_x86 *c)
2288 }
2289
2290 check_mpx_erratum(c);
2291 +
2292 + /*
2293 + * Get the number of SMT siblings early from the extended topology
2294 + * leaf, if available. Otherwise try the legacy SMT detection.
2295 + */
2296 + if (detect_extended_topology_early(c) < 0)
2297 + detect_ht_early(c);
2298 }
2299
2300 #ifdef CONFIG_X86_32
2301 diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
2302 index 4fc0e08a30b9..387a8f44fba1 100644
2303 --- a/arch/x86/kernel/cpu/microcode/core.c
2304 +++ b/arch/x86/kernel/cpu/microcode/core.c
2305 @@ -509,12 +509,20 @@ static struct platform_device *microcode_pdev;
2306
2307 static int check_online_cpus(void)
2308 {
2309 - if (num_online_cpus() == num_present_cpus())
2310 - return 0;
2311 + unsigned int cpu;
2312
2313 - pr_err("Not all CPUs online, aborting microcode update.\n");
2314 + /*
2315 + * Make sure all CPUs are online. It's fine for SMT to be disabled if
2316 + * all the primary threads are still online.
2317 + */
2318 + for_each_present_cpu(cpu) {
2319 + if (topology_is_primary_thread(cpu) && !cpu_online(cpu)) {
2320 + pr_err("Not all CPUs online, aborting microcode update.\n");
2321 + return -EINVAL;
2322 + }
2323 + }
2324
2325 - return -EINVAL;
2326 + return 0;
2327 }
2328
2329 static atomic_t late_cpus_in;
2330 diff --git a/arch/x86/kernel/cpu/topology.c b/arch/x86/kernel/cpu/topology.c
2331 index b099024d339c..19c6e800e816 100644
2332 --- a/arch/x86/kernel/cpu/topology.c
2333 +++ b/arch/x86/kernel/cpu/topology.c
2334 @@ -27,16 +27,13 @@
2335 * exists, use it for populating initial_apicid and cpu topology
2336 * detection.
2337 */
2338 -void detect_extended_topology(struct cpuinfo_x86 *c)
2339 +int detect_extended_topology_early(struct cpuinfo_x86 *c)
2340 {
2341 #ifdef CONFIG_SMP
2342 - unsigned int eax, ebx, ecx, edx, sub_index;
2343 - unsigned int ht_mask_width, core_plus_mask_width;
2344 - unsigned int core_select_mask, core_level_siblings;
2345 - static bool printed;
2346 + unsigned int eax, ebx, ecx, edx;
2347
2348 if (c->cpuid_level < 0xb)
2349 - return;
2350 + return -1;
2351
2352 cpuid_count(0xb, SMT_LEVEL, &eax, &ebx, &ecx, &edx);
2353
2354 @@ -44,7 +41,7 @@ void detect_extended_topology(struct cpuinfo_x86 *c)
2355 * check if the cpuid leaf 0xb is actually implemented.
2356 */
2357 if (ebx == 0 || (LEAFB_SUBTYPE(ecx) != SMT_TYPE))
2358 - return;
2359 + return -1;
2360
2361 set_cpu_cap(c, X86_FEATURE_XTOPOLOGY);
2362
2363 @@ -52,10 +49,30 @@ void detect_extended_topology(struct cpuinfo_x86 *c)
2364 * initial apic id, which also represents 32-bit extended x2apic id.
2365 */
2366 c->initial_apicid = edx;
2367 + smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx);
2368 +#endif
2369 + return 0;
2370 +}
2371 +
2372 +/*
2373 + * Check for extended topology enumeration cpuid leaf 0xb and if it
2374 + * exists, use it for populating initial_apicid and cpu topology
2375 + * detection.
2376 + */
2377 +void detect_extended_topology(struct cpuinfo_x86 *c)
2378 +{
2379 +#ifdef CONFIG_SMP
2380 + unsigned int eax, ebx, ecx, edx, sub_index;
2381 + unsigned int ht_mask_width, core_plus_mask_width;
2382 + unsigned int core_select_mask, core_level_siblings;
2383 +
2384 + if (detect_extended_topology_early(c) < 0)
2385 + return;
2386
2387 /*
2388 * Populate HT related information from sub-leaf level 0.
2389 */
2390 + cpuid_count(0xb, SMT_LEVEL, &eax, &ebx, &ecx, &edx);
2391 core_level_siblings = smp_num_siblings = LEVEL_MAX_SIBLINGS(ebx);
2392 core_plus_mask_width = ht_mask_width = BITS_SHIFT_NEXT_LEVEL(eax);
2393
2394 @@ -86,15 +103,5 @@ void detect_extended_topology(struct cpuinfo_x86 *c)
2395 c->apicid = apic->phys_pkg_id(c->initial_apicid, 0);
2396
2397 c->x86_max_cores = (core_level_siblings / smp_num_siblings);
2398 -
2399 - if (!printed) {
2400 - pr_info("CPU: Physical Processor ID: %d\n",
2401 - c->phys_proc_id);
2402 - if (c->x86_max_cores > 1)
2403 - pr_info("CPU: Processor Core ID: %d\n",
2404 - c->cpu_core_id);
2405 - printed = 1;
2406 - }
2407 - return;
2408 #endif
2409 }
2410 diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
2411 index f92a6593de1e..2ea85b32421a 100644
2412 --- a/arch/x86/kernel/fpu/core.c
2413 +++ b/arch/x86/kernel/fpu/core.c
2414 @@ -10,6 +10,7 @@
2415 #include <asm/fpu/signal.h>
2416 #include <asm/fpu/types.h>
2417 #include <asm/traps.h>
2418 +#include <asm/irq_regs.h>
2419
2420 #include <linux/hardirq.h>
2421 #include <linux/pkeys.h>
2422 diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
2423 index 01ebcb6f263e..7acb87cb2da8 100644
2424 --- a/arch/x86/kernel/ftrace.c
2425 +++ b/arch/x86/kernel/ftrace.c
2426 @@ -27,6 +27,7 @@
2427
2428 #include <asm/set_memory.h>
2429 #include <asm/kprobes.h>
2430 +#include <asm/sections.h>
2431 #include <asm/ftrace.h>
2432 #include <asm/nops.h>
2433
2434 diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
2435 index 8ce4212e2b8d..afa1a204bc6d 100644
2436 --- a/arch/x86/kernel/hpet.c
2437 +++ b/arch/x86/kernel/hpet.c
2438 @@ -1,6 +1,7 @@
2439 #include <linux/clocksource.h>
2440 #include <linux/clockchips.h>
2441 #include <linux/interrupt.h>
2442 +#include <linux/irq.h>
2443 #include <linux/export.h>
2444 #include <linux/delay.h>
2445 #include <linux/errno.h>
2446 diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c
2447 index 8f5cb2c7060c..02abc134367f 100644
2448 --- a/arch/x86/kernel/i8259.c
2449 +++ b/arch/x86/kernel/i8259.c
2450 @@ -5,6 +5,7 @@
2451 #include <linux/sched.h>
2452 #include <linux/ioport.h>
2453 #include <linux/interrupt.h>
2454 +#include <linux/irq.h>
2455 #include <linux/timex.h>
2456 #include <linux/random.h>
2457 #include <linux/init.h>
2458 diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
2459 index 0c5256653d6c..38c3d5790970 100644
2460 --- a/arch/x86/kernel/idt.c
2461 +++ b/arch/x86/kernel/idt.c
2462 @@ -8,6 +8,7 @@
2463 #include <asm/traps.h>
2464 #include <asm/proto.h>
2465 #include <asm/desc.h>
2466 +#include <asm/hw_irq.h>
2467
2468 struct idt_data {
2469 unsigned int vector;
2470 diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
2471 index aa9d51eea9d0..3c2326b59820 100644
2472 --- a/arch/x86/kernel/irq.c
2473 +++ b/arch/x86/kernel/irq.c
2474 @@ -10,6 +10,7 @@
2475 #include <linux/ftrace.h>
2476 #include <linux/delay.h>
2477 #include <linux/export.h>
2478 +#include <linux/irq.h>
2479
2480 #include <asm/apic.h>
2481 #include <asm/io_apic.h>
2482 diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c
2483 index c1bdbd3d3232..95600a99ae93 100644
2484 --- a/arch/x86/kernel/irq_32.c
2485 +++ b/arch/x86/kernel/irq_32.c
2486 @@ -11,6 +11,7 @@
2487
2488 #include <linux/seq_file.h>
2489 #include <linux/interrupt.h>
2490 +#include <linux/irq.h>
2491 #include <linux/kernel_stat.h>
2492 #include <linux/notifier.h>
2493 #include <linux/cpu.h>
2494 diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c
2495 index d86e344f5b3d..0469cd078db1 100644
2496 --- a/arch/x86/kernel/irq_64.c
2497 +++ b/arch/x86/kernel/irq_64.c
2498 @@ -11,6 +11,7 @@
2499
2500 #include <linux/kernel_stat.h>
2501 #include <linux/interrupt.h>
2502 +#include <linux/irq.h>
2503 #include <linux/seq_file.h>
2504 #include <linux/delay.h>
2505 #include <linux/ftrace.h>
2506 diff --git a/arch/x86/kernel/irqinit.c b/arch/x86/kernel/irqinit.c
2507 index 1e4094eba15e..40f83d0d7b8a 100644
2508 --- a/arch/x86/kernel/irqinit.c
2509 +++ b/arch/x86/kernel/irqinit.c
2510 @@ -5,6 +5,7 @@
2511 #include <linux/sched.h>
2512 #include <linux/ioport.h>
2513 #include <linux/interrupt.h>
2514 +#include <linux/irq.h>
2515 #include <linux/timex.h>
2516 #include <linux/random.h>
2517 #include <linux/kprobes.h>
2518 diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
2519 index f1030c522e06..65452d555f05 100644
2520 --- a/arch/x86/kernel/kprobes/core.c
2521 +++ b/arch/x86/kernel/kprobes/core.c
2522 @@ -63,6 +63,7 @@
2523 #include <asm/insn.h>
2524 #include <asm/debugreg.h>
2525 #include <asm/set_memory.h>
2526 +#include <asm/sections.h>
2527
2528 #include "common.h"
2529
2530 @@ -394,8 +395,6 @@ int __copy_instruction(u8 *dest, u8 *src, struct insn *insn)
2531 - (u8 *) dest;
2532 if ((s64) (s32) newdisp != newdisp) {
2533 pr_err("Kprobes error: new displacement does not fit into s32 (%llx)\n", newdisp);
2534 - pr_err("\tSrc: %p, Dest: %p, old disp: %x\n",
2535 - src, dest, insn->displacement.value);
2536 return 0;
2537 }
2538 disp = (u8 *) dest + insn_offset_displacement(insn);
2539 @@ -621,8 +620,7 @@ static int reenter_kprobe(struct kprobe *p, struct pt_regs *regs,
2540 * Raise a BUG or we'll continue in an endless reentering loop
2541 * and eventually a stack overflow.
2542 */
2543 - printk(KERN_WARNING "Unrecoverable kprobe detected at %p.\n",
2544 - p->addr);
2545 + pr_err("Unrecoverable kprobe detected.\n");
2546 dump_kprobe(p);
2547 BUG();
2548 default:
2549 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
2550 index e1df9ef5d78c..f3559b84cd75 100644
2551 --- a/arch/x86/kernel/paravirt.c
2552 +++ b/arch/x86/kernel/paravirt.c
2553 @@ -88,10 +88,12 @@ unsigned paravirt_patch_call(void *insnbuf,
2554 struct branch *b = insnbuf;
2555 unsigned long delta = (unsigned long)target - (addr+5);
2556
2557 - if (tgt_clobbers & ~site_clobbers)
2558 - return len; /* target would clobber too much for this site */
2559 - if (len < 5)
2560 + if (len < 5) {
2561 +#ifdef CONFIG_RETPOLINE
2562 + WARN_ONCE("Failing to patch indirect CALL in %ps\n", (void *)addr);
2563 +#endif
2564 return len; /* call too long for patch site */
2565 + }
2566
2567 b->opcode = 0xe8; /* call */
2568 b->delta = delta;
2569 @@ -106,8 +108,12 @@ unsigned paravirt_patch_jmp(void *insnbuf, const void *target,
2570 struct branch *b = insnbuf;
2571 unsigned long delta = (unsigned long)target - (addr+5);
2572
2573 - if (len < 5)
2574 + if (len < 5) {
2575 +#ifdef CONFIG_RETPOLINE
2576 + WARN_ONCE("Failing to patch indirect JMP in %ps\n", (void *)addr);
2577 +#endif
2578 return len; /* call too long for patch site */
2579 + }
2580
2581 b->opcode = 0xe9; /* jmp */
2582 b->delta = delta;
2583 diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
2584 index efbcf5283520..dcb00acb6583 100644
2585 --- a/arch/x86/kernel/setup.c
2586 +++ b/arch/x86/kernel/setup.c
2587 @@ -852,6 +852,12 @@ void __init setup_arch(char **cmdline_p)
2588 memblock_reserve(__pa_symbol(_text),
2589 (unsigned long)__bss_stop - (unsigned long)_text);
2590
2591 + /*
2592 + * Make sure page 0 is always reserved because on systems with
2593 + * L1TF its contents can be leaked to user processes.
2594 + */
2595 + memblock_reserve(0, PAGE_SIZE);
2596 +
2597 early_reserve_initrd();
2598
2599 /*
2600 diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
2601 index 5c574dff4c1a..04adc8d60aed 100644
2602 --- a/arch/x86/kernel/smp.c
2603 +++ b/arch/x86/kernel/smp.c
2604 @@ -261,6 +261,7 @@ __visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs)
2605 {
2606 ack_APIC_irq();
2607 inc_irq_stat(irq_resched_count);
2608 + kvm_set_cpu_l1tf_flush_l1d();
2609
2610 if (trace_resched_ipi_enabled()) {
2611 /*
2612 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
2613 index 344d3c160f8d..5ebb0dbcf4f7 100644
2614 --- a/arch/x86/kernel/smpboot.c
2615 +++ b/arch/x86/kernel/smpboot.c
2616 @@ -78,13 +78,7 @@
2617 #include <asm/realmode.h>
2618 #include <asm/misc.h>
2619 #include <asm/spec-ctrl.h>
2620 -
2621 -/* Number of siblings per CPU package */
2622 -int smp_num_siblings = 1;
2623 -EXPORT_SYMBOL(smp_num_siblings);
2624 -
2625 -/* Last level cache ID of each logical CPU */
2626 -DEFINE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id) = BAD_APICID;
2627 +#include <asm/hw_irq.h>
2628
2629 /* representing HT siblings of each logical CPU */
2630 DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_map);
2631 @@ -311,6 +305,23 @@ found:
2632 return 0;
2633 }
2634
2635 +/**
2636 + * topology_is_primary_thread - Check whether CPU is the primary SMT thread
2637 + * @cpu: CPU to check
2638 + */
2639 +bool topology_is_primary_thread(unsigned int cpu)
2640 +{
2641 + return apic_id_is_primary_thread(per_cpu(x86_cpu_to_apicid, cpu));
2642 +}
2643 +
2644 +/**
2645 + * topology_smt_supported - Check whether SMT is supported by the CPUs
2646 + */
2647 +bool topology_smt_supported(void)
2648 +{
2649 + return smp_num_siblings > 1;
2650 +}
2651 +
2652 /**
2653 * topology_phys_to_logical_pkg - Map a physical package id to a logical
2654 *
2655 diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c
2656 index 879af864d99a..49a5c394f3ed 100644
2657 --- a/arch/x86/kernel/time.c
2658 +++ b/arch/x86/kernel/time.c
2659 @@ -12,6 +12,7 @@
2660
2661 #include <linux/clockchips.h>
2662 #include <linux/interrupt.h>
2663 +#include <linux/irq.h>
2664 #include <linux/i8253.h>
2665 #include <linux/time.h>
2666 #include <linux/export.h>
2667 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
2668 index 2ef2f1fe875b..00e2ae033a0f 100644
2669 --- a/arch/x86/kvm/mmu.c
2670 +++ b/arch/x86/kvm/mmu.c
2671 @@ -3825,6 +3825,7 @@ int kvm_handle_page_fault(struct kvm_vcpu *vcpu, u64 error_code,
2672 {
2673 int r = 1;
2674
2675 + vcpu->arch.l1tf_flush_l1d = true;
2676 switch (vcpu->arch.apf.host_apf_reason) {
2677 default:
2678 trace_kvm_page_fault(fault_address, error_code);
2679 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
2680 index cfa155078ebb..282bbcbf3b6a 100644
2681 --- a/arch/x86/kvm/svm.c
2682 +++ b/arch/x86/kvm/svm.c
2683 @@ -175,6 +175,8 @@ struct vcpu_svm {
2684 uint64_t sysenter_eip;
2685 uint64_t tsc_aux;
2686
2687 + u64 msr_decfg;
2688 +
2689 u64 next_rip;
2690
2691 u64 host_user_msrs[NR_HOST_SAVE_USER_MSRS];
2692 @@ -1616,6 +1618,7 @@ static void svm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
2693 u32 dummy;
2694 u32 eax = 1;
2695
2696 + vcpu->arch.microcode_version = 0x01000065;
2697 svm->spec_ctrl = 0;
2698 svm->virt_spec_ctrl = 0;
2699
2700 @@ -3555,6 +3558,22 @@ static int cr8_write_interception(struct vcpu_svm *svm)
2701 return 0;
2702 }
2703
2704 +static int svm_get_msr_feature(struct kvm_msr_entry *msr)
2705 +{
2706 + msr->data = 0;
2707 +
2708 + switch (msr->index) {
2709 + case MSR_F10H_DECFG:
2710 + if (boot_cpu_has(X86_FEATURE_LFENCE_RDTSC))
2711 + msr->data |= MSR_F10H_DECFG_LFENCE_SERIALIZE;
2712 + break;
2713 + default:
2714 + return 1;
2715 + }
2716 +
2717 + return 0;
2718 +}
2719 +
2720 static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
2721 {
2722 struct vcpu_svm *svm = to_svm(vcpu);
2723 @@ -3637,9 +3656,6 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
2724
2725 msr_info->data = svm->virt_spec_ctrl;
2726 break;
2727 - case MSR_IA32_UCODE_REV:
2728 - msr_info->data = 0x01000065;
2729 - break;
2730 case MSR_F15H_IC_CFG: {
2731
2732 int family, model;
2733 @@ -3657,6 +3673,9 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
2734 msr_info->data = 0x1E;
2735 }
2736 break;
2737 + case MSR_F10H_DECFG:
2738 + msr_info->data = svm->msr_decfg;
2739 + break;
2740 default:
2741 return kvm_get_msr_common(vcpu, msr_info);
2742 }
2743 @@ -3845,6 +3864,24 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
2744 case MSR_VM_IGNNE:
2745 vcpu_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data);
2746 break;
2747 + case MSR_F10H_DECFG: {
2748 + struct kvm_msr_entry msr_entry;
2749 +
2750 + msr_entry.index = msr->index;
2751 + if (svm_get_msr_feature(&msr_entry))
2752 + return 1;
2753 +
2754 + /* Check the supported bits */
2755 + if (data & ~msr_entry.data)
2756 + return 1;
2757 +
2758 + /* Don't allow the guest to change a bit, #GP */
2759 + if (!msr->host_initiated && (data ^ msr_entry.data))
2760 + return 1;
2761 +
2762 + svm->msr_decfg = data;
2763 + break;
2764 + }
2765 case MSR_IA32_APICBASE:
2766 if (kvm_vcpu_apicv_active(vcpu))
2767 avic_update_vapic_bar(to_svm(vcpu), data);
2768 @@ -5588,6 +5625,7 @@ static struct kvm_x86_ops svm_x86_ops __ro_after_init = {
2769 .vcpu_unblocking = svm_vcpu_unblocking,
2770
2771 .update_bp_intercept = update_bp_intercept,
2772 + .get_msr_feature = svm_get_msr_feature,
2773 .get_msr = svm_get_msr,
2774 .set_msr = svm_set_msr,
2775 .get_segment_base = svm_get_segment_base,
2776 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
2777 index 8d000fde1414..f015ca3997d9 100644
2778 --- a/arch/x86/kvm/vmx.c
2779 +++ b/arch/x86/kvm/vmx.c
2780 @@ -191,6 +191,150 @@ module_param(ple_window_max, int, S_IRUGO);
2781
2782 extern const ulong vmx_return;
2783
2784 +static DEFINE_STATIC_KEY_FALSE(vmx_l1d_should_flush);
2785 +static DEFINE_STATIC_KEY_FALSE(vmx_l1d_flush_cond);
2786 +static DEFINE_MUTEX(vmx_l1d_flush_mutex);
2787 +
2788 +/* Storage for pre module init parameter parsing */
2789 +static enum vmx_l1d_flush_state __read_mostly vmentry_l1d_flush_param = VMENTER_L1D_FLUSH_AUTO;
2790 +
2791 +static const struct {
2792 + const char *option;
2793 + enum vmx_l1d_flush_state cmd;
2794 +} vmentry_l1d_param[] = {
2795 + {"auto", VMENTER_L1D_FLUSH_AUTO},
2796 + {"never", VMENTER_L1D_FLUSH_NEVER},
2797 + {"cond", VMENTER_L1D_FLUSH_COND},
2798 + {"always", VMENTER_L1D_FLUSH_ALWAYS},
2799 +};
2800 +
2801 +#define L1D_CACHE_ORDER 4
2802 +static void *vmx_l1d_flush_pages;
2803 +
2804 +static int vmx_setup_l1d_flush(enum vmx_l1d_flush_state l1tf)
2805 +{
2806 + struct page *page;
2807 + unsigned int i;
2808 +
2809 + if (!enable_ept) {
2810 + l1tf_vmx_mitigation = VMENTER_L1D_FLUSH_EPT_DISABLED;
2811 + return 0;
2812 + }
2813 +
2814 + if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES)) {
2815 + u64 msr;
2816 +
2817 + rdmsrl(MSR_IA32_ARCH_CAPABILITIES, msr);
2818 + if (msr & ARCH_CAP_SKIP_VMENTRY_L1DFLUSH) {
2819 + l1tf_vmx_mitigation = VMENTER_L1D_FLUSH_NOT_REQUIRED;
2820 + return 0;
2821 + }
2822 + }
2823 +
2824 + /* If set to auto use the default l1tf mitigation method */
2825 + if (l1tf == VMENTER_L1D_FLUSH_AUTO) {
2826 + switch (l1tf_mitigation) {
2827 + case L1TF_MITIGATION_OFF:
2828 + l1tf = VMENTER_L1D_FLUSH_NEVER;
2829 + break;
2830 + case L1TF_MITIGATION_FLUSH_NOWARN:
2831 + case L1TF_MITIGATION_FLUSH:
2832 + case L1TF_MITIGATION_FLUSH_NOSMT:
2833 + l1tf = VMENTER_L1D_FLUSH_COND;
2834 + break;
2835 + case L1TF_MITIGATION_FULL:
2836 + case L1TF_MITIGATION_FULL_FORCE:
2837 + l1tf = VMENTER_L1D_FLUSH_ALWAYS;
2838 + break;
2839 + }
2840 + } else if (l1tf_mitigation == L1TF_MITIGATION_FULL_FORCE) {
2841 + l1tf = VMENTER_L1D_FLUSH_ALWAYS;
2842 + }
2843 +
2844 + if (l1tf != VMENTER_L1D_FLUSH_NEVER && !vmx_l1d_flush_pages &&
2845 + !boot_cpu_has(X86_FEATURE_FLUSH_L1D)) {
2846 + page = alloc_pages(GFP_KERNEL, L1D_CACHE_ORDER);
2847 + if (!page)
2848 + return -ENOMEM;
2849 + vmx_l1d_flush_pages = page_address(page);
2850 +
2851 + /*
2852 + * Initialize each page with a different pattern in
2853 + * order to protect against KSM in the nested
2854 + * virtualization case.
2855 + */
2856 + for (i = 0; i < 1u << L1D_CACHE_ORDER; ++i) {
2857 + memset(vmx_l1d_flush_pages + i * PAGE_SIZE, i + 1,
2858 + PAGE_SIZE);
2859 + }
2860 + }
2861 +
2862 + l1tf_vmx_mitigation = l1tf;
2863 +
2864 + if (l1tf != VMENTER_L1D_FLUSH_NEVER)
2865 + static_branch_enable(&vmx_l1d_should_flush);
2866 + else
2867 + static_branch_disable(&vmx_l1d_should_flush);
2868 +
2869 + if (l1tf == VMENTER_L1D_FLUSH_COND)
2870 + static_branch_enable(&vmx_l1d_flush_cond);
2871 + else
2872 + static_branch_disable(&vmx_l1d_flush_cond);
2873 + return 0;
2874 +}
2875 +
2876 +static int vmentry_l1d_flush_parse(const char *s)
2877 +{
2878 + unsigned int i;
2879 +
2880 + if (s) {
2881 + for (i = 0; i < ARRAY_SIZE(vmentry_l1d_param); i++) {
2882 + if (sysfs_streq(s, vmentry_l1d_param[i].option))
2883 + return vmentry_l1d_param[i].cmd;
2884 + }
2885 + }
2886 + return -EINVAL;
2887 +}
2888 +
2889 +static int vmentry_l1d_flush_set(const char *s, const struct kernel_param *kp)
2890 +{
2891 + int l1tf, ret;
2892 +
2893 + if (!boot_cpu_has(X86_BUG_L1TF))
2894 + return 0;
2895 +
2896 + l1tf = vmentry_l1d_flush_parse(s);
2897 + if (l1tf < 0)
2898 + return l1tf;
2899 +
2900 + /*
2901 + * Has vmx_init() run already? If not then this is the pre init
2902 + * parameter parsing. In that case just store the value and let
2903 + * vmx_init() do the proper setup after enable_ept has been
2904 + * established.
2905 + */
2906 + if (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_AUTO) {
2907 + vmentry_l1d_flush_param = l1tf;
2908 + return 0;
2909 + }
2910 +
2911 + mutex_lock(&vmx_l1d_flush_mutex);
2912 + ret = vmx_setup_l1d_flush(l1tf);
2913 + mutex_unlock(&vmx_l1d_flush_mutex);
2914 + return ret;
2915 +}
2916 +
2917 +static int vmentry_l1d_flush_get(char *s, const struct kernel_param *kp)
2918 +{
2919 + return sprintf(s, "%s\n", vmentry_l1d_param[l1tf_vmx_mitigation].option);
2920 +}
2921 +
2922 +static const struct kernel_param_ops vmentry_l1d_flush_ops = {
2923 + .set = vmentry_l1d_flush_set,
2924 + .get = vmentry_l1d_flush_get,
2925 +};
2926 +module_param_cb(vmentry_l1d_flush, &vmentry_l1d_flush_ops, NULL, 0644);
2927 +
2928 #define NR_AUTOLOAD_MSRS 8
2929
2930 struct vmcs {
2931 @@ -567,6 +711,11 @@ static inline int pi_test_sn(struct pi_desc *pi_desc)
2932 (unsigned long *)&pi_desc->control);
2933 }
2934
2935 +struct vmx_msrs {
2936 + unsigned int nr;
2937 + struct vmx_msr_entry val[NR_AUTOLOAD_MSRS];
2938 +};
2939 +
2940 struct vcpu_vmx {
2941 struct kvm_vcpu vcpu;
2942 unsigned long host_rsp;
2943 @@ -600,9 +749,8 @@ struct vcpu_vmx {
2944 struct loaded_vmcs *loaded_vmcs;
2945 bool __launched; /* temporary, used in vmx_vcpu_run */
2946 struct msr_autoload {
2947 - unsigned nr;
2948 - struct vmx_msr_entry guest[NR_AUTOLOAD_MSRS];
2949 - struct vmx_msr_entry host[NR_AUTOLOAD_MSRS];
2950 + struct vmx_msrs guest;
2951 + struct vmx_msrs host;
2952 } msr_autoload;
2953 struct {
2954 int loaded;
2955 @@ -1967,9 +2115,20 @@ static void clear_atomic_switch_msr_special(struct vcpu_vmx *vmx,
2956 vm_exit_controls_clearbit(vmx, exit);
2957 }
2958
2959 +static int find_msr(struct vmx_msrs *m, unsigned int msr)
2960 +{
2961 + unsigned int i;
2962 +
2963 + for (i = 0; i < m->nr; ++i) {
2964 + if (m->val[i].index == msr)
2965 + return i;
2966 + }
2967 + return -ENOENT;
2968 +}
2969 +
2970 static void clear_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr)
2971 {
2972 - unsigned i;
2973 + int i;
2974 struct msr_autoload *m = &vmx->msr_autoload;
2975
2976 switch (msr) {
2977 @@ -1990,18 +2149,21 @@ static void clear_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr)
2978 }
2979 break;
2980 }
2981 + i = find_msr(&m->guest, msr);
2982 + if (i < 0)
2983 + goto skip_guest;
2984 + --m->guest.nr;
2985 + m->guest.val[i] = m->guest.val[m->guest.nr];
2986 + vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, m->guest.nr);
2987
2988 - for (i = 0; i < m->nr; ++i)
2989 - if (m->guest[i].index == msr)
2990 - break;
2991 -
2992 - if (i == m->nr)
2993 +skip_guest:
2994 + i = find_msr(&m->host, msr);
2995 + if (i < 0)
2996 return;
2997 - --m->nr;
2998 - m->guest[i] = m->guest[m->nr];
2999 - m->host[i] = m->host[m->nr];
3000 - vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, m->nr);
3001 - vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, m->nr);
3002 +
3003 + --m->host.nr;
3004 + m->host.val[i] = m->host.val[m->host.nr];
3005 + vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, m->host.nr);
3006 }
3007
3008 static void add_atomic_switch_msr_special(struct vcpu_vmx *vmx,
3009 @@ -2016,9 +2178,9 @@ static void add_atomic_switch_msr_special(struct vcpu_vmx *vmx,
3010 }
3011
3012 static void add_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr,
3013 - u64 guest_val, u64 host_val)
3014 + u64 guest_val, u64 host_val, bool entry_only)
3015 {
3016 - unsigned i;
3017 + int i, j = 0;
3018 struct msr_autoload *m = &vmx->msr_autoload;
3019
3020 switch (msr) {
3021 @@ -2053,24 +2215,31 @@ static void add_atomic_switch_msr(struct vcpu_vmx *vmx, unsigned msr,
3022 wrmsrl(MSR_IA32_PEBS_ENABLE, 0);
3023 }
3024
3025 - for (i = 0; i < m->nr; ++i)
3026 - if (m->guest[i].index == msr)
3027 - break;
3028 + i = find_msr(&m->guest, msr);
3029 + if (!entry_only)
3030 + j = find_msr(&m->host, msr);
3031
3032 - if (i == NR_AUTOLOAD_MSRS) {
3033 + if (i == NR_AUTOLOAD_MSRS || j == NR_AUTOLOAD_MSRS) {
3034 printk_once(KERN_WARNING "Not enough msr switch entries. "
3035 "Can't add msr %x\n", msr);
3036 return;
3037 - } else if (i == m->nr) {
3038 - ++m->nr;
3039 - vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, m->nr);
3040 - vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, m->nr);
3041 }
3042 + if (i < 0) {
3043 + i = m->guest.nr++;
3044 + vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, m->guest.nr);
3045 + }
3046 + m->guest.val[i].index = msr;
3047 + m->guest.val[i].value = guest_val;
3048
3049 - m->guest[i].index = msr;
3050 - m->guest[i].value = guest_val;
3051 - m->host[i].index = msr;
3052 - m->host[i].value = host_val;
3053 + if (entry_only)
3054 + return;
3055 +
3056 + if (j < 0) {
3057 + j = m->host.nr++;
3058 + vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, m->host.nr);
3059 + }
3060 + m->host.val[j].index = msr;
3061 + m->host.val[j].value = host_val;
3062 }
3063
3064 static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset)
3065 @@ -2114,7 +2283,7 @@ static bool update_transition_efer(struct vcpu_vmx *vmx, int efer_offset)
3066 guest_efer &= ~EFER_LME;
3067 if (guest_efer != host_efer)
3068 add_atomic_switch_msr(vmx, MSR_EFER,
3069 - guest_efer, host_efer);
3070 + guest_efer, host_efer, false);
3071 return false;
3072 } else {
3073 guest_efer &= ~ignore_bits;
3074 @@ -3266,6 +3435,11 @@ static inline bool vmx_feature_control_msr_valid(struct kvm_vcpu *vcpu,
3075 return !(val & ~valid_bits);
3076 }
3077
3078 +static int vmx_get_msr_feature(struct kvm_msr_entry *msr)
3079 +{
3080 + return 1;
3081 +}
3082 +
3083 /*
3084 * Reads an msr value (of 'msr_index') into 'pdata'.
3085 * Returns 0 on success, non-0 otherwise.
3086 @@ -3523,7 +3697,7 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
3087 vcpu->arch.ia32_xss = data;
3088 if (vcpu->arch.ia32_xss != host_xss)
3089 add_atomic_switch_msr(vmx, MSR_IA32_XSS,
3090 - vcpu->arch.ia32_xss, host_xss);
3091 + vcpu->arch.ia32_xss, host_xss, false);
3092 else
3093 clear_atomic_switch_msr(vmx, MSR_IA32_XSS);
3094 break;
3095 @@ -5714,9 +5888,9 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
3096
3097 vmcs_write32(VM_EXIT_MSR_STORE_COUNT, 0);
3098 vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, 0);
3099 - vmcs_write64(VM_EXIT_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.host));
3100 + vmcs_write64(VM_EXIT_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.host.val));
3101 vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, 0);
3102 - vmcs_write64(VM_ENTRY_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.guest));
3103 + vmcs_write64(VM_ENTRY_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.guest.val));
3104
3105 if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT)
3106 vmcs_write64(GUEST_IA32_PAT, vmx->vcpu.arch.pat);
3107 @@ -5736,8 +5910,7 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
3108 ++vmx->nmsrs;
3109 }
3110
3111 - if (boot_cpu_has(X86_FEATURE_ARCH_CAPABILITIES))
3112 - rdmsrl(MSR_IA32_ARCH_CAPABILITIES, vmx->arch_capabilities);
3113 + vmx->arch_capabilities = kvm_get_arch_capabilities();
3114
3115 vm_exit_controls_init(vmx, vmcs_config.vmexit_ctrl);
3116
3117 @@ -5770,6 +5943,7 @@ static void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
3118 vmx->rmode.vm86_active = 0;
3119 vmx->spec_ctrl = 0;
3120
3121 + vcpu->arch.microcode_version = 0x100000000ULL;
3122 vmx->vcpu.arch.regs[VCPU_REGS_RDX] = get_rdx_init_val();
3123 kvm_set_cr8(vcpu, 0);
3124
3125 @@ -8987,6 +9161,79 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)
3126 }
3127 }
3128
3129 +/*
3130 + * Software based L1D cache flush which is used when microcode providing
3131 + * the cache control MSR is not loaded.
3132 + *
3133 + * The L1D cache is 32 KiB on Nehalem and later microarchitectures, but to
3134 + * flush it is required to read in 64 KiB because the replacement algorithm
3135 + * is not exactly LRU. This could be sized at runtime via topology
3136 + * information but as all relevant affected CPUs have 32KiB L1D cache size
3137 + * there is no point in doing so.
3138 + */
3139 +#define L1D_CACHE_ORDER 4
3140 +static void *vmx_l1d_flush_pages;
3141 +
3142 +static void vmx_l1d_flush(struct kvm_vcpu *vcpu)
3143 +{
3144 + int size = PAGE_SIZE << L1D_CACHE_ORDER;
3145 +
3146 + /*
3147 + * This code is only executed when the the flush mode is 'cond' or
3148 + * 'always'
3149 + */
3150 + if (static_branch_likely(&vmx_l1d_flush_cond)) {
3151 + bool flush_l1d;
3152 +
3153 + /*
3154 + * Clear the per-vcpu flush bit, it gets set again
3155 + * either from vcpu_run() or from one of the unsafe
3156 + * VMEXIT handlers.
3157 + */
3158 + flush_l1d = vcpu->arch.l1tf_flush_l1d;
3159 + vcpu->arch.l1tf_flush_l1d = false;
3160 +
3161 + /*
3162 + * Clear the per-cpu flush bit, it gets set again from
3163 + * the interrupt handlers.
3164 + */
3165 + flush_l1d |= kvm_get_cpu_l1tf_flush_l1d();
3166 + kvm_clear_cpu_l1tf_flush_l1d();
3167 +
3168 + if (!flush_l1d)
3169 + return;
3170 + }
3171 +
3172 + vcpu->stat.l1d_flush++;
3173 +
3174 + if (static_cpu_has(X86_FEATURE_FLUSH_L1D)) {
3175 + wrmsrl(MSR_IA32_FLUSH_CMD, L1D_FLUSH);
3176 + return;
3177 + }
3178 +
3179 + asm volatile(
3180 + /* First ensure the pages are in the TLB */
3181 + "xorl %%eax, %%eax\n"
3182 + ".Lpopulate_tlb:\n\t"
3183 + "movzbl (%[flush_pages], %%" _ASM_AX "), %%ecx\n\t"
3184 + "addl $4096, %%eax\n\t"
3185 + "cmpl %%eax, %[size]\n\t"
3186 + "jne .Lpopulate_tlb\n\t"
3187 + "xorl %%eax, %%eax\n\t"
3188 + "cpuid\n\t"
3189 + /* Now fill the cache */
3190 + "xorl %%eax, %%eax\n"
3191 + ".Lfill_cache:\n"
3192 + "movzbl (%[flush_pages], %%" _ASM_AX "), %%ecx\n\t"
3193 + "addl $64, %%eax\n\t"
3194 + "cmpl %%eax, %[size]\n\t"
3195 + "jne .Lfill_cache\n\t"
3196 + "lfence\n"
3197 + :: [flush_pages] "r" (vmx_l1d_flush_pages),
3198 + [size] "r" (size)
3199 + : "eax", "ebx", "ecx", "edx");
3200 +}
3201 +
3202 static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
3203 {
3204 struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
3205 @@ -9390,7 +9637,7 @@ static void atomic_switch_perf_msrs(struct vcpu_vmx *vmx)
3206 clear_atomic_switch_msr(vmx, msrs[i].msr);
3207 else
3208 add_atomic_switch_msr(vmx, msrs[i].msr, msrs[i].guest,
3209 - msrs[i].host);
3210 + msrs[i].host, false);
3211 }
3212
3213 static void vmx_arm_hv_timer(struct kvm_vcpu *vcpu)
3214 @@ -9483,6 +9730,9 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
3215
3216 vmx->__launched = vmx->loaded_vmcs->launched;
3217
3218 + if (static_branch_unlikely(&vmx_l1d_should_flush))
3219 + vmx_l1d_flush(vcpu);
3220 +
3221 asm(
3222 /* Store host registers */
3223 "push %%" _ASM_DX "; push %%" _ASM_BP ";"
3224 @@ -9835,6 +10085,37 @@ free_vcpu:
3225 return ERR_PTR(err);
3226 }
3227
3228 +#define L1TF_MSG_SMT "L1TF CPU bug present and SMT on, data leak possible. See CVE-2018-3646 and https://www.kernel.org/doc/html/latest/admin-guide/l1tf.html for details.\n"
3229 +#define L1TF_MSG_L1D "L1TF CPU bug present and virtualization mitigation disabled, data leak possible. See CVE-2018-3646 and https://www.kernel.org/doc/html/latest/admin-guide/l1tf.html for details.\n"
3230 +
3231 +static int vmx_vm_init(struct kvm *kvm)
3232 +{
3233 + if (boot_cpu_has(X86_BUG_L1TF) && enable_ept) {
3234 + switch (l1tf_mitigation) {
3235 + case L1TF_MITIGATION_OFF:
3236 + case L1TF_MITIGATION_FLUSH_NOWARN:
3237 + /* 'I explicitly don't care' is set */
3238 + break;
3239 + case L1TF_MITIGATION_FLUSH:
3240 + case L1TF_MITIGATION_FLUSH_NOSMT:
3241 + case L1TF_MITIGATION_FULL:
3242 + /*
3243 + * Warn upon starting the first VM in a potentially
3244 + * insecure environment.
3245 + */
3246 + if (cpu_smt_control == CPU_SMT_ENABLED)
3247 + pr_warn_once(L1TF_MSG_SMT);
3248 + if (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_NEVER)
3249 + pr_warn_once(L1TF_MSG_L1D);
3250 + break;
3251 + case L1TF_MITIGATION_FULL_FORCE:
3252 + /* Flush is enforced */
3253 + break;
3254 + }
3255 + }
3256 + return 0;
3257 +}
3258 +
3259 static void __init vmx_check_processor_compat(void *rtn)
3260 {
3261 struct vmcs_config vmcs_conf;
3262 @@ -10774,10 +11055,10 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
3263 * Set the MSR load/store lists to match L0's settings.
3264 */
3265 vmcs_write32(VM_EXIT_MSR_STORE_COUNT, 0);
3266 - vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.nr);
3267 - vmcs_write64(VM_EXIT_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.host));
3268 - vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.nr);
3269 - vmcs_write64(VM_ENTRY_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.guest));
3270 + vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.host.nr);
3271 + vmcs_write64(VM_EXIT_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.host.val));
3272 + vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.guest.nr);
3273 + vmcs_write64(VM_ENTRY_MSR_LOAD_ADDR, __pa(vmx->msr_autoload.guest.val));
3274
3275 /*
3276 * HOST_RSP is normally set correctly in vmx_vcpu_run() just before
3277 @@ -11202,6 +11483,9 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
3278 if (ret)
3279 return ret;
3280
3281 + /* Hide L1D cache contents from the nested guest. */
3282 + vmx->vcpu.arch.l1tf_flush_l1d = true;
3283 +
3284 /*
3285 * If we're entering a halted L2 vcpu and the L2 vcpu won't be woken
3286 * by event injection, halt vcpu.
3287 @@ -11712,8 +11996,8 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
3288 vmx_segment_cache_clear(vmx);
3289
3290 /* Update any VMCS fields that might have changed while L2 ran */
3291 - vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.nr);
3292 - vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.nr);
3293 + vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.host.nr);
3294 + vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.guest.nr);
3295 vmcs_write64(TSC_OFFSET, vcpu->arch.tsc_offset);
3296 if (vmx->hv_deadline_tsc == -1)
3297 vmcs_clear_bits(PIN_BASED_VM_EXEC_CONTROL,
3298 @@ -12225,6 +12509,8 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = {
3299 .cpu_has_accelerated_tpr = report_flexpriority,
3300 .has_emulated_msr = vmx_has_emulated_msr,
3301
3302 + .vm_init = vmx_vm_init,
3303 +
3304 .vcpu_create = vmx_create_vcpu,
3305 .vcpu_free = vmx_free_vcpu,
3306 .vcpu_reset = vmx_vcpu_reset,
3307 @@ -12234,6 +12520,7 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = {
3308 .vcpu_put = vmx_vcpu_put,
3309
3310 .update_bp_intercept = update_exception_bitmap,
3311 + .get_msr_feature = vmx_get_msr_feature,
3312 .get_msr = vmx_get_msr,
3313 .set_msr = vmx_set_msr,
3314 .get_segment_base = vmx_get_segment_base,
3315 @@ -12341,22 +12628,18 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = {
3316 .setup_mce = vmx_setup_mce,
3317 };
3318
3319 -static int __init vmx_init(void)
3320 +static void vmx_cleanup_l1d_flush(void)
3321 {
3322 - int r = kvm_init(&vmx_x86_ops, sizeof(struct vcpu_vmx),
3323 - __alignof__(struct vcpu_vmx), THIS_MODULE);
3324 - if (r)
3325 - return r;
3326 -
3327 -#ifdef CONFIG_KEXEC_CORE
3328 - rcu_assign_pointer(crash_vmclear_loaded_vmcss,
3329 - crash_vmclear_local_loaded_vmcss);
3330 -#endif
3331 -
3332 - return 0;
3333 + if (vmx_l1d_flush_pages) {
3334 + free_pages((unsigned long)vmx_l1d_flush_pages, L1D_CACHE_ORDER);
3335 + vmx_l1d_flush_pages = NULL;
3336 + }
3337 + /* Restore state so sysfs ignores VMX */
3338 + l1tf_vmx_mitigation = VMENTER_L1D_FLUSH_AUTO;
3339 }
3340
3341 -static void __exit vmx_exit(void)
3342 +
3343 +static void vmx_exit(void)
3344 {
3345 #ifdef CONFIG_KEXEC_CORE
3346 RCU_INIT_POINTER(crash_vmclear_loaded_vmcss, NULL);
3347 @@ -12364,7 +12647,40 @@ static void __exit vmx_exit(void)
3348 #endif
3349
3350 kvm_exit();
3351 +
3352 + vmx_cleanup_l1d_flush();
3353 }
3354 +module_exit(vmx_exit)
3355
3356 +static int __init vmx_init(void)
3357 +{
3358 + int r;
3359 +
3360 + r = kvm_init(&vmx_x86_ops, sizeof(struct vcpu_vmx),
3361 + __alignof__(struct vcpu_vmx), THIS_MODULE);
3362 + if (r)
3363 + return r;
3364 +
3365 + /*
3366 + * Must be called after kvm_init() so enable_ept is properly set
3367 + * up. Hand the parameter mitigation value in which was stored in
3368 + * the pre module init parser. If no parameter was given, it will
3369 + * contain 'auto' which will be turned into the default 'cond'
3370 + * mitigation mode.
3371 + */
3372 + if (boot_cpu_has(X86_BUG_L1TF)) {
3373 + r = vmx_setup_l1d_flush(vmentry_l1d_flush_param);
3374 + if (r) {
3375 + vmx_exit();
3376 + return r;
3377 + }
3378 + }
3379 +
3380 +#ifdef CONFIG_KEXEC_CORE
3381 + rcu_assign_pointer(crash_vmclear_loaded_vmcss,
3382 + crash_vmclear_local_loaded_vmcss);
3383 +#endif
3384 +
3385 + return 0;
3386 +}
3387 module_init(vmx_init)
3388 -module_exit(vmx_exit)
3389 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
3390 index 2f3fe25639b3..5c2c09f6c1c3 100644
3391 --- a/arch/x86/kvm/x86.c
3392 +++ b/arch/x86/kvm/x86.c
3393 @@ -181,6 +181,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
3394 { "irq_injections", VCPU_STAT(irq_injections) },
3395 { "nmi_injections", VCPU_STAT(nmi_injections) },
3396 { "req_event", VCPU_STAT(req_event) },
3397 + { "l1d_flush", VCPU_STAT(l1d_flush) },
3398 { "mmu_shadow_zapped", VM_STAT(mmu_shadow_zapped) },
3399 { "mmu_pte_write", VM_STAT(mmu_pte_write) },
3400 { "mmu_pte_updated", VM_STAT(mmu_pte_updated) },
3401 @@ -1041,6 +1042,71 @@ static u32 emulated_msrs[] = {
3402
3403 static unsigned num_emulated_msrs;
3404
3405 +/*
3406 + * List of msr numbers which are used to expose MSR-based features that
3407 + * can be used by a hypervisor to validate requested CPU features.
3408 + */
3409 +static u32 msr_based_features[] = {
3410 + MSR_F10H_DECFG,
3411 + MSR_IA32_UCODE_REV,
3412 + MSR_IA32_ARCH_CAPABILITIES,
3413 +};
3414 +
3415 +static unsigned int num_msr_based_features;
3416 +
3417 +u64 kvm_get_arch_capabilities(void)
3418 +{
3419 + u64 data;
3420 +
3421 + rdmsrl_safe(MSR_IA32_ARCH_CAPABILITIES, &data);
3422 +
3423 + /*
3424 + * If we're doing cache flushes (either "always" or "cond")
3425 + * we will do one whenever the guest does a vmlaunch/vmresume.
3426 + * If an outer hypervisor is doing the cache flush for us
3427 + * (VMENTER_L1D_FLUSH_NESTED_VM), we can safely pass that
3428 + * capability to the guest too, and if EPT is disabled we're not
3429 + * vulnerable. Overall, only VMENTER_L1D_FLUSH_NEVER will
3430 + * require a nested hypervisor to do a flush of its own.
3431 + */
3432 + if (l1tf_vmx_mitigation != VMENTER_L1D_FLUSH_NEVER)
3433 + data |= ARCH_CAP_SKIP_VMENTRY_L1DFLUSH;
3434 +
3435 + return data;
3436 +}
3437 +EXPORT_SYMBOL_GPL(kvm_get_arch_capabilities);
3438 +
3439 +static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
3440 +{
3441 + switch (msr->index) {
3442 + case MSR_IA32_ARCH_CAPABILITIES:
3443 + msr->data = kvm_get_arch_capabilities();
3444 + break;
3445 + case MSR_IA32_UCODE_REV:
3446 + rdmsrl_safe(msr->index, &msr->data);
3447 + break;
3448 + default:
3449 + if (kvm_x86_ops->get_msr_feature(msr))
3450 + return 1;
3451 + }
3452 + return 0;
3453 +}
3454 +
3455 +static int do_get_msr_feature(struct kvm_vcpu *vcpu, unsigned index, u64 *data)
3456 +{
3457 + struct kvm_msr_entry msr;
3458 + int r;
3459 +
3460 + msr.index = index;
3461 + r = kvm_get_msr_feature(&msr);
3462 + if (r)
3463 + return r;
3464 +
3465 + *data = msr.data;
3466 +
3467 + return 0;
3468 +}
3469 +
3470 bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer)
3471 {
3472 if (efer & efer_reserved_bits)
3473 @@ -2156,7 +2222,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
3474
3475 switch (msr) {
3476 case MSR_AMD64_NB_CFG:
3477 - case MSR_IA32_UCODE_REV:
3478 case MSR_IA32_UCODE_WRITE:
3479 case MSR_VM_HSAVE_PA:
3480 case MSR_AMD64_PATCH_LOADER:
3481 @@ -2164,6 +2229,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
3482 case MSR_AMD64_DC_CFG:
3483 break;
3484
3485 + case MSR_IA32_UCODE_REV:
3486 + if (msr_info->host_initiated)
3487 + vcpu->arch.microcode_version = data;
3488 + break;
3489 case MSR_EFER:
3490 return set_efer(vcpu, data);
3491 case MSR_K7_HWCR:
3492 @@ -2450,7 +2519,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
3493 msr_info->data = 0;
3494 break;
3495 case MSR_IA32_UCODE_REV:
3496 - msr_info->data = 0x100000000ULL;
3497 + msr_info->data = vcpu->arch.microcode_version;
3498 break;
3499 case MSR_MTRRcap:
3500 case 0x200 ... 0x2ff:
3501 @@ -2600,13 +2669,11 @@ static int __msr_io(struct kvm_vcpu *vcpu, struct kvm_msrs *msrs,
3502 int (*do_msr)(struct kvm_vcpu *vcpu,
3503 unsigned index, u64 *data))
3504 {
3505 - int i, idx;
3506 + int i;
3507
3508 - idx = srcu_read_lock(&vcpu->kvm->srcu);
3509 for (i = 0; i < msrs->nmsrs; ++i)
3510 if (do_msr(vcpu, entries[i].index, &entries[i].data))
3511 break;
3512 - srcu_read_unlock(&vcpu->kvm->srcu, idx);
3513
3514 return i;
3515 }
3516 @@ -2705,6 +2772,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
3517 case KVM_CAP_SET_BOOT_CPU_ID:
3518 case KVM_CAP_SPLIT_IRQCHIP:
3519 case KVM_CAP_IMMEDIATE_EXIT:
3520 + case KVM_CAP_GET_MSR_FEATURES:
3521 r = 1;
3522 break;
3523 case KVM_CAP_ADJUST_CLOCK:
3524 @@ -2819,6 +2887,31 @@ long kvm_arch_dev_ioctl(struct file *filp,
3525 goto out;
3526 r = 0;
3527 break;
3528 + case KVM_GET_MSR_FEATURE_INDEX_LIST: {
3529 + struct kvm_msr_list __user *user_msr_list = argp;
3530 + struct kvm_msr_list msr_list;
3531 + unsigned int n;
3532 +
3533 + r = -EFAULT;
3534 + if (copy_from_user(&msr_list, user_msr_list, sizeof(msr_list)))
3535 + goto out;
3536 + n = msr_list.nmsrs;
3537 + msr_list.nmsrs = num_msr_based_features;
3538 + if (copy_to_user(user_msr_list, &msr_list, sizeof(msr_list)))
3539 + goto out;
3540 + r = -E2BIG;
3541 + if (n < msr_list.nmsrs)
3542 + goto out;
3543 + r = -EFAULT;
3544 + if (copy_to_user(user_msr_list->indices, &msr_based_features,
3545 + num_msr_based_features * sizeof(u32)))
3546 + goto out;
3547 + r = 0;
3548 + break;
3549 + }
3550 + case KVM_GET_MSRS:
3551 + r = msr_io(NULL, argp, do_get_msr_feature, 1);
3552 + break;
3553 }
3554 default:
3555 r = -EINVAL;
3556 @@ -3553,12 +3646,18 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
3557 r = 0;
3558 break;
3559 }
3560 - case KVM_GET_MSRS:
3561 + case KVM_GET_MSRS: {
3562 + int idx = srcu_read_lock(&vcpu->kvm->srcu);
3563 r = msr_io(vcpu, argp, do_get_msr, 1);
3564 + srcu_read_unlock(&vcpu->kvm->srcu, idx);
3565 break;
3566 - case KVM_SET_MSRS:
3567 + }
3568 + case KVM_SET_MSRS: {
3569 + int idx = srcu_read_lock(&vcpu->kvm->srcu);
3570 r = msr_io(vcpu, argp, do_set_msr, 0);
3571 + srcu_read_unlock(&vcpu->kvm->srcu, idx);
3572 break;
3573 + }
3574 case KVM_TPR_ACCESS_REPORTING: {
3575 struct kvm_tpr_access_ctl tac;
3576
3577 @@ -4333,6 +4432,19 @@ static void kvm_init_msr_list(void)
3578 j++;
3579 }
3580 num_emulated_msrs = j;
3581 +
3582 + for (i = j = 0; i < ARRAY_SIZE(msr_based_features); i++) {
3583 + struct kvm_msr_entry msr;
3584 +
3585 + msr.index = msr_based_features[i];
3586 + if (kvm_get_msr_feature(&msr))
3587 + continue;
3588 +
3589 + if (j < i)
3590 + msr_based_features[j] = msr_based_features[i];
3591 + j++;
3592 + }
3593 + num_msr_based_features = j;
3594 }
3595
3596 static int vcpu_mmio_write(struct kvm_vcpu *vcpu, gpa_t addr, int len,
3597 @@ -4573,6 +4685,9 @@ static int emulator_write_std(struct x86_emulate_ctxt *ctxt, gva_t addr, void *v
3598 int kvm_write_guest_virt_system(struct kvm_vcpu *vcpu, gva_t addr, void *val,
3599 unsigned int bytes, struct x86_exception *exception)
3600 {
3601 + /* kvm_write_guest_virt_system can pull in tons of pages. */
3602 + vcpu->arch.l1tf_flush_l1d = true;
3603 +
3604 return kvm_write_guest_virt_helper(addr, val, bytes, vcpu,
3605 PFERR_WRITE_MASK, exception);
3606 }
3607 @@ -5701,6 +5816,8 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu,
3608 bool writeback = true;
3609 bool write_fault_to_spt = vcpu->arch.write_fault_to_shadow_pgtable;
3610
3611 + vcpu->arch.l1tf_flush_l1d = true;
3612 +
3613 /*
3614 * Clear write_fault_to_shadow_pgtable here to ensure it is
3615 * never reused.
3616 @@ -7146,6 +7263,7 @@ static int vcpu_run(struct kvm_vcpu *vcpu)
3617 struct kvm *kvm = vcpu->kvm;
3618
3619 vcpu->srcu_idx = srcu_read_lock(&kvm->srcu);
3620 + vcpu->arch.l1tf_flush_l1d = true;
3621
3622 for (;;) {
3623 if (kvm_vcpu_running(vcpu)) {
3624 @@ -8153,6 +8271,7 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
3625
3626 void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu)
3627 {
3628 + vcpu->arch.l1tf_flush_l1d = true;
3629 kvm_x86_ops->sched_in(vcpu, cpu);
3630 }
3631
3632 diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
3633 index 0133d26f16be..c2faff548f59 100644
3634 --- a/arch/x86/mm/fault.c
3635 +++ b/arch/x86/mm/fault.c
3636 @@ -24,6 +24,7 @@
3637 #include <asm/vsyscall.h> /* emulate_vsyscall */
3638 #include <asm/vm86.h> /* struct vm86 */
3639 #include <asm/mmu_context.h> /* vma_pkey() */
3640 +#include <asm/sections.h>
3641
3642 #define CREATE_TRACE_POINTS
3643 #include <asm/trace/exceptions.h>
3644 diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
3645 index 071cbbbb60d9..37f60dfd7e4e 100644
3646 --- a/arch/x86/mm/init.c
3647 +++ b/arch/x86/mm/init.c
3648 @@ -4,6 +4,8 @@
3649 #include <linux/swap.h>
3650 #include <linux/memblock.h>
3651 #include <linux/bootmem.h> /* for max_low_pfn */
3652 +#include <linux/swapfile.h>
3653 +#include <linux/swapops.h>
3654
3655 #include <asm/set_memory.h>
3656 #include <asm/e820/api.h>
3657 @@ -880,3 +882,26 @@ void update_cache_mode_entry(unsigned entry, enum page_cache_mode cache)
3658 __cachemode2pte_tbl[cache] = __cm_idx2pte(entry);
3659 __pte2cachemode_tbl[entry] = cache;
3660 }
3661 +
3662 +#ifdef CONFIG_SWAP
3663 +unsigned long max_swapfile_size(void)
3664 +{
3665 + unsigned long pages;
3666 +
3667 + pages = generic_max_swapfile_size();
3668 +
3669 + if (boot_cpu_has_bug(X86_BUG_L1TF)) {
3670 + /* Limit the swap file size to MAX_PA/2 for L1TF workaround */
3671 + unsigned long l1tf_limit = l1tf_pfn_limit() + 1;
3672 + /*
3673 + * We encode swap offsets also with 3 bits below those for pfn
3674 + * which makes the usable limit higher.
3675 + */
3676 +#if CONFIG_PGTABLE_LEVELS > 2
3677 + l1tf_limit <<= PAGE_SHIFT - SWP_OFFSET_FIRST_BIT;
3678 +#endif
3679 + pages = min_t(unsigned long, l1tf_limit, pages);
3680 + }
3681 + return pages;
3682 +}
3683 +#endif
3684 diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c
3685 index 7c8686709636..79eb55ce69a9 100644
3686 --- a/arch/x86/mm/kmmio.c
3687 +++ b/arch/x86/mm/kmmio.c
3688 @@ -126,24 +126,29 @@ static struct kmmio_fault_page *get_kmmio_fault_page(unsigned long addr)
3689
3690 static void clear_pmd_presence(pmd_t *pmd, bool clear, pmdval_t *old)
3691 {
3692 + pmd_t new_pmd;
3693 pmdval_t v = pmd_val(*pmd);
3694 if (clear) {
3695 - *old = v & _PAGE_PRESENT;
3696 - v &= ~_PAGE_PRESENT;
3697 - } else /* presume this has been called with clear==true previously */
3698 - v |= *old;
3699 - set_pmd(pmd, __pmd(v));
3700 + *old = v;
3701 + new_pmd = pmd_mknotpresent(*pmd);
3702 + } else {
3703 + /* Presume this has been called with clear==true previously */
3704 + new_pmd = __pmd(*old);
3705 + }
3706 + set_pmd(pmd, new_pmd);
3707 }
3708
3709 static void clear_pte_presence(pte_t *pte, bool clear, pteval_t *old)
3710 {
3711 pteval_t v = pte_val(*pte);
3712 if (clear) {
3713 - *old = v & _PAGE_PRESENT;
3714 - v &= ~_PAGE_PRESENT;
3715 - } else /* presume this has been called with clear==true previously */
3716 - v |= *old;
3717 - set_pte_atomic(pte, __pte(v));
3718 + *old = v;
3719 + /* Nothing should care about address */
3720 + pte_clear(&init_mm, 0, pte);
3721 + } else {
3722 + /* Presume this has been called with clear==true previously */
3723 + set_pte_atomic(pte, __pte(*old));
3724 + }
3725 }
3726
3727 static int clear_page_presence(struct kmmio_fault_page *f, bool clear)
3728 diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
3729 index a99679826846..5f4805d69aab 100644
3730 --- a/arch/x86/mm/mmap.c
3731 +++ b/arch/x86/mm/mmap.c
3732 @@ -174,3 +174,24 @@ const char *arch_vma_name(struct vm_area_struct *vma)
3733 return "[mpx]";
3734 return NULL;
3735 }
3736 +
3737 +/*
3738 + * Only allow root to set high MMIO mappings to PROT_NONE.
3739 + * This prevents an unpriv. user to set them to PROT_NONE and invert
3740 + * them, then pointing to valid memory for L1TF speculation.
3741 + *
3742 + * Note: for locked down kernels may want to disable the root override.
3743 + */
3744 +bool pfn_modify_allowed(unsigned long pfn, pgprot_t prot)
3745 +{
3746 + if (!boot_cpu_has_bug(X86_BUG_L1TF))
3747 + return true;
3748 + if (!__pte_needs_invert(pgprot_val(prot)))
3749 + return true;
3750 + /* If it's real memory always allow */
3751 + if (pfn_valid(pfn))
3752 + return true;
3753 + if (pfn > l1tf_pfn_limit() && !capable(CAP_SYS_ADMIN))
3754 + return false;
3755 + return true;
3756 +}
3757 diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
3758 index 4085897fef64..464f53da3a6f 100644
3759 --- a/arch/x86/mm/pageattr.c
3760 +++ b/arch/x86/mm/pageattr.c
3761 @@ -1006,8 +1006,8 @@ static long populate_pmd(struct cpa_data *cpa,
3762
3763 pmd = pmd_offset(pud, start);
3764
3765 - set_pmd(pmd, __pmd(cpa->pfn << PAGE_SHIFT | _PAGE_PSE |
3766 - massage_pgprot(pmd_pgprot)));
3767 + set_pmd(pmd, pmd_mkhuge(pfn_pmd(cpa->pfn,
3768 + canon_pgprot(pmd_pgprot))));
3769
3770 start += PMD_SIZE;
3771 cpa->pfn += PMD_SIZE >> PAGE_SHIFT;
3772 @@ -1079,8 +1079,8 @@ static int populate_pud(struct cpa_data *cpa, unsigned long start, p4d_t *p4d,
3773 * Map everything starting from the Gb boundary, possibly with 1G pages
3774 */
3775 while (boot_cpu_has(X86_FEATURE_GBPAGES) && end - start >= PUD_SIZE) {
3776 - set_pud(pud, __pud(cpa->pfn << PAGE_SHIFT | _PAGE_PSE |
3777 - massage_pgprot(pud_pgprot)));
3778 + set_pud(pud, pud_mkhuge(pfn_pud(cpa->pfn,
3779 + canon_pgprot(pud_pgprot))));
3780
3781 start += PUD_SIZE;
3782 cpa->pfn += PUD_SIZE >> PAGE_SHIFT;
3783 diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
3784 index ce38f165489b..d6f11accd37a 100644
3785 --- a/arch/x86/mm/pti.c
3786 +++ b/arch/x86/mm/pti.c
3787 @@ -45,6 +45,7 @@
3788 #include <asm/pgalloc.h>
3789 #include <asm/tlbflush.h>
3790 #include <asm/desc.h>
3791 +#include <asm/sections.h>
3792
3793 #undef pr_fmt
3794 #define pr_fmt(fmt) "Kernel/User page tables isolation: " fmt
3795 diff --git a/arch/x86/platform/intel-mid/device_libs/platform_mrfld_wdt.c b/arch/x86/platform/intel-mid/device_libs/platform_mrfld_wdt.c
3796 index 4f5fa65a1011..2acd6be13375 100644
3797 --- a/arch/x86/platform/intel-mid/device_libs/platform_mrfld_wdt.c
3798 +++ b/arch/x86/platform/intel-mid/device_libs/platform_mrfld_wdt.c
3799 @@ -18,6 +18,7 @@
3800 #include <asm/intel-mid.h>
3801 #include <asm/intel_scu_ipc.h>
3802 #include <asm/io_apic.h>
3803 +#include <asm/hw_irq.h>
3804
3805 #define TANGIER_EXT_TIMER0_MSI 12
3806
3807 diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
3808 index 0b530c53de1f..34f9a9ce6236 100644
3809 --- a/arch/x86/platform/uv/tlb_uv.c
3810 +++ b/arch/x86/platform/uv/tlb_uv.c
3811 @@ -1285,6 +1285,7 @@ void uv_bau_message_interrupt(struct pt_regs *regs)
3812 struct msg_desc msgdesc;
3813
3814 ack_APIC_irq();
3815 + kvm_set_cpu_l1tf_flush_l1d();
3816 time_start = get_cycles();
3817
3818 bcp = &per_cpu(bau_control, smp_processor_id());
3819 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
3820 index c9081c6671f0..df208af3cd74 100644
3821 --- a/arch/x86/xen/enlighten.c
3822 +++ b/arch/x86/xen/enlighten.c
3823 @@ -3,6 +3,7 @@
3824 #endif
3825 #include <linux/cpu.h>
3826 #include <linux/kexec.h>
3827 +#include <linux/slab.h>
3828
3829 #include <xen/features.h>
3830 #include <xen/page.h>
3831 diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
3832 index 433f14bcab15..93758b528d8f 100644
3833 --- a/drivers/base/cpu.c
3834 +++ b/drivers/base/cpu.c
3835 @@ -527,16 +527,24 @@ ssize_t __weak cpu_show_spec_store_bypass(struct device *dev,
3836 return sprintf(buf, "Not affected\n");
3837 }
3838
3839 +ssize_t __weak cpu_show_l1tf(struct device *dev,
3840 + struct device_attribute *attr, char *buf)
3841 +{
3842 + return sprintf(buf, "Not affected\n");
3843 +}
3844 +
3845 static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL);
3846 static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL);
3847 static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
3848 static DEVICE_ATTR(spec_store_bypass, 0444, cpu_show_spec_store_bypass, NULL);
3849 +static DEVICE_ATTR(l1tf, 0444, cpu_show_l1tf, NULL);
3850
3851 static struct attribute *cpu_root_vulnerabilities_attrs[] = {
3852 &dev_attr_meltdown.attr,
3853 &dev_attr_spectre_v1.attr,
3854 &dev_attr_spectre_v2.attr,
3855 &dev_attr_spec_store_bypass.attr,
3856 + &dev_attr_l1tf.attr,
3857 NULL
3858 };
3859
3860 diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
3861 index 6aef3bde10d7..c823914b3a80 100644
3862 --- a/drivers/bluetooth/hci_ldisc.c
3863 +++ b/drivers/bluetooth/hci_ldisc.c
3864 @@ -115,12 +115,12 @@ static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
3865 struct sk_buff *skb = hu->tx_skb;
3866
3867 if (!skb) {
3868 - read_lock(&hu->proto_lock);
3869 + percpu_down_read(&hu->proto_lock);
3870
3871 if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
3872 skb = hu->proto->dequeue(hu);
3873
3874 - read_unlock(&hu->proto_lock);
3875 + percpu_up_read(&hu->proto_lock);
3876 } else {
3877 hu->tx_skb = NULL;
3878 }
3879 @@ -130,7 +130,14 @@ static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
3880
3881 int hci_uart_tx_wakeup(struct hci_uart *hu)
3882 {
3883 - read_lock(&hu->proto_lock);
3884 + /* This may be called in an IRQ context, so we can't sleep. Therefore
3885 + * we try to acquire the lock only, and if that fails we assume the
3886 + * tty is being closed because that is the only time the write lock is
3887 + * acquired. If, however, at some point in the future the write lock
3888 + * is also acquired in other situations, then this must be revisited.
3889 + */
3890 + if (!percpu_down_read_trylock(&hu->proto_lock))
3891 + return 0;
3892
3893 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags))
3894 goto no_schedule;
3895 @@ -145,7 +152,7 @@ int hci_uart_tx_wakeup(struct hci_uart *hu)
3896 schedule_work(&hu->write_work);
3897
3898 no_schedule:
3899 - read_unlock(&hu->proto_lock);
3900 + percpu_up_read(&hu->proto_lock);
3901
3902 return 0;
3903 }
3904 @@ -247,12 +254,12 @@ static int hci_uart_flush(struct hci_dev *hdev)
3905 tty_ldisc_flush(tty);
3906 tty_driver_flush_buffer(tty);
3907
3908 - read_lock(&hu->proto_lock);
3909 + percpu_down_read(&hu->proto_lock);
3910
3911 if (test_bit(HCI_UART_PROTO_READY, &hu->flags))
3912 hu->proto->flush(hu);
3913
3914 - read_unlock(&hu->proto_lock);
3915 + percpu_up_read(&hu->proto_lock);
3916
3917 return 0;
3918 }
3919 @@ -275,15 +282,15 @@ static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
3920 BT_DBG("%s: type %d len %d", hdev->name, hci_skb_pkt_type(skb),
3921 skb->len);
3922
3923 - read_lock(&hu->proto_lock);
3924 + percpu_down_read(&hu->proto_lock);
3925
3926 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
3927 - read_unlock(&hu->proto_lock);
3928 + percpu_up_read(&hu->proto_lock);
3929 return -EUNATCH;
3930 }
3931
3932 hu->proto->enqueue(hu, skb);
3933 - read_unlock(&hu->proto_lock);
3934 + percpu_up_read(&hu->proto_lock);
3935
3936 hci_uart_tx_wakeup(hu);
3937
3938 @@ -486,7 +493,7 @@ static int hci_uart_tty_open(struct tty_struct *tty)
3939 INIT_WORK(&hu->init_ready, hci_uart_init_work);
3940 INIT_WORK(&hu->write_work, hci_uart_write_work);
3941
3942 - rwlock_init(&hu->proto_lock);
3943 + percpu_init_rwsem(&hu->proto_lock);
3944
3945 /* Flush any pending characters in the driver */
3946 tty_driver_flush_buffer(tty);
3947 @@ -503,7 +510,6 @@ static void hci_uart_tty_close(struct tty_struct *tty)
3948 {
3949 struct hci_uart *hu = tty->disc_data;
3950 struct hci_dev *hdev;
3951 - unsigned long flags;
3952
3953 BT_DBG("tty %p", tty);
3954
3955 @@ -518,9 +524,9 @@ static void hci_uart_tty_close(struct tty_struct *tty)
3956 hci_uart_close(hdev);
3957
3958 if (test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
3959 - write_lock_irqsave(&hu->proto_lock, flags);
3960 + percpu_down_write(&hu->proto_lock);
3961 clear_bit(HCI_UART_PROTO_READY, &hu->flags);
3962 - write_unlock_irqrestore(&hu->proto_lock, flags);
3963 + percpu_up_write(&hu->proto_lock);
3964
3965 cancel_work_sync(&hu->write_work);
3966
3967 @@ -582,10 +588,10 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,
3968 if (!hu || tty != hu->tty)
3969 return;
3970
3971 - read_lock(&hu->proto_lock);
3972 + percpu_down_read(&hu->proto_lock);
3973
3974 if (!test_bit(HCI_UART_PROTO_READY, &hu->flags)) {
3975 - read_unlock(&hu->proto_lock);
3976 + percpu_up_read(&hu->proto_lock);
3977 return;
3978 }
3979
3980 @@ -593,7 +599,7 @@ static void hci_uart_tty_receive(struct tty_struct *tty, const u8 *data,
3981 * tty caller
3982 */
3983 hu->proto->recv(hu, data, count);
3984 - read_unlock(&hu->proto_lock);
3985 + percpu_up_read(&hu->proto_lock);
3986
3987 if (hu->hdev)
3988 hu->hdev->stat.byte_rx += count;
3989 diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
3990 index b725ac4f7ff6..52e6d4d1608e 100644
3991 --- a/drivers/bluetooth/hci_serdev.c
3992 +++ b/drivers/bluetooth/hci_serdev.c
3993 @@ -304,6 +304,7 @@ int hci_uart_register_device(struct hci_uart *hu,
3994 hci_set_drvdata(hdev, hu);
3995
3996 INIT_WORK(&hu->write_work, hci_uart_write_work);
3997 + percpu_init_rwsem(&hu->proto_lock);
3998
3999 /* Only when vendor specific setup callback is provided, consider
4000 * the manufacturer information valid. This avoids filling in the
4001 diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
4002 index d9cd95d81149..66e8c68e4607 100644
4003 --- a/drivers/bluetooth/hci_uart.h
4004 +++ b/drivers/bluetooth/hci_uart.h
4005 @@ -87,7 +87,7 @@ struct hci_uart {
4006 struct work_struct write_work;
4007
4008 const struct hci_uart_proto *proto;
4009 - rwlock_t proto_lock; /* Stop work for proto close */
4010 + struct percpu_rw_semaphore proto_lock; /* Stop work for proto close */
4011 void *priv;
4012
4013 struct sk_buff *tx_skb;
4014 diff --git a/drivers/gpu/drm/i915/intel_lpe_audio.c b/drivers/gpu/drm/i915/intel_lpe_audio.c
4015 index 3bf65288ffff..2fdf302ebdad 100644
4016 --- a/drivers/gpu/drm/i915/intel_lpe_audio.c
4017 +++ b/drivers/gpu/drm/i915/intel_lpe_audio.c
4018 @@ -62,6 +62,7 @@
4019
4020 #include <linux/acpi.h>
4021 #include <linux/device.h>
4022 +#include <linux/irq.h>
4023 #include <linux/pci.h>
4024 #include <linux/pm_runtime.h>
4025
4026 diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c
4027 index 3baddfc997d1..b49ca02b399d 100644
4028 --- a/drivers/mtd/nand/qcom_nandc.c
4029 +++ b/drivers/mtd/nand/qcom_nandc.c
4030 @@ -2544,6 +2544,9 @@ static int qcom_nand_host_init(struct qcom_nand_controller *nandc,
4031
4032 nand_set_flash_node(chip, dn);
4033 mtd->name = devm_kasprintf(dev, GFP_KERNEL, "qcom_nand.%d", host->cs);
4034 + if (!mtd->name)
4035 + return -ENOMEM;
4036 +
4037 mtd->owner = THIS_MODULE;
4038 mtd->dev.parent = dev;
4039
4040 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
4041 index dfc076f9ee4b..d5e790dd589a 100644
4042 --- a/drivers/net/xen-netfront.c
4043 +++ b/drivers/net/xen-netfront.c
4044 @@ -894,7 +894,6 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
4045 struct sk_buff *skb,
4046 struct sk_buff_head *list)
4047 {
4048 - struct skb_shared_info *shinfo = skb_shinfo(skb);
4049 RING_IDX cons = queue->rx.rsp_cons;
4050 struct sk_buff *nskb;
4051
4052 @@ -903,15 +902,16 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
4053 RING_GET_RESPONSE(&queue->rx, ++cons);
4054 skb_frag_t *nfrag = &skb_shinfo(nskb)->frags[0];
4055
4056 - if (shinfo->nr_frags == MAX_SKB_FRAGS) {
4057 + if (skb_shinfo(skb)->nr_frags == MAX_SKB_FRAGS) {
4058 unsigned int pull_to = NETFRONT_SKB_CB(skb)->pull_to;
4059
4060 BUG_ON(pull_to <= skb_headlen(skb));
4061 __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
4062 }
4063 - BUG_ON(shinfo->nr_frags >= MAX_SKB_FRAGS);
4064 + BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
4065
4066 - skb_add_rx_frag(skb, shinfo->nr_frags, skb_frag_page(nfrag),
4067 + skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
4068 + skb_frag_page(nfrag),
4069 rx->offset, rx->status, PAGE_SIZE);
4070
4071 skb_shinfo(nskb)->nr_frags = 0;
4072 diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
4073 index 4523d7e1bcb9..ffc87a956d97 100644
4074 --- a/drivers/pci/host/pci-hyperv.c
4075 +++ b/drivers/pci/host/pci-hyperv.c
4076 @@ -53,6 +53,8 @@
4077 #include <linux/delay.h>
4078 #include <linux/semaphore.h>
4079 #include <linux/irqdomain.h>
4080 +#include <linux/irq.h>
4081 +
4082 #include <asm/irqdomain.h>
4083 #include <asm/apic.h>
4084 #include <linux/msi.h>
4085 diff --git a/drivers/phy/mediatek/phy-mtk-tphy.c b/drivers/phy/mediatek/phy-mtk-tphy.c
4086 index 721a2a1c97ef..a63bba12aee4 100644
4087 --- a/drivers/phy/mediatek/phy-mtk-tphy.c
4088 +++ b/drivers/phy/mediatek/phy-mtk-tphy.c
4089 @@ -438,9 +438,9 @@ static void u2_phy_instance_init(struct mtk_tphy *tphy,
4090 u32 index = instance->index;
4091 u32 tmp;
4092
4093 - /* switch to USB function. (system register, force ip into usb mode) */
4094 + /* switch to USB function, and enable usb pll */
4095 tmp = readl(com + U3P_U2PHYDTM0);
4096 - tmp &= ~P2C_FORCE_UART_EN;
4097 + tmp &= ~(P2C_FORCE_UART_EN | P2C_FORCE_SUSPENDM);
4098 tmp |= P2C_RG_XCVRSEL_VAL(1) | P2C_RG_DATAIN_VAL(0);
4099 writel(tmp, com + U3P_U2PHYDTM0);
4100
4101 @@ -500,10 +500,8 @@ static void u2_phy_instance_power_on(struct mtk_tphy *tphy,
4102 u32 index = instance->index;
4103 u32 tmp;
4104
4105 - /* (force_suspendm=0) (let suspendm=1, enable usb 480MHz pll) */
4106 tmp = readl(com + U3P_U2PHYDTM0);
4107 - tmp &= ~(P2C_FORCE_SUSPENDM | P2C_RG_XCVRSEL);
4108 - tmp &= ~(P2C_RG_DATAIN | P2C_DTM0_PART_MASK);
4109 + tmp &= ~(P2C_RG_XCVRSEL | P2C_RG_DATAIN | P2C_DTM0_PART_MASK);
4110 writel(tmp, com + U3P_U2PHYDTM0);
4111
4112 /* OTG Enable */
4113 @@ -538,7 +536,6 @@ static void u2_phy_instance_power_off(struct mtk_tphy *tphy,
4114
4115 tmp = readl(com + U3P_U2PHYDTM0);
4116 tmp &= ~(P2C_RG_XCVRSEL | P2C_RG_DATAIN);
4117 - tmp |= P2C_FORCE_SUSPENDM;
4118 writel(tmp, com + U3P_U2PHYDTM0);
4119
4120 /* OTG Disable */
4121 @@ -546,18 +543,16 @@ static void u2_phy_instance_power_off(struct mtk_tphy *tphy,
4122 tmp &= ~PA6_RG_U2_OTG_VBUSCMP_EN;
4123 writel(tmp, com + U3P_USBPHYACR6);
4124
4125 - /* let suspendm=0, set utmi into analog power down */
4126 - tmp = readl(com + U3P_U2PHYDTM0);
4127 - tmp &= ~P2C_RG_SUSPENDM;
4128 - writel(tmp, com + U3P_U2PHYDTM0);
4129 - udelay(1);
4130 -
4131 tmp = readl(com + U3P_U2PHYDTM1);
4132 tmp &= ~(P2C_RG_VBUSVALID | P2C_RG_AVALID);
4133 tmp |= P2C_RG_SESSEND;
4134 writel(tmp, com + U3P_U2PHYDTM1);
4135
4136 if (tphy->pdata->avoid_rx_sen_degradation && index) {
4137 + tmp = readl(com + U3P_U2PHYDTM0);
4138 + tmp &= ~(P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM);
4139 + writel(tmp, com + U3P_U2PHYDTM0);
4140 +
4141 tmp = readl(com + U3D_U2PHYDCR0);
4142 tmp &= ~P2C_RG_SIF_U2PLL_FORCE_ON;
4143 writel(tmp, com + U3D_U2PHYDCR0);
4144 diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
4145 index dd9464920456..ef22b275d050 100644
4146 --- a/drivers/scsi/hosts.c
4147 +++ b/drivers/scsi/hosts.c
4148 @@ -474,6 +474,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
4149 shost->dma_boundary = 0xffffffff;
4150
4151 shost->use_blk_mq = scsi_use_blk_mq;
4152 + shost->use_blk_mq = scsi_use_blk_mq || shost->hostt->force_blk_mq;
4153
4154 device_initialize(&shost->shost_gendev);
4155 dev_set_name(&shost->shost_gendev, "host%d", shost->host_no);
4156 diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
4157 index 604a39dba5d0..5b4b7f9be2d7 100644
4158 --- a/drivers/scsi/hpsa.c
4159 +++ b/drivers/scsi/hpsa.c
4160 @@ -1040,11 +1040,7 @@ static void set_performant_mode(struct ctlr_info *h, struct CommandList *c,
4161 c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1);
4162 if (unlikely(!h->msix_vectors))
4163 return;
4164 - if (likely(reply_queue == DEFAULT_REPLY_QUEUE))
4165 - c->Header.ReplyQueue =
4166 - raw_smp_processor_id() % h->nreply_queues;
4167 - else
4168 - c->Header.ReplyQueue = reply_queue % h->nreply_queues;
4169 + c->Header.ReplyQueue = reply_queue;
4170 }
4171 }
4172
4173 @@ -1058,10 +1054,7 @@ static void set_ioaccel1_performant_mode(struct ctlr_info *h,
4174 * Tell the controller to post the reply to the queue for this
4175 * processor. This seems to give the best I/O throughput.
4176 */
4177 - if (likely(reply_queue == DEFAULT_REPLY_QUEUE))
4178 - cp->ReplyQueue = smp_processor_id() % h->nreply_queues;
4179 - else
4180 - cp->ReplyQueue = reply_queue % h->nreply_queues;
4181 + cp->ReplyQueue = reply_queue;
4182 /*
4183 * Set the bits in the address sent down to include:
4184 * - performant mode bit (bit 0)
4185 @@ -1082,10 +1075,7 @@ static void set_ioaccel2_tmf_performant_mode(struct ctlr_info *h,
4186 /* Tell the controller to post the reply to the queue for this
4187 * processor. This seems to give the best I/O throughput.
4188 */
4189 - if (likely(reply_queue == DEFAULT_REPLY_QUEUE))
4190 - cp->reply_queue = smp_processor_id() % h->nreply_queues;
4191 - else
4192 - cp->reply_queue = reply_queue % h->nreply_queues;
4193 + cp->reply_queue = reply_queue;
4194 /* Set the bits in the address sent down to include:
4195 * - performant mode bit not used in ioaccel mode 2
4196 * - pull count (bits 0-3)
4197 @@ -1104,10 +1094,7 @@ static void set_ioaccel2_performant_mode(struct ctlr_info *h,
4198 * Tell the controller to post the reply to the queue for this
4199 * processor. This seems to give the best I/O throughput.
4200 */
4201 - if (likely(reply_queue == DEFAULT_REPLY_QUEUE))
4202 - cp->reply_queue = smp_processor_id() % h->nreply_queues;
4203 - else
4204 - cp->reply_queue = reply_queue % h->nreply_queues;
4205 + cp->reply_queue = reply_queue;
4206 /*
4207 * Set the bits in the address sent down to include:
4208 * - performant mode bit not used in ioaccel mode 2
4209 @@ -1152,6 +1139,8 @@ static void __enqueue_cmd_and_start_io(struct ctlr_info *h,
4210 {
4211 dial_down_lockup_detection_during_fw_flash(h, c);
4212 atomic_inc(&h->commands_outstanding);
4213 +
4214 + reply_queue = h->reply_map[raw_smp_processor_id()];
4215 switch (c->cmd_type) {
4216 case CMD_IOACCEL1:
4217 set_ioaccel1_performant_mode(h, c, reply_queue);
4218 @@ -7244,6 +7233,26 @@ static void hpsa_disable_interrupt_mode(struct ctlr_info *h)
4219 h->msix_vectors = 0;
4220 }
4221
4222 +static void hpsa_setup_reply_map(struct ctlr_info *h)
4223 +{
4224 + const struct cpumask *mask;
4225 + unsigned int queue, cpu;
4226 +
4227 + for (queue = 0; queue < h->msix_vectors; queue++) {
4228 + mask = pci_irq_get_affinity(h->pdev, queue);
4229 + if (!mask)
4230 + goto fallback;
4231 +
4232 + for_each_cpu(cpu, mask)
4233 + h->reply_map[cpu] = queue;
4234 + }
4235 + return;
4236 +
4237 +fallback:
4238 + for_each_possible_cpu(cpu)
4239 + h->reply_map[cpu] = 0;
4240 +}
4241 +
4242 /* If MSI/MSI-X is supported by the kernel we will try to enable it on
4243 * controllers that are capable. If not, we use legacy INTx mode.
4244 */
4245 @@ -7639,6 +7648,10 @@ static int hpsa_pci_init(struct ctlr_info *h)
4246 err = hpsa_interrupt_mode(h);
4247 if (err)
4248 goto clean1;
4249 +
4250 + /* setup mapping between CPU and reply queue */
4251 + hpsa_setup_reply_map(h);
4252 +
4253 err = hpsa_pci_find_memory_BAR(h->pdev, &h->paddr);
4254 if (err)
4255 goto clean2; /* intmode+region, pci */
4256 @@ -8284,6 +8297,28 @@ static struct workqueue_struct *hpsa_create_controller_wq(struct ctlr_info *h,
4257 return wq;
4258 }
4259
4260 +static void hpda_free_ctlr_info(struct ctlr_info *h)
4261 +{
4262 + kfree(h->reply_map);
4263 + kfree(h);
4264 +}
4265 +
4266 +static struct ctlr_info *hpda_alloc_ctlr_info(void)
4267 +{
4268 + struct ctlr_info *h;
4269 +
4270 + h = kzalloc(sizeof(*h), GFP_KERNEL);
4271 + if (!h)
4272 + return NULL;
4273 +
4274 + h->reply_map = kzalloc(sizeof(*h->reply_map) * nr_cpu_ids, GFP_KERNEL);
4275 + if (!h->reply_map) {
4276 + kfree(h);
4277 + return NULL;
4278 + }
4279 + return h;
4280 +}
4281 +
4282 static int hpsa_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
4283 {
4284 int dac, rc;
4285 @@ -8321,7 +8356,7 @@ reinit_after_soft_reset:
4286 * the driver. See comments in hpsa.h for more info.
4287 */
4288 BUILD_BUG_ON(sizeof(struct CommandList) % COMMANDLIST_ALIGNMENT);
4289 - h = kzalloc(sizeof(*h), GFP_KERNEL);
4290 + h = hpda_alloc_ctlr_info();
4291 if (!h) {
4292 dev_err(&pdev->dev, "Failed to allocate controller head\n");
4293 return -ENOMEM;
4294 @@ -8726,7 +8761,7 @@ static void hpsa_remove_one(struct pci_dev *pdev)
4295 h->lockup_detected = NULL; /* init_one 2 */
4296 /* (void) pci_disable_pcie_error_reporting(pdev); */ /* init_one 1 */
4297
4298 - kfree(h); /* init_one 1 */
4299 + hpda_free_ctlr_info(h); /* init_one 1 */
4300 }
4301
4302 static int hpsa_suspend(__attribute__((unused)) struct pci_dev *pdev,
4303 diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
4304 index 018f980a701c..fb9f5e7f8209 100644
4305 --- a/drivers/scsi/hpsa.h
4306 +++ b/drivers/scsi/hpsa.h
4307 @@ -158,6 +158,7 @@ struct bmic_controller_parameters {
4308 #pragma pack()
4309
4310 struct ctlr_info {
4311 + unsigned int *reply_map;
4312 int ctlr;
4313 char devname[8];
4314 char *product_name;
4315 diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
4316 index 63bea6a65d51..8d579bf0fc81 100644
4317 --- a/drivers/scsi/qla2xxx/qla_iocb.c
4318 +++ b/drivers/scsi/qla2xxx/qla_iocb.c
4319 @@ -2128,34 +2128,11 @@ __qla2x00_alloc_iocbs(struct qla_qpair *qpair, srb_t *sp)
4320 req_cnt = 1;
4321 handle = 0;
4322
4323 - if (!sp)
4324 - goto skip_cmd_array;
4325 -
4326 - /* Check for room in outstanding command list. */
4327 - handle = req->current_outstanding_cmd;
4328 - for (index = 1; index < req->num_outstanding_cmds; index++) {
4329 - handle++;
4330 - if (handle == req->num_outstanding_cmds)
4331 - handle = 1;
4332 - if (!req->outstanding_cmds[handle])
4333 - break;
4334 - }
4335 - if (index == req->num_outstanding_cmds) {
4336 - ql_log(ql_log_warn, vha, 0x700b,
4337 - "No room on outstanding cmd array.\n");
4338 - goto queuing_error;
4339 - }
4340 -
4341 - /* Prep command array. */
4342 - req->current_outstanding_cmd = handle;
4343 - req->outstanding_cmds[handle] = sp;
4344 - sp->handle = handle;
4345 -
4346 - /* Adjust entry-counts as needed. */
4347 - if (sp->type != SRB_SCSI_CMD)
4348 + if (sp && (sp->type != SRB_SCSI_CMD)) {
4349 + /* Adjust entry-counts as needed. */
4350 req_cnt = sp->iocbs;
4351 + }
4352
4353 -skip_cmd_array:
4354 /* Check for room on request queue. */
4355 if (req->cnt < req_cnt + 2) {
4356 if (ha->mqenable || IS_QLA83XX(ha) || IS_QLA27XX(ha))
4357 @@ -2179,6 +2156,28 @@ skip_cmd_array:
4358 if (req->cnt < req_cnt + 2)
4359 goto queuing_error;
4360
4361 + if (sp) {
4362 + /* Check for room in outstanding command list. */
4363 + handle = req->current_outstanding_cmd;
4364 + for (index = 1; index < req->num_outstanding_cmds; index++) {
4365 + handle++;
4366 + if (handle == req->num_outstanding_cmds)
4367 + handle = 1;
4368 + if (!req->outstanding_cmds[handle])
4369 + break;
4370 + }
4371 + if (index == req->num_outstanding_cmds) {
4372 + ql_log(ql_log_warn, vha, 0x700b,
4373 + "No room on outstanding cmd array.\n");
4374 + goto queuing_error;
4375 + }
4376 +
4377 + /* Prep command array. */
4378 + req->current_outstanding_cmd = handle;
4379 + req->outstanding_cmds[handle] = sp;
4380 + sp->handle = handle;
4381 + }
4382 +
4383 /* Prep packet */
4384 req->cnt -= req_cnt;
4385 pkt = req->ring_ptr;
4386 @@ -2191,6 +2190,8 @@ skip_cmd_array:
4387 pkt->handle = handle;
4388 }
4389
4390 + return pkt;
4391 +
4392 queuing_error:
4393 qpair->tgt_counters.num_alloc_iocb_failed++;
4394 return pkt;
4395 diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
4396 index 3f3cb72e0c0c..d0389b20574d 100644
4397 --- a/drivers/scsi/sr.c
4398 +++ b/drivers/scsi/sr.c
4399 @@ -523,18 +523,26 @@ static int sr_init_command(struct scsi_cmnd *SCpnt)
4400 static int sr_block_open(struct block_device *bdev, fmode_t mode)
4401 {
4402 struct scsi_cd *cd;
4403 + struct scsi_device *sdev;
4404 int ret = -ENXIO;
4405
4406 + cd = scsi_cd_get(bdev->bd_disk);
4407 + if (!cd)
4408 + goto out;
4409 +
4410 + sdev = cd->device;
4411 + scsi_autopm_get_device(sdev);
4412 check_disk_change(bdev);
4413
4414 mutex_lock(&sr_mutex);
4415 - cd = scsi_cd_get(bdev->bd_disk);
4416 - if (cd) {
4417 - ret = cdrom_open(&cd->cdi, bdev, mode);
4418 - if (ret)
4419 - scsi_cd_put(cd);
4420 - }
4421 + ret = cdrom_open(&cd->cdi, bdev, mode);
4422 mutex_unlock(&sr_mutex);
4423 +
4424 + scsi_autopm_put_device(sdev);
4425 + if (ret)
4426 + scsi_cd_put(cd);
4427 +
4428 +out:
4429 return ret;
4430 }
4431
4432 @@ -562,6 +570,8 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
4433 if (ret)
4434 goto out;
4435
4436 + scsi_autopm_get_device(sdev);
4437 +
4438 /*
4439 * Send SCSI addressing ioctls directly to mid level, send other
4440 * ioctls to cdrom/block level.
4441 @@ -570,15 +580,18 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
4442 case SCSI_IOCTL_GET_IDLUN:
4443 case SCSI_IOCTL_GET_BUS_NUMBER:
4444 ret = scsi_ioctl(sdev, cmd, argp);
4445 - goto out;
4446 + goto put;
4447 }
4448
4449 ret = cdrom_ioctl(&cd->cdi, bdev, mode, cmd, arg);
4450 if (ret != -ENOSYS)
4451 - goto out;
4452 + goto put;
4453
4454 ret = scsi_ioctl(sdev, cmd, argp);
4455
4456 +put:
4457 + scsi_autopm_put_device(sdev);
4458 +
4459 out:
4460 mutex_unlock(&sr_mutex);
4461 return ret;
4462 diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
4463 index 7c28e8d4955a..54e3a0f6844c 100644
4464 --- a/drivers/scsi/virtio_scsi.c
4465 +++ b/drivers/scsi/virtio_scsi.c
4466 @@ -91,9 +91,6 @@ struct virtio_scsi_vq {
4467 struct virtio_scsi_target_state {
4468 seqcount_t tgt_seq;
4469
4470 - /* Count of outstanding requests. */
4471 - atomic_t reqs;
4472 -
4473 /* Currently active virtqueue for requests sent to this target. */
4474 struct virtio_scsi_vq *req_vq;
4475 };
4476 @@ -152,8 +149,6 @@ static void virtscsi_complete_cmd(struct virtio_scsi *vscsi, void *buf)
4477 struct virtio_scsi_cmd *cmd = buf;
4478 struct scsi_cmnd *sc = cmd->sc;
4479 struct virtio_scsi_cmd_resp *resp = &cmd->resp.cmd;
4480 - struct virtio_scsi_target_state *tgt =
4481 - scsi_target(sc->device)->hostdata;
4482
4483 dev_dbg(&sc->device->sdev_gendev,
4484 "cmd %p response %u status %#02x sense_len %u\n",
4485 @@ -210,8 +205,6 @@ static void virtscsi_complete_cmd(struct virtio_scsi *vscsi, void *buf)
4486 }
4487
4488 sc->scsi_done(sc);
4489 -
4490 - atomic_dec(&tgt->reqs);
4491 }
4492
4493 static void virtscsi_vq_done(struct virtio_scsi *vscsi,
4494 @@ -580,10 +573,7 @@ static int virtscsi_queuecommand_single(struct Scsi_Host *sh,
4495 struct scsi_cmnd *sc)
4496 {
4497 struct virtio_scsi *vscsi = shost_priv(sh);
4498 - struct virtio_scsi_target_state *tgt =
4499 - scsi_target(sc->device)->hostdata;
4500
4501 - atomic_inc(&tgt->reqs);
4502 return virtscsi_queuecommand(vscsi, &vscsi->req_vqs[0], sc);
4503 }
4504
4505 @@ -596,55 +586,11 @@ static struct virtio_scsi_vq *virtscsi_pick_vq_mq(struct virtio_scsi *vscsi,
4506 return &vscsi->req_vqs[hwq];
4507 }
4508
4509 -static struct virtio_scsi_vq *virtscsi_pick_vq(struct virtio_scsi *vscsi,
4510 - struct virtio_scsi_target_state *tgt)
4511 -{
4512 - struct virtio_scsi_vq *vq;
4513 - unsigned long flags;
4514 - u32 queue_num;
4515 -
4516 - local_irq_save(flags);
4517 - if (atomic_inc_return(&tgt->reqs) > 1) {
4518 - unsigned long seq;
4519 -
4520 - do {
4521 - seq = read_seqcount_begin(&tgt->tgt_seq);
4522 - vq = tgt->req_vq;
4523 - } while (read_seqcount_retry(&tgt->tgt_seq, seq));
4524 - } else {
4525 - /* no writes can be concurrent because of atomic_t */
4526 - write_seqcount_begin(&tgt->tgt_seq);
4527 -
4528 - /* keep previous req_vq if a reader just arrived */
4529 - if (unlikely(atomic_read(&tgt->reqs) > 1)) {
4530 - vq = tgt->req_vq;
4531 - goto unlock;
4532 - }
4533 -
4534 - queue_num = smp_processor_id();
4535 - while (unlikely(queue_num >= vscsi->num_queues))
4536 - queue_num -= vscsi->num_queues;
4537 - tgt->req_vq = vq = &vscsi->req_vqs[queue_num];
4538 - unlock:
4539 - write_seqcount_end(&tgt->tgt_seq);
4540 - }
4541 - local_irq_restore(flags);
4542 -
4543 - return vq;
4544 -}
4545 -
4546 static int virtscsi_queuecommand_multi(struct Scsi_Host *sh,
4547 struct scsi_cmnd *sc)
4548 {
4549 struct virtio_scsi *vscsi = shost_priv(sh);
4550 - struct virtio_scsi_target_state *tgt =
4551 - scsi_target(sc->device)->hostdata;
4552 - struct virtio_scsi_vq *req_vq;
4553 -
4554 - if (shost_use_blk_mq(sh))
4555 - req_vq = virtscsi_pick_vq_mq(vscsi, sc);
4556 - else
4557 - req_vq = virtscsi_pick_vq(vscsi, tgt);
4558 + struct virtio_scsi_vq *req_vq = virtscsi_pick_vq_mq(vscsi, sc);
4559
4560 return virtscsi_queuecommand(vscsi, req_vq, sc);
4561 }
4562 @@ -775,7 +721,6 @@ static int virtscsi_target_alloc(struct scsi_target *starget)
4563 return -ENOMEM;
4564
4565 seqcount_init(&tgt->tgt_seq);
4566 - atomic_set(&tgt->reqs, 0);
4567 tgt->req_vq = &vscsi->req_vqs[0];
4568
4569 starget->hostdata = tgt;
4570 @@ -823,6 +768,7 @@ static struct scsi_host_template virtscsi_host_template_single = {
4571 .target_alloc = virtscsi_target_alloc,
4572 .target_destroy = virtscsi_target_destroy,
4573 .track_queue_depth = 1,
4574 + .force_blk_mq = 1,
4575 };
4576
4577 static struct scsi_host_template virtscsi_host_template_multi = {
4578 @@ -844,6 +790,7 @@ static struct scsi_host_template virtscsi_host_template_multi = {
4579 .target_destroy = virtscsi_target_destroy,
4580 .map_queues = virtscsi_map_queues,
4581 .track_queue_depth = 1,
4582 + .force_blk_mq = 1,
4583 };
4584
4585 #define virtscsi_config_get(vdev, fld) \
4586 diff --git a/fs/dcache.c b/fs/dcache.c
4587 index 5f31a93150d1..8d4935978fec 100644
4588 --- a/fs/dcache.c
4589 +++ b/fs/dcache.c
4590 @@ -357,14 +357,11 @@ static void dentry_unlink_inode(struct dentry * dentry)
4591 __releases(dentry->d_inode->i_lock)
4592 {
4593 struct inode *inode = dentry->d_inode;
4594 - bool hashed = !d_unhashed(dentry);
4595
4596 - if (hashed)
4597 - raw_write_seqcount_begin(&dentry->d_seq);
4598 + raw_write_seqcount_begin(&dentry->d_seq);
4599 __d_clear_type_and_inode(dentry);
4600 hlist_del_init(&dentry->d_u.d_alias);
4601 - if (hashed)
4602 - raw_write_seqcount_end(&dentry->d_seq);
4603 + raw_write_seqcount_end(&dentry->d_seq);
4604 spin_unlock(&dentry->d_lock);
4605 spin_unlock(&inode->i_lock);
4606 if (!inode->i_nlink)
4607 @@ -1922,10 +1919,12 @@ struct dentry *d_make_root(struct inode *root_inode)
4608
4609 if (root_inode) {
4610 res = __d_alloc(root_inode->i_sb, NULL);
4611 - if (res)
4612 + if (res) {
4613 + res->d_flags |= DCACHE_RCUACCESS;
4614 d_instantiate(res, root_inode);
4615 - else
4616 + } else {
4617 iput(root_inode);
4618 + }
4619 }
4620 return res;
4621 }
4622 diff --git a/fs/namespace.c b/fs/namespace.c
4623 index 1eb3bfd8be5a..9dc146e7b5e0 100644
4624 --- a/fs/namespace.c
4625 +++ b/fs/namespace.c
4626 @@ -659,12 +659,21 @@ int __legitimize_mnt(struct vfsmount *bastard, unsigned seq)
4627 return 0;
4628 mnt = real_mount(bastard);
4629 mnt_add_count(mnt, 1);
4630 + smp_mb(); // see mntput_no_expire()
4631 if (likely(!read_seqretry(&mount_lock, seq)))
4632 return 0;
4633 if (bastard->mnt_flags & MNT_SYNC_UMOUNT) {
4634 mnt_add_count(mnt, -1);
4635 return 1;
4636 }
4637 + lock_mount_hash();
4638 + if (unlikely(bastard->mnt_flags & MNT_DOOMED)) {
4639 + mnt_add_count(mnt, -1);
4640 + unlock_mount_hash();
4641 + return 1;
4642 + }
4643 + unlock_mount_hash();
4644 + /* caller will mntput() */
4645 return -1;
4646 }
4647
4648 @@ -1195,12 +1204,27 @@ static DECLARE_DELAYED_WORK(delayed_mntput_work, delayed_mntput);
4649 static void mntput_no_expire(struct mount *mnt)
4650 {
4651 rcu_read_lock();
4652 - mnt_add_count(mnt, -1);
4653 - if (likely(mnt->mnt_ns)) { /* shouldn't be the last one */
4654 + if (likely(READ_ONCE(mnt->mnt_ns))) {
4655 + /*
4656 + * Since we don't do lock_mount_hash() here,
4657 + * ->mnt_ns can change under us. However, if it's
4658 + * non-NULL, then there's a reference that won't
4659 + * be dropped until after an RCU delay done after
4660 + * turning ->mnt_ns NULL. So if we observe it
4661 + * non-NULL under rcu_read_lock(), the reference
4662 + * we are dropping is not the final one.
4663 + */
4664 + mnt_add_count(mnt, -1);
4665 rcu_read_unlock();
4666 return;
4667 }
4668 lock_mount_hash();
4669 + /*
4670 + * make sure that if __legitimize_mnt() has not seen us grab
4671 + * mount_lock, we'll see their refcount increment here.
4672 + */
4673 + smp_mb();
4674 + mnt_add_count(mnt, -1);
4675 if (mnt_get_count(mnt)) {
4676 rcu_read_unlock();
4677 unlock_mount_hash();
4678 diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
4679 index 2142bceaeb75..46a2f5d9aa25 100644
4680 --- a/include/asm-generic/pgtable.h
4681 +++ b/include/asm-generic/pgtable.h
4682 @@ -1055,6 +1055,18 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
4683 static inline void init_espfix_bsp(void) { }
4684 #endif
4685
4686 +#ifndef __HAVE_ARCH_PFN_MODIFY_ALLOWED
4687 +static inline bool pfn_modify_allowed(unsigned long pfn, pgprot_t prot)
4688 +{
4689 + return true;
4690 +}
4691 +
4692 +static inline bool arch_has_pfn_modify_check(void)
4693 +{
4694 + return false;
4695 +}
4696 +#endif /* !_HAVE_ARCH_PFN_MODIFY_ALLOWED */
4697 +
4698 #endif /* !__ASSEMBLY__ */
4699
4700 #ifndef io_remap_pfn_range
4701 diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
4702 index 070f85d92c15..28b76f0894d4 100644
4703 --- a/include/linux/compiler-clang.h
4704 +++ b/include/linux/compiler-clang.h
4705 @@ -17,6 +17,9 @@
4706 */
4707 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
4708
4709 +#undef __no_sanitize_address
4710 +#define __no_sanitize_address __attribute__((no_sanitize("address")))
4711 +
4712 /* Clang doesn't have a way to turn it off per-function, yet. */
4713 #ifdef __noretpoline
4714 #undef __noretpoline
4715 diff --git a/include/linux/cpu.h b/include/linux/cpu.h
4716 index 9546bf2fe310..2a378d261914 100644
4717 --- a/include/linux/cpu.h
4718 +++ b/include/linux/cpu.h
4719 @@ -30,7 +30,7 @@ struct cpu {
4720 };
4721
4722 extern void boot_cpu_init(void);
4723 -extern void boot_cpu_state_init(void);
4724 +extern void boot_cpu_hotplug_init(void);
4725 extern void cpu_init(void);
4726 extern void trap_init(void);
4727
4728 @@ -55,6 +55,8 @@ extern ssize_t cpu_show_spectre_v2(struct device *dev,
4729 struct device_attribute *attr, char *buf);
4730 extern ssize_t cpu_show_spec_store_bypass(struct device *dev,
4731 struct device_attribute *attr, char *buf);
4732 +extern ssize_t cpu_show_l1tf(struct device *dev,
4733 + struct device_attribute *attr, char *buf);
4734
4735 extern __printf(4, 5)
4736 struct device *cpu_device_create(struct device *parent, void *drvdata,
4737 @@ -176,4 +178,23 @@ void cpuhp_report_idle_dead(void);
4738 static inline void cpuhp_report_idle_dead(void) { }
4739 #endif /* #ifdef CONFIG_HOTPLUG_CPU */
4740
4741 +enum cpuhp_smt_control {
4742 + CPU_SMT_ENABLED,
4743 + CPU_SMT_DISABLED,
4744 + CPU_SMT_FORCE_DISABLED,
4745 + CPU_SMT_NOT_SUPPORTED,
4746 +};
4747 +
4748 +#if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
4749 +extern enum cpuhp_smt_control cpu_smt_control;
4750 +extern void cpu_smt_disable(bool force);
4751 +extern void cpu_smt_check_topology_early(void);
4752 +extern void cpu_smt_check_topology(void);
4753 +#else
4754 +# define cpu_smt_control (CPU_SMT_ENABLED)
4755 +static inline void cpu_smt_disable(bool force) { }
4756 +static inline void cpu_smt_check_topology_early(void) { }
4757 +static inline void cpu_smt_check_topology(void) { }
4758 +#endif
4759 +
4760 #endif /* _LINUX_CPU_H_ */
4761 diff --git a/include/linux/swapfile.h b/include/linux/swapfile.h
4762 index 06bd7b096167..e06febf62978 100644
4763 --- a/include/linux/swapfile.h
4764 +++ b/include/linux/swapfile.h
4765 @@ -10,5 +10,7 @@ extern spinlock_t swap_lock;
4766 extern struct plist_head swap_active_head;
4767 extern struct swap_info_struct *swap_info[];
4768 extern int try_to_unuse(unsigned int, bool, unsigned long);
4769 +extern unsigned long generic_max_swapfile_size(void);
4770 +extern unsigned long max_swapfile_size(void);
4771
4772 #endif /* _LINUX_SWAPFILE_H */
4773 diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
4774 index a8b7bf879ced..9c1e4bad6581 100644
4775 --- a/include/scsi/scsi_host.h
4776 +++ b/include/scsi/scsi_host.h
4777 @@ -452,6 +452,9 @@ struct scsi_host_template {
4778 /* True if the controller does not support WRITE SAME */
4779 unsigned no_write_same:1;
4780
4781 + /* True if the low-level driver supports blk-mq only */
4782 + unsigned force_blk_mq:1;
4783 +
4784 /*
4785 * Countdown for host blocking with no commands outstanding.
4786 */
4787 diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h
4788 index 857bad91c454..27c62abb6c9e 100644
4789 --- a/include/uapi/linux/kvm.h
4790 +++ b/include/uapi/linux/kvm.h
4791 @@ -761,6 +761,7 @@ struct kvm_ppc_resize_hpt {
4792 #define KVM_TRACE_PAUSE __KVM_DEPRECATED_MAIN_0x07
4793 #define KVM_TRACE_DISABLE __KVM_DEPRECATED_MAIN_0x08
4794 #define KVM_GET_EMULATED_CPUID _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
4795 +#define KVM_GET_MSR_FEATURE_INDEX_LIST _IOWR(KVMIO, 0x0a, struct kvm_msr_list)
4796
4797 /*
4798 * Extension capability list.
4799 @@ -932,6 +933,7 @@ struct kvm_ppc_resize_hpt {
4800 #define KVM_CAP_HYPERV_SYNIC2 148
4801 #define KVM_CAP_HYPERV_VP_INDEX 149
4802 #define KVM_CAP_S390_BPB 152
4803 +#define KVM_CAP_GET_MSR_FEATURES 153
4804
4805 #ifdef KVM_CAP_IRQ_ROUTING
4806
4807 diff --git a/init/main.c b/init/main.c
4808 index 0d88f37febcb..c4a45145e102 100644
4809 --- a/init/main.c
4810 +++ b/init/main.c
4811 @@ -543,8 +543,8 @@ asmlinkage __visible void __init start_kernel(void)
4812 setup_command_line(command_line);
4813 setup_nr_cpu_ids();
4814 setup_per_cpu_areas();
4815 - boot_cpu_state_init();
4816 smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
4817 + boot_cpu_hotplug_init();
4818
4819 build_all_zonelists(NULL);
4820 page_alloc_init();
4821 diff --git a/kernel/cpu.c b/kernel/cpu.c
4822 index f21bfa3172d8..8f02f9b6e046 100644
4823 --- a/kernel/cpu.c
4824 +++ b/kernel/cpu.c
4825 @@ -60,6 +60,7 @@ struct cpuhp_cpu_state {
4826 bool rollback;
4827 bool single;
4828 bool bringup;
4829 + bool booted_once;
4830 struct hlist_node *node;
4831 struct hlist_node *last;
4832 enum cpuhp_state cb_state;
4833 @@ -346,6 +347,85 @@ void cpu_hotplug_enable(void)
4834 EXPORT_SYMBOL_GPL(cpu_hotplug_enable);
4835 #endif /* CONFIG_HOTPLUG_CPU */
4836
4837 +#ifdef CONFIG_HOTPLUG_SMT
4838 +enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
4839 +EXPORT_SYMBOL_GPL(cpu_smt_control);
4840 +
4841 +static bool cpu_smt_available __read_mostly;
4842 +
4843 +void __init cpu_smt_disable(bool force)
4844 +{
4845 + if (cpu_smt_control == CPU_SMT_FORCE_DISABLED ||
4846 + cpu_smt_control == CPU_SMT_NOT_SUPPORTED)
4847 + return;
4848 +
4849 + if (force) {
4850 + pr_info("SMT: Force disabled\n");
4851 + cpu_smt_control = CPU_SMT_FORCE_DISABLED;
4852 + } else {
4853 + cpu_smt_control = CPU_SMT_DISABLED;
4854 + }
4855 +}
4856 +
4857 +/*
4858 + * The decision whether SMT is supported can only be done after the full
4859 + * CPU identification. Called from architecture code before non boot CPUs
4860 + * are brought up.
4861 + */
4862 +void __init cpu_smt_check_topology_early(void)
4863 +{
4864 + if (!topology_smt_supported())
4865 + cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
4866 +}
4867 +
4868 +/*
4869 + * If SMT was disabled by BIOS, detect it here, after the CPUs have been
4870 + * brought online. This ensures the smt/l1tf sysfs entries are consistent
4871 + * with reality. cpu_smt_available is set to true during the bringup of non
4872 + * boot CPUs when a SMT sibling is detected. Note, this may overwrite
4873 + * cpu_smt_control's previous setting.
4874 + */
4875 +void __init cpu_smt_check_topology(void)
4876 +{
4877 + if (!cpu_smt_available)
4878 + cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
4879 +}
4880 +
4881 +static int __init smt_cmdline_disable(char *str)
4882 +{
4883 + cpu_smt_disable(str && !strcmp(str, "force"));
4884 + return 0;
4885 +}
4886 +early_param("nosmt", smt_cmdline_disable);
4887 +
4888 +static inline bool cpu_smt_allowed(unsigned int cpu)
4889 +{
4890 + if (topology_is_primary_thread(cpu))
4891 + return true;
4892 +
4893 + /*
4894 + * If the CPU is not a 'primary' thread and the booted_once bit is
4895 + * set then the processor has SMT support. Store this information
4896 + * for the late check of SMT support in cpu_smt_check_topology().
4897 + */
4898 + if (per_cpu(cpuhp_state, cpu).booted_once)
4899 + cpu_smt_available = true;
4900 +
4901 + if (cpu_smt_control == CPU_SMT_ENABLED)
4902 + return true;
4903 +
4904 + /*
4905 + * On x86 it's required to boot all logical CPUs at least once so
4906 + * that the init code can get a chance to set CR4.MCE on each
4907 + * CPU. Otherwise, a broadacasted MCE observing CR4.MCE=0b on any
4908 + * core will shutdown the machine.
4909 + */
4910 + return !per_cpu(cpuhp_state, cpu).booted_once;
4911 +}
4912 +#else
4913 +static inline bool cpu_smt_allowed(unsigned int cpu) { return true; }
4914 +#endif
4915 +
4916 static inline enum cpuhp_state
4917 cpuhp_set_state(struct cpuhp_cpu_state *st, enum cpuhp_state target)
4918 {
4919 @@ -426,6 +506,16 @@ static int bringup_wait_for_ap(unsigned int cpu)
4920 stop_machine_unpark(cpu);
4921 kthread_unpark(st->thread);
4922
4923 + /*
4924 + * SMT soft disabling on X86 requires to bring the CPU out of the
4925 + * BIOS 'wait for SIPI' state in order to set the CR4.MCE bit. The
4926 + * CPU marked itself as booted_once in cpu_notify_starting() so the
4927 + * cpu_smt_allowed() check will now return false if this is not the
4928 + * primary sibling.
4929 + */
4930 + if (!cpu_smt_allowed(cpu))
4931 + return -ECANCELED;
4932 +
4933 if (st->target <= CPUHP_AP_ONLINE_IDLE)
4934 return 0;
4935
4936 @@ -758,7 +848,6 @@ static int takedown_cpu(unsigned int cpu)
4937
4938 /* Park the smpboot threads */
4939 kthread_park(per_cpu_ptr(&cpuhp_state, cpu)->thread);
4940 - smpboot_park_threads(cpu);
4941
4942 /*
4943 * Prevent irq alloc/free while the dying cpu reorganizes the
4944 @@ -911,20 +1000,19 @@ out:
4945 return ret;
4946 }
4947
4948 +static int cpu_down_maps_locked(unsigned int cpu, enum cpuhp_state target)
4949 +{
4950 + if (cpu_hotplug_disabled)
4951 + return -EBUSY;
4952 + return _cpu_down(cpu, 0, target);
4953 +}
4954 +
4955 static int do_cpu_down(unsigned int cpu, enum cpuhp_state target)
4956 {
4957 int err;
4958
4959 cpu_maps_update_begin();
4960 -
4961 - if (cpu_hotplug_disabled) {
4962 - err = -EBUSY;
4963 - goto out;
4964 - }
4965 -
4966 - err = _cpu_down(cpu, 0, target);
4967 -
4968 -out:
4969 + err = cpu_down_maps_locked(cpu, target);
4970 cpu_maps_update_done();
4971 return err;
4972 }
4973 @@ -953,6 +1041,7 @@ void notify_cpu_starting(unsigned int cpu)
4974 int ret;
4975
4976 rcu_cpu_starting(cpu); /* Enables RCU usage on this CPU. */
4977 + st->booted_once = true;
4978 while (st->state < target) {
4979 st->state++;
4980 ret = cpuhp_invoke_callback(cpu, st->state, true, NULL, NULL);
4981 @@ -1062,6 +1151,10 @@ static int do_cpu_up(unsigned int cpu, enum cpuhp_state target)
4982 err = -EBUSY;
4983 goto out;
4984 }
4985 + if (!cpu_smt_allowed(cpu)) {
4986 + err = -EPERM;
4987 + goto out;
4988 + }
4989
4990 err = _cpu_up(cpu, 0, target);
4991 out:
4992 @@ -1344,7 +1437,7 @@ static struct cpuhp_step cpuhp_ap_states[] = {
4993 [CPUHP_AP_SMPBOOT_THREADS] = {
4994 .name = "smpboot/threads:online",
4995 .startup.single = smpboot_unpark_threads,
4996 - .teardown.single = NULL,
4997 + .teardown.single = smpboot_park_threads,
4998 },
4999 [CPUHP_AP_IRQ_AFFINITY_ONLINE] = {
5000 .name = "irq/affinity:online",
5001 @@ -1918,10 +2011,172 @@ static const struct attribute_group cpuhp_cpu_root_attr_group = {
5002 NULL
5003 };
5004
5005 +#ifdef CONFIG_HOTPLUG_SMT
5006 +
5007 +static const char *smt_states[] = {
5008 + [CPU_SMT_ENABLED] = "on",
5009 + [CPU_SMT_DISABLED] = "off",
5010 + [CPU_SMT_FORCE_DISABLED] = "forceoff",
5011 + [CPU_SMT_NOT_SUPPORTED] = "notsupported",
5012 +};
5013 +
5014 +static ssize_t
5015 +show_smt_control(struct device *dev, struct device_attribute *attr, char *buf)
5016 +{
5017 + return snprintf(buf, PAGE_SIZE - 2, "%s\n", smt_states[cpu_smt_control]);
5018 +}
5019 +
5020 +static void cpuhp_offline_cpu_device(unsigned int cpu)
5021 +{
5022 + struct device *dev = get_cpu_device(cpu);
5023 +
5024 + dev->offline = true;
5025 + /* Tell user space about the state change */
5026 + kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
5027 +}
5028 +
5029 +static void cpuhp_online_cpu_device(unsigned int cpu)
5030 +{
5031 + struct device *dev = get_cpu_device(cpu);
5032 +
5033 + dev->offline = false;
5034 + /* Tell user space about the state change */
5035 + kobject_uevent(&dev->kobj, KOBJ_ONLINE);
5036 +}
5037 +
5038 +static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)
5039 +{
5040 + int cpu, ret = 0;
5041 +
5042 + cpu_maps_update_begin();
5043 + for_each_online_cpu(cpu) {
5044 + if (topology_is_primary_thread(cpu))
5045 + continue;
5046 + ret = cpu_down_maps_locked(cpu, CPUHP_OFFLINE);
5047 + if (ret)
5048 + break;
5049 + /*
5050 + * As this needs to hold the cpu maps lock it's impossible
5051 + * to call device_offline() because that ends up calling
5052 + * cpu_down() which takes cpu maps lock. cpu maps lock
5053 + * needs to be held as this might race against in kernel
5054 + * abusers of the hotplug machinery (thermal management).
5055 + *
5056 + * So nothing would update device:offline state. That would
5057 + * leave the sysfs entry stale and prevent onlining after
5058 + * smt control has been changed to 'off' again. This is
5059 + * called under the sysfs hotplug lock, so it is properly
5060 + * serialized against the regular offline usage.
5061 + */
5062 + cpuhp_offline_cpu_device(cpu);
5063 + }
5064 + if (!ret)
5065 + cpu_smt_control = ctrlval;
5066 + cpu_maps_update_done();
5067 + return ret;
5068 +}
5069 +
5070 +static int cpuhp_smt_enable(void)
5071 +{
5072 + int cpu, ret = 0;
5073 +
5074 + cpu_maps_update_begin();
5075 + cpu_smt_control = CPU_SMT_ENABLED;
5076 + for_each_present_cpu(cpu) {
5077 + /* Skip online CPUs and CPUs on offline nodes */
5078 + if (cpu_online(cpu) || !node_online(cpu_to_node(cpu)))
5079 + continue;
5080 + ret = _cpu_up(cpu, 0, CPUHP_ONLINE);
5081 + if (ret)
5082 + break;
5083 + /* See comment in cpuhp_smt_disable() */
5084 + cpuhp_online_cpu_device(cpu);
5085 + }
5086 + cpu_maps_update_done();
5087 + return ret;
5088 +}
5089 +
5090 +static ssize_t
5091 +store_smt_control(struct device *dev, struct device_attribute *attr,
5092 + const char *buf, size_t count)
5093 +{
5094 + int ctrlval, ret;
5095 +
5096 + if (sysfs_streq(buf, "on"))
5097 + ctrlval = CPU_SMT_ENABLED;
5098 + else if (sysfs_streq(buf, "off"))
5099 + ctrlval = CPU_SMT_DISABLED;
5100 + else if (sysfs_streq(buf, "forceoff"))
5101 + ctrlval = CPU_SMT_FORCE_DISABLED;
5102 + else
5103 + return -EINVAL;
5104 +
5105 + if (cpu_smt_control == CPU_SMT_FORCE_DISABLED)
5106 + return -EPERM;
5107 +
5108 + if (cpu_smt_control == CPU_SMT_NOT_SUPPORTED)
5109 + return -ENODEV;
5110 +
5111 + ret = lock_device_hotplug_sysfs();
5112 + if (ret)
5113 + return ret;
5114 +
5115 + if (ctrlval != cpu_smt_control) {
5116 + switch (ctrlval) {
5117 + case CPU_SMT_ENABLED:
5118 + ret = cpuhp_smt_enable();
5119 + break;
5120 + case CPU_SMT_DISABLED:
5121 + case CPU_SMT_FORCE_DISABLED:
5122 + ret = cpuhp_smt_disable(ctrlval);
5123 + break;
5124 + }
5125 + }
5126 +
5127 + unlock_device_hotplug();
5128 + return ret ? ret : count;
5129 +}
5130 +static DEVICE_ATTR(control, 0644, show_smt_control, store_smt_control);
5131 +
5132 +static ssize_t
5133 +show_smt_active(struct device *dev, struct device_attribute *attr, char *buf)
5134 +{
5135 + bool active = topology_max_smt_threads() > 1;
5136 +
5137 + return snprintf(buf, PAGE_SIZE - 2, "%d\n", active);
5138 +}
5139 +static DEVICE_ATTR(active, 0444, show_smt_active, NULL);
5140 +
5141 +static struct attribute *cpuhp_smt_attrs[] = {
5142 + &dev_attr_control.attr,
5143 + &dev_attr_active.attr,
5144 + NULL
5145 +};
5146 +
5147 +static const struct attribute_group cpuhp_smt_attr_group = {
5148 + .attrs = cpuhp_smt_attrs,
5149 + .name = "smt",
5150 + NULL
5151 +};
5152 +
5153 +static int __init cpu_smt_state_init(void)
5154 +{
5155 + return sysfs_create_group(&cpu_subsys.dev_root->kobj,
5156 + &cpuhp_smt_attr_group);
5157 +}
5158 +
5159 +#else
5160 +static inline int cpu_smt_state_init(void) { return 0; }
5161 +#endif
5162 +
5163 static int __init cpuhp_sysfs_init(void)
5164 {
5165 int cpu, ret;
5166
5167 + ret = cpu_smt_state_init();
5168 + if (ret)
5169 + return ret;
5170 +
5171 ret = sysfs_create_group(&cpu_subsys.dev_root->kobj,
5172 &cpuhp_cpu_root_attr_group);
5173 if (ret)
5174 @@ -2022,7 +2277,10 @@ void __init boot_cpu_init(void)
5175 /*
5176 * Must be called _AFTER_ setting up the per_cpu areas
5177 */
5178 -void __init boot_cpu_state_init(void)
5179 +void __init boot_cpu_hotplug_init(void)
5180 {
5181 - per_cpu_ptr(&cpuhp_state, smp_processor_id())->state = CPUHP_ONLINE;
5182 +#ifdef CONFIG_SMP
5183 + this_cpu_write(cpuhp_state.booted_once, true);
5184 +#endif
5185 + this_cpu_write(cpuhp_state.state, CPUHP_ONLINE);
5186 }
5187 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
5188 index 31615d1ae44c..4e89ed8a0fb2 100644
5189 --- a/kernel/sched/core.c
5190 +++ b/kernel/sched/core.c
5191 @@ -5615,6 +5615,18 @@ int sched_cpu_activate(unsigned int cpu)
5192 struct rq *rq = cpu_rq(cpu);
5193 struct rq_flags rf;
5194
5195 +#ifdef CONFIG_SCHED_SMT
5196 + /*
5197 + * The sched_smt_present static key needs to be evaluated on every
5198 + * hotplug event because at boot time SMT might be disabled when
5199 + * the number of booted CPUs is limited.
5200 + *
5201 + * If then later a sibling gets hotplugged, then the key would stay
5202 + * off and SMT scheduling would never be functional.
5203 + */
5204 + if (cpumask_weight(cpu_smt_mask(cpu)) > 1)
5205 + static_branch_enable_cpuslocked(&sched_smt_present);
5206 +#endif
5207 set_cpu_active(cpu, true);
5208
5209 if (sched_smp_initialized) {
5210 @@ -5710,22 +5722,6 @@ int sched_cpu_dying(unsigned int cpu)
5211 }
5212 #endif
5213
5214 -#ifdef CONFIG_SCHED_SMT
5215 -DEFINE_STATIC_KEY_FALSE(sched_smt_present);
5216 -
5217 -static void sched_init_smt(void)
5218 -{
5219 - /*
5220 - * We've enumerated all CPUs and will assume that if any CPU
5221 - * has SMT siblings, CPU0 will too.
5222 - */
5223 - if (cpumask_weight(cpu_smt_mask(0)) > 1)
5224 - static_branch_enable(&sched_smt_present);
5225 -}
5226 -#else
5227 -static inline void sched_init_smt(void) { }
5228 -#endif
5229 -
5230 void __init sched_init_smp(void)
5231 {
5232 cpumask_var_t non_isolated_cpus;
5233 @@ -5755,8 +5751,6 @@ void __init sched_init_smp(void)
5234 init_sched_rt_class();
5235 init_sched_dl_class();
5236
5237 - sched_init_smt();
5238 -
5239 sched_smp_initialized = true;
5240 }
5241
5242 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
5243 index 5c09ddf8c832..0cc7098c6dfd 100644
5244 --- a/kernel/sched/fair.c
5245 +++ b/kernel/sched/fair.c
5246 @@ -5631,6 +5631,7 @@ find_idlest_cpu(struct sched_group *group, struct task_struct *p, int this_cpu)
5247 }
5248
5249 #ifdef CONFIG_SCHED_SMT
5250 +DEFINE_STATIC_KEY_FALSE(sched_smt_present);
5251
5252 static inline void set_idle_cores(int cpu, int val)
5253 {
5254 diff --git a/kernel/smp.c b/kernel/smp.c
5255 index c94dd85c8d41..2d1da290f144 100644
5256 --- a/kernel/smp.c
5257 +++ b/kernel/smp.c
5258 @@ -584,6 +584,8 @@ void __init smp_init(void)
5259 num_nodes, (num_nodes > 1 ? "s" : ""),
5260 num_cpus, (num_cpus > 1 ? "s" : ""));
5261
5262 + /* Final decision about SMT support */
5263 + cpu_smt_check_topology();
5264 /* Any cleanup work */
5265 smp_cpus_done(setup_max_cpus);
5266 }
5267 diff --git a/kernel/softirq.c b/kernel/softirq.c
5268 index f40ac7191257..a4c87cf27f9d 100644
5269 --- a/kernel/softirq.c
5270 +++ b/kernel/softirq.c
5271 @@ -79,12 +79,16 @@ static void wakeup_softirqd(void)
5272
5273 /*
5274 * If ksoftirqd is scheduled, we do not want to process pending softirqs
5275 - * right now. Let ksoftirqd handle this at its own rate, to get fairness.
5276 + * right now. Let ksoftirqd handle this at its own rate, to get fairness,
5277 + * unless we're doing some of the synchronous softirqs.
5278 */
5279 -static bool ksoftirqd_running(void)
5280 +#define SOFTIRQ_NOW_MASK ((1 << HI_SOFTIRQ) | (1 << TASKLET_SOFTIRQ))
5281 +static bool ksoftirqd_running(unsigned long pending)
5282 {
5283 struct task_struct *tsk = __this_cpu_read(ksoftirqd);
5284
5285 + if (pending & SOFTIRQ_NOW_MASK)
5286 + return false;
5287 return tsk && (tsk->state == TASK_RUNNING);
5288 }
5289
5290 @@ -324,7 +328,7 @@ asmlinkage __visible void do_softirq(void)
5291
5292 pending = local_softirq_pending();
5293
5294 - if (pending && !ksoftirqd_running())
5295 + if (pending && !ksoftirqd_running(pending))
5296 do_softirq_own_stack();
5297
5298 local_irq_restore(flags);
5299 @@ -351,7 +355,7 @@ void irq_enter(void)
5300
5301 static inline void invoke_softirq(void)
5302 {
5303 - if (ksoftirqd_running())
5304 + if (ksoftirqd_running(local_softirq_pending()))
5305 return;
5306
5307 if (!force_irqthreads) {
5308 diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
5309 index 1ff523dae6e2..e190d1ef3a23 100644
5310 --- a/kernel/stop_machine.c
5311 +++ b/kernel/stop_machine.c
5312 @@ -260,6 +260,15 @@ retry:
5313 err = 0;
5314 __cpu_stop_queue_work(stopper1, work1, &wakeq);
5315 __cpu_stop_queue_work(stopper2, work2, &wakeq);
5316 + /*
5317 + * The waking up of stopper threads has to happen
5318 + * in the same scheduling context as the queueing.
5319 + * Otherwise, there is a possibility of one of the
5320 + * above stoppers being woken up by another CPU,
5321 + * and preempting us. This will cause us to n ot
5322 + * wake up the other stopper forever.
5323 + */
5324 + preempt_disable();
5325 unlock:
5326 raw_spin_unlock(&stopper2->lock);
5327 raw_spin_unlock_irq(&stopper1->lock);
5328 @@ -271,7 +280,6 @@ unlock:
5329 }
5330
5331 if (!err) {
5332 - preempt_disable();
5333 wake_up_q(&wakeq);
5334 preempt_enable();
5335 }
5336 diff --git a/mm/memory.c b/mm/memory.c
5337 index fc7779165dcf..5539b1975091 100644
5338 --- a/mm/memory.c
5339 +++ b/mm/memory.c
5340 @@ -1887,6 +1887,9 @@ int vm_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
5341 if (addr < vma->vm_start || addr >= vma->vm_end)
5342 return -EFAULT;
5343
5344 + if (!pfn_modify_allowed(pfn, pgprot))
5345 + return -EACCES;
5346 +
5347 track_pfn_insert(vma, &pgprot, __pfn_to_pfn_t(pfn, PFN_DEV));
5348
5349 ret = insert_pfn(vma, addr, __pfn_to_pfn_t(pfn, PFN_DEV), pgprot,
5350 @@ -1908,6 +1911,9 @@ static int __vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
5351
5352 track_pfn_insert(vma, &pgprot, pfn);
5353
5354 + if (!pfn_modify_allowed(pfn_t_to_pfn(pfn), pgprot))
5355 + return -EACCES;
5356 +
5357 /*
5358 * If we don't have pte special, then we have to use the pfn_valid()
5359 * based VM_MIXEDMAP scheme (see vm_normal_page), and thus we *must*
5360 @@ -1955,6 +1961,7 @@ static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
5361 {
5362 pte_t *pte;
5363 spinlock_t *ptl;
5364 + int err = 0;
5365
5366 pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
5367 if (!pte)
5368 @@ -1962,12 +1969,16 @@ static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
5369 arch_enter_lazy_mmu_mode();
5370 do {
5371 BUG_ON(!pte_none(*pte));
5372 + if (!pfn_modify_allowed(pfn, prot)) {
5373 + err = -EACCES;
5374 + break;
5375 + }
5376 set_pte_at(mm, addr, pte, pte_mkspecial(pfn_pte(pfn, prot)));
5377 pfn++;
5378 } while (pte++, addr += PAGE_SIZE, addr != end);
5379 arch_leave_lazy_mmu_mode();
5380 pte_unmap_unlock(pte - 1, ptl);
5381 - return 0;
5382 + return err;
5383 }
5384
5385 static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
5386 @@ -1976,6 +1987,7 @@ static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
5387 {
5388 pmd_t *pmd;
5389 unsigned long next;
5390 + int err;
5391
5392 pfn -= addr >> PAGE_SHIFT;
5393 pmd = pmd_alloc(mm, pud, addr);
5394 @@ -1984,9 +1996,10 @@ static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
5395 VM_BUG_ON(pmd_trans_huge(*pmd));
5396 do {
5397 next = pmd_addr_end(addr, end);
5398 - if (remap_pte_range(mm, pmd, addr, next,
5399 - pfn + (addr >> PAGE_SHIFT), prot))
5400 - return -ENOMEM;
5401 + err = remap_pte_range(mm, pmd, addr, next,
5402 + pfn + (addr >> PAGE_SHIFT), prot);
5403 + if (err)
5404 + return err;
5405 } while (pmd++, addr = next, addr != end);
5406 return 0;
5407 }
5408 @@ -1997,6 +2010,7 @@ static inline int remap_pud_range(struct mm_struct *mm, p4d_t *p4d,
5409 {
5410 pud_t *pud;
5411 unsigned long next;
5412 + int err;
5413
5414 pfn -= addr >> PAGE_SHIFT;
5415 pud = pud_alloc(mm, p4d, addr);
5416 @@ -2004,9 +2018,10 @@ static inline int remap_pud_range(struct mm_struct *mm, p4d_t *p4d,
5417 return -ENOMEM;
5418 do {
5419 next = pud_addr_end(addr, end);
5420 - if (remap_pmd_range(mm, pud, addr, next,
5421 - pfn + (addr >> PAGE_SHIFT), prot))
5422 - return -ENOMEM;
5423 + err = remap_pmd_range(mm, pud, addr, next,
5424 + pfn + (addr >> PAGE_SHIFT), prot);
5425 + if (err)
5426 + return err;
5427 } while (pud++, addr = next, addr != end);
5428 return 0;
5429 }
5430 @@ -2017,6 +2032,7 @@ static inline int remap_p4d_range(struct mm_struct *mm, pgd_t *pgd,
5431 {
5432 p4d_t *p4d;
5433 unsigned long next;
5434 + int err;
5435
5436 pfn -= addr >> PAGE_SHIFT;
5437 p4d = p4d_alloc(mm, pgd, addr);
5438 @@ -2024,9 +2040,10 @@ static inline int remap_p4d_range(struct mm_struct *mm, pgd_t *pgd,
5439 return -ENOMEM;
5440 do {
5441 next = p4d_addr_end(addr, end);
5442 - if (remap_pud_range(mm, p4d, addr, next,
5443 - pfn + (addr >> PAGE_SHIFT), prot))
5444 - return -ENOMEM;
5445 + err = remap_pud_range(mm, p4d, addr, next,
5446 + pfn + (addr >> PAGE_SHIFT), prot);
5447 + if (err)
5448 + return err;
5449 } while (p4d++, addr = next, addr != end);
5450 return 0;
5451 }
5452 diff --git a/mm/mprotect.c b/mm/mprotect.c
5453 index 58b629bb70de..60864e19421e 100644
5454 --- a/mm/mprotect.c
5455 +++ b/mm/mprotect.c
5456 @@ -292,6 +292,42 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
5457 return pages;
5458 }
5459
5460 +static int prot_none_pte_entry(pte_t *pte, unsigned long addr,
5461 + unsigned long next, struct mm_walk *walk)
5462 +{
5463 + return pfn_modify_allowed(pte_pfn(*pte), *(pgprot_t *)(walk->private)) ?
5464 + 0 : -EACCES;
5465 +}
5466 +
5467 +static int prot_none_hugetlb_entry(pte_t *pte, unsigned long hmask,
5468 + unsigned long addr, unsigned long next,
5469 + struct mm_walk *walk)
5470 +{
5471 + return pfn_modify_allowed(pte_pfn(*pte), *(pgprot_t *)(walk->private)) ?
5472 + 0 : -EACCES;
5473 +}
5474 +
5475 +static int prot_none_test(unsigned long addr, unsigned long next,
5476 + struct mm_walk *walk)
5477 +{
5478 + return 0;
5479 +}
5480 +
5481 +static int prot_none_walk(struct vm_area_struct *vma, unsigned long start,
5482 + unsigned long end, unsigned long newflags)
5483 +{
5484 + pgprot_t new_pgprot = vm_get_page_prot(newflags);
5485 + struct mm_walk prot_none_walk = {
5486 + .pte_entry = prot_none_pte_entry,
5487 + .hugetlb_entry = prot_none_hugetlb_entry,
5488 + .test_walk = prot_none_test,
5489 + .mm = current->mm,
5490 + .private = &new_pgprot,
5491 + };
5492 +
5493 + return walk_page_range(start, end, &prot_none_walk);
5494 +}
5495 +
5496 int
5497 mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
5498 unsigned long start, unsigned long end, unsigned long newflags)
5499 @@ -309,6 +345,19 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
5500 return 0;
5501 }
5502
5503 + /*
5504 + * Do PROT_NONE PFN permission checks here when we can still
5505 + * bail out without undoing a lot of state. This is a rather
5506 + * uncommon case, so doesn't need to be very optimized.
5507 + */
5508 + if (arch_has_pfn_modify_check() &&
5509 + (vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) &&
5510 + (newflags & (VM_READ|VM_WRITE|VM_EXEC)) == 0) {
5511 + error = prot_none_walk(vma, start, end, newflags);
5512 + if (error)
5513 + return error;
5514 + }
5515 +
5516 /*
5517 * If we make a private mapping writable we increase our commit;
5518 * but (without finer accounting) cannot reduce our commit if we
5519 diff --git a/mm/swapfile.c b/mm/swapfile.c
5520 index 03d2ce288d83..8cbc7d6fd52e 100644
5521 --- a/mm/swapfile.c
5522 +++ b/mm/swapfile.c
5523 @@ -2902,6 +2902,35 @@ static int claim_swapfile(struct swap_info_struct *p, struct inode *inode)
5524 return 0;
5525 }
5526
5527 +
5528 +/*
5529 + * Find out how many pages are allowed for a single swap device. There
5530 + * are two limiting factors:
5531 + * 1) the number of bits for the swap offset in the swp_entry_t type, and
5532 + * 2) the number of bits in the swap pte, as defined by the different
5533 + * architectures.
5534 + *
5535 + * In order to find the largest possible bit mask, a swap entry with
5536 + * swap type 0 and swap offset ~0UL is created, encoded to a swap pte,
5537 + * decoded to a swp_entry_t again, and finally the swap offset is
5538 + * extracted.
5539 + *
5540 + * This will mask all the bits from the initial ~0UL mask that can't
5541 + * be encoded in either the swp_entry_t or the architecture definition
5542 + * of a swap pte.
5543 + */
5544 +unsigned long generic_max_swapfile_size(void)
5545 +{
5546 + return swp_offset(pte_to_swp_entry(
5547 + swp_entry_to_pte(swp_entry(0, ~0UL)))) + 1;
5548 +}
5549 +
5550 +/* Can be overridden by an architecture for additional checks. */
5551 +__weak unsigned long max_swapfile_size(void)
5552 +{
5553 + return generic_max_swapfile_size();
5554 +}
5555 +
5556 static unsigned long read_swap_header(struct swap_info_struct *p,
5557 union swap_header *swap_header,
5558 struct inode *inode)
5559 @@ -2937,22 +2966,7 @@ static unsigned long read_swap_header(struct swap_info_struct *p,
5560 p->cluster_next = 1;
5561 p->cluster_nr = 0;
5562
5563 - /*
5564 - * Find out how many pages are allowed for a single swap
5565 - * device. There are two limiting factors: 1) the number
5566 - * of bits for the swap offset in the swp_entry_t type, and
5567 - * 2) the number of bits in the swap pte as defined by the
5568 - * different architectures. In order to find the
5569 - * largest possible bit mask, a swap entry with swap type 0
5570 - * and swap offset ~0UL is created, encoded to a swap pte,
5571 - * decoded to a swp_entry_t again, and finally the swap
5572 - * offset is extracted. This will mask all the bits from
5573 - * the initial ~0UL mask that can't be encoded in either
5574 - * the swp_entry_t or the architecture definition of a
5575 - * swap pte.
5576 - */
5577 - maxpages = swp_offset(pte_to_swp_entry(
5578 - swp_entry_to_pte(swp_entry(0, ~0UL)))) + 1;
5579 + maxpages = max_swapfile_size();
5580 last_page = swap_header->info.last_page;
5581 if (!last_page) {
5582 pr_warn("Empty swap-file\n");
5583 diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h
5584 index 403e97d5e243..8418462298e7 100644
5585 --- a/tools/arch/x86/include/asm/cpufeatures.h
5586 +++ b/tools/arch/x86/include/asm/cpufeatures.h
5587 @@ -219,6 +219,7 @@
5588 #define X86_FEATURE_IBPB ( 7*32+26) /* Indirect Branch Prediction Barrier */
5589 #define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
5590 #define X86_FEATURE_ZEN ( 7*32+28) /* "" CPU is AMD family 0x17 (Zen) */
5591 +#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
5592
5593 /* Virtualization flags: Linux defined, word 8 */
5594 #define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
5595 @@ -338,6 +339,7 @@
5596 #define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
5597 #define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */
5598 #define X86_FEATURE_INTEL_STIBP (18*32+27) /* "" Single Thread Indirect Branch Predictors */
5599 +#define X86_FEATURE_FLUSH_L1D (18*32+28) /* Flush L1D cache */
5600 #define X86_FEATURE_ARCH_CAPABILITIES (18*32+29) /* IA32_ARCH_CAPABILITIES MSR (Intel) */
5601 #define X86_FEATURE_SPEC_CTRL_SSBD (18*32+31) /* "" Speculative Store Bypass Disable */
5602
5603 @@ -370,5 +372,6 @@
5604 #define X86_BUG_SPECTRE_V1 X86_BUG(15) /* CPU is affected by Spectre variant 1 attack with conditional branches */
5605 #define X86_BUG_SPECTRE_V2 X86_BUG(16) /* CPU is affected by Spectre variant 2 attack with indirect branches */
5606 #define X86_BUG_SPEC_STORE_BYPASS X86_BUG(17) /* CPU is affected by speculative store bypass attack */
5607 +#define X86_BUG_L1TF X86_BUG(18) /* CPU is affected by L1 Terminal Fault */
5608
5609 #endif /* _ASM_X86_CPUFEATURES_H */