mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-09-21 16:39:30 +00:00
349658d3d7
A node with arch=riscv64 got an x86_64 libvirt domain from mkvm. The node took a DHCP lease, received the riscv64 GRUB binary that nodeset staged, and could not run it. The firmware fell through to the empty disk and stopped, so both flat provisioning cases of the riscv64 cell failed with a node that never installed. build_xmldesc and build_diskstruct in xCAT-server/lib/xcat/plugins/kvm.pm read the architecture from the hypervisor cpumodel. The arch of the node was never read while the domain XML was built, so on an x86_64 hypervisor every guest was an x86_64 guest, whatever the node said. guest_arch_profile now takes the arch of the node as well, and returns the domain type, the <os> arch and machine, the firmware and the device settings that follow from them. A riscv64 node becomes a qemu domain with the virt machine type and UEFI firmware. It drops the parts the riscv64 virt machine has no controller for, or that libvirt refuses there: the pae, acpi and apic features, the SeaBIOS serial option, the ich6 sound card, the USB tablet, and the ide disk and hd* optical drive. libvirt resolves the emulator and the UEFI firmware files itself. POWER and x86_64 domains do not change. kvm_guest_arch.t drives build_xmldesc and build_diskstruct in a scratch package, stubbing only the routines that reach libvirt or the xCAT database, and asserts the domain and the disks of each architecture. Ten of its twenty assertions fail without this change. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com> (cherry picked from commit 8d149c856302c8016fb0ead31e9859fd5a1e9dff)