Message ID | 20220715185551.3951955-1-f.fainelli@gmail.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | tools: Fixed MIPS builds due to struct flock re-definition | expand |
Le 15/07/2022 à 11:55, Florian Fainelli a écrit : > Building perf for MIPS failed after 9f79b8b72339 ("uapi: simplify > __ARCH_FLOCK{,64}_PAD a little") with the following error: > > CC > /home/fainelli/work/buildroot/output/bmips/build/linux-custom/tools/perf/trace/beauty/fcntl.o > In file included from > ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:77, > from ../include/uapi/linux/fcntl.h:5, > from trace/beauty/fcntl.c:10: > ../include/uapi/asm-generic/fcntl.h:188:8: error: redefinition of > 'struct flock' > struct flock { > ^~~~~ > In file included from ../include/uapi/linux/fcntl.h:5, > from trace/beauty/fcntl.c:10: > ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:63:8: > note: originally defined here > struct flock { > ^~~~~ > > This is due to the local copy under > tools/include/uapi/asm-generic/fcntl.h including the toolchain's kernel > headers which already define 'struct flock' and define > HAVE_ARCH_STRUCT_FLOCK to future inclusions make a decision as to > whether re-defining 'struct flock' is appropriate or not. > > Make sure what do not re-define 'struct flock' > when HAVE_ARCH_STRUCT_FLOCK is already defined. > > Fixes: 9f79b8b72339 ("uapi: simplify __ARCH_FLOCK{,64}_PAD a little") > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- Any chance to apply this patch prior to v5.19 being final? Thanks!
On 7/16/2022 4:21 PM, Florian Fainelli wrote: > Le 15/07/2022 à 11:55, Florian Fainelli a écrit : >> Building perf for MIPS failed after 9f79b8b72339 ("uapi: simplify >> __ARCH_FLOCK{,64}_PAD a little") with the following error: >> >> CC >> /home/fainelli/work/buildroot/output/bmips/build/linux-custom/tools/perf/trace/beauty/fcntl.o >> In file included from >> ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:77, >> from ../include/uapi/linux/fcntl.h:5, >> from trace/beauty/fcntl.c:10: >> ../include/uapi/asm-generic/fcntl.h:188:8: error: redefinition of >> 'struct flock' >> struct flock { >> ^~~~~ >> In file included from ../include/uapi/linux/fcntl.h:5, >> from trace/beauty/fcntl.c:10: >> ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:63:8: >> note: originally defined here >> struct flock { >> ^~~~~ >> >> This is due to the local copy under >> tools/include/uapi/asm-generic/fcntl.h including the toolchain's kernel >> headers which already define 'struct flock' and define >> HAVE_ARCH_STRUCT_FLOCK to future inclusions make a decision as to >> whether re-defining 'struct flock' is appropriate or not. >> >> Make sure what do not re-define 'struct flock' >> when HAVE_ARCH_STRUCT_FLOCK is already defined. >> >> Fixes: 9f79b8b72339 ("uapi: simplify __ARCH_FLOCK{,64}_PAD a little") >> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> >> --- > > Any chance to apply this patch prior to v5.19 being final? Thanks! Ping?
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
(although userspace including two copies of fcntl.h is really broken).
On Fri, Jul 15, 2022 at 8:55 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Building perf for MIPS failed after 9f79b8b72339 ("uapi: simplify > __ARCH_FLOCK{,64}_PAD a little") with the following error: > > CC > /home/fainelli/work/buildroot/output/bmips/build/linux-custom/tools/perf/trace/beauty/fcntl.o > In file included from > ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:77, > from ../include/uapi/linux/fcntl.h:5, > from trace/beauty/fcntl.c:10: > ../include/uapi/asm-generic/fcntl.h:188:8: error: redefinition of > 'struct flock' > struct flock { > ^~~~~ > In file included from ../include/uapi/linux/fcntl.h:5, > from trace/beauty/fcntl.c:10: > ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:63:8: > note: originally defined here > struct flock { > ^~~~~ > > This is due to the local copy under > tools/include/uapi/asm-generic/fcntl.h including the toolchain's kernel > headers which already define 'struct flock' and define > HAVE_ARCH_STRUCT_FLOCK to future inclusions make a decision as to > whether re-defining 'struct flock' is appropriate or not. > > Make sure what do not re-define 'struct flock' > when HAVE_ARCH_STRUCT_FLOCK is already defined. > > Fixes: 9f79b8b72339 ("uapi: simplify __ARCH_FLOCK{,64}_PAD a little") > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > tools/include/uapi/asm-generic/fcntl.h | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/tools/include/uapi/asm-generic/fcntl.h b/tools/include/uapi/asm-generic/fcntl.h > index 0197042b7dfb..312881aa272b 100644 > --- a/tools/include/uapi/asm-generic/fcntl.h > +++ b/tools/include/uapi/asm-generic/fcntl.h > @@ -185,6 +185,7 @@ struct f_owner_ex { > > #define F_LINUX_SPECIFIC_BASE 1024 > > +#ifndef HAVE_ARCH_STRUCT_FLOCK > struct flock { > short l_type; > short l_whence; > @@ -209,5 +210,6 @@ struct flock64 { > __ARCH_FLOCK64_PAD > #endif > }; > +#endif /* HAVE_ARCH_STRUCT_FLOCK */ > I applied this to the asm-generic tree, but now I'm having second thoughts, as this only changes the tools/include/ version but not the version we ship to user space. Normally these are meant to be kept in sync. It appears that commit 306f7cc1e906 ("uapi: always define F_GETLK64/F_SETLK64/F_SETLKW64 in fcntl.h") already caused them to diverge, presumably the uapi version here is correct and we forgot to adapt the tools version at some point. There are also some non-functional differences from older patches. I think the correct fix to address the problem in both versions and get them back into sync would be something like the patch below. I have done zero testing on it though. Christoph and Florian, any other suggestions? Arnd diff --git a/include/uapi/asm-generic/fcntl.h b/include/uapi/asm-generic/fcntl.h index f13d37b60775..1ecdb911add8 100644 --- a/include/uapi/asm-generic/fcntl.h +++ b/include/uapi/asm-generic/fcntl.h @@ -192,6 +192,7 @@ struct f_owner_ex { #define F_LINUX_SPECIFIC_BASE 1024 +#ifndef HAVE_ARCH_STRUCT_FLOCK struct flock { short l_type; short l_whence; @@ -216,5 +217,6 @@ struct flock64 { __ARCH_FLOCK64_PAD #endif }; +#endif /* HAVE_ARCH_STRUCT_FLOCK */ #endif /* _ASM_GENERIC_FCNTL_H */ diff --git a/tools/include/uapi/asm-generic/fcntl.h b/tools/include/uapi/asm-generic/fcntl.h index 312881aa272b..1ecdb911add8 100644 --- a/tools/include/uapi/asm-generic/fcntl.h +++ b/tools/include/uapi/asm-generic/fcntl.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ #ifndef _ASM_GENERIC_FCNTL_H #define _ASM_GENERIC_FCNTL_H @@ -90,7 +91,7 @@ /* a horrid kludge trying to make sure that this will fail on old kernels */ #define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) -#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT) +#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT) #ifndef O_NDELAY #define O_NDELAY O_NONBLOCK @@ -115,11 +116,13 @@ #define F_GETSIG 11 /* for sockets. */ #endif +#if __BITS_PER_LONG == 32 || defined(__KERNEL__) #ifndef F_GETLK64 #define F_GETLK64 12 /* using 'struct flock64' */ #define F_SETLK64 13 #define F_SETLKW64 14 #endif +#endif /* __BITS_PER_LONG == 32 || defined(__KERNEL__) */ #ifndef F_SETOWN_EX #define F_SETOWN_EX 15 @@ -178,6 +181,10 @@ struct f_owner_ex { blocking */ #define LOCK_UN 8 /* remove lock */ +/* + * LOCK_MAND support has been removed from the kernel. We leave the symbols + * here to not break legacy builds, but these should not be used in new code. + */ #define LOCK_MAND 32 /* This is a mandatory flock ... */ #define LOCK_READ 64 /* which allows concurrent read operations */ #define LOCK_WRITE 128 /* which allows concurrent write operations */
On Tue, Jul 19, 2022 at 09:42:23AM +0200, Arnd Bergmann wrote: > I think the correct fix to address the problem in both versions and > get them back into sync would be something like the patch below. > I have done zero testing on it though. > > Christoph and Florian, any other suggestions? Fine with me. I still think these whole tools/ copy of headers are just broken. Userspace code must use system headers and not try to include two slightly out of sync versions of the same header in obsfucated ways.
On 7/19/2022 12:42 AM, Arnd Bergmann wrote: > On Fri, Jul 15, 2022 at 8:55 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Building perf for MIPS failed after 9f79b8b72339 ("uapi: simplify >> __ARCH_FLOCK{,64}_PAD a little") with the following error: >> >> CC >> /home/fainelli/work/buildroot/output/bmips/build/linux-custom/tools/perf/trace/beauty/fcntl.o >> In file included from >> ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:77, >> from ../include/uapi/linux/fcntl.h:5, >> from trace/beauty/fcntl.c:10: >> ../include/uapi/asm-generic/fcntl.h:188:8: error: redefinition of >> 'struct flock' >> struct flock { >> ^~~~~ >> In file included from ../include/uapi/linux/fcntl.h:5, >> from trace/beauty/fcntl.c:10: >> ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:63:8: >> note: originally defined here >> struct flock { >> ^~~~~ >> >> This is due to the local copy under >> tools/include/uapi/asm-generic/fcntl.h including the toolchain's kernel >> headers which already define 'struct flock' and define >> HAVE_ARCH_STRUCT_FLOCK to future inclusions make a decision as to >> whether re-defining 'struct flock' is appropriate or not. >> >> Make sure what do not re-define 'struct flock' >> when HAVE_ARCH_STRUCT_FLOCK is already defined. >> >> Fixes: 9f79b8b72339 ("uapi: simplify __ARCH_FLOCK{,64}_PAD a little") >> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> >> --- >> tools/include/uapi/asm-generic/fcntl.h | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/tools/include/uapi/asm-generic/fcntl.h b/tools/include/uapi/asm-generic/fcntl.h >> index 0197042b7dfb..312881aa272b 100644 >> --- a/tools/include/uapi/asm-generic/fcntl.h >> +++ b/tools/include/uapi/asm-generic/fcntl.h >> @@ -185,6 +185,7 @@ struct f_owner_ex { >> >> #define F_LINUX_SPECIFIC_BASE 1024 >> >> +#ifndef HAVE_ARCH_STRUCT_FLOCK >> struct flock { >> short l_type; >> short l_whence; >> @@ -209,5 +210,6 @@ struct flock64 { >> __ARCH_FLOCK64_PAD >> #endif >> }; >> +#endif /* HAVE_ARCH_STRUCT_FLOCK */ >> > > I applied this to the asm-generic tree, but now I'm having second thoughts, as > this only changes the tools/include/ version but not the version we ship to user > space. Normally these are meant to be kept in sync. Thanks! Just to be clear, applying just your patch is not enough as the original build issue is still present, so we would need my change plus yours, I think that is what you intended but just wanted to double confirm. On a side note your tree at: https://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git/refs/heads does not appear to have it included/pushed out yet, should I be looking at another git tree? > > It appears that commit 306f7cc1e906 ("uapi: always define > F_GETLK64/F_SETLK64/F_SETLKW64 in fcntl.h") already caused > them to diverge, presumably the uapi version here is correct and we > forgot to adapt the tools version at some point. There are also some > non-functional differences from older patches. > > I think the correct fix to address the problem in both versions and > get them back into sync would be something like the patch below. > I have done zero testing on it though. > > Christoph and Florian, any other suggestions? This works for me with my patch plus your patch in the following configurations: - MIPS toolchain with kernel-headers 4.1.x - MIPS toolchain with kernel headers using my patch plus your patch Tested-by: Florian Fainelli <f.fainelli@gmail.com>
On Tue, Jul 19, 2022 at 9:05 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > On 7/19/2022 12:42 AM, Arnd Bergmann wrote: > > I applied this to the asm-generic tree, but now I'm having second thoughts, as > > this only changes the tools/include/ version but not the version we ship to user > > space. Normally these are meant to be kept in sync. > > Thanks! Just to be clear, applying just your patch is not enough as the > original build issue is still present, so we would need my change plus > yours, I think that is what you intended but just wanted to double > confirm. Yes, this was just the diff on top of your patch, I've folded it into a single commit now. > On a side note your tree at: > > https://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git/refs/heads > > does not appear to have it included/pushed out yet, should I be looking > at another git tree? Pushed it out now. There is the main asm-generic branch that is in linux-next, and the asm-generic-fixes branch that I should send after the build bots report success. I've merged the fixes branch into the main branch for testing for the moment, but will undo the merge when I forward the contents. > > It appears that commit 306f7cc1e906 ("uapi: always define > > F_GETLK64/F_SETLK64/F_SETLKW64 in fcntl.h") already caused > > them to diverge, presumably the uapi version here is correct and we > > forgot to adapt the tools version at some point. There are also some > > non-functional differences from older patches. > > > > I think the correct fix to address the problem in both versions and > > get them back into sync would be something like the patch below. > > I have done zero testing on it though. > > > > Christoph and Florian, any other suggestions? > > This works for me with my patch plus your patch in the following > configurations: > > - MIPS toolchain with kernel-headers 4.1.x > - MIPS toolchain with kernel headers using my patch plus your patch > > Tested-by: Florian Fainelli <f.fainelli@gmail.com> Thanks! Arnd
On 7/19/2022 2:15 PM, Arnd Bergmann wrote: > On Tue, Jul 19, 2022 at 9:05 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> On 7/19/2022 12:42 AM, Arnd Bergmann wrote: > >>> I applied this to the asm-generic tree, but now I'm having second thoughts, as >>> this only changes the tools/include/ version but not the version we ship to user >>> space. Normally these are meant to be kept in sync. >> >> Thanks! Just to be clear, applying just your patch is not enough as the >> original build issue is still present, so we would need my change plus >> yours, I think that is what you intended but just wanted to double >> confirm. > > Yes, this was just the diff on top of your patch, I've folded it into a single > commit now. > >> On a side note your tree at: >> >> https://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic.git/refs/heads >> >> does not appear to have it included/pushed out yet, should I be looking >> at another git tree? > > Pushed it out now. There is the main asm-generic branch that is in > linux-next, and the asm-generic-fixes branch that I should send after > the build bots report success. > > I've merged the fixes branch into the main branch for testing for the > moment, but will undo the merge when I forward the contents. All good, thanks a lot!
diff --git a/tools/include/uapi/asm-generic/fcntl.h b/tools/include/uapi/asm-generic/fcntl.h index 0197042b7dfb..312881aa272b 100644 --- a/tools/include/uapi/asm-generic/fcntl.h +++ b/tools/include/uapi/asm-generic/fcntl.h @@ -185,6 +185,7 @@ struct f_owner_ex { #define F_LINUX_SPECIFIC_BASE 1024 +#ifndef HAVE_ARCH_STRUCT_FLOCK struct flock { short l_type; short l_whence; @@ -209,5 +210,6 @@ struct flock64 { __ARCH_FLOCK64_PAD #endif }; +#endif /* HAVE_ARCH_STRUCT_FLOCK */ #endif /* _ASM_GENERIC_FCNTL_H */
Building perf for MIPS failed after 9f79b8b72339 ("uapi: simplify __ARCH_FLOCK{,64}_PAD a little") with the following error: CC /home/fainelli/work/buildroot/output/bmips/build/linux-custom/tools/perf/trace/beauty/fcntl.o In file included from ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:77, from ../include/uapi/linux/fcntl.h:5, from trace/beauty/fcntl.c:10: ../include/uapi/asm-generic/fcntl.h:188:8: error: redefinition of 'struct flock' struct flock { ^~~~~ In file included from ../include/uapi/linux/fcntl.h:5, from trace/beauty/fcntl.c:10: ../../../../host/mipsel-buildroot-linux-gnu/sysroot/usr/include/asm/fcntl.h:63:8: note: originally defined here struct flock { ^~~~~ This is due to the local copy under tools/include/uapi/asm-generic/fcntl.h including the toolchain's kernel headers which already define 'struct flock' and define HAVE_ARCH_STRUCT_FLOCK to future inclusions make a decision as to whether re-defining 'struct flock' is appropriate or not. Make sure what do not re-define 'struct flock' when HAVE_ARCH_STRUCT_FLOCK is already defined. Fixes: 9f79b8b72339 ("uapi: simplify __ARCH_FLOCK{,64}_PAD a little") Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- tools/include/uapi/asm-generic/fcntl.h | 2 ++ 1 file changed, 2 insertions(+)