From nobody Sun Oct 5 00:09:23 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFBD72D2390; Tue, 12 Aug 2025 02:56:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754967391; cv=none; b=TQkFcjXHyvJ8WB9fFd0LHluE3FH/RKdRNMDPTroWZDegu8Jw26NG8eLMcsdquQJ+3vkhTE3yDDgNR01XrxlKoxthwMGl62d9KkJc5MuZbBbYP69vJQ+sNvbrNMfNxIT8sBV9ES7b2NizEmTUtQu1y1J8CFYmCp9Bkdbb5xi5gKU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754967391; c=relaxed/simple; bh=E/2yq9i/iT6Va/MtK28zHkNUQ3UnGlyNG+Ds6CvNXpM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BCp6upsr9apyRwlRMDbTEz2JCJs3tTtrTpxGghB3XNR/C6vlMmr/bKkLWfLt9mbV8lcUr0gyJ9TJruuhaRRLblBalHm+ELtZwFjc3J012+g06BTPrE03HR3r8Sa5JaM0yFSvqovXPXIXcmMWaagTqeImul2sHzV9Cmb2emR3KHQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Im49Yzqm; arc=none smtp.client-ip=198.175.65.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Im49Yzqm" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1754967390; x=1786503390; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E/2yq9i/iT6Va/MtK28zHkNUQ3UnGlyNG+Ds6CvNXpM=; b=Im49YzqmzPfkMyJPfRsdCMIL9tKpV5IFOn9DZw8ZktzywAU/Q0iPr2/w Nb51Nkg/c7whj5hjSliipN/VNhtvnH+HoRUKS86SrqoNCMjgIQTp7AnUk bPEOvRlAQVnsuRI8s3+v5CK6aJyAHjvDHOyZpdsbh+wRq3mhL1/O56wDL LlTYdiRI67/NEA3APT33D+aLyN0iyc4K2GpPqTkPHDVjkvZatuktGzpG6 tkzKxqp707kkChU8SIaR9v29TbHYfRfE7t2UXI/dEJsXdyztla7QnL6Lc o8BOxAy5wLwHFU2ZdtZHpaMTInk+2GaoBPbEYosX+6TTJ38bxeSk9R2Tu Q==; X-CSE-ConnectionGUID: I9DnUG7kQQCIkKDHWqTf3g== X-CSE-MsgGUID: 3qe4zZZPSlOOVM5EY0Ii7w== X-IronPort-AV: E=McAfee;i="6800,10657,11518"; a="57100448" X-IronPort-AV: E=Sophos;i="6.17,284,1747724400"; d="scan'208";a="57100448" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Aug 2025 19:56:24 -0700 X-CSE-ConnectionGUID: lGi/MtTPRsydcVqe2AIBcQ== X-CSE-MsgGUID: vnU5tKEPTDK4vn1nsBj4WA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.17,284,1747724400"; d="scan'208";a="171321232" Received: from 984fee019967.jf.intel.com ([10.165.54.94]) by fmviesa004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Aug 2025 19:56:24 -0700 From: Chao Gao To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: mlevitsk@redhat.com, rick.p.edgecombe@intel.com, weijiang.yang@intel.com, xin@zytor.com, Sean Christopherson , Mathias Krause , John Allen , Chao Gao , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" Subject: [PATCH v12 03/24] KVM: x86: Add kvm_msr_{read,write}() helpers Date: Mon, 11 Aug 2025 19:55:11 -0700 Message-ID: <20250812025606.74625-4-chao.gao@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250812025606.74625-1-chao.gao@intel.com> References: <20250812025606.74625-1-chao.gao@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Yang Weijiang Wrap __kvm_{get,set}_msr() into two new helpers for KVM usage and use the helpers to replace existing usage of the raw functions. kvm_msr_{read,write}() are KVM-internal helpers, i.e. used when KVM needs to get/set a MSR value for emulating CPU behavior, i.e., host_initiated =3D= =3D %true in the helpers. Suggested-by: Sean Christopherson Signed-off-by: Yang Weijiang Reviewed-by: Maxim Levitsky Tested-by: Mathias Krause Tested-by: John Allen Signed-off-by: Chao Gao --- arch/x86/include/asm/kvm_host.h | 3 ++- arch/x86/kvm/cpuid.c | 2 +- arch/x86/kvm/x86.c | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_hos= t.h index 86e4d0b8469b..39b93642e7d2 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -2151,9 +2151,10 @@ void kvm_enable_efer_bits(u64); bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer); int kvm_emulate_msr_read(struct kvm_vcpu *vcpu, u32 index, u64 *data); int kvm_emulate_msr_write(struct kvm_vcpu *vcpu, u32 index, u64 data); -int __kvm_get_msr(struct kvm_vcpu *vcpu, u32 index, u64 *data, bool host_i= nitiated); int __kvm_emulate_msr_read(struct kvm_vcpu *vcpu, u32 index, u64 *data); int __kvm_emulate_msr_write(struct kvm_vcpu *vcpu, u32 index, u64 data); +int kvm_msr_read(struct kvm_vcpu *vcpu, u32 index, u64 *data); +int kvm_msr_write(struct kvm_vcpu *vcpu, u32 index, u64 data); int kvm_emulate_rdmsr(struct kvm_vcpu *vcpu); int kvm_emulate_wrmsr(struct kvm_vcpu *vcpu); int kvm_emulate_as_nop(struct kvm_vcpu *vcpu); diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index e2836a255b16..30fd18700972 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -2001,7 +2001,7 @@ bool kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *= ebx, if (function =3D=3D 7 && index =3D=3D 0) { u64 data; if ((*ebx & (feature_bit(RTM) | feature_bit(HLE))) && - !__kvm_get_msr(vcpu, MSR_IA32_TSX_CTRL, &data, true) && + !kvm_msr_read(vcpu, MSR_IA32_TSX_CTRL, &data) && (data & TSX_CTRL_CPUID_CLEAR)) *ebx &=3D ~(feature_bit(RTM) | feature_bit(HLE)); } else if (function =3D=3D 0x80000007) { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 65c787bcfe8b..726028eb647b 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1898,8 +1898,8 @@ static int kvm_set_msr_ignored_check(struct kvm_vcpu = *vcpu, * Returns 0 on success, non-0 otherwise. * Assumes vcpu_load() was already called. */ -int __kvm_get_msr(struct kvm_vcpu *vcpu, u32 index, u64 *data, - bool host_initiated) +static int __kvm_get_msr(struct kvm_vcpu *vcpu, u32 index, u64 *data, + bool host_initiated) { struct msr_data msr; int ret; @@ -1925,6 +1925,16 @@ int __kvm_get_msr(struct kvm_vcpu *vcpu, u32 index, = u64 *data, return ret; } =20 +int kvm_msr_write(struct kvm_vcpu *vcpu, u32 index, u64 data) +{ + return __kvm_set_msr(vcpu, index, data, true); +} + +int kvm_msr_read(struct kvm_vcpu *vcpu, u32 index, u64 *data) +{ + return __kvm_get_msr(vcpu, index, data, true); +} + static int kvm_get_msr_ignored_check(struct kvm_vcpu *vcpu, u32 index, u64 *data, bool host_initiated) { @@ -12463,7 +12473,7 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool ini= t_event) MSR_IA32_MISC_ENABLE_BTS_UNAVAIL; =20 __kvm_set_xcr(vcpu, 0, XFEATURE_MASK_FP); - __kvm_set_msr(vcpu, MSR_IA32_XSS, 0, true); + kvm_msr_write(vcpu, MSR_IA32_XSS, 0); } =20 /* All GPRs except RDX (handled below) are zeroed on RESET/INIT. */ --=20 2.47.1