public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 23/47] KVM: SVM: clean up nested_svm_exit_handled_msr
Date: Wed, 26 Aug 2009 13:29:45 +0300	[thread overview]
Message-ID: <1251282609-12835-24-git-send-email-avi@redhat.com> (raw)
In-Reply-To: <1251282609-12835-1-git-send-email-avi@redhat.com>

From: Joerg Roedel <joerg.roedel@amd.com>

This patch changes nested svm to call nested_svm_exit_handled_msr
directly and not through nested_svm_do.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/svm.c |   37 ++++++++++++++++++++++---------------
 1 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 5e55a1b..518d578 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1483,15 +1483,20 @@ static int nested_svm_do(struct vcpu_svm *svm,
 	return retval;
 }
 
-static int nested_svm_exit_handled_msr(struct vcpu_svm *svm,
-				       void *arg1, void *arg2,
-				       void *opaque)
+static bool nested_svm_exit_handled_msr(struct vcpu_svm *svm)
 {
-	struct vmcb *nested_vmcb = (struct vmcb *)arg1;
-	u8 *msrpm = (u8 *)arg2;
-	u32 t0, t1;
-	u32 msr = svm->vcpu.arch.regs[VCPU_REGS_RCX];
 	u32 param = svm->vmcb->control.exit_info_1 & 1;
+	u32 msr = svm->vcpu.arch.regs[VCPU_REGS_RCX];
+	struct vmcb *nested_vmcb;
+	bool ret = false;
+	u32 t0, t1;
+	u8 *msrpm;
+
+	nested_vmcb = nested_svm_map(svm, svm->nested.vmcb, KM_USER0);
+	msrpm       = nested_svm_map(svm, svm->nested.vmcb_msrpm, KM_USER1);
+
+	if (!nested_vmcb || !msrpm)
+		goto out;
 
 	if (!(nested_vmcb->control.intercept & (1ULL << INTERCEPT_MSR_PROT)))
 		return 0;
@@ -1512,13 +1517,17 @@ static int nested_svm_exit_handled_msr(struct vcpu_svm *svm,
 		t0 %= 8;
 		break;
 	default:
-		return 1;
-		break;
+		ret = true;
+		goto out;
 	}
-	if (msrpm[t1] & ((1 << param) << t0))
-		return 1;
 
-	return 0;
+	ret = msrpm[t1] & ((1 << param) << t0);
+
+out:
+	nested_svm_unmap(nested_vmcb, KM_USER0);
+	nested_svm_unmap(msrpm, KM_USER1);
+
+	return ret;
 }
 
 static int nested_svm_exit_handled(struct vcpu_svm *svm, bool kvm_override)
@@ -1548,9 +1557,7 @@ static int nested_svm_exit_handled(struct vcpu_svm *svm, bool kvm_override)
 
 	switch (exit_code) {
 	case SVM_EXIT_MSR:
-		if (nested_svm_do(svm, svm->nested.vmcb, svm->nested.vmcb_msrpm,
-				  NULL, nested_svm_exit_handled_msr))
-			vmexit = true;
+		vmexit = nested_svm_exit_handled_msr(svm);
 		break;
 	case SVM_EXIT_READ_CR0 ... SVM_EXIT_READ_CR8: {
 		u32 cr_bits = 1 << (exit_code - SVM_EXIT_READ_CR0);
-- 
1.6.4.1


  parent reply	other threads:[~2009-08-26 10:39 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-26 10:29 [PATCH 00/47] KVM updates for 2.6.32 merge window (4/4) Avi Kivity
2009-08-26 10:29 ` [PATCH 01/47] KVM: remove superfluous NULL pointer check in kvm_inject_pit_timer_irqs() Avi Kivity
2009-08-26 10:29 ` [PATCH 02/47] KVM: MMU: make __kvm_mmu_free_some_pages handle empty list Avi Kivity
2009-08-26 10:29 ` [PATCH 03/47] KVM: MMU: fix bogus alloc_mmu_pages assignment Avi Kivity
2009-08-26 10:29 ` [PATCH 04/47] KVM: x86: Disallow hypercalls for guest callers in rings > 0 Avi Kivity
2009-08-26 10:29 ` [PATCH 05/47] KVM: VMX: Optimize vmx_get_cpl() Avi Kivity
2009-08-26 14:15   ` Roel Kluin
2009-08-26 14:33     ` Avi Kivity
2009-08-26 10:29 ` [PATCH 06/47] KVM: ignore reads to perfctr msrs Avi Kivity
2009-08-26 10:29 ` [PATCH 07/47] KVM: fix EFER read buffer overflow Avi Kivity
2009-08-26 10:29 ` [PATCH 08/47] KVM: Call kvm_vcpu_kick() inside pic spinlock Avi Kivity
2009-08-26 10:29 ` [PATCH 09/47] KVM: Call ack notifiers from PIC when guest OS acks an IRQ Avi Kivity
2009-08-26 10:29 ` [PATCH 10/47] KVM: Replace pic_lock()/pic_unlock() with direct call to spinlock functions Avi Kivity
2009-08-26 10:29 ` [PATCH 11/47] x86: Export kmap_atomic_to_page() Avi Kivity
2009-08-26 10:29 ` [PATCH 12/47] KVM: SVM: add helper functions for global interrupt flag Avi Kivity
2009-08-26 10:29 ` [PATCH 13/47] KVM: SVM: optimize nested #vmexit Avi Kivity
2009-08-26 10:29 ` [PATCH 14/47] KVM: SVM: optimize nested vmrun Avi Kivity
2009-08-26 10:29 ` [PATCH 15/47] KVM: SVM: copy only necessary parts of the control area on vmrun/vmexit Avi Kivity
2009-08-26 10:29 ` [PATCH 16/47] KVM: SVM: complete interrupts after handling nested exits Avi Kivity
2009-08-26 10:29 ` [PATCH 17/47] KVM: SVM: move nested svm state into seperate struct Avi Kivity
2009-08-26 10:29 ` [PATCH 18/47] KVM: SVM: cache nested intercepts Avi Kivity
2009-08-26 10:29 ` [PATCH 19/47] KVM: SVM: consolidate nested_svm_exit_handled Avi Kivity
2009-08-26 10:29 ` [PATCH 20/47] KVM: SVM: do nested vmexit in nested_svm_exit_handled Avi Kivity
2009-08-26 10:29 ` [PATCH 21/47] KVM: SVM: simplify nested_svm_check_exception Avi Kivity
2009-08-26 10:29 ` [PATCH 22/47] KVM: SVM: get rid of nested_svm_vmexit_real Avi Kivity
2009-08-26 10:29 ` Avi Kivity [this message]
2009-08-26 10:29 ` [PATCH 24/47] KVM: SVM: clean up nestec vmload/vmsave paths Avi Kivity
2009-08-26 10:29 ` [PATCH 25/47] KVM: SVM: clean up nested vmrun path Avi Kivity
2009-08-26 10:29 ` [PATCH 26/47] KVM: SVM: remove nested_svm_do and helper functions Avi Kivity
2009-08-26 10:29 ` [PATCH 27/47] KVM: SVM: handle errors in vmrun emulation path appropriatly Avi Kivity
2009-08-26 10:29 ` [PATCH 28/47] KVM: SVM: move special nested exit handling to separate function Avi Kivity
2009-08-26 10:29 ` [PATCH 29/47] KVM: SVM: remove unnecessary is_nested check from svm_cpu_run Avi Kivity
2009-08-26 10:29 ` [PATCH 30/47] KVM: SVM: move nested_svm_intr main logic out of if-clause Avi Kivity
2009-08-26 10:29 ` [PATCH 31/47] KVM: SVM: check for nested VINTR flag in svm_interrupt_allowed Avi Kivity
2009-08-26 10:29 ` [PATCH 32/47] KVM: SVM: enable nested svm by default Avi Kivity
2009-08-26 10:29 ` [PATCH 33/47] KVM: Update cr8 intercept when APIC TPR is changed by userspace Avi Kivity
2009-08-26 10:29 ` [PATCH 34/47] KVM: SVM: Drop tlb flush workaround in npt Avi Kivity
2009-08-26 10:29 ` [PATCH 35/47] KVM: Move #endif KVM_CAP_IRQ_ROUTING to correct place Avi Kivity
2009-08-26 10:29 ` [PATCH 36/47] KVM: VMX: Adjust rflags if in real mode emulation Avi Kivity
2009-08-26 10:29 ` [PATCH 37/47] KVM: When switching to a vm8086 task, load segments as 16-bit Avi Kivity
2009-08-26 10:30 ` [PATCH 38/47] KVM: Rename x86_emulate.c to emulate.c Avi Kivity
2009-08-26 10:30 ` [PATCH 39/47] Documentation: Update KVM list email address Avi Kivity
2009-08-26 10:30 ` [PATCH 40/47] KVM: export kvm_para.h Avi Kivity
2009-08-26 10:30 ` [PATCH 41/47] KVM: Add __KERNEL__ guards to exported headers Avi Kivity
2009-08-26 10:30 ` [PATCH 42/47] KVM: Add missing #include Avi Kivity
2009-08-26 10:30 ` [PATCH 43/47] KVM: x86 emulator: Add adc and sbb missing decoder flags Avi Kivity
2009-08-26 10:30 ` [PATCH 44/47] KVM: Use kvm_{read,write}_guest_virt() to read and write segment descriptors Avi Kivity
2009-08-26 10:30 ` [PATCH 45/47] KVM: VMX: Fix EPT with WP bit change during paging Avi Kivity
2009-08-26 10:30 ` [PATCH 46/47] KVM: Protect update_cr8_intercept() when running without an apic Avi Kivity
2009-08-26 10:30 ` [PATCH 47/47] KVM: Document KVM_CAP_IRQCHIP Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1251282609-12835-24-git-send-email-avi@redhat.com \
    --to=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox