Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
src/libxl/xen_xl.c | 19 ++++++++++++++-----
tests/xlconfigdata/test-fullvirt-ovmf.cfg | 1 +
tests/xlconfigdata/test-fullvirt-ovmf.xml | 2 +-
3 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c
index 6919325623..a7aa0f90d2 100644
--- a/src/libxl/xen_xl.c
+++ b/src/libxl/xen_xl.c
@@ -104,18 +104,23 @@ xenParseXLOS(virConf *conf, virDomainDef *def, virCaps *caps)
if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
g_autofree char *bios = NULL;
+ g_autofree char *bios_path = NULL;
g_autofree char *boot = NULL;
int val = 0;
if (xenConfigGetString(conf, "bios", &bios, NULL) < 0)
return -1;
+ if (xenConfigGetString(conf, "bios_path_override", &bios_path,
NULL) < 0)
+ return -1;
if (bios && STREQ(bios, "ovmf")) {
def->os.loader = g_new0(virDomainLoaderDef, 1);
def->os.loader->type = VIR_DOMAIN_LOADER_TYPE_PFLASH;
def->os.loader->readonly = VIR_TRISTATE_BOOL_YES;
-
- def->os.loader->path = g_strdup(LIBXL_FIRMWARE_DIR
"/ovmf.bin");
+ if (bios_path)
+ def->os.loader->path = g_strdup(bios_path);
+ else
+ def->os.loader->path = g_strdup(LIBXL_FIRMWARE_DIR
"/ovmf.bin");
} else {
for (i = 0; i < caps->nguests; i++) {
if (caps->guests[i]->ostype == VIR_DOMAIN_OSTYPE_HVM &&
@@ -1119,9 +1124,13 @@ xenFormatXLOS(virConf *conf, virDomainDef *def)
if (xenConfigSetString(conf, "builder", "hvm") < 0)
return -1;
- if (virDomainDefHasOldStyleUEFI(def) &&
- xenConfigSetString(conf, "bios", "ovmf") < 0)
- return -1;
+ if (virDomainDefHasOldStyleUEFI(def)) {
+ if (xenConfigSetString(conf, "bios", "ovmf") < 0)
+ return -1;
+ if (def->os.loader->path &&
+ (xenConfigSetString(conf, "bios_path_override",
def->os.loader->path) < 0))
+ return -1;
+ }
if (def->os.slic_table &&
xenConfigSetString(conf, "acpi_firmware", def->os.slic_table)
< 0)
diff --git a/tests/xlconfigdata/test-fullvirt-ovmf.cfg
b/tests/xlconfigdata/test-fullvirt-ovmf.cfg
index 4d31a81108..77b5073005 100644
--- a/tests/xlconfigdata/test-fullvirt-ovmf.cfg
+++ b/tests/xlconfigdata/test-fullvirt-ovmf.cfg
@@ -22,5 +22,6 @@ parallel = "none"
serial = "none"
builder = "hvm"
bios = "ovmf"
+bios_path_override = "/usr/share/qemu/ovmf-x86_64-xen.bin"
boot = "d"
disk = [
"format=raw,vdev=hda,access=rw,backendtype=phy,target=/dev/HostVG/XenGuest2",
"format=qcow2,vdev=hdb,access=rw,backendtype=qdisk,target=/var/lib/libvirt/images/XenGuest2-home",
"format=raw,vdev=hdc,access=ro,backendtype=qdisk,devtype=cdrom,target=/root/boot.iso"
]
diff --git a/tests/xlconfigdata/test-fullvirt-ovmf.xml
b/tests/xlconfigdata/test-fullvirt-ovmf.xml
index 8994b3ea36..da3954dba9 100644
--- a/tests/xlconfigdata/test-fullvirt-ovmf.xml
+++ b/tests/xlconfigdata/test-fullvirt-ovmf.xml
@@ -6,7 +6,7 @@
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='xenfv'>hvm</type>
- <loader readonly='yes'
type='pflash'>/LIBXL_FIRMWARE_DIR/ovmf.bin</loader>
+ <loader readonly='yes'
type='pflash'>/usr/share/qemu/ovmf-x86_64-xen.bin</loader>
<boot dev='cdrom'/>
</os>
<features>
--
2.39.1