[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 1/6] generic function between migration and bitma
From: |
Sanidhya Kashyap |
Subject: |
[Qemu-devel] [PATCH v6 1/6] generic function between migration and bitmap dump |
Date: |
Sat, 13 Sep 2014 10:00:09 -0400 |
Now, the counter variable is available to all the functions that will call
qemu_bitmap_sync_range. I have tried to make the function along with the
variables as generic as possible.
Signed-off-by: Sanidhya Kashyap <address@hidden>
---
arch_init.c | 19 +++++++++++--------
include/exec/ram_addr.h | 4 ++++
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/arch_init.c b/arch_init.c
index c974f3f..269c669 100644
--- a/arch_init.c
+++ b/arch_init.c
@@ -436,20 +436,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) {
- migration_dirty_pages++;
+ (*counter)++;
}
return ret;
}
-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);
@@ -463,8 +465,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;
@@ -478,7 +480,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);
}
}
}
@@ -514,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, &migration_dirty_pages);
}
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.1
- [Qemu-devel] [PATCH v6 0/6] Obtain dirty bitmap via VM logging, Sanidhya Kashyap, 2014/09/13
- [Qemu-devel] [PATCH v6 2/6] BitmapLog: bitmap dump code, Sanidhya Kashyap, 2014/09/13
- [Qemu-devel] [PATCH v6 4/6] BitmapLog: cancel mechanism for an already running dump bitmap process, Sanidhya Kashyap, 2014/09/13
- [Qemu-devel] [PATCH v6 5/6] BitmapLog: set the period of the dump bitmap process, Sanidhya Kashyap, 2014/09/13
- [Qemu-devel] [PATCH v6 3/6] BitmapLog: get the information about the parameters, Sanidhya Kashyap, 2014/09/13
- [Qemu-devel] [PATCH v6 6/6] BitmapLog: python script for extracting bitmap from a binary file, Sanidhya Kashyap, 2014/09/13
- [Qemu-devel] [PATCH v6 1/6] generic function between migration and bitmap dump,
Sanidhya Kashyap <=