diff --git a/pkg/compute/guestdrivers/kvm.go b/pkg/compute/guestdrivers/kvm.go index 67ae21e812..2a2baf5702 100644 --- a/pkg/compute/guestdrivers/kvm.go +++ b/pkg/compute/guestdrivers/kvm.go @@ -850,10 +850,9 @@ func (self *SKVMGuestDriver) validateVGA(ovdi, ovga string, nvdi, nvga *string) func (self *SKVMGuestDriver) validateMachineType(machine string, osArch string) error { var candidate []string - switch osArch { - case apis.OS_ARCH_AARCH64: + if apis.IsARM(osArch) { candidate = []string{api.VM_MACHINE_TYPE_ARM_VIRT} - default: + } else { candidate = []string{api.VM_MACHINE_TYPE_PC, api.VM_MACHINE_TYPE_Q35} } if !utils.IsInStringArray(machine, candidate) { diff --git a/pkg/hostman/guestman/qemu-kvm.go b/pkg/hostman/guestman/qemu-kvm.go index c1e957d198..f1cd118743 100644 --- a/pkg/hostman/guestman/qemu-kvm.go +++ b/pkg/hostman/guestman/qemu-kvm.go @@ -1663,6 +1663,10 @@ func (s *SKVMGuestInstance) generateDiskParams(disks []api.GuestdiskJsonDesc, is firstDriver := make(map[string]bool) for _, disk := range disks { driver := disk.Driver + if isArm && (driver == DISK_DRIVER_IDE || driver == DISK_DRIVER_SATA) { + // unsupported configuration: IDE controllers are unsupported + driver = DISK_DRIVER_SCSI + } if driver == DISK_DRIVER_SCSI || driver == DISK_DRIVER_PVSCSI { if _, ok := firstDriver[driver]; !ok { switch driver { @@ -1670,7 +1674,7 @@ func (s *SKVMGuestInstance) generateDiskParams(disks []api.GuestdiskJsonDesc, is // FIXME: iothread will make qemu-monitor hang // REF: https://www.mail-archive.com/qemu-devel@nongnu.org/msg592729.html // cmd += " -device virtio-scsi-pci,id=scsi,iothread=iothread0,num_queues=4,vectors=5" - cmd += " -device virtio-scsi-pci,id=scsi" + cmd += " -device virtio-scsi-pci,id=scsi,num_queues=4,vectors=5" case DISK_DRIVER_PVSCSI: cmd += " -device pvscsi,id=scsi" }