Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af831e1e authored by Anton Blanchard's avatar Anton Blanchard Committed by Benjamin Herrenschmidt
Browse files

powerpc/cpumask: Convert pseries SMP code to new cpumask API



Use new cpumask functions in pseries SMP startup code.

Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 11573131
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@
 * The Primary thread of each non-boot processor was started from the OF client
 * interface by prom_hold_cpus and is spinning on secondary_hold_spinloop.
 */
static cpumask_t of_spin_map;
static cpumask_var_t of_spin_mask;

/* Query where a cpu is now.  Return codes #defined in plpar_wrappers.h */
int smp_query_cpu_stopped(unsigned int pcpu)
@@ -98,7 +98,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)
	unsigned int pcpu;
	int start_cpu;

	if (cpu_isset(lcpu, of_spin_map))
	if (cpumask_test_cpu(lcpu, of_spin_mask))
		/* Already started by OF and sitting in spin loop */
		return 1;

@@ -106,7 +106,7 @@ static inline int __devinit smp_startup_cpu(unsigned int lcpu)

	/* Check to see if the CPU out of FW already for kexec */
	if (smp_query_cpu_stopped(pcpu) == QCSS_NOT_STOPPED){
		cpu_set(lcpu, of_spin_map);
		cpumask_set_cpu(lcpu, of_spin_mask);
		return 1;
	}

@@ -143,7 +143,7 @@ static void __devinit smp_xics_setup_cpu(int cpu)
	if (firmware_has_feature(FW_FEATURE_SPLPAR))
		vpa_init(cpu);

	cpu_clear(cpu, of_spin_map);
	cpumask_clear_cpu(cpu, of_spin_mask);
	set_cpu_current_state(cpu, CPU_STATE_ONLINE);
	set_default_offline_state(cpu);

@@ -214,17 +214,19 @@ static void __init smp_init_pseries(void)

	pr_debug(" -> smp_init_pSeries()\n");

	alloc_bootmem_cpumask_var(&of_spin_mask);

	/* Mark threads which are still spinning in hold loops. */
	if (cpu_has_feature(CPU_FTR_SMT)) {
		for_each_present_cpu(i) { 
			if (cpu_thread_in_core(i) == 0)
				cpu_set(i, of_spin_map);
				cpumask_set_cpu(i, of_spin_mask);
		}
	} else {
		of_spin_map = cpu_present_map;
		cpumask_copy(of_spin_mask, cpu_present_mask);
	}

	cpu_clear(boot_cpuid, of_spin_map);
	cpumask_clear_cpu(boot_cpuid, of_spin_mask);

	/* Non-lpar has additional take/give timebase */
	if (rtas_token("freeze-time-base") != RTAS_UNKNOWN_SERVICE) {