int kvm_cpu_exec(CPUState *env)

{

    struct kvm_run *run = env->kvm_run;

    int ret;



    dprintf("kvm_cpu_exec()\n");



    do {

#ifndef CONFIG_IOTHREAD

        if (env->exit_request) {

            dprintf("interrupt exit requested\n");

            ret = 0;

            break;

        }

#endif



        if (env->kvm_vcpu_dirty) {

            kvm_arch_put_registers(env);

            env->kvm_vcpu_dirty = 0;

        }



        kvm_arch_pre_run(env, run);

        qemu_mutex_unlock_iothread();

        ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);

        qemu_mutex_lock_iothread();

        kvm_arch_post_run(env, run);



        if (ret == -EINTR || ret == -EAGAIN) {

            cpu_exit(env);

            dprintf("io window exit\n");

            ret = 0;

            break;

        }



        if (ret < 0) {

            dprintf("kvm run failed %s\n", strerror(-ret));

            abort();

        }



        kvm_flush_coalesced_mmio_buffer();



        ret = 0; /* exit loop */

        switch (run->exit_reason) {

        case KVM_EXIT_IO:

            dprintf("handle_io\n");

            ret = kvm_handle_io(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");

#ifdef KVM_CAP_SET_GUEST_DEBUG

            if (kvm_arch_debug(&run->debug.arch)) {

                gdb_set_stop_cpu(env);

                vm_stop(EXCP_DEBUG);

                env->exception_index = EXCP_DEBUG;

                return 0;

            }

            /* re-enter, this exception was guest-internal */

            ret = 1;

#endif /* KVM_CAP_SET_GUEST_DEBUG */

            break;

        default:

            dprintf("kvm_arch_handle_exit\n");

            ret = kvm_arch_handle_exit(env, run);

            break;

        }

    } while (ret > 0);



    if (env->exit_request) {

        env->exit_request = 0;

        env->exception_index = EXCP_INTERRUPT;

    }



    return ret;

}

int kvm_cpu_exec(CPUState *env)

{

    struct kvm_run *run = env->kvm_run;

    int ret;



    dprintf("kvm_cpu_exec()\n");



    do {

#ifndef CONFIG_IOTHREAD

        if (env->exit_request) {

            dprintf("interrupt exit requested\n");

            ret = 0;

            break;

        }

#endif



        if (env->kvm_vcpu_dirty) {

            kvm_arch_put_registers(env);

            env->kvm_vcpu_dirty = 0;

        }



        kvm_arch_pre_run(env, run);

        qemu_mutex_unlock_iothread();

        ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);

        qemu_mutex_lock_iothread();

        kvm_arch_post_run(env, run);



        if (ret == -EINTR || ret == -EAGAIN) {

            cpu_exit(env);

            dprintf("io window exit\n");

            ret = 0;

            break;

        }



        if (ret < 0) {

            dprintf("kvm run failed %s\n", strerror(-ret));

            abort();

        }



        kvm_flush_coalesced_mmio_buffer();



        ret = 0; 

        switch (run->exit_reason) {

        case KVM_EXIT_IO:

            dprintf("handle_io\n");

            ret = kvm_handle_io(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");

#ifdef KVM_CAP_SET_GUEST_DEBUG

            if (kvm_arch_debug(&run->debug.arch)) {

                gdb_set_stop_cpu(env);

                vm_stop(EXCP_DEBUG);

                env->exception_index = EXCP_DEBUG;

                return 0;

            }

            

            ret = 1;

#endif 

            break;

        default:

            dprintf("kvm_arch_handle_exit\n");

            ret = kvm_arch_handle_exit(env, run);

            break;

        }

    } while (ret > 0);



    if (env->exit_request) {

        env->exit_request = 0;

        env->exception_index = EXCP_INTERRUPT;

    }



    return ret;

}

            kvm_arch_put_registers(env);
int FUNC_0(CPUState *VAR_0)

{

    struct kvm_run *VAR_1 = VAR_0->kvm_run;

    int VAR_2;



    dprintf("FUNC_0()\n");



    do {

#ifndef CONFIG_IOTHREAD

        if (VAR_0->exit_request) {

            dprintf("interrupt exit requested\n");

            VAR_2 = 0;

            break;

        }

#endif



        if (VAR_0->kvm_vcpu_dirty) {

            kvm_arch_put_registers(VAR_0);

            VAR_0->kvm_vcpu_dirty = 0;

        }



        kvm_arch_pre_run(VAR_0, VAR_1);

        qemu_mutex_unlock_iothread();

        VAR_2 = kvm_vcpu_ioctl(VAR_0, KVM_RUN, 0);

        qemu_mutex_lock_iothread();

        kvm_arch_post_run(VAR_0, VAR_1);



        if (VAR_2 == -EINTR || VAR_2 == -EAGAIN) {

            cpu_exit(VAR_0);

            dprintf("io window exit\n");

            VAR_2 = 0;

            break;

        }



        if (VAR_2 < 0) {

            dprintf("kvm VAR_1 failed %s\n", strerror(-VAR_2));

            abort();

        }



        kvm_flush_coalesced_mmio_buffer();



        VAR_2 = 0; 

        switch (VAR_1->exit_reason) {

        case KVM_EXIT_IO:

            dprintf("handle_io\n");

            VAR_2 = kvm_handle_io(VAR_1->io.port,

                                (uint8_t *)VAR_1 + VAR_1->io.data_offset,

                                VAR_1->io.direction,

                                VAR_1->io.size,

                                VAR_1->io.count);

            break;

        case KVM_EXIT_MMIO:

            dprintf("handle_mmio\n");

            cpu_physical_memory_rw(VAR_1->mmio.phys_addr,

                                   VAR_1->mmio.data,

                                   VAR_1->mmio.len,

                                   VAR_1->mmio.is_write);

            VAR_2 = 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();

            VAR_2 = 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");

#ifdef KVM_CAP_SET_GUEST_DEBUG

            if (kvm_arch_debug(&VAR_1->debug.arch)) {

                gdb_set_stop_cpu(VAR_0);

                vm_stop(EXCP_DEBUG);

                VAR_0->exception_index = EXCP_DEBUG;

                return 0;

            }

            

            VAR_2 = 1;

#endif 

            break;

        default:

            dprintf("kvm_arch_handle_exit\n");

            VAR_2 = kvm_arch_handle_exit(VAR_0, VAR_1);

            break;

        }

    } while (VAR_2 > 0);



    if (VAR_0->exit_request) {

        VAR_0->exit_request = 0;

        VAR_0->exception_index = EXCP_INTERRUPT;

    }



    return VAR_2;

}

int FUNC_0(CPUState *VAR_0)
{ struct kvm_run *VAR_1 = VAR_0->kvm_run; int VAR_2; dprintf("FUNC_0()\n"); do { #ifndef CONFIG_IOTHREAD
if (VAR_0->exit_request) { dprintf("interrupt exit requested\n"); VAR_2 = 0; break; } #endif
if (VAR_0->kvm_vcpu_dirty) { kvm_arch_put_registers(VAR_0); VAR_0->kvm_vcpu_dirty = 0; } kvm_arch_pre_run(VAR_0, VAR_1); qemu_mutex_unlock_iothread(); VAR_2 = kvm_vcpu_ioctl(VAR_0, KVM_RUN, 0); qemu_mutex_lock_iothread(); kvm_arch_post_run(VAR_0, VAR_1); if (VAR_2 == -EINTR || VAR_2 == -EAGAIN) { cpu_exit(VAR_0); dprintf("io window exit\n"); VAR_2 = 0; break; } if (VAR_2 < 0) { dprintf("kvm VAR_1 failed %s\n", strerror(-VAR_2)); abort(); } kvm_flush_coalesced_mmio_buffer(); VAR_2 = 0; switch (VAR_1->exit_reason) { case KVM_EXIT_IO:
dprintf("handle_io\n"); VAR_2 = kvm_handle_io(VAR_1->io.port,
(uint8_t *)VAR_1 + VAR_1->io.data_offset,
VAR_1->io.direction,
VAR_1->io.size,
VAR_1->io.count); break; case KVM_EXIT_MMIO:
dprintf("handle_mmio\n"); cpu_physical_memory_rw(VAR_1->mmio.phys_addr,
VAR_1->mmio.data,
VAR_1->mmio.len,
VAR_1->mmio.is_write); VAR_2 = 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(); VAR_2 = 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"); #ifdef KVM_CAP_SET_GUEST_DEBUG
if (kvm_arch_debug(&VAR_1->debug.arch)) { gdb_set_stop_cpu(VAR_0); vm_stop(EXCP_DEBUG); VAR_0->exception_index = EXCP_DEBUG; return 0; } VAR_2 = 1; #endif
break; default:
dprintf("kvm_arch_handle_exit\n"); VAR_2 = kvm_arch_handle_exit(VAR_0, VAR_1); break; } } while (VAR_2 > 0); if (VAR_0->exit_request) { VAR_0->exit_request = 0; VAR_0->exception_index = EXCP_INTERRUPT; } return VAR_2; }