From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:34724) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rxo5N-0001Dj-Cw for qemu-devel@nongnu.org; Wed, 15 Feb 2012 18:16:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rxo5L-0000Mn-Hy for qemu-devel@nongnu.org; Wed, 15 Feb 2012 18:16:29 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44032) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rxo5K-0000MX-Qw for qemu-devel@nongnu.org; Wed, 15 Feb 2012 18:16:27 -0500 From: Igor Mammedov Date: Thu, 16 Feb 2012 00:16:14 +0100 Message-Id: <1329347774-23262-8-git-send-email-imammedo@redhat.com> In-Reply-To: <1329347774-23262-1-git-send-email-imammedo@redhat.com> References: <1329347774-23262-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH 7/7] Implement cpu hot-add using device_add monitor command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: jan.kiszka@siemens.com, gleb@redhat.com Adds ability to hot-add cpus if guest was started with options -smp X,maxcpus=Y where X < Y. For simplicity sake this implementation doesn't allow to add specific cpu but rather it adds the next not yet plugged cpu. For adding cpu just execute following command in monitor: device_add cpu-pc If guest was started with a specific cpu model, then add option model to cmonitor command. for example: device_add cpu-pc,model="host" Signed-off-by: Igor Mammedov --- hw/pc.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index ec50f16..5923549 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -44,6 +44,8 @@ #include "ui/qemu-spice.h" #include "memory.h" #include "exec-memory.h" +#include "cpus.h" +#include "kvm.h" /* output Bochs bios info messages */ //#define DEBUG_BIOS @@ -941,6 +943,10 @@ static int cpu_device_init(ICCBusDevice *dev) #endif } + if (runstate_is_running()) { + pause_all_vcpus(); + } + if (cpu_x86_init_inplace(env, cpu->model) < 0) { return -1; } @@ -949,6 +955,11 @@ static int cpu_device_init(ICCBusDevice *dev) env->apic_state = apic_init(env, env->cpuid_apic_id); } + cpu_synchronize_post_init(env); + if (runstate_is_running()) { + resume_all_vcpus(); + acpi_cpu_hot_plug(env->cpuid_apic_id, 1); + } return 0; } -- 1.7.7.6