From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57146) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1US1IT-0007zk-0T for qemu-devel@nongnu.org; Tue, 16 Apr 2013 04:31:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1US1IR-0006nD-9p for qemu-devel@nongnu.org; Tue, 16 Apr 2013 04:31:24 -0400 Received: from thoth.sbs.de ([192.35.17.2]:29631) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1US1IQ-0006mx-Ul for qemu-devel@nongnu.org; Tue, 16 Apr 2013 04:31:23 -0400 Message-ID: <516D0C3F.7010003@siemens.com> Date: Tue, 16 Apr 2013 10:30:55 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <1366063976-4909-1-git-send-email-imammedo@redhat.com> In-Reply-To: <1366063976-4909-1-git-send-email-imammedo@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 00/16 v4] target-i386: CPU hot-add with cpu-add QMP command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Igor Mammedov Cc: "aliguori@us.ibm.com" , "ehabkost@redhat.com" , "mst@redhat.com" , "claudio.fontana@huawei.com" , "qemu-devel@nongnu.org" , "aderumier@odiso.com" , "lcapitulino@redhat.com" , "jfrei@linux.vnet.ibm.com" , "yang.z.zhang@intel.com" , "pbonzini@redhat.com" , "afaerber@suse.de" , "lig.fnst@cn.fujitsu.com" , "rth@twiddle.net" On 2013-04-16 00:12, Igor Mammedov wrote: > Implements alternative way for hot-adding CPU using cpu-add QMP command, > wich could be useful until it would be possible to add CPUs via device_add. Didn't track the full story: What prevents currently a device_add approach? And that so effectively that we have to create a to-be-deprecated-again QMP API first? Thanks, Jan > > All patches except the last are also applicable to device_add aprroach. > > 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.v4 > > based on qom-cpu tree > > 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 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. > > CC: pbonzini@redhat.com > CC: afaerber@suse.de > CC: ehabkost@redhat.com > > Igor Mammedov (16): > cpu: make kvm-stub.o a part of CPU library > cpu: call cpu_synchronize_post_init() from CPUClass.realize() if > hotplugged > introduce resume_vcpu(), for single CPU > cpu: resume CPU from CPUClass.cpu_common_realizefn() when it is > hot-plugged > introduce CPU hot-plug notifier > target-i386: pc: update rtc_cmos on CPU hot-plug > cpu: introduce get_arch_id() method and override it for target-i386 > 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 > 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: move APIC to ICC bus > target-i386: move IOAPIC to ICC bus > add cpu-add qmp command and implement CPU hot-add for target-i386 > > Makefile.target | 14 ++--- > cpus.c | 11 +++- > default-configs/i386-softmmu.mak | 1 + > default-configs/x86_64-softmmu.mak | 1 + > hw/acpi/piix4.c | 114 ++++++++++++++++++++++++++++++++++++- > hw/cpu/Makefile.objs | 1 + > hw/cpu/icc_bus.c | 104 +++++++++++++++++++++++++++++++++ > hw/i386/kvm/apic.c | 2 +- > hw/i386/kvm/ioapic.c | 2 +- > hw/i386/kvmvapic.c | 1 + > hw/i386/pc.c | 91 +++++++++++++++++++++++++++-- > hw/i386/pc_piix.c | 7 +++ > hw/i386/pc_q35.c | 7 +++ > hw/intc/apic.c | 2 +- > hw/intc/apic_common.c | 17 ++++-- > hw/intc/ioapic_common.c | 15 +++-- > hw/timer/mc146818rtc.c | 7 +++ > hw/xen/xen_apic.c | 2 +- > include/exec/memory.h | 10 ++++ > include/hw/boards.h | 3 + > include/hw/i386/apic_internal.h | 8 +-- > include/hw/i386/icc_bus.h | 53 +++++++++++++++++ > include/hw/i386/ioapic_internal.h | 6 +- > include/hw/pci/msi.h | 2 + > include/hw/timer/mc146818rtc.h | 1 + > include/qom/cpu.h | 21 +++++++ > include/sysemu/kvm.h | 22 +++---- > include/sysemu/sysemu.h | 3 + > kvm-all.c | 1 + > kvm-stub.c | 3 + > memory.c | 11 ++++ > qapi-schema.json | 11 ++++ > qmp-commands.hx | 23 ++++++++ > qmp.c | 10 ++++ > qom/cpu.c | 44 ++++++++++++++ > stubs/Makefile.objs | 1 + > stubs/cpus.c | 5 ++ > target-i386/cpu.c | 75 +++++++++++++++++++----- > target-i386/cpu.h | 1 + > vl.c | 7 ++- > 40 files changed, 656 insertions(+), 64 deletions(-) > create mode 100644 hw/cpu/icc_bus.c > create mode 100644 include/hw/i386/icc_bus.h > create mode 100644 stubs/cpus.c > -- Siemens AG, Corporate Technology, CT RTC ITP SDP-DE Corporate Competence Center Embedded Linux