KVM: x86: document AVIC/APICv inhibit reasons
These days there are too many AVIC/APICv inhibit reasons, and it doesn't hurt to have some documentation for them. Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Message-Id: <20220606180829.102503-2-mlevitsk@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d2263de137
commit
a9603ae0e4
@ -1047,14 +1047,69 @@ struct kvm_x86_msr_filter {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum kvm_apicv_inhibit {
|
enum kvm_apicv_inhibit {
|
||||||
|
|
||||||
|
/********************************************************************/
|
||||||
|
/* INHIBITs that are relevant to both Intel's APICv and AMD's AVIC. */
|
||||||
|
/********************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* APIC acceleration is disabled by a module parameter
|
||||||
|
* and/or not supported in hardware.
|
||||||
|
*/
|
||||||
APICV_INHIBIT_REASON_DISABLE,
|
APICV_INHIBIT_REASON_DISABLE,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* APIC acceleration is inhibited because AutoEOI feature is
|
||||||
|
* being used by a HyperV guest.
|
||||||
|
*/
|
||||||
APICV_INHIBIT_REASON_HYPERV,
|
APICV_INHIBIT_REASON_HYPERV,
|
||||||
APICV_INHIBIT_REASON_NESTED,
|
|
||||||
APICV_INHIBIT_REASON_IRQWIN,
|
/*
|
||||||
APICV_INHIBIT_REASON_PIT_REINJ,
|
* APIC acceleration is inhibited because the userspace didn't yet
|
||||||
APICV_INHIBIT_REASON_X2APIC,
|
* enable the kernel/split irqchip.
|
||||||
APICV_INHIBIT_REASON_BLOCKIRQ,
|
*/
|
||||||
APICV_INHIBIT_REASON_ABSENT,
|
APICV_INHIBIT_REASON_ABSENT,
|
||||||
|
|
||||||
|
/* APIC acceleration is inhibited because KVM_GUESTDBG_BLOCKIRQ
|
||||||
|
* (out of band, debug measure of blocking all interrupts on this vCPU)
|
||||||
|
* was enabled, to avoid AVIC/APICv bypassing it.
|
||||||
|
*/
|
||||||
|
APICV_INHIBIT_REASON_BLOCKIRQ,
|
||||||
|
|
||||||
|
/******************************************************/
|
||||||
|
/* INHIBITs that are relevant only to the AMD's AVIC. */
|
||||||
|
/******************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AVIC is inhibited on a vCPU because it runs a nested guest.
|
||||||
|
*
|
||||||
|
* This is needed because unlike APICv, the peers of this vCPU
|
||||||
|
* cannot use the doorbell mechanism to signal interrupts via AVIC when
|
||||||
|
* a vCPU runs nested.
|
||||||
|
*/
|
||||||
|
APICV_INHIBIT_REASON_NESTED,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On SVM, the wait for the IRQ window is implemented with pending vIRQ,
|
||||||
|
* which cannot be injected when the AVIC is enabled, thus AVIC
|
||||||
|
* is inhibited while KVM waits for IRQ window.
|
||||||
|
*/
|
||||||
|
APICV_INHIBIT_REASON_IRQWIN,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PIT (i8254) 're-inject' mode, relies on EOI intercept,
|
||||||
|
* which AVIC doesn't support for edge triggered interrupts.
|
||||||
|
*/
|
||||||
|
APICV_INHIBIT_REASON_PIT_REINJ,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AVIC is inhibited because the guest has x2apic in its CPUID.
|
||||||
|
*/
|
||||||
|
APICV_INHIBIT_REASON_X2APIC,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AVIC is disabled because SEV doesn't support it.
|
||||||
|
*/
|
||||||
APICV_INHIBIT_REASON_SEV,
|
APICV_INHIBIT_REASON_SEV,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user