qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, rkrcmar@redhat.com, ehabkost@redhat.com,
	drjones@redhat.com, armbru@redhat.com, marcel@redhat.com
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	[thread overview]
Message-ID: <1463496205-251412-1-git-send-email-imammedo@redhat.com> (raw)

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:
    git@github.com: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

             reply	other threads:[~2016-05-17 14:43 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-17 14:42 Igor Mammedov [this message]
2016-05-17 14:42 ` [Qemu-devel] [PATCH 01/33] tests: acpi: report names of expected files in verbose mode Igor Mammedov
2016-05-24 16:58   ` Marcel Apfelbaum
2016-05-26  9:46     ` [Qemu-devel] [PATCH v2 1/33] " Igor Mammedov
2016-05-30 18:14       ` Marcel Apfelbaum
2016-06-02 11:02       ` Marcel Apfelbaum
2016-05-17 14:42 ` [Qemu-devel] [PATCH 02/33] acpi: add aml_debug() Igor Mammedov
2016-05-24 16:59   ` Marcel Apfelbaum
2016-05-17 14:42 ` [Qemu-devel] [PATCH 03/33] acpi: add aml_refof() Igor Mammedov
2016-05-24 17:00   ` Marcel Apfelbaum
2016-05-17 14:42 ` [Qemu-devel] [PATCH 04/33] pc: acpi: remove AML for empty/not used GPE handlers Igor Mammedov
2016-05-25  9:11   ` Marcel Apfelbaum
2016-05-25 13:19     ` Igor Mammedov
2016-05-31 10:06       ` Marcel Apfelbaum
2016-05-17 14:42 ` [Qemu-devel] [PATCH 05/33] pc: acpi: consolidate CPU hotplug AML Igor Mammedov
2016-05-30 18:18   ` Marcel Apfelbaum
2016-05-31  7:50     ` Igor Mammedov
2016-05-31 10:18       ` Marcel Apfelbaum
2016-05-31 12:49         ` Igor Mammedov
2016-05-17 14:42 ` [Qemu-devel] [PATCH 06/33] pc: acpi: consolidate \GPE._E02 with the rest of " Igor Mammedov
2016-05-30 18:22   ` Marcel Apfelbaum
2016-05-17 14:42 ` [Qemu-devel] [PATCH 07/33] pc: acpi: cpu-hotplug: make AML CPU_foo defines local to cpu_hotplug_acpi_table.c Igor Mammedov
2016-05-30 18:23   ` Marcel Apfelbaum
2016-05-17 14:43 ` [Qemu-devel] [PATCH 08/33] pc: acpi: mark current CPU hotplug functions as legacy Igor Mammedov
2016-05-30 18:28   ` Marcel Apfelbaum
2016-05-17 14:43 ` [Qemu-devel] [PATCH 09/33] pc: acpi: consolidate legacy CPU hotplug in one file Igor Mammedov
2016-05-30 18:31   ` Marcel Apfelbaum
2016-05-17 14:43 ` [Qemu-devel] [PATCH 10/33] pc: acpi: simplify build_legacy_cpu_hotplug_aml() signature Igor Mammedov
2016-05-30 18:31   ` Marcel Apfelbaum
2016-05-17 14:43 ` [Qemu-devel] [PATCH 11/33] pc: acpi: cpuhp-legacy: switch ProcessorID to possible_cpus idx Igor Mammedov
2016-05-30 18:39   ` Marcel Apfelbaum
2016-05-31 13:03     ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 12/33] tests: acpi: update tables with consolidated legacy cpu-hotplug AML Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 13/33] acpi: extend ACPI interface to provide send_event hook Igor Mammedov
2016-05-30 18:45   ` Marcel Apfelbaum
2016-05-31  9:57     ` [Qemu-devel] [PATCH v2 " Igor Mammedov
2016-06-02 11:09       ` Marcel Apfelbaum
2016-06-02 11:19         ` Igor Mammedov
2016-06-02 11:21           ` Marcel Apfelbaum
2016-05-17 14:43 ` [Qemu-devel] [PATCH 14/33] pc: use AcpiDeviceIfClass.send_event to issue GPE events Igor Mammedov
2016-05-31 10:01   ` [Qemu-devel] [PATCH v2 " Igor Mammedov
2016-06-02 11:13     ` Marcel Apfelbaum
2016-06-02 11:29       ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 15/33] docs: update ACPI CPU hotplug spec with new protocol Igor Mammedov
2016-05-31  4:49   ` Michael S. Tsirkin
2016-05-31 15:07     ` Igor Mammedov
2016-05-31 21:09       ` Michael S. Tsirkin
2016-06-06  9:57         ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 16/33] acpi: hardware side of CPU hotplug Igor Mammedov
2016-05-30 18:50   ` Marcel Apfelbaum
2016-05-31 13:24     ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 17/33] pc: add generic CPU unplug callbacks Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 18/33] pc: add 2.7 machine Igor Mammedov
2016-05-30 18:53   ` Marcel Apfelbaum
2016-05-30 19:04     ` Eduardo Habkost
2016-05-17 14:43 ` [Qemu-devel] [PATCH 19/33] pc: piix4/ich9: add 'cpu-hotplug-legacy' property Igor Mammedov
2016-05-30 18:59   ` Marcel Apfelbaum
2016-05-17 14:43 ` [Qemu-devel] [PATCH 20/33] pc: q35: initialize new CPU hotplug hw Igor Mammedov
2016-05-30 19:02   ` Marcel Apfelbaum
2016-05-31 10:06     ` Igor Mammedov
2016-05-31 10:21       ` Marcel Apfelbaum
2016-05-31 12:51         ` Igor Mammedov
2016-05-31 12:52           ` Michael S. Tsirkin
2016-05-31 13:18             ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 21/33] pc: piix4: " Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 22/33] pc: acpi: introduce AcpiDeviceIfClass.madt_cpu hook Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 23/33] acpi: add CPU devices AML to DSDT Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 24/33] acpi: add CPU hotplug methods " Igor Mammedov
2016-05-31  4:38   ` Michael S. Tsirkin
2016-05-31  8:45     ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 25/33] qdev: hotplug: Introduce HotplugHandler.pre_plug() callback Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 26/33] target-i386: add X86CPU.node property Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 27/33] pc: numa: replace node_cpu indexing by apic_id with possible_cpus index Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 28/33] pc: set X86CPU.node property if QEMU starts with numa enabled Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 29/33] acpi: cpuhp: provide cpu._PXM method if running in numa mode Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 30/33] acpi: cpuhp: add cpu._OST handling Igor Mammedov
2016-05-17 15:29   ` Eric Blake
2016-05-18  8:09     ` Igor Mammedov
2016-05-30 18:21       ` Michael S. Tsirkin
2016-05-31 12:53         ` Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 31/33] tests: acpi: update expected tables with new cpu-hotplug methods enabled by default Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 32/33] tests: acpi: add CPU hotplug testcase Igor Mammedov
2016-05-17 14:43 ` [Qemu-devel] [PATCH 33/33] tests: acpi: add DSDT/MADT expected tables for cpu-hotplug case 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=1463496205-251412-1-git-send-email-imammedo@redhat.com \
    --to=imammedo@redhat.com \
    --cc=armbru@redhat.com \
    --cc=drjones@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=marcel@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rkrcmar@redhat.com \
    /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).