mirror of
https://github.com/qemu/qemu.git
synced 2024-12-04 09:13:39 +08:00
i386: Hyper-V Enlightened MSR bitmap feature
The newly introduced enlightenment allow L0 (KVM) and L1 (Hyper-V) hypervisors to collaborate to avoid unnecessary updates to L2 MSR-Bitmap upon vmexits. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Message-Id: <20220525115949.1294004-3-vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
7110fe56c1
commit
869840d26c
@ -239,6 +239,15 @@ This enlightenment requires a VMBus device (-device vmbus-bridge,irq=15)
|
||||
and the follow enlightenments to work:
|
||||
hv-relaxed,hv_time,hv-vapic,hv-vpindex,hv-synic,hv-runtime,hv-stimer
|
||||
|
||||
3.22. hv-emsr-bitmap
|
||||
=====================
|
||||
The enlightenment is nested specific, it targets Hyper-V on KVM guests. When
|
||||
enabled, it allows L0 (KVM) and L1 (Hyper-V) hypervisors to collaborate to
|
||||
avoid unnecessary updates to L2 MSR-Bitmap upon vmexits. While the protocol is
|
||||
supported for both VMX (Intel) and SVM (AMD), the VMX implementation requires
|
||||
Enlightened VMCS ('hv-evmcs') feature to also be enabled.
|
||||
|
||||
Recommended: hv-evmcs (Intel)
|
||||
|
||||
4. Supplementary features
|
||||
=========================
|
||||
|
@ -6968,6 +6968,8 @@ static Property x86_cpu_properties[] = {
|
||||
HYPERV_FEAT_STIMER_DIRECT, 0),
|
||||
DEFINE_PROP_BIT64("hv-avic", X86CPU, hyperv_features,
|
||||
HYPERV_FEAT_AVIC, 0),
|
||||
DEFINE_PROP_BIT64("hv-emsr-bitmap", X86CPU, hyperv_features,
|
||||
HYPERV_FEAT_MSR_BITMAP, 0),
|
||||
DEFINE_PROP_ON_OFF_AUTO("hv-no-nonarch-coresharing", X86CPU,
|
||||
hyperv_no_nonarch_cs, ON_OFF_AUTO_OFF),
|
||||
DEFINE_PROP_BIT64("hv-syndbg", X86CPU, hyperv_features,
|
||||
|
@ -1106,6 +1106,7 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||||
#define HYPERV_FEAT_STIMER_DIRECT 14
|
||||
#define HYPERV_FEAT_AVIC 15
|
||||
#define HYPERV_FEAT_SYNDBG 16
|
||||
#define HYPERV_FEAT_MSR_BITMAP 17
|
||||
|
||||
#ifndef HYPERV_SPINLOCK_NEVER_NOTIFY
|
||||
#define HYPERV_SPINLOCK_NEVER_NOTIFY 0xFFFFFFFF
|
||||
|
@ -86,6 +86,11 @@
|
||||
*/
|
||||
#define HV_SYNDBG_CAP_ALLOW_KERNEL_DEBUGGING (1u << 1)
|
||||
|
||||
/*
|
||||
* HV_CPUID_NESTED_FEATURES.EAX bits
|
||||
*/
|
||||
#define HV_NESTED_MSR_BITMAP (1u << 19)
|
||||
|
||||
/*
|
||||
* Basic virtualized MSRs
|
||||
*/
|
||||
|
@ -973,6 +973,13 @@ static struct {
|
||||
.dependencies = BIT(HYPERV_FEAT_SYNIC) | BIT(HYPERV_FEAT_RELAXED)
|
||||
},
|
||||
#endif
|
||||
[HYPERV_FEAT_MSR_BITMAP] = {
|
||||
.desc = "enlightened MSR-Bitmap (hv-emsr-bitmap)",
|
||||
.flags = {
|
||||
{.func = HV_CPUID_NESTED_FEATURES, .reg = R_EAX,
|
||||
.bits = HV_NESTED_MSR_BITMAP}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
static struct kvm_cpuid2 *try_get_hv_cpuid(CPUState *cs, int max,
|
||||
|
Loading…
Reference in New Issue
Block a user