Re: [PATCH v2] powerpc: fix EDEADLOCK redefinition error in uapi/asm/errno.h
From: Tony Ambardar
Date: Thu Sep 17 2020 - 10:04:52 EST
On Thu, 17 Sep 2020 at 04:55, Michael Ellerman <mpe@xxxxxxxxxxxxxx> wrote:
>
> [ Cc += linux-arch & Arnd ]
>
> Hi Tony,
>
> This looks OK to me, but I'm always a bit nervous about changes in uapi.
> I've Cc'ed linux-arch and Arnd who look after the asm-generic headers,
> which this is slightly related to, just in case.
>
I agree with the caution and would welcome any other insights.
> One minor comment below.
>
> Tony Ambardar <tony.ambardar@xxxxxxxxx> writes:
> > A few archs like powerpc have different errno.h values for macros
> > EDEADLOCK and EDEADLK. In code including both libc and linux versions of
> > errno.h, this can result in multiple definitions of EDEADLOCK in the
> > include chain. Definitions to the same value (e.g. seen with mips) do
> > not raise warnings, but on powerpc there are redefinitions changing the
> > value, which raise warnings and errors (if using "-Werror").
> >
> > Guard against these redefinitions to avoid build errors like the following,
> > first seen cross-compiling libbpf v5.8.9 for powerpc using GCC 8.4.0 with
> > musl 1.1.24:
> >
> > In file included from ../../arch/powerpc/include/uapi/asm/errno.h:5,
> > from ../../include/linux/err.h:8,
> > from libbpf.c:29:
> > ../../include/uapi/asm-generic/errno.h:40: error: "EDEADLOCK" redefined [-Werror]
> > #define EDEADLOCK EDEADLK
> >
> > In file included from toolchain-powerpc_8540_gcc-8.4.0_musl/include/errno.h:10,
> > from libbpf.c:26:
> > toolchain-powerpc_8540_gcc-8.4.0_musl/include/bits/errno.h:58: note: this is the location of the previous definition
> > #define EDEADLOCK 58
> >
> > cc1: all warnings being treated as errors
> >
> > Fixes: 95f28190aa01 ("tools include arch: Grab a copy of errno.h for arch's supported by perf")
> > Fixes: c3617f72036c ("UAPI: (Scripted) Disintegrate arch/powerpc/include/asm")
>
> I suspect that's not the right commit to tag. It just moved errno.h from
> arch/powerpc/include/asm to arch/powerpc/include/uapi/asm. It's content
> was almost identical, and entirely identical as far as EDEADLOCK was
> concerned.
>
> Prior to that the file lived in asm-powerpc/errno.h, eg:
>
> $ git cat-file -p b8b572e1015f^:include/asm-powerpc/errno.h
>
> Before that it was include/asm-ppc64/errno.h, content still the same.
>
> To go back further we'd have to look at the historical git trees, which
> is probably overkill. I'm pretty sure it's always had this problem.
>
> So we should probably drop the Fixes tags and just Cc: stable, that
> means please backport it as far back as possible.
>
Yes, you're right. Those two commits were simply where I stopped tracing back
the long chain. I'll drop them as you suggest and request a backport instead in
the next version of the patch.
Thanks for your feedback!
> cheers
>
>
> > Reported-by: Rosen Penev <rosenp@xxxxxxxxx>
> > Signed-off-by: Tony Ambardar <Tony.Ambardar@xxxxxxxxx>
> > ---
> > v1 -> v2:
> > * clean up commit description formatting
> > ---
> > arch/powerpc/include/uapi/asm/errno.h | 1 +
> > tools/arch/powerpc/include/uapi/asm/errno.h | 1 +
> > 2 files changed, 2 insertions(+)
> >
> > diff --git a/arch/powerpc/include/uapi/asm/errno.h b/arch/powerpc/include/uapi/asm/errno.h
> > index cc79856896a1..4ba87de32be0 100644
> > --- a/arch/powerpc/include/uapi/asm/errno.h
> > +++ b/arch/powerpc/include/uapi/asm/errno.h
> > @@ -2,6 +2,7 @@
> > #ifndef _ASM_POWERPC_ERRNO_H
> > #define _ASM_POWERPC_ERRNO_H
> >
> > +#undef EDEADLOCK
> > #include <asm-generic/errno.h>
> >
> > #undef EDEADLOCK
> > diff --git a/tools/arch/powerpc/include/uapi/asm/errno.h b/tools/arch/powerpc/include/uapi/asm/errno.h
> > index cc79856896a1..4ba87de32be0 100644
> > --- a/tools/arch/powerpc/include/uapi/asm/errno.h
> > +++ b/tools/arch/powerpc/include/uapi/asm/errno.h
> > @@ -2,6 +2,7 @@
> > #ifndef _ASM_POWERPC_ERRNO_H
> > #define _ASM_POWERPC_ERRNO_H
> >
> > +#undef EDEADLOCK
> > #include <asm-generic/errno.h>
> >
> > #undef EDEADLOCK
> > --
> > 2.25.1