kvm/x86: add sending hyper-v crash notification to user space
Sending of notification is done by exiting vcpu to user space if KVM_REQ_HV_CRASH is enabled for vcpu. At exit to user space the kvm_run structure contains system_event with type KVM_SYSTEM_EVENT_CRASH to notify about guest crash occurred. Signed-off-by: Andrey Smetanin <asmetanin@virtuozzo.com> Signed-off-by: Denis V. Lunev <den@openvz.org> Reviewed-by: Peter Hornyack <peterhornyack@google.com> CC: Paolo Bonzini <pbonzini@redhat.com> CC: Gleb Natapov <gleb@kernel.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e7d9513b60
commit
2ce7918990
|
@ -3277,6 +3277,7 @@ should put the acknowledged interrupt vector into the 'epr' field.
|
|||
struct {
|
||||
#define KVM_SYSTEM_EVENT_SHUTDOWN 1
|
||||
#define KVM_SYSTEM_EVENT_RESET 2
|
||||
#define KVM_SYSTEM_EVENT_CRASH 3
|
||||
__u32 type;
|
||||
__u64 flags;
|
||||
} system_event;
|
||||
|
@ -3296,6 +3297,10 @@ Valid values for 'type' are:
|
|||
KVM_SYSTEM_EVENT_RESET -- the guest has requested a reset of the VM.
|
||||
As with SHUTDOWN, userspace can choose to ignore the request, or
|
||||
to schedule the reset to occur in the future and may call KVM_RUN again.
|
||||
KVM_SYSTEM_EVENT_CRASH -- the guest crash occurred and the guest
|
||||
has requested a crash condition maintenance. Userspace can choose
|
||||
to ignore the request, or to gather VM memory core dump and/or
|
||||
reset/shutdown of the VM.
|
||||
|
||||
/* Fix the size of the union. */
|
||||
char padding[256];
|
||||
|
|
|
@ -6263,6 +6263,12 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
|
|||
vcpu_scan_ioapic(vcpu);
|
||||
if (kvm_check_request(KVM_REQ_APIC_PAGE_RELOAD, vcpu))
|
||||
kvm_vcpu_reload_apic_access_page(vcpu);
|
||||
if (kvm_check_request(KVM_REQ_HV_CRASH, vcpu)) {
|
||||
vcpu->run->exit_reason = KVM_EXIT_SYSTEM_EVENT;
|
||||
vcpu->run->system_event.type = KVM_SYSTEM_EVENT_CRASH;
|
||||
r = 0;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) {
|
||||
|
|
|
@ -139,6 +139,7 @@ static inline bool is_error_page(struct page *page)
|
|||
#define KVM_REQ_DISABLE_IBS 24
|
||||
#define KVM_REQ_APIC_PAGE_RELOAD 25
|
||||
#define KVM_REQ_SMI 26
|
||||
#define KVM_REQ_HV_CRASH 27
|
||||
|
||||
#define KVM_USERSPACE_IRQ_SOURCE_ID 0
|
||||
#define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1
|
||||
|
|
|
@ -317,6 +317,7 @@ struct kvm_run {
|
|||
struct {
|
||||
#define KVM_SYSTEM_EVENT_SHUTDOWN 1
|
||||
#define KVM_SYSTEM_EVENT_RESET 2
|
||||
#define KVM_SYSTEM_EVENT_CRASH 3
|
||||
__u32 type;
|
||||
__u64 flags;
|
||||
} system_event;
|
||||
|
|
Loading…
Reference in New Issue