From patchwork Thu Jun 25 12:21:00 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gleb Natapov X-Patchwork-Id: 32374 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n5PCL7Lr029342 for ; Thu, 25 Jun 2009 12:21:08 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752826AbZFYMVA (ORCPT ); Thu, 25 Jun 2009 08:21:00 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752674AbZFYMVA (ORCPT ); Thu, 25 Jun 2009 08:21:00 -0400 Received: from mx2.redhat.com ([66.187.237.31]:56668 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751926AbZFYMU7 (ORCPT ); Thu, 25 Jun 2009 08:20:59 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n5PCL3vV029488 for ; Thu, 25 Jun 2009 08:21:03 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n5PCL2KL006146; Thu, 25 Jun 2009 08:21:02 -0400 Received: from dhcp-1-237.tlv.redhat.com (dhcp-1-237.tlv.redhat.com [10.35.1.237]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n5PCL1wj018021; Thu, 25 Jun 2009 08:21:01 -0400 Received: by dhcp-1-237.tlv.redhat.com (Postfix, from userid 13519) id BA20A18D47B; Thu, 25 Jun 2009 15:21:00 +0300 (IDT) From: Gleb Natapov To: avi@redhat.com Cc: kvm@vger.kernel.org Subject: [PATCH] Add kvm_set_boot_cpu_id() API. Date: Thu, 25 Jun 2009 15:21:00 +0300 Message-Id: <1245932460-15616-3-git-send-email-gleb@redhat.com> X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Signed-off-by: Gleb Natapov --- hw/pc.c | 3 ++- qemu-kvm.c | 17 +++++++++++++++++ qemu-kvm.h | 1 + 3 files changed, 20 insertions(+), 1 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index cb5b4d0..9ef245d 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -901,7 +901,8 @@ static void pc_init1(ram_addr_t ram_size, cpu_model = "qemu32"; #endif } - + + kvm_set_boot_cpu_id(0); for(i = 0; i < smp_cpus; i++) { env = pc_new_cpu(i, cpu_model, pci_enabled); } diff --git a/qemu-kvm.c b/qemu-kvm.c index c5cd038..c57df57 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -441,6 +441,18 @@ err: return NULL; } +static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id) +{ +#ifdef KVM_CAP_SET_BOOT_CPU_ID + int r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_SET_BOOT_CPU_ID); + if (r > 0) + return ioctl(kvm->vm_fd, KVM_SET_BOOT_CPU_ID, id); + return -ENOSYS; +#else + return -ENOSYS; +#endif +} + int kvm_create_vm(kvm_context_t kvm) { int fd = kvm->fd; @@ -2923,3 +2935,8 @@ void qemu_kvm_cpu_stop(CPUState *env) if (kvm_enabled()) env->kvm_cpu_state.stopped = 1; } + +int kvm_set_boot_cpu_id(uint32_t id) +{ + return kvm_set_boot_vcpu_id(kvm_context, id); +} diff --git a/qemu-kvm.h b/qemu-kvm.h index 9c28566..8b51737 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -80,6 +80,7 @@ int kvm_arch_try_push_interrupts(void *opaque); void kvm_arch_push_nmi(void *opaque); void kvm_arch_update_regs_for_sipi(CPUState *env); void kvm_arch_cpu_reset(CPUState *env); +int kvm_set_boot_cpu_id(uint32_t id); struct kvm_guest_debug; struct kvm_debug_exit_arch;