[PATCH] powerpc/64: Always build with 128-bit long double
Hamza Mahfooz
hamza.mahfooz at amd.com
Thu Apr 6 17:12:46 UTC 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 amd-gfx
mailing list