diff options
Diffstat (limited to 'tools/i386/qemu-vmsr-helper.c')
| -rw-r--r-- | tools/i386/qemu-vmsr-helper.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/tools/i386/qemu-vmsr-helper.c b/tools/i386/qemu-vmsr-helper.c index ebf562c3ff..a35dcb88a3 100644 --- a/tools/i386/qemu-vmsr-helper.c +++ b/tools/i386/qemu-vmsr-helper.c @@ -54,6 +54,7 @@ static enum { RUNNING, TERMINATE, TERMINATING } state; static QIOChannelSocket *server_ioc; static int server_watch; static int num_active_sockets = 1; +static bool verbose; #ifdef CONFIG_LIBCAP_NG static int uid = -1; @@ -227,19 +228,17 @@ static void coroutine_fn vh_co_entry(void *opaque) &peer_pid, &local_err); if (r < 0) { - error_report_err(local_err); goto out; } - while (r < 0) { + for (;;) { /* * Read the requested MSR * Only RAPL MSR in rapl-msr-index.h is allowed */ - r = qio_channel_read_all(QIO_CHANNEL(client->ioc), - (char *) &request, sizeof(request), &local_err); - if (r < 0) { - error_report_err(local_err); + r = qio_channel_read_all_eof(QIO_CHANNEL(client->ioc), + (char *) &request, sizeof(request), &local_err); + if (r <= 0) { break; } @@ -261,11 +260,19 @@ static void coroutine_fn vh_co_entry(void *opaque) sizeof(vmsr), &local_err); if (r < 0) { - error_report_err(local_err); break; } } + out: + if (local_err) { + if (!verbose) { + error_free(local_err); + } else { + error_report_err(local_err); + } + } + object_unref(OBJECT(client->ioc)); g_free(client); } @@ -429,6 +436,9 @@ int main(int argc, char **argv) case 'd': daemonize = true; break; + case 'v': + verbose = true; + break; case 'T': trace_opt_parse(optarg); break; |