Blame view
include/linux/cpu.h
6.34 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 |
/* * include/linux/cpu.h - generic cpu definition * * This is mainly for topological representation. We define the * basic 'struct cpu' here, which can be embedded in per-arch * definitions of processors. * * Basic handling of the devices is done in drivers/base/cpu.c * and system devices are handled in drivers/base/sys.c. * |
d51fe1be3 [PATCH] remove dr... |
11 |
* CPUs are exported via sysfs in the class/cpu/devices/ |
1da177e4c Linux-2.6.12-rc2 |
12 |
* directory. |
1da177e4c Linux-2.6.12-rc2 |
13 14 15 |
*/ #ifndef _LINUX_CPU_H_ #define _LINUX_CPU_H_ |
8a25a2fd1 cpu: convert 'cpu... |
16 |
#include <linux/device.h> |
1da177e4c Linux-2.6.12-rc2 |
17 18 19 |
#include <linux/node.h> #include <linux/compiler.h> #include <linux/cpumask.h> |
1da177e4c Linux-2.6.12-rc2 |
20 21 22 |
struct cpu { int node_id; /* The node which contains the CPU */ |
72486f1f8 [PATCH] i386: cha... |
23 |
int hotpluggable; /* creates sysfs control file if hotpluggable */ |
8a25a2fd1 cpu: convert 'cpu... |
24 |
struct device dev; |
1da177e4c Linux-2.6.12-rc2 |
25 |
}; |
76b67ed9d [PATCH] node hotp... |
26 |
extern int register_cpu(struct cpu *cpu, int num); |
8a25a2fd1 cpu: convert 'cpu... |
27 |
extern struct device *get_cpu_device(unsigned cpu); |
2987557f5 driver-core/cpu: ... |
28 |
extern bool cpu_is_hotpluggable(unsigned cpu); |
0344c6c53 [POWERPC] sysfs: ... |
29 |
|
8a25a2fd1 cpu: convert 'cpu... |
30 31 |
extern int cpu_add_dev_attr(struct device_attribute *attr); extern void cpu_remove_dev_attr(struct device_attribute *attr); |
0344c6c53 [POWERPC] sysfs: ... |
32 |
|
8a25a2fd1 cpu: convert 'cpu... |
33 34 |
extern int cpu_add_dev_attr_group(struct attribute_group *attrs); extern void cpu_remove_dev_attr_group(struct attribute_group *attrs); |
0344c6c53 [POWERPC] sysfs: ... |
35 |
|
8a25a2fd1 cpu: convert 'cpu... |
36 |
extern int sched_create_sysfs_power_savings_entries(struct device *dev); |
0344c6c53 [POWERPC] sysfs: ... |
37 |
|
1da177e4c Linux-2.6.12-rc2 |
38 |
#ifdef CONFIG_HOTPLUG_CPU |
76b67ed9d [PATCH] node hotp... |
39 |
extern void unregister_cpu(struct cpu *cpu); |
12633e803 sysfs/cpu: Add pr... |
40 41 |
extern ssize_t arch_cpu_probe(const char *, size_t); extern ssize_t arch_cpu_release(const char *, size_t); |
1da177e4c Linux-2.6.12-rc2 |
42 43 |
#endif struct notifier_block; |
50a323b73 sched: define and... |
44 45 46 47 |
/* * CPU notifier priorities. */ enum { |
3a101d054 sched: adjust whe... |
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
/* * SCHED_ACTIVE marks a cpu which is coming up active during * CPU_ONLINE and CPU_DOWN_FAILED and must be the first * notifier. CPUSET_ACTIVE adjusts cpuset according to * cpu_active mask right after SCHED_ACTIVE. During * CPU_DOWN_PREPARE, SCHED_INACTIVE and CPUSET_INACTIVE are * ordered in the similar way. * * This ordering guarantees consistent cpu_active mask and * migration behavior to all cpu notifiers. */ CPU_PRI_SCHED_ACTIVE = INT_MAX, CPU_PRI_CPUSET_ACTIVE = INT_MAX - 1, CPU_PRI_SCHED_INACTIVE = INT_MIN + 1, CPU_PRI_CPUSET_INACTIVE = INT_MIN, |
50a323b73 sched: define and... |
63 64 65 |
/* migration should happen before other stuff but after perf */ CPU_PRI_PERF = 20, CPU_PRI_MIGRATION = 10, |
db7bccf45 workqueue: reimpl... |
66 67 |
/* prepare workqueues for other notifiers */ CPU_PRI_WORKQUEUE = 5, |
50a323b73 sched: define and... |
68 |
}; |
80f1ff97d notifiers: cpu: m... |
69 70 71 72 73 74 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 |
#define CPU_ONLINE 0x0002 /* CPU (unsigned)v is up */ #define CPU_UP_PREPARE 0x0003 /* CPU (unsigned)v coming up */ #define CPU_UP_CANCELED 0x0004 /* CPU (unsigned)v NOT coming up */ #define CPU_DOWN_PREPARE 0x0005 /* CPU (unsigned)v going down */ #define CPU_DOWN_FAILED 0x0006 /* CPU (unsigned)v NOT going down */ #define CPU_DEAD 0x0007 /* CPU (unsigned)v dead */ #define CPU_DYING 0x0008 /* CPU (unsigned)v not running any task, * not handling interrupts, soon dead. * Called on the dying cpu, interrupts * are already disabled. Must not * sleep, must not fail */ #define CPU_POST_DEAD 0x0009 /* CPU (unsigned)v dead, cpu_hotplug * lock is dropped */ #define CPU_STARTING 0x000A /* CPU (unsigned)v soon running. * Called on the new cpu, just before * enabling interrupts. Must not sleep, * must not fail */ /* Used for CPU hotplug events occurring while tasks are frozen due to a suspend * operation in progress */ #define CPU_TASKS_FROZEN 0x0010 #define CPU_ONLINE_FROZEN (CPU_ONLINE | CPU_TASKS_FROZEN) #define CPU_UP_PREPARE_FROZEN (CPU_UP_PREPARE | CPU_TASKS_FROZEN) #define CPU_UP_CANCELED_FROZEN (CPU_UP_CANCELED | CPU_TASKS_FROZEN) #define CPU_DOWN_PREPARE_FROZEN (CPU_DOWN_PREPARE | CPU_TASKS_FROZEN) #define CPU_DOWN_FAILED_FROZEN (CPU_DOWN_FAILED | CPU_TASKS_FROZEN) #define CPU_DEAD_FROZEN (CPU_DEAD | CPU_TASKS_FROZEN) #define CPU_DYING_FROZEN (CPU_DYING | CPU_TASKS_FROZEN) #define CPU_STARTING_FROZEN (CPU_STARTING | CPU_TASKS_FROZEN) |
1da177e4c Linux-2.6.12-rc2 |
100 101 |
#ifdef CONFIG_SMP /* Need to know about CPUs going up/down? */ |
799e64f05 cpu hotplug: Intr... |
102 103 104 105 106 107 108 109 110 |
#if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) #define cpu_notifier(fn, pri) { \ static struct notifier_block fn##_nb __cpuinitdata = \ { .notifier_call = fn, .priority = pri }; \ register_cpu_notifier(&fn##_nb); \ } #else /* #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ #define cpu_notifier(fn, pri) do { (void)(fn); } while (0) #endif /* #else #if defined(CONFIG_HOTPLUG_CPU) || !defined(MODULE) */ |
65edc68c3 [PATCH] cpu hotpl... |
111 |
#ifdef CONFIG_HOTPLUG_CPU |
47e627bc8 [PATCH] hotplug: ... |
112 |
extern int register_cpu_notifier(struct notifier_block *nb); |
1da177e4c Linux-2.6.12-rc2 |
113 |
extern void unregister_cpu_notifier(struct notifier_block *nb); |
65edc68c3 [PATCH] cpu hotpl... |
114 |
#else |
47e627bc8 [PATCH] hotplug: ... |
115 116 117 118 119 120 121 122 123 |
#ifndef MODULE extern int register_cpu_notifier(struct notifier_block *nb); #else static inline int register_cpu_notifier(struct notifier_block *nb) { return 0; } #endif |
65edc68c3 [PATCH] cpu hotpl... |
124 125 126 127 |
static inline void unregister_cpu_notifier(struct notifier_block *nb) { } #endif |
1da177e4c Linux-2.6.12-rc2 |
128 129 |
int cpu_up(unsigned int cpu); |
e545a6140 kernel/cpu.c: cre... |
130 |
void notify_cpu_starting(unsigned int cpu); |
3da1c84c0 workqueues: make ... |
131 132 |
extern void cpu_maps_update_begin(void); extern void cpu_maps_update_done(void); |
d0d23b543 cpu-hotplug: fix ... |
133 |
|
3da1c84c0 workqueues: make ... |
134 |
#else /* CONFIG_SMP */ |
1da177e4c Linux-2.6.12-rc2 |
135 |
|
799e64f05 cpu hotplug: Intr... |
136 |
#define cpu_notifier(fn, pri) do { (void)(fn); } while (0) |
1da177e4c Linux-2.6.12-rc2 |
137 138 139 140 |
static inline int register_cpu_notifier(struct notifier_block *nb) { return 0; } |
d0d23b543 cpu-hotplug: fix ... |
141 |
|
1da177e4c Linux-2.6.12-rc2 |
142 143 144 |
static inline void unregister_cpu_notifier(struct notifier_block *nb) { } |
3da1c84c0 workqueues: make ... |
145 146 147 148 149 150 151 |
static inline void cpu_maps_update_begin(void) { } static inline void cpu_maps_update_done(void) { } |
1da177e4c Linux-2.6.12-rc2 |
152 |
#endif /* CONFIG_SMP */ |
8a25a2fd1 cpu: convert 'cpu... |
153 |
extern struct bus_type cpu_subsys; |
1da177e4c Linux-2.6.12-rc2 |
154 155 156 |
#ifdef CONFIG_HOTPLUG_CPU /* Stop CPUs going up and down. */ |
f7dff2b12 [PATCH] Handle pe... |
157 |
|
86ef5c9a8 cpu-hotplug: repl... |
158 159 |
extern void get_online_cpus(void); extern void put_online_cpus(void); |
799e64f05 cpu hotplug: Intr... |
160 |
#define hotcpu_notifier(fn, pri) cpu_notifier(fn, pri) |
39f4885c5 [PATCH] cpu hotpl... |
161 162 |
#define register_hotcpu_notifier(nb) register_cpu_notifier(nb) #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
1da177e4c Linux-2.6.12-rc2 |
163 |
int cpu_down(unsigned int cpu); |
f7dff2b12 [PATCH] Handle pe... |
164 |
|
51badebdc powerpc/pseries: ... |
165 166 167 168 169 170 171 172 173 174 175 176 |
#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE extern void cpu_hotplug_driver_lock(void); extern void cpu_hotplug_driver_unlock(void); #else static inline void cpu_hotplug_driver_lock(void) { } static inline void cpu_hotplug_driver_unlock(void) { } #endif |
f7dff2b12 [PATCH] Handle pe... |
177 |
#else /* CONFIG_HOTPLUG_CPU */ |
86ef5c9a8 cpu-hotplug: repl... |
178 179 |
#define get_online_cpus() do { } while (0) #define put_online_cpus() do { } while (0) |
023160678 [PATCH] hotplug C... |
180 |
#define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) |
761bb4319 Redefine {un}regi... |
181 182 183 |
/* These aren't inline functions due to a GCC bug. */ #define register_hotcpu_notifier(nb) ({ (void)(nb); 0; }) #define unregister_hotcpu_notifier(nb) ({ (void)(nb); }) |
f7dff2b12 [PATCH] Handle pe... |
184 |
#endif /* CONFIG_HOTPLUG_CPU */ |
1da177e4c Linux-2.6.12-rc2 |
185 |
|
f3de4be9d PM: Fix dependenc... |
186 |
#ifdef CONFIG_PM_SLEEP_SMP |
e3920fb42 [PATCH] Disable C... |
187 188 |
extern int disable_nonboot_cpus(void); extern void enable_nonboot_cpus(void); |
f3de4be9d PM: Fix dependenc... |
189 |
#else /* !CONFIG_PM_SLEEP_SMP */ |
e3920fb42 [PATCH] Disable C... |
190 191 |
static inline int disable_nonboot_cpus(void) { return 0; } static inline void enable_nonboot_cpus(void) {} |
f3de4be9d PM: Fix dependenc... |
192 |
#endif /* !CONFIG_PM_SLEEP_SMP */ |
e3920fb42 [PATCH] Disable C... |
193 |
|
1da177e4c Linux-2.6.12-rc2 |
194 |
#endif /* _LINUX_CPU_H_ */ |