perf_event_open.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // SPDX-License-Identifier: GPL-2.0
  2. #ifndef PERF_FLAG_FD_NO_GROUP
  3. # define PERF_FLAG_FD_NO_GROUP (1UL << 0)
  4. #endif
  5. #ifndef PERF_FLAG_FD_OUTPUT
  6. # define PERF_FLAG_FD_OUTPUT (1UL << 1)
  7. #endif
  8. #ifndef PERF_FLAG_PID_CGROUP
  9. # define PERF_FLAG_PID_CGROUP (1UL << 2) /* pid=cgroup id, per-cpu mode only */
  10. #endif
  11. #ifndef PERF_FLAG_FD_CLOEXEC
  12. # define PERF_FLAG_FD_CLOEXEC (1UL << 3) /* O_CLOEXEC */
  13. #endif
  14. static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size,
  15. struct syscall_arg *arg)
  16. {
  17. int printed = 0, flags = arg->val;
  18. if (flags == 0)
  19. return 0;
  20. #define P_FLAG(n) \
  21. if (flags & PERF_FLAG_##n) { \
  22. printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
  23. flags &= ~PERF_FLAG_##n; \
  24. }
  25. P_FLAG(FD_NO_GROUP);
  26. P_FLAG(FD_OUTPUT);
  27. P_FLAG(PID_CGROUP);
  28. P_FLAG(FD_CLOEXEC);
  29. #undef P_FLAG
  30. if (flags)
  31. printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
  32. return printed;
  33. }
  34. #define SCA_PERF_FLAGS syscall_arg__scnprintf_perf_flags