From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: - - <nevilad@yahoo.com>, quintela@redhat.com, peterx@redhat.com
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [PATCH] Bug #1829242 correction
Date: Fri, 8 Nov 2019 15:16:42 +0000 [thread overview]
Message-ID: <20191108151642.GC2877@work-vm> (raw)
In-Reply-To: <694638341.1321046.1573223493407@mail.yahoo.com>
* - - (nevilad@yahoo.com) wrote:
> Bug #1829242 correction. Added type conversions to ram_addr_t
> before all left shifts of page indexes to TARGET_PAGE_BITS, to correct
> overflows when the page address was 4Gb and more.
>
> Signed-off-by: Alexey Romko <nevilad@yahoo.com>
Hi Alexey,
(Your git settings are a bit odd, your name isn't on the mail header,
but that's minor since you have the signed-off ok).
Thanks for this, this is probably a fix for Juan's a935e30
which started using 'page' rather than 'offset' in the PageSearchStatus,
and I guess on windows 'long' isn't long enough.
I think this is fine, (with perhaps a better Subject, that Juan can
add);
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
I think in the long term we probably need to stop using 'long' for
offsets.
Dave
> ---
> migration/ram.c | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/migration/ram.c b/migration/ram.c
> index 5078f94490..90a09de620 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -1730,7 +1730,7 @@ static inline bool migration_bitmap_clear_dirty(RAMState *rs,
> if (rb->clear_bmap && clear_bmap_test_and_clear(rb, page)) {
> uint8_t shift = rb->clear_bmap_shift;
> hwaddr size = 1ULL << (TARGET_PAGE_BITS + shift);
> - hwaddr start = (page << TARGET_PAGE_BITS) & (-size);
> + hwaddr start = (((ram_addr_t)page) << TARGET_PAGE_BITS) & (-size);
>
> /*
> * CLEAR_BITMAP_SHIFT_MIN should always guarantee this... this
> @@ -1967,7 +1967,7 @@ static void ram_release_pages(const char *rbname, uint64_t offset, int pages)
> return;
> }
>
> - ram_discard_range(rbname, offset, pages << TARGET_PAGE_BITS);
> + ram_discard_range(rbname, offset, ((ram_addr_t)pages) << TARGET_PAGE_BITS);
> }
>
> /*
> @@ -2055,7 +2055,7 @@ static int ram_save_page(RAMState *rs, PageSearchStatus *pss, bool last_stage)
> uint8_t *p;
> bool send_async = true;
> RAMBlock *block = pss->block;
> - ram_addr_t offset = pss->page << TARGET_PAGE_BITS;
> + ram_addr_t offset = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS;
> ram_addr_t current_addr = block->offset + offset;
>
> p = block->host + offset;
> @@ -2242,7 +2242,7 @@ static bool find_dirty_block(RAMState *rs, PageSearchStatus *pss, bool *again)
> *again = false;
> return false;
> }
> - if ((pss->page << TARGET_PAGE_BITS) >= pss->block->used_length) {
> + if ((((ram_addr_t)pss->page) << TARGET_PAGE_BITS) >= pss->block->used_length) {
> /* Didn't find anything in this RAM Block */
> pss->page = 0;
> pss->block = QLIST_NEXT_RCU(pss->block, next);
> @@ -2536,7 +2536,7 @@ static int ram_save_target_page(RAMState *rs, PageSearchStatus *pss,
> bool last_stage)
> {
> RAMBlock *block = pss->block;
> - ram_addr_t offset = pss->page << TARGET_PAGE_BITS;
> + ram_addr_t offset = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS;
> int res;
>
> if (control_save_page(rs, block, offset, &res)) {
> @@ -2617,7 +2617,7 @@ static int ram_save_host_page(RAMState *rs, PageSearchStatus *pss,
> pages += tmppages;
> pss->page++;
> } while ((pss->page & (pagesize_bits - 1)) &&
> - offset_in_ramblock(pss->block, pss->page << TARGET_PAGE_BITS));
> + offset_in_ramblock(pss->block, ((ram_addr_t)pss->page) << TARGET_PAGE_BITS));
>
> /* The offset we leave with is the last one we looked at */
> pss->page--;
> @@ -2834,8 +2834,8 @@ void ram_postcopy_migrated_memory_release(MigrationState *ms)
>
> while (run_start < range) {
> unsigned long run_end = find_next_bit(bitmap, range, run_start + 1);
> - ram_discard_range(block->idstr, run_start << TARGET_PAGE_BITS,
> - (run_end - run_start) << TARGET_PAGE_BITS);
> + ram_discard_range(block->idstr, ((ram_addr_t)run_start) << TARGET_PAGE_BITS,
> + ((ram_addr_t)(run_end - run_start)) << TARGET_PAGE_BITS);
> run_start = find_next_zero_bit(bitmap, range, run_end + 1);
> }
> }
> @@ -4201,13 +4201,13 @@ static void colo_flush_ram_cache(void)
> while (block) {
> offset = migration_bitmap_find_dirty(ram_state, block, offset);
>
> - if (offset << TARGET_PAGE_BITS >= block->used_length) {
> + if (((ram_addr_t)offset) << TARGET_PAGE_BITS >= block->used_length) {
> offset = 0;
> block = QLIST_NEXT_RCU(block, next);
> } else {
> migration_bitmap_clear_dirty(ram_state, block, offset);
> - dst_host = block->host + (offset << TARGET_PAGE_BITS);
> - src_host = block->colo_cache + (offset << TARGET_PAGE_BITS);
> + dst_host = block->host + (((ram_addr_t)offset) << TARGET_PAGE_BITS);
> + src_host = block->colo_cache + (((ram_addr_t)offset) << TARGET_PAGE_BITS);
> memcpy(dst_host, src_host, TARGET_PAGE_SIZE);
> }
> }
> --
> 2.15.0.windows.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2019-11-08 15:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <694638341.1321046.1573223493407.ref@mail.yahoo.com>
2019-11-08 14:31 ` [PATCH] Bug #1829242 correction - -
2019-11-08 15:16 ` Dr. David Alan Gilbert [this message]
2020-01-10 13:54 ` Juan Quintela
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=20191108151642.GC2877@work-vm \
--to=dgilbert@redhat.com \
--cc=nevilad@yahoo.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.