diff options
Diffstat (limited to 'kernel/cpu.c')
-rw-r--r-- | kernel/cpu.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/kernel/cpu.c b/kernel/cpu.c index 81e2a388a0f6..356450f09c1f 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
@@ -79,6 +79,8 @@ static struct { | |||
79 | 79 | ||
80 | /* Lockdep annotations for get/put_online_cpus() and cpu_hotplug_begin/end() */ | 80 | /* Lockdep annotations for get/put_online_cpus() and cpu_hotplug_begin/end() */ |
81 | #define cpuhp_lock_acquire_read() lock_map_acquire_read(&cpu_hotplug.dep_map) | 81 | #define cpuhp_lock_acquire_read() lock_map_acquire_read(&cpu_hotplug.dep_map) |
82 | #define cpuhp_lock_acquire_tryread() \ | ||
83 | lock_map_acquire_tryread(&cpu_hotplug.dep_map) | ||
82 | #define cpuhp_lock_acquire() lock_map_acquire(&cpu_hotplug.dep_map) | 84 | #define cpuhp_lock_acquire() lock_map_acquire(&cpu_hotplug.dep_map) |
83 | #define cpuhp_lock_release() lock_map_release(&cpu_hotplug.dep_map) | 85 | #define cpuhp_lock_release() lock_map_release(&cpu_hotplug.dep_map) |
84 | 86 | ||
@@ -91,10 +93,22 @@ void get_online_cpus(void) | |||
91 | mutex_lock(&cpu_hotplug.lock); | 93 | mutex_lock(&cpu_hotplug.lock); |
92 | cpu_hotplug.refcount++; | 94 | cpu_hotplug.refcount++; |
93 | mutex_unlock(&cpu_hotplug.lock); | 95 | mutex_unlock(&cpu_hotplug.lock); |
94 | |||
95 | } | 96 | } |
96 | EXPORT_SYMBOL_GPL(get_online_cpus); | 97 | EXPORT_SYMBOL_GPL(get_online_cpus); |
97 | 98 | ||
99 | bool try_get_online_cpus(void) | ||
100 | { | ||
101 | if (cpu_hotplug.active_writer == current) | ||
102 | return true; | ||
103 | if (!mutex_trylock(&cpu_hotplug.lock)) | ||
104 | return false; | ||
105 | cpuhp_lock_acquire_tryread(); | ||
106 | cpu_hotplug.refcount++; | ||
107 | mutex_unlock(&cpu_hotplug.lock); | ||
108 | return true; | ||
109 | } | ||
110 | EXPORT_SYMBOL_GPL(try_get_online_cpus); | ||
111 | |||
98 | void put_online_cpus(void) | 112 | void put_online_cpus(void) |
99 | { | 113 | { |
100 | if (cpu_hotplug.active_writer == current) | 114 | if (cpu_hotplug.active_writer == current) |