There exist some issues when building kernel if CONFIG_CPU_HAS_LBT is set
but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this case,
there are no definitions of _restore_lsx and _restore_lasx and there are
also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S and
switch.S respectively, just add some ifdefs to fix the issues.
AS arch/loongarch/kernel/fpu.o
arch/loongarch/kernel/fpu.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
arch/loongarch/kernel/fpu.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
AS [M] arch/loongarch/kvm/switch.o
arch/loongarch/kvm/switch.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
arch/loongarch/kvm/switch.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
MODPOST Module.symvers
ERROR: modpost: "kvm_restore_lsx" [arch/loongarch/kvm/kvm.ko] undefined!
ERROR: modpost: "kvm_restore_lasx" [arch/loongarch/kvm/kvm.ko] undefined!
Cc: stable@vger.kernel.org # 6.9+
Fixes: cb8a2ef0848c ("LoongArch: Add ORC stack unwinder support")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202408120955.qls5oNQY-lkp@intel.com/
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
---
arch/loongarch/kernel/fpu.S | 4 ++++
arch/loongarch/kvm/switch.S | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/arch/loongarch/kernel/fpu.S b/arch/loongarch/kernel/fpu.S
index 69a85f2479fb..6ab640101457 100644
--- a/arch/loongarch/kernel/fpu.S
+++ b/arch/loongarch/kernel/fpu.S
@@ -530,6 +530,10 @@ SYM_FUNC_END(_restore_lasx_context)
#ifdef CONFIG_CPU_HAS_LBT
STACK_FRAME_NON_STANDARD _restore_fp
+#ifdef CONFIG_CPU_HAS_LSX
STACK_FRAME_NON_STANDARD _restore_lsx
+#endif
+#ifdef CONFIG_CPU_HAS_LASX
STACK_FRAME_NON_STANDARD _restore_lasx
#endif
+#endif
diff --git a/arch/loongarch/kvm/switch.S b/arch/loongarch/kvm/switch.S
index 80e988985a6a..0c292f818492 100644
--- a/arch/loongarch/kvm/switch.S
+++ b/arch/loongarch/kvm/switch.S
@@ -277,6 +277,10 @@ SYM_DATA(kvm_enter_guest_size, .quad kvm_enter_guest_end - kvm_enter_guest)
#ifdef CONFIG_CPU_HAS_LBT
STACK_FRAME_NON_STANDARD kvm_restore_fpu
+#ifdef CONFIG_CPU_HAS_LSX
STACK_FRAME_NON_STANDARD kvm_restore_lsx
+#endif
+#ifdef CONFIG_CPU_HAS_LASX
STACK_FRAME_NON_STANDARD kvm_restore_lasx
#endif
+#endif
--
2.42.0
Applied, thanks.
Huacai
On Tue, Aug 20, 2024 at 8:37 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> There exist some issues when building kernel if CONFIG_CPU_HAS_LBT is set
> but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this case,
> there are no definitions of _restore_lsx and _restore_lasx and there are
> also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S and
> switch.S respectively, just add some ifdefs to fix the issues.
>
> AS arch/loongarch/kernel/fpu.o
> arch/loongarch/kernel/fpu.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
> arch/loongarch/kernel/fpu.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
>
> AS [M] arch/loongarch/kvm/switch.o
> arch/loongarch/kvm/switch.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
> arch/loongarch/kvm/switch.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
>
> MODPOST Module.symvers
> ERROR: modpost: "kvm_restore_lsx" [arch/loongarch/kvm/kvm.ko] undefined!
> ERROR: modpost: "kvm_restore_lasx" [arch/loongarch/kvm/kvm.ko] undefined!
>
> Cc: stable@vger.kernel.org # 6.9+
> Fixes: cb8a2ef0848c ("LoongArch: Add ORC stack unwinder support")
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202408120955.qls5oNQY-lkp@intel.com/
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> ---
> arch/loongarch/kernel/fpu.S | 4 ++++
> arch/loongarch/kvm/switch.S | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/arch/loongarch/kernel/fpu.S b/arch/loongarch/kernel/fpu.S
> index 69a85f2479fb..6ab640101457 100644
> --- a/arch/loongarch/kernel/fpu.S
> +++ b/arch/loongarch/kernel/fpu.S
> @@ -530,6 +530,10 @@ SYM_FUNC_END(_restore_lasx_context)
>
> #ifdef CONFIG_CPU_HAS_LBT
> STACK_FRAME_NON_STANDARD _restore_fp
> +#ifdef CONFIG_CPU_HAS_LSX
> STACK_FRAME_NON_STANDARD _restore_lsx
> +#endif
> +#ifdef CONFIG_CPU_HAS_LASX
> STACK_FRAME_NON_STANDARD _restore_lasx
> #endif
> +#endif
> diff --git a/arch/loongarch/kvm/switch.S b/arch/loongarch/kvm/switch.S
> index 80e988985a6a..0c292f818492 100644
> --- a/arch/loongarch/kvm/switch.S
> +++ b/arch/loongarch/kvm/switch.S
> @@ -277,6 +277,10 @@ SYM_DATA(kvm_enter_guest_size, .quad kvm_enter_guest_end - kvm_enter_guest)
>
> #ifdef CONFIG_CPU_HAS_LBT
> STACK_FRAME_NON_STANDARD kvm_restore_fpu
> +#ifdef CONFIG_CPU_HAS_LSX
> STACK_FRAME_NON_STANDARD kvm_restore_lsx
> +#endif
> +#ifdef CONFIG_CPU_HAS_LASX
> STACK_FRAME_NON_STANDARD kvm_restore_lasx
> #endif
> +#endif
> --
> 2.42.0
>
On 2024/8/20 下午8:37, Tiezhu Yang wrote:
> There exist some issues when building kernel if CONFIG_CPU_HAS_LBT is set
> but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this case,
> there are no definitions of _restore_lsx and _restore_lasx and there are
> also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S and
> switch.S respectively, just add some ifdefs to fix the issues.
>
> AS arch/loongarch/kernel/fpu.o
> arch/loongarch/kernel/fpu.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
> arch/loongarch/kernel/fpu.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
>
> AS [M] arch/loongarch/kvm/switch.o
> arch/loongarch/kvm/switch.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
> arch/loongarch/kvm/switch.o: warning: objtool: unexpected relocation symbol type in .rela.discard.func_stack_frame_non_standard: 0
>
> MODPOST Module.symvers
> ERROR: modpost: "kvm_restore_lsx" [arch/loongarch/kvm/kvm.ko] undefined!
> ERROR: modpost: "kvm_restore_lasx" [arch/loongarch/kvm/kvm.ko] undefined!
>
> Cc: stable@vger.kernel.org # 6.9+
> Fixes: cb8a2ef0848c ("LoongArch: Add ORC stack unwinder support")
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202408120955.qls5oNQY-lkp@intel.com/
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> ---
> arch/loongarch/kernel/fpu.S | 4 ++++
> arch/loongarch/kvm/switch.S | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/arch/loongarch/kernel/fpu.S b/arch/loongarch/kernel/fpu.S
> index 69a85f2479fb..6ab640101457 100644
> --- a/arch/loongarch/kernel/fpu.S
> +++ b/arch/loongarch/kernel/fpu.S
> @@ -530,6 +530,10 @@ SYM_FUNC_END(_restore_lasx_context)
>
> #ifdef CONFIG_CPU_HAS_LBT
> STACK_FRAME_NON_STANDARD _restore_fp
> +#ifdef CONFIG_CPU_HAS_LSX
> STACK_FRAME_NON_STANDARD _restore_lsx
> +#endif
> +#ifdef CONFIG_CPU_HAS_LASX
> STACK_FRAME_NON_STANDARD _restore_lasx
> #endif
> +#endif
> diff --git a/arch/loongarch/kvm/switch.S b/arch/loongarch/kvm/switch.S
> index 80e988985a6a..0c292f818492 100644
> --- a/arch/loongarch/kvm/switch.S
> +++ b/arch/loongarch/kvm/switch.S
> @@ -277,6 +277,10 @@ SYM_DATA(kvm_enter_guest_size, .quad kvm_enter_guest_end - kvm_enter_guest)
>
> #ifdef CONFIG_CPU_HAS_LBT
> STACK_FRAME_NON_STANDARD kvm_restore_fpu
> +#ifdef CONFIG_CPU_HAS_LSX
> STACK_FRAME_NON_STANDARD kvm_restore_lsx
> +#endif
> +#ifdef CONFIG_CPU_HAS_LASX
> STACK_FRAME_NON_STANDARD kvm_restore_lasx
> #endif
> +#endif
>
It is hard to understand to put CONFIG_CPU_HAS_LASX inside
CONFIG_CPU_HAS_LBT, in general option CONFIG_CPU_HAS_LBT has nothing
with CONFIG_CPU_HAS_LASX.
Would you like to add parameter func in macro fpu_restore_csr like this?
--- a/arch/loongarch/include/asm/asmmacro.h
+++ b/arch/loongarch/include/asm/asmmacro.h
@@ -55,10 +55,11 @@
#endif
.endm
- .macro fpu_restore_csr thread tmp0 tmp1
+ .macro fpu_restore_csr thread tmp0 tmp1 func
ldptr.w \tmp0, \thread, THREAD_FCSR
movgr2fcsr fcsr0, \tmp0
#ifdef CONFIG_CPU_HAS_LBT
+ STACK_FRAME_NON_STANDARD \func
/* TM bit is always 0 if LBT not supported */
andi \tmp0, \tmp0, FPU_CSR_TM
beqz \tmp0, 2f
@@ -282,10 +283,10 @@
lsx_save_data \thread, \tmp0
.endm
Regards
Bibo Mao
On 08/21/2024 09:12 AM, maobibo wrote: > > > On 2024/8/20 下午8:37, Tiezhu Yang wrote: >> There exist some issues when building kernel if CONFIG_CPU_HAS_LBT is set >> but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this case, >> there are no definitions of _restore_lsx and _restore_lasx and there are >> also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S and >> switch.S respectively, just add some ifdefs to fix the issues. ... > It is hard to understand to put CONFIG_CPU_HAS_LASX inside > CONFIG_CPU_HAS_LBT, in general option CONFIG_CPU_HAS_LBT has nothing > with CONFIG_CPU_HAS_LASX. > > Would you like to add parameter func in macro fpu_restore_csr like this? > > --- a/arch/loongarch/include/asm/asmmacro.h > +++ b/arch/loongarch/include/asm/asmmacro.h > @@ -55,10 +55,11 @@ > #endif > .endm > > - .macro fpu_restore_csr thread tmp0 tmp1 > + .macro fpu_restore_csr thread tmp0 tmp1 func > ldptr.w \tmp0, \thread, THREAD_FCSR > movgr2fcsr fcsr0, \tmp0 > #ifdef CONFIG_CPU_HAS_LBT > + STACK_FRAME_NON_STANDARD \func > /* TM bit is always 0 if LBT not supported */ > andi \tmp0, \tmp0, FPU_CSR_TM > beqz \tmp0, 2f > @@ -282,10 +283,10 @@ > lsx_save_data \thread, \tmp0 > .endm For the record, I modified the related code as you suggested and tested with various configs, it works well. But as we discussed offline, these current changes are small relatively and the STACK_FRAME_NON_STANDARD related code may be removed if there is a proper possible way, so just leave it as is in my opinion. Thanks, Tiezhu
On 2024/8/21 下午6:07, Tiezhu Yang wrote: > On 08/21/2024 09:12 AM, maobibo wrote: >> >> >> On 2024/8/20 下午8:37, Tiezhu Yang wrote: >>> There exist some issues when building kernel if CONFIG_CPU_HAS_LBT is >>> set >>> but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this >>> case, >>> there are no definitions of _restore_lsx and _restore_lasx and there are >>> also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S and >>> switch.S respectively, just add some ifdefs to fix the issues. > > ... > >> It is hard to understand to put CONFIG_CPU_HAS_LASX inside >> CONFIG_CPU_HAS_LBT, in general option CONFIG_CPU_HAS_LBT has nothing >> with CONFIG_CPU_HAS_LASX. >> >> Would you like to add parameter func in macro fpu_restore_csr like this? >> >> --- a/arch/loongarch/include/asm/asmmacro.h >> +++ b/arch/loongarch/include/asm/asmmacro.h >> @@ -55,10 +55,11 @@ >> #endif >> .endm >> >> - .macro fpu_restore_csr thread tmp0 tmp1 >> + .macro fpu_restore_csr thread tmp0 tmp1 func >> ldptr.w \tmp0, \thread, THREAD_FCSR >> movgr2fcsr fcsr0, \tmp0 >> #ifdef CONFIG_CPU_HAS_LBT >> + STACK_FRAME_NON_STANDARD \func >> /* TM bit is always 0 if LBT not supported */ >> andi \tmp0, \tmp0, FPU_CSR_TM >> beqz \tmp0, 2f >> @@ -282,10 +283,10 @@ >> lsx_save_data \thread, \tmp0 >> .endm > > For the record, I modified the related code as you suggested and tested > with various configs, it works well. > > But as we discussed offline, these current changes are small relatively > and the STACK_FRAME_NON_STANDARD related code may be removed if there > is a proper possible way, so just leave it as is in my opinion. Just be curious, what is the proper possible way to remove this, is it solved with new gcc/binutil version? Do we plan to drop latest gcc/binutils support in near future only in order to remove these STACK_FRAME_NON_STANDARD code? Regards Bibo Mao > > Thanks, > Tiezhu >
On 08/22/2024 09:09 AM, maobibo wrote: > > > On 2024/8/21 下午6:07, Tiezhu Yang wrote: >> On 08/21/2024 09:12 AM, maobibo wrote: >>> >>> >>> On 2024/8/20 下午8:37, Tiezhu Yang wrote: >>>> There exist some issues when building kernel if CONFIG_CPU_HAS_LBT >>>> is set >>>> but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this >>>> case, >>>> there are no definitions of _restore_lsx and _restore_lasx and there >>>> are >>>> also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S >>>> and >>>> switch.S respectively, just add some ifdefs to fix the issues. >> >> ... >> >>> It is hard to understand to put CONFIG_CPU_HAS_LASX inside >>> CONFIG_CPU_HAS_LBT, in general option CONFIG_CPU_HAS_LBT has nothing >>> with CONFIG_CPU_HAS_LASX. >>> >>> Would you like to add parameter func in macro fpu_restore_csr like this? >>> >>> --- a/arch/loongarch/include/asm/asmmacro.h >>> +++ b/arch/loongarch/include/asm/asmmacro.h >>> @@ -55,10 +55,11 @@ >>> #endif >>> .endm >>> >>> - .macro fpu_restore_csr thread tmp0 tmp1 >>> + .macro fpu_restore_csr thread tmp0 tmp1 func >>> ldptr.w \tmp0, \thread, THREAD_FCSR >>> movgr2fcsr fcsr0, \tmp0 >>> #ifdef CONFIG_CPU_HAS_LBT >>> + STACK_FRAME_NON_STANDARD \func >>> /* TM bit is always 0 if LBT not supported */ >>> andi \tmp0, \tmp0, FPU_CSR_TM >>> beqz \tmp0, 2f >>> @@ -282,10 +283,10 @@ >>> lsx_save_data \thread, \tmp0 >>> .endm >> >> For the record, I modified the related code as you suggested and >> tested with various configs, it works well. >> >> But as we discussed offline, these current changes are small relatively >> and the STACK_FRAME_NON_STANDARD related code may be removed if there >> is a proper possible way, so just leave it as is in my opinion. > Just be curious, what is the proper possible way to remove this, is it > solved with new gcc/binutil version? Do we plan to drop latest > gcc/binutils support in near future only in order to remove these > STACK_FRAME_NON_STANDARD code? These STACK_FRAME_NON_STANDARD related assembler code are irrelevant with compiler toolchains, the proper possible way is not yet clear for now but it is only related with kernel code itself. The support of compiler toolchains is to solve the issues such as the relocation type of label diff and jumptable info of swith case. The above two things are independent. Thanks, Tiezhu
On 2024/8/22 上午10:51, Tiezhu Yang wrote: > On 08/22/2024 09:09 AM, maobibo wrote: >> >> >> On 2024/8/21 下午6:07, Tiezhu Yang wrote: >>> On 08/21/2024 09:12 AM, maobibo wrote: >>>> >>>> >>>> On 2024/8/20 下午8:37, Tiezhu Yang wrote: >>>>> There exist some issues when building kernel if CONFIG_CPU_HAS_LBT >>>>> is set >>>>> but CONFIG_CPU_HAS_LSX and CONFIG_CPU_HAS_LASX are not set. In this >>>>> case, >>>>> there are no definitions of _restore_lsx and _restore_lasx and there >>>>> are >>>>> also no definitions of kvm_restore_lsx and kvm_restore_lasx in fpu.S >>>>> and >>>>> switch.S respectively, just add some ifdefs to fix the issues. >>> >>> ... >>> >>>> It is hard to understand to put CONFIG_CPU_HAS_LASX inside >>>> CONFIG_CPU_HAS_LBT, in general option CONFIG_CPU_HAS_LBT has nothing >>>> with CONFIG_CPU_HAS_LASX. >>>> >>>> Would you like to add parameter func in macro fpu_restore_csr like >>>> this? >>>> >>>> --- a/arch/loongarch/include/asm/asmmacro.h >>>> +++ b/arch/loongarch/include/asm/asmmacro.h >>>> @@ -55,10 +55,11 @@ >>>> #endif >>>> .endm >>>> >>>> - .macro fpu_restore_csr thread tmp0 tmp1 >>>> + .macro fpu_restore_csr thread tmp0 tmp1 func >>>> ldptr.w \tmp0, \thread, THREAD_FCSR >>>> movgr2fcsr fcsr0, \tmp0 >>>> #ifdef CONFIG_CPU_HAS_LBT >>>> + STACK_FRAME_NON_STANDARD \func >>>> /* TM bit is always 0 if LBT not supported */ >>>> andi \tmp0, \tmp0, FPU_CSR_TM >>>> beqz \tmp0, 2f >>>> @@ -282,10 +283,10 @@ >>>> lsx_save_data \thread, \tmp0 >>>> .endm >>> >>> For the record, I modified the related code as you suggested and >>> tested with various configs, it works well. >>> >>> But as we discussed offline, these current changes are small relatively >>> and the STACK_FRAME_NON_STANDARD related code may be removed if there >>> is a proper possible way, so just leave it as is in my opinion. >> Just be curious, what is the proper possible way to remove this, is it >> solved with new gcc/binutil version? Do we plan to drop latest >> gcc/binutils support in near future only in order to remove these >> STACK_FRAME_NON_STANDARD code? > > These STACK_FRAME_NON_STANDARD related assembler code are irrelevant > with compiler toolchains, the proper possible way is not yet clear > for now but it is only related with kernel code itself. OK, I see. Thanks for the explanation, and I am ok for this patch. Regards Bibo Mao > > The support of compiler toolchains is to solve the issues such as > the relocation type of label diff and jumptable info of swith case. > > The above two things are independent. > > Thanks, > Tiezhu
© 2016 - 2026 Red Hat, Inc.