[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 |