Arnd Bergmann
2021-Nov-19 16:25 UTC
[PATCH 00/17] Add memberof(), split some headers, and slightly simplify code
On Fri, Nov 19, 2021 at 5:12 PM Alejandro Colomar (man-pages) <alx.manpages at gmail.com> wrote:> > On 11/19/21 16:57, Arnd Bergmann wrote: > > > > From what I can tell, linux/stddef.h is tiny, I don't think it's really > > worth optimizing this part. I have spent some time last year > > trying to untangle some of the more interesting headers, but ended > > up not completing this as there are some really hard problems > > once you start getting to the interesting bits. > > In this case it was not about being worth it or not, > but that the fact that adding memberof() would break, > unless I use 0 instead of NULL for the implementation of memberof(), > which I'm against, or I split stddef. > > If I don't do either of those, > I'm creating a circular dependency, > and it doesn't compile.Sorry for missing the background here, but I don't see what that dependency is. If memberof() is a macro, then including the definition should not require having the NULL definition first, you just need to have both at the time you use it.> > The main issue here is that user space code should not > > include anything outside of include/uapi/ and arch/*/include/uapi/ > > Okay. That's good to know. > > So everything can use uapi code, > and uapi code can only use uapi code, > right?Correct.> > offsetof() is defined in include/linux/stddef.h, so this is by > > definition not accessible here. It appears that there is also > > an include/uapi/linux/stddef.h that is really strange because > > it includes linux/compiler_types.h, which in turn is outside > > of uapi/. This should probably be fixed. > > I see. > Then, > perhaps it would be better to define offsetof() _only_ inside uapi/, > and use that definition from everywhere else, > and therefore remove the non-uapi version, > right?No, because the user-space <stddef.h> provided by the compiler also includes an offsetof() definition. In the uapi/ namespace, the kernel must only provide definitions that do not clash with anything in user space. Arnd