* [Qemu-devel] [PATCH 1/9] trace: fix documentation
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
@ 2015-10-25 13:32 ` Paolo Bonzini
2015-10-25 13:32 ` [Qemu-devel] [PATCH 2/9] trace: split trace_init_events out of trace_init_backends Paolo Bonzini
` (10 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:32 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Mention the ftrace backend too.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qemu-options.hx | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/qemu-options.hx b/qemu-options.hx
index edee5f4..71296da 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3484,13 +3484,13 @@ Specify tracing options.
@table @option
@item events=@var{file}
Immediately enable events listed in @var{file}.
-The file must contain one event name (as listed in the @var{trace-events} file)
-per line.
-This option is only available if QEMU has been compiled with
-either @var{simple} or @var{stderr} tracing backend.
+The file must contain one event name (as listed in the @file{trace-events} file)
+per line; globbing patterns are accepted too. This option is only
+available if QEMU has been compiled with the @var{simple}, @var{stderr} or
+@var{ftrace} tracing backend.
+
@item file=@var{file}
Log output traces to @var{file}.
-
This option is only available if QEMU has been compiled with
the @var{simple} tracing backend.
@end table
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 2/9] trace: split trace_init_events out of trace_init_backends
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
2015-10-25 13:32 ` [Qemu-devel] [PATCH 1/9] trace: fix documentation Paolo Bonzini
@ 2015-10-25 13:32 ` Paolo Bonzini
2015-10-25 13:32 ` [Qemu-devel] [PATCH 3/9] trace: split trace_init_file " Paolo Bonzini
` (9 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:32 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
This is cleaner and has two advantages. First, it improves error
reporting with -daemonize. Second, multiple "-trace events" options
now cumulate.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
trace/control.c | 5 ++---
trace/control.h | 15 ++++++++++++---
vl.c | 8 ++++----
3 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/trace/control.c b/trace/control.c
index 995beb3..ee5fbca 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -85,7 +85,7 @@ TraceEvent *trace_event_pattern(const char *pat, TraceEvent *ev)
return NULL;
}
-static void trace_init_events(const char *fname)
+void trace_init_events(const char *fname)
{
Location loc;
FILE *fp;
@@ -142,7 +142,7 @@ static void trace_init_events(const char *fname)
loc_pop(&loc);
}
-bool trace_init_backends(const char *events, const char *file)
+bool trace_init_backends(const char *file)
{
#ifdef CONFIG_TRACE_SIMPLE
if (!st_init(file)) {
@@ -164,6 +164,5 @@ bool trace_init_backends(const char *events, const char *file)
}
#endif
- trace_init_events(events);
return true;
}
diff --git a/trace/control.h b/trace/control.h
index da9bb6b..bfbe560 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -150,8 +150,6 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
/**
* trace_init_backends:
- * @events: Name of file with events to be enabled at startup; may be NULL.
- * Corresponds to commandline option "-trace events=...".
* @file: Name of trace output file; may be NULL.
* Corresponds to commandline option "-trace file=...".
*
@@ -159,7 +157,18 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
*
* Returns: Whether the backends could be successfully initialized.
*/
-bool trace_init_backends(const char *events, const char *file);
+bool trace_init_backends(const char *file);
+
+/**
+ * trace_init_events:
+ * @events: Name of file with events to be enabled at startup; may be NULL.
+ * Corresponds to commandline option "-trace events=...".
+ *
+ * Read the list of enabled tracing events.
+ *
+ * Returns: Whether the backends could be successfully initialized.
+ */
+void trace_init_events(const char *file);
#include "trace/control-internal.h"
diff --git a/vl.c b/vl.c
index dffaf09..ba29fef 100644
--- a/vl.c
+++ b/vl.c
@@ -2956,7 +2956,6 @@ int main(int argc, char **argv, char **envp)
bool userconfig = true;
const char *log_mask = NULL;
const char *log_file = NULL;
- const char *trace_events = NULL;
const char *trace_file = NULL;
ram_addr_t maxram_size;
uint64_t ram_slots = 0;
@@ -3881,8 +3880,9 @@ int main(int argc, char **argv, char **envp)
if (!opts) {
exit(1);
}
- trace_events = qemu_opt_get(opts, "events");
+ trace_init_events(qemu_opt_get(opts, "events"));
trace_file = qemu_opt_get(opts, "file");
+ qemu_opts_del(opts);
break;
}
case QEMU_OPTION_readconfig:
@@ -4079,7 +4079,7 @@ int main(int argc, char **argv, char **envp)
}
if (!is_daemonized()) {
- if (!trace_init_backends(trace_events, trace_file)) {
+ if (!trace_init_backends(trace_file)) {
exit(1);
}
}
@@ -4631,7 +4631,7 @@ int main(int argc, char **argv, char **envp)
os_setup_post();
if (is_daemonized()) {
- if (!trace_init_backends(trace_events, trace_file)) {
+ if (!trace_init_backends(trace_file)) {
exit(1);
}
}
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 3/9] trace: split trace_init_file out of trace_init_backends
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
2015-10-25 13:32 ` [Qemu-devel] [PATCH 1/9] trace: fix documentation Paolo Bonzini
2015-10-25 13:32 ` [Qemu-devel] [PATCH 2/9] trace: split trace_init_events out of trace_init_backends Paolo Bonzini
@ 2015-10-25 13:32 ` Paolo Bonzini
2015-10-26 1:03 ` Christian Borntraeger
2015-10-25 13:32 ` [Qemu-devel] [PATCH 4/9] trace: add "-trace enable=..." Paolo Bonzini
` (8 subsequent siblings)
11 siblings, 1 reply; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:32 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
This is cleaner, and improves error reporting with -daemonize.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
trace/control.c | 17 ++++++++++++-----
trace/control.h | 13 ++++++++++++-
trace/simple.c | 6 ++----
trace/simple.h | 4 ++--
vl.c | 13 +++++++++----
5 files changed, 37 insertions(+), 16 deletions(-)
diff --git a/trace/control.c b/trace/control.c
index ee5fbca..3e33d03 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -142,17 +142,24 @@ void trace_init_events(const char *fname)
loc_pop(&loc);
}
-bool trace_init_backends(const char *file)
+void trace_init_file(const char *file)
{
#ifdef CONFIG_TRACE_SIMPLE
- if (!st_init(file)) {
- fprintf(stderr, "failed to initialize simple tracing backend.\n");
- return false;
- }
+ st_set_trace_file(file);
#else
if (file) {
fprintf(stderr, "error: -trace file=...: "
"option not supported by the selected tracing backends\n");
+ exit(1);
+ }
+#endif
+}
+
+bool trace_init_backends(void)
+{
+#ifdef CONFIG_TRACE_SIMPLE
+ if (!st_init()) {
+ fprintf(stderr, "failed to initialize simple tracing backend.\n");
return false;
}
#endif
diff --git a/trace/control.h b/trace/control.h
index bfbe560..d2506d4 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -157,7 +157,7 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
*
* Returns: Whether the backends could be successfully initialized.
*/
-bool trace_init_backends(const char *file);
+bool trace_init_backends(void);
/**
* trace_init_events:
@@ -170,6 +170,17 @@ bool trace_init_backends(const char *file);
*/
void trace_init_events(const char *file);
+/**
+ * trace_init_file:
+ * @file: Name of trace output file; may be NULL.
+ * Corresponds to commandline option "-trace file=...".
+ *
+ * Record the name of the output file for the tracing backend.
+ * Exits if no selected backend does not support specifying the
+ * output file, and a non-NULL file was passed.
+ */
+void trace_init_file(const char *file);
+
#include "trace/control-internal.h"
diff --git a/trace/simple.c b/trace/simple.c
index 11ad030..a4bc705 100644
--- a/trace/simple.c
+++ b/trace/simple.c
@@ -322,7 +322,7 @@ void st_set_trace_file_enabled(bool enable)
* @file The trace file name or NULL for the default name-<pid> set at
* config time
*/
-bool st_set_trace_file(const char *file)
+void st_set_trace_file(const char *file)
{
st_set_trace_file_enabled(false);
@@ -335,7 +335,6 @@ bool st_set_trace_file(const char *file)
}
st_set_trace_file_enabled(true);
- return true;
}
void st_print_trace_file_status(FILE *stream, int (*stream_printf)(FILE *stream, const char *fmt, ...))
@@ -373,7 +372,7 @@ static GThread *trace_thread_create(GThreadFunc fn)
return thread;
}
-bool st_init(const char *file)
+bool st_init(void)
{
GThread *thread;
@@ -386,6 +385,5 @@ bool st_init(const char *file)
}
atexit(st_flush_trace_buffer);
- st_set_trace_file(file);
return true;
}
diff --git a/trace/simple.h b/trace/simple.h
index 6997996..8d1a32e 100644
--- a/trace/simple.h
+++ b/trace/simple.h
@@ -20,8 +20,8 @@
void st_print_trace_file_status(FILE *stream, fprintf_function stream_printf);
void st_set_trace_file_enabled(bool enable);
-bool st_set_trace_file(const char *file);
-bool st_init(const char *file);
+void st_set_trace_file(const char *file);
+bool st_init(void);
void st_flush_trace_buffer(void);
typedef struct {
diff --git a/vl.c b/vl.c
index ba29fef..b1ddd3f 100644
--- a/vl.c
+++ b/vl.c
@@ -2956,7 +2956,7 @@ int main(int argc, char **argv, char **envp)
bool userconfig = true;
const char *log_mask = NULL;
const char *log_file = NULL;
- const char *trace_file = NULL;
+ char *trace_file = NULL;
ram_addr_t maxram_size;
uint64_t ram_slots = 0;
FILE *vmstate_dump_file = NULL;
@@ -3881,7 +3881,10 @@ int main(int argc, char **argv, char **envp)
exit(1);
}
trace_init_events(qemu_opt_get(opts, "events"));
- trace_file = qemu_opt_get(opts, "file");
+ if (trace_file) {
+ g_free(trace_file);
+ }
+ trace_file = g_strdup(qemu_opt_get(opts, "file"));
qemu_opts_del(opts);
break;
}
@@ -4062,6 +4065,8 @@ int main(int argc, char **argv, char **envp)
exit(0);
}
+ trace_init_file(trace_file);
+
/* Open the logfile at this point and set the log mask if necessary.
*/
if (log_file) {
@@ -4079,7 +4084,7 @@ int main(int argc, char **argv, char **envp)
}
if (!is_daemonized()) {
- if (!trace_init_backends(trace_file)) {
+ if (!trace_init_backends()) {
exit(1);
}
}
@@ -4631,7 +4636,7 @@ int main(int argc, char **argv, char **envp)
os_setup_post();
if (is_daemonized()) {
- if (!trace_init_backends(trace_file)) {
+ if (!trace_init_backends()) {
exit(1);
}
}
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 3/9] trace: split trace_init_file out of trace_init_backends
2015-10-25 13:32 ` [Qemu-devel] [PATCH 3/9] trace: split trace_init_file " Paolo Bonzini
@ 2015-10-26 1:03 ` Christian Borntraeger
0 siblings, 0 replies; 15+ messages in thread
From: Christian Borntraeger @ 2015-10-26 1:03 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Am 25.10.2015 um 22:32 schrieb Paolo Bonzini:
> diff --git a/trace/control.h b/trace/control.h
> index bfbe560..d2506d4 100644
> --- a/trace/control.h
> +++ b/trace/control.h
> @@ -157,7 +157,7 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
> *
> * Returns: Whether the backends could be successfully initialized.
> */
> -bool trace_init_backends(const char *file);
> +bool trace_init_backends(void);
>
> /**
> * trace_init_events:
This (and the patch before) break qemu-io:
/home/cborntra/REPOS/qemu/qemu-io.c: In function 'main':
/home/cborntra/REPOS/qemu/qemu-io.c:443:18: error: too many arguments to function 'trace_init_backends'
if (!trace_init_backends(optarg, NULL)) {
^
In file included from /home/cborntra/REPOS/qemu/qemu-io.c:26:0:
/home/cborntra/REPOS/qemu/trace/control.h:160:6: note: declared here
bool trace_init_backends(void);
^
/home/cborntra/REPOS/qemu/rules.mak:57: recipe for target 'qemu-io.o' failed
Christian
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 4/9] trace: add "-trace enable=..."
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (2 preceding siblings ...)
2015-10-25 13:32 ` [Qemu-devel] [PATCH 3/9] trace: split trace_init_file " Paolo Bonzini
@ 2015-10-25 13:32 ` Paolo Bonzini
2015-10-25 13:32 ` [Qemu-devel] [PATCH 5/9] trace: add "-trace help" Paolo Bonzini
` (7 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:32 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Allow enabling events without going through a file, for example:
qemu-system-x86_64 -trace bdrv_aio_writev -trace bdrv_aio_readv
or with globbing too:
qemu-system-x86_64 -trace 'bdrv_aio_*'
if an appropriate backend is enabled (simple, stderr, ftrace).
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qemu-options.hx | 10 +++++++++-
trace/control.c | 48 +++++++++++++++++++++++++++---------------------
trace/control.h | 9 +++++++++
vl.c | 11 +++++++++--
4 files changed, 54 insertions(+), 24 deletions(-)
diff --git a/qemu-options.hx b/qemu-options.hx
index 71296da..6613911 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3470,7 +3470,7 @@ config files on @var{sysconfdir}, but won't make it skip the QEMU-provided confi
files from @var{datadir}.
ETEXI
DEF("trace", HAS_ARG, QEMU_OPTION_trace,
- "-trace [events=<file>][,file=<file>]\n"
+ "-trace [[enable=]<pattern>][,events=<file>][,file=<file>]\n"
" specify tracing options\n",
QEMU_ARCH_ALL)
STEXI
@@ -3482,6 +3482,14 @@ HXCOMM HX does not support conditional compilation of text.
Specify tracing options.
@table @option
+@item [enable=]@var{pattern}
+Immediately enable events matching @var{pattern}.
+The file must contain one event name (as listed in the @file{trace-events} file)
+per line; globbing patterns are accepted too. This option is only
+available if QEMU has been compiled with the @var{simple}, @var{stderr}
+or @var{ftrace} tracing backend. To specify multiple events or patterns,
+specify the @option{-trace} option multiple times.
+
@item events=@var{file}
Immediately enable events listed in @var{file}.
The file must contain one event name (as listed in the @file{trace-events} file)
diff --git a/trace/control.c b/trace/control.c
index 3e33d03..715b5b7 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -85,6 +85,32 @@ TraceEvent *trace_event_pattern(const char *pat, TraceEvent *ev)
return NULL;
}
+void trace_enable_events(const char *line_buf)
+{
+ const bool enable = ('-' != line_buf[0]);
+ const char *line_ptr = enable ? line_buf : line_buf + 1;
+
+ if (trace_event_is_pattern(line_ptr)) {
+ TraceEvent *ev = NULL;
+ while ((ev = trace_event_pattern(line_ptr, ev)) != NULL) {
+ if (trace_event_get_state_static(ev)) {
+ trace_event_set_state_dynamic(ev, enable);
+ }
+ }
+ } else {
+ TraceEvent *ev = trace_event_name(line_ptr);
+ if (ev == NULL) {
+ error_report("WARNING: trace event '%s' does not exist",
+ line_ptr);
+ } else if (!trace_event_get_state_static(ev)) {
+ error_report("WARNING: trace event '%s' is not traceable",
+ line_ptr);
+ } else {
+ trace_event_set_state_dynamic(ev, enable);
+ }
+ }
+}
+
void trace_init_events(const char *fname)
{
Location loc;
@@ -111,27 +137,7 @@ void trace_init_events(const char *fname)
if ('#' == line_buf[0]) { /* skip commented lines */
continue;
}
- const bool enable = ('-' != line_buf[0]);
- char *line_ptr = enable ? line_buf : line_buf + 1;
- if (trace_event_is_pattern(line_ptr)) {
- TraceEvent *ev = NULL;
- while ((ev = trace_event_pattern(line_ptr, ev)) != NULL) {
- if (trace_event_get_state_static(ev)) {
- trace_event_set_state_dynamic(ev, enable);
- }
- }
- } else {
- TraceEvent *ev = trace_event_name(line_ptr);
- if (ev == NULL) {
- error_report("WARNING: trace event '%s' does not exist",
- line_ptr);
- } else if (!trace_event_get_state_static(ev)) {
- error_report("WARNING: trace event '%s' is not traceable",
- line_ptr);
- } else {
- trace_event_set_state_dynamic(ev, enable);
- }
- }
+ trace_enable_events(line_buf);
}
}
if (fclose(fp) != 0) {
diff --git a/trace/control.h b/trace/control.h
index d2506d4..32a66ce 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -181,6 +181,15 @@ void trace_init_events(const char *file);
*/
void trace_init_file(const char *file);
+/**
+ * trace_enable_events:
+ * @line_buf: A string with a glob pattern of events to be enabled or,
+ * if the string starts with '-', disabled.
+ *
+ * Enable or disable matching events.
+ */
+void trace_enable_events(const char *line_buf);
+
#include "trace/control-internal.h"
diff --git a/vl.c b/vl.c
index b1ddd3f..a465f69 100644
--- a/vl.c
+++ b/vl.c
@@ -269,10 +269,14 @@ static QemuOptsList qemu_sandbox_opts = {
static QemuOptsList qemu_trace_opts = {
.name = "trace",
- .implied_opt_name = "trace",
+ .implied_opt_name = "enable",
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
.desc = {
{
+ .name = "enable",
+ .type = QEMU_OPT_STRING,
+ },
+ {
.name = "events",
.type = QEMU_OPT_STRING,
},{
@@ -3876,10 +3880,13 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_trace:
{
opts = qemu_opts_parse_noisily(qemu_find_opts("trace"),
- optarg, false);
+ optarg, true);
if (!opts) {
exit(1);
}
+ if (qemu_opt_get(opts, "enable")) {
+ trace_enable_events(qemu_opt_get(opts, "enable"));
+ }
trace_init_events(qemu_opt_get(opts, "events"));
if (trace_file) {
g_free(trace_file);
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 5/9] trace: add "-trace help"
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (3 preceding siblings ...)
2015-10-25 13:32 ` [Qemu-devel] [PATCH 4/9] trace: add "-trace enable=..." Paolo Bonzini
@ 2015-10-25 13:32 ` Paolo Bonzini
2015-10-25 13:35 ` [Qemu-devel] [PATCH 6/9] log: do not unnecessarily include qom/cpu.h Paolo Bonzini
` (6 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:32 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Print a list of trace points
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qemu-options.hx | 2 ++
trace/control.c | 21 ++++++++++++++++++++-
trace/control.h | 7 +++++++
3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/qemu-options.hx b/qemu-options.hx
index 6613911..6729a72 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3490,6 +3490,8 @@ available if QEMU has been compiled with the @var{simple}, @var{stderr}
or @var{ftrace} tracing backend. To specify multiple events or patterns,
specify the @option{-trace} option multiple times.
+Use @code{-trace help} to print a list of names of trace points.
+
@item events=@var{file}
Immediately enable events listed in @var{file}.
The file must contain one event name (as listed in the @file{trace-events} file)
diff --git a/trace/control.c b/trace/control.c
index 715b5b7..7c84795 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -85,7 +85,16 @@ TraceEvent *trace_event_pattern(const char *pat, TraceEvent *ev)
return NULL;
}
-void trace_enable_events(const char *line_buf)
+void trace_list_events(void)
+{
+ int i;
+ for (i = 0; i < trace_event_count(); i++) {
+ TraceEvent *res = trace_event_id(i);
+ fprintf(stderr, "%s\n", trace_event_get_name(res));
+ }
+}
+
+static void do_trace_enable_events(const char *line_buf)
{
const bool enable = ('-' != line_buf[0]);
const char *line_ptr = enable ? line_buf : line_buf + 1;
@@ -111,6 +120,16 @@ void trace_enable_events(const char *line_buf)
}
}
+void trace_enable_events(const char *line_buf)
+{
+ if (is_help_option(line_buf)) {
+ trace_list_events();
+ exit(0);
+ } else {
+ do_trace_enable_events(line_buf);
+ }
+}
+
void trace_init_events(const char *fname)
{
Location loc;
diff --git a/trace/control.h b/trace/control.h
index 32a66ce..3707b3b 100644
--- a/trace/control.h
+++ b/trace/control.h
@@ -182,6 +182,13 @@ void trace_init_events(const char *file);
void trace_init_file(const char *file);
/**
+ * trace_list_events:
+ *
+ * List all available events.
+ */
+void trace_list_events(void);
+
+/**
* trace_enable_events:
* @line_buf: A string with a glob pattern of events to be enabled or,
* if the string starts with '-', disabled.
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 6/9] log: do not unnecessarily include qom/cpu.h
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (4 preceding siblings ...)
2015-10-25 13:32 ` [Qemu-devel] [PATCH 5/9] trace: add "-trace help" Paolo Bonzini
@ 2015-10-25 13:35 ` Paolo Bonzini
2015-10-25 13:35 ` [Qemu-devel] [PATCH 7/9] trace: convert stderr backend to log Paolo Bonzini
` (5 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:35 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Split the bits that require it to exec/log.h.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
bsd-user/main.c | 1 +
cpu-exec.c | 1 +
exec.c | 1 +
hw/acpi/cpu_hotplug.c | 1 +
hw/timer/a9gtimer.c | 1 +
include/exec/log.h | 60 +++++++++++++++++++++++++++++++++++++++++++
include/qemu/log.h | 59 ------------------------------------------
linux-user/main.c | 1 +
qom/cpu.c | 1 +
target-alpha/translate.c | 1 +
target-arm/translate.c | 1 +
target-cris/translate.c | 1 +
target-i386/seg_helper.c | 1 +
target-i386/smm_helper.c | 1 +
target-i386/translate.c | 1 +
target-lm32/helper.c | 1 +
target-lm32/translate.c | 1 +
target-m68k/translate.c | 1 +
target-microblaze/helper.c | 1 +
target-microblaze/translate.c | 1 +
target-mips/helper.c | 1 +
target-mips/translate.c | 1 +
target-moxie/translate.c | 1 +
target-openrisc/translate.c | 1 +
target-ppc/mmu-hash32.c | 1 +
target-ppc/mmu-hash64.c | 1 +
target-ppc/mmu_helper.c | 1 +
target-ppc/translate.c | 1 +
target-s390x/translate.c | 1 +
target-sh4/helper.c | 1 +
target-sh4/translate.c | 1 +
target-sparc/int32_helper.c | 1 +
target-sparc/int64_helper.c | 1 +
target-sparc/translate.c | 1 +
target-tilegx/translate.c | 1 +
target-tricore/translate.c | 1 +
target-unicore32/translate.c | 1 +
target-xtensa/translate.c | 1 +
tcg/tcg.c | 1 +
translate-all.c | 1 +
40 files changed, 98 insertions(+), 59 deletions(-)
create mode 100644 include/exec/log.h
diff --git a/bsd-user/main.c b/bsd-user/main.c
index adf2de0..520ce99 100644
--- a/bsd-user/main.c
+++ b/bsd-user/main.c
@@ -33,6 +33,7 @@
#include "tcg.h"
#include "qemu/timer.h"
#include "qemu/envlist.h"
+#include "exec/log.h"
int singlestep;
unsigned long mmap_min_addr;
diff --git a/cpu-exec.c b/cpu-exec.c
index 7eef083..564a21d 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -27,6 +27,7 @@
#include "exec/address-spaces.h"
#include "qemu/rcu.h"
#include "exec/tb-hash.h"
+#include "exec/log.h"
#if defined(TARGET_I386) && !defined(CONFIG_USER_ONLY)
#include "hw/i386/apic.h"
#endif
diff --git a/exec.c b/exec.c
index 8af2570..87636a6 100644
--- a/exec.c
+++ b/exec.c
@@ -53,6 +53,7 @@
#include "exec/memory-internal.h"
#include "exec/ram_addr.h"
+#include "exec/log.h"
#include "qemu/range.h"
#ifndef _WIN32
diff --git a/hw/acpi/cpu_hotplug.c b/hw/acpi/cpu_hotplug.c
index f5b9972..16bacfc 100644
--- a/hw/acpi/cpu_hotplug.c
+++ b/hw/acpi/cpu_hotplug.c
@@ -11,6 +11,7 @@
*/
#include "hw/hw.h"
#include "hw/acpi/cpu_hotplug.h"
+#include "qom/cpu.h"
static uint64_t cpu_status_read(void *opaque, hwaddr addr, unsigned int size)
{
diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c
index dd4aae8..b38c76a 100644
--- a/hw/timer/a9gtimer.c
+++ b/hw/timer/a9gtimer.c
@@ -24,6 +24,7 @@
#include "qemu/timer.h"
#include "qemu/bitops.h"
#include "qemu/log.h"
+#include "qom/cpu.h"
#ifndef A9_GTIMER_ERR_DEBUG
#define A9_GTIMER_ERR_DEBUG 0
diff --git a/include/exec/log.h b/include/exec/log.h
new file mode 100644
index 0000000..ba1c9b5
--- /dev/null
+++ b/include/exec/log.h
@@ -0,0 +1,60 @@
+#ifndef QEMU_EXEC_LOG_H
+#define QEMU_EXEC_LOG_H
+
+#include "qemu/log.h"
+#include "qom/cpu.h"
+#include "disas/disas.h"
+
+/* cpu_dump_state() logging functions: */
+/**
+ * log_cpu_state:
+ * @cpu: The CPU whose state is to be logged.
+ * @flags: Flags what to log.
+ *
+ * Logs the output of cpu_dump_state().
+ */
+static inline void log_cpu_state(CPUState *cpu, int flags)
+{
+ if (qemu_log_enabled()) {
+ cpu_dump_state(cpu, qemu_logfile, fprintf, flags);
+ }
+}
+
+/**
+ * log_cpu_state_mask:
+ * @mask: Mask when to log.
+ * @cpu: The CPU whose state is to be logged.
+ * @flags: Flags what to log.
+ *
+ * Logs the output of cpu_dump_state() if loglevel includes @mask.
+ */
+static inline void log_cpu_state_mask(int mask, CPUState *cpu, int flags)
+{
+ if (qemu_loglevel & mask) {
+ log_cpu_state(cpu, flags);
+ }
+}
+
+#ifdef NEED_CPU_H
+/* disas() and target_disas() to qemu_logfile: */
+static inline void log_target_disas(CPUState *cpu, target_ulong start,
+ target_ulong len, int flags)
+{
+ target_disas(qemu_logfile, cpu, start, len, flags);
+}
+
+static inline void log_disas(void *code, unsigned long size)
+{
+ disas(qemu_logfile, code, size);
+}
+
+#if defined(CONFIG_USER_ONLY)
+/* page_dump() output to the log file: */
+static inline void log_page_dump(void)
+{
+ page_dump(qemu_logfile);
+}
+#endif
+#endif
+
+#endif
diff --git a/include/qemu/log.h b/include/qemu/log.h
index 7de4500..ed57a3d 100644
--- a/include/qemu/log.h
+++ b/include/qemu/log.h
@@ -5,10 +5,6 @@
#include <stdbool.h>
#include <stdio.h>
#include "qemu/compiler.h"
-#include "qom/cpu.h"
-#ifdef NEED_CPU_H
-#include "disas/disas.h"
-#endif
/* Private global variables, don't use */
extern FILE *qemu_logfile;
@@ -71,61 +67,6 @@ qemu_log_vprintf(const char *fmt, va_list va)
void GCC_FMT_ATTR(2, 3) qemu_log_mask(int mask, const char *fmt, ...);
-/* Special cases: */
-
-/* cpu_dump_state() logging functions: */
-/**
- * log_cpu_state:
- * @cpu: The CPU whose state is to be logged.
- * @flags: Flags what to log.
- *
- * Logs the output of cpu_dump_state().
- */
-static inline void log_cpu_state(CPUState *cpu, int flags)
-{
- if (qemu_log_enabled()) {
- cpu_dump_state(cpu, qemu_logfile, fprintf, flags);
- }
-}
-
-/**
- * log_cpu_state_mask:
- * @mask: Mask when to log.
- * @cpu: The CPU whose state is to be logged.
- * @flags: Flags what to log.
- *
- * Logs the output of cpu_dump_state() if loglevel includes @mask.
- */
-static inline void log_cpu_state_mask(int mask, CPUState *cpu, int flags)
-{
- if (qemu_loglevel & mask) {
- log_cpu_state(cpu, flags);
- }
-}
-
-#ifdef NEED_CPU_H
-/* disas() and target_disas() to qemu_logfile: */
-static inline void log_target_disas(CPUState *cpu, target_ulong start,
- target_ulong len, int flags)
-{
- target_disas(qemu_logfile, cpu, start, len, flags);
-}
-
-static inline void log_disas(void *code, unsigned long size)
-{
- disas(qemu_logfile, code, size);
-}
-
-#if defined(CONFIG_USER_ONLY)
-/* page_dump() output to the log file: */
-static inline void log_page_dump(void)
-{
- page_dump(qemu_logfile);
-}
-#endif
-#endif
-
-
/* Maintenance: */
/* fflush() the log file */
diff --git a/linux-user/main.c b/linux-user/main.c
index 8acfe0f..8430fb8 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -33,6 +33,7 @@
#include "qemu/timer.h"
#include "qemu/envlist.h"
#include "elf.h"
+#include "exec/log.h"
char *exec_path;
diff --git a/qom/cpu.c b/qom/cpu.c
index fb80d13..ce7dfa2 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -23,6 +23,7 @@
#include "sysemu/kvm.h"
#include "qemu/notify.h"
#include "qemu/log.h"
+#include "exec/log.h"
#include "qemu/error-report.h"
#include "sysemu/sysemu.h"
diff --git a/target-alpha/translate.c b/target-alpha/translate.c
index f936d1b..a3c021c 100644
--- a/target-alpha/translate.c
+++ b/target-alpha/translate.c
@@ -27,6 +27,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#undef ALPHA_DEBUG_DISAS
diff --git a/target-arm/translate.c b/target-arm/translate.c
index 9f1d740..f29d68c 100644
--- a/target-arm/translate.c
+++ b/target-arm/translate.c
@@ -36,6 +36,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define ENABLE_ARCH_4T arm_dc_feature(s, ARM_FEATURE_V4T)
diff --git a/target-cris/translate.c b/target-cris/translate.c
index 964845c..f188616 100644
--- a/target-cris/translate.c
+++ b/target-cris/translate.c
@@ -34,6 +34,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define DISAS_CRIS 0
diff --git a/target-i386/seg_helper.c b/target-i386/seg_helper.c
index 20ee892..e55694f 100644
--- a/target-i386/seg_helper.c
+++ b/target-i386/seg_helper.c
@@ -22,6 +22,7 @@
#include "qemu/log.h"
#include "exec/helper-proto.h"
#include "exec/cpu_ldst.h"
+#include "exec/log.h"
//#define DEBUG_PCALL
diff --git a/target-i386/smm_helper.c b/target-i386/smm_helper.c
index c272a98..1ab6637 100644
--- a/target-i386/smm_helper.c
+++ b/target-i386/smm_helper.c
@@ -19,6 +19,7 @@
#include "cpu.h"
#include "exec/helper-proto.h"
+#include "exec/log.h"
/* SMM support */
diff --git a/target-i386/translate.c b/target-i386/translate.c
index 764b1e4..070cdf3 100644
--- a/target-i386/translate.c
+++ b/target-i386/translate.c
@@ -32,6 +32,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define PREFIX_REPZ 0x01
diff --git a/target-lm32/helper.c b/target-lm32/helper.c
index e26c133..978b99f 100644
--- a/target-lm32/helper.c
+++ b/target-lm32/helper.c
@@ -21,6 +21,7 @@
#include "qemu/host-utils.h"
#include "sysemu/sysemu.h"
#include "exec/semihost.h"
+#include "exec/log.h"
int lm32_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int rw,
int mmu_idx)
diff --git a/target-lm32/translate.c b/target-lm32/translate.c
index c61ad0f..d5fff95 100644
--- a/target-lm32/translate.c
+++ b/target-lm32/translate.c
@@ -28,6 +28,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define DISAS_LM32 1
diff --git a/target-m68k/translate.c b/target-m68k/translate.c
index 5995cce..a287b94 100644
--- a/target-m68k/translate.c
+++ b/target-m68k/translate.c
@@ -28,6 +28,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
//#define DEBUG_DISPATCH 1
diff --git a/target-microblaze/helper.c b/target-microblaze/helper.c
index 8257b0e..ee65245 100644
--- a/target-microblaze/helper.c
+++ b/target-microblaze/helper.c
@@ -20,6 +20,7 @@
#include "cpu.h"
#include "qemu/host-utils.h"
+#include "exec/log.h"
#define D(x)
diff --git a/target-microblaze/translate.c b/target-microblaze/translate.c
index a9c5010..2fb1625 100644
--- a/target-microblaze/translate.c
+++ b/target-microblaze/translate.c
@@ -27,6 +27,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define SIM_COMPAT 0
diff --git a/target-mips/helper.c b/target-mips/helper.c
index 01c4461..bab8e17 100644
--- a/target-mips/helper.c
+++ b/target-mips/helper.c
@@ -25,6 +25,7 @@
#include "cpu.h"
#include "sysemu/kvm.h"
#include "exec/cpu_ldst.h"
+#include "exec/log.h"
enum {
TLBRET_XI = -6,
diff --git a/target-mips/translate.c b/target-mips/translate.c
index 897839c..26b5386 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -32,6 +32,7 @@
#include "exec/semihost.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define MIPS_DEBUG_DISAS 0
diff --git a/target-moxie/translate.c b/target-moxie/translate.c
index f84841e..894c2fe 100644
--- a/target-moxie/translate.c
+++ b/target-moxie/translate.c
@@ -35,6 +35,7 @@
#include "exec/helper-proto.h"
#include "exec/helper-gen.h"
+#include "exec/log.h"
/* This is the state at translation time. */
typedef struct DisasContext {
diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c
index b66fde1..ad341f2 100644
--- a/target-openrisc/translate.c
+++ b/target-openrisc/translate.c
@@ -32,6 +32,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define OPENRISC_DISAS
diff --git a/target-ppc/mmu-hash32.c b/target-ppc/mmu-hash32.c
index dfee358..6453856 100644
--- a/target-ppc/mmu-hash32.c
+++ b/target-ppc/mmu-hash32.c
@@ -23,6 +23,7 @@
#include "sysemu/kvm.h"
#include "kvm_ppc.h"
#include "mmu-hash32.h"
+#include "exec/log.h"
//#define DEBUG_MMU
//#define DEBUG_BAT
diff --git a/target-ppc/mmu-hash64.c b/target-ppc/mmu-hash64.c
index 7df6ede..73edde6 100644
--- a/target-ppc/mmu-hash64.c
+++ b/target-ppc/mmu-hash64.c
@@ -22,6 +22,7 @@
#include "sysemu/kvm.h"
#include "kvm_ppc.h"
#include "mmu-hash64.h"
+#include "exec/log.h"
//#define DEBUG_MMU
//#define DEBUG_SLB
diff --git a/target-ppc/mmu_helper.c b/target-ppc/mmu_helper.c
index e52d0e5..b4fea22 100644
--- a/target-ppc/mmu_helper.c
+++ b/target-ppc/mmu_helper.c
@@ -23,6 +23,7 @@
#include "mmu-hash64.h"
#include "mmu-hash32.h"
#include "exec/cpu_ldst.h"
+#include "exec/log.h"
//#define DEBUG_MMU
//#define DEBUG_BATS
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 453509a..32a0567 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -28,6 +28,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define CPU_SINGLE_STEP 0x1
diff --git a/target-s390x/translate.c b/target-s390x/translate.c
index 05d51fe..e61b7a9 100644
--- a/target-s390x/translate.c
+++ b/target-s390x/translate.c
@@ -43,6 +43,7 @@ static TCGv_ptr cpu_env;
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
/* Information that (most) every instruction needs to manipulate. */
diff --git a/target-sh4/helper.c b/target-sh4/helper.c
index eaececd..90b4405 100644
--- a/target-sh4/helper.c
+++ b/target-sh4/helper.c
@@ -23,6 +23,7 @@
#include <inttypes.h>
#include "cpu.h"
+#include "exec/log.h"
#if !defined(CONFIG_USER_ONLY)
#include "hw/sh4/sh_intc.h"
diff --git a/target-sh4/translate.c b/target-sh4/translate.c
index f764bc2..11feba2 100644
--- a/target-sh4/translate.c
+++ b/target-sh4/translate.c
@@ -28,6 +28,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
typedef struct DisasContext {
diff --git a/target-sparc/int32_helper.c b/target-sparc/int32_helper.c
index 7c380ba..ac5e599 100644
--- a/target-sparc/int32_helper.c
+++ b/target-sparc/int32_helper.c
@@ -20,6 +20,7 @@
#include "cpu.h"
#include "trace.h"
#include "sysemu/sysemu.h"
+#include "exec/log.h"
#define DEBUG_PCALL
diff --git a/target-sparc/int64_helper.c b/target-sparc/int64_helper.c
index b02d22b..a753151 100644
--- a/target-sparc/int64_helper.c
+++ b/target-sparc/int64_helper.c
@@ -19,6 +19,7 @@
#include "cpu.h"
#include "exec/helper-proto.h"
+#include "exec/log.h"
#include "trace.h"
#define DEBUG_PCALL
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index b59742a..864b3f9 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -33,6 +33,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
#define DEBUG_DISAS
diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c
index 34d45f8..efd0fd3 100644
--- a/target-tilegx/translate.c
+++ b/target-tilegx/translate.c
@@ -20,6 +20,7 @@
#include "cpu.h"
#include "qemu/log.h"
+#include "exec/log.h"
#include "disas/disas.h"
#include "tcg-op.h"
#include "exec/cpu_ldst.h"
diff --git a/target-tricore/translate.c b/target-tricore/translate.c
index 135c583..1d29ea1 100644
--- a/target-tricore/translate.c
+++ b/target-tricore/translate.c
@@ -27,6 +27,7 @@
#include "exec/helper-gen.h"
#include "tricore-opcodes.h"
+#include "exec/log.h"
/*
* TCG registers
diff --git a/target-unicore32/translate.c b/target-unicore32/translate.c
index 48f89fb..7d75f39 100644
--- a/target-unicore32/translate.c
+++ b/target-unicore32/translate.c
@@ -24,6 +24,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
/* internal defines */
diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c
index aa0c527..b54ca5a 100644
--- a/target-xtensa/translate.c
+++ b/target-xtensa/translate.c
@@ -43,6 +43,7 @@
#include "exec/helper-gen.h"
#include "trace-tcg.h"
+#include "exec/log.h"
typedef struct DisasContext {
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 682af8a..d614751 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -60,6 +60,7 @@
#endif
#include "elf.h"
+#include "exec/log.h"
/* Forward declarations for functions declared in tcg-target.c and used here. */
static void tcg_target_init(TCGContext *s);
diff --git a/translate-all.c b/translate-all.c
index 20ce40e..e9e928e 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -62,6 +62,7 @@
#include "translate-all.h"
#include "qemu/bitmap.h"
#include "qemu/timer.h"
+#include "exec/log.h"
//#define DEBUG_TB_INVALIDATE
//#define DEBUG_FLUSH
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 7/9] trace: convert stderr backend to log
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (5 preceding siblings ...)
2015-10-25 13:35 ` [Qemu-devel] [PATCH 6/9] log: do not unnecessarily include qom/cpu.h Paolo Bonzini
@ 2015-10-25 13:35 ` Paolo Bonzini
2015-10-25 13:35 ` [Qemu-devel] [PATCH 8/9] trace: switch default backend to "log" Paolo Bonzini
` (4 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:35 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 ++--
include/qemu/log.h | 1 +
qemu-log.c | 3 +++
scripts/tracetool/backend/{stderr.py => log.py} | 9 +++++----
trace/control.c | 10 ++++++++++
vl.c | 2 ++
6 files changed, 23 insertions(+), 6 deletions(-)
rename scripts/tracetool/backend/{stderr.py => log.py} (78%)
diff --git a/configure b/configure
index 2a129bb..d803e67 100755
--- a/configure
+++ b/configure
@@ -5299,8 +5299,8 @@ if have_backend "simple"; then
# Set the appropriate trace file.
trace_file="\"$trace_file-\" FMT_pid"
fi
-if have_backend "stderr"; then
- echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
+if have_backend "log"; then
+ echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
fi
if have_backend "ust"; then
echo "CONFIG_TRACE_UST=y" >> $config_host_mak
diff --git a/include/qemu/log.h b/include/qemu/log.h
index ed57a3d..5a0fbe3 100644
--- a/include/qemu/log.h
+++ b/include/qemu/log.h
@@ -38,6 +38,7 @@ static inline bool qemu_log_enabled(void)
#define LOG_GUEST_ERROR (1 << 11)
#define CPU_LOG_MMU (1 << 12)
#define CPU_LOG_TB_NOCHAIN (1 << 13)
+#define LOG_TRACE (1 << 14)
/* Returns true if a bit is set in the current loglevel mask
*/
diff --git a/qemu-log.c b/qemu-log.c
index efd07c8..5c641a0 100644
--- a/qemu-log.c
+++ b/qemu-log.c
@@ -51,6 +51,9 @@ void qemu_log_mask(int mask, const char *fmt, ...)
void do_qemu_set_log(int log_flags, bool use_own_buffers)
{
qemu_loglevel = log_flags;
+#ifdef CONFIG_TRACE_LOG
+ qemu_loglevel |= LOG_TRACE;
+#endif
if (qemu_loglevel && !qemu_logfile) {
if (logfilename) {
qemu_logfile = fopen(logfilename, log_append ? "a" : "w");
diff --git a/scripts/tracetool/backend/stderr.py b/scripts/tracetool/backend/log.py
similarity index 78%
rename from scripts/tracetool/backend/stderr.py
rename to scripts/tracetool/backend/log.py
index ca58054..a62c310 100644
--- a/scripts/tracetool/backend/stderr.py
+++ b/scripts/tracetool/backend/log.py
@@ -25,6 +25,7 @@ def generate_h_begin(events):
'#include <sys/types.h>',
'#include <unistd.h>',
'#include "trace/control.h"',
+ '#include "qemu/log.h"',
'')
@@ -36,10 +37,10 @@ def generate_h(event):
out(' if (trace_event_get_state(%(event_id)s)) {',
' struct timeval _now;',
' gettimeofday(&_now, NULL);',
- ' fprintf(stderr, "%%d@%%zd.%%06zd:%(name)s " %(fmt)s "\\n",',
- ' getpid(),',
- ' (size_t)_now.tv_sec, (size_t)_now.tv_usec',
- ' %(argnames)s);',
+ ' qemu_log_mask(LOG_TRACE, "%%d@%%zd.%%06zd:%(name)s " %(fmt)s "\\n",',
+ ' getpid(),',
+ ' (size_t)_now.tv_sec, (size_t)_now.tv_usec',
+ ' %(argnames)s);',
' }',
event_id="TRACE_" + event.name.upper(),
name=event.name,
diff --git a/trace/control.c b/trace/control.c
index 7c84795..9a1e381 100644
--- a/trace/control.c
+++ b/trace/control.c
@@ -14,6 +14,9 @@
#ifdef CONFIG_TRACE_FTRACE
#include "trace/ftrace.h"
#endif
+#ifdef CONFIG_TRACE_LOG
+#include "qemu/log.h"
+#endif
#include "qemu/error-report.h"
TraceEvent *trace_event_name(const char *name)
@@ -171,6 +174,13 @@ void trace_init_file(const char *file)
{
#ifdef CONFIG_TRACE_SIMPLE
st_set_trace_file(file);
+#elif defined CONFIG_TRACE_LOG
+ /* If both the simple and the log backends are enabled, "-trace file"
+ * only applies to the simple backend; use "-D" for the log backend.
+ */
+ if (file) {
+ qemu_set_log_filename(file);
+ }
#else
if (file) {
fprintf(stderr, "error: -trace file=...: "
diff --git a/vl.c b/vl.c
index a465f69..a45bd2b 100644
--- a/vl.c
+++ b/vl.c
@@ -4088,6 +4088,8 @@ int main(int argc, char **argv, char **envp)
exit(1);
}
qemu_set_log(mask);
+ } else {
+ qemu_set_log(0);
}
if (!is_daemonized()) {
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 8/9] trace: switch default backend to "log"
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (6 preceding siblings ...)
2015-10-25 13:35 ` [Qemu-devel] [PATCH 7/9] trace: convert stderr backend to log Paolo Bonzini
@ 2015-10-25 13:35 ` Paolo Bonzini
2015-10-25 13:35 ` [Qemu-devel] [PATCH 9/9] log: add "-d trace:PATTERN" Paolo Bonzini
` (3 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:35 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
This enables integration with other QEMU logging facilities.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure b/configure
index d803e67..256d2c5 100755
--- a/configure
+++ b/configure
@@ -298,7 +298,7 @@ pkgversion=""
pie=""
zero_malloc=""
qom_cast_debug="yes"
-trace_backends="nop"
+trace_backends="log"
trace_file="trace"
spice=""
rbd=""
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Qemu-devel] [PATCH 9/9] log: add "-d trace:PATTERN"
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (7 preceding siblings ...)
2015-10-25 13:35 ` [Qemu-devel] [PATCH 8/9] trace: switch default backend to "log" Paolo Bonzini
@ 2015-10-25 13:35 ` Paolo Bonzini
2015-10-25 13:57 ` [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Peter Maydell
` (2 subsequent siblings)
11 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 13:35 UTC (permalink / raw)
To: qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
This is a bit easier to use than "-trace" if you are also enabling
other kinds of logging. It is also more discoverable for experienced
QEMU users, and accessible from user-mode emulators.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qemu-log.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/qemu-log.c b/qemu-log.c
index 5c641a0..2bcef95 100644
--- a/qemu-log.c
+++ b/qemu-log.c
@@ -19,6 +19,7 @@
#include "qemu-common.h"
#include "qemu/log.h"
+#include "trace/control.h"
static char *logfilename;
FILE *qemu_logfile;
@@ -154,6 +155,11 @@ int qemu_str_to_log_mask(const char *str)
for (item = qemu_log_items; item->mask != 0; item++) {
mask |= item->mask;
}
+#ifdef CONFIG_TRACE_LOG
+ } else if (strncmp(p, "trace:", 6) == 0 && p + 6 != p1) {
+ trace_enable_events(p + 6);
+ mask |= LOG_TRACE;
+#endif
} else {
for (item = qemu_log_items; item->mask != 0; item++) {
if (cmp1(p, p1 - p, item->name)) {
@@ -161,9 +167,9 @@ int qemu_str_to_log_mask(const char *str)
}
}
return 0;
+ found:
+ mask |= item->mask;
}
- found:
- mask |= item->mask;
if (*p1 != ',') {
break;
}
@@ -177,6 +183,10 @@ void qemu_print_log_usage(FILE *f)
const QEMULogItem *item;
fprintf(f, "Log items (comma separated):\n");
for (item = qemu_log_items; item->mask != 0; item++) {
- fprintf(f, "%-10s %s\n", item->name, item->help);
+ fprintf(f, "%-15s %s\n", item->name, item->help);
}
+#ifdef CONFIG_TRACE_LOG
+ fprintf(f, "trace:PATTERN enable trace events\n");
+ fprintf(f, "\nUse \"-d trace:help\" to get a list of trace events.\n\n");
+#endif
}
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (8 preceding siblings ...)
2015-10-25 13:35 ` [Qemu-devel] [PATCH 9/9] log: add "-d trace:PATTERN" Paolo Bonzini
@ 2015-10-25 13:57 ` Peter Maydell
2015-10-25 14:39 ` Paolo Bonzini
2015-10-26 1:16 ` Christian Borntraeger
2015-10-26 1:28 ` Christian Borntraeger
11 siblings, 1 reply; 15+ messages in thread
From: Peter Maydell @ 2015-10-25 13:57 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Denis V. Lunev, QEMU Developers, Stefan Hajnoczi,
Markus Armbruster
On 25 October 2015 at 13:32, Paolo Bonzini <pbonzini@redhat.com> wrote:
> This series does three things:
>
> 1) add a "-trace [enable=]foo" option to enable one or more trace
> events, and a "-trace help" option to show the list of tracepoints
> (patches 4-5)
>
> 2) change the stderr tracing backend so that it prints to the
> -D log file, and enable it by default. "-trace file=..." is
> now a synonym of -D if the log backend is enabled (patches 7-8)
>
> 3) add a "-d trace:foo" option that is a synonym for "-trace foo";
> this makes the new functionality more discoverable to people used
> to "-d", makes it available for user-mode emulation (which does
> not have -trace), and is somewhat nice if you want to enable both
> tracepoints and some other "-d" flag (patch 9). When globbing
> it is also less susceptible to unwanted shell expansion.
>
> For example, you can trace block device I/O and save the result
> to a file just by adding "-trace bdrv_aio_*,file=trace.txt", or
> correlate it to guest PCs with "-d exec,nochain,trace:bdrv_aio_*".
>
> Opinions? I would like to have this in 2.5 if there is agreement.
Have you done any performance testing to check that we don't have
previously-nopped-out tracepoints in hot paths that now result in
real code being generated?
thanks
-- PMM
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging
2015-10-25 13:57 ` [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Peter Maydell
@ 2015-10-25 14:39 ` Paolo Bonzini
0 siblings, 0 replies; 15+ messages in thread
From: Paolo Bonzini @ 2015-10-25 14:39 UTC (permalink / raw)
To: Peter Maydell
Cc: Denis V. Lunev, QEMU Developers, Stefan Hajnoczi,
Markus Armbruster
On 25/10/2015 14:57, Peter Maydell wrote:
> > Opinions? I would like to have this in 2.5 if there is agreement.
>
> Have you done any performance testing to check that we don't have
> previously-nopped-out tracepoints in hot paths that now result in
> real code being generated?
There definitely are tracepoints in hot paths, depending on what your
workload here. Each I/O operation should trigger up to 3 tracepoints in
the block layer if I counted them right (thread_pool_submit,
thread_pool_complete, bdrv_aio_*), plus possibly some SCSI and virtqueue
tracepoints.
I haven't checked whether their cost (e.g. in terms of cache misses) has
an impact on performance. The obvious first optimization would be to
optimize the case of no tracepoints enabled at all, changing each if
(tracepoint_enabled[index]) to "unlikely(tracepoint_enabled_any) &&
tracepoint_enabled[index]".
All other patches of course are independent. I put 8 and 9 last because
they are a bit more controversial.
Paolo
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (9 preceding siblings ...)
2015-10-25 13:57 ` [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Peter Maydell
@ 2015-10-26 1:16 ` Christian Borntraeger
2015-10-26 1:28 ` Christian Borntraeger
11 siblings, 0 replies; 15+ messages in thread
From: Christian Borntraeger @ 2015-10-26 1:16 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Am 25.10.2015 um 22:32 schrieb Paolo Bonzini:
> This series does three things:
>
> 1) add a "-trace [enable=]foo" option to enable one or more trace
> events, and a "-trace help" option to show the list of tracepoints
> (patches 4-5)
>
> 2) change the stderr tracing backend so that it prints to the
> -D log file, and enable it by default. "-trace file=..." is
> now a synonym of -D if the log backend is enabled (patches 7-8)
>
> 3) add a "-d trace:foo" option that is a synonym for "-trace foo";
> this makes the new functionality more discoverable to people used
> to "-d", makes it available for user-mode emulation (which does
> not have -trace), and is somewhat nice if you want to enable both
> tracepoints and some other "-d" flag (patch 9). When globbing
> it is also less susceptible to unwanted shell expansion.
>
> For example, you can trace block device I/O and save the result
> to a file just by adding "-trace bdrv_aio_*,file=trace.txt", or
> correlate it to guest PCs with "-d exec,nochain,trace:bdrv_aio_*".
>
> Opinions? I would like to have this in 2.5 if there is agreement.
Can you also fixup qemu-io, qemu-nbd and so on?
I get errors like
libqemuutil.a(oslib-posix.o): In function `trace_qemu_memalign':
/home/cborntra/REPOS/qemu/build/./trace/generated-tracers.h:21: undefined reference to `qemu_log_mask'
libqemuutil.a(oslib-posix.o): In function `trace_qemu_anon_ram_alloc':
/home/cborntra/REPOS/qemu/build/./trace/generated-tracers.h:33: undefined reference to `qemu_log_mask'
libqemuutil.a(oslib-posix.o): In function `trace_qemu_vfree':
/home/cborntra/REPOS/qemu/build/./trace/generated-tracers.h:45: undefined reference to `qemu_log_mask'
libqemuutil.a(oslib-posix.o): In function `trace_qemu_anon_ram_free':
/home/cborntra/REPOS/qemu/build/./trace/generated-tracers.h:57: undefined reference to `qemu_log_mask'
collect2: error: ld returned 1 exit status
Makefile:302: recipe for target 'qemu-ga' failed
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging
2015-10-25 13:32 [Qemu-devel] [PATCH 0/9] simplify usage of tracepoints, and connect them to logging Paolo Bonzini
` (10 preceding siblings ...)
2015-10-26 1:16 ` Christian Borntraeger
@ 2015-10-26 1:28 ` Christian Borntraeger
11 siblings, 0 replies; 15+ messages in thread
From: Christian Borntraeger @ 2015-10-26 1:28 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: den, armbru, stefanha, peter.maydell
Am 25.10.2015 um 22:32 schrieb Paolo Bonzini:
> This series does three things:
>
> 1) add a "-trace [enable=]foo" option to enable one or more trace
> events, and a "-trace help" option to show the list of tracepoints
> (patches 4-5)
>
> 2) change the stderr tracing backend so that it prints to the
> -D log file, and enable it by default. "-trace file=..." is
> now a synonym of -D if the log backend is enabled (patches 7-8)
>
> 3) add a "-d trace:foo" option that is a synonym for "-trace foo";
> this makes the new functionality more discoverable to people used
> to "-d", makes it available for user-mode emulation (which does
> not have -trace), and is somewhat nice if you want to enable both
> tracepoints and some other "-d" flag (patch 9). When globbing
> it is also less susceptible to unwanted shell expansion.
>
> For example, you can trace block device I/O and save the result
> to a file just by adding "-trace bdrv_aio_*,file=trace.txt", or
> correlate it to guest PCs with "-d exec,nochain,trace:bdrv_aio_*".
>
> Opinions? I would like to have this in 2.5 if there is agreement.
Just gave this a quick trial. This seems to be really helpful and
eases the use of tracing. So given the helpers are being fixed up
for 2.5:
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
for the series.
^ permalink raw reply [flat|nested] 15+ messages in thread