From nobody Tue Nov 4 22:05:02 2025 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.zohomail.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; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1531214501507685.9472060182869; Tue, 10 Jul 2018 02:21:41 -0700 (PDT) Received: from localhost ([::1]:46668 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcoq0-0004e7-Tc for importer@patchew.org; Tue, 10 Jul 2018 05:21:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54352) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fconr-00035S-Bm for qemu-devel@nongnu.org; Tue, 10 Jul 2018 05:19:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fconq-0002xk-6u for qemu-devel@nongnu.org; Tue, 10 Jul 2018 05:19:23 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:49930 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fconq-0002xa-2Q for qemu-devel@nongnu.org; Tue, 10 Jul 2018 05:19:22 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AB1D6406E1D6; Tue, 10 Jul 2018 09:19:21 +0000 (UTC) Received: from xz-mi.redhat.com (ovpn-12-170.pek2.redhat.com [10.72.12.170]) by smtp.corp.redhat.com (Postfix) with ESMTP id 36A442156889; Tue, 10 Jul 2018 09:19:17 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Tue, 10 Jul 2018 17:18:55 +0800 Message-Id: <20180710091902.28780-4-peterx@redhat.com> In-Reply-To: <20180710091902.28780-1-peterx@redhat.com> References: <20180710091902.28780-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Tue, 10 Jul 2018 09:19:21 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Tue, 10 Jul 2018 09:19:21 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'peterx@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH for-3.0 v2 03/10] migration: fix incorrect bitmap size calculation 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: Balamuruhan S , "Dr . David Alan Gilbert" , peterx@redhat.com, Juan Quintela 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" The calculation on size of received bitmap is incorrect for postcopy recovery. Here we wanted to let the size to cover all the valid bits in the bitmap, we should use DIV_ROUND_UP() instead of a division. For example, a RAMBlock with size=3D4K (which contains only one single 4K page) will have nbits=3D1, then nbits/8=3D0, then the real bitmap won't be sent to source at all. Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Juan Quintela Signed-off-by: Peter Xu --- migration/ram.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 49068e86d3..52dd678092 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -235,7 +235,7 @@ int64_t ramblock_recv_bitmap_send(QEMUFile *file, bitmap_to_le(le_bitmap, block->receivedmap, nbits); =20 /* Size of the bitmap, in bytes */ - size =3D nbits / 8; + size =3D DIV_ROUND_UP(nbits, 8); =20 /* * size is always aligned to 8 bytes for 64bit machines, but it @@ -3944,7 +3944,7 @@ int ram_dirty_bitmap_reload(MigrationState *s, RAMBlo= ck *block) int ret =3D -EINVAL; QEMUFile *file =3D s->rp_state.from_dst_file; unsigned long *le_bitmap, nbits =3D block->used_length >> TARGET_PAGE_= BITS; - uint64_t local_size =3D nbits / 8; + uint64_t local_size =3D DIV_ROUND_UP(nbits, 8); uint64_t size, end_mark; =20 trace_ram_dirty_bitmap_reload_begin(block->idstr); --=20 2.17.1