perf_event.cpp 1017 B

1234567891011121314151617181920212223242526272829303132333435
  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. KResultOr<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 KSuccess;
  15. return events_buffer->append(type, arg1, arg2, nullptr);
  16. }
  17. KResultOr<FlatPtr> Process::sys$perf_register_string(Userspace<char const*> user_string, size_t user_string_length)
  18. {
  19. VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
  20. auto* events_buffer = current_perf_events_buffer();
  21. if (!events_buffer)
  22. return KSuccess;
  23. auto string_or_error = try_copy_kstring_from_user(user_string, user_string_length);
  24. if (string_or_error.is_error())
  25. return string_or_error.error();
  26. return events_buffer->register_string(string_or_error.release_value());
  27. }
  28. }