]> git.proxmox.com Git - mirror_qemu.git/commit - hw/i386/pc.c
target/i386: Support up to 32768 CPUs without IRQ remapping
authorDavid Woodhouse <dwmw2@infradead.org>
Mon, 5 Oct 2020 14:18:19 +0000 (15:18 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 10 Dec 2020 17:15:00 +0000 (12:15 -0500)
commitc1bb5418e32ec70c72af332354b5963eab7a5579
tree5450a1ff1d4fcf48602f1c21e49852c4f9bb7e73
parent75b208c28316095c4685e8596ceb9e3f656592e2
target/i386: Support up to 32768 CPUs without IRQ remapping

The IOAPIC has an 'Extended Destination ID' field in its RTE, which maps
to bits 11-4 of the MSI address. Since those address bits fall within a
given 4KiB page they were historically non-trivial to use on real hardware.

The Intel IOMMU uses the lowest bit to indicate a remappable format MSI,
and then the remaining 7 bits are part of the index.

Where the remappable format bit isn't set, we can actually use the other
seven to allow external (IOAPIC and MSI) interrupts to reach up to 32768
CPUs instead of just the 255 permitted on bare metal.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Message-Id: <78097f9218300e63e751e077a0a5ca029b56ba46.camel@infradead.org>
[Fix UBSAN warning. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
hw/i386/kvm/apic.c
hw/i386/pc.c
include/standard-headers/asm-x86/kvm_para.h
target/i386/cpu.c
target/i386/kvm.c
target/i386/kvm_i386.h