KVM: propagate SHUTDOWN intercept to userspace on SVM
PATCH 1/1 KVM: propagate SHUTDOWN intercept to userspace on SVM
This patch implements forwarding of SHUTDOWN intercepts from the guest on to userspace on AMD SVM. A SHUTDOWN event occurs when the guest produces a triple fault (e.g. on reboot). This also fixes the bug that a guest reboot actually causes a host reboot under some circumstances.
Signed-off-by Joerg Roedel <[email protected]>
Signature · 3 lines
Joerg Roedel Operating System Research Center AMD Saxony LLC & Co. KG
drivers/kvm/svm.c +15 -0
@@ -502,6 +502,7 @@ static void init_vmcb(struct vmcb *vmcb) (1ULL <<INTERCEPT_IOIO_PROT ) | (1ULL <<INTERCEPT_MSR_PROT ) | (1ULL <<INTERCEPT_TASK_SWITCH ) | + (1ULL <<INTERCEPT_SHUTDOWN ) | (1ULL <<INTERCEPT_VMRUN ) | (1ULL <<INTERCEPT_VMMCALL ) | (1ULL << INTERCEPT_VMLOAD) |
@@ -892,6 +893,19 @@ static int pf_interception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)return 0 ; } +static int shutdown_interception (struct kvm_vcpu *vcpu,struct kvm_run *kvm_run) +{ +/* +* VMCB is undefined after a SHUTDOWN intercept +* so reinitalize it +*/ +memset (vcpu->svm->vmcb,0 ,PAGE_SIZE ); +init_vmcb (vcpu->svm->vmcb); + + kvm_run->exit_reason =KVM_EXIT_SHUTDOWN ; +return 0 ; +} +static int io_get_override (struct kvm_vcpu *vcpu,struct vmcb_seg **seg,int *addr_override)
@@ -1249,6 +1263,7 @@ static int (*svm_exit_handlers[])(struct kvm_vcpu *vcpu, [SVM_EXIT_IOIO] = io_interception, [SVM_EXIT_MSR] = msr_interception, [SVM_EXIT_TASK_SWITCH] = task_switch_interception, + [SVM_EXIT_SHUTDOWN] = shutdown_interception, [SVM_EXIT_VMRUN] = invalid_op_interception, [SVM_EXIT_VMMCALL] = invalid_op_interception, [SVM_EXIT_VMLOAD] = invalid_op_interception,
include/linux/kvm.h +1 -0
@@ -46,6 +46,7 @@ enum kvm_exit_reason {KVM_EXIT_HLT =5 ,KVM_EXIT_MMIO =6 ,KVM_EXIT_IRQ_WINDOW_OPEN =7 , + KVM_EXIT_SHUTDOWN = 8, };/* for KVM_RUN */
Avi Kivity
AppliedQuoted 6 lines · Joerg Roedel
This patch implements forwarding of SHUTDOWN intercepts from the guest on to userspace on AMD SVM. A SHUTDOWN event occurs when the guest produces a triple fault (e.g. on reboot). This also fixes the bug that a guest reboot actually causes a host reboot under some circumstances.
Applied, thanks.
Signature · 8 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV