From nobody Mon Apr 29 10:51:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14861364269721020.6898919900353; Fri, 3 Feb 2017 07:40:26 -0800 (PST) Received: from localhost ([::1]:35345 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZfyL-0001FG-5d for importer@patchew.org; Fri, 03 Feb 2017 10:40:25 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33805) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZfwA-0008Of-MG for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:38:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cZfw7-0002hZ-K0 for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:38:10 -0500 Received: from mail-db5eur01on0091.outbound.protection.outlook.com ([104.47.2.91]:60083 helo=EUR01-DB5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cZfw7-0002hF-7z for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:38:07 -0500 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by VI1PR0802MB2559.eurprd08.prod.outlook.com (10.172.255.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.874.12; Fri, 3 Feb 2017 15:23:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=n+kMtnUCG47IeteymvKyUukYlcvfkHq0z0mQIhNAurk=; b=E3+M9pUvs49Z5Yi/AKL12D6YD4eZhtHdy8OBIybrc9Fcs7gJ5iz7fhrk8C07EGrYBWkfcQq/ap2Io3virirU7waroTvMePx5WFD7a+rTQ+V5XztKCEFhNkkoZ3Y50cAxQwn0Vs8kwRkfyeiAe6gHka1XhO2q+hiEK5CLurT/jQ8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: Date: Fri, 3 Feb 2017 18:23:19 +0300 Message-ID: <20170203152321.19739-2-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170203152321.19739-1-pbutsykin@virtuozzo.com> References: <20170203152321.19739-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: VI1PR0901CA0084.eurprd09.prod.outlook.com (10.167.203.180) To VI1PR0802MB2559.eurprd08.prod.outlook.com (10.172.255.137) X-MS-Office365-Filtering-Correlation-Id: 306b7c8a-267b-4ddf-875b-08d44c48a119 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:VI1PR0802MB2559; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 3:4mzlvzi67WRDRMmHuUsaZlCZyp32zQ2GxxuBo/XCsZV7hyPoGQaW7UMTp9SQslJ9M9vSn0y3ciKOq0KU05dC7FIOsaZr1bfTKzgceEwXWb4XlusKclByTfAfSj6/+zpohejKIex2No9OllOyFBnAdEVv9nMB14WDrTQ6GVnco3vc1W17Yf/Yvod+kIXmQ/kyYlLBGEp0uAq+NhDDXm/SFIVUdJaUSQ72d8dUKcT0MdhOZkFlN5NdvWkmDyqgc2AIIGtvNGiyWYaYtPPs798Qqw==; 25:Dcvin/E2atEv9ddzjoawKsDtYFgvgIiVTP5A/izShDM4AvloHKc9TN8xtGX8sMdiqHMjmXBZftmwugTPXAgpdYtr3vVIbW19tH02YLCmPVmQ3I4Gic59nHZgYqTlituoCWYeLg8LMps2XWCOjNQU2ARGC2JL+eaJNb2ZOkZqFXhsxTtjQk2LdDmfvnxnEwCionAoZSm63B/z/eN0uOv3wfNMCs9zDL4a3iXWN2Ze8Q6j7/Uj1TBi2Ad3OVBPH6f5x7BHuGD9px4ObqNLMIxp66jT1hNNIo5Zi/6ke98Sfsxr2XqM/IhTWNYPAOClEldInaeU/XfCHTkIzyxy3w3T0D6GJem8qJx3DBYSp1bp4aDBo0/wKIlVJsE1y3+An9Yz58YAxMYDN88cTosXV7OEDzS9zkKZO5GhR3r/cnMiuMl4+H2HqJilnfTQsxewIRNx6aLKy8DOjwmHsWi2WknF0Q== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 31:eGSJcLBQ6kh7rfgPwkYNKe8KCdKHNBxYuTdr4/+wW8TnGZwm/ZFiEmNrtTYMnKxKCaSxfp4My3a+wBLlhlRWsPwbqKff/Nb4k1q5ynoF8d6DZalP5N57bIkSl+iuq45AZtJ5Zxn2ikqj9RoolP9nCiR1uF80S5LkvOR0z2JCO2gp6+Fgi05+T4nce1KZeISyRJCCJP4J4GcuWv25JXtH18kON6v5TgFEUO1agLo6gEd6rQULMVOHu9vU9lx5NdZW; 20:cF08FY72kXNT4Vue/WBTMo3K2a8QupBsBtYqe2mLp3v09F1pAiXJU30mXkTWuqjqoR3P+wf100ZjC6adziPSVrwHL8paVXYdPJE0Mzk/qk05j3+jiq9XNcUcvN0uuQhQq4Dg/HykpZE/YRfG/Ovsj9VkMcG+DsJ5ozodJ9KXgNPzdZLOuzfCbjVtyy2PtzaprznVtQfCborsI+BcsHofrbZOqh2vav3xihsHqdtZIgnbuKJJMAF+B08KqGSn/xTInZ7cxLQY+TE72AAIVXnxUMPiOP5WizUlNrQNrgODm3h+tHgAYqDxRWp+OkbeV5FsINU7VGW8x4vEsQiiWRDzZJDqlWWbc4UvotZNJi64vs+7qTfrYrCtjI65wSNc3sdAc20XYJQGi+UOM+vlfTaPIr2pNInLo9Hf0UYxE6kXg14= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(20161123558025)(6072148); SRVR:VI1PR0802MB2559; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2559; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 4:zVosfJ7VGKtpIlbKv5ogdyZ49c3qC5G2nePJ6oRwnoj9OYZTkr/ONFWHsBSg/FNet0AsQv1y3hQ0uTfzKHopX9c9h74AydHVk14g/WD6f15CUrC4qoeiURuIHoC2U6HlMNk65PDOF5jGkc3NcVEKweZNa4Kwect0OKYDoOYSQNroksoJ/w4CWa+dekehxZzLf5E3RdpSxOQJI/87vbhjI9GVZdg7wJohWOVNNnZjQJhoCH7sbnJGoNObfEuHXcu0pjuuwgnsl/1MfsYrNZEte1EBplu2UoCQsVQikzGxXThyoxDNS7q5azkuLKMCfg0ZHZmHOe48k/WfdLDLGnXjIwpE0DU+9fVtXXbOKxScBYJACEvlbVeRnmxuE2O10JMXM6LkF3VUEu+UST7zCA5Fahy76W4aLTeKRcOrCZn1giNtjqbbNf8hN9Y2N+L+4iFF+xipI72mgaj3Sfo3GPD1Nl/hLhUVQWjRvpjZRETjgkW4F02GMR/BJYL8QoRqREeTh7JCYhgxAAYEy9NOIr0YSiXIPjGo6P2S8YJBJV6zOgZSPlK+4RxQGPgzaxL9NELrzgImVthEkQcJkzYoBZQEuq6tcye8ZGsc5ElaCZMYjnrHGeGswfF4zM9x1TfUOlcaAHuPdJWZ++dHn/ZSmtHS/g== X-Forefront-PRVS: 02070414A1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(189002)(199003)(6116002)(48376002)(6486002)(2351001)(189998001)(68736007)(6506006)(38730400001)(50226002)(25786008)(54906002)(36756003)(53416004)(7736002)(106356001)(305945005)(8676002)(105586002)(101416001)(5003940100001)(53936002)(69596002)(42186005)(76176999)(50986999)(107886002)(81166006)(86362001)(2950100002)(4326007)(110136003)(81156014)(6666003)(2906002)(6916009)(5660300001)(33646002)(50466002)(92566002)(66066001)(97736004)(6512007)(1076002)(3846002)(4001430100002)(47776003); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2559; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2559; 23:+C0741rqZakjE55LdHNqlmu4YUQSy6hcIwfIOY4?= =?us-ascii?Q?HrbFWfExbL7qqSav0u/Olh/dD0a8Mf9wcPUFpdHJWrL6ujXfeorzUg2abq8s?= =?us-ascii?Q?w4SRR1NgB5LSLl8ekhZZiZK2TYpHWyxyaz14ethrG/MqvAs7LqesJtdOAlT6?= =?us-ascii?Q?bkyrv7LE4Li5LNz85A7l0qJdsEYnJnPSbwOLNW4w3sP4OatpVvydXLt07I1Z?= =?us-ascii?Q?18tmmUGMTAU7LiaPztjQES3KVuiFUfShtRRw+pIbJ8Lua0VP2qcY4YaRE2VZ?= =?us-ascii?Q?vD1HArtxZFkMDyi/sxcCdq+qexcGxJJAohUZqtddkHZ0zmDkI0BlQ/FPtXwW?= =?us-ascii?Q?ySaIc76/8Ci9WqXLKAQpCDtbkvPG8+SxZxdYrKn+VLkobrIk0JDHCLNg9SDz?= =?us-ascii?Q?usBQ5+4AbSnC8RQHM4Bp/evNOilcWulaItDdERDxYR3J+HxER0fj0b5+rLwj?= =?us-ascii?Q?acRRIIVwpiVJeroV0t1NM6gqrAjxt95Z0wHy3FEIZNOcOTr5Lgy4O9Q+iLJE?= =?us-ascii?Q?Q+wTFl0leDITas8U7llMRRc89hN4ezITHnyNjdpu5DIlXvdLy0ZazDjHDKW0?= =?us-ascii?Q?4QHtLkq+DvGFRDIUb5Ifi11pOlqPtXdJ4jq+mjej4lhou+qMCb7ui5fKmd+M?= =?us-ascii?Q?w4sC5spoLrnYx9IEFzaBbh/kGYb7MKYmourPoiKFQD5eZdIBMmWDMPi4+bU5?= =?us-ascii?Q?F+9ITYO0+jfx6oj9vLZFL+srm9f9yjG8eqikItCSnf6zXMTAqfz2O5fPWq9F?= =?us-ascii?Q?aSx8so0Vm4ftfy8/MTIzNHOJNq8RWk8wk11iD+fF58dvyMm6nQkWrMpfjsa3?= =?us-ascii?Q?6sKip4sH7vqVY42BRP8isJP/smHET6gpXjCEpMAdESUnrwITUs1PQk3cQQLo?= =?us-ascii?Q?AOCprfvnUobITQaZJU9rv1XYCgBzM2AqzuQmZeZZoN/MICuIN+6kdk3XuMvf?= =?us-ascii?Q?lfFBt9EwC9gqXiVwWiy+x2cV/jkpPncjR7MTEf6kUL+9VDRJs3LF5A9ql/XW?= =?us-ascii?Q?bwyId33cbKF7WH2JG/+2NMzp46Fc2cFDvkmv35LNBnfOZ8grHpbCEmeypzKM?= =?us-ascii?Q?kSrmM4tSLDG6G+HKxhsmJFcrxQqMj69m56/g2ap+ZfKF+poRAK+T+3suZ5Uw?= =?us-ascii?Q?p6i/k1unD9mj0pCqPTUuvvwIRSE54aS7niHKOqbpgBOo+BiKrKcx0S1W7Xh7?= =?us-ascii?Q?KkWLjRbDE9b4asgBzPPjv95wO4wV2MF6nywguYjBXzWrcZDiSOlnsksLq7z4?= =?us-ascii?Q?dVdt6oisyVT/HIg7dt8Q=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 6:JR295IDULQUOSuzkTyGABx5Qvbj93lXoZdF8ymzu5aijHtmCIAsXPaWkyxNwx26FYYHtvd5hfHPFBVNMkmjX8axeCxQ7Wje2Lfp7i4LWevGqlovwI3gzC/v+VzTlwSbuCC9ra8IMLIIqilvQLWnEyrmWsWdhH4KFLPaYJTVZSndgGK1F9mZXlZtmPRNQQc4QVYVH7LvEYoFQWwd8E6l+ortcGuypRHYokgDETEVwQpkLjgycZNBuQZemfjhhuxsERe7x0YOU6zIdVyyZGxuQiEZWO8QGKGM6nIVzh2qNYpOGjOyZQx0p72s9Km5JMEhDsasVQkmv9XLfu9+PWaBybOMuN+m2UMksWlK4fuWT9AhvslkZoe9z9cv/utJ7YWf/j5HR3M8w2azeaLeJUNfKaA==; 5:SiK0XPbp5/dtiA0CBqs0O9j3wuXJemXRD3jU2aqIjtLBdv/sdgs5z4DL4ZG7dHHMywZoTZ2JIntPg7rIGqcFYjTDSwDxN1OspTHr47INZh54nTXIqKr8qQxqWi5bRLKVC68EoDs9nQyUVD0Ic4BPGQ==; 24:TYCyO2nnuN8cSJdEWgANuh4oNAJdjiUs3VNu8y5ptmLXsmi4FRyrdyPjcTNj+5A+sbcAJpmpNnOi9Z1P21VJBTBpgaG2vJgCGlU6lEXqLbQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 7:N2d8HrmdbNwbx8+I7rg5ZosxvFRqAS1NUEfPISEo8VYBghNyT5eIZAv2bAr7XeHHdLVdpmzpBQUFuVihEGDYP/M/ZWc371+lVaoF4zRzJRfjCVB5FxGZOUPGkBXJk8Bso+tzbyNenk0rAowA4JgguR+LhDomwZDBSVHq/a95qPegDP+VyTlKS8fhyLyeTGcoBClQKX0Ao+Rvo3yZWqlSx7CglqFGOZE9JEdsA+rf6OfYNHXoFWaDmfGdwP/JnQR3BCaPZVUdKNneIevT4mpt8LpDr6RvYARjGs+SJk34jlRshlNsD/V4IAA6mAIubsoNuoOLhMYKtTUvycDX8yUUvufAOTYmt/ezFdir9+RGxM7Hkae+G9EenjQI5+93vp7Tk6FBE2/T1695aLOu9Vgk7/SQYPOChCdbVjrYtnzKammh9BvI4R0uj5Qf74nZ/pQs6cjpq28eyiHoKWxfHlU9fd/bWPTJz7B9C5n+lN020/BsvojQ51Qo+kBliCwMQI/Z9iiWD6NXl2Tee1G7p0ncIA==; 20:1rPCSpGduBBNgaq/VC6lnCXcohh3a3o8sf4ynEoTONFjUq/d1V9zElO16CbrQtkQXd6MIAeRKsDZK8crN8+D+s6P3PNW3LVwetd4OCoTZVBgwBeUp/dVSTz5Ba1CbNhbAUObfJ2/BPDp+n1qLfqmDKf+Ed7LJejtecF8WD1Qwp4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Feb 2017 15:23:38.4849 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2559 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.91 Subject: [Qemu-devel] [PATCH v2 1/3] migration: add MigrationState arg for ram_save_/compressed_/page() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbutsykin@virtuozzo.com, quintela@redhat.com, armbru@redhat.com, amit.shah@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Cosmetic patch. The use of ms variable instead of migrate_get_current() looks nicer, especially when there reuse. Signed-off-by: Pavel Butsykin Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- migration/ram.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index a683f4bb9e..d866b6518b 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -734,13 +734,14 @@ static int save_zero_page(QEMUFile *f, RAMBlock *bloc= k, ram_addr_t offset, * >=3D0 - Number of pages written - this might legally be 0 * if xbzrle noticed the page was the same. * + * @ms: The current migration state. * @f: QEMUFile where to send the data * @block: block that contains the page we want to send * @offset: offset inside the block for the page * @last_stage: if we are at the completion stage * @bytes_transferred: increase it with the number of transferred bytes */ -static int ram_save_page(QEMUFile *f, PageSearchStatus *pss, +static int ram_save_page(MigrationState *ms, QEMUFile *f, PageSearchStatus= *pss, bool last_stage, uint64_t *bytes_transferred) { int pages =3D -1; @@ -786,8 +787,7 @@ static int ram_save_page(QEMUFile *f, PageSearchStatus = *pss, */ xbzrle_cache_zero_page(current_addr); } else if (!ram_bulk_stage && - !migration_in_postcopy(migrate_get_current()) && - migrate_use_xbzrle()) { + !migration_in_postcopy(ms) && migrate_use_xbzrle()) { pages =3D save_xbzrle_page(f, &p, current_addr, block, offset, last_stage, bytes_transferred= ); if (!last_stage) { @@ -914,14 +914,15 @@ static int compress_page_with_multi_thread(QEMUFile *= f, RAMBlock *block, * * Returns: Number of pages written. * + * @ms: The current migration state. * @f: QEMUFile where to send the data * @block: block that contains the page we want to send * @offset: offset inside the block for the page * @last_stage: if we are at the completion stage * @bytes_transferred: increase it with the number of transferred bytes */ -static int ram_save_compressed_page(QEMUFile *f, PageSearchStatus *pss, - bool last_stage, +static int ram_save_compressed_page(MigrationState *ms, QEMUFile *f, + PageSearchStatus *pss, bool last_stage, uint64_t *bytes_transferred) { int pages =3D -1; @@ -1252,11 +1253,11 @@ static int ram_save_target_page(MigrationState *ms,= QEMUFile *f, if (migration_bitmap_clear_dirty(dirty_ram_abs)) { unsigned long *unsentmap; if (compression_switch && migrate_use_compression()) { - res =3D ram_save_compressed_page(f, pss, + res =3D ram_save_compressed_page(ms, f, pss, last_stage, bytes_transferred); } else { - res =3D ram_save_page(f, pss, last_stage, + res =3D ram_save_page(ms, f, pss, last_stage, bytes_transferred); } =20 --=20 2.11.0 From nobody Mon Apr 29 10:51:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1486136398574123.8042821980905; Fri, 3 Feb 2017 07:39:58 -0800 (PST) Received: from localhost ([::1]:35343 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZfxr-0000pa-54 for importer@patchew.org; Fri, 03 Feb 2017 10:39:55 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33745) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZfvu-0008H7-Kp for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:37:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cZfvr-0002Yd-9q for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:37:54 -0500 Received: from mail-db5eur01on0093.outbound.protection.outlook.com ([104.47.2.93]:17933 helo=EUR01-DB5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cZfvq-0002W0-DQ for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:37:51 -0500 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by VI1PR0802MB2559.eurprd08.prod.outlook.com (10.172.255.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.874.12; Fri, 3 Feb 2017 15:23:39 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=FxGB00PJTfIlYGMST5M3lvS+EKS5M81GVBiL5CPW8qA=; b=dmVExLZZ/Am8nb60BrbOJtCBrh//NKAhqUOYmF2j6pnTQw5KucHnHW4jfuA22poD1cuaW2Y4Ka+4wJAg1aDHtx4jTC3zSXDh47F7hp78z7DmJDut100sdy/ble+dWNhgh+suQKFSRD+H/uJDwmyUfBfevC/EmtXQe2Fo3noIOR4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: Date: Fri, 3 Feb 2017 18:23:20 +0300 Message-ID: <20170203152321.19739-3-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170203152321.19739-1-pbutsykin@virtuozzo.com> References: <20170203152321.19739-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: VI1PR0901CA0084.eurprd09.prod.outlook.com (10.167.203.180) To VI1PR0802MB2559.eurprd08.prod.outlook.com (10.172.255.137) X-MS-Office365-Filtering-Correlation-Id: 7b0094e3-194d-48fe-afa4-08d44c48a1fd X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:VI1PR0802MB2559; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 3:JiKGvvSKAaiCxn+G0M+/Ln1T4cobLa+Zji/YGg0D9LG0R0cV0X/Rm7CVXckJW4aqC9ZrXHTIz8RLXaC/W8siRKQWWEqfHQlHPVP8sJwpRK7bRWi0ZOdbRjIYEIjRxOz6chzdizR7feJDKFZ81v4v2wXCo55mOTAL99a3opbGMnRp9mNjQ7yRqffhb+EU1sehDJP8OzBlNQs/myD555566cQn/9gNtp1ORGr3g5Pg0Ic5hsboqhgO66e8YWMLxV1lodaji6a6zbn47jGhper/2g==; 25:qgVtWaRV9eM9f5NZiCopY10ya6xYl+eWsC46gxltiHGc5uy4SRpRMyGiTw1cM/DfNDSBR1ZD0isFGkRh3HqMeA1RkhuQw7TR/gy11DGdOa2c/YZUcMGEps0+QKvF52OU6a71uCitHPH5D9Wqdiwg6kdn35sdSPEWSbJ8r8xP0prmujBdppnaqZ8Felduw8YiQ2iGvmFpqmQ1Pn/sREq/PJoTpOVyB9Gtpyj4m6z/rBtV2l80EtPA/5vGe87PValvURjW39i7G1owzc5gEBMYkxiOlN5GSubI/XsVW4qWCwc+GYBDfUxjdlNfa8fTUinoo0v2ls9opWQZopEJXfSQ0Q3lFrPrDnlmrjKaZcdv0PQRyxOKSxQOnZ8rG/HgCgtNrEytfIl9vXAvcrRUugnhXlWcLWmN4/mL+EJd8QOfhZBIrH447zsqJw54QtRM2L/kM0GDWDm6C+7awfS8JA9FgA== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 31:uDIUBp5M+Aa2+D9+gcb1+DoZgWtpNqHzXbEWVuRD6Bl5CHQUg2UU+KqfT/axoeiVBF6cWCoZzfRRXy9ofMNQQCNDjt+XWB2CorjWm16naHyX5m0LFw8pygoX6Dl1oSjjoBH8G/iv+svWCn1Ob/Z7FT1cGLXvkgQF2+Qq6PuJY59gRIPlTNc5BDLZ3b3UK69aQ2TdKOcdbH5+fih1cIUPKIGdxhByFiBkbdT2VpK57PJEQMJhbmt86MfXUgC5davc; 20:QVPRGRv+pIaQorWcIa8xtSGGouQFuhkv+PgVPezYiKmxBJGg7GodCeY/J+pyDuEkKs4uGM6eGjCv+cs9xOq5n3MTqRM94tj7hRrjTiq+dUeDnrcmDe//HG3RFh1LguKzl+LAkVAi7KYFFC3kgy5bpQ/fTCZxjYs3MUOvQycDsqeTukbwNjfauTZrha9uce3a+j9zyHLJOIc1ALkq0EQtTBMUg/fGlaTJJAbz8afAm04eE4YsDcHvq2Pxxx8qCJF/7+a6IUYtaAnbcaizymE7bFazUeX80R37oG763tk4gkZWh9A7pBaAHIEuKIWroDq+tWUNpjmRwM52LBzPOP5jZ5s0FiaPie3XUdCnieJk0MslKvXXFR0egS1wGfwBeM9Rx5mqDc7HfnEvzfLxVmQMhuyttlBaKwr1tlSHw9IVXAY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(20161123558025)(6072148); SRVR:VI1PR0802MB2559; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2559; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 4:jB7txotbUbzVAMKtz/Bab7zJl7IzMrov98uyoVVsg1KNNMW7lUTZvyVU7NxntxZmyLvlqnxAcE9c3BfFeO4WzQrPZKsvVIgT+00tqd5cNuSWPLnmHNkyCwQj2Vdm7/LyWgN3Ce84ofrhl+bQVUtWbwDgoP6ZoWbF9PG4aZxVeWP161szVhjNBFw+1P770vWXsh1yA4XUkW7XeVlJv42q1m6aT6H21qjWT+LRHB6k4wVG3fFYpCirwP70bUPPqZWTjCLBuTa5SlyI0ZH9WTDmaQ2ND3UOR6ju9fQHJkNyGFObNWKS+TL1VGkP9P5BUwdXaT7Ck7Q23QtAMjoShYdXLdUgPUXZAhMtPlsNQTWa+dG92gnp4OltWgct+HpiXH6IElj+d3rIx6TLEePi71iARps/7HCfz1PIShd2sjcy66lBw1guSyOE2+koq5gUW9JTLlw32Hce4D8oqJ3M6/uHc+mcFgVmv/93JEJgPDRf7jgz13F9oNTmsQ2oBHk+gN4xqomkEzq2TuwkfAeVosnW4Hv25F9nyO/ZUQgcPMGBnQYn029k8zKcz7QZft2XYCOjlrBlv7LtDJ3C9x07GPVGtweEcNr1bwOcPJaeOxA42to= X-Forefront-PRVS: 02070414A1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(189002)(199003)(6116002)(48376002)(6486002)(2351001)(189998001)(68736007)(6506006)(38730400001)(50226002)(25786008)(54906002)(36756003)(53416004)(7736002)(106356001)(305945005)(8676002)(105586002)(101416001)(5003940100001)(53936002)(69596002)(42186005)(76176999)(575784001)(50986999)(107886002)(81166006)(86362001)(2950100002)(4326007)(110136003)(81156014)(6666003)(2906002)(6916009)(5660300001)(33646002)(50466002)(92566002)(66066001)(97736004)(6512007)(1076002)(3846002)(4001430100002)(47776003); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2559; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2559; 23:fyKqRoNh/WMeiGUtUDDhty1xb+D202OSCTbDEpW?= =?us-ascii?Q?LXesvbxu6e5VfXLjylEMf6q4Lei3MR9YgK4XZLofbVt67KNJXPJk2iR715el?= =?us-ascii?Q?uoudXr3bKZLv9UUgHAyempet6LFFUr1ypjdBte+WhRrCS3tgNlHOX0dp/ZcX?= =?us-ascii?Q?HPOkE4Xa408KHjG3DN2mO5nD/2vDS4RJkeVnOdh/htPn0zAKjq6feUogLWaW?= =?us-ascii?Q?WddwP1KMfgim8gJ9V0UCW84vtm7B9axAoZItHONMCr8kjB8NeWvPHd/JDd7o?= =?us-ascii?Q?dIIA3oBcq9lehXcPaKvTLfuLZwuGT/zW7q6ZcyPJzX+HMTTXj4FHb5mnAxnT?= =?us-ascii?Q?E5jLxOhsXGy4kM4nAVZ/mnxYUpkYjucQvvvJht5tPF33e7AaRofelKvhcyL3?= =?us-ascii?Q?QMqOnGDA920XfA9mTQJbpC3hc4REO8XY4KvqACOIjbQxZRpM7oc2a/3ppcG8?= =?us-ascii?Q?ANtSAGZVCRD7UO4rkfVGDUGPWaEsqFVa67E/eANK9Jrek/CHVLKEL4Ew15aQ?= =?us-ascii?Q?/Nsgvza7Eudtm/QhTkEostqa8rfrYQsYxXJirIo1zfx8zak369r4DU8W0mff?= =?us-ascii?Q?GX20Y2H1A4uzJY8NoZs4+sG/ANFZi1pRNgRciaHGeD2rgWKn7tJyH5Hg9exH?= =?us-ascii?Q?SWi3fmP2vmEaGyDjcqaRedsry65uUzfGGti3O4wdgesSjujufDQheGY4TDqM?= =?us-ascii?Q?sGX4vEbZ+t++bMXp4XUJ4CptIVoMZk1brQOYue891KE1xL9OPTkwPLqJhfoR?= =?us-ascii?Q?6RwuDqBI51vgJMo6Uu5YlmBWBpzLC2iWEqzb33cJI9Xv2SAEnBhRE7Qx7qA+?= =?us-ascii?Q?e6IWEu4t1U5lH+NldW1vPofQxq3lPFgnIMLWvoxN7hHDX4JNf9LjlfYfmYaD?= =?us-ascii?Q?FIHtJXdN8CTtWQgeFHLnZfQWirJtSPnCTMTc4bF78717K8MrC3jpv9v1mBcC?= =?us-ascii?Q?KoYtiLhRUznkgouRDnFTx2BjGPeFVCUlaN6tJQ3KVuWYW1lsbqneUYznxPDn?= =?us-ascii?Q?2eFqoMP1276+1AgYpHMENof2Oj787tUSyRpkjtTFeYyHve8JjtT62K1es7Bj?= =?us-ascii?Q?RC24xVoxPXhy8BsDDKJka+uKUMqIrQA//9D7b9nN6MBd3vf9EiS9N1L0hyNS?= =?us-ascii?Q?JZefTkXBqom8tIs4GPlzT6vwZ62ir+yMD4rmxd7YMmnmvMTxY9h8hwmHTbHm?= =?us-ascii?Q?tPeWSnZ23krIiurI+Nv2dQRkqJY8OSjeZeSdmi3hmzQDxjpn38XFCAaxMn5a?= =?us-ascii?Q?sR5IsN+FF/EICnKQ4k7rE1J0HDbazwwlxrOxoSgQi?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 6:izTAROhfs49yogbWrr11FmliA//bN5PCRgBsjvDlMT03ya4HzpNzSqEyK1pLgne/4pGy44GRDmeinYBkf0qVFb4zsyy/6lkkSYLoQZJ9vMt3PvVzKU6INCTBAQn+H5VNshRP1CERYAY+1avrMBb+VDE+bHHeVPyNPpJkqTkEPUKyIH53+jTOLmdcS6kJu0ooQfz79tIEj3RWTsN0Qy9jx+yP2/O07MNehz2xykmtDS7pMG6aU0pjIWN91gp988LsiFqBYuZfF34hFzALjWPpZKZ4m61xAHjpJ+vKkDSzdztYUnmTFtAv0hubyJvcppesct735xVveXxBXrGBVC+Ps8FhBLOgb8wOuUd9bRyK0dWbdV78yfu+GbRK08DrpUjqXSrgVe1x+fr7uMaQazG3lA==; 5:wK2+3n4BiDCVhZU4NNp28vkcjCk/Q5XkU5Mei3Ul6KUl55N3ULOTXNqPDLwl90LrB1MO7fZ1GpsxDX2V/QzE6kcx6wmhqNwXLM3VERv+15fnSg9W1WoBLgjUJfyA4GU6ttiZd+EmcpxbRBy4NQQh7Q==; 24:f+RbuSP8H+elhewOwyEELQI1HGJVakoOCQ5X1j0RqMJeDjeZqreNZVYJIuM85DVhDFVz9RITB+9FSyZ2x9UimKIAJGdsUVFAE82d9GZ3o38= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 7:nTACKzD6Tn0aDSIW0Pddmx4rYKnX8pHBVXw8ikvk4ssiwyF+YxV2hNJ+tT884Rkb1Ihe2J7IQmm2mBbHbb7xA0Q8LoeCMoi1uDDFavdc3vlu6xjEz5cPa85/qUGMzqOYFSWg1A8lQ+nAZdYQy/XV+trNOX3WtlySvIs4lmqpItCHdLr2LbmjicHRnDFfrFNA8y1r6ZP2azsy+G9aqK4P+KIt2AYD9ZFMZpxbmZ0CzeNrLe+jtltcdYn4T3MEoqc+bTeBMFIo2oEvqH1PRMybxFicnrfL0DH24Es/SjtZgrpFCqCldG9ansmbDrjROxsgU7oy5KehLxpTLpwRp4n2hfSDtXmC7AKgWyVxVKV9EyWJb0eAMC5RVe2H8KmtExyaShIBlO27BaEW2B4zV3oSHHYw1XrT2RFwKaBtzEbkGB6R06/T2T5e+5Rq0Pw3Bh4F2nSQfUj23sEi2VNHhH5o4Kf+l7N95V6G8LR8cG9EKn3s7HA2VUkiF3qebDKpMntJxvi+7Z9Ro8Yis8AlJsnb5w==; 20:nJT4dZIE9Vjt5pXYdPa/je7n2f+c2g3iQSBA1G6Bxg2vxo4RlkCJS9hV7+F8EkOQOMriffaCW6XxfWWTURWR+DvdOUzPRWKowi5Tz9nMrp01GdE6S29odFFFo7uGoiO144AP7FHbPV4666mXkCPWeXkGMwVkWhZuM0W42u+XV4s= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Feb 2017 15:23:39.9801 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2559 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.93 Subject: [Qemu-devel] [PATCH v2 2/3] add 'release-ram' migrate capability X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbutsykin@virtuozzo.com, quintela@redhat.com, armbru@redhat.com, amit.shah@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This feature frees the migrated memory on the source during postcopy-ram migration. In the second step of postcopy-ram migration when the source vm is put on pause we can free unnecessary memory. It will allow, in particula= r, to start relaxing the memory stress on the source host in a load-balancing scenario. Signed-off-by: Pavel Butsykin Reviewed-by: Dr. David Alan Gilbert --- include/migration/migration.h | 1 + include/migration/qemu-file.h | 3 ++- migration/migration.c | 9 +++++++ migration/qemu-file.c | 59 ++++++++++++++++++++++++++++++++++++++-= ---- migration/ram.c | 22 +++++++++++++++- qapi-schema.json | 5 +++- 6 files changed, 89 insertions(+), 10 deletions(-) diff --git a/include/migration/migration.h b/include/migration/migration.h index bd399fc0df..401fbe1f77 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -307,6 +307,7 @@ int migrate_add_blocker(Error *reason, Error **errp); */ void migrate_del_blocker(Error *reason); =20 +bool migrate_release_ram(void); bool migrate_postcopy_ram(void); bool migrate_zero_blocks(void); =20 diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h index abedd466c9..0cd648a733 100644 --- a/include/migration/qemu-file.h +++ b/include/migration/qemu-file.h @@ -132,7 +132,8 @@ void qemu_put_byte(QEMUFile *f, int v); * put_buffer without copying the buffer. * The buffer should be available till it is sent asynchronously. */ -void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, size_t size); +void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, size_t size, + bool may_free); bool qemu_file_mode_is_not_valid(const char *mode); bool qemu_file_is_writable(QEMUFile *f); =20 diff --git a/migration/migration.c b/migration/migration.c index 1ae68be0c7..8d5a5f8a6e 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1302,6 +1302,15 @@ void qmp_migrate_set_downtime(double value, Error **= errp) qmp_migrate_set_parameters(&p, errp); } =20 +bool migrate_release_ram(void) +{ + MigrationState *s; + + s =3D migrate_get_current(); + + return s->enabled_capabilities[MIGRATION_CAPABILITY_RELEASE_RAM]; +} + bool migrate_postcopy_ram(void) { MigrationState *s; diff --git a/migration/qemu-file.c b/migration/qemu-file.c index e9fae31158..82dbef3c86 100644 --- a/migration/qemu-file.c +++ b/migration/qemu-file.c @@ -49,6 +49,7 @@ struct QEMUFile { int buf_size; /* 0 when writing */ uint8_t buf[IO_BUF_SIZE]; =20 + DECLARE_BITMAP(may_free, MAX_IOV_SIZE); struct iovec iov[MAX_IOV_SIZE]; unsigned int iovcnt; =20 @@ -132,6 +133,41 @@ bool qemu_file_is_writable(QEMUFile *f) return f->ops->writev_buffer; } =20 +static void qemu_iovec_release_ram(QEMUFile *f) +{ + struct iovec iov; + unsigned long idx; + + /* Find and release all the contiguous memory ranges marked as may_fre= e. */ + idx =3D find_next_bit(f->may_free, f->iovcnt, 0); + if (idx >=3D f->iovcnt) { + return; + } + iov =3D f->iov[idx]; + + /* The madvise() in the loop is called for iov within a continuous ran= ge and + * then reinitialize the iov. And in the end, madvise() is called for = the + * last iov. + */ + while ((idx =3D find_next_bit(f->may_free, f->iovcnt, idx + 1)) < f->i= ovcnt) { + /* check for adjacent buffer and coalesce them */ + if (iov.iov_base + iov.iov_len =3D=3D f->iov[idx].iov_base) { + iov.iov_len +=3D f->iov[idx].iov_len; + continue; + } + if (qemu_madvise(iov.iov_base, iov.iov_len, QEMU_MADV_DONTNEED) < = 0) { + error_report("migrate: madvise DONTNEED failed %p %ld: %s", + iov.iov_base, iov.iov_len, strerror(errno)); + } + iov =3D f->iov[idx]; + } + if (qemu_madvise(iov.iov_base, iov.iov_len, QEMU_MADV_DONTNEED) < 0) { + error_report("migrate: madvise DONTNEED failed %p %ld: %s", + iov.iov_base, iov.iov_len, strerror(errno)); + } + memset(f->may_free, 0, sizeof(f->may_free)); +} + /** * Flushes QEMUFile buffer * @@ -151,6 +187,8 @@ void qemu_fflush(QEMUFile *f) if (f->iovcnt > 0) { expect =3D iov_size(f->iov, f->iovcnt); ret =3D f->ops->writev_buffer(f->opaque, f->iov, f->iovcnt, f->pos= ); + + qemu_iovec_release_ram(f); } =20 if (ret >=3D 0) { @@ -304,13 +342,19 @@ int qemu_fclose(QEMUFile *f) return ret; } =20 -static void add_to_iovec(QEMUFile *f, const uint8_t *buf, size_t size) +static void add_to_iovec(QEMUFile *f, const uint8_t *buf, size_t size, + bool may_free) { /* check for adjacent buffer and coalesce them */ if (f->iovcnt > 0 && buf =3D=3D f->iov[f->iovcnt - 1].iov_base + - f->iov[f->iovcnt - 1].iov_len) { + f->iov[f->iovcnt - 1].iov_len && + may_free =3D=3D test_bit(f->iovcnt - 1, f->may_free)) + { f->iov[f->iovcnt - 1].iov_len +=3D size; } else { + if (may_free) { + set_bit(f->iovcnt, f->may_free); + } f->iov[f->iovcnt].iov_base =3D (uint8_t *)buf; f->iov[f->iovcnt++].iov_len =3D size; } @@ -320,14 +364,15 @@ static void add_to_iovec(QEMUFile *f, const uint8_t *= buf, size_t size) } } =20 -void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, size_t size) +void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, size_t size, + bool may_free) { if (f->last_error) { return; } =20 f->bytes_xfer +=3D size; - add_to_iovec(f, buf, size); + add_to_iovec(f, buf, size, may_free); } =20 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size) @@ -345,7 +390,7 @@ void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, s= ize_t size) } memcpy(f->buf + f->buf_index, buf, l); f->bytes_xfer +=3D l; - add_to_iovec(f, f->buf + f->buf_index, l); + add_to_iovec(f, f->buf + f->buf_index, l, false); f->buf_index +=3D l; if (f->buf_index =3D=3D IO_BUF_SIZE) { qemu_fflush(f); @@ -366,7 +411,7 @@ void qemu_put_byte(QEMUFile *f, int v) =20 f->buf[f->buf_index] =3D v; f->bytes_xfer++; - add_to_iovec(f, f->buf + f->buf_index, 1); + add_to_iovec(f, f->buf + f->buf_index, 1, false); f->buf_index++; if (f->buf_index =3D=3D IO_BUF_SIZE) { qemu_fflush(f); @@ -647,7 +692,7 @@ ssize_t qemu_put_compression_data(QEMUFile *f, const ui= nt8_t *p, size_t size, } qemu_put_be32(f, blen); if (f->ops->writev_buffer) { - add_to_iovec(f, f->buf + f->buf_index, blen); + add_to_iovec(f, f->buf + f->buf_index, blen, false); } f->buf_index +=3D blen; if (f->buf_index =3D=3D IO_BUF_SIZE) { diff --git a/migration/ram.c b/migration/ram.c index d866b6518b..5a43f716d1 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -726,6 +726,16 @@ static int save_zero_page(QEMUFile *f, RAMBlock *block= , ram_addr_t offset, return pages; } =20 +static void ram_release_pages(MigrationState *ms, const char *block_name, + uint64_t offset, int pages) +{ + if (!migrate_release_ram() || !migration_in_postcopy(ms)) { + return; + } + + ram_discard_range(NULL, block_name, offset, pages << TARGET_PAGE_BITS); +} + /** * ram_save_page: Send the given page to the stream * @@ -786,6 +796,7 @@ static int ram_save_page(MigrationState *ms, QEMUFile *= f, PageSearchStatus *pss, * page would be stale */ xbzrle_cache_zero_page(current_addr); + ram_release_pages(ms, block->idstr, pss->offset, pages); } else if (!ram_bulk_stage && !migration_in_postcopy(ms) && migrate_use_xbzrle()) { pages =3D save_xbzrle_page(f, &p, current_addr, block, @@ -804,7 +815,9 @@ static int ram_save_page(MigrationState *ms, QEMUFile *= f, PageSearchStatus *pss, *bytes_transferred +=3D save_page_header(f, block, offset | RAM_SAVE_FLAG_PAGE= ); if (send_async) { - qemu_put_buffer_async(f, p, TARGET_PAGE_SIZE); + qemu_put_buffer_async(f, p, TARGET_PAGE_SIZE, + migrate_release_ram() & + migration_in_postcopy(ms)); } else { qemu_put_buffer(f, p, TARGET_PAGE_SIZE); } @@ -834,6 +847,8 @@ static int do_compress_ram_page(QEMUFile *f, RAMBlock *= block, error_report("compressed data failed!"); } else { bytes_sent +=3D blen; + ram_release_pages(migrate_get_current(), block->idstr, + offset & TARGET_PAGE_MASK, 1); } =20 return bytes_sent; @@ -973,12 +988,17 @@ static int ram_save_compressed_page(MigrationState *m= s, QEMUFile *f, error_report("compressed data failed!"); } } + if (pages > 0) { + ram_release_pages(ms, block->idstr, pss->offset, pages); + } } else { offset |=3D RAM_SAVE_FLAG_CONTINUE; pages =3D save_zero_page(f, block, offset, p, bytes_transferre= d); if (pages =3D=3D -1) { pages =3D compress_page_with_multi_thread(f, block, offset, bytes_transferred); + } else { + ram_release_pages(ms, block->idstr, pss->offset, pages); } } } diff --git a/qapi-schema.json b/qapi-schema.json index 82fabc6e24..e58228d083 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -865,11 +865,14 @@ # side, this process is called COarse-Grain LOck Stepping (COLO) for # Non-stop Service. (since 2.8) # +# @release-ram: if enabled, qemu will free the migrated ram pages on the s= ource +# during postcopy-ram migration. (since 2.9) +# # Since: 1.2 ## { 'enum': 'MigrationCapability', 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks', - 'compress', 'events', 'postcopy-ram', 'x-colo'] } + 'compress', 'events', 'postcopy-ram', 'x-colo', 'release-ram'] } =20 ## # @MigrationCapabilityStatus: --=20 2.11.0 From nobody Mon Apr 29 10:51:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1486136660018109.1159331359778; Fri, 3 Feb 2017 07:44:20 -0800 (PST) Received: from localhost ([::1]:35368 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZg24-0004jN-MZ for importer@patchew.org; Fri, 03 Feb 2017 10:44:16 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33898) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cZfwT-0000Ch-Fn for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:38:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cZfwP-0002qj-G6 for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:38:29 -0500 Received: from mail-db5eur01on0093.outbound.protection.outlook.com ([104.47.2.93]:18142 helo=EUR01-DB5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cZfwP-0002pE-3j for qemu-devel@nongnu.org; Fri, 03 Feb 2017 10:38:25 -0500 Received: from pavelb-Z68P-DS3.sw.ru (195.214.232.6) by VI1PR0802MB2559.eurprd08.prod.outlook.com (10.172.255.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.874.12; Fri, 3 Feb 2017 15:23:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=W4HGZgsc8S9K7r8wIWeoswCFrYxt8qmNBmRza1Bh5Nk=; b=Ukt7yE2IcuQg3EEg0blGNh4WNOFjzzruHKoNUCEVHbTSAYNaPPYwEWupktl4v32n2DKmRUysInwe0RYfE0TQic+THrKPayM3JC/8JUfGiOk7BIUss5gBXIZq57MI9pC8OCNAV8TNdQl/MwM8sjIiHkP7mFTxp9OydiyA6S2hqmc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=pbutsykin@virtuozzo.com; From: Pavel Butsykin To: Date: Fri, 3 Feb 2017 18:23:21 +0300 Message-ID: <20170203152321.19739-4-pbutsykin@virtuozzo.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170203152321.19739-1-pbutsykin@virtuozzo.com> References: <20170203152321.19739-1-pbutsykin@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: VI1PR0901CA0084.eurprd09.prod.outlook.com (10.167.203.180) To VI1PR0802MB2559.eurprd08.prod.outlook.com (10.172.255.137) X-MS-Office365-Filtering-Correlation-Id: 8908a9c2-6918-432e-a8fa-08d44c48a2c6 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:VI1PR0802MB2559; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 3:YNMKLGs9bnaTNeupUZ4xsTC5ev4QzmCbpNuxQZ1q13eWCQhLXPtMqXtUQFLshuDLjgAM2Cl5eTXUKbTVmcULrMwJIuqa3aBDxc77Xl+xewS4VauaGcK+WZPfZ80SC2D31pcECW2hqFpO6H4VlmrB7CtWvY745AEohv3WBWO29qi7rtZgXnmCUTtgpepcyUeiv1OsvlQp8c8ardgLR9K2bWcEW40e9GNuQjKvGYsZB6Rx37eAffmLedbPrHb0jKELGKQLdm2KZmAdo6Irli5GMQ==; 25:hT4EqEH97gp6ZTcDzhR8Hl5NIHdYW5XCw8a2mDp4RCcPJbWsRJcv/Y1Tvadm3O9o9jsdGJIvabV3q1FOvWB7da1p3DbttvVzhaWR7SqaTTYhogFXExtqUQOlDOwRg2NVRGm86wjcZZIWbiU6skq/32DR2YTazEzZmUlZvA1gNEne5LBsYvXozS2ZS8V6O4GXXxSIFFNX/r1sIot5H/wY2uOj82N2mX6s2ddxZK2VZ9wojoYJMa36IAv3YskJYHNoW9rs4i1YuryjMvhBGHgy7ENlY+Sz20RShbknJhlLEcZemNTNq1fzeWn+RtKvO6sbbQLgZGjoByP57oa6JEyB2h7pqiKLUfmd5lSeSSD7eDgZ2cLzFyV27CLIiQmANT+sDI1AySjGRyLuXKkOjruYPo+az47QlgNPEyraYdnvITr00MPRAGYJf6DojvAdcYd9NYMeDrc5MtwrRCZe6QdTnw== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 31:H6YCIG/M+zk7noQ+B2sFDPNDaBa5G4+nkLIRcHVhl2JexYRKDTRuSrXrtIcdKJ3tZ9Gd1sEL9Tz1jCk5h10R4cHim7PhZWUGDE37iySNC0cihbOsS4JWEOhtZFpJew4pSEAX2FvAi1BPAfjoG0IEKsfHakbx4qyErASK1MwdGTnmOUzNZzta+0CO3DB0VueB8jP31nvespn9aLYY3gUs9MP1zM3QEU9BDbZTC1RV9F5IuMFRf/1nEg4JkaeU0hiQ; 20:+/7z/ph2w2pPJ8ZlEkRNJ8epiUFXiJPrKN6iVo049jqUNwgxkQSyegqpryI4RAoOcHGTO4RZDxmc49BvFRsI86uI/IKINzmyRzILdLk4VS+5nwwOqis68lo0NvuuM4g9SYO1/nuDqNeNUrMtWxdke7irDVo+mnGrG24414M9B3ue5V9jZ/CRYQV2nVy9Hu4knVuUVPxGSKq2cJnOBZ/iuBQjBS7HegXFksIkmrdHu9VibX3OMjnVUG7iv4+VPr22SrjOg+ZdFC5Vrqt9O5AGoJzOr00onVb3YEJOsSQ6hF+wXBGIyngEO0lS3ZASY3H7amkghaSL2xKIU4n6OcU+Y1ELL7EUr2AwCu60zjxTpOzuHWg6gzP5MwyyPhUv2Pq7z8mN6JJjblnQ5wCPkgjhEy0yDtp8BBQy1yciyGWIZPY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(20161123558025)(6072148); SRVR:VI1PR0802MB2559; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2559; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 4:IYy+JXu5om8aVUrEeoOd26+LdY22NYGxX1C9fclioe0XXfNFT0ox8JJ7VIGXhUrZ7sTEETLLcHpIqFuyThJ7QHQOQ4gb6WXT64Lk9TUgAzjw0uXlHaWp7imFBB2WVmiXNa1tncqUjfuSWOVH5ttYjviKR+CxTuxnp6oOF1HcNzCwt/evGKYKO79JAZSGUvcUiHRFxzRvqsrwdTeIp2HtRB/5gvEuohYnI6Io//lLCNSgvrq1DfGSDX9JeqgFkcHmAnHaewHqugoO6KeNfqB+v/2XNOP9GZxGm19PlgJGq4H+1/ST5snD2a0FNRPgnGCg1cCS72Dj8Q7BOutYvor7voSjgr14EjVF7dVjDMHysAYTB2N+bh4WIlscIEHGUA0IqYo6Xcm68ebJFpjfMSHtOA1cPpnuS65E26I5j812R0uBai8ENnYt8W/4TPkjKcTADGdBwqp4x3mYJdq9Fcy3Pr51nZ4UtSQU/u6dSBB7wYr2XZTJ4MzoIpvklg/oK0pS9dKsEG5Fj23+kSwV0FEBaS6DmCuiqrkY8uoaZebfWn7YHE/2kiW9rxyDg6pta1ZKIcb6KdWiVQ9k9+9T6IoeNi7bTn/Lx1ti81hXBx/4kMA= X-Forefront-PRVS: 02070414A1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(189002)(199003)(6116002)(48376002)(6486002)(2351001)(189998001)(68736007)(6506006)(38730400001)(50226002)(25786008)(54906002)(36756003)(53416004)(7736002)(106356001)(305945005)(8676002)(105586002)(101416001)(5003940100001)(53936002)(69596002)(42186005)(76176999)(575784001)(50986999)(107886002)(81166006)(86362001)(2950100002)(4326007)(110136003)(81156014)(6666003)(2906002)(6916009)(5660300001)(33646002)(50466002)(92566002)(66066001)(97736004)(6512007)(1076002)(3846002)(4001430100002)(47776003)(14143004); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0802MB2559; H:pavelb-Z68P-DS3.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2559; 23:Hoh//h96uERmF18FtIlEzgKvHJRPaDbkg7KBvbs?= =?us-ascii?Q?brO8yXy9hs35+DgSCqg3+TV4ojWIyEItyGoupG2pM/LZZRt9ReQHrSvHK+CW?= =?us-ascii?Q?U9XSo9dE0vc8osMoV0AYGcs4T1dssSgM58JnjE3KC9Hg4LU4c162UNSDWN70?= =?us-ascii?Q?8qYRNcuQ/qJpbQRVFDKbix4fAqGdCXW61riRu5iOKx97x3hYOTZrl/wYW9Ep?= =?us-ascii?Q?4G3Zfqew6ZQmGJh+Vy2ejwsL73jNqppnz5q2vvxuyOFN0cTiH0yPzFhgsHiI?= =?us-ascii?Q?taz2KxMHLaARhwXqHuA8cBdGa5kYdFi5a5WyDs5foMDMPQRIumlhekYEHgFw?= =?us-ascii?Q?BoaUC3tZ12+dDwjqvnnzK5tWBTdq5gXP537pVV1cOnN2+bQS34Xx84u2gWOt?= =?us-ascii?Q?tNyYQP2DYyrBgzVmDRrlB3TwvP+YKAk8d8IcDx0ST1Gl8RtAslf4swodII6j?= =?us-ascii?Q?TI6IARPhA4BNVb+HVKxhG6Xh3vEy7RQdYP6wlrsJ1Y4ecPfh9I0PaL1OYW77?= =?us-ascii?Q?GucLd0x+Ok5ZLrTuE5eu6tzrsgTjJbRkerBxApLSu9jE/JIwIBZ44TWLtvH4?= =?us-ascii?Q?Wq5bz8DVhWO/FxJmm/Mm4s9jNZVUvUV/9VthJdhAdmdPBgX9iZZ/Dhdsjy2Z?= =?us-ascii?Q?N0FA7Lhne7q0RovDm7FkXtWhuJboS0VnWfGgu9UvB8mRqLaAkEmb5o2l8JXW?= =?us-ascii?Q?7rxOkJgqNzA5SwHud5auVg3V+N+ikQlP3l7bcLzEhe7Kwo4QPU6WXreCU5fA?= =?us-ascii?Q?14WkoPDpCRPbaFkfLAz+szVi4fH9AIxNtDLw7ipu2l7GjU7VtvViSQLFFAH8?= =?us-ascii?Q?mzxUNdEVTLaQJNHq4uRqKxGLoTra9CVRlzc3Wc+9pa3WrnfByRwdjt5g//eE?= =?us-ascii?Q?0iN66W/pVNZNY2Wwy/ENBad/GJBHNkMhhxt8H/B32aiWzL+4tWmJmQSWSRGN?= =?us-ascii?Q?X+oL/5Kr9trhNP4veOAJ2eAaHBEocGOj3TDW29XlT6/ZibQDPuIm7Nglzrmt?= =?us-ascii?Q?wSplUMP9aZJQ5okVni1M14Dth07v8c7y+SywwpJ9HFqo7AjDZw0dHb0XB4i0?= =?us-ascii?Q?FO1qmijMKaN757hhA29SMtmAdSI00LpNhi6IQC0X+8u7qWLRkNFmpUZLPd1D?= =?us-ascii?Q?KOdQG7McIU9D4uSwXuregy0c+Zx+7J6zfJhwAX0zVetBVgndsl0IR59MsLKH?= =?us-ascii?Q?W1AoTA+SJ518s9YKEhvl2QmWS3TYFUU2o2sNZIdqK6Eom3kpACDetVDXJ/Wh?= =?us-ascii?Q?ajM7dVfJwMz6glZCtoMzkpPtCzXZnzvXewlmDGWKKePu2s+FhBcf+hhdN7E5?= =?us-ascii?Q?YMw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 6:DzIKuFI9sbSwCLVz3L30jc2ghQy7zgCAUEhe7WhNPKgMCgl/Qh8Eyx2QzHmhvvW8J32TRi1xYVXXyGqb9JUFCqmzDMtbRx+EyoZV87tw5WY6q0tdxlym3BRa66JZsjy06G+iq3YNpqN1YIhEElbQf06/lzY5p+t79x8JLXemzC4y0A4XN6MMRqJWlfd3IgLiCI1EzpdU+J7pJwY75Q7eaMgqcXjLC4bEmkW4lKE+4fl3YrLXByNeE+/tcuRWcAHO2JySkHUmFRh7h/RphSQ/qTlCA+xZ4HiY46kogFxJKT9aompj3A4z1UMrhc5HKilRCpXFzcNVwptRwxPspIsG/zNAphhZfi05O0Xzr2FOfKe+efNym7qHnZYySRBetOX605tvGIxMGpuLORKhSiRofg==; 5:sqYlYnHmAAD60/58xStpXlVN0/IDGLbZdZz5ASOCzfZGIaPbNY45oqcShDkW0NMa9fm9Yd4MJfbpX7I974oC0Gv+Lz8c64HycF/P8nSTos4pOzs1xe6R3B7NfNgflyvWKS3nBLXiF6WEN66qDCNRZA==; 24:Hi4TrgqcyJIGf7B67MkSwu/zSZEzqVlXPme9jrbtVnnIxzdWa9cYk0W/VSF50xCwlFhdVkoUpRWSV44V9IRFZ6M/GhygyLXHAQQSAv1VZ64= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2559; 7:4WTiZYvaDKUMqp6uUv5cSNW65/S/gjUj/pj2lsznAdktUEjrk3VDOKOOigtJ0eP/tAck+4wZ2+iimptcAlL0j9FdiIAc3ZcSoMKNd9P33xtiuLVPNskKvSF9Kk7KqsnpWsXbTUCErp/wjy0SFHm8STw0Pl8JtwprjVy5lynElckc+knuJxQ2yJaZNOves/LW8mN07wK49+K32u+QSYKAy73ra44g31zIHSn9p/m07wRrvrgXB73WvNpUmQae84lllEjbBSRlUjF7LfZriWIvRGNPBokShV6XnEAWlsyxXPl5EqNNH9icmQkoBIKz+vm9Yh/zixbjBHwK5qVM5rS8dvr7VXmNI/yOZhMa46SHQ3NWxWf3je4eNtj5D0TdM7NJ5xBSOPrpLZ9QxqUnKRPPUhqVs6kXZ0fV9EI8qHCkD61oJ0RMrlWTY+ePLTahRjJ1yESmVbQincbmsMvLVjRWuf/C9MFSTOnx3U7wN5pO9fuK63BTkMlNgsKE72+x5m2YnPfPPweisBztTQnqziOzcQ==; 20:+RIsqdzkum0rz5zXOlxZfsX4N8TERzJLgqSF9z2ruvn9nyxSe7nuuLVKXu+qXXSj9p3VWOo40YE3poEJKz01o+Tiy4H2tDCPYyQrdM/6lUxQ2pZQEs9emhhrkWm5Za57d4ayspAgfaa+UkYZA9sNU4yAgDwBZ0Vd0yFmuIY43j8= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Feb 2017 15:23:41.2952 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2559 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.93 Subject: [Qemu-devel] [PATCH v2 3/3] migration: discard non-dirty ram pages after the start of postcopy X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: pbutsykin@virtuozzo.com, quintela@redhat.com, armbru@redhat.com, amit.shah@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After the start of postcopy migration there are some non-dirty pages which = have already been migrated. These pages are no longer needed on the source vm so= that we can free them and it doen't hurt to complete the migration. Signed-off-by: Pavel Butsykin Reviewed-by: Dr. David Alan Gilbert --- include/migration/migration.h | 1 + migration/migration.c | 4 ++++ migration/ram.c | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/include/migration/migration.h b/include/migration/migration.h index 401fbe1f77..3a5f8c469e 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -288,6 +288,7 @@ int ram_postcopy_send_discard_bitmap(MigrationState *ms= ); int ram_discard_range(MigrationIncomingState *mis, const char *block_name, uint64_t start, size_t length); int ram_postcopy_incoming_init(MigrationIncomingState *mis); +void ram_postcopy_migrated_memory_release(MigrationState *ms); =20 /** * @migrate_add_blocker - prevent migration from proceeding diff --git a/migration/migration.c b/migration/migration.c index 8d5a5f8a6e..a9aa6a0f8b 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1713,6 +1713,10 @@ static int postcopy_start(MigrationState *ms, bool *= old_vm_running) */ qemu_savevm_send_ping(ms->to_dst_file, 4); =20 + if (migrate_release_ram()) { + ram_postcopy_migrated_memory_release(ms); + } + ret =3D qemu_file_get_error(ms->to_dst_file); if (ret) { error_report("postcopy_start: Migration stream errored"); diff --git a/migration/ram.c b/migration/ram.c index 5a43f716d1..ae1f10b145 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1562,6 +1562,25 @@ void ram_debug_dump_bitmap(unsigned long *todump, bo= ol expected) =20 /* **** functions for postcopy ***** */ =20 +void ram_postcopy_migrated_memory_release(MigrationState *ms) +{ + struct RAMBlock *block; + unsigned long *bitmap =3D atomic_rcu_read(&migration_bitmap_rcu)->bmap; + + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { + unsigned long first =3D block->offset >> TARGET_PAGE_BITS; + unsigned long range =3D first + (block->used_length >> TARGET_PAGE= _BITS); + unsigned long run_start =3D find_next_zero_bit(bitmap, range, firs= t); + + while (run_start < range) { + unsigned long run_end =3D find_next_bit(bitmap, range, run_sta= rt + 1); + ram_discard_range(NULL, block->idstr, run_start << TARGET_PAGE= _BITS, + (run_end - run_start) << TARGET_PAGE_BITS); + run_start =3D find_next_zero_bit(bitmap, range, run_end + 1); + } + } +} + /* * Callback from postcopy_each_ram_send_discard for each RAMBlock * Note: At this point the 'unsentmap' is the processed bitmap combined --=20 2.11.0