From ccf21b5e0774e9bedbd11ee9a9807adc994b9a43 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Tue, 14 Dec 2021 13:01:15 +0100 Subject: [PATCH] F #5671: Support for ARM and KVM hypervisor (cherry picked from commit f7672b57d0f9fca2b714478df20cca2cdaef8af5) --- src/vmm/LibVirtDriverKVM.cc | 37 +++++++++++------------------- src/vmm_mad/exec/vmm_exec_kvm.conf | 2 +- src/vmm_mad/remotes/kvm/kvmrc | 1 + 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc index 00590abdde..ee6cb0dcc5 100644 --- a/src/vmm/LibVirtDriverKVM.cc +++ b/src/vmm/LibVirtDriverKVM.cc @@ -628,10 +628,6 @@ int LibVirtDriver::deployment_description_kvm( std::string sd_bus; std::string disk_bus; - bool pm_defaults = true; - std::string pm_suspend_to_disk = "yes"; - std::string pm_suspend_to_mem = "yes"; - string vm_xml; Nebula& nd = Nebula::instance(); @@ -799,17 +795,18 @@ int LibVirtDriver::deployment_description_kvm( } bool boot_secure = false; - string firmware; - + get_attribute(vm, nullptr, nullptr, "OS", "FIRMWARE", firmware); - - if ( !firmware.empty() && !one_util::icasecmp(firmware, "BIOS") ) + + bool is_uefi = !firmware.empty() && !one_util::icasecmp(firmware, "BIOS"); + + if ( is_uefi ) { string firmware_secure = "no"; - - if ( get_attribute(vm, nullptr, nullptr, "OS", "FIRMWARE_SECURE", boot_secure) && - boot_secure) + + if ( get_attribute(vm, nullptr, nullptr, "OS", "FIRMWARE_SECURE", + boot_secure) && boot_secure) { firmware_secure = "yes"; } @@ -821,12 +818,6 @@ int LibVirtDriver::deployment_description_kvm( file << "\t\t" << vm->get_system_dir() << "/" << vm->get_name() << "_VARS.fd" << "\n"; - - // Suspend to mem and disk disabled to avoid boot problems with UEFI - // firmware - pm_defaults = false; - pm_suspend_to_disk = "no"; - pm_suspend_to_mem = "no"; } file << "\t" << endl; @@ -834,13 +825,13 @@ int LibVirtDriver::deployment_description_kvm( // ------------------------------------------------------------------------ // POWER MANAGEMENT SECTION // ------------------------------------------------------------------------ - if (!pm_defaults) + if ( is_uefi && arch != "aarch64" ) { + // Suspend to mem and disk disabled to avoid boot problems with UEFI + // firmware in x86 arch file << "\t\n" - << "\t\t\n" - << "\t\t\n" + << "\t\t\n" + << "\t\t\n" << "\t\n"; } @@ -1852,7 +1843,7 @@ int LibVirtDriver::deployment_description_kvm( file << "\t\t" << endl; } - if ( acpi ) + if ( acpi && (arch != "aarch64" || is_uefi )) { file << "\t\t" << endl; } diff --git a/src/vmm_mad/exec/vmm_exec_kvm.conf b/src/vmm_mad/exec/vmm_exec_kvm.conf index eda075ac11..91c3ed0b20 100644 --- a/src/vmm_mad/exec/vmm_exec_kvm.conf +++ b/src/vmm_mad/exec/vmm_exec_kvm.conf @@ -90,4 +90,4 @@ SPICE_OPTIONS = " # # Open Virtual Machine Firware (UEFI Firmware) # List of valid firmware available to users (full path in the hosts) -OVMF_UEFIS = "/usr/share/OVMF/OVMF_CODE.fd /usr/share/OVMF/OVMF_CODE.secboot.fd" +OVMF_UEFIS = "/usr/share/OVMF/OVMF_CODE.fd /usr/share/OVMF/OVMF_CODE.secboot.fd /usr/share/AAVMF/AAVMF_CODE.fd" diff --git a/src/vmm_mad/remotes/kvm/kvmrc b/src/vmm_mad/remotes/kvm/kvmrc index d9fc393389..2b5a1523b2 100644 --- a/src/vmm_mad/remotes/kvm/kvmrc +++ b/src/vmm_mad/remotes/kvm/kvmrc @@ -93,4 +93,5 @@ DEFAULT_ATTACH_NIC_MODEL=virtio #DEFAULT_ATTACH_NIC_FILTER=clean-traffic # Virtual Machine Firmware path to the NVRAM file +# OVMF_NVRAM="/usr/share/AAVMF/AAVMF_VARS.fd" for aarch64 guests OVMF_NVRAM="/usr/share/OVMF/OVMF_VARS.fd"