x86/runtime-const: Introduce runtime_const_mask_32()

Futex hash computation requires a mask operation with read-only after
init data that will be converted to a runtime constant in the subsequent
commit.

Introduce runtime_const_mask_32 to further optimize the mask operation
in the futex hash computation hot path.

  [ prateek: Broke off the x86 chunk, commit message. ]

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260227161841.GH606826@noisy.programming.kicks-ass.net
Link: https://patch.msgid.link/20260728052540.4728-2-kprateek.nayak@amd.com
This commit is contained in:
Peter Zijlstra
2026-07-28 05:25:33 +00:00
parent 051f5d223d
commit 775e0f2284

View File

@@ -41,6 +41,15 @@
:"+r" (__ret)); \
__ret; })
#define runtime_const_mask_32(val, sym) ({ \
typeof(0u+(val)) __ret = (val); \
asm_inline("and $0x12345678, %k0\n1:\n" \
".pushsection runtime_mask_" #sym ",\"a\"\n\t"\
".long 1b - 4 - .\n" \
".popsection" \
: "+r" (__ret)); \
__ret; })
#define runtime_const_init(type, sym) do { \
extern s32 __start_runtime_##type##_##sym[]; \
extern s32 __stop_runtime_##type##_##sym[]; \
@@ -65,6 +74,11 @@ static inline void __runtime_fixup_shift(void *where, unsigned long val)
*(unsigned char *)where = val;
}
static inline void __runtime_fixup_mask(void *where, unsigned long val)
{
*(unsigned int *)where = val;
}
static inline void runtime_const_fixup(void (*fn)(void *, unsigned long),
unsigned long val, s32 *start, s32 *end)
{