From patchwork Wed Jan 4 06:13:08 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen Congyang X-Patchwork-Id: 134215 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 116771007D9 for ; Wed, 4 Jan 2012 17:11:11 +1100 (EST) Received: from localhost ([::1]:55633 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RiK43-00022K-6w for incoming@patchwork.ozlabs.org; Wed, 04 Jan 2012 01:11:07 -0500 Received: from eggs.gnu.org ([140.186.70.92]:33701) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RiK3x-00022F-Eo for qemu-devel@nongnu.org; Wed, 04 Jan 2012 01:11:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RiK3v-0003ER-Ln for qemu-devel@nongnu.org; Wed, 04 Jan 2012 01:11:01 -0500 Received: from [222.73.24.84] (port=52016 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RiK3u-0003EC-64 for qemu-devel@nongnu.org; Wed, 04 Jan 2012 01:10:59 -0500 Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 1DC8A17008E; Wed, 4 Jan 2012 14:10:57 +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 q046AnNG017366; Wed, 4 Jan 2012 14:10:53 +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 2012010414095729-231829 ; Wed, 4 Jan 2012 14:09:57 +0800 Message-ID: <4F03EDF4.8080903@cn.fujitsu.com> Date: Wed, 04 Jan 2012 14:13:08 +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 References: <4F03E735.2050804@cn.fujitsu.com> In-Reply-To: <4F03E735.2050804@cn.fujitsu.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-04 14:09:57, Serialize by Router on mailserver/fnst(Release 8.5.1FP4|July 25, 2010) at 2012-01-04 14:10:02, Serialize complete at 2012-01-04 14:10: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 10/14 v4] 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 | 24 +++++++++++++++++++----- hmp-commands.hx | 8 ++++---- qmp-commands.hx | 7 ++++--- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/dump.c b/dump.c index 09ed96a..6acc252 100644 --- a/dump.c +++ b/dump.c @@ -74,6 +74,7 @@ typedef struct DumpState { char *error; Monitor *mon; int fd; + int detach; target_phys_addr_t memory_offset; int64_t bandwidth; RAMBlock *block; @@ -110,6 +111,10 @@ static int dump_cleanup(DumpState *s) qemu_free_timer(s->timer); } + if (!s->detach && s->error) { + monitor_printf(s->mon, "%s", s->error); + } + if (s->mon) { monitor_resume(s->mon); } @@ -405,7 +410,7 @@ static target_phys_addr_t get_offset(target_phys_addr_t phys_addr, return -1; } -static DumpState *dump_init(Monitor *mon, int fd) +static DumpState *dump_init(Monitor *mon, int fd, int detach) { CPUState *env; DumpState *s = dump_get_current(); @@ -419,6 +424,7 @@ static DumpState *dump_init(Monitor *mon, int fd) s->block = QLIST_FIRST(&ram_list.blocks); s->start = 0; s->timer = NULL; + s->detach = detach; /* * get dump info: endian, class and architecture. @@ -461,9 +467,12 @@ static DumpState *dump_init(Monitor *mon, int fd) s->phdr_num += s->list.num; } - if (monitor_suspend(mon) != 0) { - monitor_printf(mon, "terminal does not allow synchronous " - "dump, continuing detached\n"); + if (!detach) { + if (monitor_suspend(mon) != 0) { + monitor_printf(mon, "terminal does not allow synchronous " + "dump, continuing detached\n"); + s->detach = 1; + } } return s; @@ -667,6 +676,7 @@ static int create_vmcore(DumpState *s) int do_dump(Monitor *mon, const QDict *qdict, QObject **ret_data) { const char *file = qdict_get_str(qdict, "file"); + int detach = qdict_get_try_bool(qdict, "detach", 0); const char *p; int fd = -1; DumpState *s; @@ -695,11 +705,15 @@ int do_dump(Monitor *mon, const QDict *qdict, QObject **ret_data) return -1; } - s = dump_init(mon, fd); + s = dump_init(mon, fd, detach); if (!s) { return -1; } + if (s->detach) { + s->mon = NULL; + } + if (create_vmcore(s) < 0) { return -1; } diff --git a/hmp-commands.hx b/hmp-commands.hx index 98c1c35..ef0d53a 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_new = do_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/qmp-commands.hx b/qmp-commands.hx index 023cade..f359dff 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 = do_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: