diff --git a/src/runtime/go.mod b/src/runtime/go.mod index f2953bf03..882cc6108 100644 --- a/src/runtime/go.mod +++ b/src/runtime/go.mod @@ -32,7 +32,7 @@ require ( github.com/gogo/googleapis v1.4.0 // indirect github.com/gogo/protobuf v1.3.1 github.com/hashicorp/go-multierror v1.0.0 - github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42 + github.com/intel/govmm v0.0.0-20200825065022-6042f6033126 github.com/mdlayher/vsock v0.0.0-20191108225356-d9c65923cb8f github.com/opencontainers/image-spec v1.0.1 // indirect github.com/opencontainers/runc v1.0.0-rc9.0.20200102164712-2b52db75279c diff --git a/src/runtime/go.sum b/src/runtime/go.sum index c9415f25f..80e20e35f 100644 --- a/src/runtime/go.sum +++ b/src/runtime/go.sum @@ -168,6 +168,8 @@ github.com/intel/govmm v0.0.0-20200724170648-af9e34b91ae9 h1:GSRnVLRNweZV3f8Vo3v github.com/intel/govmm v0.0.0-20200724170648-af9e34b91ae9/go.mod h1:QKGWoQtjvkvFtzP6ybiM3lxUHqf83Sv3oLqyELUKH4g= github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42 h1:Yu3/MlZl/kKE0Ipgio/KVorMIrjeHTVOG4+9WAddgOQ= github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42/go.mod h1:QKGWoQtjvkvFtzP6ybiM3lxUHqf83Sv3oLqyELUKH4g= +github.com/intel/govmm v0.0.0-20200825065022-6042f6033126 h1:yltaUdR0Vitnn/FEfy+JWbJ+oGhMAPP/3S7ja9S5yso= +github.com/intel/govmm v0.0.0-20200825065022-6042f6033126/go.mod h1:QKGWoQtjvkvFtzP6ybiM3lxUHqf83Sv3oLqyELUKH4g= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= diff --git a/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go b/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go index d5a01c87a..9288f59f8 100644 --- a/src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go +++ b/src/runtime/vendor/github.com/intel/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" @@ -406,6 +409,9 @@ func (fsdev FSDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", fsdev.ROMFile)) } if fsdev.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + deviceParams = append(deviceParams, ",iommu_platform=on") + } deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", fsdev.DevNo)) } @@ -537,6 +543,9 @@ func (cdev CharDevice) QemuParams(config *Config) []string { } if cdev.Driver == VirtioSerial && cdev.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + deviceParams = append(deviceParams, ",iommu_platform=on") + } deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", cdev.DevNo)) } @@ -804,6 +813,9 @@ func (netdev NetDevice) QemuDeviceParams(config *Config) []string { } if netdev.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + deviceParams = append(deviceParams, ",iommu_platform=on") + } deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", netdev.DevNo)) } @@ -937,6 +949,9 @@ func (dev SerialDevice) QemuParams(config *Config) []string { } if dev.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + deviceParams = append(deviceParams, ",iommu_platform=on") + } deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", dev.DevNo)) } @@ -1528,6 +1543,9 @@ func (scsiCon SCSIController) QemuParams(config *Config) []string { } if scsiCon.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + devParams = append(devParams, ",iommu_platform=on") + } devParams = append(devParams, fmt.Sprintf("devno=%s", scsiCon.DevNo)) } @@ -1710,6 +1728,9 @@ func (vsock VSOCKDevice) QemuParams(config *Config) []string { } if vsock.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + deviceParams = append(deviceParams, ",iommu_platform=on") + } deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", vsock.DevNo)) } @@ -1780,6 +1801,9 @@ func (v RngDevice) QemuParams(config *Config) []string { } if v.Transport.isVirtioCCW(config) { + if config.Knobs.IOMMUPlatform { + deviceParams = append(deviceParams, ",iommu_platform=on") + } deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", v.DevNo)) } @@ -2125,6 +2149,9 @@ type Knobs struct { // Exit instead of rebooting NoReboot bool + + // IOMMUPlatform will enable IOMMU for supported devices + IOMMUPlatform bool } // IOThread allows IO to be performed on a separate thread. diff --git a/src/runtime/vendor/github.com/intel/govmm/qemu/qmp.go b/src/runtime/vendor/github.com/intel/govmm/qemu/qmp.go index 5585a8792..4942727c4 100644 --- a/src/runtime/vendor/github.com/intel/govmm/qemu/qmp.go +++ b/src/runtime/vendor/github.com/intel/govmm/qemu/qmp.go @@ -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" { diff --git a/src/runtime/vendor/modules.txt b/src/runtime/vendor/modules.txt index 5b25ac7e7..11374b356 100644 --- a/src/runtime/vendor/modules.txt +++ b/src/runtime/vendor/modules.txt @@ -222,7 +222,7 @@ github.com/hashicorp/errwrap # github.com/hashicorp/go-multierror v1.0.0 ## explicit github.com/hashicorp/go-multierror -# github.com/intel/govmm v0.0.0-20200728135209-6c3315ba8a42 +# github.com/intel/govmm v0.0.0-20200825065022-6042f6033126 ## explicit github.com/intel/govmm/qemu # github.com/konsorten/go-windows-terminal-sequences v1.0.1