Blackfin: merge kernel init memory back into main memory region
authorSonic Zhang <sonic.zhang@analog.com>
Mon, 20 Sep 2010 11:06:18 +0000 (11:06 +0000)
committerMike Frysinger <vapier@gentoo.org>
Fri, 22 Oct 2010 08:02:01 +0000 (04:02 -0400)
If the kernel's init section is merged back into the main memory region
during boot (which it should since that is how we've laid out the kernel
linker map), we want to make sure that these aren't counted as independent
regions.  Otherwise, if a large mapping is attempted which starts in the
init region and extends into the main memory region, the access_ok func
will deny it.  This leads to weird messages during runtime like "unable
to map xxx library" from the ldso but upon running the application again,
everything works fine.

So if the address of the end of the init region is the same as the start
of the main memory region, simply enlarge the memory region to include
the init region.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/mm/init.c

index bb4e8fff4b556f14751e9502d407b6c3398679bf..f8435cd36c7c004dc8b27b8d335ee751a1ce69e1 100644 (file)
@@ -158,5 +158,8 @@ void __init_refok free_initmem(void)
        free_init_pages("unused kernel memory",
                        (unsigned long)(&__init_begin),
                        (unsigned long)(&__init_end));
+
+       if (memory_start == (unsigned long)(&__init_end))
+               memory_start = (unsigned long)(&__init_begin);
 #endif
 }