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