All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Hoo <robert.hu@linux.intel.com>
To: seanjc@google.com, pbonzini@redhat.com,
	yu.c.zhang@linux.intel.com, yuan.yao@linux.intel.com,
	jingqi.liu@intel.com, weijiang.yang@intel.com,
	chao.gao@intel.com, isaku.yamahata@intel.com
Cc: kirill.shutemov@linux.intel.com, kvm@vger.kernel.org,
	Robert Hoo <robert.hu@linux.intel.com>
Subject: [PATCH v4 8/9] KVM: x86: emulation: Apply LAM when emulating data access
Date: Thu,  9 Feb 2023 10:40:21 +0800	[thread overview]
Message-ID: <20230209024022.3371768-9-robert.hu@linux.intel.com> (raw)
In-Reply-To: <20230209024022.3371768-1-robert.hu@linux.intel.com>

When in KVM emulation, calculated a LA for data access, apply LAM if
guest is at that moment LAM active, so that the following canonical check
can pass.

Signed-off-by: Robert Hoo <robert.hu@linux.intel.com>
---
 arch/x86/kvm/emulate.c |  6 ++++++
 arch/x86/kvm/x86.h     | 13 +++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index 5cc3efa0e21c..d52037151133 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -700,6 +700,12 @@ static __always_inline int __linearize(struct x86_emulate_ctxt *ctxt,
 	*max_size = 0;
 	switch (mode) {
 	case X86EMUL_MODE_PROT64:
+		/*
+		 * LAM applies only on data access
+		 */
+		if (!fetch && is_lam_active(ctxt->vcpu))
+			la = kvm_untagged_addr(la, ctxt->vcpu);
+
 		*linear = la;
 		va_bits = ctxt_virt_addr_bits(ctxt);
 		if (!__is_canonical_address(la, va_bits))
diff --git a/arch/x86/kvm/x86.h b/arch/x86/kvm/x86.h
index 7228895d4a6f..9397e9f4e061 100644
--- a/arch/x86/kvm/x86.h
+++ b/arch/x86/kvm/x86.h
@@ -135,6 +135,19 @@ static inline int is_long_mode(struct kvm_vcpu *vcpu)
 #endif
 }
 
+#ifdef CONFIG_X86_64
+static inline bool is_lam_active(struct kvm_vcpu *vcpu)
+{
+	return kvm_read_cr3(vcpu) & (X86_CR3_LAM_U48 | X86_CR3_LAM_U57) ||
+	       kvm_read_cr4_bits(vcpu, X86_CR4_LAM_SUP);
+}
+#else
+static inline bool is_lam_active(struct kvm_vcpu *vcpu)
+{
+	return false;
+}
+#endif
+
 static inline bool is_64_bit_mode(struct kvm_vcpu *vcpu)
 {
 	int cs_db, cs_l;
-- 
2.31.1


  parent reply	other threads:[~2023-02-09  2:42 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-09  2:40 [PATCH v4 0/9] Linear Address Masking (LAM) KVM Enabling Robert Hoo
2023-02-09  2:40 ` [PATCH v4 1/9] KVM: x86: Intercept CR4.LAM_SUP when LAM feature is enabled in guest Robert Hoo
2023-02-09  9:21   ` Chao Gao
2023-02-09 12:48     ` Robert Hoo
2023-02-10  3:29   ` Yang, Weijiang
2023-02-10  5:02     ` Robert Hoo
2023-02-10 16:30       ` Sean Christopherson
2023-02-14  1:27   ` Binbin Wu
2023-02-14  6:11     ` Robert Hoo
2023-02-14  9:00       ` Binbin Wu
2023-02-14 12:24         ` Robert Hoo
2023-02-14 12:36           ` Robert Hoo
2023-02-16  5:31           ` Binbin Wu
2023-02-16  5:54             ` Robert Hoo
2023-02-09  2:40 ` [PATCH v4 2/9] KVM: x86: MMU: Clear CR3 LAM bits when allocate shadow root Robert Hoo
2023-02-09  9:55   ` Chao Gao
2023-02-09 13:02     ` Robert Hoo
2023-02-14  2:55       ` Binbin Wu
2023-02-15  1:17         ` Robert Hoo
2023-02-16  2:14         ` Robert Hoo
2023-02-10  3:38   ` Yang, Weijiang
2023-02-11  3:12     ` Robert Hoo
2023-02-09  2:40 ` [PATCH v4 3/9] KVM: x86: MMU: Commets update Robert Hoo
2023-02-10  6:59   ` Chao Gao
2023-02-10  7:55     ` Robert Hoo
2023-02-10 16:54       ` Sean Christopherson
2023-02-09  2:40 ` [PATCH v4 4/9] KVM: x86: MMU: Integrate LAM bits when build guest CR3 Robert Hoo
2023-02-10 14:04   ` Chao Gao
2023-02-11  6:24     ` Robert Hoo
2023-02-11  6:29       ` Robert Hoo
2023-02-09  2:40 ` [PATCH v4 5/9] KVM: x86: Untag LAM bits when applicable Robert Hoo
2023-02-10 15:04   ` Chao Gao
2023-02-11  5:57     ` Robert Hoo
2023-02-16  6:37       ` Binbin Wu
2023-02-09  2:40 ` [PATCH v4 6/9] KVM: x86: When KVM judges CR3 valid or not, consider LAM bits Robert Hoo
2023-02-13  2:01   ` Chao Gao
2023-02-13 13:25     ` Robert Hoo
2023-02-14  6:18       ` Chao Gao
2023-02-14  7:00         ` Chao Gao
2023-02-18  5:44         ` Robert Hoo
2023-02-09  2:40 ` [PATCH v4 7/9] KVM: x86: When guest set CR3, handle LAM bits semantics Robert Hoo
2023-02-13  3:31   ` Chao Gao
2023-02-14  5:28     ` Robert Hoo
2023-02-14  6:48       ` Chao Gao
2023-02-09  2:40 ` Robert Hoo [this message]
2023-02-13  3:53   ` [PATCH v4 8/9] KVM: x86: emulation: Apply LAM when emulating data access Chao Gao
2023-02-14  5:38     ` Robert Hoo
2023-02-09  2:40 ` [PATCH v4 9/9] KVM: x86: LAM: Expose LAM CPUID to user space VMM Robert Hoo
2023-02-21  5:47   ` Binbin Wu
2023-02-21  7:26     ` Robert Hoo
2023-02-21  8:26       ` Binbin Wu
2023-02-21 11:13         ` Yu Zhang
2023-02-21 13:18           ` Binbin Wu
2023-02-21 14:36             ` Robert Hoo
2023-02-09  6:15 ` [PATCH v4 0/9] Linear Address Masking (LAM) KVM Enabling Chao Gao
2023-02-09 12:25   ` Robert Hoo
2023-02-09 17:27     ` Sean Christopherson
2023-02-10  2:07       ` Robert Hoo
2023-02-10  3:17         ` Chao Gao
2023-02-10  8:41           ` Robert Hoo
2023-02-10  8:39         ` Robert Hoo
2023-02-10  9:22           ` Chao Gao
2023-02-13  9:02 ` Binbin Wu
2023-02-13 13:16   ` Robert Hoo

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=20230209024022.3371768-9-robert.hu@linux.intel.com \
    --to=robert.hu@linux.intel.com \
    --cc=chao.gao@intel.com \
    --cc=isaku.yamahata@intel.com \
    --cc=jingqi.liu@intel.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=weijiang.yang@intel.com \
    --cc=yu.c.zhang@linux.intel.com \
    --cc=yuan.yao@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.