Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
Linus Torvalds [Thu, 6 Jan 2011 18:17:26 +0000 (10:17 -0800)]
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (146 commits)
  tools, perf: Documentation for the power events API
  perf: Add calls to suspend trace point
  perf script: Make some lists static
  perf script: Use the default lost event handler
  perf session: Warn about errors when processing pipe events too
  perf tools: Fix perf_event.h header usage
  perf test: Clarify some error reports in the open syscall test
  x86, NMI: Add touch_nmi_watchdog to io_check_error delay
  x86: Avoid calling arch_trigger_all_cpu_backtrace() at the same time
  x86: Only call smp_processor_id in non-preempt cases
  perf timechart: Adjust perf timechart to the new power events
  perf: Clean up power events by introducing new, more generic ones
  perf: Do not export power_frequency, but power_start event
  perf test: Add test for counting open syscalls
  perf evsel: Auto allocate resources needed for some methods
  perf evsel: Use {cpu,thread}_map to shorten list of parameters
  perf tools: Refactor all_tids to hold nr and the map
  perf tools: Refactor cpumap to hold nr and the map
  perf evsel: Introduce per cpu and per thread open helpers
  perf evsel: Steal the counter reading routines from stat
  ...

1  2 
include/linux/sched.h
kernel/sched.c

diff --combined include/linux/sched.h
@@@ -316,6 -316,7 +316,7 @@@ extern int proc_dowatchdog_thresh(struc
                                  size_t *lenp, loff_t *ppos);
  extern unsigned int  softlockup_panic;
  extern int softlockup_thresh;
+ void lockup_detector_init(void);
  #else
  static inline void touch_softlockup_watchdog(void)
  {
@@@ -326,6 -327,9 +327,9 @@@ static inline void touch_softlockup_wat
  static inline void touch_all_softlockup_watchdogs(void)
  {
  }
+ static inline void lockup_detector_init(void)
+ {
+ }
  #endif
  
  #ifdef CONFIG_DETECT_HUNG_TASK
@@@ -1229,9 -1233,6 +1233,9 @@@ struct task_struct 
  #ifdef CONFIG_TREE_PREEMPT_RCU
        struct rcu_node *rcu_blocked_node;
  #endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
 +#ifdef CONFIG_RCU_BOOST
 +      struct rt_mutex *rcu_boost_mutex;
 +#endif /* #ifdef CONFIG_RCU_BOOST */
  
  #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
        struct sched_info sched_info;
@@@ -1762,8 -1763,7 +1766,8 @@@ extern void thread_group_times(struct t
  #ifdef CONFIG_PREEMPT_RCU
  
  #define RCU_READ_UNLOCK_BLOCKED (1 << 0) /* blocked while in RCU read-side. */
 -#define RCU_READ_UNLOCK_NEED_QS (1 << 1) /* RCU core needs CPU response. */
 +#define RCU_READ_UNLOCK_BOOSTED (1 << 1) /* boosted while in RCU read-side. */
 +#define RCU_READ_UNLOCK_NEED_QS (1 << 2) /* RCU core needs CPU response. */
  
  static inline void rcu_copy_process(struct task_struct *p)
  {
        p->rcu_read_unlock_special = 0;
  #ifdef CONFIG_TREE_PREEMPT_RCU
        p->rcu_blocked_node = NULL;
 -#endif
 +#endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */
 +#ifdef CONFIG_RCU_BOOST
 +      p->rcu_boost_mutex = NULL;
 +#endif /* #ifdef CONFIG_RCU_BOOST */
        INIT_LIST_HEAD(&p->rcu_node_entry);
  }
  
diff --combined kernel/sched.c
@@@ -8293,8 -8293,6 +8293,6 @@@ void __init sched_init(void
                zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
  #endif /* SMP */
  
-       perf_event_init();
        scheduler_running = 1;
  }
  
@@@ -9534,3 -9532,72 +9532,3 @@@ struct cgroup_subsys cpuacct_subsys = 
  };
  #endif        /* CONFIG_CGROUP_CPUACCT */
  
 -#ifndef CONFIG_SMP
 -
 -void synchronize_sched_expedited(void)
 -{
 -      barrier();
 -}
 -EXPORT_SYMBOL_GPL(synchronize_sched_expedited);
 -
 -#else /* #ifndef CONFIG_SMP */
 -
 -static atomic_t synchronize_sched_expedited_count = ATOMIC_INIT(0);
 -
 -static int synchronize_sched_expedited_cpu_stop(void *data)
 -{
 -      /*
 -       * There must be a full memory barrier on each affected CPU
 -       * between the time that try_stop_cpus() is called and the
 -       * time that it returns.
 -       *
 -       * In the current initial implementation of cpu_stop, the
 -       * above condition is already met when the control reaches
 -       * this point and the following smp_mb() is not strictly
 -       * necessary.  Do smp_mb() anyway for documentation and
 -       * robustness against future implementation changes.
 -       */
 -      smp_mb(); /* See above comment block. */
 -      return 0;
 -}
 -
 -/*
 - * Wait for an rcu-sched grace period to elapse, but use "big hammer"
 - * approach to force grace period to end quickly.  This consumes
 - * significant time on all CPUs, and is thus not recommended for
 - * any sort of common-case code.
 - *
 - * Note that it is illegal to call this function while holding any
 - * lock that is acquired by a CPU-hotplug notifier.  Failing to
 - * observe this restriction will result in deadlock.
 - */
 -void synchronize_sched_expedited(void)
 -{
 -      int snap, trycount = 0;
 -
 -      smp_mb();  /* ensure prior mod happens before capturing snap. */
 -      snap = atomic_read(&synchronize_sched_expedited_count) + 1;
 -      get_online_cpus();
 -      while (try_stop_cpus(cpu_online_mask,
 -                           synchronize_sched_expedited_cpu_stop,
 -                           NULL) == -EAGAIN) {
 -              put_online_cpus();
 -              if (trycount++ < 10)
 -                      udelay(trycount * num_online_cpus());
 -              else {
 -                      synchronize_sched();
 -                      return;
 -              }
 -              if (atomic_read(&synchronize_sched_expedited_count) - snap > 0) {
 -                      smp_mb(); /* ensure test happens before caller kfree */
 -                      return;
 -              }
 -              get_online_cpus();
 -      }
 -      atomic_inc(&synchronize_sched_expedited_count);
 -      smp_mb__after_atomic_inc(); /* ensure post-GP actions seen after GP. */
 -      put_online_cpus();
 -}
 -EXPORT_SYMBOL_GPL(synchronize_sched_expedited);
 -
 -#endif /* #else #ifndef CONFIG_SMP */