mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 02:04:19 +08:00
597781f3e5
kunmap_atomic() is currently at level -4 on Rusty's "Hard To Misuse" list[1] ("Follow common convention and you'll get it wrong"), except in some architectures when CONFIG_DEBUG_HIGHMEM is set[2][3]. kunmap() takes a pointer to a struct page; kunmap_atomic(), however, takes takes a pointer to within the page itself. This seems to once in a while trip people up (the convention they are following is the one from kunmap()). Make it much harder to misuse, by moving it to level 9 on Rusty's list[4] ("The compiler/linker won't let you get it wrong"). This is done by refusing to build if the type of its first argument is a pointer to a struct page. The real kunmap_atomic() is renamed to kunmap_atomic_notypecheck() (which is what you would call in case for some strange reason calling it with a pointer to a struct page is not incorrect in your code). The previous version of this patch was compile tested on x86-64. [1] http://ozlabs.org/~rusty/index.cgi/tech/2008-04-01.html [2] In these cases, it is at level 5, "Do it right or it will always break at runtime." [3] At least mips and powerpc look very similar, and sparc also seems to share a common ancestor with both; there seems to be quite some degree of copy-and-paste coding here. The include/asm/highmem.h file for these three archs mention x86 CPUs at its top. [4] http://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html [5] As an aside, could someone tell me why mn10300 uses unsigned long as the first parameter of kunmap_atomic() instead of void *? Signed-off-by: Cesar Eduardo Barros <cesarb@cesarb.net> Cc: Russell King <linux@arm.linux.org.uk> (arch/arm) Cc: Ralf Baechle <ralf@linux-mips.org> (arch/mips) Cc: David Howells <dhowells@redhat.com> (arch/frv, arch/mn10300) Cc: Koichi Yasutake <yasutake.koichi@jp.panasonic.com> (arch/mn10300) Cc: Kyle McMartin <kyle@mcmartin.ca> (arch/parisc) Cc: Helge Deller <deller@gmx.de> (arch/parisc) Cc: "James E.J. Bottomley" <jejb@parisc-linux.org> (arch/parisc) Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> (arch/powerpc) Cc: Paul Mackerras <paulus@samba.org> (arch/powerpc) Cc: "David S. Miller" <davem@davemloft.net> (arch/sparc) Cc: Thomas Gleixner <tglx@linutronix.de> (arch/x86) Cc: Ingo Molnar <mingo@redhat.com> (arch/x86) Cc: "H. Peter Anvin" <hpa@zytor.com> (arch/x86) Cc: Arnd Bergmann <arnd@arndb.de> (include/asm-generic) Cc: Rusty Russell <rusty@rustcorp.com.au> ("Hard To Misuse" list) Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
---|---|---|
.. | ||
abort-ev4.S | ||
abort-ev4t.S | ||
abort-ev5t.S | ||
abort-ev5tj.S | ||
abort-ev6.S | ||
abort-ev7.S | ||
abort-lv4t.S | ||
abort-macro.S | ||
abort-nommu.S | ||
alignment.c | ||
cache-fa.S | ||
cache-feroceon-l2.c | ||
cache-l2x0.c | ||
cache-tauros2.c | ||
cache-v3.S | ||
cache-v4.S | ||
cache-v4wb.S | ||
cache-v4wt.S | ||
cache-v6.S | ||
cache-v7.S | ||
cache-xsc3l2.c | ||
context.c | ||
copypage-fa.c | ||
copypage-feroceon.c | ||
copypage-v3.c | ||
copypage-v4mc.c | ||
copypage-v4wb.c | ||
copypage-v4wt.c | ||
copypage-v6.c | ||
copypage-xsc3.c | ||
copypage-xscale.c | ||
dma-mapping.c | ||
extable.c | ||
fault-armv.c | ||
fault.c | ||
fault.h | ||
flush.c | ||
highmem.c | ||
init.c | ||
iomap.c | ||
ioremap.c | ||
Kconfig | ||
Makefile | ||
mm.h | ||
mmap.c | ||
mmu.c | ||
nommu.c | ||
pabort-legacy.S | ||
pabort-v6.S | ||
pabort-v7.S | ||
pgd.c | ||
proc-arm6_7.S | ||
proc-arm7tdmi.S | ||
proc-arm9tdmi.S | ||
proc-arm720.S | ||
proc-arm740.S | ||
proc-arm920.S | ||
proc-arm922.S | ||
proc-arm925.S | ||
proc-arm926.S | ||
proc-arm940.S | ||
proc-arm946.S | ||
proc-arm1020.S | ||
proc-arm1020e.S | ||
proc-arm1022.S | ||
proc-arm1026.S | ||
proc-fa526.S | ||
proc-feroceon.S | ||
proc-macros.S | ||
proc-mohawk.S | ||
proc-sa110.S | ||
proc-sa1100.S | ||
proc-syms.c | ||
proc-v6.S | ||
proc-v7.S | ||
proc-xsc3.S | ||
proc-xscale.S | ||
tlb-fa.S | ||
tlb-v3.S | ||
tlb-v4.S | ||
tlb-v4wb.S | ||
tlb-v4wbi.S | ||
tlb-v6.S | ||
tlb-v7.S | ||
vmregion.c | ||
vmregion.h |