mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxl_dom: Call the right switch logdirty for the right DM.
This patch dispatch the switch logdirty call depending on which device model version is running. The call to qemu-xen right now is synchronous, not like the one to qemu-xen-traditional. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
f19153d95a
commit
d374f43b2a
1 file changed
+42
-3
+42
-3
@@ -685,10 +685,10 @@ static void logdirty_init(libxl__logdirty_switch *lds)
|
||||
libxl__ev_time_init(&lds->timeout);
|
||||
}
|
||||
|
||||
void libxl__domain_suspend_common_switch_qemu_logdirty
|
||||
(int domid, unsigned enable, void *user)
|
||||
static void domain_suspend_switch_qemu_xen_traditional_logdirty
|
||||
(int domid, unsigned enable,
|
||||
libxl__save_helper_state *shs)
|
||||
{
|
||||
libxl__save_helper_state *shs = user;
|
||||
libxl__egc *egc = shs->egc;
|
||||
libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs);
|
||||
libxl__logdirty_switch *lds = &dss->logdirty;
|
||||
@@ -756,6 +756,45 @@ void libxl__domain_suspend_common_switch_qemu_logdirty
|
||||
switch_logdirty_done(egc,dss,-1);
|
||||
}
|
||||
|
||||
static void domain_suspend_switch_qemu_xen_logdirty
|
||||
(int domid, unsigned enable,
|
||||
libxl__save_helper_state *shs)
|
||||
{
|
||||
libxl__egc *egc = shs->egc;
|
||||
libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs);
|
||||
STATE_AO_GC(dss->ao);
|
||||
int rc;
|
||||
|
||||
rc = libxl__qmp_set_global_dirty_log(gc, domid, enable);
|
||||
if (!rc) {
|
||||
libxl__xc_domain_saverestore_async_callback_done(egc, shs, 0);
|
||||
} else {
|
||||
LOG(ERROR,"logdirty switch failed (rc=%d), aborting suspend",rc);
|
||||
libxl__xc_domain_saverestore_async_callback_done(egc, shs, -1);
|
||||
}
|
||||
}
|
||||
|
||||
void libxl__domain_suspend_common_switch_qemu_logdirty
|
||||
(int domid, unsigned enable, void *user)
|
||||
{
|
||||
libxl__save_helper_state *shs = user;
|
||||
libxl__egc *egc = shs->egc;
|
||||
libxl__domain_suspend_state *dss = CONTAINER_OF(shs, *dss, shs);
|
||||
STATE_AO_GC(dss->ao);
|
||||
|
||||
switch (libxl__device_model_version_running(gc, domid)) {
|
||||
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN_TRADITIONAL:
|
||||
domain_suspend_switch_qemu_xen_traditional_logdirty(domid, enable, shs);
|
||||
break;
|
||||
case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN:
|
||||
domain_suspend_switch_qemu_xen_logdirty(domid, enable, shs);
|
||||
break;
|
||||
default:
|
||||
LOG(ERROR,"logdirty switch failed"
|
||||
", no valid device model version found, aborting suspend");
|
||||
libxl__xc_domain_saverestore_async_callback_done(egc, shs, -1);
|
||||
}
|
||||
}
|
||||
static void switch_logdirty_timeout(libxl__egc *egc, libxl__ev_time *ev,
|
||||
const struct timeval *requested_abs)
|
||||
{
|
||||
|
||||