cpuhotplug.h 4.3 KB
Newer Older
1 2 3 4 5 6
#ifndef __CPUHOTPLUG_H
#define __CPUHOTPLUG_H

enum cpuhp_state {
	CPUHP_OFFLINE,
	CPUHP_CREATE_THREADS,
7
	CPUHP_PERF_PREPARE,
8
	CPUHP_PERF_X86_PREPARE,
9
	CPUHP_PERF_X86_UNCORE_PREP,
10
	CPUHP_PERF_X86_AMD_UNCORE_PREP,
11
	CPUHP_PERF_X86_RAPL_PREP,
12
	CPUHP_PERF_BFIN,
13
	CPUHP_PERF_POWER,
14
	CPUHP_PERF_SUPERH,
15
	CPUHP_X86_HPET_DEAD,
16
	CPUHP_X86_APB_DEAD,
17
	CPUHP_WORKQUEUE_PREP,
18 19
	CPUHP_NOTIFY_PREPARE,
	CPUHP_BRINGUP_CPU,
20
	CPUHP_AP_IDLE_DEAD,
21
	CPUHP_AP_OFFLINE,
22
	CPUHP_AP_SCHED_STARTING,
23
	CPUHP_AP_IRQ_GIC_STARTING,
24
	CPUHP_AP_IRQ_GICV3_STARTING,
25
	CPUHP_AP_IRQ_HIP04_STARTING,
26 27
	CPUHP_AP_IRQ_ARMADA_XP_STARTING,
	CPUHP_AP_IRQ_ARMADA_CASC_STARTING,
28
	CPUHP_AP_IRQ_BCM2836_STARTING,
29
	CPUHP_AP_ARM_MVEBU_COHERENCY,
30
	CPUHP_AP_PERF_X86_UNCORE_STARTING,
31
	CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING,
32
	CPUHP_AP_PERF_X86_STARTING,
33
	CPUHP_AP_PERF_X86_AMD_IBS_STARTING,
34
	CPUHP_AP_PERF_X86_CQM_STARTING,
35
	CPUHP_AP_PERF_X86_CSTATE_STARTING,
36
	CPUHP_AP_PERF_XTENSA_STARTING,
37
	CPUHP_AP_ARM_VFP_STARTING,
38
	CPUHP_AP_PERF_ARM_STARTING,
39
	CPUHP_AP_ARM_ARCH_TIMER_STARTING,
40
	CPUHP_AP_DUMMY_TIMER_STARTING,
41
	CPUHP_AP_METAG_TIMER_STARTING,
42
	CPUHP_AP_QCOM_TIMER_STARTING,
43
	CPUHP_AP_MIPS_GIC_TIMER_STARTING,
44
	CPUHP_AP_KVM_STARTING,
45
	CPUHP_AP_KVM_ARM_VGIC_STARTING,
46
	CPUHP_AP_LEDTRIG_STARTING,
47 48 49
	CPUHP_AP_NOTIFY_STARTING,
	CPUHP_AP_ONLINE,
	CPUHP_TEARDOWN_CPU,
50
	CPUHP_AP_ONLINE_IDLE,
51
	CPUHP_AP_SMPBOOT_THREADS,
52
	CPUHP_AP_X86_VDSO_VMA_ONLINE,
53
	CPUHP_AP_PERF_ONLINE,
54
	CPUHP_AP_PERF_X86_ONLINE,
55
	CPUHP_AP_PERF_X86_UNCORE_ONLINE,
56
	CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE,
57
	CPUHP_AP_PERF_X86_AMD_POWER_ONLINE,
58
	CPUHP_AP_PERF_X86_RAPL_ONLINE,
59
	CPUHP_AP_PERF_X86_CQM_ONLINE,
60
	CPUHP_AP_PERF_X86_CSTATE_ONLINE,
61
	CPUHP_AP_PERF_S390_CF_ONLINE,
62
	CPUHP_AP_PERF_S390_SF_ONLINE,
63
	CPUHP_AP_PERF_ARM_CCI_ONLINE,
64
	CPUHP_AP_PERF_ARM_CCN_ONLINE,
65
	CPUHP_AP_WORKQUEUE_ONLINE,
66 67 68
	CPUHP_AP_NOTIFY_ONLINE,
	CPUHP_AP_ONLINE_DYN,
	CPUHP_AP_ONLINE_DYN_END		= CPUHP_AP_ONLINE_DYN + 30,
69
	CPUHP_AP_X86_HPET_ONLINE,
70
	CPUHP_AP_X86_KVM_CLK_ONLINE,
71
	CPUHP_AP_ACTIVE,
72 73 74
	CPUHP_ONLINE,
};

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
int __cpuhp_setup_state(enum cpuhp_state state,	const char *name, bool invoke,
			int (*startup)(unsigned int cpu),
			int (*teardown)(unsigned int cpu));

/**
 * cpuhp_setup_state - Setup hotplug state callbacks with calling the callbacks
 * @state:	The state for which the calls are installed
 * @name:	Name of the callback (will be used in debug output)
 * @startup:	startup callback function
 * @teardown:	teardown callback function
 *
 * Installs the callback functions and invokes the startup callback on
 * the present cpus which have already reached the @state.
 */
static inline int cpuhp_setup_state(enum cpuhp_state state,
				    const char *name,
				    int (*startup)(unsigned int cpu),
				    int (*teardown)(unsigned int cpu))
{
	return __cpuhp_setup_state(state, name, true, startup, teardown);
}

/**
 * cpuhp_setup_state_nocalls - Setup hotplug state callbacks without calling the
 *			       callbacks
 * @state:	The state for which the calls are installed
 * @name:	Name of the callback.
 * @startup:	startup callback function
 * @teardown:	teardown callback function
 *
 * Same as @cpuhp_setup_state except that no calls are executed are invoked
 * during installation of this callback. NOP if SMP=n or HOTPLUG_CPU=n.
 */
static inline int cpuhp_setup_state_nocalls(enum cpuhp_state state,
					    const char *name,
					    int (*startup)(unsigned int cpu),
					    int (*teardown)(unsigned int cpu))
{
	return __cpuhp_setup_state(state, name, false, startup, teardown);
}

void __cpuhp_remove_state(enum cpuhp_state state, bool invoke);

/**
 * cpuhp_remove_state - Remove hotplug state callbacks and invoke the teardown
 * @state:	The state for which the calls are removed
 *
 * Removes the callback functions and invokes the teardown callback on
 * the present cpus which have already reached the @state.
 */
static inline void cpuhp_remove_state(enum cpuhp_state state)
{
	__cpuhp_remove_state(state, true);
}

/**
 * cpuhp_remove_state_nocalls - Remove hotplug state callbacks without invoking
 *				teardown
 * @state:	The state for which the calls are removed
 */
static inline void cpuhp_remove_state_nocalls(enum cpuhp_state state)
{
	__cpuhp_remove_state(state, false);
}

140 141 142 143 144 145
#ifdef CONFIG_SMP
void cpuhp_online_idle(enum cpuhp_state state);
#else
static inline void cpuhp_online_idle(enum cpuhp_state state) { }
#endif

146
#endif