mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-18 06:15:12 +00:00
[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/jiffies.h>
|
||||
#include <linux/profile.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/lmb.h>
|
||||
|
||||
#include <asm/head.h>
|
||||
#include <asm/ptrace.h>
|
||||
@ -1431,7 +1431,7 @@ EXPORT_SYMBOL(__per_cpu_shift);
|
||||
|
||||
void __init real_setup_per_cpu_areas(void)
|
||||
{
|
||||
unsigned long goal, size, i;
|
||||
unsigned long paddr, goal, size, i;
|
||||
char *ptr;
|
||||
|
||||
/* 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)
|
||||
__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;
|
||||
|
||||
for (i = 0; i < NR_CPUS; i++, ptr += size)
|
||||
|
@ -1208,6 +1208,12 @@ void __init paging_init(void)
|
||||
if (tlb_type == hypervisor)
|
||||
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... */
|
||||
pages_avail = 0;
|
||||
last_valid_pfn = end_pfn = bootmem_init(&pages_avail, phys_base);
|
||||
@ -1216,8 +1222,6 @@ void __init paging_init(void)
|
||||
|
||||
kernel_physical_mapping_init();
|
||||
|
||||
real_setup_per_cpu_areas();
|
||||
|
||||
prom_build_devicetree();
|
||||
|
||||
if (tlb_type == hypervisor)
|
||||
|
Loading…
x
Reference in New Issue
Block a user