diff --git a/705525cb-libxl-Support-custom-firmware-path-conversion.patch b/705525cb-libxl-Support-custom-firmware-path-conversion.patch new file mode 100644 index 0000000..a6c81e3 --- /dev/null +++ b/705525cb-libxl-Support-custom-firmware-path-conversion.patch @@ -0,0 +1,87 @@ +From a4bec048bc68b2eeac0f3157a9b946b404f1cea1 Mon Sep 17 00:00:00 2001 +From: Jim Fehlig +Date: Mon, 13 Feb 2023 14:30:31 -0700 +Subject: [PATCH 2/2] libxl: Add support for custom firmware path in config + converter + +Signed-off-by: Jim Fehlig +Reviewed-by: Michal Privoznik +(cherry picked from commit 705525cbec0b2551d54a04d22b5605b04e0343c0) +References: bsc#1209161 +--- + 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(-) + +Index: libvirt-9.1.0/src/libxl/xen_xl.c +=================================================================== +--- libvirt-9.1.0.orig/src/libxl/xen_xl.c ++++ libvirt-9.1.0/src/libxl/xen_xl.c +@@ -104,18 +104,23 @@ xenParseXLOS(virConf *conf, virDomainDef + + 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, virDomainDe + 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) +Index: libvirt-9.1.0/tests/xlconfigdata/test-fullvirt-ovmf.cfg +=================================================================== +--- libvirt-9.1.0.orig/tests/xlconfigdata/test-fullvirt-ovmf.cfg ++++ libvirt-9.1.0/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" ] +Index: libvirt-9.1.0/tests/xlconfigdata/test-fullvirt-ovmf.xml +=================================================================== +--- libvirt-9.1.0.orig/tests/xlconfigdata/test-fullvirt-ovmf.xml ++++ libvirt-9.1.0/tests/xlconfigdata/test-fullvirt-ovmf.xml +@@ -6,7 +6,7 @@ + 1 + + hvm +- /LIBXL_FIRMWARE_DIR/ovmf.bin ++ /usr/share/qemu/ovmf-x86_64-xen.bin + + + diff --git a/bf3be5b7-libxl-Support-custom-firmware-path.patch b/bf3be5b7-libxl-Support-custom-firmware-path.patch new file mode 100644 index 0000000..3997406 --- /dev/null +++ b/bf3be5b7-libxl-Support-custom-firmware-path.patch @@ -0,0 +1,204 @@ +From 4bb53ee6b832c4f8f6631ab7508c6bccd7a4241e Mon Sep 17 00:00:00 2001 +From: Jim Fehlig +Date: Fri, 10 Feb 2023 14:22:19 -0700 +Subject: [PATCH 1/2] libxl: Support specifying a custom firmware path + +libxl added support for specifying custom firmware paths long ago. The +functionality exists in all Xen version supported by libvirt. This patch +adds support for user-specified efi firmware paths in the libxl driver. + +Signed-off-by: Jim Fehlig +Reviewed-by: Michal Privoznik +(cherry picked from commit bf3be5b76e96f22edfe71738f97c02a01f3b8354) +References: bsc#1209161 +--- + src/libxl/libxl_conf.c | 14 ++-- + tests/libxlxml2domconfigdata/efi-hvm.json | 91 +++++++++++++++++++++++ + tests/libxlxml2domconfigdata/efi-hvm.xml | 36 +++++++++ + tests/libxlxml2domconfigtest.c | 1 + + 4 files changed, 134 insertions(+), 8 deletions(-) + +Index: libvirt-9.1.0/src/libxl/libxl_conf.c +=================================================================== +--- libvirt-9.1.0.orig/src/libxl/libxl_conf.c ++++ libvirt-9.1.0/src/libxl/libxl_conf.c +@@ -632,14 +632,10 @@ libxlMakeDomBuildInfo(virDomainDef *def, + b_info->ramdisk = g_strdup(def->os.initrd); + + /* +- * Currently libxl only allows specifying the type of BIOS. +- * If automatic firmware selection is enabled or the loader +- * type is PFLASH, we assume OVMF and set libxl_bios_type +- * to LIBXL_BIOS_TYPE_OVMF. The path to the OVMF firmware is +- * configured when building Xen using '--with-system-ovmf='. If +- * not specified, LIBXL_FIRMWARE_DIR/ovmf.bin is used. In the +- * future, Xen will support a user-specified firmware path. See +- * https://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01628.html ++ * libxl allows specifying the type of firmware and an optional path. ++ * If the path is not explicitly specified, a default path for the given ++ * firmware type is used. For EFI, it's LIBXL_FIRMWARE_DIR/ovmf.bin. ++ * Currently libxl does not support specifying nvram for EFI firmwares. + */ + if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_EFI) { + if (def->os.loader == NULL) +@@ -651,9 +647,11 @@ libxlMakeDomBuildInfo(virDomainDef *def, + if (def->os.loader->readonly == VIR_TRISTATE_BOOL_ABSENT) + def->os.loader->readonly = VIR_TRISTATE_BOOL_YES; + b_info->u.hvm.bios = LIBXL_BIOS_TYPE_OVMF; ++ b_info->u.hvm.system_firmware = g_strdup(def->os.loader->path); + def->os.firmware = VIR_DOMAIN_OS_DEF_FIRMWARE_NONE; + } else if (virDomainDefHasOldStyleUEFI(def)) { + b_info->u.hvm.bios = LIBXL_BIOS_TYPE_OVMF; ++ b_info->u.hvm.system_firmware = g_strdup(def->os.loader->path); + } + + if (def->emulator) { +Index: libvirt-9.1.0/tests/libxlxml2domconfigdata/efi-hvm.json +=================================================================== +--- /dev/null ++++ libvirt-9.1.0/tests/libxlxml2domconfigdata/efi-hvm.json +@@ -0,0 +1,91 @@ ++{ ++ "c_info": { ++ "type": "hvm", ++ "name": "test-hvm", ++ "uuid": "2147d599-9cc6-c0dc-92ab-4064b5446e9b" ++ }, ++ "b_info": { ++ "max_vcpus": 4, ++ "avail_vcpus": [ ++ 0, ++ 1, ++ 2, ++ 3 ++ ], ++ "max_memkb": 1048576, ++ "target_memkb": 1048576, ++ "video_memkb": 8192, ++ "shadow_memkb": 1234, ++ "device_model_version": "qemu_xen", ++ "device_model": "/bin/true", ++ "sched_params": { ++ ++ }, ++ "apic": "True", ++ "acpi": "True", ++ "type.hvm": { ++ "bios": "ovmf", ++ "pae": "True", ++ "system_firmware": "/usr/share/qemu/ovmf-x86_64-xen.bin", ++ "vga": { ++ "kind": "cirrus" ++ }, ++ "vnc": { ++ "enable": "True", ++ "listen": "0.0.0.0", ++ "findunused": "False" ++ }, ++ "sdl": { ++ "enable": "False" ++ }, ++ "spice": { ++ ++ }, ++ "boot": "c", ++ "rdm": { ++ ++ } ++ }, ++ "arch_arm": { ++ ++ } ++ }, ++ "disks": [ ++ { ++ "pdev_path": "/var/lib/xen/images/test-hvm.img", ++ "vdev": "hda", ++ "backend": "qdisk", ++ "format": "raw", ++ "removable": 1, ++ "readwrite": 1 ++ } ++ ], ++ "nics": [ ++ { ++ "devid": 0, ++ "mac": "00:16:3e:66:12:b4", ++ "bridge": "br0", ++ "script": "/etc/xen/scripts/vif-bridge", ++ "nictype": "vif_ioemu" ++ } ++ ], ++ "vfbs": [ ++ { ++ "devid": -1, ++ "vnc": { ++ "enable": "True", ++ "listen": "0.0.0.0", ++ "findunused": "False" ++ }, ++ "sdl": { ++ "enable": "False" ++ } ++ } ++ ], ++ "vkbs": [ ++ { ++ "devid": -1 ++ } ++ ], ++ "on_reboot": "restart" ++} +Index: libvirt-9.1.0/tests/libxlxml2domconfigdata/efi-hvm.xml +=================================================================== +--- /dev/null ++++ libvirt-9.1.0/tests/libxlxml2domconfigdata/efi-hvm.xml +@@ -0,0 +1,36 @@ ++ ++ test-hvm ++ None ++ 2147d599-9cc6-c0dc-92ab-4064b5446e9b ++ 1048576 ++ 1048576 ++ 4 ++ destroy ++ restart ++ destroy ++ ++ ++ hvm ++ /usr/share/qemu/ovmf-x86_64-xen.bin ++ ++ ++ ++ ++ ++ ++ ++ ++ /bin/true ++ ++ ++ ++ ++ ++ ++ ++ ++