diff options
author | Anthony PERARD <anthony.perard@citrix.com> | 2012-10-03 13:48:45 +0000 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-10-03 13:48:45 +0000 |
commit | 910b38e4dc4c37683c8b821e75a7f4cf095e4b21 (patch) | |
tree | 798f32bed8bb24e636fe84fb6ca95a7021b02644 /xen-all.c | |
parent | 39f42439d0629d3921629dc4b38e68df8f2f7b83 (diff) | |
download | qemu-910b38e4dc4c37683c8b821e75a7f4cf095e4b21.tar.gz qemu-910b38e4dc4c37683c8b821e75a7f4cf095e4b21.tar.bz2 qemu-910b38e4dc4c37683c8b821e75a7f4cf095e4b21.zip |
xen: Introduce xen_modified_memory.
This function is to be used during live migration. Every write access to the
guest memory should call this funcion so the Xen tools knows which pages are
dirty.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'xen-all.c')
-rw-r--r-- | xen-all.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -1228,3 +1228,24 @@ void xen_shutdown_fatal_error(const char *fmt, ...) /* destroy the domain */ qemu_system_shutdown_request(); } + +void xen_modified_memory(ram_addr_t start, ram_addr_t length) +{ + if (unlikely(xen_in_migration)) { + int rc; + ram_addr_t start_pfn, nb_pages; + + if (length == 0) { + length = TARGET_PAGE_SIZE; + } + start_pfn = start >> TARGET_PAGE_BITS; + nb_pages = ((start + length + TARGET_PAGE_SIZE - 1) >> TARGET_PAGE_BITS) + - start_pfn; + rc = xc_hvm_modified_memory(xen_xc, xen_domid, start_pfn, nb_pages); + if (rc) { + fprintf(stderr, + "%s failed for "RAM_ADDR_FMT" ("RAM_ADDR_FMT"): %i, %s\n", + __func__, start, nb_pages, rc, strerror(-rc)); + } + } +} |