Currently, libvirt uses the "filtered-features" QOM property at runtime to ensure no feature was accidentally disabled on VCPUs because it's not available on the host.
However, the code for "feature-words" assumes that all missing features have a corresponding CPUID bit, which is not true for MSR-based features like the ones at FEAT_ARCH_CAPABILITIES. We could extend X86CPUFeatureWordInfo to include information about MSR features, but it's impossible to do that while keeping compatibility with clients that (reasonably) expect all elements of "filtered-features" to have the cpuid-* fields. We have a field in "query-cpu-definitions" that already describes all features that are missing on a CPU, including MSR features: CpuDefinitionInfo.unavailable-features. The existing code for building the unavailable-features array even uses X86CPU::filtered_features to build the feature list. This series adds a "unavailable-features" QOM property to X86CPU objects that have the same semantics of "unavailable-features" on query-cpu-definitions. The new property has the same goal of "filtered-features", but is generic enough to let any kind of CPU feature to be listed there without relying on low level details like CPUID leaves or MSR numbers. Eduardo Habkost (2): i386: x86_cpu_list_feature_names() function i386: "unavailable-features" QOM property target/i386/cpu.c | 55 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 13 deletions(-) -- 2.18.0.rc1.1.g3f1ff2140