|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v19 for-4.14 11/13] tools/libxl: Add VM forking public functions
Signed-off-by: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>
---
tools/libxl/libxl.h | 10 +++++++++
tools/libxl/libxl_create.c | 44 ++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 71709dc585..79792d6e29 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -2704,6 +2704,16 @@ static inline int
libxl_qemu_monitor_command_0x041200(libxl_ctx *ctx,
*/
int libxl_clear_domid_history(libxl_ctx *ctx);
+/*
+ * Experimental VM forking functions
+ */
+int libxl_domain_fork_vm(libxl_ctx *ctx, uint32_t pdomid, uint32_t *domid)
+ LIBXL_EXTERNAL_CALLERS_ONLY;
+
+int libxl_domain_fork_launch_dm(libxl_ctx *ctx, libxl_domain_config *d_config,
+ uint32_t domid,
+ const libxl_asyncprogress_how *aop_console_how)
+ LIBXL_EXTERNAL_CALLERS_ONLY;
#endif /* LIBXL_H */
/*
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 27f790cae1..9190e4e263 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -2339,6 +2339,50 @@ int libxl_domain_soft_reset(libxl_ctx *ctx,
aop_console_how);
}
+/*
+ * The parent domain is expected to be created with default settings for
+ * - max_evtch_port
+ * - max_grant_frames
+ * - max_maptrack_frames
+ */
+int libxl_domain_fork_vm(libxl_ctx *ctx, uint32_t pdomid, uint32_t *domid)
+{
+ int rc;
+ xc_dominfo_t info;
+ struct xen_domctl_createdomain create = {0};
+
+ if ( 1 != xc_domain_getinfo(ctx->xch, pdomid, 1, &info) )
+ return ERROR_INVAL;
+
+ if ( info.domid != pdomid || !info.hvm || !info.hap )
+ return ERROR_INVAL;
+
+ create.flags |= XEN_DOMCTL_CDF_hvm;
+ create.flags |= XEN_DOMCTL_CDF_hap;
+ create.flags |= XEN_DOMCTL_CDF_oos_off;
+ create.arch.emulation_flags = info.arch_config.emulation_flags;
+ create.ssidref = info.ssidref;
+ create.max_vcpus = info.max_vcpu_id + 1;
+ create.max_evtchn_port = 1023;
+ create.max_grant_frames = LIBXL_MAX_GRANT_FRAMES_DEFAULT;
+ create.max_maptrack_frames = LIBXL_MAX_MAPTRACK_FRAMES_DEFAULT;
+
+ if ( (rc = xc_domain_create(ctx->xch, domid, &create)) )
+ return rc;
+
+ if ( (rc = xc_memshr_fork(ctx->xch, pdomid, *domid, false, false)) )
+ xc_domain_destroy(ctx->xch, *domid);
+
+ return rc;
+}
+
+int libxl_domain_fork_launch_dm(libxl_ctx *ctx, libxl_domain_config *d_config,
+ uint32_t domid,
+ const libxl_asyncprogress_how *aop_console_how)
+{
+ return do_domain_create(ctx, d_config, &domid, -1, -1, 0, 0,
aop_console_how);
+}
+
/*
* Local variables:
* mode: C
--
2.25.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |