On Tuesday 26 May 2020 23:02:56 CEST Hauke Mehrtens wrote: > On 5/25/20 11:35 AM, Jérôme Pouiller wrote: > > On Thursday 21 May 2020 22:14:22 CEST Hauke Mehrtens wrote: > >> When compiling inside the kernel include linux/stddef.h instead of > >> stddef.h. When I compile this header file in backports for power PC I > >> run into a conflict with ptrdiff_t. I was unable to reproduce this in > >> mainline kernel. I still would like to fix this problem in the kernel. > >> > >> Fixes: 6989310f5d43 ("wireless: Use offsetof instead of custom macro.") > >> Signed-off-by: Hauke Mehrtens <hauke@xxxxxxxxxx> > >> --- > >> include/uapi/linux/wireless.h | 6 +++++- > >> 1 file changed, 5 insertions(+), 1 deletion(-) > >> > >> diff --git a/include/uapi/linux/wireless.h b/include/uapi/linux/wireless.h > >> index a2c006a364e0..24f3371ad826 100644 > >> --- a/include/uapi/linux/wireless.h > >> +++ b/include/uapi/linux/wireless.h > >> @@ -74,7 +74,11 @@ > >> #include <linux/socket.h> /* for "struct sockaddr" et al */ > >> #include <linux/if.h> /* for IFNAMSIZ and co... */ > >> > >> -#include <stddef.h> /* for offsetof */ > >> +#ifdef __KERNEL__ > >> +# include <linux/stddef.h> /* for offsetof */ > >> +#else > >> +# include <stddef.h> /* for offsetof */ > >> +#endif > > > > Hello, > > > > This patch also solves a warning I encountered when I launched sparse > > (with make C=1): > > > > /usr/lib/gcc-cross/arm-linux-gnueabihf/9/include/stddef.h:406:9: warning: preprocessor token offsetof redefined > > ./include/linux/stddef.h:17:9: this was the original definition > > > > However, I wonder if it useful to keep 'include <stddef.h>' when this file > > is included from userspace. If it does not compile anymore, there is > > problem somewhere else, no? > > > > (Globally, I always find suspicious a kernel source that includes a system > > header) > Hi, > > The wireless.h makes use of offsetof and this is defined in system > stddef.h and in include/linux/stddef.h. When we only include > linux/stddef.h it will work fine when compiled inside the kernel, but it > could cause problems when used in user space, because this would include > ./include/uapi/linux/stddef.h which does not define offsetof. > > I think we need the #ifdef __KERNEL__ to make this work in the kernel > and in the user space. In this case, maybe the problem should be resolved directly in uapi/linux/stddef.h? I have found other headers that use offsetof and may have the same problem (currently, they do not include stddef.h. So, some of the macros do not compile): - include/uapi/linux/fuse.h - include/uapi/linux/genwqe/genwqe_card.h - include/uapi/linux/gfs2_ondisk.h -- Jérôme Pouiller