Revision bb44e0d1 kvm-all.c
b/kvm-all.c | ||
---|---|---|
817 | 817 |
#ifdef KVM_CAP_INTERNAL_ERROR_DATA |
818 | 818 |
static int kvm_handle_internal_error(CPUState *env, struct kvm_run *run) |
819 | 819 |
{ |
820 |
|
|
820 |
fprintf(stderr, "KVM internal error."); |
|
821 | 821 |
if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) { |
822 | 822 |
int i; |
823 | 823 |
|
824 |
fprintf(stderr, "KVM internal error. Suberror: %d\n", |
|
825 |
run->internal.suberror); |
|
826 |
|
|
824 |
fprintf(stderr, " Suberror: %d\n", run->internal.suberror); |
|
827 | 825 |
for (i = 0; i < run->internal.ndata; ++i) { |
828 | 826 |
fprintf(stderr, "extra data[%d]: %"PRIx64"\n", |
829 | 827 |
i, (uint64_t)run->internal.data[i]); |
830 | 828 |
} |
829 |
} else { |
|
830 |
fprintf(stderr, "\n"); |
|
831 | 831 |
} |
832 |
cpu_dump_state(env, stderr, fprintf, 0); |
|
833 | 832 |
if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) { |
834 | 833 |
fprintf(stderr, "emulation failure\n"); |
835 | 834 |
if (!kvm_arch_stop_on_emulation_error(env)) { |
835 |
cpu_dump_state(env, stderr, fprintf, 0); |
|
836 | 836 |
return 0; |
837 | 837 |
} |
838 | 838 |
} |
... | ... | |
966 | 966 |
ret = 1; |
967 | 967 |
break; |
968 | 968 |
case KVM_EXIT_UNKNOWN: |
969 |
DPRINTF("kvm_exit_unknown\n"); |
|
970 |
ret = -1; |
|
971 |
break; |
|
972 |
case KVM_EXIT_FAIL_ENTRY: |
|
973 |
DPRINTF("kvm_exit_fail_entry\n"); |
|
974 |
ret = -1; |
|
975 |
break; |
|
976 |
case KVM_EXIT_EXCEPTION: |
|
977 |
DPRINTF("kvm_exit_exception\n"); |
|
969 |
fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n", |
|
970 |
(uint64_t)run->hw.hardware_exit_reason); |
|
978 | 971 |
ret = -1; |
979 | 972 |
break; |
980 | 973 |
#ifdef KVM_CAP_INTERNAL_ERROR_DATA |
... | ... | |
1001 | 994 |
} while (ret > 0); |
1002 | 995 |
|
1003 | 996 |
if (ret < 0) { |
997 |
cpu_dump_state(env, stderr, fprintf, 0); |
|
1004 | 998 |
vm_stop(0); |
1005 | 999 |
env->exit_request = 1; |
1006 | 1000 |
} |
Also available in: Unified diff