public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Enable FRED earlier
@ 2024-07-09 15:40 Xin Li (Intel)
  2024-07-09 15:40 ` [PATCH v2 1/3] x86/fred: Parse cmdline param "fred=" in cpu_parse_early_param() Xin Li (Intel)
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Xin Li (Intel) @ 2024-07-09 15:40 UTC (permalink / raw)
  To: linux-kernel
  Cc: hpa, tglx, mingo, bp, dave.hansen, x86, peterz, andrew.cooper3,
	nik.borisov, houwenlong.hwl

Wenlong Hou from Ant group reported two problems during the FRED
initialization:
https://lore.kernel.org/lkml/cover.1718972598.git.houwenlong.hwl@antgroup.com/

The first problem is that spurious_interrupt() gets called on the
HYPERVISOR_CALLBACK_VECTOR vector.  Because kvm_guest_init(), being
executed way before trap_init() in which it is decided that whether
FRED will be enabled or not, calls sysvec_install() to install
HYPERVISOR_CALLBACK_VECTOR's interrupt handler into FRED system
vector dispatch table or IDT depending on whether FRED is enabled.

The other problem is that the #PF handler gets a wrong faulting
address from the stack instead of CR2 before FRED is enabled.
Because the #PF handler fetches its faulting addresss from the
stack or CR2 based on whether FRED is available rather than active.

This patchset fixes the 2 problems with suggestions from tglx:

  1) Parse cmdline param "fred=" in cpu_parse_early_param() to
     minimize the gap mentioned above, before kvm_guest_init().

  2) Enable FRED right after init_mem_mapping() to switch to FRED
     from early IDT ASAP, avoid intermediately using the IDT #PF
     handler.


Link to v1:
https://lore.kernel.org/lkml/20240703085426.274801-1-xin@zytor.com/

Changes since v1:
* Drop the patch that changes wrmsrl() to wrmsrns().
* Use strncmp() instead of strcmp().


Xin Li (Intel) (3):
  x86/fred: Parse cmdline param "fred=" in cpu_parse_early_param()
  x86/fred: Split FRED RSP initialization into a separate function
  x86/fred: Enable FRED right after init_mem_mapping()

 arch/x86/include/asm/fred.h  |  2 ++
 arch/x86/kernel/cpu/common.c |  9 ++++++---
 arch/x86/kernel/fred.c       | 28 +++++++++++++++++++---------
 arch/x86/kernel/setup.c      | 11 ++++++++++-
 arch/x86/kernel/smpboot.c    |  6 ++++++
 arch/x86/kernel/traps.c      | 30 ++++--------------------------
 6 files changed, 47 insertions(+), 39 deletions(-)


base-commit: aa9d8caba6e40b0b02a6f2b5f2bd9177cd76cacf
-- 
2.45.2


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-08-13 20:03 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-09 15:40 [PATCH v2 0/3] Enable FRED earlier Xin Li (Intel)
2024-07-09 15:40 ` [PATCH v2 1/3] x86/fred: Parse cmdline param "fred=" in cpu_parse_early_param() Xin Li (Intel)
2024-07-10 18:53   ` Nikolay Borisov
2024-07-12 17:40     ` Xin Li
2024-07-15  6:44       ` Nikolay Borisov
2024-08-13 20:03   ` [tip: x86/fred] " tip-bot2 for Xin Li (Intel)
2024-07-09 15:40 ` [PATCH v2 2/3] x86/fred: Split FRED RSP initialization into a separate function Xin Li (Intel)
2024-08-13 20:03   ` [tip: x86/fred] x86/fred: Move " tip-bot2 for Xin Li (Intel)
2024-07-09 15:40 ` [PATCH v2 3/3] x86/fred: Enable FRED right after init_mem_mapping() Xin Li (Intel)
2024-08-13 12:45   ` Thomas Gleixner
2024-08-13 15:57     ` Xin Li
2024-08-13 20:03   ` [tip: x86/fred] " tip-bot2 for Xin Li (Intel)
2024-08-13 10:07 ` [PATCH v2 0/3] Enable FRED earlier Thomas Gleixner
2024-08-13 15:58   ` Xin Li
2024-08-13 16:03     ` Xin Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox