All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Lluís Vilanova" <vilanova@ac.upc.edu>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, "Emilio G. Cota" <cota@braap.org>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Eric Blake <eblake@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 08/20] instrument: [hmp] Add library loader
Date: Mon, 11 Sep 2017 01:07:59 +0300	[thread overview]
Message-ID: <87poayxl4w.fsf@frigg.lan> (raw)
In-Reply-To: <87vakuki1h.fsf@dusky.pond.sub.org> (Markus Armbruster's message of "Thu, 07 Sep 2017 10:51:54 +0200")

Markus Armbruster writes:

> Lluís Vilanova <vilanova@ac.upc.edu> writes:
>> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
>> ---
>> hmp-commands.hx |   28 ++++++++++++++++++++++++++
>> monitor.c       |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 88 insertions(+)
>> 
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index 1941e19932..703d7262f5 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -1858,6 +1858,34 @@ ETEXI
>> .sub_table  = info_cmds,
>> },
>> 
>> +    {
>> +        .name       = "instr-load",
>> +        .args_type  = "path:F,args:s?",
>> +        .params     = "path [arg]",
>> +        .help       = "load an instrumentation library",
>> +        .cmd        = hmp_instr_load,
>> +    },
>> +
>> +STEXI
>> +@item instr-load @var{path} [args=value[,...]]
>> +@findex instr-load
>> +Load an instrumentation library.
>> +ETEXI
>> +
>> +    {
>> +        .name       = "instr-unload",
>> +        .args_type  = "handle:i",
>> +        .params     = "handle",
>> +        .help       = "unload an instrumentation library",
>> +        .cmd        = hmp_instr_unload,
>> +    },
>> +
>> +STEXI
>> +@item instr-unload
>> +@findex instr-unload
>> +Unload an instrumentation library.
>> +ETEXI
>> +
>> STEXI
>> @end table
>> ETEXI

> Want #ifdef CONFIG_INSTRUMENT, see my review of the previous patch.

> See also my remark there on returning handles vs. passing in IDs.

>> diff --git a/monitor.c b/monitor.c
>> index e0f880107f..8a7684f860 100644
>> --- a/monitor.c
>> +++ b/monitor.c
>> @@ -2319,6 +2319,66 @@ int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
>> return fd;
>> }
>> 
>> +static void hmp_instr_load(Monitor *mon, const QDict *qdict)
>> +{
>> +    const char *path = qdict_get_str(qdict, "path");
>> +    const char *str = qdict_get_try_str(qdict, "args");
>> +    strList args;

> Blank line between last declaration and first statement, please.

>> +    args.value = (str == NULL) ? NULL : (char *)str;

> What's wrong with

>        args.value = (char *)str;

> ?

>> +    args.next = NULL;
>> +    InstrLoadResult *res = qmp_instr_load(path, args.value != NULL,
>> +                                          args.value != NULL ? &args : NULL,
>> +                                          NULL);
>> +    switch (res->code) {
>> +    case INSTR_LOAD_CODE_OK:
>> +        monitor_printf(mon, "Handle: %"PRId64"\n", res->handle);
>> +        monitor_printf(mon, "OK\n");
>> +        break;
>> +    case INSTR_LOAD_CODE_TOO_MANY:
>> +        monitor_printf(mon, "Too many instrumentation libraries already loaded\n");
>> +        break;
>> +    case INSTR_LOAD_CODE_ERROR:
>> +        monitor_printf(mon, "Instrumentation library returned a non-zero value during initialization");
>> +        break;
>> +    case INSTR_LOAD_CODE_DLERROR:
>> +        monitor_printf(mon, "Error loading library: %s\n", res->msg);
>> +        break;
>> +    case INSTR_LOAD_CODE_UNAVAILABLE:
>> +        monitor_printf(mon, "Service not available\n");
>> +        break;
>> +    default:
>> +        fprintf(stderr, "Unknown instrumentation load code: %d", res->code);
>> +        exit(1);

> Impossible conditions should be assertion failures, but it's a moot point
> because...

>> +        break;
>> +    }
>> +    qapi_free_InstrLoadResult(res);
>> +}

> With qmp_instr_load() fixed to set an error on failure, this becomes
> something like

>        InstrLoadResult *res = qmp_instr_load(path, args.value != NULL,
>                                              args.value != NULL ? &args : NULL,
>                                              &err);
>        if (err) {
>            error_report_err(err);
>        } else {
>            monitor_printf(mon, "Handle: %"PRId64"\n", res->handle);
>            monitor_printf(mon, "OK\n");
>        }
>        qapi_free_InstrLoadResult(res);

>> +
>> +static void hmp_instr_unload(Monitor *mon, const QDict *qdict)
>> +{
>> +    int64_t handle = qdict_get_int(qdict, "handle");
>> +    InstrUnloadResult *res = qmp_instr_unload(handle, NULL);
>> +    switch (res->code) {
>> +    case INSTR_UNLOAD_CODE_OK:
>> +        monitor_printf(mon, "OK\n");
>> +        break;
>> +    case INSTR_UNLOAD_CODE_INVALID:
>> +        monitor_printf(mon, "Invalid handle\n");
>> +        break;
>> +    case INSTR_UNLOAD_CODE_DLERROR:
>> +        monitor_printf(mon, "Error unloading library: %s\n", res->msg);
>> +        break;
>> +    case INSTR_UNLOAD_CODE_UNAVAILABLE:
>> +        monitor_printf(mon, "Service not available\n");
>> +        break;
>> +    default:
>> +        fprintf(stderr, "Unknown instrumentation unload code: %d", res->code);
>> +        exit(1);
>> +        break;
>> +    }
>> +    qapi_free_InstrUnloadResult(res);
>> +}
>> +
>> /* Please update hmp-commands.hx when adding or changing commands */
>> static mon_cmd_t info_cmds[] = {
>> #include "hmp-commands-info.h"

> Likewise.

Done, thanks!

Lluis

  reply	other threads:[~2017-09-10 22:08 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-06 17:22 [Qemu-devel] [PATCH v4 00/20] instrument: Add basic event instrumentation Lluís Vilanova
2017-09-06 17:26 ` [Qemu-devel] [PATCH v4 01/20] instrument: Add documentation Lluís Vilanova
2017-09-06 17:30 ` [Qemu-devel] [PATCH v4 02/20] instrument: Add configure-time flag Lluís Vilanova
2017-09-06 17:34 ` [Qemu-devel] [PATCH v4 03/20] instrument: Add generic library loader Lluís Vilanova
2017-09-06 21:20   ` Emilio G. Cota
2017-09-10 17:41     ` Lluís Vilanova
2017-09-06 17:38 ` [Qemu-devel] [PATCH v4 04/20] instrument: [linux-user] Add command line " Lluís Vilanova
2017-09-06 17:42 ` [Qemu-devel] [PATCH v4 05/20] instrument: [bsd-user] " Lluís Vilanova
2017-09-06 17:46 ` [Qemu-devel] [PATCH v4 06/20] instrument: [softmmu] " Lluís Vilanova
2017-09-06 17:50 ` [Qemu-devel] [PATCH v4 07/20] instrument: [qapi] Add " Lluís Vilanova
2017-09-07  8:43   ` Markus Armbruster
2017-09-10 21:39     ` Lluís Vilanova
2017-09-06 17:55 ` [Qemu-devel] [PATCH v4 08/20] instrument: [hmp] " Lluís Vilanova
2017-09-07  8:51   ` Markus Armbruster
2017-09-10 22:07     ` Lluís Vilanova [this message]
2017-09-06 17:59 ` [Qemu-devel] [PATCH v4 09/20] instrument: Add basic control interface Lluís Vilanova
2017-09-06 21:23   ` Emilio G. Cota
2017-09-10 22:15     ` Lluís Vilanova
2017-09-06 21:57   ` Emilio G. Cota
2017-09-10 23:28     ` Lluís Vilanova
2017-09-06 18:03 ` [Qemu-devel] [PATCH v4 10/20] instrument: Add support for tracing events Lluís Vilanova
2017-09-06 18:07 ` [Qemu-devel] [PATCH v4 11/20] instrument: Track vCPUs Lluís Vilanova
2017-09-06 21:36   ` Emilio G. Cota
2017-09-06 18:11 ` [Qemu-devel] [PATCH v4 12/20] instrument: Add event 'guest_cpu_enter' Lluís Vilanova
2017-09-06 18:15 ` [Qemu-devel] [PATCH v4 13/20] instrument: Add event 'guest_cpu_exit' Lluís Vilanova
2017-09-06 18:19 ` [Qemu-devel] [PATCH v4 14/20] instrument: Add event 'guest_cpu_reset' Lluís Vilanova
2017-09-06 18:23 ` [Qemu-devel] [PATCH v4 15/20] trace: Introduce a proper structure to describe memory accesses Lluís Vilanova
2017-09-06 18:27 ` [Qemu-devel] [PATCH v4 16/20] instrument: Add event 'guest_mem_before_trans' Lluís Vilanova
2017-09-06 18:31 ` [Qemu-devel] [PATCH v4 17/20] instrument: Add event 'guest_mem_before_exec' Lluís Vilanova
2017-09-06 18:35 ` [Qemu-devel] [PATCH v4 18/20] instrument: Add event 'guest_user_syscall' Lluís Vilanova
2017-09-06 18:39 ` [Qemu-devel] [PATCH v4 19/20] instrument: Add event 'guest_user_syscall_ret' Lluís Vilanova
2017-09-06 18:43 ` [Qemu-devel] [PATCH v4 20/20] instrument: Add API to manipulate guest memory Lluís Vilanova
2017-09-06 20:59 ` [Qemu-devel] [PATCH v4 00/20] instrument: Add basic event instrumentation Emilio G. Cota
2017-09-10 17:40   ` Lluís Vilanova
2017-09-10 23:31   ` Lluís Vilanova
2017-09-07  7:45 ` Markus Armbruster
2017-09-07 10:58 ` Markus Armbruster
2017-09-07 14:21   ` Emilio G. Cota
2017-09-10 17:34     ` Lluís Vilanova

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87poayxl4w.fsf@frigg.lan \
    --to=vilanova@ac.upc.edu \
    --cc=armbru@redhat.com \
    --cc=cota@braap.org \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.