Re: [PATCH v3] MIPS: Workaround clang inline compat branch issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 28, 2023 at 11:35 AM Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> wrote:
>
> Clang is unable to handle the situation that a chunk of inline
> assembly ends with a compat branch instruction and then compiler
> generates another control transfer instruction immediately after
> this compat branch. The later instruction will end up in forbidden
> slot and cause exception.
>
> Workaround by add a option to control the use of compact branch.
> Currently it's selected by CC_IS_CLANG and hopefully we can change
> it to a version check in future if clang manages to fix it.
>
> Fix boot on boston board.
>
> Link: https://github.com/llvm/llvm-project/issues/61045
> Signed-off-by: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx>
> Acked-by: Nathan Chancellor <nathan@xxxxxxxxxx>

Thanks for the patch!

Acked-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>

> ---
> v2: Add Link tag to LLVM bug
> v3: Docuement issue link in Kconfig as well
> ---
>  arch/mips/Kconfig           | 4 ++++
>  arch/mips/include/asm/asm.h | 2 +-
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
> index 37072e15b263..c8b878aa690f 100644
> --- a/arch/mips/Kconfig
> +++ b/arch/mips/Kconfig
> @@ -3206,6 +3206,10 @@ config CC_HAS_MNO_BRANCH_LIKELY
>         def_bool y
>         depends on $(cc-option,-mno-branch-likely)
>
> +# https://github.com/llvm/llvm-project/issues/61045
> +config CC_HAS_BROKEN_INLINE_COMPAT_BRANCH
> +       def_bool y if CC_IS_CLANG
> +
>  menu "Power management options"
>
>  config ARCH_HIBERNATION_POSSIBLE
> diff --git a/arch/mips/include/asm/asm.h b/arch/mips/include/asm/asm.h
> index 336ac9b65235..2e99450f4228 100644
> --- a/arch/mips/include/asm/asm.h
> +++ b/arch/mips/include/asm/asm.h
> @@ -336,7 +336,7 @@ symbol              =       value
>   */
>  #ifdef CONFIG_WAR_R10000_LLSC
>  # define SC_BEQZ       beqzl
> -#elif MIPS_ISA_REV >= 6
> +#elif !defined(CONFIG_CC_HAS_BROKEN_INLINE_COMPAT_BRANCH) && MIPS_ISA_REV >= 6
>  # define SC_BEQZ       beqzc
>  #else
>  # define SC_BEQZ       beqz
> --
> 2.37.1 (Apple Git-137.1)
>
>


-- 
Thanks,
~Nick Desaulniers




[Index of Archives]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux