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

Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core

Pull perf/core improvements and fixes from Jiri Olsa:

* Updates from trace-cmd for traceevent plugin_kvm plus args cleanup (Steven Rostedt, Jan Kiszka)

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>

+59 -14
+1 -2
tools/lib/traceevent/plugin_cfg80211.c
··· 5 5 #include "event-parse.h" 6 6 7 7 static unsigned long long 8 - process___le16_to_cpup(struct trace_seq *s, 9 - unsigned long long *args) 8 + process___le16_to_cpup(struct trace_seq *s, unsigned long long *args) 10 9 { 11 10 uint16_t *val = (uint16_t *) (unsigned long) args[0]; 12 11 return val ? (long long) le16toh(*val) : 0;
+2 -4
tools/lib/traceevent/plugin_jbd2.c
··· 30 30 #define MINOR(dev) ((unsigned int) ((dev) & MINORMASK)) 31 31 32 32 static unsigned long long 33 - process_jbd2_dev_to_name(struct trace_seq *s, 34 - unsigned long long *args) 33 + process_jbd2_dev_to_name(struct trace_seq *s, unsigned long long *args) 35 34 { 36 35 unsigned int dev = args[0]; 37 36 ··· 39 40 } 40 41 41 42 static unsigned long long 42 - process_jiffies_to_msecs(struct trace_seq *s, 43 - unsigned long long *args) 43 + process_jiffies_to_msecs(struct trace_seq *s, unsigned long long *args) 44 44 { 45 45 unsigned long long jiffies = args[0]; 46 46
+56 -8
tools/lib/traceevent/plugin_kvm.c
··· 240 240 for (i = 0; strings[i].val >= 0; i++) 241 241 if (strings[i].val == val) 242 242 break; 243 - if (strings[i].str) 244 - return strings[i].str; 245 - return "UNKNOWN"; 243 + 244 + return strings[i].str; 246 245 } 247 246 248 - static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record, 249 - struct event_format *event, void *context) 247 + static int print_exit_reason(struct trace_seq *s, struct pevent_record *record, 248 + struct event_format *event, const char *field) 250 249 { 251 250 unsigned long long isa; 252 251 unsigned long long val; 253 - unsigned long long info1 = 0, info2 = 0; 252 + const char *reason; 254 253 255 - if (pevent_get_field_val(s, event, "exit_reason", record, &val, 1) < 0) 254 + if (pevent_get_field_val(s, event, field, record, &val, 1) < 0) 256 255 return -1; 257 256 258 257 if (pevent_get_field_val(s, event, "isa", record, &isa, 0) < 0) 259 258 isa = 1; 260 259 261 - trace_seq_printf(s, "reason %s", find_exit_reason(isa, val)); 260 + reason = find_exit_reason(isa, val); 261 + if (reason) 262 + trace_seq_printf(s, "reason %s", reason); 263 + else 264 + trace_seq_printf(s, "reason UNKNOWN (%llu)", val); 265 + return 0; 266 + } 267 + 268 + static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record, 269 + struct event_format *event, void *context) 270 + { 271 + unsigned long long info1 = 0, info2 = 0; 272 + 273 + if (print_exit_reason(s, record, event, "exit_reason") < 0) 274 + return -1; 262 275 263 276 pevent_print_num_field(s, " rip 0x%lx", event, "guest_rip", record, 1); 264 277 ··· 324 311 trace_seq_printf(s, "%llx:%llx: %s%s", csbase, rip, disasm, 325 312 failed ? " FAIL" : ""); 326 313 return 0; 314 + } 315 + 316 + 317 + static int kvm_nested_vmexit_inject_handler(struct trace_seq *s, struct pevent_record *record, 318 + struct event_format *event, void *context) 319 + { 320 + if (print_exit_reason(s, record, event, "exit_code") < 0) 321 + return -1; 322 + 323 + pevent_print_num_field(s, " info1 %llx", event, "exit_info1", record, 1); 324 + pevent_print_num_field(s, " info2 %llx", event, "exit_info2", record, 1); 325 + pevent_print_num_field(s, " int_info %llx", event, "exit_int_info", record, 1); 326 + pevent_print_num_field(s, " int_info_err %llx", event, "exit_int_info_err", record, 1); 327 + 328 + return 0; 329 + } 330 + 331 + static int kvm_nested_vmexit_handler(struct trace_seq *s, struct pevent_record *record, 332 + struct event_format *event, void *context) 333 + { 334 + pevent_print_num_field(s, "rip %llx ", event, "rip", record, 1); 335 + 336 + return kvm_nested_vmexit_inject_handler(s, record, event, context); 327 337 } 328 338 329 339 union kvm_mmu_page_role { ··· 445 409 pevent_register_event_handler(pevent, -1, "kvm", "kvm_emulate_insn", 446 410 kvm_emulate_insn_handler, NULL); 447 411 412 + pevent_register_event_handler(pevent, -1, "kvm", "kvm_nested_vmexit", 413 + kvm_nested_vmexit_handler, NULL); 414 + 415 + pevent_register_event_handler(pevent, -1, "kvm", "kvm_nested_vmexit_inject", 416 + kvm_nested_vmexit_inject_handler, NULL); 417 + 448 418 pevent_register_event_handler(pevent, -1, "kvmmmu", "kvm_mmu_get_page", 449 419 kvm_mmu_get_page_handler, NULL); 450 420 ··· 484 442 485 443 pevent_unregister_event_handler(pevent, -1, "kvm", "kvm_emulate_insn", 486 444 kvm_emulate_insn_handler, NULL); 445 + 446 + pevent_unregister_event_handler(pevent, -1, "kvm", "kvm_nested_vmexit", 447 + kvm_nested_vmexit_handler, NULL); 448 + 449 + pevent_unregister_event_handler(pevent, -1, "kvm", "kvm_nested_vmexit_inject", 450 + kvm_nested_vmexit_inject_handler, NULL); 487 451 488 452 pevent_unregister_event_handler(pevent, -1, "kvmmmu", "kvm_mmu_get_page", 489 453 kvm_mmu_get_page_handler, NULL);