sched: tune multi-core idle balancing
[sfrench/cifs-2.6.git] / include / linux / rcupdate.h
index d32c14de270ea28a1490c3241fe71057a1b0f582..37a642c54871f24166bec8e9b23b73e3369848bb 100644 (file)
@@ -174,10 +174,13 @@ struct rcu_head {
  * code.
  */
 
-#define rcu_assign_pointer(p, v)       ({ \
-                                               smp_wmb(); \
-                                               (p) = (v); \
-                                       })
+#define rcu_assign_pointer(p, v) \
+       ({ \
+               if (!__builtin_constant_p(v) || \
+                   ((v) != NULL)) \
+                       smp_wmb(); \
+               (p) = (v); \
+       })
 
 /**
  * synchronize_sched - block until all CPUs have exited any non-preemptive