Message ID | 1348139574-23324-3-git-send-email-anthony.perard@citrix.com |
---|---|
State | New |
Headers | show |
On Thu, 20 Sep 2012, Anthony PERARD wrote: > 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> > --- > hw/xen.h | 1 + > xen-all.c | 21 +++++++++++++++++++++ > xen-stub.c | 4 ++++ > 3 files changed, 26 insertions(+) > > diff --git a/hw/xen.h b/hw/xen.h > index e5926b7..d14e92d 100644 > --- a/hw/xen.h > +++ b/hw/xen.h > @@ -48,6 +48,7 @@ void xenstore_store_pv_console_info(int i, struct CharDriverState *chr); > struct MemoryRegion; > void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, > struct MemoryRegion *mr); > +void xen_modified_memory(ram_addr_t start, ram_addr_t length); > #endif > > struct MemoryRegion; > diff --git a/xen-all.c b/xen-all.c > index f75ae9f..6250593 100644 > --- a/xen-all.c > +++ b/xen-all.c > @@ -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)); a would prefer a more sane way of splitting this sentence in lines
On Thu, Sep 20, 2012 at 1:29 PM, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote: > >> +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)); > > a would prefer a more sane way of splitting this sentence in lines Will do.
diff --git a/hw/xen.h b/hw/xen.h index e5926b7..d14e92d 100644 --- a/hw/xen.h +++ b/hw/xen.h @@ -48,6 +48,7 @@ void xenstore_store_pv_console_info(int i, struct CharDriverState *chr); struct MemoryRegion; void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, struct MemoryRegion *mr); +void xen_modified_memory(ram_addr_t start, ram_addr_t length); #endif struct MemoryRegion; diff --git a/xen-all.c b/xen-all.c index f75ae9f..6250593 100644 --- a/xen-all.c +++ b/xen-all.c @@ -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)); + } + } +} diff --git a/xen-stub.c b/xen-stub.c index 5e66ba8..9214392 100644 --- a/xen-stub.c +++ b/xen-stub.c @@ -59,3 +59,7 @@ void xen_register_framebuffer(MemoryRegion *mr) void qmp_xen_set_global_dirty_log(bool enable, Error **errp) { } + +void xen_modified_memory(ram_addr_t start, ram_addr_t length) +{ +}
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> --- hw/xen.h | 1 + xen-all.c | 21 +++++++++++++++++++++ xen-stub.c | 4 ++++ 3 files changed, 26 insertions(+)