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>
This commit is contained in:
parent
39f42439d0
commit
910b38e4dc
1
hw/xen.h
1
hw/xen.h
@ -48,6 +48,7 @@ void xenstore_store_pv_console_info(int i, struct CharDriverState *chr);
|
|||||||
struct MemoryRegion;
|
struct MemoryRegion;
|
||||||
void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
|
void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size,
|
||||||
struct MemoryRegion *mr);
|
struct MemoryRegion *mr);
|
||||||
|
void xen_modified_memory(ram_addr_t start, ram_addr_t length);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct MemoryRegion;
|
struct MemoryRegion;
|
||||||
|
21
xen-all.c
21
xen-all.c
@ -1228,3 +1228,24 @@ void xen_shutdown_fatal_error(const char *fmt, ...)
|
|||||||
/* destroy the domain */
|
/* destroy the domain */
|
||||||
qemu_system_shutdown_request();
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -59,3 +59,7 @@ void xen_register_framebuffer(MemoryRegion *mr)
|
|||||||
void qmp_xen_set_global_dirty_log(bool enable, Error **errp)
|
void qmp_xen_set_global_dirty_log(bool enable, Error **errp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void xen_modified_memory(ram_addr_t start, ram_addr_t length)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user