hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/tools/perf/arch/x86/util/perf_regs.c
....@@ -2,11 +2,13 @@
22 #include <errno.h>
33 #include <string.h>
44 #include <regex.h>
5
+#include <linux/kernel.h>
6
+#include <linux/zalloc.h>
57
6
-#include "../../perf.h"
7
-#include "../../util/util.h"
8
-#include "../../util/perf_regs.h"
9
-#include "../../util/debug.h"
8
+#include "../../../perf-sys.h"
9
+#include "../../../util/perf_regs.h"
10
+#include "../../../util/debug.h"
11
+#include "../../../util/event.h"
1012
1113 const struct sample_reg sample_reg_masks[] = {
1214 SMPL_REG(AX, PERF_REG_X86_AX),
....@@ -31,6 +33,22 @@
3133 SMPL_REG(R14, PERF_REG_X86_R14),
3234 SMPL_REG(R15, PERF_REG_X86_R15),
3335 #endif
36
+ SMPL_REG2(XMM0, PERF_REG_X86_XMM0),
37
+ SMPL_REG2(XMM1, PERF_REG_X86_XMM1),
38
+ SMPL_REG2(XMM2, PERF_REG_X86_XMM2),
39
+ SMPL_REG2(XMM3, PERF_REG_X86_XMM3),
40
+ SMPL_REG2(XMM4, PERF_REG_X86_XMM4),
41
+ SMPL_REG2(XMM5, PERF_REG_X86_XMM5),
42
+ SMPL_REG2(XMM6, PERF_REG_X86_XMM6),
43
+ SMPL_REG2(XMM7, PERF_REG_X86_XMM7),
44
+ SMPL_REG2(XMM8, PERF_REG_X86_XMM8),
45
+ SMPL_REG2(XMM9, PERF_REG_X86_XMM9),
46
+ SMPL_REG2(XMM10, PERF_REG_X86_XMM10),
47
+ SMPL_REG2(XMM11, PERF_REG_X86_XMM11),
48
+ SMPL_REG2(XMM12, PERF_REG_X86_XMM12),
49
+ SMPL_REG2(XMM13, PERF_REG_X86_XMM13),
50
+ SMPL_REG2(XMM14, PERF_REG_X86_XMM14),
51
+ SMPL_REG2(XMM15, PERF_REG_X86_XMM15),
3452 SMPL_REG_END
3553 };
3654
....@@ -254,3 +272,31 @@
254272
255273 return SDT_ARG_VALID;
256274 }
275
+
276
+uint64_t arch__intr_reg_mask(void)
277
+{
278
+ struct perf_event_attr attr = {
279
+ .type = PERF_TYPE_HARDWARE,
280
+ .config = PERF_COUNT_HW_CPU_CYCLES,
281
+ .sample_type = PERF_SAMPLE_REGS_INTR,
282
+ .sample_regs_intr = PERF_REG_EXTENDED_MASK,
283
+ .precise_ip = 1,
284
+ .disabled = 1,
285
+ .exclude_kernel = 1,
286
+ };
287
+ int fd;
288
+ /*
289
+ * In an unnamed union, init it here to build on older gcc versions
290
+ */
291
+ attr.sample_period = 1;
292
+
293
+ event_attr_init(&attr);
294
+
295
+ fd = sys_perf_event_open(&attr, 0, -1, -1, 0);
296
+ if (fd != -1) {
297
+ close(fd);
298
+ return (PERF_REG_EXTENDED_MASK | PERF_REGS_MASK);
299
+ }
300
+
301
+ return PERF_REGS_MASK;
302
+}