arch/x86/entry/entry_fred.c | 4 ++-- arch/x86/include/asm/fred.h | 2 +- arch/x86/include/asm/ptrace.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-)
FRED can only be enabled in Long Mode. This is the 64bit mode (as opposed to
compatibility mode) identifier, rather than being something hard-wired at 1.
No functional change.
Reviewed-by: Xin Li (Intel) <xin@zytor.com>
Reviewed-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Xin Li <xin@zytor.com>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@kernel.org>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: Borislav Petkov <bp@alien8.de>
CC: Dave Hansen <dave.hansen@linux.intel.com>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
v2:
* State no functional change.
IIRC, this was wrong in an older version of the FRED spec. I made the same
mistake in Xen, and I didn't copy Linux's structure.
I don't thinks this warrants backporting, but the fixes tag is:
Fixes: 3c77bf02d0c0 ("x86/ptrace: Add FRED additional information to the pt_regs structure")
---
arch/x86/entry/entry_fred.c | 4 ++--
arch/x86/include/asm/fred.h | 2 +-
arch/x86/include/asm/ptrace.h | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/x86/entry/entry_fred.c b/arch/x86/entry/entry_fred.c
index f004a4dc74c2..94e626cc6a07 100644
--- a/arch/x86/entry/entry_fred.c
+++ b/arch/x86/entry/entry_fred.c
@@ -78,13 +78,13 @@ static noinstr void fred_intx(struct pt_regs *regs)
static __always_inline void fred_other(struct pt_regs *regs)
{
/* The compiler can fold these conditions into a single test */
- if (likely(regs->fred_ss.vector == FRED_SYSCALL && regs->fred_ss.lm)) {
+ if (likely(regs->fred_ss.vector == FRED_SYSCALL && regs->fred_ss.l)) {
regs->orig_ax = regs->ax;
regs->ax = -ENOSYS;
do_syscall_64(regs, regs->orig_ax);
return;
} else if (ia32_enabled() &&
- likely(regs->fred_ss.vector == FRED_SYSENTER && !regs->fred_ss.lm)) {
+ likely(regs->fred_ss.vector == FRED_SYSENTER && !regs->fred_ss.l)) {
regs->orig_ax = regs->ax;
regs->ax = -ENOSYS;
do_fast_syscall_32(regs);
diff --git a/arch/x86/include/asm/fred.h b/arch/x86/include/asm/fred.h
index 12b34d5b2953..2bb65677c079 100644
--- a/arch/x86/include/asm/fred.h
+++ b/arch/x86/include/asm/fred.h
@@ -79,7 +79,7 @@ static __always_inline void fred_entry_from_kvm(unsigned int type, unsigned int
.type = type,
.vector = vector,
.nmi = type == EVENT_TYPE_NMI,
- .lm = 1,
+ .l = 1,
};
asm_fred_entry_from_kvm(ss);
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
index 50f75467f73d..37370c3b1ffd 100644
--- a/arch/x86/include/asm/ptrace.h
+++ b/arch/x86/include/asm/ptrace.h
@@ -84,8 +84,8 @@ struct fred_ss {
: 4,
/* Event was incident to enclave execution */
enclave : 1,
- /* CPU was in long mode */
- lm : 1,
+ /* CPU was in 64-bit mode */
+ l : 1,
/*
* Nested exception during FRED delivery, not set
* for #DF.
base-commit: e6b9dce0aeeb91dfc0974ab87f02454e24566182
--
2.39.5
On September 2, 2025 4:01:17 PM PDT, Andrew Cooper <andrew.cooper3@citrix.com> wrote: >FRED can only be enabled in Long Mode. This is the 64bit mode (as opposed to >compatibility mode) identifier, rather than being something hard-wired at 1. > >No functional change. > >Reviewed-by: Xin Li (Intel) <xin@zytor.com> >Reviewed-by: H. Peter Anvin (Intel) <hpa@zytor.com> >Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> >--- >CC: Xin Li <xin@zytor.com> >CC: "H. Peter Anvin" <hpa@zytor.com> >CC: Andy Lutomirski <luto@kernel.org> >CC: Thomas Gleixner <tglx@linutronix.de> >CC: Ingo Molnar <mingo@redhat.com> >CC: Borislav Petkov <bp@alien8.de> >CC: Dave Hansen <dave.hansen@linux.intel.com> >CC: x86@kernel.org >CC: linux-kernel@vger.kernel.org > >v2: > * State no functional change. > >IIRC, this was wrong in an older version of the FRED spec. I made the same >mistake in Xen, and I didn't copy Linux's structure. > >I don't thinks this warrants backporting, but the fixes tag is: > >Fixes: 3c77bf02d0c0 ("x86/ptrace: Add FRED additional information to the pt_regs structure") >--- > arch/x86/entry/entry_fred.c | 4 ++-- > arch/x86/include/asm/fred.h | 2 +- > arch/x86/include/asm/ptrace.h | 4 ++-- > 3 files changed, 5 insertions(+), 5 deletions(-) > >diff --git a/arch/x86/entry/entry_fred.c b/arch/x86/entry/entry_fred.c >index f004a4dc74c2..94e626cc6a07 100644 >--- a/arch/x86/entry/entry_fred.c >+++ b/arch/x86/entry/entry_fred.c >@@ -78,13 +78,13 @@ static noinstr void fred_intx(struct pt_regs *regs) > static __always_inline void fred_other(struct pt_regs *regs) > { > /* The compiler can fold these conditions into a single test */ >- if (likely(regs->fred_ss.vector == FRED_SYSCALL && regs->fred_ss.lm)) { >+ if (likely(regs->fred_ss.vector == FRED_SYSCALL && regs->fred_ss.l)) { > regs->orig_ax = regs->ax; > regs->ax = -ENOSYS; > do_syscall_64(regs, regs->orig_ax); > return; > } else if (ia32_enabled() && >- likely(regs->fred_ss.vector == FRED_SYSENTER && !regs->fred_ss.lm)) { >+ likely(regs->fred_ss.vector == FRED_SYSENTER && !regs->fred_ss.l)) { > regs->orig_ax = regs->ax; > regs->ax = -ENOSYS; > do_fast_syscall_32(regs); >diff --git a/arch/x86/include/asm/fred.h b/arch/x86/include/asm/fred.h >index 12b34d5b2953..2bb65677c079 100644 >--- a/arch/x86/include/asm/fred.h >+++ b/arch/x86/include/asm/fred.h >@@ -79,7 +79,7 @@ static __always_inline void fred_entry_from_kvm(unsigned int type, unsigned int > .type = type, > .vector = vector, > .nmi = type == EVENT_TYPE_NMI, >- .lm = 1, >+ .l = 1, > }; > > asm_fred_entry_from_kvm(ss); >diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h >index 50f75467f73d..37370c3b1ffd 100644 >--- a/arch/x86/include/asm/ptrace.h >+++ b/arch/x86/include/asm/ptrace.h >@@ -84,8 +84,8 @@ struct fred_ss { > : 4, > /* Event was incident to enclave execution */ > enclave : 1, >- /* CPU was in long mode */ >- lm : 1, >+ /* CPU was in 64-bit mode */ >+ l : 1, > /* > * Nested exception during FRED delivery, not set > * for #DF. > >base-commit: e6b9dce0aeeb91dfc0974ab87f02454e24566182 Acked-by: H. Peter Anvin (Intel) <hpa@zytor.com>
© 2016 - 2025 Red Hat, Inc.