[PATCH] powerpc/64: Always build with 128-bit long double

Hamza Mahfooz hamza.mahfooz at amd.com
Fri Apr 7 03:12:46 AEST 2023


On 4/4/23 06:28, Michael Ellerman wrote:
> The amdgpu driver builds some of its code with hard-float enabled,
> whereas the rest of the kernel is built with soft-float.
> 
> When building with 64-bit long double, if soft-float and hard-float
> objects are linked together, the build fails due to incompatible ABI
> tags.
> 
> In the past there have been build errors in the amdgpu driver caused by
> this, some of those were due to bad intermingling of soft & hard-float
> code, but those issues have now all been fixed since commit c92b7fe0d92a
> ("drm/amd/display: move remaining FPU code to dml folder").
> 
> However it's still possible for soft & hard-float objects to end up
> linked together, if the amdgpu driver is built-in to the kernel along
> with the test_emulate_step.c code, which uses soft-float. That happens
> in an allyesconfig build.
> 
> Currently those build errors are avoided because the amdgpu driver is
> gated on 128-bit long double being enabled. But that's not a detail the
> amdgpu driver should need to be aware of, and if another driver starts
> using hard-float the same problem would occur.
> 
> All versions of the 64-bit ABI specify that long-double is 128-bits.
> However some compilers, notably the kernel.org ones, are built to use
> 64-bit long double by default.
> 
> Apart from this issue of soft vs hard-float, the kernel doesn't care
> what size long double is. In particular the kernel using 128-bit long
> double doesn't impact userspace's ability to use 64-bit long double, as
> musl does.
> 
> So always build the 64-bit kernel with 128-bit long double. That should
> avoid any build errors due to the incompatible ABI tags. Excluding the
> code that uses soft/hard-float, the vmlinux is identical with/without
> the flag.
> 
> It does mean any code which is incorrectly intermingling soft &
> hard-float code will build without error, so those bugs will need to be
> caught by testing rather than at build time.
> 
> For more background see:
>    - commit d11219ad53dc ("amdgpu: disable powerpc support for the newer display engine")
>    - commit c653c591789b ("drm/amdgpu: Re-enable DCN for 64-bit powerpc")
>    - https://lore.kernel.org/r/dab9cbd8-2626-4b99-8098-31fe76397d2d@app.fastmail.com
> 
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>

Reviewed-by: Hamza Mahfooz <hamza.mahfooz at amd.com>

If you'd prefer to have this go through the amdgpu branch, please let
me know.

> ---
>   arch/powerpc/Kconfig                | 4 ----
>   arch/powerpc/Makefile               | 1 +
>   drivers/gpu/drm/amd/display/Kconfig | 2 +-
>   3 files changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index fc4e81dafca7..3fb2c2766139 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -291,10 +291,6 @@ config PPC
>   	# Please keep this list sorted alphabetically.
>   	#
>   
> -config PPC_LONG_DOUBLE_128
> -	depends on PPC64 && ALTIVEC
> -	def_bool $(success,test "$(shell,echo __LONG_DOUBLE_128__ | $(CC) -E -P -)" = 1)
> -
>   config PPC_BARRIER_NOSPEC
>   	bool
>   	default y
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 12447b2361e4..4343cca57cb3 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -133,6 +133,7 @@ endif
>   endif
>   CFLAGS-$(CONFIG_PPC64)	+= $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc))
>   CFLAGS-$(CONFIG_PPC64)	+= $(call cc-option,-mno-pointers-to-nested-functions)
> +CFLAGS-$(CONFIG_PPC64)	+= $(call cc-option,-mlong-double-128)
>   
>   # Clang unconditionally reserves r2 on ppc32 and does not support the flag
>   # https://bugs.llvm.org/show_bug.cgi?id=39555
> diff --git a/drivers/gpu/drm/amd/display/Kconfig b/drivers/gpu/drm/amd/display/Kconfig
> index 0c9bd0a53e60..e36261d546af 100644
> --- a/drivers/gpu/drm/amd/display/Kconfig
> +++ b/drivers/gpu/drm/amd/display/Kconfig
> @@ -8,7 +8,7 @@ config DRM_AMD_DC
>   	depends on BROKEN || !CC_IS_CLANG || X86_64 || SPARC64 || ARM64
>   	select SND_HDA_COMPONENT if SND_HDA_CORE
>   	# !CC_IS_CLANG: https://github.com/ClangBuiltLinux/linux/issues/1752
> -	select DRM_AMD_DC_DCN if (X86 || PPC_LONG_DOUBLE_128 || (ARM64 && KERNEL_MODE_NEON && !CC_IS_CLANG))
> +	select DRM_AMD_DC_DCN if (X86 || (PPC64 && ALTIVEC) || (ARM64 && KERNEL_MODE_NEON && !CC_IS_CLANG))
>   	help
>   	  Choose this option if you want to use the new display engine
>   	  support for AMDGPU. This adds required support for Vega and
-- 
Hamza



More information about the Linuxppc-dev mailing list