From: Wen Congyang Date: Wed, 15 Jul 2015 07:45:49 +0000 (+0800) Subject: tools/libxl: store remus_ops in checkpoint device state X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~1653 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b203070184e7ffa5a30e5e88b196f5aa63abfd52;p=xen.git tools/libxl: store remus_ops in checkpoint device state Checkpoint device is an abstract layer to do checkpoint. COLO can also use it to do checkpoint. But there are still some codes in checkpoint device which touch remus. This patch and: tools/libxl: move remus state into a seperate structure tools/libxl: seperate device init/cleanup from checkpoint device layer will seperate remus from checkpoint device layer. We use remus ops directly in checkpoint device. Store it in checkpoint device state so that we do not aware of remus_ops in the checkpoint device layer. It is pure refactoring and no functional changes. Signed-off-by: Wen Congyang Signed-off-by: Yang Hongyang Acked-by:Ian Campbell Reviewed-by: Konrad Rzeszutek Wilk Acked-by: Wei Liu --- diff --git a/tools/libxl/libxl_checkpoint_device.c b/tools/libxl/libxl_checkpoint_device.c index 226f159733..bbc6dc4076 100644 --- a/tools/libxl/libxl_checkpoint_device.c +++ b/tools/libxl/libxl_checkpoint_device.c @@ -17,14 +17,6 @@ #include "libxl_internal.h" -extern const libxl__checkpoint_device_instance_ops remus_device_nic; -extern const libxl__checkpoint_device_instance_ops remus_device_drbd_disk; -static const libxl__checkpoint_device_instance_ops *remus_ops[] = { - &remus_device_nic, - &remus_device_drbd_disk, - NULL, -}; - /*----- helper functions -----*/ static int init_device_subkind(libxl__checkpoint_devices_state *cds) @@ -172,7 +164,7 @@ static void device_setup_iterate(libxl__egc *egc, libxl__ao_device *aodev) goto out; do { - dev->ops = remus_ops[++dev->ops_index]; + dev->ops = dev->cds->ops[++dev->ops_index]; if (!dev->ops) { libxl_device_nic * nic = NULL; libxl_device_disk * disk = NULL; diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index bde7a15831..2847d138e0 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -2895,6 +2895,8 @@ struct libxl__checkpoint_devices_state { uint32_t domid; libxl__checkpoint_callback *callback; int device_kind_flags; + /* The ops must be pointer array, and the last ops must be NULL. */ + const libxl__checkpoint_device_instance_ops **ops; /*----- private for abstract layer only -----*/ diff --git a/tools/libxl/libxl_remus.c b/tools/libxl/libxl_remus.c index d41a439963..86f81c34b7 100644 --- a/tools/libxl/libxl_remus.c +++ b/tools/libxl/libxl_remus.c @@ -18,6 +18,14 @@ #include "libxl_internal.h" +extern const libxl__checkpoint_device_instance_ops remus_device_nic; +extern const libxl__checkpoint_device_instance_ops remus_device_drbd_disk; +static const libxl__checkpoint_device_instance_ops *remus_ops[] = { + &remus_device_nic, + &remus_device_drbd_disk, + NULL, +}; + /*-------------------- Remus setup and teardown ---------------------*/ static void remus_setup_done(libxl__egc *egc, @@ -55,6 +63,7 @@ void libxl__remus_setup(libxl__egc *egc, cds->ao = ao; cds->domid = dss->domid; cds->callback = remus_setup_done; + cds->ops = remus_ops; dss->sws.checkpoint_callback = remus_checkpoint_stream_written;