perf_event.cpp 906 B

123456789101112131415161718192021222324252627282930313233
  1. /*
  2. * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <Kernel/PerformanceEventBuffer.h>
  7. #include <Kernel/Process.h>
  8. namespace Kernel {
  9. ErrorOr<FlatPtr> Process::sys$perf_event(int type, FlatPtr arg1, FlatPtr arg2)
  10. {
  11. VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
  12. auto* events_buffer = current_perf_events_buffer();
  13. if (!events_buffer)
  14. return 0;
  15. TRY(events_buffer->append(type, arg1, arg2, {}));
  16. return 0;
  17. }
  18. ErrorOr<FlatPtr> Process::sys$perf_register_string(Userspace<char const*> user_string, size_t user_string_length)
  19. {
  20. VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
  21. auto* events_buffer = current_perf_events_buffer();
  22. if (!events_buffer)
  23. return 0;
  24. auto string = TRY(try_copy_kstring_from_user(user_string, user_string_length));
  25. return events_buffer->register_string(move(string));
  26. }
  27. }