mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
x86/asm: Remove %P operand modifier from altinstr asm templates
The "P" asm operand modifier is a x86 target-specific modifier. For x86_64, when used with a symbol reference, the "%P" modifier emits "sym" instead of "sym(%rip)". This property is currently used to prevent %RIP-relative addressing in .altinstr sections. %RIP-relative addresses are nowadays correctly handled in .altinstr sections, so remove %P operand modifier from altinstr asm templates. Also note that unlike GCC, clang emits %rip-relative symbol reference with "P" asm operand modifier, so the patch also unifies symbol handling with both compilers. No functional changes intended. Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Ard Biesheuvel <ardb@kernel.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Link: https://lore.kernel.org/r/20240319104418.284519-2-ubizjak@gmail.com
This commit is contained in:
parent
4ae3dc83b0
commit
a3ff53167c
|
|
@ -91,7 +91,7 @@ static inline void native_apic_mem_write(u32 reg, u32 v)
|
|||
{
|
||||
volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg);
|
||||
|
||||
alternative_io("movl %0, %P1", "xchgl %0, %P1", X86_BUG_11AP,
|
||||
alternative_io("movl %0, %1", "xchgl %0, %1", X86_BUG_11AP,
|
||||
ASM_OUTPUT2("=r" (v), "=m" (*addr)),
|
||||
ASM_OUTPUT2("0" (v), "m" (*addr)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -587,7 +587,7 @@ extern char ignore_fpu_irq;
|
|||
# define BASE_PREFETCH ""
|
||||
# define ARCH_HAS_PREFETCH
|
||||
#else
|
||||
# define BASE_PREFETCH "prefetcht0 %P1"
|
||||
# define BASE_PREFETCH "prefetcht0 %1"
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
@ -598,7 +598,7 @@ extern char ignore_fpu_irq;
|
|||
*/
|
||||
static inline void prefetch(const void *x)
|
||||
{
|
||||
alternative_input(BASE_PREFETCH, "prefetchnta %P1",
|
||||
alternative_input(BASE_PREFETCH, "prefetchnta %1",
|
||||
X86_FEATURE_XMM,
|
||||
"m" (*(const char *)x));
|
||||
}
|
||||
|
|
@ -610,7 +610,7 @@ static inline void prefetch(const void *x)
|
|||
*/
|
||||
static __always_inline void prefetchw(const void *x)
|
||||
{
|
||||
alternative_input(BASE_PREFETCH, "prefetchw %P1",
|
||||
alternative_input(BASE_PREFETCH, "prefetchw %1",
|
||||
X86_FEATURE_3DNOWPREFETCH,
|
||||
"m" (*(const char *)x));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,8 +182,8 @@ static __always_inline void clflush(volatile void *__p)
|
|||
|
||||
static inline void clflushopt(volatile void *__p)
|
||||
{
|
||||
alternative_io(".byte 0x3e; clflush %P0",
|
||||
".byte 0x66; clflush %P0",
|
||||
alternative_io(".byte 0x3e; clflush %0",
|
||||
".byte 0x66; clflush %0",
|
||||
X86_FEATURE_CLFLUSHOPT,
|
||||
"+m" (*(volatile char __force *)__p));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user