From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wen Congyang Subject: [RFC Patch 23/25] HACK: do checkpoint per 20ms Date: Fri, 18 Jul 2014 19:39:08 +0800 Message-ID: <1405683551-12579-24-git-send-email-wency@cn.fujitsu.com> References: <1405683551-12579-1-git-send-email-wency@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1405683551-12579-1-git-send-email-wency@cn.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen devel Cc: Ian Campbell , Wen Congyang , Ian Jackson , Jiang Yunhong , Dong Eddie , Yang Hongyang , Lai Jiangshan List-Id: xen-devel@lists.xenproject.org Signed-off-by: Wen Congyang --- tools/libxl/libxl_colo_save.c | 19 ++++++++++++++++++- tools/libxl/libxl_internal.h | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/tools/libxl/libxl_colo_save.c b/tools/libxl/libxl_colo_save.c index aef6f97..3118f5d 100644 --- a/tools/libxl/libxl_colo_save.c +++ b/tools/libxl/libxl_colo_save.c @@ -43,6 +43,8 @@ void libxl__colo_save_setup(libxl__egc *egc, libxl__colo_save_state *css) css->cds.callback = colo_save_setup_done; css->svm_running = false; + libxl__ev_time_init(&css->timeout); + libxl__checkpoint_devices_setup(egc, &css->cds); } @@ -450,6 +452,8 @@ out: static void colo_device_commit_cb(libxl__egc *egc, libxl__checkpoint_device_state *cds, int rc); +static void colo_next_checkpoint(libxl__egc *egc, libxl__ev_time *ev, + const struct timeval *requested_abs); static void colo_start_new_checkpoint(libxl__egc *egc, libxl__checkpoint_device_state *cds, int rc); @@ -485,13 +489,26 @@ static void colo_device_commit_cb(libxl__egc *egc, } /* TODO: wait a new checkpoint */ - colo_start_new_checkpoint(egc, cds, 0); + rc = libxl__ev_time_register_rel(gc, &css->timeout, + colo_next_checkpoint, + 20); + if (rc) + goto out; + return; out: libxl__xc_domain_saverestore_async_callback_done(egc, &dss->shs, 0); } +static void colo_next_checkpoint(libxl__egc *egc, libxl__ev_time *ev, + const struct timeval *requested_abs) +{ + libxl__colo_save_state *css = CONTAINER_OF(ev, *css, timeout); + + colo_start_new_checkpoint(egc, &css->cds, 0); +} + static void colo_start_new_checkpoint(libxl__egc *egc, libxl__checkpoint_device_state *cds, int rc) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 20f7da8..2fafe1c 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -2707,6 +2707,9 @@ struct libxl__colo_save_state { uint8_t temp_buff[9]; void (*callback)(libxl__egc *, libxl__colo_save_state *); bool svm_running; + + /* hack */ + libxl__ev_time timeout; }; /*----- Domain suspend (save) state structure -----*/ -- 1.9.3