[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1248872192-30881-12-git-send-email-joerg.roedel@amd.com>
Date: Wed, 29 Jul 2009 14:56:31 +0200
From: Joerg Roedel <joerg.roedel@....com>
To: Avi Kivity <avi@...hat.com>
CC: Alexander Graf <agraf@...e.de>, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org, Joerg Roedel <joerg.roedel@....com>
Subject: [PATCH 11/12] kvm/svm: handle #pf intercepts in nested_svm_exit_handled directly
Signed-off-by: Joerg Roedel <joerg.roedel@....com>
---
arch/x86/kvm/svm.c | 26 ++++++++++++++++++++++++--
1 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 1a44e43..381ed38 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1498,6 +1498,9 @@ static int nested_svm_exit_handled_msr(struct vcpu_svm *svm,
return 0;
}
+/*
+ * If this function returns true, this #vmexit was already handled
+ */
static int nested_svm_exit_handled(struct vcpu_svm *svm, bool kvm_override)
{
u32 exit_code = svm->vmcb->control.exit_code;
@@ -1515,8 +1518,27 @@ static int nested_svm_exit_handled(struct vcpu_svm *svm, bool kvm_override)
break;
/* When we're shadowing, trap PFs */
case SVM_EXIT_EXCP_BASE + PF_VECTOR:
- if (!npt_enabled)
- return 0;
+ if (!npt_enabled) {
+ u64 fault_address;
+ u32 error_code;
+
+ fault_address = svm->vmcb->control.exit_info_2;
+ error_code = svm->vmcb->control.exit_info_1;
+
+ kvm_mmu_page_fault(&svm->vcpu,
+ fault_address,
+ error_code);
+
+ /*
+ * If we are still nested here the pending
+ * irqs/exceptions must be reinjected
+ */
+ //if (is_nested(svm))
+ // svm_complete_interrupts(svm);
+
+ return true;
+ }
+
break;
default:
break;
--
1.6.3.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists