perf_regs.c 889 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. */
  3. #include <linux/errno.h>
  4. #include <linux/kernel.h>
  5. #include <linux/perf_event.h>
  6. #include <linux/bug.h>
  7. #include <asm/perf_regs.h>
  8. #include <asm/ptrace.h>
  9. u64 perf_reg_value(struct pt_regs *regs, int idx)
  10. {
  11. if (WARN_ON_ONCE((u32)idx >= PERF_REG_RISCV_MAX))
  12. return 0;
  13. return ((unsigned long *)regs)[idx];
  14. }
  15. #define REG_RESERVED (~((1ULL << PERF_REG_RISCV_MAX) - 1))
  16. int perf_reg_validate(u64 mask)
  17. {
  18. if (!mask || mask & REG_RESERVED)
  19. return -EINVAL;
  20. return 0;
  21. }
  22. u64 perf_reg_abi(struct task_struct *task)
  23. {
  24. #if __riscv_xlen == 64
  25. return PERF_SAMPLE_REGS_ABI_64;
  26. #else
  27. return PERF_SAMPLE_REGS_ABI_32;
  28. #endif
  29. }
  30. void perf_get_regs_user(struct perf_regs *regs_user,
  31. struct pt_regs *regs)
  32. {
  33. regs_user->regs = task_pt_regs(current);
  34. regs_user->abi = perf_reg_abi(current);
  35. }