From a8d2089a13859e5c72398bedc3e91afac44b34f2 Mon Sep 17 00:00:00 2001 From: Eric Ernst Date: Mon, 11 Jan 2021 14:55:45 -0800 Subject: [PATCH] vendor: update govmm from intel to kata-containers Let's keep aligned with Kata 2.0, and utilize the kata-container organizations' govmm. Fixes: #3000 Signed-off-by: Eric Ernst --- Gopkg.lock | 16 +-- Gopkg.toml | 4 +- pkg/katautils/config.go | 2 +- vendor/github.com/intel/govmm/CONTRIBUTORS.md | 22 ---- .../{intel => kata-containers}/govmm/COPYING | 0 .../govmm/qemu/image.go | 0 .../govmm/qemu/qemu.go | 103 ++++++++++++++++++ .../govmm/qemu/qmp.go | 39 ++++++- virtcontainers/qemu.go | 2 +- virtcontainers/qemu_amd64.go | 2 +- virtcontainers/qemu_amd64_test.go | 2 +- virtcontainers/qemu_arch_base.go | 2 +- virtcontainers/qemu_arch_base_test.go | 2 +- virtcontainers/qemu_arm64.go | 2 +- virtcontainers/qemu_arm64_test.go | 2 +- virtcontainers/qemu_ppc64le.go | 2 +- virtcontainers/qemu_ppc64le_test.go | 2 +- virtcontainers/qemu_s390x.go | 2 +- virtcontainers/qemu_s390x_test.go | 2 +- virtcontainers/qemu_test.go | 2 +- 20 files changed, 163 insertions(+), 47 deletions(-) delete mode 100644 vendor/github.com/intel/govmm/CONTRIBUTORS.md rename vendor/github.com/{intel => kata-containers}/govmm/COPYING (100%) rename vendor/github.com/{intel => kata-containers}/govmm/qemu/image.go (100%) rename vendor/github.com/{intel => kata-containers}/govmm/qemu/qemu.go (96%) rename vendor/github.com/{intel => kata-containers}/govmm/qemu/qmp.go (97%) diff --git a/Gopkg.lock b/Gopkg.lock index f9a510f9ff..82c40c8c88 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -419,13 +419,6 @@ pruneopts = "NUT" revision = "2f1d1f20f75d5404f53b9edf6b53ed5505508675" -[[projects]] - digest = "1:e4b04b215d8cb0310c06f4a5af631f7df6648ffebf1911d3f4de7f3ea605db87" - name = "github.com/intel/govmm" - packages = ["qemu"] - pruneopts = "NUT" - revision = "547a8518098aaa71c5d5d7a370f211e00161016b" - [[projects]] digest = "1:f03425555be45830e86903bba35dd82a1b76e322beff9873e6b888d2b054c217" name = "github.com/kata-containers/agent" @@ -437,6 +430,13 @@ pruneopts = "NUT" revision = "e921aa3d0fa39cbd7933c15bd6ae7f0a1d7ab757" +[[projects]] + digest = "1:647e03799be4f4878fa6deb1656f1c172c13d1e31b3aaf96384755006c94ded9" + name = "github.com/kata-containers/govmm" + packages = ["qemu"] + pruneopts = "NUT" + revision = "5e9aa08c4fd1201d65c6dd1136c8ab70ff17ee82" + [[projects]] digest = "1:58999a98719fddbac6303cb17e8d85b945f60b72f48e3a2df6b950b97fa926f1" name = "github.com/konsorten/go-windows-terminal-sequences" @@ -821,10 +821,10 @@ "github.com/gogo/protobuf/proto", "github.com/gogo/protobuf/types", "github.com/hashicorp/go-multierror", - "github.com/intel/govmm/qemu", "github.com/kata-containers/agent/pkg/types", "github.com/kata-containers/agent/protocols/client", "github.com/kata-containers/agent/protocols/grpc", + "github.com/kata-containers/govmm/qemu", "github.com/mitchellh/mapstructure", "github.com/opencontainers/runc/libcontainer/cgroups", "github.com/opencontainers/runc/libcontainer/cgroups/fs", diff --git a/Gopkg.toml b/Gopkg.toml index 383c2d92bd..f28426e86b 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -47,8 +47,8 @@ revision = "v1.4.2" [[constraint]] - name = "github.com/intel/govmm" - revision = "547a8518098aaa71c5d5d7a370f211e00161016b" + name = "github.com/kata-containers/govmm" + revision = "5e9aa08c4fd1201d65c6dd1136c8ab70ff17ee82" [[constraint]] name = "github.com/kata-containers/agent" diff --git a/pkg/katautils/config.go b/pkg/katautils/config.go index 744efb3795..06bc798aeb 100644 --- a/pkg/katautils/config.go +++ b/pkg/katautils/config.go @@ -14,7 +14,7 @@ import ( "strings" "github.com/BurntSushi/toml" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" vc "github.com/kata-containers/runtime/virtcontainers" "github.com/kata-containers/runtime/virtcontainers/device/config" exp "github.com/kata-containers/runtime/virtcontainers/experimental" diff --git a/vendor/github.com/intel/govmm/CONTRIBUTORS.md b/vendor/github.com/intel/govmm/CONTRIBUTORS.md deleted file mode 100644 index 7a822adbe0..0000000000 --- a/vendor/github.com/intel/govmm/CONTRIBUTORS.md +++ /dev/null @@ -1,22 +0,0 @@ -This file is a partial list of contributors to the Virtual Machine -Manager for Go project. To see the full list of contributors, see the -revision history in source control. - -Contributors who wish to be recognized in this file should add -themselves (or their employer, as appropriate). - -- afrosi@de.ibm.com -- archana.m.shinde@intel.com -- caoruidong@huawei.com -- clare.chenhui@huawei.com -- eric.ernst@intel.com -- james.o.hunt@intel.com -- jose.carlos.venegas.munoz@intel.com -- julio.montes@intel.com -- manohar.r.castelino@intel.com -- mark.d.ryan@intel.com -- robert.bradford@intel.com -- sameo@linux.intel.com -- sebastien.boeuf@intel.com -- teawater@hyper.sh -- xinda.zhao@intel.com diff --git a/vendor/github.com/intel/govmm/COPYING b/vendor/github.com/kata-containers/govmm/COPYING similarity index 100% rename from vendor/github.com/intel/govmm/COPYING rename to vendor/github.com/kata-containers/govmm/COPYING diff --git a/vendor/github.com/intel/govmm/qemu/image.go b/vendor/github.com/kata-containers/govmm/qemu/image.go similarity index 100% rename from vendor/github.com/intel/govmm/qemu/image.go rename to vendor/github.com/kata-containers/govmm/qemu/image.go diff --git a/vendor/github.com/intel/govmm/qemu/qemu.go b/vendor/github.com/kata-containers/govmm/qemu/qemu.go similarity index 96% rename from vendor/github.com/intel/govmm/qemu/qemu.go rename to vendor/github.com/kata-containers/govmm/qemu/qemu.go index e326713e1e..567a316f40 100644 --- a/vendor/github.com/intel/govmm/qemu/qemu.go +++ b/vendor/github.com/kata-containers/govmm/qemu/qemu.go @@ -123,6 +123,9 @@ const ( // VfioCCW is the vfio driver with CCW transport. VfioCCW DeviceDriver = "vfio-ccw" + // VfioAP is the vfio driver with AP transport. + VfioAP DeviceDriver = "vfio-ap" + // VHostVSockPCI is a generic Vsock vhost device with PCI transport. VHostVSockPCI DeviceDriver = "vhost-vsock-pci" @@ -1081,6 +1084,8 @@ func (blkdev BlockDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, fmt.Sprintf(",share-rw=on")) } + deviceParams = append(deviceParams, fmt.Sprintf(",serial=%s", blkdev.ID)) + blkParams = append(blkParams, fmt.Sprintf("id=%s", blkdev.ID)) blkParams = append(blkParams, fmt.Sprintf(",file=%s", blkdev.File)) blkParams = append(blkParams, fmt.Sprintf(",aio=%s", blkdev.AIO)) @@ -1115,6 +1120,24 @@ func (blkdev BlockDevice) deviceName(config *Config) string { return string(blkdev.Driver) } +// PVPanicDevice represents a qemu pvpanic device. +type PVPanicDevice struct { + NoShutdown bool +} + +// Valid always returns true for pvpanic device +func (dev PVPanicDevice) Valid() bool { + return true +} + +// QemuParams returns the qemu parameters built out of this serial device. +func (dev PVPanicDevice) QemuParams(config *Config) []string { + if dev.NoShutdown { + return []string{"-device", "pvpanic", "-no-shutdown"} + } + return []string{"-device", "pvpanic"} +} + // VhostUserDevice represents a qemu vhost-user device meant to be passed // in to the guest type VhostUserDevice struct { @@ -2100,6 +2123,56 @@ type Kernel struct { Params string } +// FwCfg allows QEMU to pass entries to the guest +// File and Str are mutually exclusive +type FwCfg struct { + Name string + File string + Str string +} + +// Valid returns true if the FwCfg structure is valid and complete. +func (fwcfg FwCfg) Valid() bool { + if fwcfg.Name == "" { + return false + } + + if fwcfg.File != "" && fwcfg.Str != "" { + return false + } + + if fwcfg.File == "" && fwcfg.Str == "" { + return false + } + + return true +} + +// QemuParams returns the qemu parameters built out of the FwCfg object +func (fwcfg FwCfg) QemuParams(config *Config) []string { + var fwcfgParams []string + var qemuParams []string + + for _, f := range config.FwCfg { + if f.Name != "" { + fwcfgParams = append(fwcfgParams, fmt.Sprintf("name=%s", f.Name)) + + if f.File != "" { + fwcfgParams = append(fwcfgParams, fmt.Sprintf(",file=%s", f.File)) + } + + if f.Str != "" { + fwcfgParams = append(fwcfgParams, fmt.Sprintf(",string=%s", f.Str)) + } + } + + qemuParams = append(qemuParams, "-fw_cfg") + qemuParams = append(qemuParams, strings.Join(fwcfgParams, "")) + } + + return qemuParams +} + // Knobs regroups a set of qemu boolean settings type Knobs struct { // NoUserConfig prevents qemu from loading user config files. @@ -2227,12 +2300,18 @@ type Config struct { // Bios is the -bios parameter Bios string + // PFlash specifies the parallel flash images (-pflash parameter) + PFlash []string + // Incoming controls migration source preparation Incoming Incoming // fds is a list of open file descriptors to be passed to the spawned qemu process fds []*os.File + // FwCfg is the -fw_cfg parameter + FwCfg []FwCfg + IOThreads []IOThread // PidFile is the -pidfile parameter @@ -2414,6 +2493,13 @@ func (config *Config) appendGlobalParam() { } } +func (config *Config) appendPFlashParam() { + for _, p := range config.PFlash { + config.qemuParams = append(config.qemuParams, "-pflash") + config.qemuParams = append(config.qemuParams, p) + } +} + func (config *Config) appendVGA() { if config.VGA != "" { config.qemuParams = append(config.qemuParams, "-vga") @@ -2565,6 +2651,21 @@ func (config *Config) appendLogFile() { } } +func (config *Config) appendFwCfg(logger QMPLog) { + if logger == nil { + logger = qmpNullLogger{} + } + + for _, f := range config.FwCfg { + if !f.Valid() { + logger.Errorf("fw_cfg is not valid: %+v", config.FwCfg) + continue + } + + config.qemuParams = append(config.qemuParams, f.QemuParams(config)...) + } +} + // LaunchQemu can be used to launch a new qemu instance. // // The Config parameter contains a set of qemu parameters and settings. @@ -2584,6 +2685,7 @@ func LaunchQemu(config Config, logger QMPLog) (string, error) { config.appendDevices() config.appendRTC() config.appendGlobalParam() + config.appendPFlashParam() config.appendVGA() config.appendKnobs() config.appendKernel() @@ -2592,6 +2694,7 @@ func LaunchQemu(config Config, logger QMPLog) (string, error) { config.appendIncoming() config.appendPidFile() config.appendLogFile() + config.appendFwCfg(logger) if err := config.appendCPUs(); err != nil { return "", err diff --git a/vendor/github.com/intel/govmm/qemu/qmp.go b/vendor/github.com/kata-containers/govmm/qemu/qmp.go similarity index 97% rename from vendor/github.com/intel/govmm/qemu/qmp.go rename to vendor/github.com/kata-containers/govmm/qemu/qmp.go index 5585a8792b..53ba105a8e 100644 --- a/vendor/github.com/intel/govmm/qemu/qmp.go +++ b/vendor/github.com/kata-containers/govmm/qemu/qmp.go @@ -268,7 +268,7 @@ func (q *QMP) readLoop(fromVMCh chan<- []byte) { for scanner.Scan() { line := scanner.Bytes() if q.cfg.Logger.V(1) { - q.cfg.Logger.Infof("%s", string(line)) + q.cfg.Logger.Infof("read from QMP: %s", string(line)) } // Since []byte channel type transfer slice info(include slice underlying array pointer, len, cap) @@ -281,7 +281,7 @@ func (q *QMP) readLoop(fromVMCh chan<- []byte) { fromVMCh <- sendLine } - q.cfg.Logger.Infof("sanner return error: %v", scanner.Err()) + q.cfg.Logger.Infof("scanner return error: %v", scanner.Err()) close(fromVMCh) } @@ -1217,6 +1217,15 @@ func (q *QMP) ExecutePCIVFIOMediatedDeviceAdd(ctx context.Context, devID, sysfsd return q.executeCommand(ctx, "device_add", args, nil) } +// ExecuteAPVFIOMediatedDeviceAdd adds a VFIO mediated AP device to a QEMU instance using the device_add command. +func (q *QMP) ExecuteAPVFIOMediatedDeviceAdd(ctx context.Context, sysfsdev string) error { + args := map[string]interface{}{ + "driver": VfioAP, + "sysfsdev": sysfsdev, + } + return q.executeCommand(ctx, "device_add", args, nil) +} + // isSocketIDSupported returns if the cpu driver supports the socket id option func isSocketIDSupported(driver string) bool { if driver == "host-s390x-cpu" || driver == "host-powerpc64-cpu" { @@ -1630,3 +1639,29 @@ func (q *QMP) ExecQomSet(ctx context.Context, path, property string, value uint6 return q.executeCommand(ctx, "qom-set", args, nil) } + +// ExecQomGet qom-get path property +func (q *QMP) ExecQomGet(ctx context.Context, path, property string) (interface{}, error) { + args := map[string]interface{}{ + "path": path, + "property": property, + } + + response, err := q.executeCommandWithResponse(ctx, "qom-get", args, nil, nil) + if err != nil { + return "", err + } + + return response, nil +} + +// ExecuteDumpGuestMemory dump guest memory to host +func (q *QMP) ExecuteDumpGuestMemory(ctx context.Context, protocol string, paging bool, format string) error { + args := map[string]interface{}{ + "protocol": protocol, + "paging": paging, + "format": format, + } + + return q.executeCommand(ctx, "dump-guest-memory", args, nil) +} diff --git a/virtcontainers/qemu.go b/virtcontainers/qemu.go index 10c2ebe59b..2ac8cec41b 100644 --- a/virtcontainers/qemu.go +++ b/virtcontainers/qemu.go @@ -24,7 +24,7 @@ import ( "time" "unsafe" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/opencontainers/selinux/go-selinux/label" "github.com/opentracing/opentracing-go" "github.com/pkg/errors" diff --git a/virtcontainers/qemu_amd64.go b/virtcontainers/qemu_amd64.go index ac7bc693de..cf00da70b1 100644 --- a/virtcontainers/qemu_amd64.go +++ b/virtcontainers/qemu_amd64.go @@ -10,7 +10,7 @@ import ( "github.com/kata-containers/runtime/virtcontainers/types" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" ) type qemuAmd64 struct { diff --git a/virtcontainers/qemu_amd64_test.go b/virtcontainers/qemu_amd64_test.go index 4524788faf..50e9fdc8ed 100644 --- a/virtcontainers/qemu_amd64_test.go +++ b/virtcontainers/qemu_amd64_test.go @@ -11,7 +11,7 @@ import ( "os" "testing" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/types" "github.com/stretchr/testify/assert" ) diff --git a/virtcontainers/qemu_arch_base.go b/virtcontainers/qemu_arch_base.go index 3157ef56e3..94c7b00c30 100644 --- a/virtcontainers/qemu_arch_base.go +++ b/virtcontainers/qemu_arch_base.go @@ -14,7 +14,7 @@ import ( "strconv" "strings" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/device/config" "github.com/kata-containers/runtime/virtcontainers/types" diff --git a/virtcontainers/qemu_arch_base_test.go b/virtcontainers/qemu_arch_base_test.go index 371154e892..23127cb2ad 100644 --- a/virtcontainers/qemu_arch_base_test.go +++ b/virtcontainers/qemu_arch_base_test.go @@ -13,7 +13,7 @@ import ( "path/filepath" "testing" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/stretchr/testify/assert" "github.com/kata-containers/runtime/virtcontainers/device/config" diff --git a/virtcontainers/qemu_arm64.go b/virtcontainers/qemu_arm64.go index e9d9d3198b..4b3e777f6e 100644 --- a/virtcontainers/qemu_arm64.go +++ b/virtcontainers/qemu_arm64.go @@ -10,7 +10,7 @@ import ( "fmt" "time" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/types" ) diff --git a/virtcontainers/qemu_arm64_test.go b/virtcontainers/qemu_arm64_test.go index c53c2e3b11..7027538952 100644 --- a/virtcontainers/qemu_arm64_test.go +++ b/virtcontainers/qemu_arm64_test.go @@ -11,7 +11,7 @@ import ( "os" "testing" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/stretchr/testify/assert" ) diff --git a/virtcontainers/qemu_ppc64le.go b/virtcontainers/qemu_ppc64le.go index ea9a6f58af..0ebc086e92 100644 --- a/virtcontainers/qemu_ppc64le.go +++ b/virtcontainers/qemu_ppc64le.go @@ -9,7 +9,7 @@ import ( "fmt" "time" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/types" "github.com/sirupsen/logrus" ) diff --git a/virtcontainers/qemu_ppc64le_test.go b/virtcontainers/qemu_ppc64le_test.go index 9a4783e041..b1cb4e2593 100644 --- a/virtcontainers/qemu_ppc64le_test.go +++ b/virtcontainers/qemu_ppc64le_test.go @@ -12,7 +12,7 @@ import ( "strconv" "testing" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/stretchr/testify/assert" ) diff --git a/virtcontainers/qemu_s390x.go b/virtcontainers/qemu_s390x.go index 155a3b6b34..8cbceef0f6 100644 --- a/virtcontainers/qemu_s390x.go +++ b/virtcontainers/qemu_s390x.go @@ -9,7 +9,7 @@ import ( "fmt" "time" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/device/config" "github.com/kata-containers/runtime/virtcontainers/types" ) diff --git a/virtcontainers/qemu_s390x_test.go b/virtcontainers/qemu_s390x_test.go index fb491ce146..0649598025 100644 --- a/virtcontainers/qemu_s390x_test.go +++ b/virtcontainers/qemu_s390x_test.go @@ -9,7 +9,7 @@ import ( "fmt" "testing" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/device/config" "github.com/stretchr/testify/assert" ) diff --git a/virtcontainers/qemu_test.go b/virtcontainers/qemu_test.go index cc03d81dbe..7a39fc5a8b 100644 --- a/virtcontainers/qemu_test.go +++ b/virtcontainers/qemu_test.go @@ -14,7 +14,7 @@ import ( "strings" "testing" - govmmQemu "github.com/intel/govmm/qemu" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/runtime/virtcontainers/device/config" "github.com/kata-containers/runtime/virtcontainers/persist" "github.com/kata-containers/runtime/virtcontainers/types"