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

Commit a21f5d88 authored by Alex Nixon's avatar Alex Nixon Committed by Ingo Molnar
Browse files

x86: unify x86_32 and x86_64 play_dead into one function



Add the new play_dead into smpboot.c, as it fits more cleanly in there
alongside other CONFIG_HOTPLUG functions.

Separate out the common code into its own function.

Signed-off-by: default avatarAlex Nixon <alex.nixon@citrix.com>
Acked-by: default avatarJeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 37900258
Loading
Loading
Loading
Loading
+0 −32
Original line number Diff line number Diff line
@@ -72,38 +72,6 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
	return ((unsigned long *)tsk->thread.sp)[3];
}

#ifdef CONFIG_HOTPLUG_CPU
#include <asm/nmi.h>

/* We don't actually take CPU down, just spin without interrupts. */
void native_play_dead(void)
{
	int cpu = raw_smp_processor_id();

	idle_task_exit();

	reset_lazy_tlbstate();

	irq_ctx_exit(cpu);

	mb();
	/* Ack it */
	__get_cpu_var(cpu_state) = CPU_DEAD;

	/*
	 * With physical CPU hotplug, we should halt the cpu
	 */
	local_irq_disable();
	/* mask all interrupts, flush any and all caches, and halt */
	wbinvd_halt();
}
#else
void native_play_dead(void)
{
	BUG();
}
#endif /* CONFIG_HOTPLUG_CPU */

/*
 * The idle thread. There's no useful work to be
 * done, so just try to conserve power and have a
+0 −23
Original line number Diff line number Diff line
@@ -85,29 +85,6 @@ void exit_idle(void)
	__exit_idle();
}

#ifdef CONFIG_HOTPLUG_CPU
DECLARE_PER_CPU(int, cpu_state);

#include <asm/nmi.h>
/* We halt the CPU with physical CPU hotplug */
void native_play_dead(void)
{
	idle_task_exit();
	mb();
	/* Ack it */
	__get_cpu_var(cpu_state) = CPU_DEAD;

	local_irq_disable();
	/* mask all interrupts, flush any and all caches, and halt */
	wbinvd_halt();
}
#else
void native_play_dead(void)
{
	BUG();
}
#endif /* CONFIG_HOTPLUG_CPU */

/*
 * The idle thread. There's no useful work to be
 * done, so just try to conserve power and have a
+29 −0
Original line number Diff line number Diff line
@@ -1402,6 +1402,29 @@ void native_cpu_die(unsigned int cpu)
	}
	printk(KERN_ERR "CPU %u didn't die...\n", cpu);
}

void play_dead_common(void)
{
	idle_task_exit();
	reset_lazy_tlbstate();
	irq_ctx_exit(raw_smp_processor_id());

	mb();
	/* Ack it */
	__get_cpu_var(cpu_state) = CPU_DEAD;

	/*
	 * With physical CPU hotplug, we should halt the cpu
	 */
	local_irq_disable();
}

void native_play_dead(void)
{
	play_dead_common();
	wbinvd_halt();
}

#else /* ... !CONFIG_HOTPLUG_CPU */
int native_cpu_disable(void)
{
@@ -1413,4 +1436,10 @@ void native_cpu_die(unsigned int cpu)
	/* We said "no" in __cpu_disable */
	BUG();
}

void native_play_dead(void)
{
	BUG();
}

#endif
+1 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@ int native_cpu_up(unsigned int cpunum);
int native_cpu_disable(void);
void native_cpu_die(unsigned int cpu);
void native_play_dead(void);
void play_dead_common(void);

void native_send_call_func_ipi(cpumask_t mask);
void native_send_call_func_single_ipi(int cpu);