linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wanpeng Li <kernellwp@gmail.com>
To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>
Subject: [PATCH v2 2/5] KVM: X86: Introduce residency msrs read/write operations
Date: Tue, 11 Jun 2019 15:34:08 +0800	[thread overview]
Message-ID: <1560238451-19495-3-git-send-email-wanpengli@tencent.com> (raw)
In-Reply-To: <1560238451-19495-1-git-send-email-wanpengli@tencent.com>

From: Wanpeng Li <wanpengli@tencent.com>

Both live migration and vCPU migrates between pCPUs possibly to set the MSRs 
in the host to change the delta between the host and guest values. This patch 
introduces msrs read/write operations in the host.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
---
 arch/x86/kvm/x86.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index cc97aae..841a794 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1331,6 +1331,51 @@ void kvm_enable_efer_bits(u64 mask)
 }
 EXPORT_SYMBOL_GPL(kvm_enable_efer_bits);
 
+u64 kvm_residency_read_host(struct kvm_vcpu *vcpu,
+		struct kvm_residency_msr *msr)
+{
+	u64 host_value;
+	rdmsrl_safe(msr->index, &host_value);
+	return kvm_scale_tsc(vcpu, host_value);
+}
+
+struct kvm_residency_msr *find_residency_msr_index(struct kvm_vcpu *vcpu,
+		u32 msr_index)
+{
+	int i;
+	struct kvm_residency_msr *msr;
+
+	for (i = 0; i < NR_CORE_RESIDENCY_MSRS; i++)
+		if (vcpu->arch.core_cstate_msrs[i].index == msr_index) {
+			msr = &vcpu->arch.core_cstate_msrs[i];
+			return msr;
+		}
+
+	return NULL;
+}
+
+u64 kvm_residency_read(struct kvm_vcpu *vcpu, u32 msr_index)
+{
+	struct kvm_residency_msr *msr = find_residency_msr_index(vcpu, msr_index);
+
+	if (msr)
+		return msr->value +
+			(msr->delta_from_host ? kvm_residency_read_host(vcpu, msr) : 0);
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kvm_residency_read);
+
+void kvm_residency_write(struct kvm_vcpu *vcpu,
+		u32 msr_index, u64 value)
+{
+	struct kvm_residency_msr *msr = find_residency_msr_index(vcpu, msr_index);
+
+	if (msr)
+		msr->value = value -
+			(msr->delta_from_host ? kvm_residency_read_host(vcpu, msr) : 0);
+}
+EXPORT_SYMBOL_GPL(kvm_residency_write);
+
 /*
  * Writes msr value into into the appropriate "register".
  * Returns 0 on success, non-0 otherwise.
-- 
2.7.4


  parent reply	other threads:[~2019-06-11  7:34 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-11  7:34 [PATCH v2 0/5] KVM: X86: Add virtual C-states residency msrs support Wanpeng Li
2019-06-11  7:34 ` [PATCH v2 1/5] KVM: X86: Dynamic allocate core residency msr state Wanpeng Li
2019-06-12 16:01   ` Sean Christopherson
2019-06-13  0:43     ` Wanpeng Li
2019-06-11  7:34 ` Wanpeng Li [this message]
2019-06-11  7:34 ` [PATCH v2 3/5] KVM: X86: setup residency msrs during vCPU creation Wanpeng Li
2019-06-11  7:34 ` [PATCH v2 4/5] KVM: VMX: Add get/set residency msrs logic Wanpeng Li
2019-06-11  7:34 ` [PATCH v2 5/5] KVM: X86: Save/restore residency values when vCPU migrations Wanpeng Li

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=1560238451-19495-3-git-send-email-wanpengli@tencent.com \
    --to=kernellwp@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.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 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).