xref: /openbmc/linux/tools/perf/tests/cpumap.c (revision 6c872901af07c41745f1abf5ceac9b3b4d9cdbb6)
1*6c872901SJiri Olsa #include "tests.h"
2*6c872901SJiri Olsa #include "cpumap.h"
3*6c872901SJiri Olsa 
4*6c872901SJiri Olsa static int process_event_mask(struct perf_tool *tool __maybe_unused,
5*6c872901SJiri Olsa 			 union perf_event *event,
6*6c872901SJiri Olsa 			 struct perf_sample *sample __maybe_unused,
7*6c872901SJiri Olsa 			 struct machine *machine __maybe_unused)
8*6c872901SJiri Olsa {
9*6c872901SJiri Olsa 	struct cpu_map_event *map = &event->cpu_map;
10*6c872901SJiri Olsa 	struct cpu_map_mask *mask;
11*6c872901SJiri Olsa 	struct cpu_map_data *data;
12*6c872901SJiri Olsa 	int i;
13*6c872901SJiri Olsa 
14*6c872901SJiri Olsa 	data = &map->data;
15*6c872901SJiri Olsa 
16*6c872901SJiri Olsa 	TEST_ASSERT_VAL("wrong type", data->type == PERF_CPU_MAP__MASK);
17*6c872901SJiri Olsa 
18*6c872901SJiri Olsa 	mask = (struct cpu_map_mask *)data->data;
19*6c872901SJiri Olsa 
20*6c872901SJiri Olsa 	TEST_ASSERT_VAL("wrong nr",   mask->nr == 1);
21*6c872901SJiri Olsa 
22*6c872901SJiri Olsa 	for (i = 0; i < 20; i++) {
23*6c872901SJiri Olsa 		TEST_ASSERT_VAL("wrong cpu", test_bit(i, mask->mask));
24*6c872901SJiri Olsa 	}
25*6c872901SJiri Olsa 
26*6c872901SJiri Olsa 	return 0;
27*6c872901SJiri Olsa }
28*6c872901SJiri Olsa 
29*6c872901SJiri Olsa static int process_event_cpus(struct perf_tool *tool __maybe_unused,
30*6c872901SJiri Olsa 			 union perf_event *event,
31*6c872901SJiri Olsa 			 struct perf_sample *sample __maybe_unused,
32*6c872901SJiri Olsa 			 struct machine *machine __maybe_unused)
33*6c872901SJiri Olsa {
34*6c872901SJiri Olsa 	struct cpu_map_event *map = &event->cpu_map;
35*6c872901SJiri Olsa 	struct cpu_map_entries *cpus;
36*6c872901SJiri Olsa 	struct cpu_map_data *data;
37*6c872901SJiri Olsa 
38*6c872901SJiri Olsa 	data = &map->data;
39*6c872901SJiri Olsa 
40*6c872901SJiri Olsa 	TEST_ASSERT_VAL("wrong type", data->type == PERF_CPU_MAP__CPUS);
41*6c872901SJiri Olsa 
42*6c872901SJiri Olsa 	cpus = (struct cpu_map_entries *)data->data;
43*6c872901SJiri Olsa 
44*6c872901SJiri Olsa 	TEST_ASSERT_VAL("wrong nr",   cpus->nr == 2);
45*6c872901SJiri Olsa 	TEST_ASSERT_VAL("wrong cpu",  cpus->cpu[0] == 1);
46*6c872901SJiri Olsa 	TEST_ASSERT_VAL("wrong cpu",  cpus->cpu[1] == 256);
47*6c872901SJiri Olsa 	return 0;
48*6c872901SJiri Olsa }
49*6c872901SJiri Olsa 
50*6c872901SJiri Olsa 
51*6c872901SJiri Olsa int test__cpu_map_synthesize(int subtest __maybe_unused)
52*6c872901SJiri Olsa {
53*6c872901SJiri Olsa 	struct cpu_map *cpus;
54*6c872901SJiri Olsa 
55*6c872901SJiri Olsa 	/* This one is better stores in mask. */
56*6c872901SJiri Olsa 	cpus = cpu_map__new("0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19");
57*6c872901SJiri Olsa 
58*6c872901SJiri Olsa 	TEST_ASSERT_VAL("failed to synthesize map",
59*6c872901SJiri Olsa 		!perf_event__synthesize_cpu_map(NULL, cpus, process_event_mask, NULL));
60*6c872901SJiri Olsa 
61*6c872901SJiri Olsa 	cpu_map__put(cpus);
62*6c872901SJiri Olsa 
63*6c872901SJiri Olsa 	/* This one is better stores in cpu values. */
64*6c872901SJiri Olsa 	cpus = cpu_map__new("1,256");
65*6c872901SJiri Olsa 
66*6c872901SJiri Olsa 	TEST_ASSERT_VAL("failed to synthesize map",
67*6c872901SJiri Olsa 		!perf_event__synthesize_cpu_map(NULL, cpus, process_event_cpus, NULL));
68*6c872901SJiri Olsa 
69*6c872901SJiri Olsa 	cpu_map__put(cpus);
70*6c872901SJiri Olsa 	return 0;
71*6c872901SJiri Olsa }
72