[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 00/33] ACPI CPU hotplug refactoring to support more
From: |
Igor Mammedov |
Subject: |
[Qemu-devel] [PATCH 00/33] ACPI CPU hotplug refactoring to support more than 255 CPUs and PXM/OST methods |
Date: |
Tue, 17 May 2016 16:42:52 +0200 |
Changelog:
RFC->v1:
- drop machine.cpu-hotplug property and leave CPU hotplug
always enabled as it used to be.
(it also simplifies, series a bit)
- reshuffle/squash some patches to make series bisectable
wrt 'make check' failures
- add doc comment in qapi schema
- fix 'make check' error for mips target, disableCPU hotplug
code path in piix4_pm for mips
- drop some intermediate expected ACPI tables updates
- replace _MAT method with named buffer object
Current ACPI interface for CPU hotplug supports hotadding
only upto 255 CPUs and lacks means to convey additional
information needed for _PXM and _OST methods support.
Also being bitmap based with bit position specifying APIC ID
it doesn't scale up for 32-bit APIC IDs that will come with
x2APIC support.
So factor out current CPU hotplug into legacy module, that is
used by 2.6 and older machine types as we can't break ABI and
build another QEMU-guest interface using as model memory-hotplug.
New interface will be used since 2.7 machine types and will
support:
- more than 255 CPUs with 32-bit APIC ID value
- a registers set to communicate PXM/OST information
(extendable without breaking IO layout)
- possible to reuse for ARM's 'virt' machine type
with minimal tweaks (add init for MMIO, add
ACPI hooks on CPU hotplug path)
Series consists of 2 parts:
1-10 patches: cleanup, consolidate legacy ACPI CPU hotplug
11-33 patches:
* extending AcpiDeviceIfClass to make ACPI event
notification more target agnostic,
* adding new ACPI HW and AML parts of CPU hotplug
that support more than 255 CPUs. Plus some cleanups
that partially remove apic_id_limit limitation.
The rest of apic_id_limit cleanups will go later
on top of this series as part of x2APIC series.
* implementing unplug side of ACPI HW/AML and basic
unplug hooking in hot-unplug callback.
TODO:For mgmt to use unplug it needs device_add/del
support which is work in progress and will go on top
of this series.
* adding extra _PXM/_OST method handling so that
guest would actually know to which node CPU
is hotplugged and report hotplug status progress
to mgmt.
Tested with following guests: RHEL7, WS2003EEx64, WS2012R2x64
* unplug is tested only with RHEL7 as Windows doesn't support it.
* untested migration.
git tree for testing:
address@hidden:imammedo/qemu.git modern_cpu_hotplug_v1
viewing:
https://github.com/imammedo/qemu/commits/modern_cpu_hotplug_v1
Igor Mammedov (33):
tests: acpi: report names of expected files in verbose mode
acpi: add aml_debug()
acpi: add aml_refof()
pc: acpi: remove AML for empty/not used GPE handlers
pc: acpi: consolidate CPU hotplug AML
pc: acpi: consolidate \GPE._E02 with the rest of CPU hotplug AML
pc: acpi: cpu-hotplug: make AML CPU_foo defines local to
cpu_hotplug_acpi_table.c
pc: acpi: mark current CPU hotplug functions as legacy
pc: acpi: consolidate legacy CPU hotplug in one file
pc: acpi: simplify build_legacy_cpu_hotplug_aml() signature
pc: acpi: cpuhp-legacy: switch ProcessorID to possible_cpus idx
tests: acpi: update tables with consolidated legacy cpu-hotplug AML
acpi: extend ACPI interface to provide send_event hook
pc: use AcpiDeviceIfClass.send_event to issue GPE events
docs: update ACPI CPU hotplug spec with new protocol
acpi: hardware side of CPU hotplug
pc: add generic CPU unplug callbacks
pc: add 2.7 machine
pc: piix4/ich9: add 'cpu-hotplug-legacy' property
pc: q35: initialize new CPU hotplug hw
pc: piix4: initialize new CPU hotplug hw
pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook
acpi: add CPU devices AML to DSDT
acpi: add CPU hotplug methods to DSDT
qdev: hotplug: Introduce HotplugHandler.pre_plug() callback
target-i386: add X86CPU.node property
pc: numa: replace node_cpu indexing by apic_id with possible_cpus
index
pc: set X86CPU.node property if QEMU starts with numa enabled
acpi: cpuhp: provide cpu._PXM method if running in numa mode
acpi: cpuhp: add cpu._OST handling
tests: acpi: update expected tables with new cpu-hotplug methods
enabled by default
tests: acpi: add CPU hotplug testcase
tests: acpi: add DSDT/MADT expected tables for cpu-hotplug case
docs/specs/acpi_cpu_hotplug.txt | 88 +++++-
hw/acpi/Makefile.objs | 3 +-
hw/acpi/aml-build.c | 17 +
hw/acpi/core.c | 2 +-
hw/acpi/cpu.c | 583 +++++++++++++++++++++++++++++++++++
hw/acpi/cpu_hotplug.c | 246 ++++++++++++++-
hw/acpi/cpu_hotplug_acpi_table.c | 136 --------
hw/acpi/ich9.c | 94 +++++-
hw/acpi/memory_hotplug.c | 12 +-
hw/acpi/pcihp.c | 10 +-
hw/acpi/piix4.c | 78 ++++-
hw/core/hotplug.c | 11 +
hw/core/qdev.c | 9 +-
hw/i386/acpi-build.c | 191 +++---------
hw/i386/pc.c | 118 +++++--
hw/i386/pc_piix.c | 16 +-
hw/i386/pc_q35.c | 13 +-
hw/isa/lpc_ich9.c | 39 +--
include/hw/acpi/acpi.h | 10 +-
include/hw/acpi/acpi_dev_interface.h | 25 ++
include/hw/acpi/aml-build.h | 2 +
include/hw/acpi/cpu.h | 62 ++++
include/hw/acpi/cpu_hotplug.h | 19 +-
include/hw/acpi/ich9.h | 16 +-
include/hw/acpi/memory_hotplug.h | 4 +-
include/hw/acpi/pcihp.h | 5 +-
include/hw/compat.h | 12 +
include/hw/hotplug.h | 14 +-
include/hw/i386/pc.h | 9 +
qapi-schema.json | 3 +-
stubs/Makefile.objs | 1 +
stubs/pc_madt_cpu_entry.c | 7 +
target-i386/cpu-qom.h | 1 +
target-i386/cpu.c | 42 +++
tests/acpi-test-data/pc/APIC.cphp | Bin 0 -> 160 bytes
tests/acpi-test-data/pc/DSDT | Bin 5587 -> 5951 bytes
tests/acpi-test-data/pc/DSDT.bridge | Bin 7446 -> 7810 bytes
tests/acpi-test-data/pc/DSDT.cphp | Bin 0 -> 6578 bytes
tests/acpi-test-data/pc/SRAT.cphp | Bin 0 -> 304 bytes
tests/acpi-test-data/q35/APIC.cphp | Bin 0 -> 160 bytes
tests/acpi-test-data/q35/DSDT | Bin 8357 -> 8713 bytes
tests/acpi-test-data/q35/DSDT.bridge | Bin 8374 -> 8730 bytes
tests/acpi-test-data/q35/DSDT.cphp | Bin 0 -> 9340 bytes
tests/acpi-test-data/q35/SRAT.cphp | Bin 0 -> 304 bytes
tests/bios-tables-test.c | 54 +++-
trace-events | 13 +
46 files changed, 1524 insertions(+), 441 deletions(-)
create mode 100644 hw/acpi/cpu.c
delete mode 100644 hw/acpi/cpu_hotplug_acpi_table.c
create mode 100644 include/hw/acpi/cpu.h
create mode 100644 stubs/pc_madt_cpu_entry.c
create mode 100644 tests/acpi-test-data/pc/APIC.cphp
create mode 100644 tests/acpi-test-data/pc/DSDT.cphp
create mode 100644 tests/acpi-test-data/pc/SRAT.cphp
create mode 100644 tests/acpi-test-data/q35/APIC.cphp
create mode 100644 tests/acpi-test-data/q35/DSDT.cphp
create mode 100644 tests/acpi-test-data/q35/SRAT.cphp
--
1.8.3.1