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(-)
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
On Tue, Jul 09 2024 at 08:40, Xin Li wrote:
> 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.
I just noticed that there is another leftover regarding FRED:
arch/x86/kernel/cpu/cpuid-deps.c:86: { X86_FEATURE_FRED, X86_FEATURE_WRMSRNS },
We removed the dependency on X86_FEATURE_WRMSRNS, right? So this is
stale and should be removed too.
Thanks,
tglx
> I just noticed that there is another leftover regarding FRED:
>
> arch/x86/kernel/cpu/cpuid-deps.c:86: { X86_FEATURE_FRED, X86_FEATURE_WRMSRNS },
>
> We removed the dependency on X86_FEATURE_WRMSRNS, right? So this is
> stale and should be removed too.
Right, I did plan to include such a change per your ask to remove the
comment in arch/x86/include/asm/switch_to.h:
https://lore.kernel.org/lkml/87ttfw18jy.ffs@tglx/
So it will be in the next iteration of that patch set.
Thanks!
Xin
On 8/13/2024 8:58 AM, Xin Li wrote:
>> I just noticed that there is another leftover regarding FRED:
>>
>> arch/x86/kernel/cpu/cpuid-deps.c:86: { X86_FEATURE_FRED,
>> X86_FEATURE_WRMSRNS },
>>
>> We removed the dependency on X86_FEATURE_WRMSRNS, right? So this is
>> stale and should be removed too.
Sorry, this dependency is not removed yet, but will be as mentioned in
my previous reply.
Thanks!
Xin
> Right, I did plan to include such a change per your ask to remove the
> comment in arch/x86/include/asm/switch_to.h:
>
> https://lore.kernel.org/lkml/87ttfw18jy.ffs@tglx/
>
> So it will be in the next iteration of that patch set.
© 2016 - 2025 Red Hat, Inc.