From 4ab9d8736b9cb4199caed31e53ccdf30c202bee5 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sat, 15 May 2021 15:05:18 +0200 Subject: [PATCH] Kernel: Make perf_event() work for global profiles Previously calls to perf_event() would end up in a process-specific perfcore file even though global profiling was enabled. This changes the behavior for perf_event() so that these events are stored into the global profile instead. --- Kernel/Syscalls/perf_event.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Kernel/Syscalls/perf_event.cpp b/Kernel/Syscalls/perf_event.cpp index cc0c91bf6c..94e4daf881 100644 --- a/Kernel/Syscalls/perf_event.cpp +++ b/Kernel/Syscalls/perf_event.cpp @@ -11,9 +11,13 @@ namespace Kernel { KResultOr Process::sys$perf_event(int type, FlatPtr arg1, FlatPtr arg2) { - if (!create_perf_events_buffer_if_needed()) - return ENOMEM; - return perf_events()->append(type, arg1, arg2, nullptr); + auto events_buffer = current_perf_events_buffer(); + if (!events_buffer) { + if (!create_perf_events_buffer_if_needed()) + return ENOMEM; + events_buffer = perf_events(); + } + return events_buffer->append(type, arg1, arg2, nullptr); } }