i386: Hyper-V Support extended GVA ranges for TLB flush hypercalls
KVM kind of supported "extended GVA ranges" (up to 4095 additional GFNs per hypercall) since the implementation of Hyper-V PV TLB flush feature (Linux-4.18) as regardless of the request, full TLB flush was always performed. "Extended GVA ranges for TLB flush hypercalls" feature bit wasn't exposed then. Now, as KVM gains support for fine-grained TLB flush handling, exposing this feature starts making sense. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Message-Id: <20220525115949.1294004-5-vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
9411e8b6fa
commit
aa6bb5fad5
@ -255,6 +255,13 @@ Hyper-V specification allows to pass parameters for certain hypercalls using XMM
|
||||
registers ("XMM Fast Hypercall Input"). When the feature is in use, it allows
|
||||
for faster hypercalls processing as KVM can avoid reading guest's memory.
|
||||
|
||||
3.24. hv-tlbflush-ext
|
||||
=====================
|
||||
Allow for extended GVA ranges to be passed to Hyper-V TLB flush hypercalls
|
||||
(HvFlushVirtualAddressList/HvFlushVirtualAddressListEx).
|
||||
|
||||
Requires: hv-tlbflush
|
||||
|
||||
4. Supplementary features
|
||||
=========================
|
||||
|
||||
|
@ -6972,6 +6972,8 @@ static Property x86_cpu_properties[] = {
|
||||
HYPERV_FEAT_MSR_BITMAP, 0),
|
||||
DEFINE_PROP_BIT64("hv-xmm-input", X86CPU, hyperv_features,
|
||||
HYPERV_FEAT_XMM_INPUT, 0),
|
||||
DEFINE_PROP_BIT64("hv-tlbflush-ext", X86CPU, hyperv_features,
|
||||
HYPERV_FEAT_TLBFLUSH_EXT, 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,
|
||||
|
@ -1108,6 +1108,7 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||||
#define HYPERV_FEAT_SYNDBG 16
|
||||
#define HYPERV_FEAT_MSR_BITMAP 17
|
||||
#define HYPERV_FEAT_XMM_INPUT 18
|
||||
#define HYPERV_FEAT_TLBFLUSH_EXT 19
|
||||
|
||||
#ifndef HYPERV_SPINLOCK_NEVER_NOTIFY
|
||||
#define HYPERV_SPINLOCK_NEVER_NOTIFY 0xFFFFFFFF
|
||||
|
@ -59,6 +59,7 @@
|
||||
#define HV_FREQUENCY_MSRS_AVAILABLE (1u << 8)
|
||||
#define HV_GUEST_CRASH_MSR_AVAILABLE (1u << 10)
|
||||
#define HV_FEATURE_DEBUG_MSRS_AVAILABLE (1u << 11)
|
||||
#define HV_EXT_GVA_RANGES_FLUSH_AVAILABLE (1u << 14)
|
||||
#define HV_STIMER_DIRECT_MODE_AVAILABLE (1u << 19)
|
||||
|
||||
/*
|
||||
|
@ -987,6 +987,14 @@ static struct {
|
||||
.bits = HV_HYPERCALL_XMM_INPUT_AVAILABLE}
|
||||
}
|
||||
},
|
||||
[HYPERV_FEAT_TLBFLUSH_EXT] = {
|
||||
.desc = "Extended gva ranges for TLB flush hypercalls (hv-tlbflush-ext)",
|
||||
.flags = {
|
||||
{.func = HV_CPUID_FEATURES, .reg = R_EDX,
|
||||
.bits = HV_EXT_GVA_RANGES_FLUSH_AVAILABLE}
|
||||
},
|
||||
.dependencies = BIT(HYPERV_FEAT_TLBFLUSH)
|
||||
},
|
||||
};
|
||||
|
||||
static struct kvm_cpuid2 *try_get_hv_cpuid(CPUState *cs, int max,
|
||||
|
Loading…
Reference in New Issue
Block a user