[v5.0-rc6 regression] "perf/core: Don't WARN() for impossible ring-buffer sizes"

From: Mathieu Poirier
Date: Wed Feb 13 2019 - 16:26:39 EST


Hi Mark,

CoreSight trace collection is broken on v5.0-rc6 due to this commit:

9dff0aa95a32 perf/core: Don't WARN() for impossible ring-buffer sizes

Before:
root@juno:/home/linaro# perf record -e cs_etm/@20070000.etr/u
--per-thread uname
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.036 MB perf.data ]
root@juno:/home/linaro#

After:
root@juno:/home/linaro# perf record -e cs_etm/@20070000.etr/u
--per-thread uname
failed to mmap with 12 (Cannot allocate memory)
root@juno:/home/linaro#

The problem is related to the order_base_2() [1] test with a size of
1264, stemming from nr_pages equal to 128. The combination yields an
order of 11, something leading directly to the error path.

The results are the same with linux-next 20190213. This was tested on
a Juno R0 and R1 with a 4K page configuration. I haven't tried but
I'm pretty sure it breaks IntelPT as well.

Please have a look when you have a minute. Leo Yan and I will be
happy to test patches.

Thanks,
Mathieu

[1]. https://elixir.bootlin.com/linux/v5.0-rc6/source/kernel/events/ring_buffer.c#L737