Revision 7c80eef8 kvm-all.c
b/kvm-all.c | ||
---|---|---|
730 | 730 |
return 1; |
731 | 731 |
} |
732 | 732 |
|
733 |
#ifdef KVM_CAP_INTERNAL_ERROR_DATA |
|
734 |
static void kvm_handle_internal_error(CPUState *env, struct kvm_run *run) |
|
735 |
{ |
|
736 |
|
|
737 |
if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) { |
|
738 |
int i; |
|
739 |
|
|
740 |
fprintf(stderr, "KVM internal error. Suberror: %d\n", |
|
741 |
run->internal.suberror); |
|
742 |
|
|
743 |
for (i = 0; i < run->internal.ndata; ++i) { |
|
744 |
fprintf(stderr, "extra data[%d]: %"PRIx64"\n", |
|
745 |
i, (uint64_t)run->internal.data[i]); |
|
746 |
} |
|
747 |
} |
|
748 |
cpu_dump_state(env, stderr, fprintf, 0); |
|
749 |
if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) { |
|
750 |
fprintf(stderr, "emulation failure\n"); |
|
751 |
} |
|
752 |
/* FIXME: Should trigger a qmp message to let management know |
|
753 |
* something went wrong. |
|
754 |
*/ |
|
755 |
vm_stop(0); |
|
756 |
} |
|
757 |
#endif |
|
758 |
|
|
733 | 759 |
void kvm_flush_coalesced_mmio_buffer(void) |
734 | 760 |
{ |
735 | 761 |
#ifdef KVM_CAP_COALESCED_MMIO |
... | ... | |
845 | 871 |
case KVM_EXIT_EXCEPTION: |
846 | 872 |
DPRINTF("kvm_exit_exception\n"); |
847 | 873 |
break; |
874 |
#ifdef KVM_CAP_INTERNAL_ERROR_DATA |
|
875 |
case KVM_EXIT_INTERNAL_ERROR: |
|
876 |
kvm_handle_internal_error(env, run); |
|
877 |
break; |
|
878 |
#endif |
|
848 | 879 |
case KVM_EXIT_DEBUG: |
849 | 880 |
DPRINTF("kvm_exit_debug\n"); |
850 | 881 |
#ifdef KVM_CAP_SET_GUEST_DEBUG |
Also available in: Unified diff