diff options
author | James Bottomley <JBottomley@Parallels.com> | 2012-05-16 12:10:27 +0200 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-16 14:15:21 +0200 |
commit | b3cb8674811d1851bbf1486a73d62b90c119b994 (patch) | |
tree | c2158cee689175a1fae57767ab8b4c955d0a237c /arch/parisc/include/asm | |
parent | [PARISC] fix crash in flush_icache_page_asm on PA1.1 (diff) | |
download | linux-b3cb8674811d1851bbf1486a73d62b90c119b994.tar.xz linux-b3cb8674811d1851bbf1486a73d62b90c119b994.zip |
[PARISC] fix panic on prefetch(NULL) on PA7300LC
Due to an errata, the PA7300LC generates a TLB miss interruption even on the
prefetch instruction. This means that prefetch(NULL), which is supposed to be
a nop on linux actually generates a NULL deref fault. Fix this by testing the
address of prefetch against NULL before doing the prefetch.
Cc: stable@vger.kernel.org
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'arch/parisc/include/asm')
-rw-r--r-- | arch/parisc/include/asm/prefetch.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/parisc/include/asm/prefetch.h b/arch/parisc/include/asm/prefetch.h index c5edc60c059f..1ee7c82672c1 100644 --- a/arch/parisc/include/asm/prefetch.h +++ b/arch/parisc/include/asm/prefetch.h @@ -21,7 +21,12 @@ #define ARCH_HAS_PREFETCH static inline void prefetch(const void *addr) { - __asm__("ldw 0(%0), %%r0" : : "r" (addr)); + __asm__( +#ifndef CONFIG_PA20 + /* Need to avoid prefetch of NULL on PA7300LC */ + " extrw,u,= %0,31,32,%%r0\n" +#endif + " ldw 0(%0), %%r0" : : "r" (addr)); } /* LDD is a PA2.0 addition. */ |