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. Hauke
Attachment:
signature.asc
Description: OpenPGP digital signature