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