diff --git a/pkg/hostman/isolated_device/gpu.go b/pkg/hostman/isolated_device/gpu.go index fdf8d2d6b4..da33cda5fa 100644 --- a/pkg/hostman/isolated_device/gpu.go +++ b/pkg/hostman/isolated_device/gpu.go @@ -34,6 +34,7 @@ import ( "yunion.io/x/onecloud/pkg/util/fileutils2" "yunion.io/x/onecloud/pkg/util/procutils" "yunion.io/x/onecloud/pkg/util/regutils2" + "yunion.io/x/onecloud/pkg/util/sysutils" ) const ( @@ -174,9 +175,11 @@ func (dev *sGPUBaseDevice) CustomProbe(idx int) error { } grubCmdline = strings.TrimSpace(grubCmdline) params := sets.NewString(strings.Split(grubCmdline, " ")...) - if !params.IsSuperset(sets.NewString("intel_iommu=on", - "vfio_iommu_type1.allow_unsafe_interrupts=1")) { - return fmt.Errorf("Some GRUB_CMDLINE iommu parameters are missing") + if !params.IsSuperset(sets.NewString("vfio_iommu_type1.allow_unsafe_interrupts=1")) { + return fmt.Errorf("GRUB_CMDLINE iommu parameters vfio_iommu_type1.allow_unsafe_interrupts=1 missing") + } + if sysutils.IsProcessorIntel() && !params.IsSuperset(sets.NewString("intel_iommu=on")) { + return fmt.Errorf("GRUB_CMDLINE iommu parameters intel_iommu=on missing") } isNouveauBlacklisted := false if params.IsSuperset(sets.NewString("rdblacklist=nouveau", "nouveau.modeset=0")) || diff --git a/pkg/util/sysutils/kvm.go b/pkg/util/sysutils/kvm.go index aad853ea7b..1fcc9d198c 100644 --- a/pkg/util/sysutils/kvm.go +++ b/pkg/util/sysutils/kvm.go @@ -82,19 +82,31 @@ func isDevKVMExists() bool { func detectKVMModuleSupport() string { var km = KVM_MODULE_UNSUPPORT - if ModprobeKvmModule(KVM_MODULE_INTEL, false, false) { - km = KVM_MODULE_INTEL - } else if ModprobeKvmModule(KVM_MODULE_AMD, false, false) { - km = KVM_MODULE_AMD - } else if ModprobeKvmModule(KVM_MODULE, false, false) { - if isDevKVMExists() { + if isDevKVMExists() { + if IsKernelModuleLoaded(KVM_MODULE_INTEL) { + km = KVM_MODULE_INTEL + } else if IsKernelModuleLoaded(KVM_MODULE_AMD) { + km = KVM_MODULE_AMD + } else if IsKernelModuleLoaded(KVM_MODULE) { km = KVM_MODULE - } - } - if km == KVM_MODULE_UNSUPPORT { - if isDevKVMExists() { + } else { km = KVM_MODULE_BUILDIN } + } else { + if ModprobeKvmModule(KVM_MODULE_INTEL, false, false) { + km = KVM_MODULE_INTEL + } else if ModprobeKvmModule(KVM_MODULE_AMD, false, false) { + km = KVM_MODULE_AMD + } else if ModprobeKvmModule(KVM_MODULE, false, false) { + if isDevKVMExists() { + km = KVM_MODULE + } + } + if km == KVM_MODULE_UNSUPPORT { + if isDevKVMExists() { + km = KVM_MODULE_BUILDIN + } + } } return km }