From 5abea4946d8c672ea10f894ddc7435b5d5ede21d Mon Sep 17 00:00:00 2001 From: wanyaoqi <18528551+wanyaoqi@users.noreply.github.com> Date: Sat, 24 Feb 2024 07:51:36 +0800 Subject: [PATCH] fix(host): load guest desc hpet and video1 dev (#19530) --- pkg/hostman/guestman/pci.go | 6 +++++- pkg/hostman/guestman/qemu-kvm.go | 11 +++++++++++ pkg/hostman/hostutils/hostutils.go | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/hostman/guestman/pci.go b/pkg/hostman/guestman/pci.go index 057490b06b..f299838725 100644 --- a/pkg/hostman/guestman/pci.go +++ b/pkg/hostman/guestman/pci.go @@ -802,6 +802,10 @@ func (s *SKVMGuestInstance) initGuestDescFromExistingGuest( return errors.Wrap(err, "init guest memory devices") } s.initMachineDesc() + if s.manager.host.IsX8664() && !s.hasHpet(qtree) { + noHpet := true + s.Desc.NoHpet = &noHpet + } // This code is designed to ensure compatibility with older guests. // However, it is not recommended for new guests to generate a desc file from it @@ -856,7 +860,7 @@ func (s *SKVMGuestInstance) initGuestDescFromExistingGuest( return errors.Wrap(err, "ensure pvscsi pci address") } } - case "video0": + case "video0", "video1": if s.Desc.VgaDevice == nil { s.initGuestVga(pciRoot) } diff --git a/pkg/hostman/guestman/qemu-kvm.go b/pkg/hostman/guestman/qemu-kvm.go index 0560a9ed23..36fb483885 100644 --- a/pkg/hostman/guestman/qemu-kvm.go +++ b/pkg/hostman/guestman/qemu-kvm.go @@ -1519,6 +1519,17 @@ func (s *SKVMGuestInstance) getDiskDriverNumQueues(qtree, driver string) int64 { return -1 } +func (s *SKVMGuestInstance) hasHpet(qtree string) bool { + var lines = strings.Split(strings.TrimSuffix(qtree, "\r\n"), "\\r\\n") + for _, line := range lines { + line := strings.TrimSpace(line) + if strings.HasPrefix(line, "dev: hpet") { + return true + } + } + return false +} + func (s *SKVMGuestInstance) getPciDevices() ([]monitor.PCIInfo, error) { var res []monitor.PCIInfo var errChan = make(chan error) diff --git a/pkg/hostman/hostutils/hostutils.go b/pkg/hostman/hostutils/hostutils.go index e184e7a675..79e5764cf6 100644 --- a/pkg/hostman/hostutils/hostutils.go +++ b/pkg/hostman/hostutils/hostutils.go @@ -51,6 +51,7 @@ type IHost interface { GetCpuArchitecture() string GetKernelVersion() string IsAarch64() bool + IsX8664() bool GetHostTopology() *hostapi.HostTopology GetReservedCpusInfo() *cpuset.CPUSet