Messages in this thread | | | Date | Mon, 09 Dec 2013 16:00:57 +0200 | From | Adrian Hunter <> | Subject | Re: [PATCH 2/4] perf tools: Fix max mmap_pages |
| |
On 09/12/13 15:35, Jiri Olsa wrote: > On Mon, Dec 09, 2013 at 03:18:38PM +0200, Adrian Hunter wrote: >> 'SIZE_MAX / page_size' is an upper limit for >> the maximum number of mmap pages, not a lower >> limit. Change the condition accordingly. >> >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> >> --- >> tools/perf/util/evlist.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c >> index 4d0945c..98ec96b 100644 >> --- a/tools/perf/util/evlist.c >> +++ b/tools/perf/util/evlist.c >> @@ -754,7 +754,7 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str, >> unsigned long max = UINT_MAX; >> long pages; >> >> - if (max < SIZE_MAX / page_size) >> + if (max > SIZE_MAX / page_size) >> max = SIZE_MAX / page_size; > > I agree with the change.. but it looks like the check > is superfluos, maybe we want to define max as: > > unsigned long max = SIZE_MAX / page_size
I think it is OK because mmap_pages (in struct perf_record_opts) is an unsigned int i.e.
max = MIN(UINT_MAX, SIZE_MAX / 4096)
c.f. 32-bit 64-bit UINT_MAX 2^32 - 1 2^32 - 1 SIZE_MAX 2^32 - 1 2^64 - 1 SIZE_MAX / 4096 2^20 - 1 2^52 - 1
So on 32-bit the max is SIZE_MAX / 4096 but on 64-bit the max is UINT_MAX
> > ? > > jirka >> >> pages = parse_pages_arg(str, 1, max); >> -- >> 1.7.11.7 >> > >
| |