Ver código fonte

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.
Gunnar Beutner 4 anos atrás
pai
commit
4ab9d8736b
1 arquivos alterados com 7 adições e 3 exclusões
  1. 7 3
      Kernel/Syscalls/perf_event.cpp

+ 7 - 3
Kernel/Syscalls/perf_event.cpp

@@ -11,9 +11,13 @@ namespace Kernel {
 
 
 KResultOr<int> Process::sys$perf_event(int type, FlatPtr arg1, FlatPtr arg2)
 KResultOr<int> 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);
 }
 }
 
 
 }
 }