linux/tools/perf/tests
Arnaldo Carvalho de Melo b91fc39f4a perf machine: Protect the machine->threads with a rwlock
In addition to using refcounts for the struct thread lifetime
management, we need to protect access to machine->threads from
concurrent access.

That happens in 'perf top', where a thread processes events, inserting
and deleting entries from that rb_tree while another thread decays
hist_entries, that end up dropping references and ultimately deleting
threads from the rb_tree and releasing its resources when no further
hist_entry (or other data structures, like in 'perf sched') references
it.

So the rule is the same for refcounts + protected trees in the kernel,
get the tree lock, find object, bump the refcount, drop the tree lock,
return, use object, drop the refcount if no more use of it is needed,
keep it if storing it in some other data structure, drop when releasing
that data structure.

I.e. pair "t = machine__find(new)_thread()" with a "thread__put(t)", and
"perf_event__preprocess_sample(&al)" with "addr_location__put(&al)".

The addr_location__put() one is because as we return references to
several data structures, we may end up adding more reference counting
for the other data structures and then we'll drop it at
addr_location__put() time.

Acked-by: David Ahern <dsahern@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-bs9rt4n0jw3hi9f3zxyy3xln@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2015-05-08 16:19:27 -03:00
..
attr perf tests: Fix attr tests 2015-04-08 10:49:53 -03:00
attr.c tools: Consolidate types.h 2014-05-01 21:22:39 +02:00
attr.py perf tools: Remove EOL whitespaces 2015-01-21 13:24:31 -03:00
bp_signal_overflow.c perf tools: Enable close-on-exec flag on perf file descriptor 2014-07-18 09:09:34 +02:00
bp_signal.c perf tools: Enable close-on-exec flag on perf file descriptor 2014-07-18 09:09:34 +02:00
Build perf tools: Add kmod_path__parse function 2015-03-21 14:53:41 -03:00
builtin-test.c perf tools: Add kmod_path__parse function 2015-03-21 14:53:41 -03:00
code-reading.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
dso-data.c perf tests: Do not rely on dso__data_read_offset() to open dso 2015-02-06 11:46:35 +01:00
dwarf-unwind.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
evsel-roundtrip-name.c perf tools: Add parse_events_error interface 2015-04-29 10:37:58 -03:00
evsel-tp-sched.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
fdarray.c tools lib fd array: Allow associating an integer cookie with each entry 2014-09-25 16:46:55 -03:00
hists_common.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
hists_common.h perf tests: Define and use symbolic names for fake symbols 2014-06-01 14:35:11 +02:00
hists_cumulate.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
hists_filter.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
hists_link.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
hists_output.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
keep-tracking.c perf tools: Add parse_events_error interface 2015-04-29 10:37:58 -03:00
kmod-path.c perf tools: Add kmod_path__parse function 2015-03-21 14:53:41 -03:00
make perf tools: Add build option NO_AUXTRACE to exclude AUX area tracing 2015-05-05 18:12:53 -03:00
mmap-basic.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
mmap-thread-lookup.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
open-syscall-all-cpus.c perf tools: Make perf aware of tracefs 2015-02-11 12:37:08 -03:00
open-syscall-tp-fields.c perf evlist: Introduce poll method for common code idiom 2014-09-25 16:46:55 -03:00
open-syscall.c perf tools: Make perf aware of tracefs 2015-02-11 12:37:08 -03:00
parse-events.c perf tools: Add parse_events_error interface 2015-04-29 10:37:58 -03:00
parse-no-sample-id-all.c perf tools: Move pr_* debug macros into debug object 2014-07-17 12:58:39 -03:00
perf-record.c perf evlist: Introduce poll method for common code idiom 2014-09-25 16:46:55 -03:00
perf-targz-src-pkg perf tools: Add test for building detached source tarballs 2014-01-13 10:06:26 -03:00
perf-time-to-tsc.c perf tools: Add parse_events_error interface 2015-04-29 10:37:58 -03:00
pmu.c perf tools: Add term support for parse_events_error 2015-04-29 10:38:01 -03:00
python-use.c perf tests: Check python path on attr and binding test 2013-01-24 16:40:10 -03:00
rdpmc.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
sample-parsing.c perf tests: Fix typo in sample-parsing.c 2015-01-22 17:03:01 -03:00
sw-clock.c perf test: Use strerror_r instead of strerror 2014-08-15 13:07:28 -03:00
switch-tracking.c perf tools: Add parse_events_error interface 2015-04-29 10:37:58 -03:00
task-exit.c perf evlist: Introduce poll method for common code idiom 2014-09-25 16:46:55 -03:00
tests.h perf tools: Add kmod_path__parse function 2015-03-21 14:53:41 -03:00
thread-mg-share.c perf machine: Protect the machine->threads with a rwlock 2015-05-08 16:19:27 -03:00
vmlinux-kallsyms.c perf tests: No need to set up ref_reloc_sym 2014-01-31 17:21:52 -03:00