NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: kern/43274: re(4) crash on ultra10 - uncorrectable DMA error



   
   >    ultra10 crashed earlier today with this on the console:
   > 
   >    login: psycho0: uncorrectable DMA error AFAR 11b8450 AFSR 
0x410000ff40800000<BLK,P_DTE,P_DRD>
   >    psycho0: IOVA c0114000 IOTTE 3fc84012
   [ .. ]
   
   I see a similar problem on tlp(4) on Netra X1.  So please try this
   workaround.
   
   
   Index: sys/arch/sparc64/dev/iommu.c
   ===================================================================
   RCS file: /cvsroot/src/sys/arch/sparc64/dev/iommu.c,v
   retrieving revision 1.98
   diff -u -d -r1.98 iommu.c
   --- sys/arch/sparc64/dev/iommu.c     11 Mar 2010 03:54:56 -0000      1.98
   +++ sys/arch/sparc64/dev/iommu.c     7 May 2010 14:07:08 -0000
   @@ -358,8 +358,10 @@
                 * eliminating the next line, but the page is mapped
                 * until the next iommu_enter call.
                 */
   +#if 0 /* XXX */
                is->is_tsb[IOTSBSLOT(va,is->is_tsbsize)] &= ~IOTTE_V;
                membar_storestore();
   +#endif
                bus_space_write_8(is->is_bustag, is->is_iommu,
                        IOMMUREG(iommu_flush), va);
                va += PAGE_SIZE;
   
   
   As I noted as comment in iommu.c around this workaround, it seems
   that unmapping an IOMMU page which is used by a device causes an
   uncorrectable DMA error.
   
   I could not figure out the problem other than this workaround.

i noticed that open solaris never removes the valid bit from the
iotte's.  i think we should commit the #if 0 or just remove that
code entirely...


.mrg.


Home | Main Index | Thread Index | Old Index