mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
f9a705ad1c
- New page table code for both hypervisor and guest stage-2 - Introduction of a new EL2-private host context - Allow EL2 to have its own private per-CPU variables - Support of PMU event filtering - Complete rework of the Spectre mitigation PPC: - Fix for running nested guests with in-kernel IRQ chip - Fix race condition causing occasional host hard lockup - Minor cleanups and bugfixes x86: - allow trapping unknown MSRs to userspace - allow userspace to force #GP on specific MSRs - INVPCID support on AMD - nested AMD cleanup, on demand allocation of nested SVM state - hide PV MSRs and hypercalls for features not enabled in CPUID - new test for MSR_IA32_TSC writes from host and guest - cleanups: MMU, CPUID, shared MSRs - LAPIC latency optimizations ad bugfixes For x86, also included in this pull request is a new alternative and (in the future) more scalable implementation of extended page tables that does not need a reverse map from guest physical addresses to host physical addresses. For now it is disabled by default because it is still lacking a few of the existing MMU's bells and whistles. However it is a very solid piece of work and it is already available for people to hammer on it. -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAl+S8dsUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroM40Af+M46NJmuS5rcwFfybvK/c42KT6svX Co1NrZDwzSQ2mMy3WQzH9qeLvb+nbY4sT3n5BPNPNsT+aIDPOTDt//qJ2/Ip9UUs tRNea0MAR96JWLE7MSeeRxnTaQIrw/AAZC0RXFzZvxcgytXwdqBExugw4im+b+dn Dcz8QxX1EkwT+4lTm5HC0hKZAuo4apnK1QkqCq4SdD2QVJ1YE6+z7pgj4wX7xitr STKD6q/Yt/0ndwqS0GSGbyg0jy6mE620SN6isFRkJYwqfwLJci6KnqvEK67EcNMu qeE017K+d93yIVC46/6TfVHzLR/D1FpQ8LZ16Yl6S13OuGIfAWBkQZtPRg== =AD6a -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm Pull KVM updates from Paolo Bonzini: "For x86, there is a new alternative and (in the future) more scalable implementation of extended page tables that does not need a reverse map from guest physical addresses to host physical addresses. For now it is disabled by default because it is still lacking a few of the existing MMU's bells and whistles. However it is a very solid piece of work and it is already available for people to hammer on it. Other updates: ARM: - New page table code for both hypervisor and guest stage-2 - Introduction of a new EL2-private host context - Allow EL2 to have its own private per-CPU variables - Support of PMU event filtering - Complete rework of the Spectre mitigation PPC: - Fix for running nested guests with in-kernel IRQ chip - Fix race condition causing occasional host hard lockup - Minor cleanups and bugfixes x86: - allow trapping unknown MSRs to userspace - allow userspace to force #GP on specific MSRs - INVPCID support on AMD - nested AMD cleanup, on demand allocation of nested SVM state - hide PV MSRs and hypercalls for features not enabled in CPUID - new test for MSR_IA32_TSC writes from host and guest - cleanups: MMU, CPUID, shared MSRs - LAPIC latency optimizations ad bugfixes" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (232 commits) kvm: x86/mmu: NX largepage recovery for TDP MMU kvm: x86/mmu: Don't clear write flooding count for direct roots kvm: x86/mmu: Support MMIO in the TDP MMU kvm: x86/mmu: Support write protection for nesting in tdp MMU kvm: x86/mmu: Support disabling dirty logging for the tdp MMU kvm: x86/mmu: Support dirty logging for the TDP MMU kvm: x86/mmu: Support changed pte notifier in tdp MMU kvm: x86/mmu: Add access tracking for tdp_mmu kvm: x86/mmu: Support invalidate range MMU notifier for TDP MMU kvm: x86/mmu: Allocate struct kvm_mmu_pages for all pages in TDP MMU kvm: x86/mmu: Add TDP MMU PF handler kvm: x86/mmu: Remove disallowed_hugepage_adjust shadow_walk_iterator arg kvm: x86/mmu: Support zapping SPTEs in the TDP MMU KVM: Cache as_id in kvm_memory_slot kvm: x86/mmu: Add functions to handle changed TDP SPTEs kvm: x86/mmu: Allocate and free TDP MMU roots kvm: x86/mmu: Init / Uninit the TDP MMU kvm: x86/mmu: Introduce tdp_iter KVM: mmu: extract spte.h and spte.c KVM: mmu: Separate updating a PTE from kvm_set_pte_rmapp ...
113 lines
4.7 KiB
ReStructuredText
113 lines
4.7 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
==============
|
|
KVM CPUID bits
|
|
==============
|
|
|
|
:Author: Glauber Costa <glommer@gmail.com>
|
|
|
|
A guest running on a kvm host, can check some of its features using
|
|
cpuid. This is not always guaranteed to work, since userspace can
|
|
mask-out some, or even all KVM-related cpuid features before launching
|
|
a guest.
|
|
|
|
KVM cpuid functions are:
|
|
|
|
function: KVM_CPUID_SIGNATURE (0x40000000)
|
|
|
|
returns::
|
|
|
|
eax = 0x40000001
|
|
ebx = 0x4b4d564b
|
|
ecx = 0x564b4d56
|
|
edx = 0x4d
|
|
|
|
Note that this value in ebx, ecx and edx corresponds to the string "KVMKVMKVM".
|
|
The value in eax corresponds to the maximum cpuid function present in this leaf,
|
|
and will be updated if more functions are added in the future.
|
|
Note also that old hosts set eax value to 0x0. This should
|
|
be interpreted as if the value was 0x40000001.
|
|
This function queries the presence of KVM cpuid leafs.
|
|
|
|
function: define KVM_CPUID_FEATURES (0x40000001)
|
|
|
|
returns::
|
|
|
|
ebx, ecx
|
|
eax = an OR'ed group of (1 << flag)
|
|
|
|
where ``flag`` is defined as below:
|
|
|
|
================================== =========== ================================
|
|
flag value meaning
|
|
================================== =========== ================================
|
|
KVM_FEATURE_CLOCKSOURCE 0 kvmclock available at msrs
|
|
0x11 and 0x12
|
|
|
|
KVM_FEATURE_NOP_IO_DELAY 1 not necessary to perform delays
|
|
on PIO operations
|
|
|
|
KVM_FEATURE_MMU_OP 2 deprecated
|
|
|
|
KVM_FEATURE_CLOCKSOURCE2 3 kvmclock available at msrs
|
|
0x4b564d00 and 0x4b564d01
|
|
|
|
KVM_FEATURE_ASYNC_PF 4 async pf can be enabled by
|
|
writing to msr 0x4b564d02
|
|
|
|
KVM_FEATURE_STEAL_TIME 5 steal time can be enabled by
|
|
writing to msr 0x4b564d03
|
|
|
|
KVM_FEATURE_PV_EOI 6 paravirtualized end of interrupt
|
|
handler can be enabled by
|
|
writing to msr 0x4b564d04
|
|
|
|
KVM_FEATURE_PV_UNHALT 7 guest checks this feature bit
|
|
before enabling paravirtualized
|
|
spinlock support
|
|
|
|
KVM_FEATURE_PV_TLB_FLUSH 9 guest checks this feature bit
|
|
before enabling paravirtualized
|
|
tlb flush
|
|
|
|
KVM_FEATURE_ASYNC_PF_VMEXIT 10 paravirtualized async PF VM EXIT
|
|
can be enabled by setting bit 2
|
|
when writing to msr 0x4b564d02
|
|
|
|
KVM_FEATURE_PV_SEND_IPI 11 guest checks this feature bit
|
|
before enabling paravirtualized
|
|
send IPIs
|
|
|
|
KVM_FEATURE_POLL_CONTROL 12 host-side polling on HLT can
|
|
be disabled by writing
|
|
to msr 0x4b564d05.
|
|
|
|
KVM_FEATURE_PV_SCHED_YIELD 13 guest checks this feature bit
|
|
before using paravirtualized
|
|
sched yield.
|
|
|
|
KVM_FEATURE_ASYNC_PF_INT 14 guest checks this feature bit
|
|
before using the second async
|
|
pf control msr 0x4b564d06 and
|
|
async pf acknowledgment msr
|
|
0x4b564d07.
|
|
|
|
KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24 host will warn if no guest-side
|
|
per-cpu warps are expected in
|
|
kvmclock
|
|
================================== =========== ================================
|
|
|
|
::
|
|
|
|
edx = an OR'ed group of (1 << flag)
|
|
|
|
Where ``flag`` here is defined as below:
|
|
|
|
================== ============ =================================
|
|
flag value meaning
|
|
================== ============ =================================
|
|
KVM_HINTS_REALTIME 0 guest checks this feature bit to
|
|
determine that vCPUs are never
|
|
preempted for an unlimited time
|
|
allowing optimizations
|
|
================== ============ =================================
|