Luis R. Rodriguez mcgrof@do-not-panic.com wrote:
The include_next trick can work as well but that'd mean synching the UAPI files regularly into compat. I'd much prefer to have code intact when possible when backporting so the option I stuck with then was to patch the code directly and then as part of compat-drivers to always copy that day's linux-next UAPI headers into the current directory for compilation. I see no other driver code using the uapi path explicitly though, is that by design?
As far as I understand that's by design, yes. Kernel code isn't expected to reference uapi/ headers directly.
Did the design consider the case where no respective kernel API header file would ever exist?
I didn't particularly design it such that kernel .c files couldn't access uapi .h files directly. I did, however, design it so that my scripts wouldn't have to touch any .c files where possible, and certainly I didn't want to have to double up all #includes that refer to KAPI/UAPI split headers.
Ideally, I'd've used #include_next in the KAPI file to refer to the UAPI file where both exist, but some people have strong objections to that, so I ended up having to do #include <uapi/...> instead.
I also didn't want to rename the asm/, linux/, etc. prefixes as that would mandate changing pretty much every #include in the kernel.
For the case where no respective KAPI file exists, it was considered and it is handled. This is done by adding extra -I flags, for example:
-I include -I include/uapi
so looking for linux/foo.h, say, will look first for include/linux/foo.h and then for include/uapi/linux/foo.h.
David