XCFLAGS_CHECKPOINT_COMPRESS has been unused since c/s
b15bc4345 (2015),
XCFLAGS_HVM since c/s
9e8672f1c (2013), and XCFLAGS_STDVGA since c/s
087d43326 (2007). Drop the constants, and code which sets them.
The separate hvm parameter (appeared in c/s
d11bec8a1, 2007 and ultimately
redundant with XCFLAGS_HVM), is used for sanity checking and debug printing,
then discarded and replaced with Xen's idea of whether the domain is PV or
HVM.
Rearrange the logic in xc_domain_save() to ask Xen sightly earlier, and use a
consistent idea of 'hvm' throughout. Removing this parameter removes the
final user of libxl's dss->hvm, so drop that field as well.
Update the doxygen comment to be accurate.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Ian Jackson <Ian.Jackson@citrix.com>
#define XCFLAGS_LIVE (1 << 0)
#define XCFLAGS_DEBUG (1 << 1)
-#define XCFLAGS_HVM (1 << 2)
-#define XCFLAGS_STDVGA (1 << 3)
-#define XCFLAGS_CHECKPOINT_COMPRESS (1 << 4)
#define X86_64_B_SIZE 64
#define X86_32_B_SIZE 32
/**
* This function will save a running domain.
*
- * @parm xch a handle to an open hypervisor interface
- * @parm fd the file descriptor to save a domain to
- * @parm dom the id of the domain
+ * @param xch a handle to an open hypervisor interface
+ * @param io_fd the file descriptor to save a domain to
+ * @param dom the id of the domain
+ * @param flags XCFLAGS_xxx
* @param stream_type XC_MIG_STREAM_NONE if the far end of the stream
* doesn't use checkpointing
+ * @param recv_fd Only used for XC_MIG_STREAM_COLO. Contains backchannel from
+ * the destination side.
* @return 0 on success, -1 on failure
*/
int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
- uint32_t flags /* XCFLAGS_xxx */,
- struct save_callbacks* callbacks, int hvm,
+ uint32_t flags, struct save_callbacks *callbacks,
xc_migration_stream_t stream_type, int recv_fd);
/* callbacks provided by xc_domain_restore */
#include <xenguest.h>
int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom, uint32_t flags,
- struct save_callbacks* callbacks, int hvm,
+ struct save_callbacks *callbacks,
xc_migration_stream_t stream_type, int recv_fd)
{
errno = ENOSYS;
int xc_domain_save(xc_interface *xch, int io_fd, uint32_t dom,
uint32_t flags, struct save_callbacks* callbacks,
- int hvm, xc_migration_stream_t stream_type, int recv_fd)
+ xc_migration_stream_t stream_type, int recv_fd)
{
struct xc_sr_context ctx =
{
ctx.save.checkpointed = stream_type;
ctx.save.recv_fd = recv_fd;
+ if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) != 1 )
+ {
+ PERROR("Failed to get domain info");
+ return -1;
+ }
+
+ if ( ctx.dominfo.domid != dom )
+ {
+ ERROR("Domain %u does not exist", dom);
+ return -1;
+ }
+
/* If altering migration_stream update this assert too. */
assert(stream_type == XC_MIG_STREAM_NONE ||
stream_type == XC_MIG_STREAM_REMUS ||
stream_type == XC_MIG_STREAM_COLO);
/* Sanity checks for callbacks. */
- if ( hvm )
+ if ( ctx.dominfo.hvm )
assert(callbacks->switch_qemu_logdirty);
if ( ctx.save.checkpointed )
assert(callbacks->checkpoint && callbacks->postcopy);
if ( ctx.save.checkpointed == XC_MIG_STREAM_COLO )
assert(callbacks->wait_checkpoint);
- DPRINTF("fd %d, dom %u, flags %u, hvm %d", io_fd, dom, flags, hvm);
-
- if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) != 1 )
- {
- PERROR("Failed to get domain info");
- return -1;
- }
-
- if ( ctx.dominfo.domid != dom )
- {
- ERROR("Domain %u does not exist", dom);
- return -1;
- }
+ DPRINTF("fd %d, dom %u, flags %u, hvm %d",
+ io_fd, dom, flags, ctx.dominfo.hvm);
ctx.domid = dom;
rc = libxl__domain_suspend_init(egc, dsps, type);
if (rc) goto out;
- switch (type) {
- case LIBXL_DOMAIN_TYPE_PVH:
- case LIBXL_DOMAIN_TYPE_HVM: {
- dss->hvm = 1;
- break;
- }
- case LIBXL_DOMAIN_TYPE_PV:
- dss->hvm = 0;
- break;
- default:
- abort();
- }
-
dss->xcflags = (live ? XCFLAGS_LIVE : 0)
- | (debug ? XCFLAGS_DEBUG : 0)
- | (dss->hvm ? XCFLAGS_HVM : 0);
+ | (debug ? XCFLAGS_DEBUG : 0);
/* Disallow saving a guest with vNUMA configured because migration
* stream does not preserve node information.
goto out;
}
- if (dss->checkpointed_stream == LIBXL_CHECKPOINTED_STREAM_REMUS) {
- if (libxl_defbool_val(r_info->compression))
- dss->xcflags |= XCFLAGS_CHECKPOINT_COMPRESS;
- }
-
if (dss->checkpointed_stream == LIBXL_CHECKPOINTED_STREAM_NONE)
callbacks->suspend = libxl__domain_suspend_callback;
const libxl_domain_remus_info *remus;
/* private */
int rc;
- int hvm;
int xcflags;
libxl__domain_suspend_state dsps;
union {
libxl__srm_callout_enumcallbacks_save(&shs->callbacks.save.a);
const unsigned long argnums[] = {
- dss->domid, dss->xcflags, dss->hvm, cbflags,
+ dss->domid, dss->xcflags, cbflags,
dss->checkpointed_stream,
};
recv_fd = atoi(NEXTARG);
uint32_t dom = strtoul(NEXTARG,0,10);
uint32_t flags = strtoul(NEXTARG,0,10);
- int hvm = atoi(NEXTARG);
unsigned cbflags = strtoul(NEXTARG,0,10);
xc_migration_stream_t stream_type = strtoul(NEXTARG,0,10);
assert(!*++argv);
setup_signals(save_signal_handler);
r = xc_domain_save(xch, io_fd, dom, flags, &helper_save_callbacks,
- hvm, stream_type, recv_fd);
+ stream_type, recv_fd);
complete(r);
} else if (!strcmp(mode,"--restore-domain")) {