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
					
				
			
		
					 2 changed files with 19 additions and 0 deletions
				
			
		|  | @ -297,4 +297,8 @@ static inline long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg) | |||
| #else | ||||
| long work_on_cpu(unsigned int cpu, long (*fn)(void *), void *arg); | ||||
| #endif /* CONFIG_SMP */ | ||||
| 
 | ||||
| #ifdef CONFIG_LOCKDEP | ||||
| int in_workqueue_context(struct workqueue_struct *wq); | ||||
| #endif | ||||
| #endif | ||||
|  |  | |||
|  | @ -68,6 +68,21 @@ struct workqueue_struct { | |||
| #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 | ||||
| 
 | ||||
| static struct debug_obj_descr work_debug_descr; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Paul E. McKenney
				Paul E. McKenney