Kirkwood, kernel 3.2, vmalloc region overlap, not starting up
Russell King - ARM Linux
linux at arm.linux.org.uk
Mon Feb 13 11:17:12 EST 2012
On Tue, Feb 07, 2012 at 03:41:54PM +0100, Nils Faerber wrote:
> Hello!
> I am in the process of upgrading board support for my TK71 board from
> 2.6.38 to 3.2 and am now halted by this strange issue...
>
> The board support for the TK71 is almost identical to the 3.2 included
> board files for e.g. the Sheevaplug or the rd88f6281 reference design.
> After applying my board patch and re-inserting my machine ID again the
> kernel freezes very early.
>
> After enabling earlyprintk I get the following:
>
> Uncompressing Linux... done, booting the kernel.
>
> [ 0.000000] Linux version 3.2.0-00012-g980d683-dirty (nils at moi) (gcc
> version 4.4.2 (GCC) ) #30 Tue Feb 7 15:18:57 CET 2012
> [ 0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE),
> cr=00053977
> [ 0.000000] CPU: VIVT data cache, VIVT instruction cache
>
> [ 0.000000] Machine: TK71 Kirkwood based Q7 formfactor board
>
> [ 0.000000] bootconsole [earlycon0] enabled
>
> [ 0.000000] Ignoring RAM at 00000000-0fffffff (vmalloc region
> overlap).
I think the problem may be due to something screwing up the v:p code
fixups. So, let's try to find out what the values the code decided on
were, and how some of the __va() macros are behaving. Could you try
booting with this patch applied?
If this is cache related, this _may_ change the behaviour and make the
bug go away...
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 10303b3..98213f0 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -916,6 +916,9 @@ void __init setup_arch(char **cmdline_p)
{
struct machine_desc *mdesc;
+ pr_info("PHYS_OFFSET: 0x%08lx PAGE_OFFSET: 0x%08lx __pa(PAGE_OFFSET): 0x%08lx\n",
+ PHYS_OFFSET, PAGE_OFFSET, __virt_to_phys(PAGE_OFFSET));
+
setup_processor();
mdesc = setup_machine_fdt(__atags_pointer);
if (!mdesc)
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index f77f1db..143430f 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -821,7 +821,7 @@ void __init sanity_check_meminfo(void)
for (i = 0, j = 0; i < meminfo.nr_banks; i++) {
struct membank *bank = &meminfo.bank[j];
*bank = meminfo.bank[i];
-
+pr_info("block %u: pa0x%08lx va%p +0x%08lx\n", bank->start, __va(bank->start), bank->size);
if (bank->start > ULONG_MAX)
highmem = 1;
More information about the linux-arm-kernel
mailing list