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: Waiman Long <longman@redhat.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
601b218568
commit
6f4ceee930
|
@ -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) { }
|
||||||
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)
|
||||||
}
|
}
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue