Merge remote-tracking branch 'tip/perf/core' into kvm-updates/3.3
Avi Kivity [Sun, 25 Dec 2011 13:44:43 +0000 (15:44 +0200)]
* tip/perf/core: (66 commits)
  perf, x86: Expose perf capability to other modules
  perf, x86: Implement arch event mask as quirk
  x86, perf: Disable non available architectural events
  jump_label: Provide jump_label_key initializers
  jump_label, x86: Fix section mismatch
  perf, core: Rate limit perf_sched_events jump_label patching
  perf: Fix enable_on_exec for sibling events
  perf: Remove superfluous arguments
  perf, x86: Prefer fixed-purpose counters when scheduling
  perf, x86: Fix event scheduler for constraints with overlapping counters
  perf, x86: Implement event scheduler helper functions
  perf: Avoid a useless pmu_disable() in the perf-tick
  x86/tools: Add decoded instruction dump mode
  x86: Update instruction decoder to support new AVX formats
  x86/tools: Fix insn_sanity message outputs
  x86/tools: Fix instruction decoder message output
  x86: Fix instruction decoder to handle grouped AVX instructions
  x86/tools: Fix Makefile to build all test tools
  perf test: Soft errors shouldn't stop the "Validate PERF_RECORD_" test
  perf test: Validate PERF_RECORD_ events and perf_sample fields
  ...

Signed-off-by: Avi Kivity <avi@redhat.com>

* commit 'b3d9468a8bd218a695e3a0ff112cd4efd27b670a': (66 commits)
  perf, x86: Expose perf capability to other modules
  perf, x86: Implement arch event mask as quirk
  x86, perf: Disable non available architectural events
  jump_label: Provide jump_label_key initializers
  jump_label, x86: Fix section mismatch
  perf, core: Rate limit perf_sched_events jump_label patching
  perf: Fix enable_on_exec for sibling events
  perf: Remove superfluous arguments
  perf, x86: Prefer fixed-purpose counters when scheduling
  perf, x86: Fix event scheduler for constraints with overlapping counters
  perf, x86: Implement event scheduler helper functions
  perf: Avoid a useless pmu_disable() in the perf-tick
  x86/tools: Add decoded instruction dump mode
  x86: Update instruction decoder to support new AVX formats
  x86/tools: Fix insn_sanity message outputs
  x86/tools: Fix instruction decoder message output
  x86: Fix instruction decoder to handle grouped AVX instructions
  x86/tools: Fix Makefile to build all test tools
  perf test: Soft errors shouldn't stop the "Validate PERF_RECORD_" test
  perf test: Validate PERF_RECORD_ events and perf_sample fields
  ...

1  2 
Documentation/kernel-parameters.txt
kernel/events/core.c
kernel/jump_label.c
kernel/lockdep.c
tools/perf/builtin-stat.c
tools/perf/util/header.c

Simple merge
Simple merge
@@@ -71,18 -71,47 +71,49 @@@ void jump_label_inc(struct jump_label_k
        atomic_inc(&key->enabled);
        jump_label_unlock();
  }
 +EXPORT_SYMBOL_GPL(jump_label_inc);
  
- void jump_label_dec(struct jump_label_key *key)
+ static void __jump_label_dec(struct jump_label_key *key,
+               unsigned long rate_limit, struct delayed_work *work)
  {
        if (!atomic_dec_and_mutex_lock(&key->enabled, &jump_label_mutex))
                return;
  
-       jump_label_update(key, JUMP_LABEL_DISABLE);
+       if (rate_limit) {
+               atomic_inc(&key->enabled);
+               schedule_delayed_work(work, rate_limit);
+       } else
+               jump_label_update(key, JUMP_LABEL_DISABLE);
        jump_label_unlock();
  }
 +EXPORT_SYMBOL_GPL(jump_label_dec);
  
+ static void jump_label_update_timeout(struct work_struct *work)
+ {
+       struct jump_label_key_deferred *key =
+               container_of(work, struct jump_label_key_deferred, work.work);
+       __jump_label_dec(&key->key, 0, NULL);
+ }
+ void jump_label_dec(struct jump_label_key *key)
+ {
+       __jump_label_dec(key, 0, NULL);
+ }
+ void jump_label_dec_deferred(struct jump_label_key_deferred *key)
+ {
+       __jump_label_dec(&key->key, key->timeout, &key->work);
+ }
+ void jump_label_rate_limit(struct jump_label_key_deferred *key,
+               unsigned long rl)
+ {
+       key->timeout = rl;
+       INIT_DELAYED_WORK(&key->work, jump_label_update_timeout);
+ }
  static int addr_conflict(struct jump_entry *entry, void *start, void *end)
  {
        if (entry->code <= (unsigned long)end &&
Simple merge
Simple merge
Simple merge