On Sun, Jun 10, 2018 at 07:19:11AM -0700, Nadav Amit wrote:
>  static __always_inline bool arch_static_branch(struct static_key *key, bool 
> branch)
>  {
> +     asm_volatile_goto("STATIC_BRANCH_GOTO l_yes=\"%l[l_yes]\" key=\"%c0\" "
> +                       "branch=\"%c1\""
> +                     : :  "i" (key), "i" (branch) : : l_yes);
>  
>       return false;
>  l_yes:
> @@ -48,13 +44,8 @@ static __always_inline bool arch_static_branch(struct 
> static_key *key, bool bran
>  
>  static __always_inline bool arch_static_branch_jump(struct static_key *key, 
> bool branch)
>  {
> +     asm_volatile_goto("STATIC_BRANCH_JUMP_GOTO l_yes=\"%l[l_yes]\" 
> key=\"%c0\" "
> +                       "branch=\"%c1\""
>               : :  "i" (key), "i" (branch) : : l_yes);
>  
>       return false;
> @@ -108,6 +99,26 @@ struct jump_entry {
>       .popsection
>  .endm
>  
> +.macro STATIC_BRANCH_GOTO l_yes:req key:req branch:req

STATIC_BRANCH_NOP

> +1:
> +     .byte STATIC_KEY_INIT_NOP
> +     .pushsection __jump_table, "aw"
> +     _ASM_ALIGN
> +     _ASM_PTR 1b, \l_yes, \key + \branch
> +     .popsection
> +.endm
> +
> +.macro STATIC_BRANCH_JUMP_GOTO l_yes:req key:req branch:req

STATIC_BRANCH_JMP

> +1:
> +     .byte 0xe9
> +     .long \l_yes - 2f
> +2:
> +     .pushsection __jump_table, "aw"
> +     _ASM_ALIGN
> +     _ASM_PTR 1b, \l_yes, \key + \branch
> +     .popsection
> +.endm
> +
>  #endif       /* __ASSEMBLY__ */


Reply via email to