[SPARC64]: Call real_setup_per_cpu_areas() earlier and use lmb_alloc().
We have to do it like this before we can move the PROM and MDESC device tree code over to using lmb_alloc(). Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9422273ba7
commit
b97094560b
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/cache.h>
|
#include <linux/cache.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include <linux/profile.h>
|
#include <linux/profile.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/lmb.h>
|
||||||
|
|
||||||
#include <asm/head.h>
|
#include <asm/head.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
@ -1431,7 +1431,7 @@ EXPORT_SYMBOL(__per_cpu_shift);
|
||||||
|
|
||||||
void __init real_setup_per_cpu_areas(void)
|
void __init real_setup_per_cpu_areas(void)
|
||||||
{
|
{
|
||||||
unsigned long goal, size, i;
|
unsigned long paddr, goal, size, i;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
/* Copy section for each CPU (we discard the original) */
|
/* Copy section for each CPU (we discard the original) */
|
||||||
|
@ -1441,8 +1441,13 @@ void __init real_setup_per_cpu_areas(void)
|
||||||
for (size = PAGE_SIZE; size < goal; size <<= 1UL)
|
for (size = PAGE_SIZE; size < goal; size <<= 1UL)
|
||||||
__per_cpu_shift++;
|
__per_cpu_shift++;
|
||||||
|
|
||||||
ptr = alloc_bootmem_pages(size * NR_CPUS);
|
paddr = lmb_alloc(size * NR_CPUS, PAGE_SIZE);
|
||||||
|
if (!paddr) {
|
||||||
|
prom_printf("Cannot allocate per-cpu memory.\n");
|
||||||
|
prom_halt();
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = __va(paddr);
|
||||||
__per_cpu_base = ptr - __per_cpu_start;
|
__per_cpu_base = ptr - __per_cpu_start;
|
||||||
|
|
||||||
for (i = 0; i < NR_CPUS; i++, ptr += size)
|
for (i = 0; i < NR_CPUS; i++, ptr += size)
|
||||||
|
|
|
@ -1208,6 +1208,12 @@ void __init paging_init(void)
|
||||||
if (tlb_type == hypervisor)
|
if (tlb_type == hypervisor)
|
||||||
sun4v_ktsb_register();
|
sun4v_ktsb_register();
|
||||||
|
|
||||||
|
/* We must setup the per-cpu areas before we pull in the
|
||||||
|
* PROM and the MDESC. The code there fills in cpu and
|
||||||
|
* other information into per-cpu data structures.
|
||||||
|
*/
|
||||||
|
real_setup_per_cpu_areas();
|
||||||
|
|
||||||
/* Setup bootmem... */
|
/* Setup bootmem... */
|
||||||
pages_avail = 0;
|
pages_avail = 0;
|
||||||
last_valid_pfn = end_pfn = bootmem_init(&pages_avail, phys_base);
|
last_valid_pfn = end_pfn = bootmem_init(&pages_avail, phys_base);
|
||||||
|
@ -1216,8 +1222,6 @@ void __init paging_init(void)
|
||||||
|
|
||||||
kernel_physical_mapping_init();
|
kernel_physical_mapping_init();
|
||||||
|
|
||||||
real_setup_per_cpu_areas();
|
|
||||||
|
|
||||||
prom_build_devicetree();
|
prom_build_devicetree();
|
||||||
|
|
||||||
if (tlb_type == hypervisor)
|
if (tlb_type == hypervisor)
|
||||||
|
|
Reference in New Issue