Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp4095009ybi; Tue, 11 Jun 2019 00:35:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqwoSV12IO/G2BA5tDFVXLqFA8M4fJLdlZ1i/5o8o4ZjcqMKEqHAp5J/OP4AjxInrfVrPUup X-Received: by 2002:a65:4806:: with SMTP id h6mr18498937pgs.299.1560238558206; Tue, 11 Jun 2019 00:35:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560238558; cv=none; d=google.com; s=arc-20160816; b=sEHgf/a3tj1efWylziPxIMtatoSj4+MGl1VguiPxszr26I3GuJ0p8AQM0dIc7aXxUt DwNL78BlZZ0Po59JBXLoi3hMeTCN2FiBaDSxOQJNeMCCrNSM5C3tbkpv8qkZizZ9DyTq Lx2Cg87zQGDacYENhB3k3CKndT71hiODpHhPS0lioyB9XGt1/eoTmAPNtnVvAOY8ikiU ecJjdFdKZ50BDIe/9mrKDGXk4JrFx9/pPylDJSy8cJuwA4JDOf5+6d6MS0/Jho1dGGl7 rBihl36M66UUmghpHkT+ICWF6L5LLce+NdpVZDSScSIpgmDWMuV7Yf/qPEKVIGDCSaah ThHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=owbqSh211AKwsKjq12eXf8pHk0Rdlubwz6kTs8w1ndw=; b=tOFQkiD3/sKvvvm/uv3Usqp1i1tHuySDs1gVFu95onkp3DTNrYY2wjuA+PyLoRXAH6 fM0ug8Ziwfu0+W/t8nI1zc+5tWPXQIDLUsTVyUiqrXxNwH8dgU4uNbetwLVISTtTOzOe ogGvnr6xCD5bdPDb5taQ81Nv7JEjTCeyTWrLl+VWh3oa3B43ipZKLPzje3vQviDLNSr4 vqkyCKhTW/dxZQg/RcBOWFxISFeP2CfIq7vyal2bnp96xiv+YhXwRmIeQ/+/6ELQ325w grrgU/auX9bc5zBOeawcmQaDqShO/oeh+wI+qzS8HD/B9/E6Md8OLw2+fjztnuno9KB5 xWsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="I/HrQ0Pv"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 19si12162226pfp.172.2019.06.11.00.35.43; Tue, 11 Jun 2019 00:35:58 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="I/HrQ0Pv"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404221AbfFKHe1 (ORCPT + 99 others); Tue, 11 Jun 2019 03:34:27 -0400 Received: from mail-pl1-f196.google.com ([209.85.214.196]:35611 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404104AbfFKHe0 (ORCPT ); Tue, 11 Jun 2019 03:34:26 -0400 Received: by mail-pl1-f196.google.com with SMTP id p1so4731698plo.2; Tue, 11 Jun 2019 00:34:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=owbqSh211AKwsKjq12eXf8pHk0Rdlubwz6kTs8w1ndw=; b=I/HrQ0PvzhoU0g8k5X+f3U0EluhM3zVifZKtvm0froNQlYfHHDoAFUxZa5cfNyt7f6 +s9/t7coYUCM05sOeoswz6jg01pmOqCu1I3i+xy93VUArSTtRmsLAtmwdjwzkRgzdon1 AElg7KuJyq96fGxwKEc8fVXs8bxy1RgSRhZ+M9W2ShJN7PBDuqhMKCawyru8N9oA3vmW fo8MDu2XT3QuLM+6Q7DLbfICAqXgvFpcHMf8kKngCywUNq0bgjQLdHq6WQxuF9gGIOFc kaXzxnp1RmqrEp5/nO1E+8iIemGV3oEaHyFgz3k883wUaAY9zfkJYn1ApASjPuJvN1t/ zY4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=owbqSh211AKwsKjq12eXf8pHk0Rdlubwz6kTs8w1ndw=; b=cHC6ggbVYE6Tq1GqOKq1bvkVOdSsRTd4eZ0wwE2o3MKgBkL8ZKN5SQeFdNV9tSFe8C Jo3lYjbVg4Gk417Od9kQ1AugnoWDbO2EMZTyYQL+kpHXYErdm7AtsTmFo858e21JjFnR hxVrHIGuLOschRQ0g7oJgXC5V1rdbnnkASOUA802iy1m2qMdspNtMCz4O/p7ovS3Wc0H bKrznXp9t8/qhNGFHY23vZ5CHjFQsAGRQM/b2ubP/qRucbZdJsi9Nek1+TWb+WO3fZ/3 FyVq7c+Q53EQC+lBBWO+0WrJO1/FCYSHPDU9Gb6Z5cZHPr37WfQWfopdj5tStxaSjiKN 1WMA== X-Gm-Message-State: APjAAAXziZpKWVGMjDaaQY4h0EgBYal06/obERjG+bb5mtgL4ERMlHjX Qb7S64368O//ia/llMaGkkwznqu0 X-Received: by 2002:a17:902:a516:: with SMTP id s22mr35377839plq.178.1560238465784; Tue, 11 Jun 2019 00:34:25 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id 14sm6860800pfj.36.2019.06.11.00.34.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 11 Jun 2019 00:34:25 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Subject: [PATCH v2 2/5] KVM: X86: Introduce residency msrs read/write operations Date: Tue, 11 Jun 2019 15:34:08 +0800 Message-Id: <1560238451-19495-3-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1560238451-19495-1-git-send-email-wanpengli@tencent.com> References: <1560238451-19495-1-git-send-email-wanpengli@tencent.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wanpeng Li 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 Cc: Radim Krčmář Signed-off-by: Wanpeng Li --- 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