From nobody Sun Feb 8 17:47:54 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 1487961508329392.4929132803585; Fri, 24 Feb 2017 10:38:28 -0800 (PST) Received: from localhost ([::1]:39278 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1chKl7-0003cn-IT for importer@patchew.org; Fri, 24 Feb 2017 13:38:25 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53396) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1chKbs-0000sX-BP for qemu-devel@nongnu.org; Fri, 24 Feb 2017 13:28:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1chKbr-0007vw-D0 for qemu-devel@nongnu.org; Fri, 24 Feb 2017 13:28:52 -0500 Received: from mx1.redhat.com ([209.132.183.28]:46996) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1chKbr-0007vQ-76 for qemu-devel@nongnu.org; Fri, 24 Feb 2017 13:28:51 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (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 65F4361BA5 for ; Fri, 24 Feb 2017 18:28:51 +0000 (UTC) Received: from dgilbert-t530.redhat.com (ovpn-117-182.ams2.redhat.com [10.36.117.182]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1OISjTV002473; Fri, 24 Feb 2017 13:28:50 -0500 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org, quintela@redhat.com, lvivier@redhat.com Date: Fri, 24 Feb 2017 18:28:31 +0000 Message-Id: <20170224182844.32452-4-dgilbert@redhat.com> In-Reply-To: <20170224182844.32452-1-dgilbert@redhat.com> References: <20170224182844.32452-1-dgilbert@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Fri, 24 Feb 2017 18:28:51 +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 v3 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 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