From: "Lluís Vilanova" <vilanova@ac.upc.edu>
To: "Daniel P. Berrange" <berrange@redhat.com>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 18/18] trace: introduce a formal group name for trace events
Date: Mon, 19 Sep 2016 20:27:04 +0200 [thread overview]
Message-ID: <87zin33fuv.fsf@fimbulvetr.bsc.es> (raw)
In-Reply-To: <1474296549-29171-19-git-send-email-berrange@redhat.com> (Daniel P. Berrange's message of "Mon, 19 Sep 2016 15:49:09 +0100")
Daniel P Berrange writes:
> The declarations in the generated-tracers.h file are
> assuming there's only ever going to be one instance
> of this header, as they are not namespaced. When we
> have one header per event group, if a single source
> file needs to include multiple sets of trace events,
> the symbols will all clash.
> This change thus introduces a '--group NAME' arg to the
> 'tracetool' program. This will cause all the symbols in
> the generated header files to be given a unique namespace.
> If no group is given, the group name 'common' is used,
> which is suitable for the current usage where there is
> only one global trace-events file used for code generation.
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> scripts/tracetool.py | 24 +++++++++++++++++++++++-
> scripts/tracetool/__init__.py | 6 ++++--
> scripts/tracetool/backend/__init__.py | 12 ++++++------
> scripts/tracetool/backend/dtrace.py | 4 ++--
> scripts/tracetool/backend/ftrace.py | 5 +++--
> scripts/tracetool/backend/log.py | 4 ++--
> scripts/tracetool/backend/simple.py | 8 ++++----
> scripts/tracetool/backend/syslog.py | 4 ++--
> scripts/tracetool/backend/ust.py | 4 ++--
> scripts/tracetool/format/__init__.py | 4 ++--
> scripts/tracetool/format/c.py | 18 ++++++++++--------
> scripts/tracetool/format/d.py | 2 +-
> scripts/tracetool/format/h.py | 14 +++++++-------
> scripts/tracetool/format/simpletrace_stap.py | 2 +-
> scripts/tracetool/format/stap.py | 2 +-
> scripts/tracetool/format/tcg_h.py | 2 +-
> scripts/tracetool/format/tcg_helper_c.py | 2 +-
> scripts/tracetool/format/tcg_helper_h.py | 2 +-
> scripts/tracetool/format/tcg_helper_wrapper_h.py | 2 +-
> scripts/tracetool/format/ust_events_c.py | 2 +-
> scripts/tracetool/format/ust_events_h.py | 8 ++++----
> 21 files changed, 79 insertions(+), 52 deletions(-)
> diff --git a/scripts/tracetool.py b/scripts/tracetool.py
> index f66e767..0ee66f3 100755
> --- a/scripts/tracetool.py
> +++ b/scripts/tracetool.py
> @@ -15,6 +15,8 @@ __email__ = "stefanha@linux.vnet.ibm.com"
> import sys
> import getopt
> +import os.path
> +import re
> from tracetool import error_write, out
> import tracetool.backend
> @@ -60,6 +62,24 @@ Options:
> else:
> sys.exit(1)
> +def find_git_root(dirname):
> + while dirname != "":
> + git = os.path.join(dirname, ".git")
> + if os.path.exists(git):
> + return dirname
> + dirname = os.path.dirname(dirname)
> +
> + raise ValueError("Cannot find .git directory for %s",
> + filename)
> +
Some people (distributions?) distribute source tarballs without the VCS
files/directories, so this might break.
Even if ugly, it might be easier to just hardcode it based on the script's
relative location:
os.path.abspath(os.path.join(os.dirname(___file___), os.pardir))
> +def make_group_name(filename):
> + dirname = os.path.dirname(filename)
> + gitdir = find_git_root(dirname)
> + dirname = dirname[len(gitdir):]
> +
> + if dirname == "":
> + return "common"
> + return re.sub(r"/|-", "_", dirname)
> def main(args):
> global _SCRIPT
> @@ -134,8 +154,10 @@ def main(args):
> with open(args[0], "r") as fh:
> events = tracetool.read_events(fh)
> + group = make_group_name(args[0])
> +
> try:
> - tracetool.generate(events, arg_format, arg_backends,
> + tracetool.generate(events, group, arg_format, arg_backends,
> binary=binary, probe_prefix=probe_prefix)
> except tracetool.TracetoolError as e:
> error_opt(str(e))
> diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
> index ed668a1..be8a360 100644
> --- a/scripts/tracetool/__init__.py
> +++ b/scripts/tracetool/__init__.py
> @@ -363,7 +363,7 @@ def try_import(mod_name, attr_name=None, attr_default=None):
> return False, None
> -def generate(events, format, backends,
> +def generate(events, group, format, backends,
> binary=None, probe_prefix=None):
> """Generate the output for the given (format, backends) pair.
> @@ -371,6 +371,8 @@ def generate(events, format, backends,
> ----------
> events : list
> list of Event objects to generate for
> + group: str
> + Name of the tracing group
> format : str
> Output format name.
> backends : list
> @@ -400,4 +402,4 @@ def generate(events, format, backends,
> tracetool.backend.dtrace.BINARY = binary
> tracetool.backend.dtrace.PROBEPREFIX = probe_prefix
> - tracetool.format.generate(events, format, backend)
> + tracetool.format.generate(events, format, backend, group)
> diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/backend/__init__.py
> index d4b6dab..f735a25 100644
> --- a/scripts/tracetool/backend/__init__.py
> +++ b/scripts/tracetool/backend/__init__.py
> @@ -113,11 +113,11 @@ class Wrapper:
> if func is not None:
> func(*args, **kwargs)
> - def generate_begin(self, events):
> - self._run_function("generate_%s_begin", events)
> + def generate_begin(self, events, group):
> + self._run_function("generate_%s_begin", events, group)
> - def generate(self, event):
> - self._run_function("generate_%s", event)
> + def generate(self, event, group):
> + self._run_function("generate_%s", event, group)
> - def generate_end(self, events):
> - self._run_function("generate_%s_end", events)
> + def generate_end(self, events, group):
> + self._run_function("generate_%s_end", events, group)
> diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/backend/dtrace.py
> index ab9ecfa..79505c6 100644
> --- a/scripts/tracetool/backend/dtrace.py
> +++ b/scripts/tracetool/backend/dtrace.py
> @@ -35,12 +35,12 @@ def binary():
> return BINARY
> -def generate_h_begin(events):
> +def generate_h_begin(events, group):
> out('#include "trace/generated-tracers-dtrace.h"',
> '')
> -def generate_h(event):
> +def generate_h(event, group):
> out(' QEMU_%(uppername)s(%(argnames)s);',
> uppername=event.name.upper(),
> argnames=", ".join(event.args.names()))
> diff --git a/scripts/tracetool/backend/ftrace.py b/scripts/tracetool/backend/ftrace.py
> index 4b83b44..8ee1a20 100644
> --- a/scripts/tracetool/backend/ftrace.py
> +++ b/scripts/tracetool/backend/ftrace.py
> @@ -19,12 +19,12 @@ from tracetool import out
> PUBLIC = True
> -def generate_h_begin(events):
> +def generate_h_begin(events, group):
> out('#include "trace/ftrace.h"',
> '')
> -def generate_h(event):
> +def generate_h(event, group):
> argnames = ", ".join(event.args.names())
> if len(event.args) > 0:
> argnames = ", " + argnames
> @@ -40,6 +40,7 @@ def generate_h(event):
> ' unused = write(trace_marker_fd, ftrace_buf, trlen);',
> ' }',
> ' }',
> + group=group.lower(),
This group seems unused.
> name=event.name,
> args=event.args,
> event_id="TRACE_" + event.name.upper(),
> diff --git a/scripts/tracetool/backend/log.py b/scripts/tracetool/backend/log.py
> index 426bb6e..4f4a4d3 100644
> --- a/scripts/tracetool/backend/log.py
> +++ b/scripts/tracetool/backend/log.py
> @@ -19,12 +19,12 @@ from tracetool import out
> PUBLIC = True
> -def generate_h_begin(events):
> +def generate_h_begin(events, group):
> out('#include "qemu/log.h"',
> '')
> -def generate_h(event):
> +def generate_h(event, group):
> argnames = ", ".join(event.args.names())
> if len(event.args) > 0:
> argnames = ", " + argnames
> diff --git a/scripts/tracetool/backend/simple.py b/scripts/tracetool/backend/simple.py
> index 971bd97..b0db50c 100644
> --- a/scripts/tracetool/backend/simple.py
> +++ b/scripts/tracetool/backend/simple.py
> @@ -27,7 +27,7 @@ def is_string(arg):
> return False
> -def generate_h_begin(events):
> +def generate_h_begin(events, group):
> for event in events:
> out('void _simple_%(api)s(%(args)s);',
> api=event.api(),
> @@ -35,13 +35,13 @@ def generate_h_begin(events):
> out('')
> -def generate_h(event):
> +def generate_h(event, group):
> out(' _simple_%(api)s(%(args)s);',
> api=event.api(),
> args=", ".join(event.args.names()))
> -def generate_c_begin(events):
> +def generate_c_begin(events, group):
> out('#include "qemu/osdep.h"',
> '#include "trace.h"',
> '#include "trace/control.h"',
> @@ -49,7 +49,7 @@ def generate_c_begin(events):
> '')
> -def generate_c(event):
> +def generate_c(event, group):
> out('void _simple_%(api)s(%(args)s)',
> '{',
> ' TraceBufferRecord rec;',
> diff --git a/scripts/tracetool/backend/syslog.py b/scripts/tracetool/backend/syslog.py
> index 5f693bd..b8ff279 100644
> --- a/scripts/tracetool/backend/syslog.py
> +++ b/scripts/tracetool/backend/syslog.py
> @@ -19,12 +19,12 @@ from tracetool import out
> PUBLIC = True
> -def generate_h_begin(events):
> +def generate_h_begin(events, group):
> out('#include <syslog.h>',
> '')
> -def generate_h(event):
> +def generate_h(event, group):
> argnames = ", ".join(event.args.names())
> if len(event.args) > 0:
> argnames = ", " + argnames
> diff --git a/scripts/tracetool/backend/ust.py b/scripts/tracetool/backend/ust.py
> index ed4c227..4594db6 100644
> --- a/scripts/tracetool/backend/ust.py
> +++ b/scripts/tracetool/backend/ust.py
> @@ -19,13 +19,13 @@ from tracetool import out
> PUBLIC = True
> -def generate_h_begin(events):
> +def generate_h_begin(events, group):
> out('#include <lttng/tracepoint.h>',
> '#include "trace/generated-ust-provider.h"',
> '')
> -def generate_h(event):
> +def generate_h(event, group):
> argnames = ", ".join(event.args.names())
> if len(event.args) > 0:
> argnames = ", " + argnames
> diff --git a/scripts/tracetool/format/__init__.py b/scripts/tracetool/format/__init__.py
> index 812570f..cf6e0e2 100644
> --- a/scripts/tracetool/format/__init__.py
> +++ b/scripts/tracetool/format/__init__.py
> @@ -74,7 +74,7 @@ def exists(name):
> return tracetool.try_import("tracetool.format." + name)[1]
> -def generate(events, format, backend):
> +def generate(events, format, backend, group):
> if not exists(format):
> raise ValueError("unknown format: %s" % format)
> format = format.replace("-", "_")
> @@ -82,4 +82,4 @@ def generate(events, format, backend):
> "generate")[1]
> if func is None:
> raise AttributeError("format has no 'generate': %s" % format)
> - func(events, backend)
> + func(events, backend, group)
> diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
> index 24f8d2e..31438fa 100644
> --- a/scripts/tracetool/format/c.py
> +++ b/scripts/tracetool/format/c.py
> @@ -16,7 +16,7 @@ __email__ = "stefanha@linux.vnet.ibm.com"
> from tracetool import out
> -def generate(events, backend):
> +def generate(events, backend, group):
> active_events = [e for e in events
> if "disable" not in e.properties]
> @@ -47,7 +47,8 @@ def generate(events, backend):
> sstate = "TRACE_%s_ENABLED" % e.name.upper(),
> dstate = e.api(e.QEMU_DSTATE))
> - out('TraceEvent *trace_events[] = {')
> + out('TraceEvent *%(group)s_trace_events[] = {',
> + group = group.lower())
> for e in events:
> out('&%(event)s,',
> @@ -57,13 +58,14 @@ def generate(events, backend):
> '};',
> '')
> - out('static void trace_register_events(void)',
> + out('static void trace_%(group)s_register_events(void)',
> '{',
> - ' trace_event_register_group(trace_events);',
> + ' trace_event_register_group(%(group)s_trace_events);',
> '}',
> - 'trace_init(trace_register_events)')
> + 'trace_init(trace_%(group)s_register_events)',
> + group = group.lower())
> - backend.generate_begin(active_events)
> + backend.generate_begin(active_events, group)
> for event in active_events:
> - backend.generate(event)
> - backend.generate_end(active_events)
> + backend.generate(event, group)
> + backend.generate_end(active_events, group)
> diff --git a/scripts/tracetool/format/d.py b/scripts/tracetool/format/d.py
> index c77d5b7..78397c2 100644
> --- a/scripts/tracetool/format/d.py
> +++ b/scripts/tracetool/format/d.py
> @@ -29,7 +29,7 @@ RESERVED_WORDS = (
> )
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disable" not in e.properties]
> diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py
> index f1dc493..3f1d5e9 100644
> --- a/scripts/tracetool/format/h.py
> +++ b/scripts/tracetool/format/h.py
> @@ -16,11 +16,11 @@ __email__ = "stefanha@linux.vnet.ibm.com"
> from tracetool import out
> -def generate(events, backend):
> +def generate(events, backend, group):
> out('/* This file is autogenerated by tracetool, do not edit. */',
> '',
> - '#ifndef TRACE__GENERATED_TRACERS_H',
> - '#define TRACE__GENERATED_TRACERS_H',
> + '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
> + '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
> '',
> '#include "qemu-common.h"',
> '#include "trace/control.h"',
> @@ -45,7 +45,7 @@ def generate(events, backend):
> enabled=enabled)
> out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled))
> - backend.generate_begin(events)
> + backend.generate_begin(events, group)
> for e in events:
> if "vcpu" in e.properties:
> @@ -67,11 +67,11 @@ def generate(events, backend):
> cond=cond)
> if "disable" not in e.properties:
> - backend.generate(e)
> + backend.generate(e, group)
> out(' }',
> '}')
> - backend.generate_end(events)
> + backend.generate_end(events, group)
> - out('#endif /* TRACE__GENERATED_TRACERS_H */')
> + out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper())
> diff --git a/scripts/tracetool/format/simpletrace_stap.py b/scripts/tracetool/format/simpletrace_stap.py
> index 0573f43..3d700ca 100644
> --- a/scripts/tracetool/format/simpletrace_stap.py
> +++ b/scripts/tracetool/format/simpletrace_stap.py
> @@ -19,7 +19,7 @@ from tracetool.backend.simple import is_string
> from tracetool.format.stap import stap_escape
> -def generate(events, backend):
> +def generate(events, backend, group):
> out('/* This file is autogenerated by tracetool, do not edit. */',
> '',
> 'global event_name_to_id_map',
> diff --git a/scripts/tracetool/format/stap.py b/scripts/tracetool/format/stap.py
> index 9e780f1..e8ef3e7 100644
> --- a/scripts/tracetool/format/stap.py
> +++ b/scripts/tracetool/format/stap.py
> @@ -34,7 +34,7 @@ def stap_escape(identifier):
> return identifier
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disable" not in e.properties]
> diff --git a/scripts/tracetool/format/tcg_h.py b/scripts/tracetool/format/tcg_h.py
> index e2331f2..628388a 100644
> --- a/scripts/tracetool/format/tcg_h.py
> +++ b/scripts/tracetool/format/tcg_h.py
> @@ -27,7 +27,7 @@ def vcpu_transform_args(args):
> ])
> -def generate(events, backend):
> +def generate(events, backend, group):
> out('/* This file is autogenerated by tracetool, do not edit. */',
> '/* You must include this file after the inclusion of helper.h */',
> '',
> diff --git a/scripts/tracetool/format/tcg_helper_c.py b/scripts/tracetool/format/tcg_helper_c.py
> index e3485b7..cc26e03 100644
> --- a/scripts/tracetool/format/tcg_helper_c.py
> +++ b/scripts/tracetool/format/tcg_helper_c.py
> @@ -40,7 +40,7 @@ def vcpu_transform_args(args, mode):
> assert False
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disable" not in e.properties]
> diff --git a/scripts/tracetool/format/tcg_helper_h.py b/scripts/tracetool/format/tcg_helper_h.py
> index dc76c15..6b184b6 100644
> --- a/scripts/tracetool/format/tcg_helper_h.py
> +++ b/scripts/tracetool/format/tcg_helper_h.py
> @@ -18,7 +18,7 @@ from tracetool.transform import *
> import tracetool.vcpu
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disable" not in e.properties]
> diff --git a/scripts/tracetool/format/tcg_helper_wrapper_h.py b/scripts/tracetool/format/tcg_helper_wrapper_h.py
> index 020f442..ff53447 100644
> --- a/scripts/tracetool/format/tcg_helper_wrapper_h.py
> +++ b/scripts/tracetool/format/tcg_helper_wrapper_h.py
> @@ -18,7 +18,7 @@ from tracetool.transform import *
> import tracetool.vcpu
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disable" not in e.properties]
> diff --git a/scripts/tracetool/format/ust_events_c.py b/scripts/tracetool/format/ust_events_c.py
> index 9967c7a..cd87d8a 100644
> --- a/scripts/tracetool/format/ust_events_c.py
> +++ b/scripts/tracetool/format/ust_events_c.py
> @@ -16,7 +16,7 @@ __email__ = "stefanha@redhat.com"
> from tracetool import out
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disabled" not in e.properties]
> diff --git a/scripts/tracetool/format/ust_events_h.py b/scripts/tracetool/format/ust_events_h.py
> index 3e8a7cd..00b69d9 100644
> --- a/scripts/tracetool/format/ust_events_h.py
> +++ b/scripts/tracetool/format/ust_events_h.py
> @@ -16,7 +16,7 @@ __email__ = "stefanha@redhat.com"
> from tracetool import out
> -def generate(events, backend):
> +def generate(events, backend, group):
> events = [e for e in events
> if "disabled" not in e.properties]
> @@ -28,8 +28,8 @@ def generate(events, backend):
> '#undef TRACEPOINT_INCLUDE_FILE',
> '#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h',
> '',
> - '#if !defined (TRACE__GENERATED_UST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)',
> - '#define TRACE__GENERATED_UST_H',
> + '#if !defined (TRACE_%s_GENERATED_UST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)' % group.upper(),
> + '#define TRACE_%s_GENERATED_UST_H' % group.upper(),
> '',
> '#include "qemu-common.h"',
> '#include <lttng/tracepoint.h>',
> @@ -94,7 +94,7 @@ def generate(events, backend):
> '',
> name=e.name)
> - out('#endif /* TRACE__GENERATED_UST_H */',
> + out('#endif /* TRACE_%s_GENERATED_UST_H */' % group.upper(),
> '',
> '/* This part must be outside ifdef protection */',
> '#include <lttng/tracepoint-event.h>')
> --
> 2.7.4
next prev parent reply other threads:[~2016-09-19 18:27 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-19 14:48 [Qemu-devel] [PATCH v3 00/18] Refactor trace to allow modular build Daniel P. Berrange
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 01/18] trace: add trace event iterator APIs Daniel P. Berrange
2016-09-19 16:39 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 02/18] trace: convert code to use event iterators Daniel P. Berrange
2016-09-19 16:59 ` Lluís Vilanova
2016-09-20 13:13 ` Daniel P. Berrange
2016-09-20 13:36 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 03/18] trace: remove some now unused functions Daniel P. Berrange
2016-09-19 17:00 ` Lluís Vilanova
2016-09-19 17:24 ` Daniel P. Berrange
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 04/18] trace: remove global 'uint16 dstate[]' array Daniel P. Berrange
2016-09-19 15:55 ` Eric Blake
2016-09-19 17:05 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 05/18] trace: remove duplicate control.h includes in generated-tracers.h Daniel P. Berrange
2016-09-19 17:06 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 06/18] trace: break circular dependancy in event-internal.h Daniel P. Berrange
2016-09-19 17:08 ` Lluís Vilanova
2016-09-20 13:24 ` Daniel P. Berrange
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 07/18] trace: give each trace event a named TraceEvent struct Daniel P. Berrange
2016-09-19 17:17 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 08/18] trace: remove the TraceEventID and TraceEventVCPUID enums Daniel P. Berrange
2016-09-19 17:48 ` Lluís Vilanova
2016-09-20 13:29 ` Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 09/18] trace: emit name <-> ID mapping in simpletrace header Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 10/18] trace: don't abort qemu if ftrace can't be initialized Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 11/18] trace: provide mechanism for registering trace events Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 12/18] trace: dynamically allocate trace_dstate in CPUState Daniel P. Berrange
2016-09-19 17:58 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 13/18] trace: dynamically allocate event IDs at runtime Daniel P. Berrange
2016-09-19 18:05 ` Lluís Vilanova
2016-09-20 13:50 ` Daniel P. Berrange
2016-09-20 17:45 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 14/18] trace: get rid of generated-events.h/generated-events.c Daniel P. Berrange
2016-09-19 16:02 ` Eric Blake
2016-09-19 18:12 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 15/18] trace: rename _read_events to read_events Daniel P. Berrange
2016-09-19 18:15 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 16/18] trace: push reading of events up a level to tracetool main Daniel P. Berrange
2016-09-19 18:16 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 17/18] trace: pass trace-events to tracetool as a positional param Daniel P. Berrange
2016-09-19 18:18 ` Lluís Vilanova
2016-09-20 13:55 ` Daniel P. Berrange
2016-09-20 17:46 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 18/18] trace: introduce a formal group name for trace events Daniel P. Berrange
2016-09-19 18:27 ` Lluís Vilanova [this message]
2016-09-19 15:54 ` [Qemu-devel] [PATCH v3 00/18] Refactor trace to allow modular build no-reply
2016-09-19 16:00 ` Daniel P. Berrange
2016-09-19 17:13 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zin33fuv.fsf@fimbulvetr.bsc.es \
--to=vilanova@ac.upc.edu \
--cc=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.