• Samuel Holland's avatar
    riscv: Fix build with CONFIG_CC_OPTIMIZE_FOR_SIZE=y · 0b1d60d6
    Samuel Holland authored
    commit 8eb060e1 ("arch/riscv: add Zihintpause support") broke
    building with CONFIG_CC_OPTIMIZE_FOR_SIZE enabled (gcc 11.1.0):
    
      CC      arch/riscv/kernel/vdso/vgettimeofday.o
    In file included from <command-line>:
    ./arch/riscv/include/asm/jump_label.h: In function 'cpu_relax':
    ././include/linux/compiler_types.h:285:33: warning: 'asm' operand 0 probably does not match constraints
      285 | #define asm_volatile_goto(x...) asm goto(x)
          |                                 ^~~
    ./arch/riscv/include/asm/jump_label.h:41:9: note: in expansion of macro 'asm_volatile_goto'
       41 |         asm_volatile_goto(
          |         ^~~~~~~~~~~~~~~~~
    ././include/linux/compiler_types.h:285:33: error: impossible constraint in 'asm'
      285 | #define asm_volatile_goto(x...) asm goto(x)
          |                                 ^~~
    ./arch/riscv/include/asm/jump_label.h:41:9: note: in expansion of macro 'asm_volatile_goto'
       41 |         asm_volatile_goto(
          |         ^~~~~~~~~~~~~~~~~
    make[1]: *** [scripts/Makefile.build:249: arch/riscv/kernel/vdso/vgettimeofday.o] Error 1
    make: *** [arch/riscv/Makefile:128: vdso_prepare] Error 2
    
    Having a static branch in cpu_relax() is problematic because that
    function is widely inlined, including in some quite complex functions
    like in the VDSO. A quick measurement shows this static branch is
    responsible by itself for around 40% of the jump table.
    
    Drop the static branch, which ends up being the same number of
    instructions anyway. If Zihintpause is supported, we trade the nop from
    the static branch for a div. If Zihintpause is unsupported, we trade the
    jump from the static branch for (what gets interpreted as) a nop.
    
    Fixes: 8eb060e1 ("arch/riscv: add Zihintpause support")
    Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
    Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    0b1d60d6
hwcap.h 2.73 KB