2009-07-14 21:18:57

by Chris Friesen

[permalink] [raw]
Subject: proper way to reserve a chunk of memory at the top of the kernel?

I have a powerpc board with 512BM of memory. The BIOS has a chunk of
memory at the top end of physical memory which it does not zero out over
a reboot.

What's the proper way to tell linux that this chunk of physical memory
should be ignored (so that we can access it later without worrying that
Linux will try to allocate it)? Should I be calling

lmb_reserve(lmb_end_of_DRAM() - size, size);

in early_reserve_mem() or is there a better mechanism?

For comparison, in an older kernel this was done in set_phys_avail(), by
calling mem_pieces_remove(&phys_avail, total_lowmem - size, size, 1);

Thanks,

Chris


2009-07-20 01:54:19

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: Re: proper way to reserve a chunk of memory at the top of the kernel?

On Tue, 2009-07-14 at 15:18 -0600, Chris Friesen wrote:
> I have a powerpc board with 512BM of memory. The BIOS has a chunk of
> memory at the top end of physical memory which it does not zero out over
> a reboot.
>
> What's the proper way to tell linux that this chunk of physical memory
> should be ignored (so that we can access it later without worrying that
> Linux will try to allocate it)? Should I be calling
>
> lmb_reserve(lmb_end_of_DRAM() - size, size);
>
> in early_reserve_mem() or is there a better mechanism?

The device-tree blob contains a special "reserve map" in the header,
which automatically turns into calls to lmb_reserve() early during boot,
so putting your special region in that map should be the right way to do
what you want without special code.

> For comparison, in an older kernel this was done in set_phys_avail(), by
> calling mem_pieces_remove(&phys_avail, total_lowmem - size, size, 1);

Cheers,
Ben.

> Thanks,
>
> Chris
> _______________________________________________
> Linuxppc-dev mailing list
> [email protected]
> https://lists.ozlabs.org/listinfo/linuxppc-dev