On Fri, Apr 06, 2012 at 12:38:07PM -0400, David Miller wrote: > From: Sam Ravnborg <sam@xxxxxxxxxxxx> > Date: Fri, 6 Apr 2012 17:26:19 +0200 > > > What I think happens is that the MMU is not setup to handle virtual addresses > > in this area - as this is a much higher address than what we would have seen > > with the old bootmem allocator. memblock allocates top-down, where bootmem > > allocates bottom-up. > > The first 16MB at KERNBASE is mapped by the head.S code, the rest is > mapped by arch/sparc/srmmu.c:map_kernel() and similar. Thanks - it helped me further. In reality I got page-fault if I tried to access anything at PAGE_OFFSET + 0xa00000 or above. So the limit is less than 16 MB. I found out using a loop like this: unsigned long paddr; for (paddr = 0x781000; paddr < 0x1fa0fff; paddr += 0x1000) { int tmp; tmp = *(int *)(PAGE_OFFSET + paddr); printk(KERN_ERR "paddr=0x%lx (%d)\n", paddr, tmp); } And at 0xa00000 is faulted. But at 0x9ff000 it was OK. So I just introduced a limit of 0xa00000 for __alloc_bootmem_low(). I found no evidence that 0xa00000 will work in general. So testing is required here :-( Sam -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html