sparc64: Work around memory probing bug in openfirmware.
Read all of the OF memory and translation tables, then read the physical available memory list twice. When making these requests, OF can allocate more memory to do it's job, which can remove pages from the available memory list. So fetch in all of the tables at once, and fetch the available list last to make sure we read a stable value. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8bf3028ede
commit
a94a172d6c
|
@ -610,8 +610,6 @@ static void __init remap_kernel(void)
|
|||
|
||||
static void __init inherit_prom_mappings(void)
|
||||
{
|
||||
read_obp_translations();
|
||||
|
||||
/* Now fixup OBP's idea about where we really are mapped. */
|
||||
printk("Remapping the kernel... ");
|
||||
remap_kernel();
|
||||
|
@ -1747,7 +1745,17 @@ void __init paging_init(void)
|
|||
|
||||
lmb_init();
|
||||
|
||||
/* Find available physical memory... */
|
||||
/* Find available physical memory...
|
||||
*
|
||||
* Read it twice in order to work around a bug in openfirmware.
|
||||
* The call to grab this table itself can cause openfirmware to
|
||||
* allocate memory, which in turn can take away some space from
|
||||
* the list of available memory. Reading it twice makes sure
|
||||
* we really do get the final value.
|
||||
*/
|
||||
read_obp_translations();
|
||||
read_obp_memory("reg", &pall[0], &pall_ents);
|
||||
read_obp_memory("available", &pavail[0], &pavail_ents);
|
||||
read_obp_memory("available", &pavail[0], &pavail_ents);
|
||||
|
||||
phys_base = 0xffffffffffffffffUL;
|
||||
|
@ -1788,8 +1796,6 @@ void __init paging_init(void)
|
|||
|
||||
inherit_prom_mappings();
|
||||
|
||||
read_obp_memory("reg", &pall[0], &pall_ents);
|
||||
|
||||
init_kpte_bitmap();
|
||||
|
||||
/* Ok, we can use our TLB miss and window trap handlers safely. */
|
||||
|
|
Loading…
Reference in a new issue