]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/kvm: Add KVM_FEATURE_MSI_EXT_DEST_ID
authorDavid Woodhouse <dwmw@amazon.co.uk>
Mon, 5 Oct 2020 10:53:54 +0000 (11:53 +0100)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Wed, 7 Oct 2020 10:17:46 +0000 (11:17 +0100)
This allows the host to indicate that IOAPIC and MSI emulation supports
15-bit destination IDs, allowing up to 32768 CPUs without interrupt
remapping.

cf. https://patchwork.kernel.org/patch/11816693/ for qemu

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Documentation/virt/kvm/cpuid.rst
arch/x86/include/uapi/asm/kvm_para.h
arch/x86/kernel/kvm.c

index a7dff9186bed61d2990f383bff4491206177bac9..1726b5925d2b3856e3712928d7e6fde36b33251a 100644 (file)
@@ -92,6 +92,10 @@ KVM_FEATURE_ASYNC_PF_INT          14          guest checks this feature bit
                                               async pf acknowledgment msr
                                               0x4b564d07.
 
+KVM_FEATURE_MSI_EXT_DEST_ID       15          guest checks this feature bit
+                                              before using extended destination
+                                              ID bits in MSI address bits 11-5.
+
 KVM_FEATURE_CLOCSOURCE_STABLE_BIT 24          host will warn if no guest-side
                                               per-cpu warps are expeced in
                                               kvmclock
index 812e9b4c111412db345b82854799351571a72a0a..950afebfba888573a6bf50226a0b70a589f05947 100644 (file)
@@ -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_MSI_EXT_DEST_ID    15
 
 #define KVM_HINTS_REALTIME      0
 
index 1b51b727b140572dbe517631725be45c47a1490a..4986b4399aefb63b2b4eec0f4ac1e633febd8af3 100644 (file)
@@ -743,12 +743,18 @@ static void __init kvm_init_platform(void)
        x86_platform.apic_post_init = kvm_apic_init;
 }
 
+static bool __init kvm_msi_ext_dest_id(void)
+{
+       return kvm_para_has_feature(KVM_FEATURE_MSI_EXT_DEST_ID);
+}
+
 const __initconst struct hypervisor_x86 x86_hyper_kvm = {
        .name                   = "KVM",
        .detect                 = kvm_detect,
        .type                   = X86_HYPER_KVM,
        .init.guest_late_init   = kvm_guest_init,
        .init.x2apic_available  = kvm_para_available,
+       .init.msi_ext_dest_id   = kvm_msi_ext_dest_id,
        .init.init_platform     = kvm_init_platform,
 };