mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xen/x86: use PCID feature
Avoid flushing the complete TLB when switching %cr3 for mitigation of Meltdown by using the PCID feature if available. We are using 4 PCID values for a 64 bit pv domain subject to XPTI and 2 values for the non-XPTI case: - guest active and in kernel mode - guest active and in user mode - hypervisor active and guest in user mode (XPTI only) - hypervisor active and guest in kernel mode (XPTI only) We use PCID only if PCID _and_ INVPCID are supported. With PCID in use we disable global pages in cr4. A command line parameter controls in which cases PCID is being used. As the non-XPTI case has shown not to perform better with PCID at least on some machines the default is to use PCID only for domains subject to XPTI. With PCID enabled we always disable global pages. This avoids having to either flush the complete TLB or do a cycle through all PCID values when invalidating a single global page. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
0954b1107d
commit
f8a489fca1
8 files changed
+189
-7
No files matched your search
@@ -1362,6 +1362,20 @@ Flag to enable Memory Protection Keys.
|
||||
The protection-key feature provides an additional mechanism by which IA-32e
|
||||
paging controls access to usermode addresses.
|
||||
|
||||
### pcid (x86)
|
||||
> `= <boolean> | xpti=<bool>`
|
||||
|
||||
> Default: `xpti`
|
||||
|
||||
> Can be modified at runtime (change takes effect only for domains created
|
||||
afterwards)
|
||||
|
||||
If available, control usage of the PCID feature of the processor for
|
||||
64-bit pv-domains. PCID can be used either for no domain at all (`false`),
|
||||
for all of them (`true`), only for those subject to XPTI (`xpti`) or for
|
||||
those not subject to XPTI (`no-xpti`). The feature is used only in case
|
||||
INVPCID is supported and not disabled via `invpcid=false`.
|
||||
|
||||
### psr (Intel)
|
||||
> `= List of ( cmt:<boolean> | rmid_max:<integer> | cat:<boolean> | cos_max:<integer> | cdp:<boolean> )`
|
||||
|
||||
|
||||