On Mon, 25 Dec 2017, Alexey Dobriyan wrote:

> The following pattern fails to compile while the same pattern
> with alternative_call() does.
> 
>       if (...)
>               alternative_call_2(...);
>       else
>               alternative_call_2(...);

Sigh. Can we get an explanation WHY it fails ?

> 
> Signed-off-by: Alexey Dobriyan <[email protected]>
> ---
> 
>  arch/x86/include/asm/alternative.h |    4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> --- a/arch/x86/include/asm/alternative.h
> +++ b/arch/x86/include/asm/alternative.h
> @@ -218,13 +218,11 @@ static inline int alternatives_text_reserved(void 
> *start, void *end)
>   */
>  #define alternative_call_2(oldfunc, newfunc1, feature1, newfunc2, feature2,  
>  \
>                          output, input...)                                  \
> -{                                                                          \
>       asm volatile (ALTERNATIVE_2("call %P[old]", "call %P[new1]", feature1,\
>               "call %P[new2]", feature2)                                    \
>               : output, ASM_CALL_CONSTRAINT                                 \
>               : [old] "i" (oldfunc), [new1] "i" (newfunc1),                 \
> -               [new2] "i" (newfunc2), ## input);                           \
> -}
> +               [new2] "i" (newfunc2), ## input)
>  
>  /*
>   * use this macro(s) if you need more than one output parameter
> 

Reply via email to