From nobody Tue Feb 10 04:29:37 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 1486402528020319.3916415042163; Mon, 6 Feb 2017 09:35:28 -0800 (PST) Received: from localhost ([::1]:49847 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1canCI-0005BW-Fn for importer@patchew.org; Mon, 06 Feb 2017 12:35:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45334) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1canA9-0003t6-UB for qemu-devel@nongnu.org; Mon, 06 Feb 2017 12:33:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1canA8-0006Oz-W2 for qemu-devel@nongnu.org; Mon, 06 Feb 2017 12:33:13 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51858) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1canA8-0006OQ-RT for qemu-devel@nongnu.org; Mon, 06 Feb 2017 12:33:12 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (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 0F1AB8123A for ; Mon, 6 Feb 2017 17:33:13 +0000 (UTC) Received: from dgilbert-t530.redhat.com (ovpn-117-81.ams2.redhat.com [10.36.117.81]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v16HX8R8012611; Mon, 6 Feb 2017 12:33:12 -0500 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org, quintela@redhat.com Date: Mon, 6 Feb 2017 17:32:53 +0000 Message-Id: <20170206173306.20603-4-dgilbert@redhat.com> In-Reply-To: <20170206173306.20603-1-dgilbert@redhat.com> References: <20170206173306.20603-1-dgilbert@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Mon, 06 Feb 2017 17:33:13 +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] [PATCH v2 03/16] 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: aarcange@redhat.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 --- migration/ram.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 5726563..d33bd21 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1627,12 +1627,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 @@ -1736,7 +1741,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 */ @@ -1744,11 +1750,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; @@ -1804,7 +1805,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