From 5d2d64f842c4e31c07e6436d979c4853652410b1 Mon Sep 17 00:00:00 2001 From: wanyaoqi <18528551+wanyaoqi@users.noreply.github.com> Date: Mon, 2 Feb 2026 20:15:12 +0800 Subject: [PATCH] fix(host):no hpet and kvm=off (#24129) * no hpet and kvm=off * fix(host): get gpu qemu params Signed-off-by: wanyaoqi --------- Signed-off-by: wanyaoqi --- pkg/hostman/guestman/qemu-kvmhelper.go | 20 ++++++++++++++++++- .../isolated_device/isolated_device.go | 5 ++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pkg/hostman/guestman/qemu-kvmhelper.go b/pkg/hostman/guestman/qemu-kvmhelper.go index 2fd3d262b3..52fc69ae07 100644 --- a/pkg/hostman/guestman/qemu-kvmhelper.go +++ b/pkg/hostman/guestman/qemu-kvmhelper.go @@ -422,6 +422,23 @@ func (s *SKVMGuestInstance) extraOptions() string { return cmd } +func (s *SKVMGuestInstance) hasGpu() bool { + manager := s.manager.GetHost().GetIsolatedDeviceManager() + isolatedDevices, _ := s.Desc.GetArray("isolated_devices") + for i := range isolatedDevices { + vendorDevId, _ := isolatedDevices[i].GetString("vendor_device_id") + addr, _ := isolatedDevices[i].GetString("addr") + dev := manager.GetDeviceByIdent(vendorDevId, addr) + if dev == nil { + continue + } + if dev.GetDeviceType() == api.GPU_VGA_TYPE || dev.GetDeviceType() == api.GPU_HPC_TYPE { + return true + } + } + return false +} + func (s *SKVMGuestInstance) _generateStartScript(data *jsonutils.JSONDict) (string, error) { var ( uuid, _ = s.Desc.GetString("uuid") @@ -560,7 +577,7 @@ function nic_mtu() { } } - if !guestManager.GetHost().IsNestedVirtualization() { + if s.hasGpu() { cpuType += ",kvm=off" } @@ -588,6 +605,7 @@ function nic_mtu() { cmd += " -daemonize" cmd += " -nodefaults -nodefconfig" cmd += " -no-kvm-pit-reinjection" + cmd += " -no-hpet" cmd += " -global kvm-pit.lost_tick_policy=discard" cmd += fmt.Sprintf(" -machine %s,accel=%s", s.getMachine(), accel) cmd += " -k en-us" diff --git a/pkg/hostman/isolated_device/isolated_device.go b/pkg/hostman/isolated_device/isolated_device.go index b7b798f964..24ca499da8 100644 --- a/pkg/hostman/isolated_device/isolated_device.go +++ b/pkg/hostman/isolated_device/isolated_device.go @@ -410,11 +410,10 @@ func getQemuParams(man *isolatedDeviceManager, devAddrs []string) *QemuParams { continue } devType := dev.GetDeviceType() - devs, ok := devices[devType] - if !ok { + if _, ok := devices[devType]; !ok { devices[devType] = []IDevice{dev} } else { - devs = append(devs, dev) + devices[devType] = append(devices[devType], dev) } }