QBenchlib/Perf: open the perffd with PERF_FLAG_FD_CLOEXEC

This flag was introduced in the Linux kernel version 3.14. Trying to use
perf_event_open() now with a kernel older than that will cause EINVAL
errors, but 3.14 is from 2014, so most likely old enough for all of
Qt 6.

For that, I updated the copied header from v6.0.

Change-Id: I3c79b7e08fa346988dfefffd171f895201ceb4f4
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 8995045c62bb673af1e74bce79e3c500e0217bae)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Thiago Macieira 2022-10-19 10:42:52 -07:00 committed by Qt Cherry-pick Bot
parent 98fdf50c30
commit 033b1ba4dd
2 changed files with 836 additions and 54 deletions

File diff suppressed because it is too large Load Diff

View File

@ -477,14 +477,13 @@ void QBenchmarkPerfEventsMeasurer::init()
void QBenchmarkPerfEventsMeasurer::start()
{
initPerf();
if (fd == -1) {
// pid == 0 -> attach to the current process
// cpu == -1 -> monitor on all CPUs
// group_fd == -1 -> this is the group leader
// flags == 0 -> reserved, must be zero
fd = perf_event_open(&attr, 0, -1, -1, 0);
fd = perf_event_open(&attr, 0, -1, -1, PERF_FLAG_FD_CLOEXEC);
if (fd == -1) {
perror("QBenchmarkPerfEventsMeasurer::start: perf_event_open");
exit(1);