Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf scripting python: Fix tuple_set_u64()

tuple_set_u64() produces a signed value instead of an unsigned value.
That works for database export but not other cases. Rename to
tuple_set_d64() for database export and fix tuple_set_u64().

Fixes: df919b400ad3f ("perf scripting python: Extend interface to export data in a database-friendly way")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: https://lore.kernel.org/r/20210525095112.1399-2-adrian.hunter@intel.com

authored by

Adrian Hunter and committed by
Arnaldo Carvalho de Melo
d04c1ff0 04612968

+81 -65
+81 -65
tools/perf/util/scripting-engines/trace-event-python.c
··· 934 934 return t; 935 935 } 936 936 937 - static int tuple_set_u64(PyObject *t, unsigned int pos, u64 val) 937 + static int tuple_set_s64(PyObject *t, unsigned int pos, s64 val) 938 938 { 939 939 #if BITS_PER_LONG == 64 940 940 return PyTuple_SetItem(t, pos, _PyLong_FromLong(val)); 941 941 #endif 942 942 #if BITS_PER_LONG == 32 943 943 return PyTuple_SetItem(t, pos, PyLong_FromLongLong(val)); 944 + #endif 945 + } 946 + 947 + /* 948 + * Databases support only signed 64-bit numbers, so even though we are 949 + * exporting a u64, it must be as s64. 950 + */ 951 + #define tuple_set_d64 tuple_set_s64 952 + 953 + static int tuple_set_u64(PyObject *t, unsigned int pos, u64 val) 954 + { 955 + #if BITS_PER_LONG == 64 956 + return PyTuple_SetItem(t, pos, PyLong_FromUnsignedLong(val)); 957 + #endif 958 + #if BITS_PER_LONG == 32 959 + return PyTuple_SetItem(t, pos, PyLong_FromUnsignedLongLong(val)); 944 960 #endif 945 961 } 946 962 ··· 983 967 984 968 t = tuple_new(2); 985 969 986 - tuple_set_u64(t, 0, evsel->db_id); 970 + tuple_set_d64(t, 0, evsel->db_id); 987 971 tuple_set_string(t, 1, evsel__name(evsel)); 988 972 989 973 call_object(tables->evsel_handler, t, "evsel_table"); ··· 1001 985 1002 986 t = tuple_new(3); 1003 987 1004 - tuple_set_u64(t, 0, machine->db_id); 988 + tuple_set_d64(t, 0, machine->db_id); 1005 989 tuple_set_s32(t, 1, machine->pid); 1006 990 tuple_set_string(t, 2, machine->root_dir ? machine->root_dir : ""); 1007 991 ··· 1020 1004 1021 1005 t = tuple_new(5); 1022 1006 1023 - tuple_set_u64(t, 0, thread->db_id); 1024 - tuple_set_u64(t, 1, machine->db_id); 1025 - tuple_set_u64(t, 2, main_thread_db_id); 1007 + tuple_set_d64(t, 0, thread->db_id); 1008 + tuple_set_d64(t, 1, machine->db_id); 1009 + tuple_set_d64(t, 2, main_thread_db_id); 1026 1010 tuple_set_s32(t, 3, thread->pid_); 1027 1011 tuple_set_s32(t, 4, thread->tid); 1028 1012 ··· 1041 1025 1042 1026 t = tuple_new(5); 1043 1027 1044 - tuple_set_u64(t, 0, comm->db_id); 1028 + tuple_set_d64(t, 0, comm->db_id); 1045 1029 tuple_set_string(t, 1, comm__str(comm)); 1046 - tuple_set_u64(t, 2, thread->db_id); 1047 - tuple_set_u64(t, 3, comm->start); 1030 + tuple_set_d64(t, 2, thread->db_id); 1031 + tuple_set_d64(t, 3, comm->start); 1048 1032 tuple_set_s32(t, 4, comm->exec); 1049 1033 1050 1034 call_object(tables->comm_handler, t, "comm_table"); ··· 1062 1046 1063 1047 t = tuple_new(3); 1064 1048 1065 - tuple_set_u64(t, 0, db_id); 1066 - tuple_set_u64(t, 1, comm->db_id); 1067 - tuple_set_u64(t, 2, thread->db_id); 1049 + tuple_set_d64(t, 0, db_id); 1050 + tuple_set_d64(t, 1, comm->db_id); 1051 + tuple_set_d64(t, 2, thread->db_id); 1068 1052 1069 1053 call_object(tables->comm_thread_handler, t, "comm_thread_table"); 1070 1054 ··· 1084 1068 1085 1069 t = tuple_new(5); 1086 1070 1087 - tuple_set_u64(t, 0, dso->db_id); 1088 - tuple_set_u64(t, 1, machine->db_id); 1071 + tuple_set_d64(t, 0, dso->db_id); 1072 + tuple_set_d64(t, 1, machine->db_id); 1089 1073 tuple_set_string(t, 2, dso->short_name); 1090 1074 tuple_set_string(t, 3, dso->long_name); 1091 1075 tuple_set_string(t, 4, sbuild_id); ··· 1106 1090 1107 1091 t = tuple_new(6); 1108 1092 1109 - tuple_set_u64(t, 0, *sym_db_id); 1110 - tuple_set_u64(t, 1, dso->db_id); 1111 - tuple_set_u64(t, 2, sym->start); 1112 - tuple_set_u64(t, 3, sym->end); 1093 + tuple_set_d64(t, 0, *sym_db_id); 1094 + tuple_set_d64(t, 1, dso->db_id); 1095 + tuple_set_d64(t, 2, sym->start); 1096 + tuple_set_d64(t, 3, sym->end); 1113 1097 tuple_set_s32(t, 4, sym->binding); 1114 1098 tuple_set_string(t, 5, sym->name); 1115 1099 ··· 1146 1130 1147 1131 t = tuple_new(24); 1148 1132 1149 - tuple_set_u64(t, 0, es->db_id); 1150 - tuple_set_u64(t, 1, es->evsel->db_id); 1151 - tuple_set_u64(t, 2, es->al->maps->machine->db_id); 1152 - tuple_set_u64(t, 3, es->al->thread->db_id); 1153 - tuple_set_u64(t, 4, es->comm_db_id); 1154 - tuple_set_u64(t, 5, es->dso_db_id); 1155 - tuple_set_u64(t, 6, es->sym_db_id); 1156 - tuple_set_u64(t, 7, es->offset); 1157 - tuple_set_u64(t, 8, es->sample->ip); 1158 - tuple_set_u64(t, 9, es->sample->time); 1133 + tuple_set_d64(t, 0, es->db_id); 1134 + tuple_set_d64(t, 1, es->evsel->db_id); 1135 + tuple_set_d64(t, 2, es->al->maps->machine->db_id); 1136 + tuple_set_d64(t, 3, es->al->thread->db_id); 1137 + tuple_set_d64(t, 4, es->comm_db_id); 1138 + tuple_set_d64(t, 5, es->dso_db_id); 1139 + tuple_set_d64(t, 6, es->sym_db_id); 1140 + tuple_set_d64(t, 7, es->offset); 1141 + tuple_set_d64(t, 8, es->sample->ip); 1142 + tuple_set_d64(t, 9, es->sample->time); 1159 1143 tuple_set_s32(t, 10, es->sample->cpu); 1160 - tuple_set_u64(t, 11, es->addr_dso_db_id); 1161 - tuple_set_u64(t, 12, es->addr_sym_db_id); 1162 - tuple_set_u64(t, 13, es->addr_offset); 1163 - tuple_set_u64(t, 14, es->sample->addr); 1164 - tuple_set_u64(t, 15, es->sample->period); 1165 - tuple_set_u64(t, 16, es->sample->weight); 1166 - tuple_set_u64(t, 17, es->sample->transaction); 1167 - tuple_set_u64(t, 18, es->sample->data_src); 1144 + tuple_set_d64(t, 11, es->addr_dso_db_id); 1145 + tuple_set_d64(t, 12, es->addr_sym_db_id); 1146 + tuple_set_d64(t, 13, es->addr_offset); 1147 + tuple_set_d64(t, 14, es->sample->addr); 1148 + tuple_set_d64(t, 15, es->sample->period); 1149 + tuple_set_d64(t, 16, es->sample->weight); 1150 + tuple_set_d64(t, 17, es->sample->transaction); 1151 + tuple_set_d64(t, 18, es->sample->data_src); 1168 1152 tuple_set_s32(t, 19, es->sample->flags & PERF_BRANCH_MASK); 1169 1153 tuple_set_s32(t, 20, !!(es->sample->flags & PERF_IP_FLAG_IN_TX)); 1170 - tuple_set_u64(t, 21, es->call_path_id); 1171 - tuple_set_u64(t, 22, es->sample->insn_cnt); 1172 - tuple_set_u64(t, 23, es->sample->cyc_cnt); 1154 + tuple_set_d64(t, 21, es->call_path_id); 1155 + tuple_set_d64(t, 22, es->sample->insn_cnt); 1156 + tuple_set_d64(t, 23, es->sample->cyc_cnt); 1173 1157 1174 1158 call_object(tables->sample_handler, t, "sample_table"); 1175 1159 ··· 1183 1167 1184 1168 t = tuple_new(3); 1185 1169 1186 - tuple_set_u64(t, 0, es->db_id); 1187 - tuple_set_u64(t, 1, es->evsel->core.attr.config); 1170 + tuple_set_d64(t, 0, es->db_id); 1171 + tuple_set_d64(t, 1, es->evsel->core.attr.config); 1188 1172 tuple_set_bytes(t, 2, es->sample->raw_data, es->sample->raw_size); 1189 1173 1190 1174 call_object(tables->synth_handler, t, "synth_data"); ··· 1216 1200 1217 1201 t = tuple_new(4); 1218 1202 1219 - tuple_set_u64(t, 0, cp->db_id); 1220 - tuple_set_u64(t, 1, parent_db_id); 1221 - tuple_set_u64(t, 2, sym_db_id); 1222 - tuple_set_u64(t, 3, cp->ip); 1203 + tuple_set_d64(t, 0, cp->db_id); 1204 + tuple_set_d64(t, 1, parent_db_id); 1205 + tuple_set_d64(t, 2, sym_db_id); 1206 + tuple_set_d64(t, 3, cp->ip); 1223 1207 1224 1208 call_object(tables->call_path_handler, t, "call_path_table"); 1225 1209 ··· 1237 1221 1238 1222 t = tuple_new(14); 1239 1223 1240 - tuple_set_u64(t, 0, cr->db_id); 1241 - tuple_set_u64(t, 1, cr->thread->db_id); 1242 - tuple_set_u64(t, 2, comm_db_id); 1243 - tuple_set_u64(t, 3, cr->cp->db_id); 1244 - tuple_set_u64(t, 4, cr->call_time); 1245 - tuple_set_u64(t, 5, cr->return_time); 1246 - tuple_set_u64(t, 6, cr->branch_count); 1247 - tuple_set_u64(t, 7, cr->call_ref); 1248 - tuple_set_u64(t, 8, cr->return_ref); 1249 - tuple_set_u64(t, 9, cr->cp->parent->db_id); 1224 + tuple_set_d64(t, 0, cr->db_id); 1225 + tuple_set_d64(t, 1, cr->thread->db_id); 1226 + tuple_set_d64(t, 2, comm_db_id); 1227 + tuple_set_d64(t, 3, cr->cp->db_id); 1228 + tuple_set_d64(t, 4, cr->call_time); 1229 + tuple_set_d64(t, 5, cr->return_time); 1230 + tuple_set_d64(t, 6, cr->branch_count); 1231 + tuple_set_d64(t, 7, cr->call_ref); 1232 + tuple_set_d64(t, 8, cr->return_ref); 1233 + tuple_set_d64(t, 9, cr->cp->parent->db_id); 1250 1234 tuple_set_s32(t, 10, cr->flags); 1251 - tuple_set_u64(t, 11, cr->parent_db_id); 1252 - tuple_set_u64(t, 12, cr->insn_count); 1253 - tuple_set_u64(t, 13, cr->cyc_count); 1235 + tuple_set_d64(t, 11, cr->parent_db_id); 1236 + tuple_set_d64(t, 12, cr->insn_count); 1237 + tuple_set_d64(t, 13, cr->cyc_count); 1254 1238 1255 1239 call_object(tables->call_return_handler, t, "call_return_table"); 1256 1240 ··· 1270 1254 1271 1255 t = tuple_new(9); 1272 1256 1273 - tuple_set_u64(t, 0, db_id); 1274 - tuple_set_u64(t, 1, machine->db_id); 1275 - tuple_set_u64(t, 2, sample->time); 1257 + tuple_set_d64(t, 0, db_id); 1258 + tuple_set_d64(t, 1, machine->db_id); 1259 + tuple_set_d64(t, 2, sample->time); 1276 1260 tuple_set_s32(t, 3, sample->cpu); 1277 - tuple_set_u64(t, 4, th_out_id); 1278 - tuple_set_u64(t, 5, comm_out_id); 1279 - tuple_set_u64(t, 6, th_in_id); 1280 - tuple_set_u64(t, 7, comm_in_id); 1261 + tuple_set_d64(t, 4, th_out_id); 1262 + tuple_set_d64(t, 5, comm_out_id); 1263 + tuple_set_d64(t, 6, th_in_id); 1264 + tuple_set_d64(t, 7, comm_in_id); 1281 1265 tuple_set_s32(t, 8, flags); 1282 1266 1283 1267 call_object(tables->context_switch_handler, t, "context_switch");