linux/tools/perf/util
David Miller 35d48ddfc0 perf tools: Fix mmap limitations on 32-bit
This is a suggested patch to fix the bug I reported at:

	http://marc.info/?l=linux-kernel&m=135033028924652&w=2

Essentially, there is a hard requirement that when perf analyzes a
trace, it must have the entire thing mmap()'d.

Therefore the scheme used on 32-bit where we have a fixed (8) number of
32MB mmaps, and cycle through them, simply does not work.

One of the reasons this requirement exists is because the iterators
maintain references to perf entry objects and those references don't
just simply go away when this mmap code decides to cycle an old mmap
area out and reuse it.  At this point, those entry pointers now point to
garbage resulting in unpredictable behavior and crashes.

It is better to try to mmap() as much as we can and if we do actually
run into address space limitations, the failure of the mmap() call will
indicate that and stop processing.

I noticed that perf_session->mmap_window is set to a constant in one
location, and only used in one other location.  So I got rid of it
altogether.

So we adjust the size of the mmaps[] array to the maximum we could need.
On 64-bit we only need one slot.  On 32-bit we could need up to 128 (128
* 32MB == 4GB).

I've verified that this allows a large (~600MB) perf.data file to be
analyzed properly with a 32-bit perf binary, which previously was not
possible.

Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20121110.141219.582924082787523608.davem@davemloft.net
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2012-12-09 08:46:05 -03:00
..
include perf: Fix UAPI fallout 2012-10-14 12:22:52 -07:00
scripting-engines perf tools: Remove duplicated include from trace-event-python.c 2012-10-07 13:15:04 -03:00
abspath.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
alias.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
annotate.c perf annotate: Merge same lines in summary view 2012-11-09 16:50:18 -03:00
annotate.h perf annotate: Merge same lines in summary view 2012-11-09 16:50:18 -03:00
bitmap.c perf tools: Add bitmap_or function into bitmap object 2012-02-13 23:28:10 -02:00
build-id.c perf tools: Move build_id__sprintf into build-id object 2012-10-29 11:34:46 -02:00
build-id.h perf tools: Move BUILD_ID_SIZE into build-id object 2012-10-29 11:35:32 -02:00
cache.h perf ui: Always compile browser setup code 2012-11-14 16:53:03 -03:00
callchain.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
callchain.h tools: perf: Fix typo in tools/perf 2012-09-01 08:49:34 -07:00
cgroup.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
cgroup.h perf tool: Add cgroup support 2011-02-16 13:30:48 +01:00
color.c perf tools: Use scnprintf where applicable 2012-03-14 12:36:19 -03:00
color.h perf hist: Replace ->print() routines by ->snprintf() equivalents 2010-04-02 16:28:15 -03:00
config.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
cpumap.c perf stat: Check PMU cpumask file 2012-09-17 13:12:02 -03:00
cpumap.h perf tools: Allow handling a NULL cpu_map as meaning "all cpus" 2012-09-26 12:41:14 -03:00
ctype.c perf tools: ctype.c only wants util.h 2012-02-13 23:17:40 -02:00
debug.c perf ui/helpline: Introduce ui_helpline__vshow() 2012-12-09 08:46:04 -03:00
debug.h perf ui: Always compile error printing code 2012-12-09 08:46:04 -03:00
debugfs.c perf tools: Remove unused functions from debugfs object 2012-02-13 23:25:38 -02:00
debugfs.h perf tools: Remove unused functions from debugfs object 2012-02-13 23:25:38 -02:00
dso.c perf symbols: Fix dso__fprintf() print statement 2012-12-09 08:46:04 -03:00
dso.h perf tools: Move dso_* related functions into dso object 2012-10-29 11:37:25 -02:00
dwarf-aux.c perf probe: Print an enum type variable in "enum variable-name" format when showing accessible variables 2012-09-27 10:58:57 -03:00
dwarf-aux.h perf probe: Search concrete out-of-line instances 2011-08-12 09:32:10 -03:00
environment.c
event.c perf tools: Use sscanf for parsing /proc/pid/maps 2012-11-14 16:51:40 -03:00
event.h perf tools: Move BUILD_ID_SIZE into build-id object 2012-10-29 11:35:32 -02:00
evlist.c perf evsel: Introduce is_group_member method 2012-11-14 16:53:45 -03:00
evlist.h perf evlist: Remove some unused methods 2012-10-03 11:52:07 -03:00
evsel.c Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
evsel.h Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
exec_cmd.c perf tools: Makefile: Remove various and sundry cruft 2011-02-18 07:43:06 -02:00
exec_cmd.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
generate-cmdlist.sh perf tools: Convert to LIBELF_SUPPORT 2012-09-28 21:07:36 -03:00
header.c Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
header.h Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
help.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
help.h
hist.c perf hists: Initialize all of he->stat with zeroes 2012-11-14 16:50:47 -03:00
hist.h perf tools: Fix compile error on NO_NEWT=1 build 2012-11-14 16:50:58 -03:00
hweight.c perf tools: Don't use code surrounded by __KERNEL__ 2010-05-02 12:00:44 -03:00
intlist.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
intlist.h perf tools: Introduce intlist 2012-08-03 10:42:25 -03:00
levenshtein.c
levenshtein.h
machine.c perf machine: Move more methods to machine.[ch] 2012-11-09 11:32:52 -03:00
machine.h perf machine: Move more methods to machine.[ch] 2012-11-09 11:32:52 -03:00
map.c perf machine: Move more methods to machine.[ch] 2012-11-09 11:32:52 -03:00
map.h perf machine: Move more methods to machine.[ch] 2012-11-09 11:32:52 -03:00
pager.c perf tools: Fix pager on minimal-install embedded systems 2012-05-30 15:10:39 -03:00
parse-events.c Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
parse-events.h Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
parse-events.l perf tools: Add basic event modifier sanity check 2012-11-14 16:52:24 -03:00
parse-events.y perf tools: Add support to specify hw event as PMU event term 2012-10-24 10:41:27 +02:00
parse-options.c perf tools: Long option completion support for each subcommands 2012-10-02 18:36:44 -03:00
parse-options.h perf tools: Long option completion support for each subcommands 2012-10-02 18:36:44 -03:00
path.c perf tools: Convert to HAVE_STRLCPY 2012-10-02 18:36:24 -03:00
perf_regs.h perf tools: Convert to LIBUNWIND_SUPPORT 2012-10-02 17:56:01 -03:00
PERF-VERSION-GEN perf tools: Handle --version string generation on machines without git 2012-10-31 12:17:49 -02:00
pmu.c perf tests: Move pmu tests into separate object 2012-11-14 16:50:19 -03:00
pmu.h Merge branch 'linus' into perf/core 2012-12-08 15:25:06 +01:00
pmu.l perf tools: Add perf pmu object to access pmu format definition 2012-03-16 14:29:35 -03:00
pmu.y perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
probe-event.c perf tools: remove sscanf extension %as 2012-09-24 11:49:31 -03:00
probe-event.h perf probe: Provide perf interface for uprobes 2012-05-11 13:58:17 -03:00
probe-finder.c perf probe: Add union member access support 2012-09-14 15:48:08 -03:00
probe-finder.h perf tools: Eliminate duplicate code and use PATH_MAX consistently 2011-11-28 10:11:04 -02:00
pstack.c perf tools: Stop using 'self' in pstack 2012-11-14 16:50:38 -03:00
pstack.h perf ui: Move hists browser to util/ui/browsers/ 2010-08-10 16:11:08 -03:00
python-ext-sources Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-10-01 09:06:36 -07:00
python.c perf python: Initialize 'page_size' variable 2012-10-29 12:36:46 -02:00
quote.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
quote.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
rblist.c Account the nr_entries in rblist properly 2012-10-24 14:20:11 -02:00
rblist.h perf tools: Introducing rblist 2012-08-03 10:37:21 -03:00
run-command.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
run-command.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
session.c perf tools: Fix mmap limitations on 32-bit 2012-12-09 08:46:05 -03:00
session.h perf tools: Fix mmap limitations on 32-bit 2012-12-09 08:46:05 -03:00
setup.py perf python: Properly link with libtraceevent 2012-10-20 02:43:08 +02:00
sigchain.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sigchain.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sort.c perf tools: Remove warnings on JIT samples for srcline sort key 2012-10-16 13:05:38 -03:00
sort.h perf diff: Start moving to support matching more than two hists 2012-11-08 17:43:09 -03:00
stat.c perf stat: Move stats related code to util/stat.c 2012-09-17 13:10:03 -03:00
stat.h perf stat: Move stats related code to util/stat.c 2012-09-17 13:10:03 -03:00
strbuf.c perf tools: Fix strbuf_addf() when the buffer needs to grow 2012-10-30 10:32:56 -02:00
strbuf.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
strfilter.c perf: Fix missing strndup declaration 2011-03-04 01:17:18 +01:00
strfilter.h perf tools: Add strfilter for general purpose string filter 2011-01-28 09:19:38 -02:00
string.c perf tools: Move strxfrchar into string object 2012-10-29 11:36:28 -02:00
strlist.c perf tools: Remove the node from rblist in strlist__remove 2012-09-05 17:36:42 -03:00
strlist.h perf tools: Change strlist to use the new rblist 2012-08-03 10:39:51 -03:00
svghelper.c perf timechart: Fix black idle boxes in the title 2011-02-28 08:56:14 +01:00
svghelper.h
symbol-elf.c perf symbols: Fix builds with NO_LIBELF set 2012-08-20 09:35:22 -03:00
symbol-minimal.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
symbol.c perf machine: Move more methods to machine.[ch] 2012-11-09 11:32:52 -03:00
symbol.h perf tests: Final cleanup for builtin-test move 2012-11-14 16:50:24 -03:00
sysfs.c perf tools: Add sysfs mountpoint interface 2012-02-13 23:27:15 -02:00
sysfs.h perf tools: Add sysfs mountpoint interface 2012-02-13 23:27:15 -02:00
target.c perf tools: Replace mempcpy with memcpy 2012-09-05 19:35:21 -03:00
target.h perf target: Add uses_mmap field 2012-05-17 12:32:54 -03:00
thread_map.c perf tools: fix thread_map__new_by_pid_str() memory leak in error path 2012-05-25 11:40:59 -03:00
thread_map.h perf tools: Fix thread map that is type pid_t 2012-04-11 17:38:50 -03:00
thread.c Merge branch 'perf/urgent' into perf/core 2012-10-24 10:20:57 +02:00
thread.h perf machine: Introduce find_thread method 2012-10-06 16:33:22 -03:00
tool.h perf tools: Save some loops using perf_evlist__id2evsel 2011-11-28 17:57:40 -02:00
top.c perf evlist: Introduce evsel list accessors 2012-08-15 10:14:18 -03:00
top.h perf tools: fix missing winsize definition 2012-09-07 22:07:32 -03:00
trace-event-info.c perf: Have perf use the new libtraceevent.a library 2012-04-25 13:28:48 +02:00
trace-event-parse.c perf tools: remove sscanf extension %as 2012-09-24 11:49:31 -03:00
trace-event-read.c perf tools: Have the page size value available for all tools 2012-10-06 16:33:14 -03:00
trace-event-scripting.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
trace-event.h perf tools: Support for DWARF CFI unwinding on post processing 2012-08-11 15:06:56 -03:00
types.h perf tools: Add union u64_swap type for swapping u64 data 2012-05-22 12:50:25 -03:00
unwind.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
unwind.h perf tools: Convert to LIBUNWIND_SUPPORT 2012-10-02 17:56:01 -03:00
usage.c perf target: Introduce perf_target__parse_uid() 2012-05-07 16:46:48 -03:00
util.c perf tools: Move hex2u64 into util object 2012-10-29 11:36:02 -02:00
util.h perf tools: Move strxfrchar into string object 2012-10-29 11:36:28 -02:00
values.c perf tools: Fix a memory leak on perf_read_values_destroy 2011-12-20 13:41:34 -02:00
values.h
vdso.c perf tools: Back [vdso] DSO with real data 2012-09-11 12:08:30 -03:00
vdso.h perf tools: Back [vdso] DSO with real data 2012-09-11 12:08:30 -03:00
wrapper.c perf tools: Use __maybe_used for unused variables 2012-09-11 12:19:15 -03:00
xyarray.c perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
xyarray.h perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00