From nobody Sat Nov 15 22:33:51 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747760978; cv=none; d=zohomail.com; s=zohoarc; b=Ck0kD1aHozhGansoz610aMfdjlbPgLlcQ8dYNVdcnEz8lIFQReQb/7lgNKtvDGTPbxmF2ae1vxVXkq3GTjn6VI0Z7KDdOupjguO9sUm9hJc9u7t/fkWegsIuSq1Ykj6Xo1wlrqKjbOwCh87jeLI+uD4TE7+s/1N8QCEeJP60z2g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747760978; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=I1t580PshyRViX4u6aQJtTxFf+hQIfkQ/JxQslXSAcE=; b=RXxsoBHb465AXscz5XKEHmQYqp526zABn9eHbq/omdpTsSZdvWbr1eERbfOOj4euOZJ05kPQ7l6QBTWtXd6XndUxlKL98AelmFBpy6XhSHuPnTIuNI1IndSxcvHYvPz9U9F0kxr1NZkl2LaT19UHZGoChrMsYthp8MESVXFjnX4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747760978417912.1574608480911; Tue, 20 May 2025 10:09:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uHQRz-0000HH-2Y; Tue, 20 May 2025 13:08:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uHQRv-0000Fs-G6 for qemu-devel@nongnu.org; Tue, 20 May 2025 13:08:19 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uHQRt-0001BT-5p for qemu-devel@nongnu.org; Tue, 20 May 2025 13:08:19 -0400 Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-518-h1UaXgdePluVSAgYa5scaQ-1; Tue, 20 May 2025 13:08:15 -0400 Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-7c543ab40d3so898923085a.2 for ; Tue, 20 May 2025 10:08:15 -0700 (PDT) Received: from x1.com ([85.131.185.92]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7cd467be47bsm763846585a.16.2025.05.20.10.08.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 May 2025 10:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747760896; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I1t580PshyRViX4u6aQJtTxFf+hQIfkQ/JxQslXSAcE=; b=WdW/4RwrV+uojEcf8GGgDa0zN80iUjrVbb6c7LULU1E50sPMsFHCrWoTahu3h88f0NdYP7 N+wHTtSd4650Nen2BNZ45G2XNaSNSVj8FPPnDydFgzOrcT8mSpWAwLhPCMWz9WGVUUnUEg TXbqf7ukmGzttTYqdwNnqL2carZ3ko0= X-MC-Unique: h1UaXgdePluVSAgYa5scaQ-1 X-Mimecast-MFC-AGG-ID: h1UaXgdePluVSAgYa5scaQ_1747760895 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747760894; x=1748365694; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=I1t580PshyRViX4u6aQJtTxFf+hQIfkQ/JxQslXSAcE=; b=McppNix/jOwFy8GSmN+AToJEBpNaoDSVj12sAXamXZT4rPNsJPNZZfyx3/8PyQiuaF Ukr6lAJHFUiyB+RShBPZtb3E4b/ZAEKbIJP0nRLdIra6JYJygIf7IBDGFPEgGoTImFac qamEZ96O4fKhsUZtB6/KljbqGQ8JYYJa0GqjG7wWFBIxKbbzINBikL4gCYkFCd43L0Ra epZCpgmV1CviX8zgVf/XHfM0lZ8BAS1GmvUTz6PdYyhaDvcSgvDpl0kUjKBRZMX8KGa3 OpLoYusKauERkNFqS1NSeziHLpqF0fl0EJmPb8P39ncw1kiBxvEO1UCqLjdI+fVOCqJ+ m9FA== X-Gm-Message-State: AOJu0Yx7XxZaTuzjuvcCSs82a4p6maGpbGYQ98u2Q+RNdLWCTqskyCa2 ZoN9D2TvewbYdbwBBsF1bj7DZloptOe5uRPCmnVBL7QgmL86x25erIAbc7gnpMfa+3LCGi/ij22 tRBFbZcueRxNlFOAqpqPAbnY96ySa6nLdwu4vxRYi+Ulzdlzui6TTL7DxvxD1eESgGqZGZj/DCo bwycpqpcfgwHweCfT3S7G4nUMkeufP1saCyDwdNQ== X-Gm-Gg: ASbGncuPblCudzgW8VeNamdmkSlgxXQmCTearn/lSOOeG1y/MiqWXrRMzuP3ft4AIou tBEaIpJ5tIPT4OkktM2taznRDnIQxyHE/Yw6ok0Sn2bCKIHULmGh6SuLquPCu4iYW89eCdyUOoR mTVYDuLF7baQsOkFnXpXHoX9hiMi5Awq76E2JFuJaduDM5kh+QGZ8pLdYB5ZWL3ASvREv3m2BIS Dp8/By6AhA1kQEZNs68zdLcCGqINx1E8jx3b1FXUmgK1X9Rn1PCNx0eRYpFX4sm24B796H5FSKd X-Received: by 2002:a05:620a:1786:b0:7c7:a543:dcfe with SMTP id af79cd13be357-7cd46733519mr2802472285a.32.1747760893833; Tue, 20 May 2025 10:08:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEybWnckE09Bi4ELiXcAz9KYQWh6FzCZrdiAjiHDr6IqWh0pYqePAjANtrGMPX51lFwwYB1bA== X-Received: by 2002:a05:620a:1786:b0:7c7:a543:dcfe with SMTP id af79cd13be357-7cd46733519mr2802465985a.32.1747760893299; Tue, 20 May 2025 10:08:13 -0700 (PDT) From: Peter Xu To: qemu-devel@nongnu.org Cc: Fabiano Rosas , Stefan Hajnoczi , peterx@redhat.com, "Dr. David Alan Gilbert" , Mario Casquero Subject: [PULL 12/12] migration/hmp: Add "info migrate -a", reorg the dump Date: Tue, 20 May 2025 13:07:51 -0400 Message-ID: <20250520170751.786787-13-peterx@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250520170751.786787-1-peterx@redhat.com> References: <20250520170751.786787-1-peterx@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=peterx@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.487, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1747760980213116600 Content-Type: text/plain; charset="utf-8" A new parameter "-a" is added to "info migrate" to dump all info, while when not specified it only dumps the important ones. When at it, reorg everything to make it easier to read for human. The general rule is: - Put important things at the top - Reuse a single line when things are very relevant, hence reducing lines needed to show the results - Remove almost useless ones (e.g. "normal_bytes", while we also have both "page size" and "normal" pages) - Regroup things, so that related fields will show together - etc. Before this change, it looks like (one example of a completed case): globals: store-global-state: on only-migratable: off send-configuration: on send-section-footer: on send-switchover-start: on clear-bitmap-shift: 18 Migration status: completed total time: 122952 ms downtime: 76 ms setup: 15 ms transferred ram: 130825923 kbytes throughput: 8717.68 mbps remaining ram: 0 kbytes total ram: 16777992 kbytes duplicate: 997263 pages normal: 32622225 pages normal bytes: 130488900 kbytes dirty sync count: 10 page size: 4 kbytes multifd bytes: 117134260 kbytes pages-per-second: 169431 postcopy request count: 5835 precopy ram: 15 kbytes postcopy ram: 13691151 kbytes After this change, sample output (default, no "-a" specified): Status: postcopy-active Time (ms): total=3D40504, setup=3D14, down=3D145 RAM info: Bandwidth (mbps): 6102.65 Sizes (KB): psize=3D4, total=3D16777992, transferred=3D37673019, remain=3D2136404, precopy=3D3, multifd=3D26108780, postcopy=3D11563855 Pages: normal=3D9394288, zero=3D600672, rate_per_sec=3D185875 Others: dirty_syncs=3D3, dirty_pages_rate=3D278378, postcopy_req=3D4078 Sample output when "-a" specified: Status: active Time (ms): total=3D3040, setup=3D4, exp_down=3D300 RAM info: Throughput (mbps): 10.51 Sizes (KB): psize=3D4, total=3D4211528, transferred=3D3979, remain=3D4206452, precopy=3D3978, multifd=3D0, postcopy=3D0 Pages: normal=3D992, zero=3D277, rate_per_sec=3D320 Others: dirty_syncs=3D1 Globals: store-global-state: on only-migratable: off send-configuration: on send-section-footer: on send-switchover-start: on clear-bitmap-shift: 18 XBZRLE: size=3D67108864, transferred=3D0, pages=3D0, miss=3D188451 miss_rate=3D0.00, encode_rate=3D0.00, overflow=3D0 CPU Throttle (%): 0 Dirty-limit Throttle (us): 0 Dirty-limit Ring Full (us): 0 Postcopy Blocktime (ms): 0 Postcopy vCPU Blocktime: ... Reviewed-by: Dr. David Alan Gilbert Tested-by: Mario Casquero [peterx: print "," too in 1st line of RAM info] Signed-off-by: Peter Xu --- migration/migration-hmp-cmds.c | 186 +++++++++++++++++---------------- hmp-commands-info.hx | 6 +- 2 files changed, 99 insertions(+), 93 deletions(-) diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c index 49c26daed3..e8a563c7d8 100644 --- a/migration/migration-hmp-cmds.c +++ b/migration/migration-hmp-cmds.c @@ -37,29 +37,28 @@ static void migration_global_dump(Monitor *mon) { MigrationState *ms =3D migrate_get_current(); =20 - monitor_printf(mon, "globals:\n"); - monitor_printf(mon, "store-global-state: %s\n", + monitor_printf(mon, "Globals:\n"); + monitor_printf(mon, " store-global-state: %s\n", ms->store_global_state ? "on" : "off"); - monitor_printf(mon, "only-migratable: %s\n", + monitor_printf(mon, " only-migratable: %s\n", only_migratable ? "on" : "off"); - monitor_printf(mon, "send-configuration: %s\n", + monitor_printf(mon, " send-configuration: %s\n", ms->send_configuration ? "on" : "off"); - monitor_printf(mon, "send-section-footer: %s\n", + monitor_printf(mon, " send-section-footer: %s\n", ms->send_section_footer ? "on" : "off"); - monitor_printf(mon, "send-switchover-start: %s\n", + monitor_printf(mon, " send-switchover-start: %s\n", ms->send_switchover_start ? "on" : "off"); - monitor_printf(mon, "clear-bitmap-shift: %u\n", + monitor_printf(mon, " clear-bitmap-shift: %u\n", ms->clear_bitmap_shift); } =20 void hmp_info_migrate(Monitor *mon, const QDict *qdict) { + bool show_all =3D qdict_get_try_bool(qdict, "all", false); MigrationInfo *info; =20 info =3D qmp_query_migrate(NULL); =20 - migration_global_dump(mon); - if (info->blocked_reasons) { strList *reasons =3D info->blocked_reasons; monitor_printf(mon, "Outgoing migration blocked:\n"); @@ -70,7 +69,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) } =20 if (info->has_status) { - monitor_printf(mon, "Migration status: %s", + monitor_printf(mon, "Status: %s", MigrationStatus_str(info->status)); if (info->status =3D=3D MIGRATION_STATUS_FAILED && info->error_des= c) { monitor_printf(mon, " (%s)\n", info->error_desc); @@ -78,107 +77,130 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdic= t) monitor_printf(mon, "\n"); } =20 - monitor_printf(mon, "total time: %" PRIu64 " ms\n", - info->total_time); - if (info->has_expected_downtime) { - monitor_printf(mon, "expected downtime: %" PRIu64 " ms\n", - info->expected_downtime); - } - if (info->has_downtime) { - monitor_printf(mon, "downtime: %" PRIu64 " ms\n", - info->downtime); + if (info->total_time) { + monitor_printf(mon, "Time (ms): total=3D%" PRIu64, + info->total_time); + if (info->has_setup_time) { + monitor_printf(mon, ", setup=3D%" PRIu64, + info->setup_time); + } + if (info->has_expected_downtime) { + monitor_printf(mon, ", exp_down=3D%" PRIu64, + info->expected_downtime); + } + if (info->has_downtime) { + monitor_printf(mon, ", down=3D%" PRIu64, + info->downtime); + } + monitor_printf(mon, "\n"); } - if (info->has_setup_time) { - monitor_printf(mon, "setup: %" PRIu64 " ms\n", - info->setup_time); + } + + if (info->has_socket_address) { + SocketAddressList *addr; + + monitor_printf(mon, "Sockets: [\n"); + + for (addr =3D info->socket_address; addr; addr =3D addr->next) { + char *s =3D socket_uri(addr->value); + monitor_printf(mon, "\t%s\n", s); + g_free(s); } + monitor_printf(mon, "]\n"); } =20 if (info->ram) { - monitor_printf(mon, "transferred ram: %" PRIu64 " kbytes\n", - info->ram->transferred >> 10); - monitor_printf(mon, "throughput: %0.2f mbps\n", + monitor_printf(mon, "RAM info:\n"); + monitor_printf(mon, " Throughput (Mbps): %0.2f\n", info->ram->mbps); - monitor_printf(mon, "remaining ram: %" PRIu64 " kbytes\n", - info->ram->remaining >> 10); - monitor_printf(mon, "total ram: %" PRIu64 " kbytes\n", + monitor_printf(mon, " Sizes (KiB): pagesize=3D%" PRIu64 + ", total=3D%" PRIu64 ",\n", + info->ram->page_size >> 10, info->ram->total >> 10); - monitor_printf(mon, "duplicate: %" PRIu64 " pages\n", - info->ram->duplicate); - monitor_printf(mon, "normal: %" PRIu64 " pages\n", - info->ram->normal); - monitor_printf(mon, "normal bytes: %" PRIu64 " kbytes\n", - info->ram->normal_bytes >> 10); - monitor_printf(mon, "dirty sync count: %" PRIu64 "\n", - info->ram->dirty_sync_count); - monitor_printf(mon, "page size: %" PRIu64 " kbytes\n", - info->ram->page_size >> 10); - monitor_printf(mon, "multifd bytes: %" PRIu64 " kbytes\n", - info->ram->multifd_bytes >> 10); - monitor_printf(mon, "pages-per-second: %" PRIu64 "\n", + monitor_printf(mon, " transferred=3D%" PRIu64 + ", remain=3D%" PRIu64 ",\n", + info->ram->transferred >> 10, + info->ram->remaining >> 10); + monitor_printf(mon, " precopy=3D%" PRIu64 + ", multifd=3D%" PRIu64 + ", postcopy=3D%" PRIu64, + info->ram->precopy_bytes >> 10, + info->ram->multifd_bytes >> 10, + info->ram->postcopy_bytes >> 10); + + if (info->vfio) { + monitor_printf(mon, ", vfio=3D%" PRIu64, + info->vfio->transferred >> 10); + } + monitor_printf(mon, "\n"); + + monitor_printf(mon, " Pages: normal=3D%" PRIu64 ", zero=3D%" PRIu= 64 + ", rate_per_sec=3D%" PRIu64 "\n", + info->ram->normal, + info->ram->duplicate, info->ram->pages_per_second); + monitor_printf(mon, " Others: dirty_syncs=3D%" PRIu64, + info->ram->dirty_sync_count); =20 if (info->ram->dirty_pages_rate) { - monitor_printf(mon, "dirty pages rate: %" PRIu64 " pages\n", + monitor_printf(mon, ", dirty_pages_rate=3D%" PRIu64, info->ram->dirty_pages_rate); } if (info->ram->postcopy_requests) { - monitor_printf(mon, "postcopy request count: %" PRIu64 "\n", + monitor_printf(mon, ", postcopy_req=3D%" PRIu64, info->ram->postcopy_requests); } - if (info->ram->precopy_bytes) { - monitor_printf(mon, "precopy ram: %" PRIu64 " kbytes\n", - info->ram->precopy_bytes >> 10); - } if (info->ram->downtime_bytes) { - monitor_printf(mon, "downtime ram: %" PRIu64 " kbytes\n", - info->ram->downtime_bytes >> 10); - } - if (info->ram->postcopy_bytes) { - monitor_printf(mon, "postcopy ram: %" PRIu64 " kbytes\n", - info->ram->postcopy_bytes >> 10); + monitor_printf(mon, ", downtime_ram=3D%" PRIu64, + info->ram->downtime_bytes); } if (info->ram->dirty_sync_missed_zero_copy) { - monitor_printf(mon, - "Zero-copy-send fallbacks happened: %" PRIu64 "= times\n", + monitor_printf(mon, ", zerocopy_fallbacks=3D%" PRIu64, info->ram->dirty_sync_missed_zero_copy); } + monitor_printf(mon, "\n"); + } + + if (!show_all) { + goto out; } =20 + migration_global_dump(mon); + if (info->xbzrle_cache) { - monitor_printf(mon, "cache size: %" PRIu64 " bytes\n", - info->xbzrle_cache->cache_size); - monitor_printf(mon, "xbzrle transferred: %" PRIu64 " kbytes\n", - info->xbzrle_cache->bytes >> 10); - monitor_printf(mon, "xbzrle pages: %" PRIu64 " pages\n", - info->xbzrle_cache->pages); - monitor_printf(mon, "xbzrle cache miss: %" PRIu64 " pages\n", - info->xbzrle_cache->cache_miss); - monitor_printf(mon, "xbzrle cache miss rate: %0.2f\n", - info->xbzrle_cache->cache_miss_rate); - monitor_printf(mon, "xbzrle encoding rate: %0.2f\n", - info->xbzrle_cache->encoding_rate); - monitor_printf(mon, "xbzrle overflow: %" PRIu64 "\n", + monitor_printf(mon, "XBZRLE: size=3D%" PRIu64 + ", transferred=3D%" PRIu64 + ", pages=3D%" PRIu64 + ", miss=3D%" PRIu64 "\n" + " miss_rate=3D%0.2f" + ", encode_rate=3D%0.2f" + ", overflow=3D%" PRIu64 "\n", + info->xbzrle_cache->cache_size, + info->xbzrle_cache->bytes, + info->xbzrle_cache->pages, + info->xbzrle_cache->cache_miss, + info->xbzrle_cache->cache_miss_rate, + info->xbzrle_cache->encoding_rate, info->xbzrle_cache->overflow); } =20 if (info->has_cpu_throttle_percentage) { - monitor_printf(mon, "cpu throttle percentage: %" PRIu64 "\n", + monitor_printf(mon, "CPU Throttle (%%): %" PRIu64 "\n", info->cpu_throttle_percentage); } =20 if (info->has_dirty_limit_throttle_time_per_round) { - monitor_printf(mon, "dirty-limit throttle time: %" PRIu64 " us\n", + monitor_printf(mon, "Dirty-limit Throttle (us): %" PRIu64 "\n", info->dirty_limit_throttle_time_per_round); } =20 if (info->has_dirty_limit_ring_full_time) { - monitor_printf(mon, "dirty-limit ring full time: %" PRIu64 " us\n", + monitor_printf(mon, "Dirty-limit Ring Full (us): %" PRIu64 "\n", info->dirty_limit_ring_full_time); } =20 if (info->has_postcopy_blocktime) { - monitor_printf(mon, "postcopy blocktime: %u\n", + monitor_printf(mon, "Postcopy Blocktime (ms): %" PRIu32 "\n", info->postcopy_blocktime); } =20 @@ -189,28 +211,12 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdic= t) visit_type_uint32List(v, NULL, &info->postcopy_vcpu_blocktime, &error_abort); visit_complete(v, &str); - monitor_printf(mon, "postcopy vcpu blocktime: %s\n", str); + monitor_printf(mon, "Postcopy vCPU Blocktime: %s\n", str); g_free(str); visit_free(v); } - if (info->has_socket_address) { - SocketAddressList *addr; - - monitor_printf(mon, "socket address: [\n"); - - for (addr =3D info->socket_address; addr; addr =3D addr->next) { - char *s =3D socket_uri(addr->value); - monitor_printf(mon, "\t%s\n", s); - g_free(s); - } - monitor_printf(mon, "]\n"); - } - - if (info->vfio) { - monitor_printf(mon, "vfio device transferred: %" PRIu64 " kbytes\n= ", - info->vfio->transferred >> 10); - } =20 +out: qapi_free_MigrationInfo(info); } =20 diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index c59cd6637b..639a450ee5 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -475,9 +475,9 @@ ERST =20 { .name =3D "migrate", - .args_type =3D "", - .params =3D "", - .help =3D "show migration status", + .args_type =3D "all:-a", + .params =3D "[-a]", + .help =3D "show migration status (-a: all, dump all status)", .cmd =3D hmp_info_migrate, }, =20 --=20 2.49.0