qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org, peterx@redhat.com, quintela@redhat.com
Subject: [Qemu-devel] [PULL 07/15] migration: fix incorrect bitmap size calculation
Date: Tue, 10 Jul 2018 16:30:08 +0100	[thread overview]
Message-ID: <20180710153016.131258-8-dgilbert@redhat.com> (raw)
In-Reply-To: <20180710153016.131258-1-dgilbert@redhat.com>

From: Peter Xu <peterx@redhat.com>

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=4K (which contains only one single 4K
page) will have nbits=1, then nbits/8=0, then the real bitmap won't be
sent to source at all.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20180710091902.28780-4-peterx@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 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);
 
     /* Size of the bitmap, in bytes */
-    size = nbits / 8;
+    size = DIV_ROUND_UP(nbits, 8);
 
     /*
      * size is always aligned to 8 bytes for 64bit machines, but it
@@ -3944,7 +3944,7 @@ int ram_dirty_bitmap_reload(MigrationState *s, RAMBlock *block)
     int ret = -EINVAL;
     QEMUFile *file = s->rp_state.from_dst_file;
     unsigned long *le_bitmap, nbits = block->used_length >> TARGET_PAGE_BITS;
-    uint64_t local_size = nbits / 8;
+    uint64_t local_size = DIV_ROUND_UP(nbits, 8);
     uint64_t size, end_mark;
 
     trace_ram_dirty_bitmap_reload_begin(block->idstr);
-- 
2.17.1

  parent reply	other threads:[~2018-07-10 15:30 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-10 15:30 [Qemu-devel] [PULL 00/15] migration queue Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 01/15] migration: delay postcopy paused state Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 02/15] migration: move income process out of multifd Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 03/15] migration: unbreak postcopy recovery Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 04/15] migration: unify incoming processing Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 05/15] migration: simplify check to use qemu file buffer Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 06/15] migration: loosen recovery check when load vm Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` Dr. David Alan Gilbert (git) [this message]
2018-07-10 15:30 ` [Qemu-devel] [PULL 08/15] migration: show pause/recover state on dst host Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 09/15] tests: introduce migrate_postcopy_* helpers Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 10/15] tests: allow migrate() to take extra flags Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 11/15] tests: introduce migrate_query*() helpers Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 12/15] tests: introduce wait_for_migration_status() Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 13/15] tests: add postcopy recovery test Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 14/15] tests: hide stderr for " Dr. David Alan Gilbert (git)
2018-07-10 15:30 ` [Qemu-devel] [PULL 15/15] migration: reorder MIG_CMD_POSTCOPY_RESUME Dr. David Alan Gilbert (git)
2018-07-10 16:28 ` [Qemu-devel] [PULL 00/15] migration queue Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180710153016.131258-8-dgilbert@redhat.com \
    --to=dgilbert@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).