From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KuvVO-0005dL-C5 for qemu-devel@nongnu.org; Tue, 28 Oct 2008 16:49:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KuvVL-0005d9-Vj for qemu-devel@nongnu.org; Tue, 28 Oct 2008 16:49:33 -0400 Received: from [199.232.76.173] (port=44111 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KuvVL-0005d6-QA for qemu-devel@nongnu.org; Tue, 28 Oct 2008 16:49:31 -0400 Received: from yx-out-1718.google.com ([74.125.44.157]:60225) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KuvVL-0004mE-PK for qemu-devel@nongnu.org; Tue, 28 Oct 2008 16:49:32 -0400 Received: by yx-out-1718.google.com with SMTP id 3so647039yxi.82 for ; Tue, 28 Oct 2008 13:49:29 -0700 (PDT) Message-ID: Date: Tue, 28 Oct 2008 15:49:26 -0500 From: "Hollis Blanchard" Sender: slightlyunconventional@gmail.com Subject: Re: [Qemu-devel] [PATCH 3/3] Add KVM support to QEMU In-Reply-To: <1225224814-9875-3-git-send-email-aliguori@us.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <1225224814-9875-1-git-send-email-aliguori@us.ibm.com> <1225224814-9875-2-git-send-email-aliguori@us.ibm.com> <1225224814-9875-3-git-send-email-aliguori@us.ibm.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kvm-ppc@vger.kernel.org, Glauber Costa , Avi Kivity , kvm-devel , Anthony Liguori Just a quick skim... On Tue, Oct 28, 2008 at 3:13 PM, Anthony Liguori wrote: > +int kvm_cpu_exec(CPUState *env) > +{ > + struct kvm_run *run = env->kvm_run; > + int ret; > + > + dprintf("kvm_cpu_exec()\n"); > + > + do { > + kvm_arch_pre_run(env, run); > + > + if ((env->interrupt_request & CPU_INTERRUPT_EXIT)) { > + dprintf("interrupt exit requested\n"); > + ret = 0; > + break; > + } > + > + dprintf("setting tpr\n"); > + run->cr8 = cpu_get_apic_tpr(env); This belongs in the arch_pre_run hook above. > + ret = kvm_vcpu_ioctl(env, KVM_RUN, 0); > + kvm_arch_post_run(env, run); > + > + if (ret == -EINTR || ret == -EAGAIN) { > + dprintf("io window exit\n"); > + ret = 0; > + break; > + } > + > + if (ret < 0) { > + dprintf("kvm run failed %s\n", strerror(-ret)); > + abort(); > + } > + > + ret = 0; /* exit loop */ > + switch (run->exit_reason) { > + case KVM_EXIT_IO: > + dprintf("handle_io\n"); > + ret = kvm_handle_io(env, run->io.port, > + (uint8_t *)run + run->io.data_offset, > + run->io.direction, > + run->io.size, > + run->io.count); > + break; > + case KVM_EXIT_MMIO: > + dprintf("handle_mmio\n"); > + cpu_physical_memory_rw(run->mmio.phys_addr, > + run->mmio.data, > + run->mmio.len, > + run->mmio.is_write); > + ret = 1; > + break; > + case KVM_EXIT_IRQ_WINDOW_OPEN: > + dprintf("irq_window_open\n"); > + break; > + case KVM_EXIT_SHUTDOWN: > + dprintf("shutdown\n"); > + qemu_system_reset_request(); > + ret = 1; > + break; > + case KVM_EXIT_UNKNOWN: > + dprintf("kvm_exit_unknown\n"); > + break; > + case KVM_EXIT_FAIL_ENTRY: > + dprintf("kvm_exit_fail_entry\n"); > + break; > + case KVM_EXIT_EXCEPTION: > + dprintf("kvm_exit_exception\n"); > + break; > + case KVM_EXIT_DEBUG: > + dprintf("kvm_exit_debug\n"); > + break; > + default: > + dprintf("kvm_arch_handle_exit\n"); > + ret = kvm_arch_handle_exit(env, run); > + break; > + } > + } while (ret > 0); > + > + return ret; > +} How did you decide which exit handlers should go into architecture-specific code? Looking at just the KVM architecture set: IO: x86 and ia64, not PowerPC or s390 MMIO: everybody except s390 DCRs: PowerPC only IRQ window: not sure -Hollis