[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH COLO v5 02/29] Refactor domain_suspend_callback_common()
On Wed, Apr 01, 2015 at 02:41:38PM +0800, Yang Hongyang wrote: > From: Wen Congyang <wency@xxxxxxxxxxxxxx> > > libxl__domain_suspend() is to save the guest. I think > we should call it libxl__domain_save(), but I don't > rename it. > FWIW this is not public API so we have certain degree of liberty to rename it if the new name is deemed more appropriate. > Secondary vm is running in colo mode. So we will do > the following things again and again: > 1. suspend both primay vm and secondary vm > 2. sync the state > 3. resume both primary vm and secondary vm > To suspend secondary vm, we need an independent API to > suspend vm. > [...] > > +/* > + * libxl__domain_suspend_state is for saving guest, not > + * for suspending guest. We need to an independent API > + * to suspend guest only. > + */ > +struct libxl__domain_suspend_state2 { > + /* set by caller of libxl__domain_suspend2 */ > + libxl__ao *ao; > + > + uint32_t domid; > + libxl__ev_evtchn guest_evtchn;; > + int guest_evtchn_lockfd; > + int hvm; > + const char *dm_savefile; > + void (*callback_common_done)(libxl__egc*, > + libxl__domain_suspend_state2*, int ok); > + int save_dm; > + int guest_responded; > + libxl__xswait_state pvcontrol; > + libxl__ev_xswatch guest_watch; > + libxl__ev_time guest_timeout; > +}; > + > struct libxl__domain_suspend_state { > /* set by caller of libxl__domain_suspend */ > libxl__ao *ao; > @@ -2827,22 +2851,14 @@ struct libxl__domain_suspend_state { > int debug; > const libxl_domain_remus_info *remus; > /* private */ > - libxl__ev_evtchn guest_evtchn; > - int guest_evtchn_lockfd; > + libxl__domain_suspend_state2 dss2; > int hvm; > int xcflags; > - int guest_responded; > - libxl__xswait_state pvcontrol; > - libxl__ev_xswatch guest_watch; > - libxl__ev_time guest_timeout; > - const char *dm_savefile; > libxl__remus_devices_state rds; > libxl__ev_time checkpoint_timeout; /* used for Remus checkpoint */ > int interval; /* checkpoint interval (for Remus) */ > libxl__save_helper_state shs; > libxl__logdirty_switch logdirty; > - void (*callback_common_done)(libxl__egc*, > - struct libxl__domain_suspend_state*, int > ok); > /* private for libxl__domain_save_device_model */ > libxl__save_device_model_cb *save_dm_callback; > libxl__datacopier_state save_dm_datacopier; You moved dm_savefile to new struct but not these two fields, why? Since your suspend2 function is just a wrapper around domain_suspend_callback_common, it doesn't seem to need access to dm_savefile. Wei. > @@ -3116,6 +3132,9 @@ struct libxl__domain_create_state { > > /*----- Domain suspend (save) functions -----*/ > > +/* calls dss2->callback_common_done when done */ > +_hidden void libxl__domain_suspend2(libxl__egc *egc, > + libxl__domain_suspend_state2 *dss2); > /* calls dss->callback when done */ > _hidden void libxl__domain_suspend(libxl__egc *egc, > libxl__domain_suspend_state *dss); > @@ -3155,7 +3174,7 @@ _hidden void libxl__xc_domain_restore_done(libxl__egc > *egc, void *dcs_void, > > /* Each time the dm needs to be saved, we must call suspend and then save */ > _hidden int libxl__domain_suspend_device_model(libxl__gc *gc, > - libxl__domain_suspend_state *dss); > + libxl__domain_suspend_state2 > *dss2); > _hidden void libxl__domain_save_device_model(libxl__egc *egc, > libxl__domain_suspend_state *dss, > libxl__save_device_model_cb *callback); > -- > 1.9.1 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |