trace: move qemu_trace_opts to trace/control.c

The patch also creates trace_opt_parse() helper in trace/control.c to reuse
this code in next patches for qemu-nbd and qemu-io.

The patch also makes trace_init_events() static, as this call is not used
outside the module anymore.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1466174654-30130-4-git-send-email-den@openvz.org
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Denis V. Lunev 2016-06-17 17:44:10 +03:00 committed by Stefan Hajnoczi
parent eeb2b8f78d
commit e9e0bb2af2
3 changed files with 57 additions and 48 deletions

View File

@ -21,11 +21,33 @@
#endif #endif
#include "qapi/error.h" #include "qapi/error.h"
#include "qemu/error-report.h" #include "qemu/error-report.h"
#include "qemu/config-file.h"
#include "monitor/monitor.h" #include "monitor/monitor.h"
int trace_events_enabled_count; int trace_events_enabled_count;
bool trace_events_dstate[TRACE_EVENT_COUNT]; bool trace_events_dstate[TRACE_EVENT_COUNT];
QemuOptsList qemu_trace_opts = {
.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,
},{
.name = "file",
.type = QEMU_OPT_STRING,
},
{ /* end of list */ }
},
};
TraceEvent *trace_event_name(const char *name) TraceEvent *trace_event_name(const char *name)
{ {
assert(name != NULL); assert(name != NULL);
@ -142,7 +164,7 @@ void trace_enable_events(const char *line_buf)
} }
} }
void trace_init_events(const char *fname) static void trace_init_events(const char *fname)
{ {
Location loc; Location loc;
FILE *fp; FILE *fp;
@ -217,3 +239,21 @@ bool trace_init_backends(void)
return true; return true;
} }
char *trace_opt_parse(const char *optarg)
{
char *trace_file;
QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("trace"),
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"));
trace_file = g_strdup(qemu_opt_get(opts, "file"));
qemu_opts_del(opts);
return trace_file;
}

View File

@ -159,17 +159,6 @@ static void trace_event_set_state_dynamic(TraceEvent *ev, bool state);
*/ */
bool trace_init_backends(void); bool trace_init_backends(void);
/**
* 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);
/** /**
* trace_init_file: * trace_init_file:
* @file: Name of trace output file; may be NULL. * @file: Name of trace output file; may be NULL.
@ -197,6 +186,20 @@ void trace_list_events(void);
*/ */
void trace_enable_events(const char *line_buf); void trace_enable_events(const char *line_buf);
/**
* Definition of QEMU options describing trace subsystem configuration
*/
extern QemuOptsList qemu_trace_opts;
/**
* trace_opt_parse:
* @optarg: A string argument of --trace command line argument
*
* Initialize tracing subsystem.
*
* Returns the filename to save trace to. It must be freed with g_free().
*/
char *trace_opt_parse(const char *optarg);
#include "trace/control-internal.h" #include "trace/control-internal.h"

38
vl.c
View File

@ -262,26 +262,6 @@ static QemuOptsList qemu_sandbox_opts = {
}, },
}; };
static QemuOptsList qemu_trace_opts = {
.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,
},{
.name = "file",
.type = QEMU_OPT_STRING,
},
{ /* end of list */ }
},
};
static QemuOptsList qemu_option_rom_opts = { static QemuOptsList qemu_option_rom_opts = {
.name = "option-rom", .name = "option-rom",
.implied_opt_name = "romfile", .implied_opt_name = "romfile",
@ -3864,23 +3844,9 @@ int main(int argc, char **argv, char **envp)
xen_mode = XEN_ATTACH; xen_mode = XEN_ATTACH;
break; break;
case QEMU_OPTION_trace: case QEMU_OPTION_trace:
{ g_free(trace_file);
opts = qemu_opts_parse_noisily(qemu_find_opts("trace"), trace_file = trace_opt_parse(optarg);
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);
}
trace_file = g_strdup(qemu_opt_get(opts, "file"));
qemu_opts_del(opts);
break; break;
}
case QEMU_OPTION_readconfig: case QEMU_OPTION_readconfig:
{ {
int ret = qemu_read_config_file(optarg); int ret = qemu_read_config_file(optarg);