# HG changeset patch # User Jerone Young <[EMAIL PROTECTED]> # Date 1193849564 18000 # Node ID 278fbab64f4b40dd4c40a7b07cb92e9b19aedd71 # Parent a694904630e6805dfe51f4eed16e18b7ac2ed504 Move kvm_run_abi10 to kvmctl-x86.c
Signed-off-by: Jerone Young <[EMAIL PROTECTED]> diff --git a/libkvm/libkvm-x86.c b/libkvm/libkvm-x86.c --- a/libkvm/libkvm-x86.c +++ b/libkvm/libkvm-x86.c @@ -510,3 +510,79 @@ static int handle_mmio_abi10(kvm_context return r; } +int kvm_run_abi10(kvm_context_t kvm, int vcpu) +{ + int r; + int fd = kvm->vcpu_fd[vcpu]; + struct kvm_run_abi10 *run = (struct kvm_run_abi10 *)kvm->run[vcpu]; + +again: + run->request_interrupt_window = try_push_interrupts(kvm); + r = pre_kvm_run(kvm, vcpu); + if (r) + return r; + r = ioctl(fd, KVM_RUN, 0); + post_kvm_run(kvm, vcpu); + + run->io_completed = 0; + if (r == -1 && errno != EINTR) { + r = -errno; + printf("kvm_run: %m\n"); + return r; + } + if (r == -1) { + r = handle_io_window(kvm); + goto more; + } + if (1) { + switch (run->exit_reason) { + case KVM_EXIT_UNKNOWN: + fprintf(stderr, "unhandled vm exit: 0x%x vcpu_id %d\n", + (unsigned)run->hw.hardware_exit_reason, vcpu); + kvm_show_regs(kvm, vcpu); + abort(); + break; + case KVM_EXIT_FAIL_ENTRY: + fprintf(stderr, "kvm_run: failed entry, reason %u\n", + (unsigned)run->fail_entry.hardware_entry_failure_reason & 0xffff); + return -ENOEXEC; + break; + case KVM_EXIT_EXCEPTION: + fprintf(stderr, "exception %d (%x)\n", + run->ex.exception, + run->ex.error_code); + kvm_show_regs(kvm, vcpu); + kvm_show_code(kvm, vcpu); + abort(); + break; + case KVM_EXIT_IO: + r = handle_io_abi10(kvm, run, vcpu); + break; + case KVM_EXIT_DEBUG: + r = handle_debug(kvm, vcpu); + break; + case KVM_EXIT_MMIO: + r = handle_mmio_abi10(kvm, run); + break; + case KVM_EXIT_HLT: + r = handle_halt(kvm, vcpu); + break; + case KVM_EXIT_IRQ_WINDOW_OPEN: + break; + case KVM_EXIT_SHUTDOWN: + r = handle_shutdown(kvm, vcpu); + break; + default: + fprintf(stderr, "unhandled vm exit: 0x%x\n", run->exit_reason); + kvm_show_regs(kvm, vcpu); + abort(); + break; + } + } +more: + if (!r) + goto again; + return r; +} + + diff --git a/libkvm/libkvm-x86.h b/libkvm/libkvm-x86.h --- a/libkvm/libkvm-x86.h +++ b/libkvm/libkvm-x86.h @@ -56,4 +56,6 @@ int kvm_set_lapic(kvm_context_t kvm, int int kvm_set_lapic(kvm_context_t kvm, int vcpu, struct kvm_lapic_state *s); #endif +int kvm_run_abi10(kvm_context_t kvm, int vcpu); + #endif diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -911,81 +911,6 @@ __u64 kvm_get_cr8(kvm_context_t kvm, int return kvm->run[vcpu]->cr8; } -static int kvm_run_abi10(kvm_context_t kvm, int vcpu) -{ - int r; - int fd = kvm->vcpu_fd[vcpu]; - struct kvm_run_abi10 *run = (struct kvm_run_abi10 *)kvm->run[vcpu]; - -again: - run->request_interrupt_window = try_push_interrupts(kvm); - r = pre_kvm_run(kvm, vcpu); - if (r) - return r; - r = ioctl(fd, KVM_RUN, 0); - post_kvm_run(kvm, vcpu); - - run->io_completed = 0; - if (r == -1 && errno != EINTR) { - r = -errno; - printf("kvm_run: %m\n"); - return r; - } - if (r == -1) { - r = handle_io_window(kvm); - goto more; - } - if (1) { - switch (run->exit_reason) { - case KVM_EXIT_UNKNOWN: - fprintf(stderr, "unhandled vm exit: 0x%x vcpu_id %d\n", - (unsigned)run->hw.hardware_exit_reason, vcpu); - kvm_show_regs(kvm, vcpu); - abort(); - break; - case KVM_EXIT_FAIL_ENTRY: - fprintf(stderr, "kvm_run: failed entry, reason %u\n", - (unsigned)run->fail_entry.hardware_entry_failure_reason & 0xffff); - return -ENOEXEC; - break; - case KVM_EXIT_EXCEPTION: - fprintf(stderr, "exception %d (%x)\n", - run->ex.exception, - run->ex.error_code); - kvm_show_regs(kvm, vcpu); - kvm_show_code(kvm, vcpu); - abort(); - break; - case KVM_EXIT_IO: - r = handle_io_abi10(kvm, run, vcpu); - break; - case KVM_EXIT_DEBUG: - r = handle_debug(kvm, vcpu); - break; - case KVM_EXIT_MMIO: - r = handle_mmio_abi10(kvm, run); - break; - case KVM_EXIT_HLT: - r = handle_halt(kvm, vcpu); - break; - case KVM_EXIT_IRQ_WINDOW_OPEN: - break; - case KVM_EXIT_SHUTDOWN: - r = handle_shutdown(kvm, vcpu); - break; - default: - fprintf(stderr, "unhandled vm exit: 0x%x\n", run->exit_reason); - kvm_show_regs(kvm, vcpu); - abort(); - break; - } - } -more: - if (!r) - goto again; - return r; -} - int kvm_run(kvm_context_t kvm, int vcpu) { int r; ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel