diff options
author | Jiri Olsa <jolsa@redhat.com> | 2013-12-03 08:09:41 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-12-04 13:38:14 -0500 |
commit | 6d65894bc028d0342829ea1e64c9e9efad571124 (patch) | |
tree | 37b2b61811c16f687a0af54ca54991503a07327f | |
parent | d8e56c98b7ef96a31a64c69df24ab5d80f90e055 (diff) |
tools lib traceevent: Update kvm plugin with is_writable_pte helper
Adding is_writable_pte print helper function, so the
kvmmmu:fast_page_fault print format gets resolved properly.
The diff of 'perf script' output generated by old and new code:
(data was generated by 'perf record -e 'kvm:*,kvmmmu:*' -a')
--- script.kvm.old
+++ script.kvm.new
- qemu-system-x86 3290 [002] 10708.755312: kvmmmu:fast_page_fault: [FAILED TO PARSE] vcpu_id=0 gva=4094486080 error_code=3 sptep=0xffff88019f1e3670 old_spte=336391285 new_spte=336391287 retry=1
+ qemu-system-x86 3290 [002] 10708.755312: kvmmmu:fast_page_fault: vcpu 0 gva f40ce640 error_code P|W sptep 0xffff88019f1e3670 old 0x140cec75 new 140cec77 spurious 0 fixed 1
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1386076182-14484-28-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r-- | tools/lib/traceevent/plugin_kvm.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tools/lib/traceevent/plugin_kvm.c b/tools/lib/traceevent/plugin_kvm.c index be9d9c6a49e6..a0e282c6b967 100644 --- a/tools/lib/traceevent/plugin_kvm.c +++ b/tools/lib/traceevent/plugin_kvm.c | |||
@@ -389,6 +389,16 @@ static int kvm_mmu_get_page_handler(struct trace_seq *s, | |||
389 | return kvm_mmu_print_role(s, record, event, context); | 389 | return kvm_mmu_print_role(s, record, event, context); |
390 | } | 390 | } |
391 | 391 | ||
392 | #define PT_WRITABLE_SHIFT 1 | ||
393 | #define PT_WRITABLE_MASK (1ULL << PT_WRITABLE_SHIFT) | ||
394 | |||
395 | static unsigned long long | ||
396 | process_is_writable_pte(struct trace_seq *s, unsigned long long *args) | ||
397 | { | ||
398 | unsigned long pte = args[0]; | ||
399 | return pte & PT_WRITABLE_MASK; | ||
400 | } | ||
401 | |||
392 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | 402 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) |
393 | { | 403 | { |
394 | init_disassembler(); | 404 | init_disassembler(); |
@@ -415,5 +425,12 @@ int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | |||
415 | pevent_register_event_handler(pevent, -1, "kvmmmu", | 425 | pevent_register_event_handler(pevent, -1, "kvmmmu", |
416 | "kvm_mmu_prepare_zap_page", kvm_mmu_print_role, | 426 | "kvm_mmu_prepare_zap_page", kvm_mmu_print_role, |
417 | NULL); | 427 | NULL); |
428 | |||
429 | pevent_register_print_function(pevent, | ||
430 | process_is_writable_pte, | ||
431 | PEVENT_FUNC_ARG_INT, | ||
432 | "is_writable_pte", | ||
433 | PEVENT_FUNC_ARG_LONG, | ||
434 | PEVENT_FUNC_ARG_VOID); | ||
418 | return 0; | 435 | return 0; |
419 | } | 436 | } |