All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/15 v6 for 1.5] target-i386: CPU hot-add with cpu-add QMP command
@ 2013-04-25 14:05 Igor Mammedov
  2013-04-25 14:05 ` [Qemu-devel] [PATCH 01/15] exec: add qemu_for_each_cpu Igor Mammedov
                   ` (14 more replies)
  0 siblings, 15 replies; 34+ messages in thread
From: Igor Mammedov @ 2013-04-25 14:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, aliguori, ehabkost, mst, stefano.stabellini,
	quintela, anthony.perard, pbonzini, afaerber


Implements alternative way for hot-adding CPU using cpu-add QMP command,
which could be useful until it would be possible to add CPUs via device_add.

To hot-add CPU use following command from qmp-shell:
 cpu-add id=[0..max-cpus - 1)

git tree for testing: https://github.com/imammedo/qemu/tree/cpu_add.v6

based on qom-cpu tree

v6->v5
  * override hot_add_cpu hook statically
  * extend and use memory_region_find() in IOAPIC
  * s/signal_cpu_creation/tcg_signal_cpu_creation/
  * add "since 1.5 to cpu-addQAPI schema description

v5->v4:
  * style fixes
  * new helper qemu_for_each_cpu()
  * switch to qemu_for_each_cpu() in cpu_exists()
  * "pc: update rtc ..." patch make depend it on "mc146818rtc: QOM'ify"
    and use QOM cast style
  * call CPU added notifier right before CPU becomes runable
  * s/resume_vcpu/cpu_resume/
  * acpi/piix4: add spec documentation for QEMU<->Seabios CPU hotplug
    interface
  * use error_propagate() in pc_new_cpu()
  * skip cpu_exists() check in apic-id property setter if new value is
    the same as current
  * embed icc-bus inside icc-bridge and use qbus_create_inplace()
  * move include/hw/i386/icc_bus.h into include/hw/cpu/
  * make missing icc-bus fatal error for softmmu target
  * split "move APIC to ICC bus" and "move IOAPIC to ICC bus" on smaller
    patches
  * use qdev_get_parent_bus() to get parent bus
  * split "add cpu-add command..." on smaller patches

v4->v3:
  * 'id' in cpu-add command will be a thread number instead of APIC ID
  * split off resume_vcpu() into separate patch
  * move notifier from rtc code into pc.c

v2->v3:
  * use local error & propagate_error() instead of operating on
    passed in errp in several places
  * replace CPUClass.get_firmware_id() with CPUClass.get_arch_id()
  * leave IOAPIC creation to board and just set bus to icc-bus
  * include kvm-stub.o in cpu libary if no KVM is configured
  * create resume_vcpu() stub and include it in libqemustub,
    and use it directly instead of CPU method
  * acpi_piix4: s/cpu_add_notifier/cpu_added_notifier/

v1->v2:
  * generalize cpu sync to KVM, resume and hot-plug notification and
    invoke them form CPUClass, to make available to all targets.
  * introduce cpu_exists() and CPUClass.get_firmware_id() and use
    the last one in acpi_piix to make code target independent.
  * move IOAPIC to ICC bus, it was suggested and easy to convert.
  * leave kvmvapic as SysBusDevice, it doesn't affect hot-plug and
    created only once for all APIC instances. I haven't found yet
    good/clean enough way to convert it to ICCDevice. May be follow-up
    though.
  * split one big ICC patch into several, one per converted device
  * add cpu_hot_add hook to machine and implement it for target-i386,
    instead of adding stabs. Could be used by other targets to
    implement cpu-add.
  * pre-allocate links<CPU> for all possible CPUs and make them available
    at /machine/icc-bridge/cpu[0..N] QOM path, so users could find out
    possible/free CPU IDs to use in cpu-add command.

Igor Mammedov (14):
  exec: add qemu_for_each_cpu
  cpu: add helper cpu_exists(), to check if CPU with specified id
    exists
  acpi_piix4: add infrastructure to send CPU hot-plug GPE to guest
  target-i386: introduce apic-id property
  target-i386: introduce ICC bus/device/bridge
  target-i386: cpu: attach ICC bus to CPU on its creation
  target-i386: replace MSI_SPACE_SIZE with APIC_SPACE_SIZE
  target-i386: kvmvapic: make expilict dependency on sysbus.h
  target-i386: move APIC to ICC bus
  target-i386: move IOAPIC to ICC bus
  pc: pass QEMUMachineInitArgs down to pc_cpus_init()
  add hot_add_cpu hook to QEMUMachine and export machine_args
  target-i386: implement machine->hot_add_cpu hook
  QMP: add cpu-add command

Paolo Bonzini (1):
  extend memory_region_find() and use it in kvm/ioapic

 MAINTAINERS                        |    6 ++
 cpus.c                             |   13 ++--
 default-configs/i386-softmmu.mak   |    1 +
 default-configs/x86_64-softmmu.mak |    1 +
 docs/specs/acpi_cpu_hotplug.txt    |   22 +++++++
 exec.c                             |   10 +++
 hw/acpi/piix4.c                    |   90 ++++++++++++++++++++++++++-
 hw/cpu/Makefile.objs               |    1 +
 hw/cpu/icc_bus.c                   |  120 ++++++++++++++++++++++++++++++++++++
 hw/i386/kvm/apic.c                 |    2 +-
 hw/i386/kvm/ioapic.c               |    9 +++-
 hw/i386/kvmvapic.c                 |    1 +
 hw/i386/pc.c                       |   80 +++++++++++++++++++++---
 hw/i386/pc_piix.c                  |   74 +++++++---------------
 hw/i386/pc_q35.c                   |   31 +++++----
 hw/intc/apic.c                     |    2 +-
 hw/intc/apic_common.c              |   18 ++++--
 hw/intc/ioapic_common.c            |   14 +++-
 hw/xen/xen_apic.c                  |    2 +-
 include/exec/memory.h              |   13 ++--
 include/hw/boards.h                |    3 +
 include/hw/cpu/icc_bus.h           |   63 +++++++++++++++++++
 include/hw/i386/apic_internal.h    |    8 +--
 include/hw/i386/ioapic_internal.h  |    6 +-
 include/hw/i386/pc.h               |    4 +-
 include/qom/cpu.h                  |   18 ++++++
 memory.c                           |   20 +++++--
 qapi-schema.json                   |   13 ++++
 qmp-commands.hx                    |   23 +++++++
 qmp.c                              |   10 +++
 qom/cpu.c                          |   26 ++++++++
 target-i386/cpu.c                  |   73 ++++++++++++++++++----
 target-i386/cpu.h                  |    1 +
 vl.c                               |    8 ++-
 34 files changed, 656 insertions(+), 130 deletions(-)
 create mode 100644 docs/specs/acpi_cpu_hotplug.txt
 create mode 100644 hw/cpu/icc_bus.c
 create mode 100644 include/hw/cpu/icc_bus.h

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2013-04-28  0:46 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-25 14:05 [Qemu-devel] [PATCH 00/15 v6 for 1.5] target-i386: CPU hot-add with cpu-add QMP command Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 01/15] exec: add qemu_for_each_cpu Igor Mammedov
2013-04-25 15:04   ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 02/15] cpu: add helper cpu_exists(), to check if CPU with specified id exists Igor Mammedov
2013-04-25 15:46   ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 03/15] acpi_piix4: add infrastructure to send CPU hot-plug GPE to guest Igor Mammedov
2013-04-25 15:54   ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 04/15] target-i386: introduce apic-id property Igor Mammedov
2013-04-25 20:36   ` Eduardo Habkost
2013-04-26  7:32     ` Igor Mammedov
2013-04-26  8:53       ` Eduardo Habkost
2013-04-26  9:34         ` Igor Mammedov
2013-04-26 16:05   ` Eduardo Habkost
2013-04-26 16:46   ` Andreas Färber
2013-04-26 17:29     ` [Qemu-devel] [PATCH] target-i386: Do not allow to set apic-id one CPU is realized Igor Mammedov
2013-04-26 17:33       ` Eduardo Habkost
2013-04-26 17:39       ` Andreas Färber
2013-04-26 17:48         ` Igor Mammedov
2013-04-26 17:51         ` [Qemu-devel] [PATCH] target-i386: Do not allow to set apic-id once " Igor Mammedov
2013-04-27 15:50           ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 05/15] target-i386: introduce ICC bus/device/bridge Igor Mammedov
2013-04-27 16:18   ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 06/15] target-i386: cpu: attach ICC bus to CPU on its creation Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 07/15] target-i386: replace MSI_SPACE_SIZE with APIC_SPACE_SIZE Igor Mammedov
2013-04-28  0:37   ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 08/15] target-i386: kvmvapic: make expilict dependency on sysbus.h Igor Mammedov
2013-04-28  0:46   ` Andreas Färber
2013-04-25 14:05 ` [Qemu-devel] [PATCH 09/15] target-i386: move APIC to ICC bus Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 10/15] extend memory_region_find() and use it in kvm/ioapic Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 11/15] target-i386: move IOAPIC to ICC bus Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 12/15] pc: pass QEMUMachineInitArgs down to pc_cpus_init() Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 13/15] add hot_add_cpu hook to QEMUMachine and export machine_args Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 14/15] target-i386: implement machine->hot_add_cpu hook Igor Mammedov
2013-04-25 14:05 ` [Qemu-devel] [PATCH 15/15] QMP: add cpu-add command Igor Mammedov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.