Update kvm.h in qemu-kvm tree
PATCH RESEND 1/2 Update kvm.h in qemu-kvm tree
Update struct kvm_run and KVM_EXIT_* constants to match the one in the kernel-space tree
Signed-off-by Mohammed Gamal <[email protected]>
--- kvm/include/linux/kvm.h | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-)
kvm/include/linux/kvm.h +7 -0
@@ -135,6 +135,10 @@ struct kvm_pit_config {#define KVM_EXIT_S390_RESET 14#define KVM_EXIT_DCR 15#define KVM_EXIT_NMI 16 +#define KVM_EXIT_INTERNAL_ERROR 17 + +/* For KVM_EXIT_INTERNAL_ERROR */ +#define KVM_INTERNAL_ERROR_EMULATION 1/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ struct kvm_run {
@@ -221,6 +225,9 @@ struct kvm_run {__u32 data;__u8 is_write; } dcr; +struct { +__u32 suberror; + } internal;/* Fix the size of the union. */ char padding[256 ]; };
Signature · 1 line
1.6.0.4
PATCH RESEND 2/2 Handle emulation failure in userspace
Since we return to userspace from KVM on invalid state emulation failure, let qemu handle it.
Signed-off-by Mohammed Gamal <[email protected]>
--- qemu-kvm.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
qemu-kvm.c +8 -0
@@ -1029,6 +1029,14 @@ int kvm_run(kvm_vcpu_context_t vcpu, void *env) r =kvm_s390_handle_reset (kvm, vcpu, run);break ;#endif +case KVM_EXIT_INTERNAL_ERROR : +kvm_show_regs (vcpu); +fprintf (stderr,"\nKVM internal error. Suberror: %d\n" , + run->internal.suberror); +if (run->internal.suberror ==KVM_INTERNAL_ERROR_EMULATION ) +fprintf (stderr,"emulation failure, check dmesg for details\n" ); +abort (); +break ;default :if (kvm_arch_run (vcpu)) {fprintf (stderr,"unhandled vm exit: 0x%x\n" , run->exit_reason);
Signature · 1 line
1.6.0.4