On Thu, 13 Nov 2008, Ken Hicks wrote: > I'm investigating why an Unaligned Access exception is generated on MIPS > from an accesses which are not misaligned. > > The issue is that a kernel access two different unmapped addresses > results in different exceptions: > Address Exception > 0x0001000000000000: page fault > 0x0010000000000000: unaligned access > > I'm using a Cavium CPU with a custom linux based on 2.6.14 but the code > in question hasn't changed widly in more recent kernels. > I have observed this several times, so I have manually recreated the > behaviour by intentionally accessing known unmapped addresses. This is not an unaligned access, this is a generic address error resulting from accessing an address outside the defined segments. Please see your CPU's datasheet for which data ranges are valid as the MIPS architecture leaves it up to the implementer. Our address error exception handler does not attempt to differentiate between the two cases, because it is not possible for all the CPUs out there to determine which addresses are valid and which are not automatically. For all the legacy MIPS implementations the ranges would have to be hardcoded in the kernel. For MIPS architecture processors it is actually possible to figure it out with some fiddling of the CP0 registers. Improving the address error exception handler in this respect has been on my to-do list for a while now (for my own convenience I have had a local patch to check the ranges for the R4000/R4400 processors), but please don't hold your breath waiting for me to finish it as I do not expect it to happen anytime soon. Feel free to make improvements in this area yourself. For further information please refer to your CPU's datasheet and the MIPS architecture manuals. Maciej