There are only two instances of asm/unaligned.h in the tree - arc and parisc. Everything else picks it from asm-generic/unaligned.h and if not these two, we could just move asm-generic/unaligned.h into include/linux/unaligned.h and do a tree-wide search-and-replace that would kill the largest class of asm/*.h includes in the entire kernel. Turns out, arc and parisc asm/unaligned.h are very close to being straight #include <asm-generic/unaligned.h> themselves. The following series massages them away. It can be found in git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git #work.headers.unaligned Three commits - dealing with parisc, dealing with arc and autogenerated search-and-replace job (that would obviously be better off done by Linus at the next -rc1). Individual patches in followups (the last one - just the commit message with script for reproducing the damn thing; the diff itself is just under 12K lines, <asm/unaligned.h> being the most widely include asm/*.h in the entire tree). Please, review. I don't really care which tree(s) does that stuff go through; I can put the first two in my #for-next, as long as nobody has objections to the patches themselves.