From nobody Mon Feb 9 07:23:42 2026 Delivered-To: importer@patchew.org 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; 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 1488286339497620.0444498811239; Tue, 28 Feb 2017 04:52:19 -0800 (PST) Received: from localhost ([::1]:60761 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cihGM-000107-AX for importer@patchew.org; Tue, 28 Feb 2017 07:52:18 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40115) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cih5v-0008It-Gi for qemu-devel@nongnu.org; Tue, 28 Feb 2017 07:41:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cih5s-0000KN-E6 for qemu-devel@nongnu.org; Tue, 28 Feb 2017 07:41:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42020) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cih5s-0000KE-7f for qemu-devel@nongnu.org; Tue, 28 Feb 2017 07:41:28 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4E3853A768D; Tue, 28 Feb 2017 12:41:28 +0000 (UTC) Received: from dgilbert-t530.redhat.com (ovpn-117-149.ams2.redhat.com [10.36.117.149]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1SCewtE019858; Tue, 28 Feb 2017 07:41:26 -0500 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org Date: Tue, 28 Feb 2017 12:40:43 +0000 Message-Id: <20170228124056.5074-15-dgilbert@redhat.com> In-Reply-To: <20170228124056.5074-1-dgilbert@redhat.com> References: <20170228124056.5074-1-dgilbert@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Tue, 28 Feb 2017 12:41:28 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 14/27] postcopy: Chunk discards for hugepages 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: lvivier@redhat.com, pasic@linux.vnet.ibm.com, vsementsov@virtuozzo.com, quintela@redhat.com, ashijeetacharya@gmail.com, marcandre.lureau@redhat.com, danielhb@linux.vnet.ibm.com 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 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Dr. David Alan Gilbert" At the start of the postcopy phase, partially sent huge pages must be discarded. The code for dealing with host page sizes larger than the target page size can be reused for this case. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: Juan Quintela Reviewed-by: Laurent Vivier Message-Id: <20170224182844.32452-4-dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert --- migration/ram.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index fbd987a..7c5cdf9 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1672,12 +1672,17 @@ static void postcopy_chunk_hostpages_pass(Migration= State *ms, bool unsent_pass, { unsigned long *bitmap; unsigned long *unsentmap; - unsigned int host_ratio =3D qemu_host_page_size / TARGET_PAGE_SIZE; + unsigned int host_ratio =3D block->page_size / TARGET_PAGE_SIZE; unsigned long first =3D block->offset >> TARGET_PAGE_BITS; unsigned long len =3D block->used_length >> TARGET_PAGE_BITS; unsigned long last =3D first + (len - 1); unsigned long run_start; =20 + if (block->page_size =3D=3D TARGET_PAGE_SIZE) { + /* Easy case - TPS=3D=3DHPS for a non-huge page RAMBlock */ + return; + } + bitmap =3D atomic_rcu_read(&migration_bitmap_rcu)->bmap; unsentmap =3D atomic_rcu_read(&migration_bitmap_rcu)->unsentmap; =20 @@ -1781,7 +1786,8 @@ static void postcopy_chunk_hostpages_pass(MigrationSt= ate *ms, bool unsent_pass, * Utility for the outgoing postcopy code. * * Discard any partially sent host-page size chunks, mark any partially - * dirty host-page size chunks as all dirty. + * dirty host-page size chunks as all dirty. In this case the host-page + * is the host-page for the particular RAMBlock, i.e. it might be a huge p= age * * Returns: 0 on success */ @@ -1789,11 +1795,6 @@ static int postcopy_chunk_hostpages(MigrationState *= ms) { struct RAMBlock *block; =20 - if (qemu_host_page_size =3D=3D TARGET_PAGE_SIZE) { - /* Easy case - TPS=3D=3DHPS - nothing to be done */ - return 0; - } - /* Easiest way to make sure we don't resume in the middle of a host-pa= ge */ last_seen_block =3D NULL; last_sent_block =3D NULL; @@ -1849,7 +1850,7 @@ int ram_postcopy_send_discard_bitmap(MigrationState *= ms) return -EINVAL; } =20 - /* Deal with TPS !=3D HPS */ + /* Deal with TPS !=3D HPS and huge pages */ ret =3D postcopy_chunk_hostpages(ms); if (ret) { rcu_read_unlock(); --=20 2.9.3