summaryrefslogtreecommitdiff
path: root/arch/sparc64/mm/fault.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-04-02 12:48:07 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-04-02 12:48:07 -0700
commit23344cb341902f4e3431d8137dca93d6e186d054 (patch)
tree2a0e443ade173b80cb0df261f4b2d66f79b9270e /arch/sparc64/mm/fault.c
parentbacd3add087770333bdce65cd3dd25e3b2cd67ac (diff)
parent289eee6fa78e999208120c856ef3ae5a817fd59c (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6: [SPARC]: Wire up sys_sync_file_range() into syscall tables. [SPARC]: Wire up sys_splice() into the syscall tables. [SPARC64]: Update defconfig. [SPARC64]: Align address in huge_pte_alloc(). [SPARC64]: Document the instruction checks we do in do_sparc64_fault(). [SPARC64]: Make tsb_sync() mm comparison more precise.
Diffstat (limited to 'arch/sparc64/mm/fault.c')
-rw-r--r--arch/sparc64/mm/fault.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/sparc64/mm/fault.c b/arch/sparc64/mm/fault.c
index 0db2f7d9fab..6e002aacb96 100644
--- a/arch/sparc64/mm/fault.c
+++ b/arch/sparc64/mm/fault.c
@@ -327,8 +327,12 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
insn = get_fault_insn(regs, 0);
if (!insn)
goto continue_fault;
+ /* All loads, stores and atomics have bits 30 and 31 both set
+ * in the instruction. Bit 21 is set in all stores, but we
+ * have to avoid prefetches which also have bit 21 set.
+ */
if ((insn & 0xc0200000) == 0xc0200000 &&
- (insn & 0x1780000) != 0x1680000) {
+ (insn & 0x01780000) != 0x01680000) {
/* Don't bother updating thread struct value,
* because update_mmu_cache only cares which tlb
* the access came from.