mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-27 15:57:09 +00:00
runtime: Re-vendor GoVMM for VFIO-AP support
This is a re-vendor of intel/govmm, with support for hot-plugging IBM Adjunct Processor (AP) devices over VFIO. This is necessary for enabling AP device pass-through in Kata (see #491).39c372a
Add support for hot-plugging IBM VFIO-AP devicesf5bdd53
travis: disable amd64 jobs1af1c0d
github: enable github actions4831c6e
travis: Run coveralls after successcf0f05d
qemu: add iommu_platform knob for qemuParams175ac49
typo fix Fixes: #565 Signed-off-by: Jakob-Naucke <jakob.naucke@ibm.com>
This commit is contained in:
parent
29aae01779
commit
4c30b2554f
@ -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
|
||||
|
@ -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=
|
||||
|
27
src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go
generated
vendored
27
src/runtime/vendor/github.com/intel/govmm/qemu/qemu.go
generated
vendored
@ -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.
|
||||
|
11
src/runtime/vendor/github.com/intel/govmm/qemu/qmp.go
generated
vendored
11
src/runtime/vendor/github.com/intel/govmm/qemu/qmp.go
generated
vendored
@ -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" {
|
||||
|
2
src/runtime/vendor/modules.txt
vendored
2
src/runtime/vendor/modules.txt
vendored
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user