From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, ehabkost@redhat.com, marcel@redhat.com,
eblake@redhat.com, armbru@redhat.com, drjones@redhat.com
Subject: [Qemu-devel] [RFC 00/42] ACPI CPU hotplug refactoring to support more than 255 CPUs and PXM/OST methods
Date: Mon, 2 May 2016 14:33:09 +0200 [thread overview]
Message-ID: <1462192431-146342-1-git-send-email-imammedo@redhat.com> (raw)
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 would with x2APIC
support in KVM.
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 thant 255 CPUs with any 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-14 patches: cleanup, consolidate legacy ACPI CPU hotplug,
use it only on 2.6 and older machine types +
adding related ACPI tables test case
15-41 patches:
* extending AcpiDeviceIfClass to make ACPI event
notification more target agnostic,
* adding explicit machine.cpu-hotplug property
so that feature would be enabled only when users
ask for it, saving some IO ports/memory/CPU cycles
when it's not needed
(applies only to 2.7 and newer machine types,
legacy hotplug is always enabled on 2.6 and older
machine types so it won't break migration).
* 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:
git@github.com:imammedo/qemu.git modern_cpu_hotplug_RFC
viewing:
https://github.com/imammedo/qemu/commits/modern_cpu_hotplug_RFC
Igor Mammedov (42):
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: piix4/ich9: add 'cpu-hotplug-legacy' property
pc: add 2.7 machine
pc: initialize legacy hotplug only for 2.6 and older machine types
tests: bios-tables-test: update tables with CPHP turned off by default
tests: acpi: check legacy CPU hotplug AML is present for 2.6 machine
type
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
machine: add cpu-hotplug machine option
pc: q35: initialize new CPU hotplug hw
pc: piix4: initialize new CPU hotplug hw
tests: pc-cpu-test: turn on cpu-hotplug explicily
pc: acpi: cpuhp-legacy: switch ProcessorID to possible_cpus idx
tests: acpi: update cphp_legacy case with new ProcessorID values
pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook
acpi: add CPU devices AML to DSDT
acpi: add CPU hotplug methods to DSDT
tests: acpi: update expected files with new CPU AML description
qdev: hotplug: Introduce HotplugHandler.pre_plug() callback
pc: numa: replace node_cpu indexing by apic_id with possible_cpus
index
pc: set X86CPU.node property if QEMU starts with numa enabled
target-i386: add X86CPU.node property
acpi: cpuhp: add command and data registers
acpi: cpuhp: provide cpu._PXM method if running in numa mode
acpi: cpuhp: add cpu._OST handling
tests: acpi: report names of expected files in verbose mode
tests: acpi: add CPU hotplug testcase
tests: acpi: add expected tables for CPU hotplug case
tests: acpi: extend CPU hotplug test with NUMA support
tests: acpi: cpuhp: add expected SRAT tables and update DSDT with _PXM
support
DO NOT APPLY: simulate CPU unplug when executin cpu-add on a present
CPU
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 | 610 +++++++++++++++++++++++++++++++
hw/acpi/cpu_hotplug.c | 246 ++++++++++++-
hw/acpi/cpu_hotplug_acpi_table.c | 136 -------
hw/acpi/ich9.c | 113 +++++-
hw/acpi/memory_hotplug.c | 12 +-
hw/acpi/pcihp.c | 10 +-
hw/acpi/piix4.c | 76 +++-
hw/core/hotplug.c | 11 +
hw/core/machine.c | 20 +
hw/core/qdev.c | 9 +-
hw/i386/acpi-build.c | 191 ++--------
hw/i386/pc.c | 126 +++++--
hw/i386/pc_piix.c | 18 +-
hw/i386/pc_q35.c | 20 +-
hw/isa/lpc_ich9.c | 39 +-
hw/mips/mips_malta.c | 2 +-
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 | 63 ++++
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/boards.h | 1 +
include/hw/compat.h | 12 +
include/hw/hotplug.h | 14 +-
include/hw/i386/pc.h | 12 +-
include/qom/cpu.h | 2 +-
qapi-schema.json | 2 +-
qom/cpu.c | 6 +-
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 -> 5147 bytes
tests/acpi-test-data/pc/DSDT.bridge | Bin 7446 -> 7006 bytes
tests/acpi-test-data/pc/DSDT.cphp | Bin 0 -> 6614 bytes
tests/acpi-test-data/pc/DSDT.cphp_legacy | Bin 0 -> 5503 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 -> 7909 bytes
tests/acpi-test-data/q35/DSDT.bridge | Bin 8374 -> 7926 bytes
tests/acpi-test-data/q35/DSDT.cphp | Bin 0 -> 9376 bytes
tests/acpi-test-data/q35/SRAT.cphp | Bin 0 -> 304 bytes
tests/bios-tables-test.c | 67 +++-
tests/pc-cpu-test.c | 2 +-
trace-events | 13 +
53 files changed, 1622 insertions(+), 453 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/DSDT.cphp_legacy
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
next reply other threads:[~2016-05-02 12:34 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-02 12:33 Igor Mammedov [this message]
2016-05-02 12:33 ` [Qemu-devel] [RFC 01/42] acpi: add aml_debug() Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 02/42] acpi: add aml_refof() Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 03/42] pc: acpi: remove AML for empty/not used GPE handlers Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 04/42] pc: acpi: consolidate CPU hotplug AML Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 05/42] pc: acpi: consolidate \GPE._E02 with the rest of " Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 06/42] pc: acpi: cpu-hotplug: make AML CPU_foo defines local to cpu_hotplug_acpi_table.c Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 07/42] pc: acpi: mark current CPU hotplug functions as legacy Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 08/42] pc: acpi: consolidate legacy CPU hotplug in one file Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 09/42] pc: acpi: simplify build_legacy_cpu_hotplug_aml() signature Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 10/42] pc: piix4/ich9: add 'cpu-hotplug-legacy' property Igor Mammedov
2016-05-10 20:19 ` Eduardo Habkost
2016-05-11 13:33 ` Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 11/42] pc: add 2.7 machine Igor Mammedov
2016-05-10 20:20 ` Eduardo Habkost
2016-05-02 12:33 ` [Qemu-devel] [RFC 12/42] pc: initialize legacy hotplug only for 2.6 and older machine types Igor Mammedov
2016-05-10 20:24 ` Eduardo Habkost
2016-05-11 13:50 ` Igor Mammedov
2016-05-11 21:51 ` Michael S. Tsirkin
2016-05-11 23:28 ` Eduardo Habkost
2016-05-12 7:07 ` Michael S. Tsirkin
2016-05-12 10:29 ` Igor Mammedov
2016-05-12 10:52 ` Eduardo Habkost
2016-05-12 11:04 ` [Qemu-devel] [libvirt] " Peter Krempa
2016-05-12 13:20 ` Igor Mammedov
2016-05-12 13:27 ` Peter Krempa
2016-05-12 14:30 ` Igor Mammedov
2016-05-11 23:36 ` [Qemu-devel] " Eduardo Habkost
2016-05-12 7:05 ` Michael S. Tsirkin
2016-05-12 10:39 ` Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 13/42] tests: bios-tables-test: update tables with CPHP turned off by default Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 14/42] tests: acpi: check legacy CPU hotplug AML is present for 2.6 machine type Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 15/42] acpi: extend ACPI interface to provide send_event hook Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 16/42] pc: use AcpiDeviceIfClass.send_event to issue GPE events Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 17/42] docs: update ACPI CPU hotplug spec with new protocol Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 18/42] acpi: hardware side of CPU hotplug Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 19/42] pc: add generic CPU unplug callbacks Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 20/42] machine: add cpu-hotplug machine option Igor Mammedov
2016-05-10 20:27 ` Eduardo Habkost
2016-05-11 14:00 ` Igor Mammedov
2016-05-11 15:00 ` Eduardo Habkost
2016-05-02 12:33 ` [Qemu-devel] [RFC 21/42] pc: q35: initialize new CPU hotplug hw Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 22/42] pc: piix4: " Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 23/42] tests: pc-cpu-test: turn on cpu-hotplug explicily Igor Mammedov
2016-05-10 20:28 ` Eduardo Habkost
2016-05-02 12:33 ` [Qemu-devel] [RFC 24/42] pc: acpi: cpuhp-legacy: switch ProcessorID to possible_cpus idx Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 25/42] tests: acpi: update cphp_legacy case with new ProcessorID values Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 26/42] pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 27/42] acpi: add CPU devices AML to DSDT Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 28/42] acpi: add CPU hotplug methods " Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 29/42] tests: acpi: update expected files with new CPU AML description Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 30/42] qdev: hotplug: Introduce HotplugHandler.pre_plug() callback Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 31/42] pc: numa: replace node_cpu indexing by apic_id with possible_cpus index Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 32/42] pc: set X86CPU.node property if QEMU starts with numa enabled Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 33/42] target-i386: add X86CPU.node property Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 34/42] acpi: cpuhp: add command and data registers Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 35/42] acpi: cpuhp: provide cpu._PXM method if running in numa mode Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 36/42] acpi: cpuhp: add cpu._OST handling Igor Mammedov
2016-05-10 21:07 ` Eric Blake
2016-05-11 14:02 ` Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 37/42] tests: acpi: report names of expected files in verbose mode Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 38/42] tests: acpi: add CPU hotplug testcase Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 39/42] tests: acpi: add expected tables for CPU hotplug case Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 40/42] tests: acpi: extend CPU hotplug test with NUMA support Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 41/42] tests: acpi: cpuhp: add expected SRAT tables and update DSDT with _PXM support Igor Mammedov
2016-05-02 12:33 ` [Qemu-devel] [RFC 42/42] DO NOT APPLY: simulate CPU unplug when executin cpu-add on a present CPU Igor Mammedov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1462192431-146342-1-git-send-email-imammedo@redhat.com \
--to=imammedo@redhat.com \
--cc=armbru@redhat.com \
--cc=drjones@redhat.com \
--cc=eblake@redhat.com \
--cc=ehabkost@redhat.com \
--cc=marcel@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).