Re: [libvirt] [PATCH v4 2/8] libxl: pass driver config to libxlMakeDomBuildInfo
On 02/08/2018 03:58 PM, Marek Marczykowski-Górecki wrote: Preparation for global nestedhvm configuration - libxlMakeDomBuildInfo needs access to libxlDriverConfig. No functional change. Adjusting tests require slightly more mockup functions, because of libxlDriverConfigNew() call. --- Changes since v3: - new patch, preparation --- src/libxl/libxl_conf.c | 8 +--- src/libxl/libxl_conf.h | 2 +- src/libxl/libxl_domain.c | 2 +- tests/libxlxml2domconfigtest.c | 20 +--- tests/virmocklibxl.c | 25 + 5 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 2d2a707..8cced29 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -271,10 +271,11 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf) static int libxlMakeDomBuildInfo(virDomainDefPtr def, - libxl_ctx *ctx, + libxlDriverConfigPtr cfg, virCapsPtr caps, libxl_domain_config *d_config) { +libxl_ctx *ctx = cfg->ctx; libxl_domain_build_info *b_info = _config->b_info; int hvm = def->os.type == VIR_DOMAIN_OSTYPE_HVM; size_t i; @@ -2288,16 +2289,17 @@ int libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, virDomainDefPtr def, const char *channelDir LIBXL_ATTR_UNUSED, - libxl_ctx *ctx, + libxlDriverConfigPtr cfg, I can't recall if the only reason we were avoiding passing a libxlDriverConfigPtr is the extra mocking. If so, that's not reason enough to avoid it. virCapsPtr caps, libxl_domain_config *d_config) { +libxl_ctx *ctx = cfg->ctx; libxl_domain_config_init(d_config); if (libxlMakeDomCreateInfo(ctx, def, _config->c_info) < 0) return -1; -if (libxlMakeDomBuildInfo(def, ctx, caps, d_config) < 0) +if (libxlMakeDomBuildInfo(def, cfg, caps, d_config) < 0) return -1; #ifdef LIBXL_HAVE_VNUMA diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index 264df11..8eefe06 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -216,7 +216,7 @@ int libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, virDomainDefPtr def, const char *channelDir LIBXL_ATTR_UNUSED, - libxl_ctx *ctx, + libxlDriverConfigPtr cfg, virCapsPtr caps, libxl_domain_config *d_config); diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 395c8a9..0a60444 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1253,7 +1253,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, goto cleanup_dom; if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def, - cfg->channelDir, cfg->ctx, cfg->caps, _config) < 0) + cfg->channelDir, cfg, cfg->caps, _config) < 0) If we are going to pass the entire libxlDriverConfigPtr to libxlBuildDomainConfig(), the channelDir and caps parameters can be dropped. Regards, Jim goto cleanup_dom; if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, _config) < 0) diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index bd4c3af..0105550 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -56,8 +56,8 @@ testCompareXMLToDomConfig(const char *xmlfile, int ret = -1; libxl_domain_config actualconfig; libxl_domain_config expectconfig; +libxlDriverConfigPtr cfg; xentoollog_logger *log = NULL; -libxl_ctx *ctx = NULL; virPortAllocatorPtr gports = NULL; virDomainXMLOptionPtr xmlopt = NULL; virDomainDefPtr vmdef = NULL; @@ -68,10 +68,16 @@ testCompareXMLToDomConfig(const char *xmlfile, libxl_domain_config_init(); libxl_domain_config_init(); +if (!(cfg = libxlDriverConfigNew())) +goto cleanup; + if (!(log = (xentoollog_logger *)xtl_createlogger_stdiostream(stderr, XTL_DEBUG, 0))) goto cleanup; -if (libxl_ctx_alloc(, LIBXL_VERSION, 0, log) < 0) +/* replace logger with stderr one */ +libxl_ctx_free(cfg->ctx); + +if (libxl_ctx_alloc(>ctx, LIBXL_VERSION, 0, log) < 0) goto cleanup; if (!(gports = virPortAllocatorNew("vnc", 5900, 6000, @@ -85,22 +91,22 @@ testCompareXMLToDomConfig(const char *xmlfile, NULL, VIR_DOMAIN_XML_INACTIVE))) goto cleanup; -if (libxlBuildDomainConfig(gports, vmdef, NULL, ctx, caps, ) < 0) +if (libxlBuildDomainConfig(gports, vmdef, NULL, cfg, caps, ) < 0) goto cleanup; -if (!(actualjson =
[libvirt] [PATCH v4 2/8] libxl: pass driver config to libxlMakeDomBuildInfo
Preparation for global nestedhvm configuration - libxlMakeDomBuildInfo needs access to libxlDriverConfig. No functional change. Adjusting tests require slightly more mockup functions, because of libxlDriverConfigNew() call. --- Changes since v3: - new patch, preparation --- src/libxl/libxl_conf.c | 8 +--- src/libxl/libxl_conf.h | 2 +- src/libxl/libxl_domain.c | 2 +- tests/libxlxml2domconfigtest.c | 20 +--- tests/virmocklibxl.c | 25 + 5 files changed, 45 insertions(+), 12 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 2d2a707..8cced29 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -271,10 +271,11 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf) static int libxlMakeDomBuildInfo(virDomainDefPtr def, - libxl_ctx *ctx, + libxlDriverConfigPtr cfg, virCapsPtr caps, libxl_domain_config *d_config) { +libxl_ctx *ctx = cfg->ctx; libxl_domain_build_info *b_info = _config->b_info; int hvm = def->os.type == VIR_DOMAIN_OSTYPE_HVM; size_t i; @@ -2288,16 +2289,17 @@ int libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, virDomainDefPtr def, const char *channelDir LIBXL_ATTR_UNUSED, - libxl_ctx *ctx, + libxlDriverConfigPtr cfg, virCapsPtr caps, libxl_domain_config *d_config) { +libxl_ctx *ctx = cfg->ctx; libxl_domain_config_init(d_config); if (libxlMakeDomCreateInfo(ctx, def, _config->c_info) < 0) return -1; -if (libxlMakeDomBuildInfo(def, ctx, caps, d_config) < 0) +if (libxlMakeDomBuildInfo(def, cfg, caps, d_config) < 0) return -1; #ifdef LIBXL_HAVE_VNUMA diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index 264df11..8eefe06 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -216,7 +216,7 @@ int libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, virDomainDefPtr def, const char *channelDir LIBXL_ATTR_UNUSED, - libxl_ctx *ctx, + libxlDriverConfigPtr cfg, virCapsPtr caps, libxl_domain_config *d_config); diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 395c8a9..0a60444 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1253,7 +1253,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, goto cleanup_dom; if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def, - cfg->channelDir, cfg->ctx, cfg->caps, _config) < 0) + cfg->channelDir, cfg, cfg->caps, _config) < 0) goto cleanup_dom; if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, _config) < 0) diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c index bd4c3af..0105550 100644 --- a/tests/libxlxml2domconfigtest.c +++ b/tests/libxlxml2domconfigtest.c @@ -56,8 +56,8 @@ testCompareXMLToDomConfig(const char *xmlfile, int ret = -1; libxl_domain_config actualconfig; libxl_domain_config expectconfig; +libxlDriverConfigPtr cfg; xentoollog_logger *log = NULL; -libxl_ctx *ctx = NULL; virPortAllocatorPtr gports = NULL; virDomainXMLOptionPtr xmlopt = NULL; virDomainDefPtr vmdef = NULL; @@ -68,10 +68,16 @@ testCompareXMLToDomConfig(const char *xmlfile, libxl_domain_config_init(); libxl_domain_config_init(); +if (!(cfg = libxlDriverConfigNew())) +goto cleanup; + if (!(log = (xentoollog_logger *)xtl_createlogger_stdiostream(stderr, XTL_DEBUG, 0))) goto cleanup; -if (libxl_ctx_alloc(, LIBXL_VERSION, 0, log) < 0) +/* replace logger with stderr one */ +libxl_ctx_free(cfg->ctx); + +if (libxl_ctx_alloc(>ctx, LIBXL_VERSION, 0, log) < 0) goto cleanup; if (!(gports = virPortAllocatorNew("vnc", 5900, 6000, @@ -85,22 +91,22 @@ testCompareXMLToDomConfig(const char *xmlfile, NULL, VIR_DOMAIN_XML_INACTIVE))) goto cleanup; -if (libxlBuildDomainConfig(gports, vmdef, NULL, ctx, caps, ) < 0) +if (libxlBuildDomainConfig(gports, vmdef, NULL, cfg, caps, ) < 0) goto cleanup; -if (!(actualjson = libxl_domain_config_to_json(ctx, ))) { +if (!(actualjson = libxl_domain_config_to_json(cfg->ctx, ))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "Failed to retrieve JSON doc for libxl_domain_config"); goto cleanup; } virTestLoadFile(jsonfile, ); -if (libxl_domain_config_from_json(ctx, , tempjson) != 0) { +if (libxl_domain_config_from_json(cfg->ctx, , tempjson) != 0) {