From nobody Sat Jul 25 20:46:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 69D67344D9D; Mon, 13 Jul 2026 18:10:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966229; cv=none; b=BQyg8bh5aotKMJkUP0saR0uPPgpovOWAnMr84EflSWqvwIQuvs7tgD+QHpNnRB5iWe19RmCFT9FkkwxMgpzf4jqjPU9QM7zZWInEjbrq7buqv8IsWM+Sv77E7L+Z4xtpVgCl/MzW1IP0/XdyYbImZM0p4H7nX9NzXVTHtkl46k4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966229; c=relaxed/simple; bh=PdyoCxhWzQPCEYXZIOD+s1mV5fgcRcifMCpnwebJ2Yg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Te0OS/zIKO62gQE5JzJ7ihbo/SmcezlWg44/FAETyyoigtBcWyChJ/ah3fyNQWbUvwrk8ELwecmtkVttSi1IX1nyYWT19QRleI9+vS5rFk8Fz8QA+4Yg/znLG5bazmgy+cJRoqmYnJCtBAyyG+KVYQDjI9n3W0SNzP80s4eQfOk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Iga8eYlJ; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Iga8eYlJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 18D561F00A3A; Mon, 13 Jul 2026 18:10:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783966228; bh=laAAuph6fYRNISHIwFKYYSgJ64Ls1B+RoDXHUEIXeS4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Iga8eYlJ8ECbWrK5ojNlszqjsju81f0CCgu5gWTjxrc0wOszc2irRRFyk2Zc5U0BJ 43kvBo0k47L5w9cYfXqyiUJBCAe+T3Q9Y6e/xoMeDoo/+iqlm6ocVjQGzTa5XdhLTZ XJqIFLlsan656BvdVKtjIoFN01rJl/GKOsJZlBst3UJor4kws+tPWovpZLFLutHmPL gTaJWluVbp5MBJRFI+tLFauFA82W/YU3jcYDA1FBLBcgHESOjcYmdHOAk+5qFF2CMd yBLoZgIbkKACHWJWC7gOVEoo8v6ReZeWfvKTXjwWI5YeeH77WKc90cGKC7zHZK7YuC YgX7Yr+haI7Bg== From: Yosry Ahmed To: Sean Christopherson Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed , stable@vger.kernel.org Subject: [PATCH v3 1/5] KVM: x86: Move enabling EFER.SVME and EFER.LMSLE to generic EFER setup Date: Mon, 13 Jul 2026 18:10:16 +0000 Message-ID: <20260713181020.2735367-2-yosry@kernel.org> X-Mailer: git-send-email 2.55.0.141.g00534a21ce-goog In-Reply-To: <20260713181020.2735367-1-yosry@kernel.org> References: <20260713181020.2735367-1-yosry@kernel.org> 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" Move SVM-specific EFER bit enablement to generic x86 code, with the rest of EFER bit enablement. Unifying the code for EFER bit enablement allows for a later change to re-initialize EFER bits on module init. No functional change intended. Cc: stable@vger.kernel.org Suggested-by: Sean Christopherson Signed-off-by: Yosry Ahmed --- arch/x86/kvm/svm/svm.c | 4 ---- arch/x86/kvm/x86.c | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 91286d46d13ad..09799fd8ef38f 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -5628,10 +5628,6 @@ static __init int svm_hardware_setup(void) =20 if (nested) { pr_info("Nested Virtualization enabled\n"); - kvm_enable_efer_bits(EFER_SVME); - if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) - kvm_enable_efer_bits(EFER_LMSLE); - r =3D nested_svm_init_msrpm_merge_offsets(); if (r) return r; diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 1f5dc685f0490..ca01a2f2ec466 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6921,6 +6921,12 @@ static void kvm_setup_efer_caps(void) =20 if (kvm_cpu_cap_has(X86_FEATURE_AUTOIBRS)) kvm_enable_efer_bits(EFER_AUTOIBRS); + + if (kvm_cpu_cap_has(X86_FEATURE_SVM)) { + kvm_enable_efer_bits(EFER_SVME); + if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) + kvm_enable_efer_bits(EFER_LMSLE); + } } =20 static void kvm_nested_ops_update(const struct kvm_x86_nested_ops *nested_= ops) --=20 2.55.0.141.g00534a21ce-goog From nobody Sat Jul 25 20:46:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 CA3F934D4F9; Mon, 13 Jul 2026 18:10:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966229; cv=none; b=MNAuZJiv3NyoOW2bK0zBJZbknr3owRzG47ujNzsWAnU/wwCqZ2zf4x4OHqBMQIFXdfFnkVTpcofz8VE10plBgY0f8iTgOaJCepLboIO5UotMOwFP+XVrfc/sRINEDQyaHIus0GT90Kd+s7/p6mE/NhUfND0yJsqRQA3o8f+ywk4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966229; c=relaxed/simple; bh=CEzJP8iXiE81KaVA8s3E4s9qC3Tqhw4yjd9MVLZenc0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jbspkKjLEa3MaehrrIiOPX8MaDsFpORi8PNeuj8DTdzemn+WZFoM2n8Ze2KhUgPWqRDJf6/rUtbM44dytX7FUTSCpqpwk3nycRGg961c/MZXjy8weVV6zlwbWykXgxSC3xaJFJadLoOIm3KWFJx1Ss9qu/j6Fc0mCgGGt42tGGQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hYQfDQye; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hYQfDQye" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 78FDA1F00A3D; Mon, 13 Jul 2026 18:10:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783966228; bh=O75oVI8HOnhEwJFlZoZQsUnH7nY5IlDX63zUhNhf9S8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hYQfDQyeMHI0+PkgbJj9rhLbZXj/XW1EhFLhlczvQ/kuY1JE/4/AXBGfI5oFMNJOr wt/K46o2/poZoxRxZhOJjo++URh6j9dF4+J+h5LPDmmwALZdEBP203MHYjkSj6q33+ Icaa5JPERAlzjTMscZ9OwF8+LbzM/kGw4SFE+XlzpP3vuWt4NP0imsXyETO+WFzERj HaxhYJ2GxQTtmurc19zPvt1pscGST8J2+hv3yNUHCiMvVzi2TGYdtGYomj1oS4xqCY lLCPj5PjzmcmQPZxfESUEivFA0of3DkoRuP4nk+RhFHqIXOzi988Vp2iUvamsIEHBL MsvqDHciAc78g== From: Yosry Ahmed To: Sean Christopherson Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed , stable@vger.kernel.org Subject: [PATCH v3 2/5] KVM: x86: Disallow EFER.LME and EFER.LMA if long mode is not supported Date: Mon, 13 Jul 2026 18:10:17 +0000 Message-ID: <20260713181020.2735367-3-yosry@kernel.org> X-Mailer: git-send-email 2.55.0.141.g00534a21ce-goog In-Reply-To: <20260713181020.2735367-1-yosry@kernel.org> References: <20260713181020.2735367-1-yosry@kernel.org> 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" Remove EFER.LME and EFER.LMA from EFER reserved bits only if long mode is actually supported. KVM does check long-mode support before allowing the bits for guest writes and userspace writes through KVM_SET_SREGS* (in __kvm_valid_efer()), but userspace writes through KVM_SET_MSRS only check reserved bits. In practice, this doesn't really matter. The true motiviation is getting rid of the #ifdeffery when initializing efer_reserved_bits. Cc: stable@vger.kernel.org Signed-off-by: Yosry Ahmed --- arch/x86/kvm/msrs.c | 10 +--------- arch/x86/kvm/x86.c | 3 +++ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c index c230b18d87e38..67481429ad6b8 100644 --- a/arch/x86/kvm/msrs.c +++ b/arch/x86/kvm/msrs.c @@ -19,16 +19,8 @@ bool __read_mostly report_ignored_msrs =3D true; module_param(report_ignored_msrs, bool, 0644); EXPORT_SYMBOL_FOR_KVM_INTERNAL(report_ignored_msrs); =20 -/* EFER defaults: - * - enable syscall per default because its emulated by KVM - * - enable LME and LMA per default on 64 bit KVM - */ -#ifdef CONFIG_X86_64 -static -u64 __read_mostly efer_reserved_bits =3D ~((u64)(EFER_SCE | EFER_LME | EFE= R_LMA)); -#else +/* Enable syscall by default because its emulated by KVM */ static u64 __read_mostly efer_reserved_bits =3D ~((u64)EFER_SCE); -#endif =20 #define MAX_IO_MSRS 256 =20 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ca01a2f2ec466..f68424a985cda 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6913,6 +6913,9 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_setup_xss_caps); =20 static void kvm_setup_efer_caps(void) { + if (kvm_cpu_cap_has(X86_FEATURE_LM)) + kvm_enable_efer_bits(EFER_LME | EFER_LMA); + if (kvm_cpu_cap_has(X86_FEATURE_NX)) kvm_enable_efer_bits(EFER_NX); =20 --=20 2.55.0.141.g00534a21ce-goog From nobody Sat Jul 25 20:46:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 46E1C35201A; Mon, 13 Jul 2026 18:10:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966230; cv=none; b=gSvBPwgsH5pA5E956od1SeI254sygMIHd9PJr6r3TnU2wU3nkCJma8fi2KVeh00BHTRyw6of99xqOcdlzOgZe6VryAfw5n6nGLHt1VozoVQj0ihzgTQHSDAf9evrFSysroWzXr+qotQbsB8nHHIWUueNiOzLQMSaB7f3b0ui14I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966230; c=relaxed/simple; bh=IDqxay3NTB4CCLgYPJY66JPKcvOLrwrNCqZ0HbvZ75E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=deo1OdZNk0/+GjKKlACOkOu6w/2Qq2jN9oDt0okhEFDWSYWTd0oaxqVSfK/BRfK8VlGVY6Viy32NFxgYYtPo3M8u7FVU8HEI/nnsLmLsph3IrPwySjPIViqnb0QJJmE0JGZgK6cUeB9WVl7y2fEFJ9ZXTGGUOgPVH6wEn5xus5Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Tf7aWMwD; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Tf7aWMwD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8F821F00A3E; Mon, 13 Jul 2026 18:10:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783966229; bh=vzhwlEbKTgZAWFKcMtzkcmv3HB8/WBKsAoQsDcJh8r4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Tf7aWMwDbRRaTXcFMO3xahCA/yefHkm/0pAexF+k6S/M3jAoXoLZFRtbKME9d4+2k rWcdHgtk1U3MIwvkEMcD85/KPi/ftnrJoihwoY0zJubF9M5sl2GM6mpezFJ5p4KP4G 6Iv3SFpXZbsAlTeUV5FqEwve6rdXZ32Mumhx22Trv/E3YJo2aimoWIXdYENu/eBeXB FtnJVvHpPUPa3VVnkTq/gc/zFsAwfwYeWZ+o4S198wFOOPMJS18G0SYjSY6I9hKm7X kAlNeFp1GvYFPZcLIo9Qqb/neU7SuPRERpqa+n8HR1n8pez4D1OEdGXnmWY7YH+iE3 233A5Dcxrvo3w== From: Yosry Ahmed To: Sean Christopherson Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed , stable@vger.kernel.org Subject: [PATCH v3 3/5] KVM: x86: Always initialize EFER reserved bits on vendor initialization Date: Mon, 13 Jul 2026 18:10:18 +0000 Message-ID: <20260713181020.2735367-4-yosry@kernel.org> X-Mailer: git-send-email 2.55.0.141.g00534a21ce-goog In-Reply-To: <20260713181020.2735367-1-yosry@kernel.org> References: <20260713181020.2735367-1-yosry@kernel.org> 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" EFER reserved bits are statically initialized, and do not reset if a vendor module is re-loaded. For example, loading kvm_amd with nested=3D1 removes EFER.SVME (and potentially EFER.LMSLE) from the reserved bits. Reloading kvm_amd with nested=3D0 does not add them back, allowing userspace to set EFER.SVME with nested=3D0. Re-initializing EFER reserved bits before configuring them on vendor initialization. Cc: stable@vger.kernel.org Signed-off-by: Yosry Ahmed --- arch/x86/kvm/msrs.c | 10 ++++++++-- arch/x86/kvm/msrs.h | 1 + arch/x86/kvm/x86.c | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c index 67481429ad6b8..a7394bdae0295 100644 --- a/arch/x86/kvm/msrs.c +++ b/arch/x86/kvm/msrs.c @@ -19,8 +19,7 @@ bool __read_mostly report_ignored_msrs =3D true; module_param(report_ignored_msrs, bool, 0644); EXPORT_SYMBOL_FOR_KVM_INTERNAL(report_ignored_msrs); =20 -/* Enable syscall by default because its emulated by KVM */ -static u64 __read_mostly efer_reserved_bits =3D ~((u64)EFER_SCE); +static u64 __read_mostly efer_reserved_bits; =20 #define MAX_IO_MSRS 256 =20 @@ -650,6 +649,13 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_= data *msr_info) return 0; } =20 +void kvm_init_efer_bits(void) +{ + /* Enable syscall by default because its emulated by KVM */ + efer_reserved_bits =3D ~((u64)EFER_SCE); +} +EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_init_efer_bits); + void kvm_enable_efer_bits(u64 mask) { efer_reserved_bits &=3D ~mask; diff --git a/arch/x86/kvm/msrs.h b/arch/x86/kvm/msrs.h index 9c5c6b33e58f5..1f772e1717588 100644 --- a/arch/x86/kvm/msrs.h +++ b/arch/x86/kvm/msrs.h @@ -58,6 +58,7 @@ int kvm_get_set_one_reg(struct kvm_vcpu *vcpu, unsigned i= nt ioctl, int kvm_get_reg_list(struct kvm_vcpu *vcpu, struct kvm_reg_list __user *user_list); =20 +void kvm_init_efer_bits(void); 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); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f68424a985cda..83f608dad0605 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6913,6 +6913,8 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_setup_xss_caps); =20 static void kvm_setup_efer_caps(void) { + kvm_init_efer_bits(); + if (kvm_cpu_cap_has(X86_FEATURE_LM)) kvm_enable_efer_bits(EFER_LME | EFER_LMA); =20 --=20 2.55.0.141.g00534a21ce-goog From nobody Sat Jul 25 20:46:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 A82153537C7; Mon, 13 Jul 2026 18:10:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966232; cv=none; b=QiF8zzwGYN9t5YSEbyQbQI/ryPOQMRjQ/5wrJPjlngsThDipqwfgwd/3dD8dxXm8lbxk54oPgi6NC/5bQZTENPWj1F9G+j4ISuq7jsAIiJo457xU6TMcmdEhT9Z0xAMloGUJuKjVNeHKCaDDLZ87OCXtBf1mFYw13wiYyDBAMT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966232; c=relaxed/simple; bh=AJRuSTuddkXbW24z/b8GNYsqeagP5Oa/MR2ZYimUMTs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bSSrtovvDaEvhAszOhgwKLhG7bRtrctErnOZSdSV9ZXdBb4iKinrlmW7WQy0CJuw//wOdvhC2H9q9uFz33TLaHjf45UFyiDHCx1tZy2eLyL84F0Es/ydNysL79AsVkmREcuQzrAUlgmml3vMfqCVj1l9VD5Gn2dkurm+qkQjeIc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OESYIH40; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OESYIH40" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44BD51F000E9; Mon, 13 Jul 2026 18:10:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783966229; bh=4suZMk4zoyDPvF3wnpE9m6QUNbYKf58CpmE4xIgfaWM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=OESYIH40+bfxH+DEgZoMyu99AO8xAvLIISaI1NWeTqJAiKTbgaBOR2SQEHWLG4y97 BDXAg9R9Wj2gZ91ExIqUCc+HTSu+4jo7Ojhqp/2du0zKUoutW80zdfarSFJ8LNtOC3 Qyat1OwG5yiMO3hiCj82i6wl2q/WrdHPJrqnS1lBCylA7BuHc8Lg3Ag888gpk/+3p0 NubjelATgMc6ROg1vO2f267d3ki5bF69dnEs5GGgFb4SC7aR994+U3wWipwNEJDW7Y GICETWMk6f2flTrSfBBMvdFfdP0r+feDIeKCoVMNfUeslwap0j0dcwoEg7bcdgnBgl CeUwu7zvFuHZg== From: Yosry Ahmed To: Sean Christopherson Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed , Nikolay Borisov Subject: [PATCH v3 4/5] KVM: x86: Reverse the polarity of efer_reserved_bits Date: Mon, 13 Jul 2026 18:10:19 +0000 Message-ID: <20260713181020.2735367-5-yosry@kernel.org> X-Mailer: git-send-email 2.55.0.141.g00534a21ce-goog In-Reply-To: <20260713181020.2735367-1-yosry@kernel.org> References: <20260713181020.2735367-1-yosry@kernel.org> 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" In preparation for moving efer_reserved_bits into kvm_caps, reverse its polarity and make it efer_supported_bits, to be more consistent with other fields in kvm_caps. No functional change intended. Reviewed-by: Nikolay Borisov Signed-off-by: Yosry Ahmed --- arch/x86/kvm/msrs.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c index a7394bdae0295..8e33b87b5e8f0 100644 --- a/arch/x86/kvm/msrs.c +++ b/arch/x86/kvm/msrs.c @@ -19,7 +19,7 @@ bool __read_mostly report_ignored_msrs =3D true; module_param(report_ignored_msrs, bool, 0644); EXPORT_SYMBOL_FOR_KVM_INTERNAL(report_ignored_msrs); =20 -static u64 __read_mostly efer_reserved_bits; +static u64 __read_mostly efer_supported_bits; =20 #define MAX_IO_MSRS 256 =20 @@ -605,7 +605,7 @@ static bool __kvm_valid_efer(struct kvm_vcpu *vcpu, u64= efer) } bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer) { - if (efer & efer_reserved_bits) + if (efer & ~efer_supported_bits) return false; =20 return __kvm_valid_efer(vcpu, efer); @@ -618,7 +618,7 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_d= ata *msr_info) u64 efer =3D msr_info->data; int r; =20 - if (efer & efer_reserved_bits) + if (efer & ~efer_supported_bits) return 1; =20 if (!msr_info->host_initiated) { @@ -652,13 +652,13 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr= _data *msr_info) void kvm_init_efer_bits(void) { /* Enable syscall by default because its emulated by KVM */ - efer_reserved_bits =3D ~((u64)EFER_SCE); + efer_supported_bits =3D (u64)EFER_SCE; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_init_efer_bits); =20 void kvm_enable_efer_bits(u64 mask) { - efer_reserved_bits &=3D ~mask; + efer_supported_bits |=3D mask; } EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_enable_efer_bits); =20 --=20 2.55.0.141.g00534a21ce-goog From nobody Sat Jul 25 20:46:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 2925B353A77; Mon, 13 Jul 2026 18:10:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966231; cv=none; b=oEf4tnQDr+8g+7zaqOezZQkD1E/fcgx47SjTT9kr4skpaJQHMYNxIPlduDYWBE3x74N/zSXAjnnULCgkcFPFN7OYgN9oSRJy0JwCoSlVcaAajNp/thEE+icSGuD7dEoayTsNXnAdrrVSCw70S2hnjQQBTgnX1WSGj0CQ/0z0mtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783966231; c=relaxed/simple; bh=Cjai9FkO1FjM+YMoUuSQZX9ZAulIXaCjdQ/YsZnawmk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b3FlNUZ62xbkN9jmi0uBeTwqiCqKLDsC+COvR8rY+TyG1Jku1za6z/B/Z75C8UaLXuntuZSjb4fRcxiKLgoM9ko4BLs+YI3o96Sg3oBxBXuSOtECaR2Otq7tqlecIdTPKLzjs4KNGTm+ZLgwHqOiwpQEDYe96OPwQ0WdYIiTIxU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KfmXRlEV; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KfmXRlEV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A4CF71F00A3A; Mon, 13 Jul 2026 18:10:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783966229; bh=+Kj2nKKKZJOZw5AWs7XXDvbUgVFn+uMCRH9hohF5aZk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=KfmXRlEVladukTYfnu1UXvKc10wzqCyZvFOCvjMAscTfsY3pp9OzbK7oPinfQRc8M DB1ahveOxbTrUenAMONeO68eXmbzvgb7cnTTXe/0iQd+5Jyzn/09WfWuhDEKc5WdQ2 FwZUpRExwYmpxY3ZVYgRIW71/6h5RoGxxnlMAIEqLeNh3uwe0Af2XKZGZILCViZNXx SdhBgimXScyGAARHiM+Cm/6lyeAveQ1fcAoOST9Ut7omBzO3rz0ByMJQuwnfNj2XjC 5sflVHaWMxFox5LsYC+HjEo01C49GRvyixJzUgGNqe7RNxpKPWEdK4CPp8G1ZQbVv2 VpZtmvHH8/9Mg== From: Yosry Ahmed To: Sean Christopherson Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Yosry Ahmed , Nikolay Borisov Subject: [PATCH v3 5/5] KVM: x86: Move supported EFER bits to kvm_caps Date: Mon, 13 Jul 2026 18:10:20 +0000 Message-ID: <20260713181020.2735367-6-yosry@kernel.org> X-Mailer: git-send-email 2.55.0.141.g00534a21ce-goog In-Reply-To: <20260713181020.2735367-1-yosry@kernel.org> References: <20260713181020.2735367-1-yosry@kernel.org> 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" Supported EFER bits naturally fits into kvm_caps because it gets recomputed during vendor initialization (e.g. to account for EFER.SVME being allowed/disallowed based on nested being enabled/disabled). Move efer_supported_bits into kvm_caps as supported_efer_bits (for naming consistency). As the bitmask is now globally visible as part of kvm_caps, there's little use for helpers to enable/disable specific bits, so drop them and open-code updates to kvm_caps.supported_efer_bits. No functional change intended. Suggested-by: Sean Christopherson Reviewed-by: Nikolay Borisov Signed-off-by: Yosry Ahmed --- arch/x86/include/asm/kvm_host.h | 2 ++ arch/x86/kvm/msrs.c | 19 ++----------------- arch/x86/kvm/msrs.h | 2 -- arch/x86/kvm/x86.c | 15 ++++++++------- 4 files changed, 12 insertions(+), 26 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_hos= t.h index 58f156ae31e75..80b92ed440fa1 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -274,6 +274,8 @@ struct kvm_caps { u64 supported_xss; u64 supported_perf_cap; =20 + u64 supported_efer_bits; + u64 supported_quirks; u64 inapplicable_quirks; }; diff --git a/arch/x86/kvm/msrs.c b/arch/x86/kvm/msrs.c index 8e33b87b5e8f0..66fa7140d65d9 100644 --- a/arch/x86/kvm/msrs.c +++ b/arch/x86/kvm/msrs.c @@ -19,8 +19,6 @@ bool __read_mostly report_ignored_msrs =3D true; module_param(report_ignored_msrs, bool, 0644); EXPORT_SYMBOL_FOR_KVM_INTERNAL(report_ignored_msrs); =20 -static u64 __read_mostly efer_supported_bits; - #define MAX_IO_MSRS 256 =20 struct msr_bitmap_range { @@ -605,7 +603,7 @@ static bool __kvm_valid_efer(struct kvm_vcpu *vcpu, u64= efer) } bool kvm_valid_efer(struct kvm_vcpu *vcpu, u64 efer) { - if (efer & ~efer_supported_bits) + if (efer & ~kvm_caps.supported_efer_bits) return false; =20 return __kvm_valid_efer(vcpu, efer); @@ -618,7 +616,7 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_d= ata *msr_info) u64 efer =3D msr_info->data; int r; =20 - if (efer & ~efer_supported_bits) + if (efer & ~kvm_caps.supported_efer_bits) return 1; =20 if (!msr_info->host_initiated) { @@ -649,19 +647,6 @@ static int set_efer(struct kvm_vcpu *vcpu, struct msr_= data *msr_info) return 0; } =20 -void kvm_init_efer_bits(void) -{ - /* Enable syscall by default because its emulated by KVM */ - efer_supported_bits =3D (u64)EFER_SCE; -} -EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_init_efer_bits); - -void kvm_enable_efer_bits(u64 mask) -{ - efer_supported_bits |=3D mask; -} -EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_enable_efer_bits); - bool kvm_msr_allowed(struct kvm_vcpu *vcpu, u32 index, u32 type) { struct kvm_x86_msr_filter *msr_filter; diff --git a/arch/x86/kvm/msrs.h b/arch/x86/kvm/msrs.h index 1f772e1717588..7cc182a15b3b3 100644 --- a/arch/x86/kvm/msrs.h +++ b/arch/x86/kvm/msrs.h @@ -58,8 +58,6 @@ int kvm_get_set_one_reg(struct kvm_vcpu *vcpu, unsigned i= nt ioctl, int kvm_get_reg_list(struct kvm_vcpu *vcpu, struct kvm_reg_list __user *user_list); =20 -void kvm_init_efer_bits(void); -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); diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 83f608dad0605..a020b1cbb3f3e 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6913,24 +6913,25 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_setup_xss_caps); =20 static void kvm_setup_efer_caps(void) { - kvm_init_efer_bits(); + /* Enable syscall by default because its emulated by KVM */ + kvm_caps.supported_efer_bits =3D (u64)EFER_SCE; =20 if (kvm_cpu_cap_has(X86_FEATURE_LM)) - kvm_enable_efer_bits(EFER_LME | EFER_LMA); + kvm_caps.supported_efer_bits |=3D (EFER_LME | EFER_LMA); =20 if (kvm_cpu_cap_has(X86_FEATURE_NX)) - kvm_enable_efer_bits(EFER_NX); + kvm_caps.supported_efer_bits |=3D EFER_NX; =20 if (kvm_cpu_cap_has(X86_FEATURE_FXSR_OPT)) - kvm_enable_efer_bits(EFER_FFXSR); + kvm_caps.supported_efer_bits |=3D EFER_FFXSR; =20 if (kvm_cpu_cap_has(X86_FEATURE_AUTOIBRS)) - kvm_enable_efer_bits(EFER_AUTOIBRS); + kvm_caps.supported_efer_bits |=3D EFER_AUTOIBRS; =20 if (kvm_cpu_cap_has(X86_FEATURE_SVM)) { - kvm_enable_efer_bits(EFER_SVME); + kvm_caps.supported_efer_bits |=3D EFER_SVME; if (!boot_cpu_has(X86_FEATURE_EFER_LMSLE_MBZ)) - kvm_enable_efer_bits(EFER_LMSLE); + kvm_caps.supported_efer_bits |=3D EFER_LMSLE; } } =20 --=20 2.55.0.141.g00534a21ce-goog