1 // SPDX-License-Identifier: GPL-2.0 2 #include <linux/types.h> 3 #include <linux/string.h> 4 #include <linux/zalloc.h> 5 6 #include "../../../util/event.h" 7 #include "../../../util/synthetic-events.h" 8 #include "../../../util/machine.h" 9 #include "../../../util/tool.h" 10 #include "../../../util/map.h" 11 #include "../../../util/debug.h" 12 13 void arch_perf_parse_sample_weight(struct perf_sample *data, 14 const __u64 *array, u64 type) 15 { 16 union perf_sample_weight weight; 17 18 weight.full = *array; 19 if (type & PERF_SAMPLE_WEIGHT) 20 data->weight = weight.full; 21 else { 22 data->weight = weight.var1_dw; 23 data->ins_lat = weight.var2_w; 24 data->p_stage_cyc = weight.var3_w; 25 } 26 } 27 28 void arch_perf_synthesize_sample_weight(const struct perf_sample *data, 29 __u64 *array, u64 type) 30 { 31 *array = data->weight; 32 33 if (type & PERF_SAMPLE_WEIGHT_STRUCT) { 34 *array &= 0xffffffff; 35 *array |= ((u64)data->ins_lat << 32); 36 } 37 } 38 39 const char *arch_perf_header_entry(const char *se_header) 40 { 41 if (!strcmp(se_header, "Local INSTR Latency")) 42 return "Finish Cyc"; 43 else if (!strcmp(se_header, "INSTR Latency")) 44 return "Global Finish_cyc"; 45 else if (!strcmp(se_header, "Local Pipeline Stage Cycle")) 46 return "Dispatch Cyc"; 47 else if (!strcmp(se_header, "Pipeline Stage Cycle")) 48 return "Global Dispatch_cyc"; 49 return se_header; 50 } 51 52 int arch_support_sort_key(const char *sort_key) 53 { 54 if (!strcmp(sort_key, "p_stage_cyc")) 55 return 1; 56 if (!strcmp(sort_key, "local_p_stage_cyc")) 57 return 1; 58 return 0; 59 } 60