Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 13 Mar 2010 22:43:01 +0000 (14:43 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 13 Mar 2010 22:43:01 +0000 (14:43 -0800)
* 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  locking: Make sparse work with inline spinlocks and rwlocks
  x86/mce: Fix RCU lockdep splats
  rcu: Increase RCU CPU stall timeouts if PROVE_RCU
  ftrace: Replace read_barrier_depends() with rcu_dereference_raw()
  rcu: Suppress RCU lockdep warnings during early boot
  rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()
  rcu: Suppress __mpol_dup() false positive from RCU lockdep
  rcu: Make rcu_read_lock_sched_held() handle !PREEMPT
  rcu: Add control variables to lockdep_rcu_dereference() diagnostics
  rcu, cgroup: Relax the check in task_subsys_state() as early boot is now handled by lockdep-RCU
  rcu: Use wrapper function instead of exporting tasklist_lock
  sched, rcu: Fix rcu_dereference() for RCU-lockdep
  rcu: Make task_subsys_state() RCU-lockdep checks handle boot-time use
  rcu: Fix holdoff for accelerated GPs for last non-dynticked CPU
  x86/gart: Unexport gart_iommu_aperture

Fix trivial conflicts in kernel/trace/ftrace.c

1  2 
arch/x86/kernel/cpu/mcheck/mce.c
include/linux/rcupdate.h
include/linux/sched.h
kernel/exit.c
kernel/fork.c
kernel/pid.c
kernel/trace/ftrace.c
mm/mempolicy.c

Simple merge
Simple merge
Simple merge
diff --cc kernel/exit.c
Simple merge
diff --cc kernel/fork.c
Simple merge
diff --cc kernel/pid.c
Simple merge
index bb53edbb5c8c7fc7a8f4a4f2db423aa1512b2a43,8c5adc0e5db3f2199fa54cd9b422bb65a163d940..d9062f5cc0c01e598670d651fba80b87ccb68a57
@@@ -84,18 -85,26 +85,22 @@@ ftrace_func_t ftrace_trace_function __r
  ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub;
  ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub;
  
 -#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 -static int ftrace_set_func(unsigned long *array, int *idx, char *buffer);
 -#endif
 -
+ /*
+  * Traverse the ftrace_list, invoking all entries.  The reason that we
+  * can use rcu_dereference_raw() is that elements removed from this list
+  * are simply leaked, so there is no need to interact with a grace-period
+  * mechanism.  The rcu_dereference_raw() calls are needed to handle
+  * concurrent insertions into the ftrace_list.
+  *
+  * Silly Alpha and silly pointer-speculation compiler optimizations!
+  */
  static void ftrace_list_func(unsigned long ip, unsigned long parent_ip)
  {
-       struct ftrace_ops *op = ftrace_list;
-       /* in case someone actually ports this to alpha! */
-       read_barrier_depends();
+       struct ftrace_ops *op = rcu_dereference_raw(ftrace_list); /*see above*/
  
        while (op != &ftrace_list_end) {
-               /* silly alpha */
-               read_barrier_depends();
                op->func(ip, parent_ip);
-               op = op->next;
+               op = rcu_dereference_raw(op->next); /*see above*/
        };
  }
  
diff --cc mm/mempolicy.c
Simple merge