From patchwork Fri Oct 9 18:03:13 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glauber Costa X-Patchwork-Id: 52777 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 n99I6uNv012234 for ; Fri, 9 Oct 2009 18:06:57 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933202AbZJISD6 (ORCPT ); Fri, 9 Oct 2009 14:03:58 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932914AbZJISD6 (ORCPT ); Fri, 9 Oct 2009 14:03:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:8543 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761240AbZJISD4 (ORCPT ); Fri, 9 Oct 2009 14:03:56 -0400 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n99I3UiO011148 for ; Fri, 9 Oct 2009 14:03:30 -0400 Received: from localhost.localdomain (vpn-12-36.rdu.redhat.com [10.11.12.36]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n99I3JJD017374; Fri, 9 Oct 2009 14:03:29 -0400 From: Glauber Costa To: kvm@vger.kernel.org Cc: avi@redhat.com Subject: [PATCH 05/10] Use kvm_run inside CPUState. Date: Fri, 9 Oct 2009 15:03:13 -0300 Message-Id: <1255111398-15251-6-git-send-email-glommer@redhat.com> In-Reply-To: <1255111398-15251-5-git-send-email-glommer@redhat.com> References: <1255111398-15251-1-git-send-email-glommer@redhat.com> <1255111398-15251-2-git-send-email-glommer@redhat.com> <1255111398-15251-3-git-send-email-glommer@redhat.com> <1255111398-15251-4-git-send-email-glommer@redhat.com> <1255111398-15251-5-git-send-email-glommer@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.16 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org diff --git a/qemu-kvm.c b/qemu-kvm.c index 5c7376d..a7eda2d 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -459,13 +459,16 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id) fprintf(stderr, "get vcpu mmap size: %m\n"); goto err_fd; } - vcpu_ctx->run = + env->kvm_run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, vcpu_ctx->fd, 0); - if (vcpu_ctx->run == MAP_FAILED) { + if (env->kvm_run == MAP_FAILED) { fprintf(stderr, "mmap vcpu area: %m\n"); goto err_fd; } + + vcpu_ctx->run = env->kvm_run; + return vcpu_ctx; err_fd: close(vcpu_ctx->fd); @@ -757,9 +760,9 @@ int kvm_set_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip) #endif -static int handle_io(kvm_vcpu_context_t vcpu) +static int handle_io(CPUState *env) { - struct kvm_run *run = vcpu->run; + struct kvm_run *run = env->kvm_run; uint16_t addr = run->io.port; int i; void *p = (void *) run + run->io.data_offset; @@ -809,10 +812,10 @@ static int handle_io(kvm_vcpu_context_t vcpu) return 0; } -int handle_debug(kvm_vcpu_context_t vcpu, void *env) +static int handle_debug(CPUState *env) { #ifdef KVM_CAP_SET_GUEST_DEBUG - struct kvm_run *run = vcpu->run; + struct kvm_run *run = env->kvm_run; return kvm_debug(env, &run->debug.arch); #else @@ -872,10 +875,10 @@ int kvm_set_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state) } #endif -static int handle_mmio(kvm_vcpu_context_t vcpu) +static int handle_mmio(CPUState *env) { - unsigned long addr = vcpu->run->mmio.phys_addr; - struct kvm_run *kvm_run = vcpu->run; + unsigned long addr = env->kvm_run->mmio.phys_addr; + struct kvm_run *kvm_run = env->kvm_run; void *data = kvm_run->mmio.data; /* hack: Red Hat 7.1 generates these weird accesses. */ @@ -1001,13 +1004,13 @@ int kvm_run(kvm_vcpu_context_t vcpu, void *env) abort(); break; case KVM_EXIT_IO: - r = handle_io(vcpu); + r = handle_io(env); break; case KVM_EXIT_DEBUG: - r = handle_debug(vcpu, env); + r = handle_debug(env); break; case KVM_EXIT_MMIO: - r = handle_mmio(vcpu); + r = handle_mmio(env); break; case KVM_EXIT_HLT: r = kvm_arch_halt(vcpu); diff --git a/qemu-kvm.h b/qemu-kvm.h index 4dfd5ea..3bc483e 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -106,7 +106,6 @@ int handle_shutdown(kvm_context_t kvm, CPUState *env); void post_kvm_run(kvm_context_t kvm, CPUState *env); int pre_kvm_run(kvm_context_t kvm, CPUState *env); int handle_io_window(kvm_context_t kvm); -int handle_debug(kvm_vcpu_context_t vcpu, void *env); int try_push_interrupts(kvm_context_t kvm); #if defined(__x86_64__) || defined(__i386__)