On 03/07/2018 08:23 PM, Dr. David Alan Gilbert wrote:
* Wei Wang (wei.w.w...@intel.com) wrote:
This patch adds an API to clear bits corresponding to guest free pages
from the dirty bitmap. Spilt the free page block if it crosses the QEMU
RAMBlock boundary.

Signed-off-by: Wei Wang <wei.w.w...@intel.com>
CC: Dr. David Alan Gilbert <dgilb...@redhat.com>
CC: Juan Quintela <quint...@redhat.com>
CC: Michael S. Tsirkin <m...@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilb...@redhat.com>

---
  include/migration/misc.h |  2 ++
  migration/ram.c          | 20 ++++++++++++++++++++
  2 files changed, 22 insertions(+)

diff --git a/include/migration/misc.h b/include/migration/misc.h
index 77fd4f5..fae1acf 100644
--- a/include/migration/misc.h
+++ b/include/migration/misc.h
@@ -14,11 +14,13 @@
  #ifndef MIGRATION_MISC_H
  #define MIGRATION_MISC_H
+#include "exec/cpu-common.h"
  #include "qemu/notify.h"
/* migration/ram.c */ void ram_mig_init(void);
+void qemu_guest_free_page_hint(void *addr, size_t len);
/* migration/block.c */ diff --git a/migration/ram.c b/migration/ram.c
index 5e33e5c..769a0f6 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2189,6 +2189,26 @@ static int ram_init_all(RAMState **rsp)
      return 0;
  }
+void qemu_guest_free_page_hint(void *addr, size_t len)
+{
+    RAMBlock *block;
+    ram_addr_t offset;
+    size_t used_len, start, npages;
+
+    for (used_len = len; len > 0; len -= used_len) {
+        block = qemu_ram_block_from_host(addr, false, &offset);
+        if (unlikely(offset + len > block->used_length)) {
+            used_len = block->used_length - offset;
+            addr += used_len;
+        }
+
+        start = offset >> TARGET_PAGE_BITS;
+        npages = used_len >> TARGET_PAGE_BITS;
+        bitmap_clear(block->bmap, start, npages);
+        ram_state->migration_dirty_pages -= npages;

Hi Dave,

Thanks for reviewing this patch. There will be a little more change here about calculating "ram_state->migration_dirty_pages" since we just extend this optimization to all the stages now (instead of just bulk stage). Please have a check more explanations at the v4 cover-letter ChangeLog.

Best,
Wei


Reply via email to