Rex Feany <rfe...@mrv.com> wrote on 09/10/2009 08:46:49: > > Thus spake Joakim Tjernlund (joakim.tjernl...@transmode.se): > > > Rex Feany <rfe...@mrv.com> wrote on 09/10/2009 02:15:27: > > > > open("/proc/mounts", O_RDONLY) = 3 > > > fstat64(0x3, 0x7fe7e2a8) = 0 > > > mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) > > > =0x3001f000 > > > read(3, 0x3001f000, 1024) = -1 EFAULT (Bad address) > > > exit_group(0) = ? > > > > Try making the tlbil_va in fault.c unconditional, just to make sure > > there isn't any old TLBs around. > > didn't make a difference
Perhaps you are suffering from a buggy dcbst insn? I tested it on a RO mapping and it SEGVs. Clearing the store bit manually at least fixes the SEGVs. Here is a patch for that. Jocke >From 07dbca0cf9dc13cf0fbccf54d577e3bc1c5dfdf1 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund <joakim.tjernl...@transmode.se> Date: Fri, 9 Oct 2009 14:18:21 +0200 Subject: [PATCH] 8xx: dcbst sets store bit in DTLB error, workaround. dcbst should not set the store bit(bit 6, DSISR) when trapping into a DTLB Error. Clear this bit while doing the dcbX missing DAR workaround. --- arch/powerpc/kernel/head_8xx.S | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 292bd87..7b31feb 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S @@ -630,6 +630,30 @@ FixDAR: /* Entry point for dcbx workaround. */ tophys (r11, r10) beq- 139b /* Branch if user space address */ 140: lwz r11,0(r11) +/* Check if it really is a dcbx instruction. */ +/* dcbt and dcbtst does not generate DTLB Misses/Errors, + * no need to include them here */ + srwi r10, r11, 26 /* check if major OP code is 31 */ + cmpwi cr0, r10, 31 + bne- 141f + rlwinm r10, r11, 0, 21, 30 + cmpwi cr0, r10, 2028 /* Is dcbz? */ + beq+ 142f + cmpwi cr0, r10, 940 /* Is dcbi? */ + beq+ 142f + cmpwi cr0, r10, 108 /* Is dcbst? */ + beq+ 144f /* Fix up store bit! */ + cmpwi cr0, r10, 172 /* Is dcbf? */ + beq+ 142f + cmpwi cr0, r10, 1964 /* Is icbi? */ + beq+ 142f +141: mfspr r10, SPRN_DAR /* r10 must hold DAR at exit */ + b DARfix /* Nope, go back to normal TLB processing */ + +144: mfspr r10, SPRN_DSISR + rlwinm r10, r10,0,7,5 /* Clear store bit for buggy dcbst insn */ + mtspr SPRN_DSISR, r10 +142: /* continue, it was a dcbx, dcbi instruction. */ #ifdef CONFIG_8xx_CPU6 lwz r3, 8(r0) /* restore r3 from memory */ #endif -- 1.6.4.4 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev