From patchwork Thu Jan 19 03:07:28 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen Congyang X-Patchwork-Id: 136752 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 81EA9B6EEE for ; Thu, 19 Jan 2012 14:34:28 +1100 (EST) Received: from localhost ([::1]:51483 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RniJV-0004DE-Kv for incoming@patchwork.ozlabs.org; Wed, 18 Jan 2012 22:05:21 -0500 Received: from eggs.gnu.org ([140.186.70.92]:38743) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RniJN-00042f-84 for qemu-devel@nongnu.org; Wed, 18 Jan 2012 22:05:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RniJM-0000bz-28 for qemu-devel@nongnu.org; Wed, 18 Jan 2012 22:05:13 -0500 Received: from [222.73.24.84] (port=62361 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RniJL-0000bu-1P for qemu-devel@nongnu.org; Wed, 18 Jan 2012 22:05:12 -0500 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id EAF4617003F; Thu, 19 Jan 2012 11:05:09 +0800 (CST) Received: from mailserver.fnst.cn.fujitsu.com (tang.cn.fujitsu.com [127.0.0.1]) by tang.cn.fujitsu.com (8.14.3/8.13.1) with ESMTP id q0J359Vi020426; Thu, 19 Jan 2012 11:05:09 +0800 Received: from [10.167.225.226] ([10.167.225.226]) by mailserver.fnst.cn.fujitsu.com (Lotus Domino Release 8.5.1FP4) with ESMTP id 2012011911040146-379190 ; Thu, 19 Jan 2012 11:04:01 +0800 Message-ID: <4F1788F0.6010903@cn.fujitsu.com> Date: Thu, 19 Jan 2012 11:07:28 +0800 From: Wen Congyang User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100413 Fedora/3.0.4-2.fc13 Thunderbird/3.0.4 MIME-Version: 1.0 To: qemu-devel , Jan Kiszka , Dave Anderson , HATAYAMA Daisuke , Luiz Capitulino References: <4F1784EE.2040800@cn.fujitsu.com> In-Reply-To: <4F1784EE.2040800@cn.fujitsu.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-19 11:04:01, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-19 11:04:02, Serialize complete at 2012-01-19 11:04:02 X-detected-operating-system: by eggs.gnu.org: FreeBSD 6.x (1) X-Received-From: 222.73.24.84 Subject: [Qemu-devel] [RFC][PATCH 11/15 v5] support detached dump X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Let the user to choose whether to block other monitor command while dumping. Signed-off-by: Wen Congyang --- dump.c | 12 ++++++++---- hmp-commands.hx | 8 ++++---- hmp.c | 3 ++- qapi-schema.json | 2 +- qmp-commands.hx | 7 ++++--- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/dump.c b/dump.c index b2cccd8..14c2642 100644 --- a/dump.c +++ b/dump.c @@ -76,6 +76,7 @@ typedef struct DumpState { int state; char *error; int fd; + bool detach; target_phys_addr_t memory_offset; int64_t bandwidth; RAMBlock *block; @@ -405,7 +406,7 @@ static target_phys_addr_t get_offset(target_phys_addr_t phys_addr, return -1; } -static DumpState *dump_init(int fd, Error **errp) +static DumpState *dump_init(int fd, bool detach, Error **errp) { CPUState *env; DumpState *s = dump_get_current(); @@ -422,6 +423,7 @@ static DumpState *dump_init(int fd, Error **errp) s->block = QLIST_FIRST(&ram_list.blocks); s->start = 0; s->timer = NULL; + s->detach = detach; /* * get dump info: endian, class and architecture. @@ -465,7 +467,9 @@ static DumpState *dump_init(int fd, Error **errp) } msg = "terminal does not allow synchronous dumping, continuing detached\n"; - qemu_suspend_monitor("%s", msg); + if (!detach && qemu_suspend_monitor("%s", msg) != 0) { + s->detach = true; + } return s; } @@ -665,7 +669,7 @@ static int create_vmcore(DumpState *s) return 0; } -void qmp_dump(const char *file, Error **errp) +void qmp_dump(bool detach, const char *file, Error **errp) { const char *p; int fd = -1; @@ -694,7 +698,7 @@ void qmp_dump(const char *file, Error **errp) return; } - s = dump_init(fd, errp); + s = dump_init(fd, detach, errp); if (!s) { return; } diff --git a/hmp-commands.hx b/hmp-commands.hx index c3615e3..4582875 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -829,18 +829,18 @@ ETEXI { .name = "dump", - .args_type = "file:s", + .args_type = "detach:-d,file:s", .params = "file", - .help = "dump to file", + .help = "dump to file (using -d to not wait for completion)", .user_print = monitor_user_noop, .mhandler.cmd = hmp_dump, }, STEXI -@item dump @var{file} +@item dump [-d] @var{file} @findex dump -Dump to @var{file}. +Dump to @var{file} (using -d to not wait for completion). ETEXI { diff --git a/hmp.c b/hmp.c index 11b4ce6..1ae8926 100644 --- a/hmp.c +++ b/hmp.c @@ -685,8 +685,9 @@ void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict) void hmp_dump(Monitor *mon, const QDict *qdict) { Error *errp = NULL; + bool detach = qdict_get_try_bool(qdict, "detach", 0); const char *file = qdict_get_str(qdict, "file"); - qmp_dump(file, &errp); + qmp_dump(detach, file, &errp); hmp_handle_error(mon, &errp); } diff --git a/qapi-schema.json b/qapi-schema.json index 84c2c9a..f96268a 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -1287,4 +1287,4 @@ # # Since: 1.1 ## -{ 'command': 'dump', 'data': {'file': 'str'} } +{ 'command': 'dump', 'data': {'detach' : 'bool', 'file': 'str'} } diff --git a/qmp-commands.hx b/qmp-commands.hx index fefdae2..59ddd98 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -573,9 +573,9 @@ EQMP { .name = "dump", - .args_type = "file:s", + .args_type = "detach:-d,file:s", .params = "file", - .help = "dump to file", + .help = "dump to file (using -d to not wait for completion)", .user_print = monitor_user_noop, .mhandler.cmd_new = qmp_marshal_input_dump, }, @@ -588,7 +588,8 @@ Dump to file. Arguments: -- "file": Destination file (json-string) +- "detach": detached dumping (json-bool, optional) +- "file": Destination file (json-string) Example: