Commit 6f4ceee9 authored by Waiman Long's avatar Waiman Long Committed by Rafael J. Wysocki

cpu/hotplug: Add a cpus_read_trylock() function

There are use cases where it can be useful to have a cpus_read_trylock()
function to work around circular lock dependency problem involving
the cpu_hotplug_lock.
Signed-off-by: default avatarWaiman Long <longman@redhat.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 601b2185
...@@ -103,6 +103,7 @@ extern void cpus_write_lock(void); ...@@ -103,6 +103,7 @@ extern void cpus_write_lock(void);
extern void cpus_write_unlock(void); extern void cpus_write_unlock(void);
extern void cpus_read_lock(void); extern void cpus_read_lock(void);
extern void cpus_read_unlock(void); extern void cpus_read_unlock(void);
extern int cpus_read_trylock(void);
extern void lockdep_assert_cpus_held(void); extern void lockdep_assert_cpus_held(void);
extern void cpu_hotplug_disable(void); extern void cpu_hotplug_disable(void);
extern void cpu_hotplug_enable(void); extern void cpu_hotplug_enable(void);
...@@ -115,6 +116,7 @@ static inline void cpus_write_lock(void) { } ...@@ -115,6 +116,7 @@ static inline void cpus_write_lock(void) { }
static inline void cpus_write_unlock(void) { } static inline void cpus_write_unlock(void) { }
static inline void cpus_read_lock(void) { } static inline void cpus_read_lock(void) { }
static inline void cpus_read_unlock(void) { } static inline void cpus_read_unlock(void) { }
static inline int cpus_read_trylock(void) { return true; }
static inline void lockdep_assert_cpus_held(void) { } static inline void lockdep_assert_cpus_held(void) { }
static inline void cpu_hotplug_disable(void) { } static inline void cpu_hotplug_disable(void) { }
static inline void cpu_hotplug_enable(void) { } static inline void cpu_hotplug_enable(void) { }
......
...@@ -290,6 +290,12 @@ void cpus_read_lock(void) ...@@ -290,6 +290,12 @@ void cpus_read_lock(void)
} }
EXPORT_SYMBOL_GPL(cpus_read_lock); EXPORT_SYMBOL_GPL(cpus_read_lock);
int cpus_read_trylock(void)
{
return percpu_down_read_trylock(&cpu_hotplug_lock);
}
EXPORT_SYMBOL_GPL(cpus_read_trylock);
void cpus_read_unlock(void) void cpus_read_unlock(void)
{ {
percpu_up_read(&cpu_hotplug_lock); percpu_up_read(&cpu_hotplug_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment