summary refs log tree commit diff stats
path: root/scripts/tracetool/backend/ftrace.py
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2013-05-03 11:20:15 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2013-05-03 11:20:16 -0500
commit743bddb4b35ceaaf6f95aea581a4130dcae6205a (patch)
treeeeabd3f7fd008377db4ea3c8152560718fa427f9 /scripts/tracetool/backend/ftrace.py
parenta612925b4184fa7aa37092db4fef816030640922 (diff)
parente64dd5efb2c6d522a3bc9d096cd49a4e53f0ae10 (diff)
downloadfocaccia-qemu-743bddb4b35ceaaf6f95aea581a4130dcae6205a.tar.gz
focaccia-qemu-743bddb4b35ceaaf6f95aea581a4130dcae6205a.zip
Merge remote-tracking branch 'stefanha/tracing' into staging
# By Eiichi Tsukata (2) and Kazuya Saito (2)
# Via Stefan Hajnoczi
* stefanha/tracing:
  trace: document ftrace backend
  trace: Add ftrace tracing backend
  kvm-all: add kvm_run_exit tracepoint
  kvm-all: add kvm_ioctl, kvm_vm_ioctl, kvm_vcpu_ioctl tracepoints

Message-id: 1367582485-15579-1-git-send-email-stefanha@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'scripts/tracetool/backend/ftrace.py')
-rw-r--r--scripts/tracetool/backend/ftrace.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts/tracetool/backend/ftrace.py b/scripts/tracetool/backend/ftrace.py
new file mode 100644
index 0000000000..888c361aec
--- /dev/null
+++ b/scripts/tracetool/backend/ftrace.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+Ftrace built-in backend.
+"""
+
+__author__     = "Eiichi Tsukata <eiichi.tsukata.xh@hitachi.com>"
+__copyright__  = "Copyright (C) 2013 Hitachi, Ltd."
+__license__    = "GPL version 2 or (at your option) any later version"
+
+__maintainer__ = "Stefan Hajnoczi"
+__email__      = "stefanha@redhat.com"
+
+
+from tracetool import out
+
+
+PUBLIC = True
+
+
+def c(events):
+    pass
+
+def h(events):
+    out('#include "trace/ftrace.h"',
+        '#include "trace/control.h"',
+        '',
+        )
+
+    for e in events:
+        argnames = ", ".join(e.args.names())
+        if len(e.args) > 0:
+            argnames = ", " + argnames
+
+        out('static inline void trace_%(name)s(%(args)s)',
+            '{',
+            '    char ftrace_buf[MAX_TRACE_STRLEN];',
+            '    int unused __attribute__ ((unused));',
+            '    int trlen;',
+            '    bool _state = trace_event_get_state(%(event_id)s);',
+            '    if (_state) {',
+            '        trlen = snprintf(ftrace_buf, MAX_TRACE_STRLEN,',
+            '                         "%(name)s " %(fmt)s "\\n" %(argnames)s);',
+            '        trlen = MIN(trlen, MAX_TRACE_STRLEN - 1);',
+            '        unused = write(trace_marker_fd, ftrace_buf, trlen);',
+            '    }',
+            '}',
+            name = e.name,
+            args = e.args,
+            event_id = "TRACE_" + e.name.upper(),
+            fmt = e.fmt.rstrip("\n"),
+            argnames = argnames,
+            )