diff options
Diffstat (limited to 'arch/mips/netlogic/common/smp.c')
| -rw-r--r-- | arch/mips/netlogic/common/smp.c | 20 | 
1 files changed, 9 insertions, 11 deletions
diff --git a/arch/mips/netlogic/common/smp.c b/arch/mips/netlogic/common/smp.c index 6f8feb9efcf..4fde7ac76cc 100644 --- a/arch/mips/netlogic/common/smp.c +++ b/arch/mips/netlogic/common/smp.c @@ -63,7 +63,7 @@ void nlm_send_ipi_single(int logical_cpu, unsigned int action)  	uint64_t picbase;  	cpu = cpu_logical_map(logical_cpu); -	node = cpu / NLM_CPUS_PER_NODE; +	node = nlm_cpuid_to_node(cpu);  	picbase = nlm_get_node(node)->picbase;  	if (action & SMP_CALL_FUNCTION) @@ -135,10 +135,6 @@ void nlm_smp_finish(void)  	local_irq_enable();  } -void nlm_cpus_done(void) -{ -} -  /*   * Boot all other cpus in the system, initialize them, and bring them into   * the boot function @@ -152,7 +148,7 @@ void nlm_boot_secondary(int logical_cpu, struct task_struct *idle)  	int cpu, node;  	cpu = cpu_logical_map(logical_cpu); -	node = cpu / NLM_CPUS_PER_NODE; +	node = nlm_cpuid_to_node(logical_cpu);  	nlm_next_sp = (unsigned long)__KSTK_TOS(idle);  	nlm_next_gp = (unsigned long)task_thread_info(idle); @@ -164,7 +160,7 @@ void nlm_boot_secondary(int logical_cpu, struct task_struct *idle)  void __init nlm_smp_setup(void)  {  	unsigned int boot_cpu; -	int num_cpus, i, ncore; +	int num_cpus, i, ncore, node;  	volatile u32 *cpu_ready = nlm_get_boot_data(BOOT_CPU_READY);  	char buf[64]; @@ -187,6 +183,8 @@ void __init nlm_smp_setup(void)  			__cpu_number_map[i] = num_cpus;  			__cpu_logical_map[num_cpus] = i;  			set_cpu_possible(num_cpus, true); +			node = nlm_cpuid_to_node(i); +			cpumask_set_cpu(num_cpus, &nlm_get_node(node)->cpumask);  			++num_cpus;  		}  	} @@ -196,7 +194,7 @@ void __init nlm_smp_setup(void)  	cpumask_scnprintf(buf, ARRAY_SIZE(buf), cpu_possible_mask);  	pr_info("Possible CPU mask: %s\n", buf); -	/* check with the cores we have worken up */ +	/* check with the cores we have woken up */  	for (ncore = 0, i = 0; i < NLM_NR_NODES; i++)  		ncore += hweight32(nlm_get_node(i)->coremask); @@ -211,6 +209,7 @@ static int nlm_parse_cpumask(cpumask_t *wakeup_mask)  {  	uint32_t core0_thr_mask, core_thr_mask;  	int threadmode, i, j; +	char buf[64];  	core0_thr_mask = 0;  	for (i = 0; i < NLM_THREADS_PER_CORE; i++) @@ -245,8 +244,8 @@ static int nlm_parse_cpumask(cpumask_t *wakeup_mask)  	return threadmode;  unsupp: -	panic("Unsupported CPU mask %lx\n", -		(unsigned long)cpumask_bits(wakeup_mask)[0]); +	cpumask_scnprintf(buf, ARRAY_SIZE(buf), wakeup_mask); +	panic("Unsupported CPU mask %s", buf);  	return 0;  } @@ -275,7 +274,6 @@ struct plat_smp_ops nlm_smp_ops = {  	.send_ipi_mask		= nlm_send_ipi_mask,  	.init_secondary		= nlm_init_secondary,  	.smp_finish		= nlm_smp_finish, -	.cpus_done		= nlm_cpus_done,  	.boot_secondary		= nlm_boot_secondary,  	.smp_setup		= nlm_smp_setup,  	.prepare_cpus		= nlm_prepare_cpus,  | 
