Frederic Weisbecker 76e1d9047e perf: Store active software events in a hashlist
Each time a software event triggers, we need to walk through
the entire list of events from the current cpu and task contexts
to retrieve a running perf event that matches.
We also need to check a matching perf event is actually counting.

This walk is wasteful and makes the event fast path scaling
down with a growing number of events running on the same
contexts.

To solve this, we store the running perf events in a hashlist to
get an immediate access to them against their type:event_id when
they trigger.

v2: - Fix SWEVENT_HLIST_SIZE definition (and re-learn some basic
      maths along the way)
    - Only allocate hlist for online cpus, but keep track of the
      refcount on offline possible cpus too, so that we allocate it
      if needed when it becomes online.
    - Drop the kref use as it's not adapted to our tricks anymore.

v3: - Fix bad refcount check (address instead of value). Thanks to
      Eric Dumazet who spotted this.
    - While exiting cpu, move the hlist release out of the IPI path
      to lock the hlist mutex sanely.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@elte.hu>
2010-04-14 18:20:33 +02:00
..
2009-09-21 14:29:21 +02:00
2010-04-08 13:37:18 +02:00
2010-03-24 16:31:19 -07:00
2010-04-05 11:37:28 +09:00
2009-09-18 09:48:52 -07:00
2010-04-08 13:37:18 +02:00
2009-12-14 23:55:34 +01:00
2009-07-24 10:53:29 +02:00
2010-02-10 17:47:17 -08:00
2010-03-06 11:26:32 -08:00
2010-04-02 20:06:40 +02:00
2009-12-09 10:03:07 +01:00
2010-04-08 13:37:18 +02:00
2010-03-06 11:26:33 -08:00
2010-03-12 15:52:32 -08:00
2010-03-12 15:53:10 -08:00
2010-03-06 11:26:23 -08:00
2009-09-23 18:13:10 -07:00
2010-01-21 13:40:18 +01:00