qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/3] Add KVM support to QEMU


From: Hollis Blanchard
Subject: Re: [Qemu-devel] [PATCH 3/3] Add KVM support to QEMU
Date: Tue, 28 Oct 2008 15:49:26 -0500

Just a quick skim...

On Tue, Oct 28, 2008 at 3:13 PM, Anthony Liguori <address@hidden> 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]