mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-05-22 12:32:36 +08:00
fix(host): kvm detect and iommu probe (#16245)
- use lsmod check kvm modules on /dev/kvm exist - don't check grub params "intel_iommu=on" on kvm_intel not loaded Signed-off-by: wanyaoqi <d3lx.yq@gmail.com>
This commit is contained in:
@@ -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")) ||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user