Skip to contentSkip to conversation

rcu: Don't disable preemption for Tiny and Tree RCU readers

RFC PATCH New Paul E. McKenney 1 participant 1 message Jul 31, 2015 RCU

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 rcu: Don't disable preemption for Tiny and Tree RCU readers

rcu: Don't disable preemption for Tiny and Tree RCU readers

Because preempt_disable() maps to barrier() for non-debug builds, it forces the compiler to spill and reload registers. Because Tree RCU and Tiny RCU now only appear in CONFIG_PREEMPT=n builds, these barrier() instances generate needless extra code for each instance of rcu_read_lock() and rcu_read_unlock(). This extra code slows down Tree RCU and bloats Tiny RCU (though probably not significantly).

This commit therefore removes the preempt_disable() and preempt_enable() from the non-preemptible implementations of __rcu_read_lock() and __rcu_read_unlock(), respectively.

include/linux/rcupdate.h +4 -2
index 78af46c98e55..927c5e60c1dd 100644
@@ -298,12 +298,14 @@ void synchronize_rcu(void);
 
 static inline void __rcu_read_lock(void)
 {
-	preempt_disable();
+	if (!IS_ENABLED(CONFIG_TINY_RCU))
+		preempt_disable();
 }
 
 static inline void __rcu_read_unlock(void)
 {
-	preempt_enable();
+	if (!IS_ENABLED(CONFIG_TINY_RCU))
+		preempt_enable();
 }
 
 static inline void synchronize_rcu(void)