From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Lluís Vilanova" <vilanova@ac.upc.edu>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Daniel P. Berrange" <berrange@redhat.com>
Subject: [Qemu-devel] [PATCH v5 13/20] trace: provide mechanism for registering trace events
Date: Wed, 28 Sep 2016 14:08:16 +0100 [thread overview]
Message-ID: <1475068103-356-14-git-send-email-berrange@redhat.com> (raw)
In-Reply-To: <1475068103-356-1-git-send-email-berrange@redhat.com>
Remove the notion of there being a single global array
of trace events, by introducing a method for registering
groups of events.
The module_call_init() needs to be invoked at the start
of any program that wants to make use of the trace
support. Currently this covers system emulators qemu-nbd,
qemu-img and qemu-io.
Reviewed-by: Lluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
include/qemu/module.h | 2 ++
qemu-img.c | 1 +
qemu-io.c | 1 +
qemu-nbd.c | 1 +
scripts/tracetool/format/events_c.py | 6 ++++++
trace/control-internal.h | 4 +++-
trace/control.c | 25 +++++++++++++++++++++++--
trace/control.h | 1 +
vl.c | 2 ++
9 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/include/qemu/module.h b/include/qemu/module.h
index dc2c9d4..877cca7 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -44,6 +44,7 @@ typedef enum {
MODULE_INIT_OPTS,
MODULE_INIT_QAPI,
MODULE_INIT_QOM,
+ MODULE_INIT_TRACE,
MODULE_INIT_MAX
} module_init_type;
@@ -51,6 +52,7 @@ typedef enum {
#define opts_init(function) module_init(function, MODULE_INIT_OPTS)
#define qapi_init(function) module_init(function, MODULE_INIT_QAPI)
#define type_init(function) module_init(function, MODULE_INIT_QOM)
+#define trace_init(function) module_init(function, MODULE_INIT_TRACE)
#define block_module_load_one(lib) module_load_one("block-", lib)
diff --git a/qemu-img.c b/qemu-img.c
index ceffefe..02c07b9 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -4165,6 +4165,7 @@ int main(int argc, char **argv)
signal(SIGPIPE, SIG_IGN);
#endif
+ module_call_init(MODULE_INIT_TRACE);
error_set_progname(argv[0]);
qemu_init_exec_dir(argv[0]);
diff --git a/qemu-io.c b/qemu-io.c
index db129ea..23a229f 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -467,6 +467,7 @@ int main(int argc, char **argv)
signal(SIGPIPE, SIG_IGN);
#endif
+ module_call_init(MODULE_INIT_TRACE);
progname = basename(argv[0]);
qemu_init_exec_dir(argv[0]);
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 99297a5..361880b 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -533,6 +533,7 @@ int main(int argc, char **argv)
sa_sigterm.sa_handler = termsig_handler;
sigaction(SIGTERM, &sa_sigterm, NULL);
+ module_call_init(MODULE_INIT_TRACE);
qcrypto_init(&error_fatal);
module_call_init(MODULE_INIT_QOM);
diff --git a/scripts/tracetool/format/events_c.py b/scripts/tracetool/format/events_c.py
index aff7c9a..5e14cf2 100644
--- a/scripts/tracetool/format/events_c.py
+++ b/scripts/tracetool/format/events_c.py
@@ -60,3 +60,9 @@ def generate(events, backend):
out(' NULL,',
'};',
'')
+
+ out('static void trace_register_events(void)',
+ '{',
+ ' trace_event_register_group(trace_events);',
+ '}',
+ 'trace_init(trace_register_events)')
diff --git a/trace/control-internal.h b/trace/control-internal.h
index 9abbc96..a9d395a 100644
--- a/trace/control-internal.h
+++ b/trace/control-internal.h
@@ -15,7 +15,6 @@
#include "qom/cpu.h"
-extern TraceEvent *trace_events[];
extern int trace_events_enabled_count;
@@ -83,4 +82,7 @@ static inline bool trace_event_get_vcpu_state_dynamic(CPUState *vcpu,
return trace_event_get_vcpu_state_dynamic_by_vcpu_id(vcpu, vcpu_id);
}
+
+void trace_event_register_group(TraceEvent **events);
+
#endif /* TRACE__CONTROL_INTERNAL_H */
diff --git a/trace/control.c b/trace/control.c
index 64aaede..7be654d 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -29,6 +29,13 @@
int trace_events_enabled_count;
+typedef struct TraceEventGroup {
+ TraceEvent **events;
+} TraceEventGroup;
+
+static TraceEventGroup *event_groups;
+static size_t nevent_groups;
+
QemuOptsList qemu_trace_opts = {
.name = "trace",
.implied_opt_name = "enable",
@@ -50,6 +57,14 @@ QemuOptsList qemu_trace_opts = {
};
+void trace_event_register_group(TraceEvent **events)
+{
+ event_groups = g_renew(TraceEventGroup, event_groups, nevent_groups + 1);
+ event_groups[nevent_groups].events = events;
+ nevent_groups++;
+}
+
+
TraceEvent *trace_event_name(const char *name)
{
assert(name != NULL);
@@ -100,14 +115,20 @@ static bool pattern_glob(const char *pat, const char *ev)
void trace_event_iter_init(TraceEventIter *iter, const char *pattern)
{
iter->event = 0;
+ iter->group = 0;
iter->pattern = pattern;
}
TraceEvent *trace_event_iter_next(TraceEventIter *iter)
{
- while (trace_events[iter->event] != NULL) {
- TraceEvent *ev = trace_events[iter->event];
+ while (iter->group < nevent_groups &&
+ event_groups[iter->group].events[iter->event] != NULL) {
+ TraceEvent *ev = event_groups[iter->group].events[iter->event];
iter->event++;
+ if (event_groups[iter->group].events[iter->event] == NULL) {
+ iter->event = 0;
+ iter->group++;
+ }
if (!iter->pattern ||
pattern_glob(iter->pattern,
trace_event_get_name(ev))) {
diff --git a/trace/control.h b/trace/control.h
index b33e1a3..f241c7f 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -15,6 +15,7 @@
typedef struct TraceEventIter {
size_t event;
+ size_t group;
const char *pattern;
} TraceEventIter;
diff --git a/vl.c b/vl.c
index eafda8d..37cab82 100644
--- a/vl.c
+++ b/vl.c
@@ -3019,6 +3019,8 @@ int main(int argc, char **argv, char **envp)
Error *err = NULL;
bool list_data_dirs = false;
+ module_call_init(MODULE_INIT_TRACE);
+
qemu_init_cpu_loop();
qemu_mutex_lock_iothread();
--
2.7.4
next prev parent reply other threads:[~2016-09-28 13:08 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-28 13:08 [Qemu-devel] [PATCH v5 00/20] Refactor trace to allow modular build Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 01/20] trace: move colo trace events to net/ sub-directory Daniel P. Berrange
2016-10-03 13:25 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 02/20] trace: remove double-underscore in event name Daniel P. Berrange
2016-09-28 13:25 ` Lluís Vilanova
2016-10-03 13:25 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 03/20] trace: add trace event iterator APIs Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 04/20] trace: convert code to use event iterators Daniel P. Berrange
2016-09-30 14:00 ` Lluís Vilanova
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 05/20] trace: remove some now unused functions Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 06/20] trace: remove global 'uint16 dstate[]' array Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 07/20] trace: remove duplicate control.h includes in generated-tracers.h Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 08/20] trace: break circular dependency in event-internal.h Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 09/20] trace: give each trace event a named TraceEvent struct Daniel P. Berrange
2016-09-30 14:09 ` Lluís Vilanova
2016-10-03 13:27 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 10/20] trace: remove the TraceEventID and TraceEventVCPUID enums Daniel P. Berrange
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 11/20] trace: emit name <-> ID mapping in simpletrace header Daniel P. Berrange
2016-10-03 13:57 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 12/20] trace: don't abort qemu if ftrace can't be initialized Daniel P. Berrange
2016-10-03 13:59 ` Stefan Hajnoczi
2016-10-04 9:07 ` Daniel P. Berrange
2016-09-28 13:08 ` Daniel P. Berrange [this message]
2016-10-03 14:02 ` [Qemu-devel] [PATCH v5 13/20] trace: provide mechanism for registering trace events Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 14/20] trace: dynamically allocate trace_dstate in CPUState Daniel P. Berrange
2016-09-30 14:17 ` Lluís Vilanova
2016-10-03 14:04 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 15/20] trace: dynamically allocate event IDs at runtime Daniel P. Berrange
2016-10-03 14:21 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 16/20] trace: get rid of generated-events.h/generated-events.c Daniel P. Berrange
2016-10-03 14:38 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 17/20] trace: rename _read_events to read_events Daniel P. Berrange
2016-10-03 14:39 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 18/20] trace: push reading of events up a level to tracetool main Daniel P. Berrange
2016-10-03 14:39 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 19/20] trace: pass trace-events to tracetool as a positional param Daniel P. Berrange
2016-10-03 14:41 ` Stefan Hajnoczi
2016-09-28 13:08 ` [Qemu-devel] [PATCH v5 20/20] trace: introduce a formal group name for trace events Daniel P. Berrange
2016-09-30 14:36 ` Lluís Vilanova
2016-10-03 14:43 ` Stefan Hajnoczi
2016-10-03 14:44 ` [Qemu-devel] [PATCH v5 00/20] Refactor trace to allow modular build Stefan Hajnoczi
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=1475068103-356-14-git-send-email-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vilanova@ac.upc.edu \
/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.