1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/compiler.h>
9 static bool has_term(struct stat_config_event
*config
,
14 for (i
= 0; i
< config
->nr
; i
++) {
15 if ((config
->data
[i
].tag
== tag
) &&
16 (config
->data
[i
].val
== val
))
23 static int process_stat_config_event(struct perf_tool
*tool __maybe_unused
,
24 union perf_event
*event
,
25 struct perf_sample
*sample __maybe_unused
,
26 struct machine
*machine __maybe_unused
)
28 struct stat_config_event
*config
= &event
->stat_config
;
29 struct perf_stat_config stat_config
;
31 #define HAS(term, val) \
32 has_term(config, PERF_STAT_CONFIG_TERM__##term, val)
34 TEST_ASSERT_VAL("wrong nr", config
->nr
== PERF_STAT_CONFIG_TERM__MAX
);
35 TEST_ASSERT_VAL("wrong aggr_mode", HAS(AGGR_MODE
, AGGR_CORE
));
36 TEST_ASSERT_VAL("wrong scale", HAS(SCALE
, 1));
37 TEST_ASSERT_VAL("wrong interval", HAS(INTERVAL
, 1));
41 perf_event__read_stat_config(&stat_config
, config
);
43 TEST_ASSERT_VAL("wrong aggr_mode", stat_config
.aggr_mode
== AGGR_CORE
);
44 TEST_ASSERT_VAL("wrong scale", stat_config
.scale
== 1);
45 TEST_ASSERT_VAL("wrong interval", stat_config
.interval
== 1);
49 int test__synthesize_stat_config(struct test
*test __maybe_unused
, int subtest __maybe_unused
)
51 struct perf_stat_config stat_config
= {
52 .aggr_mode
= AGGR_CORE
,
57 TEST_ASSERT_VAL("failed to synthesize stat_config",
58 !perf_event__synthesize_stat_config(NULL
, &stat_config
, process_stat_config_event
, NULL
));
63 static int process_stat_event(struct perf_tool
*tool __maybe_unused
,
64 union perf_event
*event
,
65 struct perf_sample
*sample __maybe_unused
,
66 struct machine
*machine __maybe_unused
)
68 struct stat_event
*st
= &event
->stat
;
70 TEST_ASSERT_VAL("wrong cpu", st
->cpu
== 1);
71 TEST_ASSERT_VAL("wrong thread", st
->thread
== 2);
72 TEST_ASSERT_VAL("wrong id", st
->id
== 3);
73 TEST_ASSERT_VAL("wrong val", st
->val
== 100);
74 TEST_ASSERT_VAL("wrong run", st
->ena
== 200);
75 TEST_ASSERT_VAL("wrong ena", st
->run
== 300);
79 int test__synthesize_stat(struct test
*test __maybe_unused
, int subtest __maybe_unused
)
81 struct perf_counts_values count
;
87 TEST_ASSERT_VAL("failed to synthesize stat_config",
88 !perf_event__synthesize_stat(NULL
, 1, 2, 3, &count
, process_stat_event
, NULL
));
93 static int process_stat_round_event(struct perf_tool
*tool __maybe_unused
,
94 union perf_event
*event
,
95 struct perf_sample
*sample __maybe_unused
,
96 struct machine
*machine __maybe_unused
)
98 struct stat_round_event
*stat_round
= &event
->stat_round
;
100 TEST_ASSERT_VAL("wrong time", stat_round
->time
== 0xdeadbeef);
101 TEST_ASSERT_VAL("wrong type", stat_round
->type
== PERF_STAT_ROUND_TYPE__INTERVAL
);
105 int test__synthesize_stat_round(struct test
*test __maybe_unused
, int subtest __maybe_unused
)
107 TEST_ASSERT_VAL("failed to synthesize stat_config",
108 !perf_event__synthesize_stat_round(NULL
, 0xdeadbeef, PERF_STAT_ROUND_TYPE__INTERVAL
,
109 process_stat_round_event
, NULL
));