From cb5d3e9b0211e74df7e5eed303869fb09b97a3fb Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Wed, 18 May 2016 08:24:37 -0600 Subject: [PATCH] libxl: add default firmwares to driver config object Prefer firmwares specified via --with-loader-nvram configure option. If none are specified, use the Xen-provided default firmwares found in LIBXL_FIRMWARE_DIR. Signed-off-by: Jim Fehlig --- src/libxl/libxl_conf.c | 28 ++++++++++++++++++++++++++++ src/libxl/libxl_conf.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index a64b4c17d8..c6a23c20f2 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -104,6 +104,7 @@ libxlDriverConfigDispose(void *obj) VIR_FREE(cfg->saveDir); VIR_FREE(cfg->autoDumpDir); VIR_FREE(cfg->lockManagerName); + virFirmwareFreeList(cfg->firmwares, cfg->nfirmwares); } @@ -1777,6 +1778,33 @@ libxlDriverConfigNew(void) goto error; } +#ifdef DEFAULT_LOADER_NVRAM + if (virFirmwareParseList(DEFAULT_LOADER_NVRAM, + &cfg->firmwares, + &cfg->nfirmwares) < 0) + goto error; + +#else + if (VIR_ALLOC_N(cfg->firmwares, 1) < 0) + goto error; + cfg->nfirmwares = 1; + if (VIR_ALLOC(cfg->firmwares[0]) < 0) + goto error; + if (VIR_STRDUP(cfg->firmwares[0]->name, + LIBXL_FIRMWARE_DIR "/ovmf.bin") < 0) + goto error; +#endif + + /* Always add hvmloader to firmwares */ + if (VIR_REALLOC_N(cfg->firmwares, cfg->nfirmwares + 1) < 0) + goto error; + cfg->nfirmwares++; + if (VIR_ALLOC(cfg->firmwares[cfg->nfirmwares - 1]) < 0) + goto error; + if (VIR_STRDUP(cfg->firmwares[cfg->nfirmwares - 1]->name, + LIBXL_FIRMWARE_DIR "/hvmloader") < 0) + goto error; + return cfg; error: diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h index c5b94295dd..e55717ae26 100644 --- a/src/libxl/libxl_conf.h +++ b/src/libxl/libxl_conf.h @@ -39,6 +39,7 @@ # include "virchrdev.h" # include "virhostdev.h" # include "locking/lock_manager.h" +# include "virfirmware.h" # define LIBXL_DRIVER_NAME "xenlight" # define LIBXL_VNC_PORT_MIN 5900 @@ -107,6 +108,9 @@ struct _libxlDriverConfig { char *libDir; char *saveDir; char *autoDumpDir; + + virFirmwarePtr *firmwares; + size_t nfirmwares; }; -- GitLab