Running our multithreaded application on ppc8548 (E500 core) generates a machine check exception when trying to access some ASIC's registers mapped on the PCI space (This application maps a PCI device to access its registers)
machine_check_exception: task my_process, MCSR=0x10008, NIP=0x10153530 Machine check in user mode. Caused by (from MCSR=10008): Guarded Load or Cache-Inhibited stwcx. Bus - Read Data Bus Error Here is the assembly dump of the region of code containing the offending instruction in user-space, with SRR0 pointing us at 0x10153530 when the exception is raised: 0x10153528 <_ZN2vk7in_le32EPVKj+16>: lwz r0,8(r31) 0x1015352c <_ZN2vk7in_le32EPVKj+20>: lwz r9,8(r31) 0x10153530 <_ZN2vk7in_le32EPVKj+24>: lwbrx r0,0,r0 0x10153534 <_ZN2vk7in_le32EPVKj+28>: twi 0,r0,0 0x10153538 <_ZN2vk7in_le32EPVKj+32>: isync All this is fully reproducible, the offending code is repeatedly the byte-reverse load within the (m)mapped PCI memory segment. The offset within the segment may vary, even if most of the hits seem to be taken when reading 0x20030-0x20034 offsets from 0x80000000 PCI address space (which is mapped to the application via /dev/mem) /proc/pid/maps reports the following mappings to /dev/mem, with the first one being an ASIC on the PCI space whose registers we are trying to access, and the second one being system memory (this system memory is out of kernel visibility...we use 'mem=256M' as a kernel parameter...): 303a9000-304a9000 rw-s 80000000 00:0c 2087 /dev/mem 304a9000-404a9000 rw-s 10000000 00:0c 2087 /dev/mem Has anybody experienced something similar using a kernel based on a 2.6.20 powerpc tree? Many thanks jorge ______________________________ Jorge Ramirez-Ortiz
_______________________________________________ Linuxppc-embedded mailing list [email protected] https://ozlabs.org/mailman/listinfo/linuxppc-embedded
