All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xin Li <xin@zytor.com>
To: Borislav Petkov <bp@alien8.de>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	linux-doc@vger.kernel.org, pbonzini@redhat.com,
	seanjc@google.com, corbet@lwn.net, tglx@linutronix.de,
	mingo@redhat.com, dave.hansen@linux.intel.com, x86@kernel.org,
	hpa@zytor.com, luto@kernel.org, peterz@infradead.org,
	andrew.cooper3@citrix.com, chao.gao@intel.com, hch@infradead.org,
	sohil.mehta@intel.com
Subject: Re: [PATCH v9 06/22] x86/cea: Export __this_cpu_ist_top_va() to KVM
Date: Fri, 6 Mar 2026 23:38:44 -0800	[thread overview]
Message-ID: <9C6FC4E7-DF8A-4583-93A8-3B82806D11CD@zytor.com> (raw)
In-Reply-To: <20260130134644.GUaXy2RNbwEaRSgLUN@fat_crate.local>



> On Jan 30, 2026, at 5:46 AM, Borislav Petkov <bp@alien8.de> wrote:
> 
> On Sun, Oct 26, 2025 at 01:18:54PM -0700, Xin Li (Intel) wrote:
>> @@ -36,6 +41,7 @@ noinstr unsigned long __this_cpu_ist_top_va(enum exception_stack_ordering stack)
>> {
>> return __this_cpu_ist_bottom_va(stack) + EXCEPTION_STKSZ;
>> }
>> +EXPORT_SYMBOL_FOR_MODULES(__this_cpu_ist_top_va, "kvm-intel");
> 
> Why is this function name still kept with the "__" prefix but it is being
> exported at the same time?
> 
> It looks to me like we're exporting the wrong thing as the "__" kinda says it
> is an internal helper.
> 
> Just drop the prefix and call it something more sensible please. The caller
> couldn't care less about "ist_top_va".

Sean suggested to replace direct, raw use of __this_cpu_ist_top_va() with
a self-explanatory this_cpu_fred_rsp() helper for better readability.

https://lore.kernel.org/lkml/aahchI7oiFrjFAmb@google.com/

So __this_cpu_ist_top_va() no longer needs to be exported, thus no need to
do the renaming.

The new patch is below:

commit 7f0d77e48751bd2f3f65f93eaf466257382a25b9
Author: Xin Li <xin@zytor.com>
Date:   Fri Oct 24 11:52:32 2025 -0700

    x86/fred: Export this_cpu_fred_rsp() for KVM usage
    
    Introduce and export this_cpu_fred_rsp() to provide KVM with a self-
    explanatory interface for retrieving per-CPU FRED regular stacks for
    stack levels 1->3.
    
    FRED introduced new fields in the VMCS host-state area for stack levels
    1–>3 (HOST_IA32_FRED_RSP[123]), which correspond to the per-CPU FRED
    regular stacks for stack levels 1->3.  KVM must populate these fields
    each time a vCPU is loaded onto a CPU to ensure a complete valid FRED
    event delivery context immediately after any VM-Exits.
    
    Signed-off-by: Xin Li <xin@zytor.com>
    ---
    
    Change in v10:
    * Replace direct, raw use of __this_cpu_ist_top_va() with a self-
      explanatory this_cpu_fred_rsp() helper for better readability (Sean).

diff --git a/arch/x86/include/asm/fred.h b/arch/x86/include/asm/fred.h
index 2bb65677c079..7eea65bfc838 100644
--- a/arch/x86/include/asm/fred.h
+++ b/arch/x86/include/asm/fred.h
@@ -35,6 +35,13 @@
 
 #ifndef __ASSEMBLER__
 
+enum fred_stack_level {
+	FRED_STACK_LEVEL_0,
+	FRED_STACK_LEVEL_1,
+	FRED_STACK_LEVEL_2,
+	FRED_STACK_LEVEL_3
+};
+
 #ifdef CONFIG_X86_FRED
 #include <linux/kernel.h>
 #include <linux/sched/task_stack.h>
@@ -105,6 +112,8 @@ static __always_inline void fred_update_rsp0(void)
 		__this_cpu_write(fred_rsp0, rsp0);
 	}
 }
+
+unsigned long this_cpu_fred_rsp(enum fred_stack_level lvl);
 #else /* CONFIG_X86_FRED */
 static __always_inline unsigned long fred_event_data(struct pt_regs *regs) { return 0; }
 static inline void cpu_init_fred_exceptions(void) { }
@@ -113,6 +122,7 @@ static inline void fred_complete_exception_setup(void) { }
 static inline void fred_entry_from_kvm(unsigned int type, unsigned int vector) { }
 static inline void fred_sync_rsp0(unsigned long rsp0) { }
 static inline void fred_update_rsp0(void) { }
+static unsigned long this_cpu_fred_rsp(enum fred_stack_level lvl) { return 0; }
 #endif /* CONFIG_X86_FRED */
 #endif /* !__ASSEMBLER__ */
 
diff --git a/arch/x86/kernel/fred.c b/arch/x86/kernel/fred.c
index 433c4a6f1773..363c53701012 100644
--- a/arch/x86/kernel/fred.c
+++ b/arch/x86/kernel/fred.c
@@ -72,6 +72,23 @@ void cpu_init_fred_exceptions(void)
 	setup_clear_cpu_cap(X86_FEATURE_SYSCALL32);
 }
 
+unsigned long this_cpu_fred_rsp(enum fred_stack_level lvl)
+{
+	switch (lvl) {
+	case FRED_STACK_LEVEL_0:
+		return __this_cpu_read(fred_rsp0);
+	case FRED_STACK_LEVEL_1:
+		return __this_cpu_ist_top_va(ESTACK_DB);
+	case FRED_STACK_LEVEL_2:
+		return __this_cpu_ist_top_va(ESTACK_NMI);
+	case FRED_STACK_LEVEL_3:
+		return __this_cpu_ist_top_va(ESTACK_DF);
+	default:
+		BUG();
+	}
+}
+EXPORT_SYMBOL_FOR_MODULES(this_cpu_fred_rsp, "kvm-intel");
+
 /* Must be called after setup_cpu_entry_areas() */
 void cpu_init_fred_rsps(void)
 {
@@ -87,7 +104,7 @@ void cpu_init_fred_rsps(void)
 	       FRED_STKLVL(X86_TRAP_DF,  FRED_DF_STACK_LEVEL));
 
 	/* The FRED equivalents to IST stacks... */
-	wrmsrq(MSR_IA32_FRED_RSP1, __this_cpu_ist_top_va(ESTACK_DB));
-	wrmsrq(MSR_IA32_FRED_RSP2, __this_cpu_ist_top_va(ESTACK_NMI));
-	wrmsrq(MSR_IA32_FRED_RSP3, __this_cpu_ist_top_va(ESTACK_DF));
+	wrmsrq(MSR_IA32_FRED_RSP1, this_cpu_fred_rsp(FRED_STACK_LEVEL_1));
+	wrmsrq(MSR_IA32_FRED_RSP2, this_cpu_fred_rsp(FRED_STACK_LEVEL_2));
+	wrmsrq(MSR_IA32_FRED_RSP3, this_cpu_fred_rsp(FRED_STACK_LEVEL_3));
 }

  parent reply	other threads:[~2026-03-07  7:55 UTC|newest]

Thread overview: 123+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-26 20:18 [PATCH v9 00/22] Enable FRED with KVM VMX Xin Li (Intel)
2025-10-26 20:18 ` [PATCH v9 01/22] KVM: VMX: Enable support for secondary VM exit controls Xin Li (Intel)
2025-10-26 20:18 ` [PATCH v9 02/22] KVM: VMX: Initialize VM entry/exit FRED controls in vmcs_config Xin Li (Intel)
2026-01-20  9:24   ` Binbin Wu
2026-01-22 17:57     ` Xin Li
2025-10-26 20:18 ` [PATCH v9 03/22] KVM: VMX: Disable FRED if FRED consistency checks fail Xin Li (Intel)
2026-03-05  0:25   ` Sean Christopherson
2025-10-26 20:18 ` [PATCH v9 04/22] x86/cea: Prefix event stack names with ESTACK_ Xin Li (Intel)
2025-10-26 20:18 ` [PATCH v9 05/22] x86/cea: Use array indexing to simplify exception stack access Xin Li (Intel)
2025-10-27 15:49   ` Dave Hansen
2025-10-28  2:31     ` Xin Li
2026-01-30 13:42   ` Borislav Petkov
2025-10-26 20:18 ` [PATCH v9 06/22] x86/cea: Export __this_cpu_ist_top_va() to KVM Xin Li (Intel)
2025-10-27 15:50   ` Dave Hansen
2026-01-30 13:46   ` Borislav Petkov
2026-01-30 16:35     ` Xin Li
2026-01-30 17:56       ` Borislav Petkov
2026-03-07  7:38     ` Xin Li [this message]
2026-03-09 15:24       ` Sean Christopherson
2026-03-09 22:57         ` Xin Li
2025-10-26 20:18 ` [PATCH v9 07/22] KVM: VMX: Initialize VMCS FRED fields Xin Li (Intel)
2025-11-19  2:44   ` Chao Gao
2026-01-21  6:44   ` Binbin Wu
2026-01-21 18:14     ` Xin Li
2026-01-22  0:45       ` Xin Li
2026-01-22  1:56         ` Binbin Wu
2026-01-22 17:22           ` Xin Li
2026-03-04 16:23     ` Sean Christopherson
2026-03-05  5:27       ` Xin Li
2026-03-05 15:21         ` Sean Christopherson
2026-03-05 17:25           ` Xin Li
2025-10-26 20:18 ` [PATCH v9 08/22] KVM: VMX: Set FRED MSR intercepts Xin Li (Intel)
2025-11-12  5:49   ` Chao Gao
2026-03-05  0:48     ` Sean Christopherson
2026-03-05  5:56       ` Xin Li
2026-03-06  2:30       ` Chao Gao
2026-03-06 15:54         ` Sean Christopherson
2026-01-16 19:49   ` Dave Hansen
2026-01-17  0:43     ` H. Peter Anvin
2025-10-26 20:18 ` [PATCH v9 09/22] KVM: VMX: Save/restore guest FRED RSP0 Xin Li (Intel)
2025-11-12  5:59   ` Chao Gao
2026-01-21  7:23   ` Binbin Wu
2025-10-26 20:18 ` [PATCH v9 10/22] KVM: VMX: Add support for saving and restoring FRED MSRs Xin Li (Intel)
2025-11-12  6:16   ` Chao Gao
2025-12-01  6:20     ` Xin Li
2025-10-26 20:18 ` [PATCH v9 11/22] KVM: x86: Add a helper to detect if FRED is enabled for a vCPU Xin Li (Intel)
2025-11-12  6:19   ` Chao Gao
2026-01-21  8:05   ` Binbin Wu
2026-01-21 16:46     ` Xin Li
2026-01-21 20:24       ` Sean Christopherson
2026-01-21 22:38         ` Xin Li
2025-10-26 20:19 ` [PATCH v9 12/22] KVM: VMX: Virtualize FRED event_data Xin Li (Intel)
2025-11-19  3:24   ` Chao Gao
2026-01-29 17:12     ` Xin Li
2026-01-29 17:21       ` H. Peter Anvin
2026-01-29 22:50         ` Xin Li
2026-03-04 16:42           ` Sean Christopherson
2025-10-26 20:19 ` [PATCH v9 13/22] KVM: VMX: Virtualize FRED nested exception tracking Xin Li (Intel)
2025-11-19  6:54   ` Chao Gao
2026-03-07  2:07   ` Sean Christopherson
2026-03-07  3:05     ` Xin Li
2025-10-26 20:19 ` [PATCH v9 14/22] KVM: x86: Save/restore the nested flag of an exception Xin Li (Intel)
2025-11-19  6:13   ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 15/22] KVM: x86: Mark CR4.FRED as not reserved Xin Li (Intel)
2025-11-19  7:26   ` Chao Gao
2026-03-05  0:58     ` Sean Christopherson
2026-03-05  7:20       ` Xin Li
2026-03-05 15:35         ` Sean Christopherson
2026-03-05 17:09           ` Xin Li
2026-03-05 17:46             ` Xin Li
2026-03-06  5:33       ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 16/22] KVM: VMX: Dump FRED context in dump_vmcs() Xin Li (Intel)
2025-11-19  7:40   ` Chao Gao
2025-11-30 18:42     ` Xin Li
2025-10-26 20:19 ` [PATCH v9 17/22] KVM: x86: Advertise support for FRED Xin Li (Intel)
2025-11-12  7:30   ` Chao Gao
2026-01-20  6:56     ` Xin Li
2026-01-20  8:07       ` Chao Gao
2026-01-20  9:09         ` Xin Li
2026-01-20  9:46           ` Binbin Wu
2026-01-20 15:25             ` Sean Christopherson
2026-01-20 18:04               ` Xin Li
2026-01-20 17:58             ` Xin Li
2025-10-26 20:19 ` [PATCH v9 18/22] KVM: nVMX: Enable support for secondary VM exit controls Xin Li (Intel)
2025-11-12 13:42   ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 19/22] KVM: nVMX: Handle FRED VMCS fields in nested VMX context Xin Li (Intel)
2025-12-02  6:32   ` Chao Gao
2026-01-20  6:30     ` Xin Li
2026-01-20 16:07       ` Dave Hansen
2026-01-20 18:10         ` Xin Li
2026-01-21  0:44       ` Chao Gao
2026-01-22 16:52         ` Xin Li
2025-12-08 22:37   ` Sean Christopherson
2025-10-26 20:19 ` [PATCH v9 20/22] KVM: nVMX: Validate FRED-related VMCS fields Xin Li (Intel)
2025-11-13  3:00   ` Chao Gao
2026-01-20  9:19     ` Xin Li
2026-01-21  2:33       ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 21/22] KVM: nVMX: Guard SHADOW_FIELD_R[OW] macros with VMX feature checks Xin Li (Intel)
2025-12-02  6:35   ` Chao Gao
2025-12-08 22:49   ` Sean Christopherson
2025-10-26 20:19 ` [PATCH v9 22/22] KVM: nVMX: Enable VMX FRED controls Xin Li (Intel)
2025-11-13  3:20   ` Chao Gao
2025-11-06 17:35 ` [PATCH v9 00/22] Enable FRED with KVM VMX Xin Li
2025-11-13 22:20   ` Sean Christopherson
2025-12-08 22:51 ` Sean Christopherson
2025-12-09 17:08   ` Xin Li
2026-04-23 14:35 ` David Woodhouse
2026-04-23 22:56   ` Xin Li
2026-05-05 18:04     ` Maciej Wieczor-Retman
2026-05-05 18:30       ` Andrew Cooper
2026-05-05 19:29         ` H. Peter Anvin
2026-05-05 20:20         ` Maciej Wieczor-Retman
2026-05-05 20:27           ` Andrew Cooper
2026-05-06 14:05             ` Maciej Wieczor-Retman
2026-05-07  7:49           ` David Woodhouse
2026-05-07 12:59             ` Maciej Wieczor-Retman
2026-05-07 13:35               ` David Woodhouse
2026-05-07 13:53                 ` Maciej Wieczor-Retman
2026-05-07 14:01                   ` David Woodhouse
2026-05-07 23:00                   ` David Woodhouse
2026-05-08 14:25                     ` Maciej Wieczor-Retman
2026-05-08 14:46                       ` David Woodhouse
2026-05-08 18:06                         ` Maciej Wieczor-Retman

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=9C6FC4E7-DF8A-4583-93A8-3B82806D11CD@zytor.com \
    --to=xin@zytor.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bp@alien8.de \
    --cc=chao.gao@intel.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=hch@infradead.org \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=seanjc@google.com \
    --cc=sohil.mehta@intel.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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.