Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
Linus Torvalds [Sat, 28 May 2011 19:55:55 +0000 (12:55 -0700)]
* 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (25 commits)
  perf: Fix SIGIO handling
  perf top: Don't stop if no kernel symtab is found
  perf top: Handle kptr_restrict
  perf top: Remove unused macro
  perf events: initialize fd array to -1 instead of 0
  perf tools: Make sure kptr_restrict warnings fit 80 col terms
  perf tools: Fix build on older systems
  perf symbols: Handle /proc/sys/kernel/kptr_restrict
  perf: Remove duplicate headers
  ftrace: Add internal recursive checks
  tracing: Update btrfs's tracepoints to use u64 interface
  tracing: Add __print_symbolic_u64 to avoid warnings on 32bit machine
  ftrace: Set ops->flag to enabled even on static function tracing
  tracing: Have event with function tracer check error return
  ftrace: Have ftrace_startup() return failure code
  jump_label: Check entries limit in __jump_label_update
  ftrace/recordmcount: Avoid STT_FUNC symbols as base on ARM
  scripts/tags.sh: Add magic for trace-events for etags too
  scripts/tags.sh: Fix ctags for DEFINE_EVENT()
  x86/ftrace: Fix compiler warning in ftrace.c
  ...

1  2 
include/linux/sched.h

diff --combined include/linux/sched.h
@@@ -513,7 -513,6 +513,7 @@@ struct thread_group_cputimer 
        spinlock_t lock;
  };
  
 +#include <linux/rwsem.h>
  struct autogroup;
  
  /*
@@@ -633,16 -632,6 +633,16 @@@ struct signal_struct 
        unsigned audit_tty;
        struct tty_audit_buf *tty_audit_buf;
  #endif
 +#ifdef CONFIG_CGROUPS
 +      /*
 +       * The threadgroup_fork_lock prevents threads from forking with
 +       * CLONE_THREAD while held for writing. Use this for fork-sensitive
 +       * threadgroup-wide operations. It's taken for reading in fork.c in
 +       * copy_process().
 +       * Currently only needed write-side by cgroups.
 +       */
 +      struct rw_semaphore threadgroup_fork_lock;
 +#endif
  
        int oom_adj;            /* OOM kill score adjustment (bit shift) */
        int oom_score_adj;      /* OOM kill score adjustment */
@@@ -1546,7 -1535,7 +1546,7 @@@ struct task_struct 
  #ifdef CONFIG_TRACING
        /* state flags for use by tracers */
        unsigned long trace;
-       /* bitmask of trace recursion */
+       /* bitmask and counter of trace recursion */
        unsigned long trace_recursion;
  #endif /* CONFIG_TRACING */
  #ifdef CONFIG_CGROUP_MEM_RES_CTLR /* memcg uses this to do batch job */
@@@ -2334,31 -2323,6 +2334,31 @@@ static inline void unlock_task_sighand(
        spin_unlock_irqrestore(&tsk->sighand->siglock, *flags);
  }
  
 +/* See the declaration of threadgroup_fork_lock in signal_struct. */
 +#ifdef CONFIG_CGROUPS
 +static inline void threadgroup_fork_read_lock(struct task_struct *tsk)
 +{
 +      down_read(&tsk->signal->threadgroup_fork_lock);
 +}
 +static inline void threadgroup_fork_read_unlock(struct task_struct *tsk)
 +{
 +      up_read(&tsk->signal->threadgroup_fork_lock);
 +}
 +static inline void threadgroup_fork_write_lock(struct task_struct *tsk)
 +{
 +      down_write(&tsk->signal->threadgroup_fork_lock);
 +}
 +static inline void threadgroup_fork_write_unlock(struct task_struct *tsk)
 +{
 +      up_write(&tsk->signal->threadgroup_fork_lock);
 +}
 +#else
 +static inline void threadgroup_fork_read_lock(struct task_struct *tsk) {}
 +static inline void threadgroup_fork_read_unlock(struct task_struct *tsk) {}
 +static inline void threadgroup_fork_write_lock(struct task_struct *tsk) {}
 +static inline void threadgroup_fork_write_unlock(struct task_struct *tsk) {}
 +#endif
 +
  #ifndef __HAVE_THREAD_FUNCTIONS
  
  #define task_thread_info(task)        ((struct thread_info *)(task)->stack)