This series adds support for VMX feature flags so that the user can enable and disable at will the flags. A separate series will also add VMX features to named CPU models, which will complete VMX live migration support. That's orthogonal and somewhat tedious.
There are a few complications, which are tackled across the series: - KVM ioctls fail for some invalid MSR settings, namely when some controls are reported as available but the corresponding CPUID bits have been disabled. For backwards compatibility with e.g. "-cpu host,-rdrand", these VMX features are silently dropped (patch 2) - some VMX MSRs have features in the high 32 bits (patch 3) - some VMX MSRs have values in the high 32 bits, but only actually have 32 features; this is handled in patch 6 by mangling the result of KVM_GET_MSRS - KVM has a couple bugs that can be worked around relatively easily (patch 6 and 7) Paolo v1->v2: do not consult check_cpuid/enforce_cpuid in mark_unavailable_features introduce struct FeatureMask Paolo Bonzini (7): target/i386: handle filtered_features in a new function mark_unavailable_features target/i386: introduce generic feature dependency mechanism target/i386: expand feature words to 64 bits target/i386: add VMX definitions vmxcap: correct the name of the variables target/i386: add VMX features target/i386: work around KVM_GET_MSRS bug for secondary execution controls include/sysemu/kvm.h | 2 +- scripts/kvm/vmxcap | 14 +- target/i386/cpu.c | 443 ++++++++++++++++++++++++++++++++++++++++----------- target/i386/cpu.h | 136 +++++++++++++++- target/i386/kvm.c | 173 +++++++++++++++++++- 5 files changed, 665 insertions(+), 103 deletions(-) -- 1.8.3.1