diff options
| -rw-r--r-- | arch/sparc/kernel/setup_64.c | 25 | ||||
| -rw-r--r-- | arch/sparc/mm/init_64.c | 16 | 
2 files changed, 25 insertions, 16 deletions
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index f32cfe83dfd1..6b7331d198e9 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c @@ -31,6 +31,7 @@  #include <linux/initrd.h>  #include <linux/module.h>  #include <linux/start_kernel.h> +#include <linux/bootmem.h>  #include <asm/io.h>  #include <asm/processor.h> @@ -50,6 +51,8 @@  #include <asm/elf.h>  #include <asm/mdesc.h>  #include <asm/cacheflush.h> +#include <asm/dma.h> +#include <asm/irq.h>  #ifdef CONFIG_IP_PNP  #include <net/ipconfig.h> @@ -590,6 +593,22 @@ static void __init init_sparc64_elf_hwcap(void)  		pause_patch();  } +void __init alloc_irqstack_bootmem(void) +{ +	unsigned int i, node; + +	for_each_possible_cpu(i) { +		node = cpu_to_node(i); + +		softirq_stack[i] = __alloc_bootmem_node(NODE_DATA(node), +							THREAD_SIZE, +							THREAD_SIZE, 0); +		hardirq_stack[i] = __alloc_bootmem_node(NODE_DATA(node), +							THREAD_SIZE, +							THREAD_SIZE, 0); +	} +} +  void __init setup_arch(char **cmdline_p)  {  	/* Initialize PROM console and command line. */ @@ -651,6 +670,12 @@ void __init setup_arch(char **cmdline_p)  	paging_init();  	init_sparc64_elf_hwcap();  	smp_fill_in_cpu_possible_map(); +	/* +	 * Once the OF device tree and MDESC have been setup and nr_cpus has +	 * been parsed, we know the list of possible cpus.  Therefore we can +	 * allocate the IRQ stacks. +	 */ +	alloc_irqstack_bootmem();  }  extern int stop_a_enabled; diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c index 80031fc2e2d6..7ac6b62fb7c1 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c @@ -2081,7 +2081,6 @@ void __init paging_init(void)  {  	unsigned long end_pfn, shift, phys_base;  	unsigned long real_end, i; -	int node;  	setup_page_offset(); @@ -2250,21 +2249,6 @@ void __init paging_init(void)  	/* Setup bootmem... */  	last_valid_pfn = end_pfn = bootmem_init(phys_base); -	/* Once the OF device tree and MDESC have been setup, we know -	 * the list of possible cpus.  Therefore we can allocate the -	 * IRQ stacks. -	 */ -	for_each_possible_cpu(i) { -		node = cpu_to_node(i); - -		softirq_stack[i] = __alloc_bootmem_node(NODE_DATA(node), -							THREAD_SIZE, -							THREAD_SIZE, 0); -		hardirq_stack[i] = __alloc_bootmem_node(NODE_DATA(node), -							THREAD_SIZE, -							THREAD_SIZE, 0); -	} -  	kernel_physical_mapping_init();  	{  | 

