arm64: simplify arch_static_branch/_jump function
authorGeorge Guo <guodongtai@kylinos.cn>
Tue, 30 Apr 2024 08:56:55 +0000 (16:56 +0800)
committerWill Deacon <will@kernel.org>
Fri, 3 May 2024 13:16:36 +0000 (14:16 +0100)
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>
arch/arm64/include/asm/jump_label.h

index 6aafbb7899916e631eab9241c39c1313a7c93707..4e753908b80188f0e58b50a0048e1482e32ec94f 100644 (file)
 
 #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 @@ l_yes:
 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;