mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	rcu: Remove superfluous versions of rcu_read_lock_sched_held()
Currently, we have four versions of rcu_read_lock_sched_held(), depending on the combined choices on PREEMPT_COUNT and DEBUG_LOCK_ALLOC. However, there is an existing function preemptible() that already distinguishes between the PREEMPT_COUNT=y and PREEMPT_COUNT=n cases, and allows these four implementations to be consolidated down to two. This commit therefore uses preemptible() to achieve this consolidation. Note that there could be a small performance regression in the case of CONFIG_DEBUG_LOCK_ALLOC=y && PREEMPT_COUNT=n. However, given the overhead associated with CONFIG_DEBUG_LOCK_ALLOC=y, this should be down in the noise. Signed-off-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									8c7c4829a8
								
							
						
					
					
						commit
						293e2421fe
					
				
					 2 changed files with 3 additions and 18 deletions
				
			
		| 
						 | 
					@ -508,14 +508,7 @@ int rcu_read_lock_bh_held(void);
 | 
				
			||||||
 * CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU-sched read-side
 | 
					 * CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU-sched read-side
 | 
				
			||||||
 * critical section unless it can prove otherwise.
 | 
					 * critical section unless it can prove otherwise.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifdef CONFIG_PREEMPT_COUNT
 | 
					 | 
				
			||||||
int rcu_read_lock_sched_held(void);
 | 
					int rcu_read_lock_sched_held(void);
 | 
				
			||||||
#else /* #ifdef CONFIG_PREEMPT_COUNT */
 | 
					 | 
				
			||||||
static inline int rcu_read_lock_sched_held(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif /* #else #ifdef CONFIG_PREEMPT_COUNT */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
 | 
					#else /* #ifdef CONFIG_DEBUG_LOCK_ALLOC */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -532,18 +525,10 @@ static inline int rcu_read_lock_bh_held(void)
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PREEMPT_COUNT
 | 
					 | 
				
			||||||
static inline int rcu_read_lock_sched_held(void)
 | 
					static inline int rcu_read_lock_sched_held(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return preempt_count() != 0 || irqs_disabled();
 | 
						return !preemptible();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else /* #ifdef CONFIG_PREEMPT_COUNT */
 | 
					 | 
				
			||||||
static inline int rcu_read_lock_sched_held(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif /* #else #ifdef CONFIG_PREEMPT_COUNT */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
 | 
					#endif /* #else #ifdef CONFIG_DEBUG_LOCK_ALLOC */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PROVE_RCU
 | 
					#ifdef CONFIG_PROVE_RCU
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ static int rcu_normal_after_boot;
 | 
				
			||||||
module_param(rcu_normal_after_boot, int, 0);
 | 
					module_param(rcu_normal_after_boot, int, 0);
 | 
				
			||||||
#endif /* #ifndef CONFIG_TINY_RCU */
 | 
					#endif /* #ifndef CONFIG_TINY_RCU */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(CONFIG_DEBUG_LOCK_ALLOC) && defined(CONFIG_PREEMPT_COUNT)
 | 
					#ifdef CONFIG_DEBUG_LOCK_ALLOC
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * rcu_read_lock_sched_held() - might we be in RCU-sched read-side critical section?
 | 
					 * rcu_read_lock_sched_held() - might we be in RCU-sched read-side critical section?
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -111,7 +111,7 @@ int rcu_read_lock_sched_held(void)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	if (debug_locks)
 | 
						if (debug_locks)
 | 
				
			||||||
		lockdep_opinion = lock_is_held(&rcu_sched_lock_map);
 | 
							lockdep_opinion = lock_is_held(&rcu_sched_lock_map);
 | 
				
			||||||
	return lockdep_opinion || preempt_count() != 0 || irqs_disabled();
 | 
						return lockdep_opinion || !preemptible();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(rcu_read_lock_sched_held);
 | 
					EXPORT_SYMBOL(rcu_read_lock_sched_held);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue