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

Commit 9715b8c7 authored by Paul Mundt's avatar Paul Mundt
Browse files

sh: provide percpu CPU states for hotplug notifiers.



This provides percpu CPU states in preparation for CPU hotplug and the
associated notifier chains.

Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 7acb59eb
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <linux/spinlock.h>
#include <asm/atomic.h>
#include <asm/current.h>
#include <asm/percpu.h>

#define raw_smp_processor_id()	(current_thread_info()->cpu)

@@ -30,6 +31,8 @@ enum {
	SMP_MSG_NR,	/* must be last */
};

DECLARE_PER_CPU(int, cpu_state);

void smp_message_recv(unsigned int msg);
void smp_timer_broadcast(const struct cpumask *mask);

+10 −4
Original line number Diff line number Diff line
@@ -33,6 +33,9 @@ int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */

struct plat_smp_ops *mp_ops = NULL;

/* State of each CPU */
DEFINE_PER_CPU(int, cpu_state) = { 0 };

void __cpuinit register_smp_ops(struct plat_smp_ops *ops)
{
	if (mp_ops)
@@ -72,11 +75,13 @@ void __devinit smp_prepare_boot_cpu(void)

	set_cpu_online(cpu, true);
	set_cpu_possible(cpu, true);

	per_cpu(cpu_state, cpu) = CPU_ONLINE;
}

asmlinkage void __cpuinit start_secondary(void)
{
	unsigned int cpu;
	unsigned int cpu = smp_processor_id();
	struct mm_struct *mm = &init_mm;

	enable_mmu();
@@ -90,12 +95,10 @@ asmlinkage void __cpuinit start_secondary(void)

	preempt_disable();

	notify_cpu_starting(smp_processor_id());
	notify_cpu_starting(cpu);

	local_irq_enable();

	cpu = smp_processor_id();

	/* Enable local timers */
	local_timer_setup(cpu);
	calibrate_delay();
@@ -103,6 +106,7 @@ asmlinkage void __cpuinit start_secondary(void)
	smp_store_cpu_info(cpu);

	set_cpu_online(cpu, true);
	per_cpu(cpu_state, cpu) = CPU_ONLINE;

	cpu_idle();
}
@@ -127,6 +131,8 @@ int __cpuinit __cpu_up(unsigned int cpu)
		return PTR_ERR(tsk);
	}

	per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;

	/* Fill in data in head.S for secondary cpus */
	stack_start.sp = tsk->thread.sp;
	stack_start.thread_info = tsk->stack;