Series is based on top cpu hotplug refactoring(*1), and extends current CPU/kvm_apic/generic pc machine code to support x2APIC and upto 288 VCPUs when QEMU is used with KVM's lapic.
Due to FW_CFG_MAX_CPUS (which is actually apic_id_limit) being limited to uint16_t, the max possible APIC ID is limitted to 2^16 with this series but that should be sufficient for bumping VCPUs number for quite a while. git gree for testing: https://github.com/imammedo/qemu.git x2apic_rfc To play with the feature, one would also need seabios counterpart: https://github.com/imammedo/seabios.git x2apic_rfc Radim's [RFC 0/9] KVM: x86: break the xAPIC barrier http://www.spinics.net/lists/kvm/msg132036.html and Peter's IRQ remapping series. *1) [Qemu-devel] [RFC 00/42] ACPI CPU hotplug refactoring to support more than 255 CPUs and PXM/OST methods https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg00033.html Igor Mammedov (14): pc: acpi: x2APIC support for MADT table pc: acpi: x2APIC support for SRAT table acpi: cphp: add support for x2APIC in _MAT method pc: leave max apic_id_limit only in legacy cpu hotplug code pc: apic: move MAX_APICS check to 'apic' class pc: apic_common: extend APIC ID property to 32bit pc: apic_common: restore APIC ID to initial ID on reset pc: apic_common: reset APIC ID to initial ID when switching into x2APIC mode pc: kvm_apic: pass APIC ID depending on xAPIC/x2APIC mode pc: clarify FW_CFG_MAX_CPUS usage comment increase MAX_CPUMASK_BITS from 255 to 288 pc: add 'etc/boot-cpus' fw_cfg file for machine with more than 255 CPUs pc: q35: bump max_cpus to 288 DO NOT APPLY: hack to make 2nd CPU APIC ID to be x2APIC one hw/acpi/cpu.c | 5 ++ hw/acpi/cpu_hotplug.c | 7 ++- hw/arm/virt.c | 2 +- hw/i386/acpi-build.c | 114 +++++++++++++++++++++++++++------------- hw/i386/kvm/apic.c | 12 ++++- hw/i386/pc.c | 34 ++++++------ hw/i386/pc_piix.c | 1 + hw/i386/pc_q35.c | 1 + hw/intc/apic.c | 10 ++++ hw/intc/apic_common.c | 54 +++++++++++++++---- hw/ppc/spapr.c | 2 +- include/hw/acpi/acpi-defs.h | 32 +++++++++++ include/hw/i386/apic_internal.h | 7 ++- include/sysemu/sysemu.h | 2 +- target-i386/cpu.c | 2 +- target-i386/cpu.h | 1 + 16 files changed, 212 insertions(+), 74 deletions(-) -- 1.8.3.1