mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
arm64: simplify arch_static_branch/_jump function
Extracted the jump table definition code from the arch_static_branch and arch_static_branch_jump functions into a macro JUMP_TABLE_ENTRY to reduce code duplication. Signed-off-by: George Guo <guodongtai@kylinos.cn> Link: https://lore.kernel.org/r/20240430085655.2798551-2-dongtai.guo@linux.dev Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
1279e8d0dc
commit
588de8c6d3
1 changed files with 15 additions and 13 deletions
|
@ -15,17 +15,23 @@
|
|||
|
||||
#define JUMP_LABEL_NOP_SIZE AARCH64_INSN_SIZE
|
||||
|
||||
#define JUMP_TABLE_ENTRY(key, label) \
|
||||
".pushsection __jump_table, \"aw\"\n\t" \
|
||||
".align 3\n\t" \
|
||||
".long 1b - ., %l["#label"] - .\n\t" \
|
||||
".quad %c0 - .\n\t" \
|
||||
".popsection\n\t" \
|
||||
: : "i"(key) : : label
|
||||
|
||||
static __always_inline bool arch_static_branch(struct static_key * const key,
|
||||
const bool branch)
|
||||
{
|
||||
char *k = &((char *)key)[branch];
|
||||
|
||||
asm goto(
|
||||
"1: nop \n\t"
|
||||
" .pushsection __jump_table, \"aw\" \n\t"
|
||||
" .align 3 \n\t"
|
||||
" .long 1b - ., %l[l_yes] - . \n\t"
|
||||
" .quad %c0 - . \n\t"
|
||||
" .popsection \n\t"
|
||||
: : "i"(&((char *)key)[branch]) : : l_yes);
|
||||
JUMP_TABLE_ENTRY(k, l_yes)
|
||||
);
|
||||
|
||||
return false;
|
||||
l_yes:
|
||||
|
@ -35,15 +41,11 @@ static __always_inline bool arch_static_branch(struct static_key * const key,
|
|||
static __always_inline bool arch_static_branch_jump(struct static_key * const key,
|
||||
const bool branch)
|
||||
{
|
||||
char *k = &((char *)key)[branch];
|
||||
asm goto(
|
||||
"1: b %l[l_yes] \n\t"
|
||||
" .pushsection __jump_table, \"aw\" \n\t"
|
||||
" .align 3 \n\t"
|
||||
" .long 1b - ., %l[l_yes] - . \n\t"
|
||||
" .quad %c0 - . \n\t"
|
||||
" .popsection \n\t"
|
||||
: : "i"(&((char *)key)[branch]) : : l_yes);
|
||||
|
||||
JUMP_TABLE_ENTRY(k, l_yes)
|
||||
);
|
||||
return false;
|
||||
l_yes:
|
||||
return true;
|
||||
|
|
Loading…
Reference in a new issue