LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: KarimAllah Ahmed <karahmed@amazon.de>
To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	pbonzini@redhat.com, rkrcmar@redhat.com
Cc: KarimAllah Ahmed <karahmed@amazon.de>
Subject: [PATCH v2 09/12] KVM/X86: Use kvm_vcpu_map in emulator_cmpxchg_emulated
Date: Sun, 15 Apr 2018 23:53:15 +0200	[thread overview]
Message-ID: <1523829198-13236-10-git-send-email-karahmed@amazon.de> (raw)
In-Reply-To: <1523829198-13236-1-git-send-email-karahmed@amazon.de>

Use kvm_vcpu_map in emulator_cmpxchg_emulated since using
kvm_vcpu_gpa_to_page() and kmap() will only work for guest memory that has
a "struct page".

Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
---
v1 -> v2:
- Update to match the new API return codes
---
 arch/x86/kvm/x86.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 4633674..8d08c11 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -5162,9 +5162,9 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
 				     unsigned int bytes,
 				     struct x86_exception *exception)
 {
+	struct kvm_host_map map;
 	struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
 	gpa_t gpa;
-	struct page *page;
 	char *kaddr;
 	bool exchanged;
 
@@ -5181,12 +5181,11 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
 	if (((gpa + bytes - 1) & PAGE_MASK) != (gpa & PAGE_MASK))
 		goto emul_write;
 
-	page = kvm_vcpu_gfn_to_page(vcpu, gpa >> PAGE_SHIFT);
-	if (is_error_page(page))
+	if (kvm_vcpu_map(vcpu, gpa_to_gfn(gpa), &map))
 		goto emul_write;
 
-	kaddr = kmap_atomic(page);
-	kaddr += offset_in_page(gpa);
+	kaddr = map.hva + offset_in_page(gpa);
+
 	switch (bytes) {
 	case 1:
 		exchanged = CMPXCHG_TYPE(u8, kaddr, old, new);
@@ -5203,8 +5202,8 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
 	default:
 		BUG();
 	}
-	kunmap_atomic(kaddr);
-	kvm_release_page_dirty(page);
+
+	kvm_vcpu_unmap(&map);
 
 	if (!exchanged)
 		return X86EMUL_CMPXCHG_FAILED;
-- 
2.7.4

  parent reply	other threads:[~2018-04-15 21:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-15 21:53 [PATCH v2 00/12] KVM/X86: Introduce a new guest mapping interface KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 01/12] X86/nVMX: handle_vmon: Read 4 bytes from guest memory KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 02/12] X86/nVMX: handle_vmptrld: Copy the VMCS12 directly " KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 03/12] X86/nVMX: Update the PML table without mapping and unmapping the page KarimAllah Ahmed
2018-04-16 11:10   ` Paolo Bonzini
2018-04-15 21:53 ` [PATCH v2 04/12] X86/KVM: Handle PFNs outside of kernel reach when touching GPTEs KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 05/12] KVM: Introduce a new guest mapping API KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 06/12] KVM/nVMX: Use kvm_vcpu_map when mapping the L1 MSR bitmap KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 07/12] KVM/nVMX: Use kvm_vcpu_map when mapping the virtual APIC page KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 08/12] KVM/nVMX: Use kvm_vcpu_map when mapping the posted interrupt descriptor table KarimAllah Ahmed
2018-04-15 21:53 ` KarimAllah Ahmed [this message]
2018-04-15 21:53 ` [PATCH v2 10/12] KVM/X86: hyperv: Use kvm_vcpu_map in synic_clear_sint_msg_pending KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 11/12] KVM/X86: hyperv: Use kvm_vcpu_map in synic_deliver_msg KarimAllah Ahmed
2018-04-15 21:53 ` [PATCH v2 12/12] KVM/nSVM: Use the new mapping API for mapping guest memory KarimAllah Ahmed
2018-04-16 11:10 ` [PATCH v2 00/12] KVM/X86: Introduce a new guest mapping interface Paolo Bonzini
2018-04-16 12:09   ` Raslan, KarimAllah
2018-04-16 12:27     ` Paolo Bonzini
2018-05-15 16:06       ` Konrad Rzeszutek Wilk
2018-05-22 15:43         ` Raslan, KarimAllah
2018-07-10 12:06   ` Raslan, KarimAllah
2018-07-11 10:26     ` Paolo Bonzini

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=1523829198-13236-10-git-send-email-karahmed@amazon.de \
    --to=karahmed@amazon.de \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --subject='Re: [PATCH v2 09/12] KVM/X86: Use kvm_vcpu_map in emulator_cmpxchg_emulated' \
    /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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).