From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Sanidhya Kashyap <sanidhya.iiith@gmail.com>
Cc: qemu list <qemu-devel@nongnu.org>, Juan Quintela <quintela@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v5 1/6] generic function between migration and bitmap dump
Date: Tue, 12 Aug 2014 11:37:40 +0100 [thread overview]
Message-ID: <20140812103739.GE2384@work-vm> (raw)
In-Reply-To: <1406862751-24008-2-git-send-email-sanidhya.iiith@gmail.com>
* Sanidhya Kashyap (sanidhya.iiith@gmail.com) wrote:
> I have modified the functions to be more generic i.e. I have used the
> counter variable which stores the required value. If the value of counter
> is 0, it means bitmap dump process whereas the value of 1 means migration.
OK, but not quite what I meant:
> Signed-off-by: Sanidhya Kashyap <sanidhya.iiith@gmail.com>
> ---
> arch_init.c | 21 +++++++++++++--------
> include/exec/ram_addr.h | 4 ++++
> 2 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/arch_init.c b/arch_init.c
> index 8ddaf35..2aacb1c 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -434,20 +434,22 @@ ram_addr_t migration_bitmap_find_and_reset_dirty(MemoryRegion *mr,
> return (next - base) << TARGET_PAGE_BITS;
> }
>
> -static inline bool migration_bitmap_set_dirty(ram_addr_t addr)
> +static inline bool qemu_bitmap_set_dirty(ram_addr_t addr, unsigned long *bitmap,
> + uint64_t *counter)
> {
> bool ret;
> int nr = addr >> TARGET_PAGE_BITS;
>
> - ret = test_and_set_bit(nr, migration_bitmap);
> + ret = test_and_set_bit(nr, bitmap);
>
> - if (!ret) {
> + if (!ret && *counter) {
> migration_dirty_pages++;
> }
> return ret;
> }
If you made this:
if (!ret && *counter) {
*counter++;
}
> -static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length)
> +void qemu_bitmap_sync_range(ram_addr_t start, ram_addr_t length,
> + unsigned long *bitmap, uint64_t *counter)
> {
> ram_addr_t addr;
> unsigned long page = BIT_WORD(start >> TARGET_PAGE_BITS);
> @@ -461,8 +463,8 @@ static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length)
> for (k = page; k < page + nr; k++) {
> if (src[k]) {
> unsigned long new_dirty;
> - new_dirty = ~migration_bitmap[k];
> - migration_bitmap[k] |= src[k];
> + new_dirty = ~bitmap[k];
> + bitmap[k] |= src[k];
> new_dirty &= src[k];
> migration_dirty_pages += ctpopl(new_dirty);
> src[k] = 0;
> @@ -476,7 +478,7 @@ static void migration_bitmap_sync_range(ram_addr_t start, ram_addr_t length)
> cpu_physical_memory_reset_dirty(start + addr,
> TARGET_PAGE_SIZE,
> DIRTY_MEMORY_MIGRATION);
> - migration_bitmap_set_dirty(start + addr);
> + qemu_bitmap_set_dirty(start + addr, bitmap, counter);
> }
> }
> }
> @@ -497,6 +499,8 @@ static void migration_bitmap_sync(void)
> int64_t bytes_xfer_now;
> static uint64_t xbzrle_cache_miss_prev;
> static uint64_t iterations_prev;
> + /* counter = 1 indicates, this will be used for migration */
> + uint64_t counter = 1;
>
> bitmap_sync_count++;
>
> @@ -512,7 +516,8 @@ static void migration_bitmap_sync(void)
> address_space_sync_dirty_bitmap(&address_space_memory);
>
> QTAILQ_FOREACH(block, &ram_list.blocks, next) {
> - migration_bitmap_sync_range(block->mr->ram_addr, block->length);
> + qemu_bitmap_sync_range(block->mr->ram_addr, block->length,
> + migration_bitmap, &counter);
Then this could become:
qemu_bitmap_sync_range(block->mr->ram_addr, block->length,
migration_bitmap, &migration_dirty_pages);
so you don't have the dummy 'counter' varaible.
Dave
> }
> trace_migration_bitmap_sync_end(migration_dirty_pages
> - num_dirty_pages_init);
> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
> index 6593be1..fcc3501 100644
> --- a/include/exec/ram_addr.h
> +++ b/include/exec/ram_addr.h
> @@ -162,5 +162,9 @@ static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start,
> void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t length,
> unsigned client);
>
> +
> +void qemu_bitmap_sync_range(ram_addr_t start, ram_addr_t length,
> + unsigned long *bitmap, uint64_t *counter);
> +
> #endif
> #endif
> --
> 1.9.3
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2014-08-12 10:38 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-01 3:12 [Qemu-devel] [PATCH v5 0/6] Obtain dirty bitmap via VM logging Sanidhya Kashyap
2014-08-01 3:12 ` [Qemu-devel] [PATCH v5 1/6] generic function between migration and bitmap dump Sanidhya Kashyap
2014-08-12 10:37 ` Dr. David Alan Gilbert [this message]
2014-08-01 3:12 ` [Qemu-devel] [PATCH v5 2/6] BitmapLog: bitmap dump code Sanidhya Kashyap
2014-08-12 11:15 ` Dr. David Alan Gilbert
2014-08-12 13:12 ` Eric Blake
2014-08-01 3:12 ` [Qemu-devel] [PATCH v5 3/6] BitmapLog: get the information about the parameters Sanidhya Kashyap
2014-08-12 11:20 ` Dr. David Alan Gilbert
2014-08-12 13:53 ` Eric Blake
2014-08-01 3:12 ` [Qemu-devel] [PATCH v5 4/6] BitmapLog: cancel mechanism for an already running dump bitmap process Sanidhya Kashyap
2014-08-12 13:55 ` Eric Blake
2014-08-01 3:12 ` [Qemu-devel] [PATCH v5 5/6] BitmapLog: set the period of the " Sanidhya Kashyap
2014-08-12 13:57 ` Eric Blake
2014-08-01 3:12 ` [Qemu-devel] [PATCH v5 6/6] BitmapLog: python script for extracting bitmap from a binary file Sanidhya Kashyap
2014-08-12 12:36 ` Dr. David Alan Gilbert
2014-08-12 14:04 ` Dr. David Alan Gilbert
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=20140812103739.GE2384@work-vm \
--to=dgilbert@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=sanidhya.iiith@gmail.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.