From patchwork Wed May 4 19:43:40 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 754732 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p44JijE4026530 for ; Wed, 4 May 2011 19:44:45 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755640Ab1EDToh (ORCPT ); Wed, 4 May 2011 15:44:37 -0400 Received: from fmmailgate01.web.de ([217.72.192.221]:38470 "EHLO fmmailgate01.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755571Ab1EDToS (ORCPT ); Wed, 4 May 2011 15:44:18 -0400 Received: from smtp04.web.de ( [172.20.0.225]) by fmmailgate01.web.de (Postfix) with ESMTP id 687B318E4DE3C; Wed, 4 May 2011 21:44:13 +0200 (CEST) Received: from [88.64.22.120] (helo=localhost.localdomain) by smtp04.web.de with asmtp (TLSv1:AES256-SHA:256) (WEB.DE 4.110 #2) id 1QHhzZ-0006mo-00; Wed, 04 May 2011 21:44:13 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 06/19] qemu-kvm: Use upstream vcpu initialization Date: Wed, 4 May 2011 21:43:40 +0200 Message-Id: <2c2460b7b017fb4271333a4de5f284d5955eb54d.1304538230.git.jan.kiszka@web.de> X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: X-Sender: jan.kiszka@web.de X-Provags-ID: V01U2FsdGVkX18x82ywj4mqyg3RyETNhFzu/tm7b0FhEMQMlMYq fx6d6ddZSHo7CMWID0NiszC2gb0BQNiezDNkJZb4M1cwx+6Q0r 1fgZlz6+w= Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 04 May 2011 19:44:45 +0000 (UTC) From: Jan Kiszka This is a bit ugly, but as we overload kvm_init_vcpu with a wrapper, we need to rename upstream's core implementation for now. Better than keeping two identical versions of this non-trivial function around. Signed-off-by: Jan Kiszka --- kvm-all.c | 4 +--- qemu-kvm.c | 53 +++-------------------------------------------------- 2 files changed, 4 insertions(+), 53 deletions(-) diff --git a/kvm-all.c b/kvm-all.c index a871987..2e7de45 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -200,8 +200,7 @@ int kvm_pit_in_kernel(void) return kvm_state->pit_in_kernel; } -#ifdef OBSOLETE_KVM_IMPL -int kvm_init_vcpu(CPUState *env) +static int kvm_create_vcpu(CPUState *env) { KVMState *s = kvm_state; long mmap_size; @@ -247,7 +246,6 @@ int kvm_init_vcpu(CPUState *env) err: return ret; } -#endif /* * dirty pages logging control diff --git a/qemu-kvm.c b/qemu-kvm.c index ed72d1c..e066582 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -224,55 +224,6 @@ void kvm_disable_pit_creation(kvm_context_t kvm) kvm->no_pit_creation = 1; } -static void kvm_create_vcpu(CPUState *env, int id) -{ - long mmap_size; - int r; - KVMState *s = kvm_state; - - r = kvm_vm_ioctl(kvm_state, KVM_CREATE_VCPU, id); - if (r < 0) { - fprintf(stderr, "kvm_create_vcpu: %m\n"); - fprintf(stderr, "Failed to create vCPU. Check the -smp parameter.\n"); - goto err; - } - - env->kvm_fd = r; - env->kvm_state = kvm_state; - env->kvm_vcpu_dirty = 1; - - mmap_size = kvm_ioctl(kvm_state, KVM_GET_VCPU_MMAP_SIZE, 0); - if (mmap_size < 0) { - fprintf(stderr, "get vcpu mmap size: %m\n"); - goto err_fd; - } - env->kvm_run = - mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, env->kvm_fd, - 0); - if (env->kvm_run == MAP_FAILED) { - fprintf(stderr, "mmap vcpu area: %m\n"); - goto err_fd; - } - -#ifdef KVM_CAP_COALESCED_MMIO - if (s->coalesced_mmio && !s->coalesced_mmio_ring) - s->coalesced_mmio_ring = (void *) env->kvm_run + - s->coalesced_mmio * PAGE_SIZE; -#endif - - r = kvm_arch_init_vcpu(env); - if (r == 0) { - qemu_register_reset(kvm_reset_vcpu, env); - } - - return; - err_fd: - close(env->kvm_fd); - err: - /* We're no good with semi-broken states. */ - abort(); -} - static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id) { #ifdef KVM_CAP_SET_BOOT_CPU_ID @@ -1436,7 +1387,9 @@ static void *ap_main_loop(void *_env) pthread_mutex_lock(&qemu_mutex); cpu_single_env = env; - kvm_create_vcpu(env, env->cpu_index); + if (kvm_create_vcpu(env) < 0) { + abort(); + } setup_kernel_sigmask(env); /* signal VCPU creation */