ladybird/Kernel/Syscalls/perf_event.cpp
Andreas Kling a29788e58a Kernel: Don't record sys$perf_event() if profiling is not enabled
If you want to record perf events, just enable profiling. This allows us
to add random perf events to programs without littering the file system
with perfcore files.
2021-08-12 00:03:40 +02:00

36 lines
1017 B
C++

/*
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/PerformanceEventBuffer.h>
#include <Kernel/Process.h>
namespace Kernel {
KResultOr<FlatPtr> Process::sys$perf_event(int type, FlatPtr arg1, FlatPtr arg2)
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
auto* events_buffer = current_perf_events_buffer();
if (!events_buffer)
return KSuccess;
return events_buffer->append(type, arg1, arg2, nullptr);
}
KResultOr<FlatPtr> Process::sys$perf_register_string(Userspace<char const*> user_string, size_t user_string_length)
{
VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
auto* events_buffer = current_perf_events_buffer();
if (!events_buffer)
return KSuccess;
auto string_or_error = try_copy_kstring_from_user(user_string, user_string_length);
if (string_or_error.is_error())
return string_or_error.error();
return events_buffer->register_string(string_or_error.release_value());
}
}