Re: sparc32 paging fault which I cannot explain

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

 



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


[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux