* [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging
@ 2015-10-26 9:10 Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 01/11] trace: fix documentation Denis V. Lunev
` (10 more replies)
0 siblings, 11 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
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.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Changes from v1:
- small cleanup to vl.c is added as patch (4)
- compilation is fixed in patch (2)
- moved qemu-log.c to util/log.c to fix linking of qemu-io/qemu-nbd
Denis V. Lunev (2):
trace: no need to call trace_backend_init in different branches now
log: move qemu-log.c into util/ directory
Paolo Bonzini (9):
trace: fix documentation
trace: split trace_init_events out of trace_init_backends
trace: split trace_init_file out of trace_init_backends
trace: add "-trace enable=..."
trace: add "-trace help"
log: do not unnecessarily include qom/cpu.h
trace: convert stderr backend to log
trace: switch default backend to "log"
log: add "-d trace:PATTERN"
Makefile.objs | 1 -
bsd-user/main.c | 1 +
configure | 6 +-
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 | 60 +---------------
linux-user/main.c | 1 +
qemu-io.c | 2 +-
qemu-options.hx | 22 ++++--
qom/cpu.c | 1 +
scripts/tracetool/backend/{stderr.py => log.py} | 9 +--
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 +
trace/control.c | 95 ++++++++++++++++++-------
trace/control.h | 42 ++++++++++-
trace/simple.c | 6 +-
trace/simple.h | 4 +-
translate-all.c | 1 +
util/Makefile.objs | 1 +
qemu-log.c => util/log.c | 19 ++++-
vl.c | 38 +++++-----
52 files changed, 274 insertions(+), 129 deletions(-)
create mode 100644 include/exec/log.h
rename scripts/tracetool/backend/{stderr.py => log.py} (78%)
rename qemu-log.c => util/log.c (90%)
--
2.1.4
^ permalink raw reply [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 01/11] trace: fix documentation
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 20:05 ` Christian Borntraeger
2015-10-26 9:10 ` [Qemu-devel] [PATCH 02/11] trace: split trace_init_events out of trace_init_backends Denis V. Lunev
` (9 subsequent siblings)
10 siblings, 1 reply; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Mention the ftrace backend too.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 02/11] trace: split trace_init_events out of trace_init_backends
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 01/11] trace: fix documentation Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 03/11] trace: split trace_init_file " Denis V. Lunev
` (8 subsequent siblings)
10 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
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>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 01/11] trace: fix documentation Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 02/11] trace: split trace_init_events out of trace_init_backends Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-29 17:23 ` Stefan Hajnoczi
2015-10-26 9:10 ` [Qemu-devel] [PATCH 04/11] trace: no need to call trace_backend_init in different branches now Denis V. Lunev
` (7 subsequent siblings)
10 siblings, 1 reply; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
This is cleaner, and improves error reporting with -daemonize.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
qemu-io.c | 2 +-
trace/control.c | 17 ++++++++++++-----
trace/control.h | 13 ++++++++++++-
trace/simple.c | 6 ++----
trace/simple.h | 4 ++--
vl.c | 13 +++++++++----
6 files changed, 38 insertions(+), 17 deletions(-)
diff --git a/qemu-io.c b/qemu-io.c
index 269f17c..fbddf82 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -440,7 +440,7 @@ int main(int argc, char **argv)
}
break;
case 'T':
- if (!trace_init_backends(optarg, NULL)) {
+ if (!trace_init_backends()) {
exit(1); /* error message will have been printed */
}
break;
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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 04/11] trace: no need to call trace_backend_init in different branches now
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (2 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 03/11] trace: split trace_init_file " Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 17:18 ` Paolo Bonzini
2015-10-26 9:10 ` [Qemu-devel] [PATCH 05/11] trace: add "-trace enable=..." Denis V. Lunev
` (6 subsequent siblings)
10 siblings, 1 reply; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
original idea to split calling locations was to trace tracing thread
in the final child process according to
commit 8a745f2a9296ad2cf6bda33534ed298f2625a4ad
Author: Michael Mueller
Date: Mon Sep 23 16:36:54 2013 +0200
os_daemonize is now on top of both locations. Drop unneeded ifs.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
vl.c | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/vl.c b/vl.c
index b1ddd3f..7ce9d70 100644
--- a/vl.c
+++ b/vl.c
@@ -4083,10 +4083,8 @@ int main(int argc, char **argv, char **envp)
qemu_set_log(mask);
}
- if (!is_daemonized()) {
- if (!trace_init_backends()) {
- exit(1);
- }
+ if (!trace_init_backends()) {
+ exit(1);
}
/* If no data_dir is specified then try to find it relative to the
@@ -4635,12 +4633,6 @@ int main(int argc, char **argv, char **envp)
os_setup_post();
- if (is_daemonized()) {
- if (!trace_init_backends()) {
- exit(1);
- }
- }
-
main_loop();
bdrv_close_all();
pause_all_vcpus();
--
2.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 05/11] trace: add "-trace enable=..."
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (3 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 04/11] trace: no need to call trace_backend_init in different branches now Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 06/11] trace: add "-trace help" Denis V. Lunev
` (5 subsequent siblings)
10 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
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>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.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 7ce9d70..2b05023 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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 06/11] trace: add "-trace help"
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (4 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 05/11] trace: add "-trace enable=..." Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 07/11] log: do not unnecessarily include qom/cpu.h Denis V. Lunev
` (4 subsequent siblings)
10 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Print a list of trace points
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 07/11] log: do not unnecessarily include qom/cpu.h
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (5 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 06/11] trace: add "-trace help" Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory Denis V. Lunev
` (3 subsequent siblings)
10 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Split the bits that require it to exec/log.h.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.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..03f2570 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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (6 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 07/11] log: do not unnecessarily include qom/cpu.h Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 17:20 ` Paolo Bonzini
2015-10-26 9:10 ` [Qemu-devel] [PATCH 09/11] trace: convert stderr backend to log Denis V. Lunev
` (2 subsequent siblings)
10 siblings, 1 reply; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
log will become common facility with tracepoints support in next step.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
Makefile.objs | 1 -
util/Makefile.objs | 1 +
qemu-log.c => util/log.c | 0
3 files changed, 1 insertion(+), 1 deletion(-)
rename qemu-log.c => util/log.c (100%)
diff --git a/Makefile.objs b/Makefile.objs
index ecfe03c..ce32193 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -81,7 +81,6 @@ endif
#######################################################################
# Target-independent parts used in system and user emulation
-common-obj-y += qemu-log.o
common-obj-y += tcg-runtime.o
common-obj-y += hw/
common-obj-y += qom/
diff --git a/util/Makefile.objs b/util/Makefile.objs
index d7cc399..a11915c 100644
--- a/util/Makefile.objs
+++ b/util/Makefile.objs
@@ -29,3 +29,4 @@ util-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
util-obj-y += qemu-coroutine-sleep.o
util-obj-y += coroutine-$(CONFIG_COROUTINE_BACKEND).o
util-obj-y += buffer.o
+util-obj-y += log.o
diff --git a/qemu-log.c b/util/log.c
similarity index 100%
rename from qemu-log.c
rename to util/log.c
--
2.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 09/11] trace: convert stderr backend to log
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (7 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory Denis V. Lunev
@ 2015-10-26 9:10 ` Denis V. Lunev
2015-10-26 9:14 ` [Qemu-devel] [PATCH 10/11] trace: switch default backend to "log" Denis V. Lunev
2015-10-29 17:38 ` [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Stefan Hajnoczi
10 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:10 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
configure | 4 ++--
include/qemu/log.h | 1 +
scripts/tracetool/backend/{stderr.py => log.py} | 9 +++++----
trace/control.c | 10 ++++++++++
util/log.c | 3 +++
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/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/util/log.c b/util/log.c
index efd07c8..5c641a0 100644
--- a/util/log.c
+++ b/util/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/vl.c b/vl.c
index 2b05023..88b4ccb 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 (!trace_init_backends()) {
--
2.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 10/11] trace: switch default backend to "log"
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (8 preceding siblings ...)
2015-10-26 9:10 ` [Qemu-devel] [PATCH 09/11] trace: convert stderr backend to log Denis V. Lunev
@ 2015-10-26 9:14 ` Denis V. Lunev
2015-10-26 9:14 ` [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN" Denis V. Lunev
2015-10-29 17:38 ` [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Stefan Hajnoczi
10 siblings, 1 reply; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:14 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
This enables integration with other QEMU logging facilities.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN"
2015-10-26 9:14 ` [Qemu-devel] [PATCH 10/11] trace: switch default backend to "log" Denis V. Lunev
@ 2015-10-26 9:14 ` Denis V. Lunev
2015-10-26 13:12 ` Lluís Vilanova
0 siblings, 1 reply; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 9:14 UTC (permalink / raw)
Cc: peter.maydell, qemu-devel, armbru, stefanha, Denis V. Lunev,
pbonzini
From: Paolo Bonzini <pbonzini@redhat.com>
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>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
util/log.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/util/log.c b/util/log.c
index 5c641a0..2bcef95 100644
--- a/util/log.c
+++ b/util/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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN"
2015-10-26 9:14 ` [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN" Denis V. Lunev
@ 2015-10-26 13:12 ` Lluís Vilanova
2015-10-26 17:07 ` Eric Blake
0 siblings, 1 reply; 27+ messages in thread
From: Lluís Vilanova @ 2015-10-26 13:12 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, pbonzini, qemu-devel, stefanha, armbru
Denis V Lunev writes:
> From: Paolo Bonzini <pbonzini@redhat.com>
> 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.
I'm not sure this should be added, since the same functionality is also
available through "-trace enable=<pattern>" (and the shortcut "-trace
<pattern>").
Also, I'd rather fold event name discovery into "-trace enable=?" (and the
shortcut "-trace ?"), mimicking the format already available for CPUs ("-cpu
?").
Cheers,
Lluis
--
"And it's much the same thing with knowledge, for whenever you learn
something new, the whole world becomes that much richer."
-- The Princess of Pure Reason, as told by Norton Juster in The Phantom
Tollbooth
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN"
2015-10-26 13:12 ` Lluís Vilanova
@ 2015-10-26 17:07 ` Eric Blake
2015-10-26 19:23 ` Lluís Vilanova
0 siblings, 1 reply; 27+ messages in thread
From: Eric Blake @ 2015-10-26 17:07 UTC (permalink / raw)
To: Denis V. Lunev, peter.maydell, qemu-devel, armbru, stefanha,
pbonzini
[-- Attachment #1: Type: text/plain, Size: 1203 bytes --]
On 10/26/2015 07:12 AM, Lluís Vilanova wrote:
> Denis V Lunev writes:
>
>> From: Paolo Bonzini <pbonzini@redhat.com>
>> 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.
>
> I'm not sure this should be added, since the same functionality is also
> available through "-trace enable=<pattern>" (and the shortcut "-trace
> <pattern>").
Having more than one way to do something is not necessarily bad; it does
imply more maintenance to keep both ways working, but if one way is more
discoverable than the other it may be worth it.
>
> Also, I'd rather fold event name discovery into "-trace enable=?" (and the
> shortcut "-trace ?"), mimicking the format already available for CPUs ("-cpu
> ?").
>
If we do that, we should also support '-trace enable=help', because ? is
a shell metacharacter, and we have been moving towards using 'help'
rather than '?' to minimize the need for shell quoting when asking for help.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 04/11] trace: no need to call trace_backend_init in different branches now
2015-10-26 9:10 ` [Qemu-devel] [PATCH 04/11] trace: no need to call trace_backend_init in different branches now Denis V. Lunev
@ 2015-10-26 17:18 ` Paolo Bonzini
0 siblings, 0 replies; 27+ messages in thread
From: Paolo Bonzini @ 2015-10-26 17:18 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, qemu-devel, stefanha, armbru
On 26/10/2015 10:10, Denis V. Lunev wrote:
> original idea to split calling locations was to trace tracing thread
> in the final child process according to
>
> commit 8a745f2a9296ad2cf6bda33534ed298f2625a4ad
> Author: Michael Mueller
> Date: Mon Sep 23 16:36:54 2013 +0200
>
> os_daemonize is now on top of both locations. Drop unneeded ifs.
Oh, that's nice! :-)
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> ---
> vl.c | 12 ++----------
> 1 file changed, 2 insertions(+), 10 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index b1ddd3f..7ce9d70 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4083,10 +4083,8 @@ int main(int argc, char **argv, char **envp)
> qemu_set_log(mask);
> }
>
> - if (!is_daemonized()) {
> - if (!trace_init_backends()) {
> - exit(1);
> - }
> + if (!trace_init_backends()) {
> + exit(1);
> }
>
> /* If no data_dir is specified then try to find it relative to the
> @@ -4635,12 +4633,6 @@ int main(int argc, char **argv, char **envp)
>
> os_setup_post();
>
> - if (is_daemonized()) {
> - if (!trace_init_backends()) {
> - exit(1);
> - }
> - }
> -
> main_loop();
> bdrv_close_all();
> pause_all_vcpus();
>
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory
2015-10-26 9:10 ` [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory Denis V. Lunev
@ 2015-10-26 17:20 ` Paolo Bonzini
2015-10-26 18:24 ` Denis V. Lunev
0 siblings, 1 reply; 27+ messages in thread
From: Paolo Bonzini @ 2015-10-26 17:20 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, qemu-devel, stefanha, armbru
On 26/10/2015 10:10, Denis V. Lunev wrote:
> log will become common facility with tracepoints support in next step.
>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> ---
> Makefile.objs | 1 -
> util/Makefile.objs | 1 +
> qemu-log.c => util/log.c | 0
> 3 files changed, 1 insertion(+), 1 deletion(-)
> rename qemu-log.c => util/log.c (100%)
>
> diff --git a/Makefile.objs b/Makefile.objs
> index ecfe03c..ce32193 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -81,7 +81,6 @@ endif
>
> #######################################################################
> # Target-independent parts used in system and user emulation
> -common-obj-y += qemu-log.o
> common-obj-y += tcg-runtime.o
> common-obj-y += hw/
> common-obj-y += qom/
> diff --git a/util/Makefile.objs b/util/Makefile.objs
> index d7cc399..a11915c 100644
> --- a/util/Makefile.objs
> +++ b/util/Makefile.objs
> @@ -29,3 +29,4 @@ util-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
> util-obj-y += qemu-coroutine-sleep.o
> util-obj-y += coroutine-$(CONFIG_COROUTINE_BACKEND).o
> util-obj-y += buffer.o
> +util-obj-y += log.o
> diff --git a/qemu-log.c b/util/log.c
> similarity index 100%
> rename from qemu-log.c
> rename to util/log.c
>
Yes, this makes sense after the previous patch. The declaration of the
LOG_* constants is a bit ad hoc for util/, but I guess it's fine.
Another possibility is to move it to trace/.
I'll leave this to Stefan to judge.
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Paolo
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory
2015-10-26 17:20 ` Paolo Bonzini
@ 2015-10-26 18:24 ` Denis V. Lunev
0 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-26 18:24 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: peter.maydell, qemu-devel, stefanha, armbru
On 10/26/2015 08:20 PM, Paolo Bonzini wrote:
>
> On 26/10/2015 10:10, Denis V. Lunev wrote:
>> log will become common facility with tracepoints support in next step.
>>
>> Signed-off-by: Denis V. Lunev <den@openvz.org>
>> ---
>> Makefile.objs | 1 -
>> util/Makefile.objs | 1 +
>> qemu-log.c => util/log.c | 0
>> 3 files changed, 1 insertion(+), 1 deletion(-)
>> rename qemu-log.c => util/log.c (100%)
>>
>> diff --git a/Makefile.objs b/Makefile.objs
>> index ecfe03c..ce32193 100644
>> --- a/Makefile.objs
>> +++ b/Makefile.objs
>> @@ -81,7 +81,6 @@ endif
>>
>> #######################################################################
>> # Target-independent parts used in system and user emulation
>> -common-obj-y += qemu-log.o
>> common-obj-y += tcg-runtime.o
>> common-obj-y += hw/
>> common-obj-y += qom/
>> diff --git a/util/Makefile.objs b/util/Makefile.objs
>> index d7cc399..a11915c 100644
>> --- a/util/Makefile.objs
>> +++ b/util/Makefile.objs
>> @@ -29,3 +29,4 @@ util-obj-y += qemu-coroutine.o qemu-coroutine-lock.o qemu-coroutine-io.o
>> util-obj-y += qemu-coroutine-sleep.o
>> util-obj-y += coroutine-$(CONFIG_COROUTINE_BACKEND).o
>> util-obj-y += buffer.o
>> +util-obj-y += log.o
>> diff --git a/qemu-log.c b/util/log.c
>> similarity index 100%
>> rename from qemu-log.c
>> rename to util/log.c
>>
> Yes, this makes sense after the previous patch. The declaration of the
> LOG_* constants is a bit ad hoc for util/, but I guess it's fine.
> Another possibility is to move it to trace/.
>
> I'll leave this to Stefan to judge.
>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
>
> Paolo
this is better to keep here to avoid linking problems. This subsystem
should be a part of EACH binary if we will improve logging
further in next steps.
'log' is utility from my point of view :)
Den
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN"
2015-10-26 17:07 ` Eric Blake
@ 2015-10-26 19:23 ` Lluís Vilanova
0 siblings, 0 replies; 27+ messages in thread
From: Lluís Vilanova @ 2015-10-26 19:23 UTC (permalink / raw)
To: Eric Blake
Cc: peter.maydell, qemu-devel, armbru, stefanha, pbonzini,
Denis V. Lunev
Eric Blake writes:
> On 10/26/2015 07:12 AM, Lluís Vilanova wrote:
>> Denis V Lunev writes:
>>
>>> From: Paolo Bonzini <pbonzini@redhat.com>
>>> 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.
>>
>> I'm not sure this should be added, since the same functionality is also
>> available through "-trace enable=<pattern>" (and the shortcut "-trace
>> <pattern>").
> Having more than one way to do something is not necessarily bad; it does
> imply more maintenance to keep both ways working, but if one way is more
> discoverable than the other it may be worth it.
Certainly true. I just find it confusing to have the same functionality
available through different forms.
>>
>> Also, I'd rather fold event name discovery into "-trace enable=?" (and the
>> shortcut "-trace ?"), mimicking the format already available for CPUs ("-cpu
>> ?").
>>
> If we do that, we should also support '-trace enable=help', because ? is
> a shell metacharacter, and we have been moving towards using 'help'
> rather than '?' to minimize the need for shell quoting when asking for help.
Oh, I wasn't aware of the "deprecation" of '?'. Then it certainly makes more
sense to use 'help'.
Thanks,
Lluis
--
"And it's much the same thing with knowledge, for whenever you learn
something new, the whole world becomes that much richer."
-- The Princess of Pure Reason, as told by Norton Juster in The Phantom
Tollbooth
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 01/11] trace: fix documentation
2015-10-26 9:10 ` [Qemu-devel] [PATCH 01/11] trace: fix documentation Denis V. Lunev
@ 2015-10-26 20:05 ` Christian Borntraeger
2015-10-28 15:15 ` Denis V. Lunev
0 siblings, 1 reply; 27+ messages in thread
From: Christian Borntraeger @ 2015-10-26 20:05 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, pbonzini, qemu-devel, stefanha, armbru
Am 26.10.2015 um 18:10 schrieb Denis V. Lunev:
> From: Paolo Bonzini <pbonzini@redhat.com>
>
> Mention the ftrace backend too.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Can you make that
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
?
I agree with the series, but have not fully reviewed it
:-)
Christian
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 01/11] trace: fix documentation
2015-10-26 20:05 ` Christian Borntraeger
@ 2015-10-28 15:15 ` Denis V. Lunev
2015-10-29 14:24 ` Christian Borntraeger
2015-10-29 17:18 ` Stefan Hajnoczi
0 siblings, 2 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-28 15:15 UTC (permalink / raw)
To: Christian Borntraeger
Cc: peter.maydell, pbonzini, qemu-devel, stefanha, armbru
On 10/26/2015 11:05 PM, Christian Borntraeger wrote:
> Am 26.10.2015 um 18:10 schrieb Denis V. Lunev:
>> From: Paolo Bonzini <pbonzini@redhat.com>
>>
>> Mention the ftrace backend too.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> Signed-off-by: Denis V. Lunev <den@openvz.org>
>> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Can you make that
> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ?
>
> I agree with the series, but have not fully reviewed it
> :-)
>
> Christian
>
should I re-submit?
Den
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 01/11] trace: fix documentation
2015-10-28 15:15 ` Denis V. Lunev
@ 2015-10-29 14:24 ` Christian Borntraeger
2015-10-29 17:18 ` Stefan Hajnoczi
1 sibling, 0 replies; 27+ messages in thread
From: Christian Borntraeger @ 2015-10-29 14:24 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, pbonzini, qemu-devel, stefanha, armbru
Am 28.10.2015 um 16:15 schrieb Denis V. Lunev:
> On 10/26/2015 11:05 PM, Christian Borntraeger wrote:
>> Am 26.10.2015 um 18:10 schrieb Denis V. Lunev:
>>> From: Paolo Bonzini <pbonzini@redhat.com>
>>>
>>> Mention the ftrace backend too.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> Signed-off-by: Denis V. Lunev <den@openvz.org>
>>> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
>> Can you make that
>> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
>> ?
>>
>> I agree with the series, but have not fully reviewed it
>> :-)
>>
>> Christian
>>
> should I re-submit?
Whoever commits this series can change it as well.
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 01/11] trace: fix documentation
2015-10-28 15:15 ` Denis V. Lunev
2015-10-29 14:24 ` Christian Borntraeger
@ 2015-10-29 17:18 ` Stefan Hajnoczi
1 sibling, 0 replies; 27+ messages in thread
From: Stefan Hajnoczi @ 2015-10-29 17:18 UTC (permalink / raw)
To: Denis V. Lunev
Cc: Christian Borntraeger, pbonzini, qemu-devel, armbru,
peter.maydell
[-- Attachment #1: Type: text/plain, Size: 715 bytes --]
On Wed, Oct 28, 2015 at 06:15:05PM +0300, Denis V. Lunev wrote:
> On 10/26/2015 11:05 PM, Christian Borntraeger wrote:
> >Am 26.10.2015 um 18:10 schrieb Denis V. Lunev:
> >>From: Paolo Bonzini <pbonzini@redhat.com>
> >>
> >>Mention the ftrace backend too.
> >>
> >>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> >>Signed-off-by: Denis V. Lunev <den@openvz.org>
> >>Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
> >Can you make that
> >Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
> >?
> >
> >I agree with the series, but have not fully reviewed it
> >:-)
> >
> >Christian
> >
> should I re-submit?
You don't need to re-submit for this change, it can be done when merging
the patch.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends
2015-10-26 9:10 ` [Qemu-devel] [PATCH 03/11] trace: split trace_init_file " Denis V. Lunev
@ 2015-10-29 17:23 ` Stefan Hajnoczi
2015-10-29 17:52 ` Denis V. Lunev
0 siblings, 1 reply; 27+ messages in thread
From: Stefan Hajnoczi @ 2015-10-29 17:23 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, pbonzini, qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 1224 bytes --]
On Mon, Oct 26, 2015 at 12:10:20PM +0300, Denis V. Lunev wrote:
> From: Paolo Bonzini <pbonzini@redhat.com>
>
> This is cleaner, and improves error reporting with -daemonize.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
> qemu-io.c | 2 +-
> trace/control.c | 17 ++++++++++++-----
> trace/control.h | 13 ++++++++++++-
> trace/simple.c | 6 ++----
> trace/simple.h | 4 ++--
> vl.c | 13 +++++++++----
> 6 files changed, 38 insertions(+), 17 deletions(-)
>
> diff --git a/qemu-io.c b/qemu-io.c
> index 269f17c..fbddf82 100644
> --- a/qemu-io.c
> +++ b/qemu-io.c
> @@ -440,7 +440,7 @@ int main(int argc, char **argv)
> }
> break;
> case 'T':
> - if (!trace_init_backends(optarg, NULL)) {
> + if (!trace_init_backends()) {
The previous patch dropped the 2nd argument to trace_init_backends(). I
guess that means the previous patch doesn't compile by itself?
Please move this hunk to the previous patch so that git-bisect(1) works
(i.e. each commit builds successfully and runs).
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
` (9 preceding siblings ...)
2015-10-26 9:14 ` [Qemu-devel] [PATCH 10/11] trace: switch default backend to "log" Denis V. Lunev
@ 2015-10-29 17:38 ` Stefan Hajnoczi
10 siblings, 0 replies; 27+ messages in thread
From: Stefan Hajnoczi @ 2015-10-29 17:38 UTC (permalink / raw)
To: Denis V. Lunev; +Cc: peter.maydell, pbonzini, qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 1212 bytes --]
On Mon, Oct 26, 2015 at 12:10:17PM +0300, Denis V. Lunev 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.
Looks good overall, please see comments on individual patches.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends
2015-10-29 17:23 ` Stefan Hajnoczi
@ 2015-10-29 17:52 ` Denis V. Lunev
0 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-29 17:52 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: peter.maydell, pbonzini, qemu-devel, armbru
On 10/29/2015 08:23 PM, Stefan Hajnoczi wrote:
> On Mon, Oct 26, 2015 at 12:10:20PM +0300, Denis V. Lunev wrote:
>> From: Paolo Bonzini <pbonzini@redhat.com>
>>
>> This is cleaner, and improves error reporting with -daemonize.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> Signed-off-by: Denis V. Lunev <den@openvz.org>
>> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
>> ---
>> qemu-io.c | 2 +-
>> trace/control.c | 17 ++++++++++++-----
>> trace/control.h | 13 ++++++++++++-
>> trace/simple.c | 6 ++----
>> trace/simple.h | 4 ++--
>> vl.c | 13 +++++++++----
>> 6 files changed, 38 insertions(+), 17 deletions(-)
>>
>> diff --git a/qemu-io.c b/qemu-io.c
>> index 269f17c..fbddf82 100644
>> --- a/qemu-io.c
>> +++ b/qemu-io.c
>> @@ -440,7 +440,7 @@ int main(int argc, char **argv)
>> }
>> break;
>> case 'T':
>> - if (!trace_init_backends(optarg, NULL)) {
>> + if (!trace_init_backends()) {
> The previous patch dropped the 2nd argument to trace_init_backends(). I
> guess that means the previous patch doesn't compile by itself?
>
> Please move this hunk to the previous patch so that git-bisect(1) works
> (i.e. each commit builds successfully and runs).
yes, you are right.
I have mistaken fixing Paolo's patchset. This needs to be addressed.
I'll do this in a couple of hours when I'll be at home.
Den
^ permalink raw reply [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends
2015-10-29 20:44 [Qemu-devel] [PATCH v3 " Denis V. Lunev
@ 2015-10-29 20:44 ` Denis V. Lunev
0 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2015-10-29 20:44 UTC (permalink / raw)
Cc: Paolo Bonzini, qemu-devel, Denis V. Lunev
From: Paolo Bonzini <pbonzini@redhat.com>
This is cleaner, and improves error reporting with -daemonize.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
qemu-io.c | 2 +-
trace/control.c | 17 ++++++++++++-----
trace/control.h | 13 ++++++++++++-
trace/simple.c | 6 ++----
trace/simple.h | 4 ++--
vl.c | 13 +++++++++----
6 files changed, 38 insertions(+), 17 deletions(-)
diff --git a/qemu-io.c b/qemu-io.c
index d6fa11b..fbddf82 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -440,7 +440,7 @@ int main(int argc, char **argv)
}
break;
case 'T':
- if (!trace_init_backends(optarg)) {
+ if (!trace_init_backends()) {
exit(1); /* error message will have been printed */
}
break;
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 129177e..0424ce5 100644
--- a/vl.c
+++ b/vl.c
@@ -2961,7 +2961,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;
@@ -3886,7 +3886,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;
}
@@ -4067,6 +4070,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) {
@@ -4084,7 +4089,7 @@ int main(int argc, char **argv, char **envp)
}
if (!is_daemonized()) {
- if (!trace_init_backends(trace_file)) {
+ if (!trace_init_backends()) {
exit(1);
}
}
@@ -4636,7 +4641,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.1.4
^ permalink raw reply related [flat|nested] 27+ messages in thread
* [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends
2016-01-07 13:55 [Qemu-devel] [PATCH v4 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
@ 2016-01-07 13:55 ` Denis V. Lunev
0 siblings, 0 replies; 27+ messages in thread
From: Denis V. Lunev @ 2016-01-07 13:55 UTC (permalink / raw)
Cc: pbonzini, qemu-devel, stefanha, Denis V. Lunev
From: Paolo Bonzini <pbonzini@redhat.com>
This is cleaner, and improves error reporting with -daemonize.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
qemu-io.c | 2 +-
trace/control.c | 17 ++++++++++++-----
trace/control.h | 13 ++++++++++++-
trace/simple.c | 6 ++----
trace/simple.h | 4 ++--
vl.c | 13 +++++++++----
6 files changed, 38 insertions(+), 17 deletions(-)
diff --git a/qemu-io.c b/qemu-io.c
index d6fa11b..fbddf82 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -440,7 +440,7 @@ int main(int argc, char **argv)
}
break;
case 'T':
- if (!trace_init_backends(optarg)) {
+ if (!trace_init_backends()) {
exit(1); /* error message will have been printed */
}
break;
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 56a624c..e8594cd 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);
@@ -336,7 +336,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, ...))
@@ -374,7 +373,7 @@ static GThread *trace_thread_create(GThreadFunc fn)
return thread;
}
-bool st_init(const char *file)
+bool st_init(void)
{
GThread *thread;
@@ -387,6 +386,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 2aa368b..210db41 100644
--- a/vl.c
+++ b/vl.c
@@ -2994,7 +2994,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;
@@ -3911,7 +3911,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;
}
@@ -4095,6 +4098,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) {
@@ -4112,7 +4117,7 @@ int main(int argc, char **argv, char **envp)
}
if (!is_daemonized()) {
- if (!trace_init_backends(trace_file)) {
+ if (!trace_init_backends()) {
exit(1);
}
}
@@ -4676,7 +4681,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] 27+ messages in thread
end of thread, other threads:[~2016-01-07 13:55 UTC | newest]
Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-26 9:10 [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 01/11] trace: fix documentation Denis V. Lunev
2015-10-26 20:05 ` Christian Borntraeger
2015-10-28 15:15 ` Denis V. Lunev
2015-10-29 14:24 ` Christian Borntraeger
2015-10-29 17:18 ` Stefan Hajnoczi
2015-10-26 9:10 ` [Qemu-devel] [PATCH 02/11] trace: split trace_init_events out of trace_init_backends Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 03/11] trace: split trace_init_file " Denis V. Lunev
2015-10-29 17:23 ` Stefan Hajnoczi
2015-10-29 17:52 ` Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 04/11] trace: no need to call trace_backend_init in different branches now Denis V. Lunev
2015-10-26 17:18 ` Paolo Bonzini
2015-10-26 9:10 ` [Qemu-devel] [PATCH 05/11] trace: add "-trace enable=..." Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 06/11] trace: add "-trace help" Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 07/11] log: do not unnecessarily include qom/cpu.h Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 08/11] log: move qemu-log.c into util/ directory Denis V. Lunev
2015-10-26 17:20 ` Paolo Bonzini
2015-10-26 18:24 ` Denis V. Lunev
2015-10-26 9:10 ` [Qemu-devel] [PATCH 09/11] trace: convert stderr backend to log Denis V. Lunev
2015-10-26 9:14 ` [Qemu-devel] [PATCH 10/11] trace: switch default backend to "log" Denis V. Lunev
2015-10-26 9:14 ` [Qemu-devel] [PATCH 11/11] log: add "-d trace:PATTERN" Denis V. Lunev
2015-10-26 13:12 ` Lluís Vilanova
2015-10-26 17:07 ` Eric Blake
2015-10-26 19:23 ` Lluís Vilanova
2015-10-29 17:38 ` [Qemu-devel] [PATCH v2 00/11] simplify usage of tracepoints, and connect them to logging Stefan Hajnoczi
-- strict thread matches above, loose matches on Subject: below --
2015-10-29 20:44 [Qemu-devel] [PATCH v3 " Denis V. Lunev
2015-10-29 20:44 ` [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends Denis V. Lunev
2016-01-07 13:55 [Qemu-devel] [PATCH v4 00/11] simplify usage of tracepoints, and connect them to logging Denis V. Lunev
2016-01-07 13:55 ` [Qemu-devel] [PATCH 03/11] trace: split trace_init_file out of trace_init_backends Denis V. Lunev
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.