lockdep: Add an in_workqueue_context() lockdep-based test function
Some recent uses of RCU make use of workqueues. In these uses, execution within the context of a specific workqueue takes the place of the usual RCU read-side primitives such as rcu_read_lock(), and flushing of workqueues takes the place of the usual RCU grace-period primitives. Checking for correct use of rcu_dereference() in such cases requires a test of whether the code is executing in the context of a particular workqueue. This commit adds an in_workqueue_context() function that provides this test. This new function is only defined when lockdep is enabled, which allows it to be used as the second argument of rcu_dereference_check(). Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
71d1d5c722
commit
a25909a4d4
@ -297,4 +297,8 @@ static inline long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg)
|
|||||||
#else
|
#else
|
||||||
long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg);
|
long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg);
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
|
#ifdef CONFIG_LOCKDEP
|
||||||
|
int in_workqueue_context(struct workqueue_struct *wq);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -68,6 +68,21 @@ struct workqueue_struct {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_LOCKDEP
|
||||||
|
/**
|
||||||
|
* in_workqueue_context() - in context of specified workqueue?
|
||||||
|
* @wq: the workqueue of interest
|
||||||
|
*
|
||||||
|
* Checks lockdep state to see if the current task is executing from
|
||||||
|
* within a workqueue item. This function exists only if lockdep is
|
||||||
|
* enabled.
|
||||||
|
*/
|
||||||
|
int in_workqueue_context(struct workqueue_struct *wq)
|
||||||
|
{
|
||||||
|
return lock_is_held(&wq->lockdep_map);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_OBJECTS_WORK
|
#ifdef CONFIG_DEBUG_OBJECTS_WORK
|
||||||
|
|
||||||
static struct debug_obj_descr work_debug_descr;
|
static struct debug_obj_descr work_debug_descr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user