[PATCH] KVM: MMU: Detect oom conditions and propagate error to userspace
Signed-off-by: Avi Kivity <avi@qumranet.com> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committed by
Linus Torvalds

parent
714b93da1a
commit
e2dec939db
@@ -852,6 +852,7 @@ static int pf_interception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||
u64 fault_address;
|
||||
u32 error_code;
|
||||
enum emulation_result er;
|
||||
int r;
|
||||
|
||||
if (is_external_interrupt(exit_int_info))
|
||||
push_irq(vcpu, exit_int_info & SVM_EVTINJ_VEC_MASK);
|
||||
@@ -860,7 +861,12 @@ static int pf_interception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||
|
||||
fault_address = vcpu->svm->vmcb->control.exit_info_2;
|
||||
error_code = vcpu->svm->vmcb->control.exit_info_1;
|
||||
if (!kvm_mmu_page_fault(vcpu, fault_address, error_code)) {
|
||||
r = kvm_mmu_page_fault(vcpu, fault_address, error_code);
|
||||
if (r < 0) {
|
||||
spin_unlock(&vcpu->kvm->lock);
|
||||
return r;
|
||||
}
|
||||
if (!r) {
|
||||
spin_unlock(&vcpu->kvm->lock);
|
||||
return 1;
|
||||
}
|
||||
@@ -1398,6 +1404,7 @@ static int svm_vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
||||
u16 fs_selector;
|
||||
u16 gs_selector;
|
||||
u16 ldt_selector;
|
||||
int r;
|
||||
|
||||
again:
|
||||
do_interrupt_requests(vcpu, kvm_run);
|
||||
@@ -1565,7 +1572,8 @@ again:
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (handle_exit(vcpu, kvm_run)) {
|
||||
r = handle_exit(vcpu, kvm_run);
|
||||
if (r > 0) {
|
||||
if (signal_pending(current)) {
|
||||
++kvm_stat.signal_exits;
|
||||
post_kvm_run_save(vcpu, kvm_run);
|
||||
@@ -1581,7 +1589,7 @@ again:
|
||||
goto again;
|
||||
}
|
||||
post_kvm_run_save(vcpu, kvm_run);
|
||||
return 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
static void svm_flush_tlb(struct kvm_vcpu *vcpu)
|
||||
|
Reference in New Issue
Block a user