mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
libxl: Re-introduce libxl__domain_unpause
libxl__domain_unpause is a reimplementation of libxl__domain_unpause_deprecated with asynchronous operation. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
ffc664dcb0
commit
beca37ba97
2 files changed
+56
-1
No files matched your search
@@ -639,6 +639,58 @@ out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void domain_unpause_done(libxl__egc *egc,
|
||||
libxl__dm_resume_state *,
|
||||
int rc);
|
||||
|
||||
void libxl__domain_unpause(libxl__egc *egc,
|
||||
libxl__dm_resume_state *dmrs)
|
||||
{
|
||||
STATE_AO_GC(dmrs->ao);
|
||||
int rc = 0;
|
||||
|
||||
/* Convenience aliases */
|
||||
libxl_domid domid = dmrs->domid;
|
||||
|
||||
libxl_domain_type type = libxl__domain_type(gc, domid);
|
||||
if (type == LIBXL_DOMAIN_TYPE_INVALID) {
|
||||
rc = ERROR_FAIL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (type == LIBXL_DOMAIN_TYPE_HVM) {
|
||||
dmrs->dm_resumed_callback = domain_unpause_done;
|
||||
libxl__dm_resume(egc, dmrs); /* must be last */
|
||||
return;
|
||||
}
|
||||
rc = 0;
|
||||
out:
|
||||
domain_unpause_done(egc, dmrs, rc);
|
||||
}
|
||||
|
||||
static void domain_unpause_done(libxl__egc *egc,
|
||||
libxl__dm_resume_state *dmrs,
|
||||
int rc)
|
||||
{
|
||||
EGC_GC;
|
||||
int r;
|
||||
|
||||
/* Convenience aliases */
|
||||
libxl_domid domid = dmrs->domid;
|
||||
|
||||
if (rc) goto out;
|
||||
|
||||
r = xc_domain_unpause(CTX->xch, domid);
|
||||
if (r < 0) {
|
||||
LOGED(ERROR, domid, "Unpausing domain");
|
||||
rc = ERROR_FAIL;
|
||||
goto out;
|
||||
}
|
||||
rc = 0;
|
||||
out:
|
||||
dmrs->callback(egc, dmrs, rc);
|
||||
}
|
||||
|
||||
int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid,
|
||||
const libxl_asyncop_how *ao_how)
|
||||
{
|
||||
|
||||
@@ -1351,9 +1351,10 @@ struct libxl__dm_resume_state {
|
||||
libxl_domid domid;
|
||||
void (*callback)(libxl__egc *, libxl__dm_resume_state *, int rc);
|
||||
|
||||
/* private to libxl__domain_resume */
|
||||
/* private to libxl__domain_resume and libxl__domain_unpause */
|
||||
void (*dm_resumed_callback)(libxl__egc *,
|
||||
libxl__dm_resume_state *, int rc);
|
||||
/* private to libxl__domain_resume */
|
||||
bool suspend_cancel;
|
||||
|
||||
/* private to libxl__dm_resume */
|
||||
@@ -1366,6 +1367,8 @@ _hidden void libxl__dm_resume(libxl__egc *egc,
|
||||
_hidden void libxl__domain_resume(libxl__egc *egc,
|
||||
libxl__dm_resume_state *dmrs,
|
||||
bool suspend_cancel);
|
||||
_hidden void libxl__domain_unpause(libxl__egc *,
|
||||
libxl__dm_resume_state *dmrs);
|
||||
|
||||
/* returns 0 or 1, or a libxl error code */
|
||||
_hidden int libxl__domain_pvcontrol_available(libxl__gc *gc, uint32_t domid);
|
||||
|
||||