Thread (69 messages) flat view 69 messages, 5 authors, 2012-09-25
STALE5062d

[PATCH v3 RESEND 08/17] ARM: LPAE: use phys_addr_t in free_memmap()

From: catalin.marinas@arm.com (Catalin Marinas)
Date: 2012-09-24 16:51:46

On Mon, Sep 24, 2012 at 05:41:33PM +0100, Cyril Chemparathy wrote:
On 9/24/2012 11:22 AM, Russell King - ARM Linux wrote:
quoted
On Mon, Sep 24, 2012 at 11:09:50AM -0400, Cyril Chemparathy wrote:
quoted
On 9/24/2012 9:41 AM, Russell King - ARM Linux wrote:
quoted
On Mon, Sep 24, 2012 at 02:29:42PM +0100, Catalin Marinas wrote:
quoted
This function also calls free_bootmem() which takes unsigned long. Are
patches sent separately for this or we just ignore holes in memmap?
There are other calls to free_bootmem() or reserve_bootmem(), do they
just work with the high phys addresses?
Bootmem only deals with physical addresses which fit within the size
of an 'unsigned long'.  Unfortunately, the bootmem API is a mess of
'unsigned long' physical addresses and PFNs.

Years ago there was a patch to make it use only PFNs but other changes
resulted in that patch being thrown away.
A separate patch has been posted for bootmem (see [1]).

Tejun suggested that we'd be better off moving entirely to memblock
instead (see [2]).
Yes we should, but that's not as easy as typing a few words in an email.
When I tried it when I integrated memblock into our boot sequence, I
found that sparsemem wouldn't work without bootmem being in place.

It may be that things have now moved on, and we can just eliminate
bootmem once and for all, but that's something I've not looked at for
quite some time.
It appears to be not that hard actually... Or maybe I'm totally missing 
your point.  Could it be that you last looked at this prior to the 
nobootmem compatibility stuff being added in?
I was just trying the same :)
+static unsigned long free_all_lowmem(void)
I don't think that's needed. free_all_bootmem() in mm/nobootmem.c takes
care of freeing lowmem but it has a different notion of max_low_pfn. So
this hunk did the trick:
@@ -420,8 +366,8 @@ void __init bootmem_init(void)
 	 * Note: max_low_pfn and max_pfn reflect the number of _pages_ in
 	 * the system, not the maximum PFN.
 	 */
-	max_low_pfn = max_low - PHYS_PFN_OFFSET;
-	max_pfn = max_high - PHYS_PFN_OFFSET;
+	max_low_pfn = max_low;
+	max_pfn = max_high;
 }
 
 static inline int free_area(unsigned long pfn, unsigned long end, char *s)
-- 
Catalin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help