@@ -32,6 +32,7 @@
#define KVM_FEATURE_POLL_CONTROL 12
#define KVM_FEATURE_PV_SCHED_YIELD 13
#define KVM_FEATURE_ASYNC_PF_INT 14
+#define KVM_FEATURE_PCI_GO_MMCONFIG 15
#define KVM_HINTS_REALTIME 0
@@ -810,7 +810,7 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
"kvmclock", "kvm-nopiodelay", "kvm-mmu", "kvmclock",
"kvm-asyncpf", "kvm-steal-time", "kvm-pv-eoi", "kvm-pv-unhalt",
NULL, "kvm-pv-tlb-flush", NULL, "kvm-pv-ipi",
- "kvm-poll-control", "kvm-pv-sched-yield", NULL, NULL,
+ "kvm-poll-control", "kvm-pv-sched-yield", NULL, "kvm-pci-go-mmconfig",
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
"kvmclock-stable-bit", NULL, NULL, NULL,
@@ -4141,6 +4141,7 @@ static PropValue kvm_default_props[] = {
{ "acpi", "off" },
{ "monitor", "off" },
{ "svm", "off" },
+ { "kvm-pci-go-mmconfig", "on" },
{ NULL, NULL },
};
@@ -440,6 +440,7 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
if (!kvm_irqchip_in_kernel()) {
ret &= ~(1U << KVM_FEATURE_PV_UNHALT);
}
+ ret |= 1U << KVM_FEATURE_PCI_GO_MMCONFIG;
} else if (function == KVM_CPUID_FEATURES && reg == R_EDX) {
ret |= 1U << KVM_HINTS_REALTIME;
found = 1;
This feature allows MMCONFIG to be used even to access the base PCI config space [1]. This means increased performance: one access to MMCONFIG instead of two conventional accesses to I/O ports. Q35 makes no distinction in base or extended PCI config access to MMCONFIG, MMCONFIG is always on, and in case it is is not initialized, probing of PCI devices will fall back to normal process and use type1 access. Enable the feature unconditionally. [1]: https://lore.kernel.org/kvm/20200730193510.578309-1-jusual@redhat.com/ Signed-off-by: Julia Suvorova <jusual@redhat.com> --- The feature is in the review phase. include/standard-headers/asm-x86/kvm_para.h | 1 + target/i386/cpu.c | 3 ++- target/i386/kvm.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-)