mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-25 15:02:45 +00:00
vendor: update github.com/intel/govmm
Update github.com/intel/govmm.
shortlog:
cab4709
qemu: Add pcie-root-port device support.
Fixes: #2432
Signed-off-by: Jimmy Xu <junming.xjm@antfin.com>
This commit is contained in:
parent
a90dde04c4
commit
fa7d00ec25
5
Gopkg.lock
generated
5
Gopkg.lock
generated
@ -412,11 +412,12 @@
|
|||||||
revision = "2f1d1f20f75d5404f53b9edf6b53ed5505508675"
|
revision = "2f1d1f20f75d5404f53b9edf6b53ed5505508675"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
digest = "1:f0e85729c00a427cef8de798b33b9a35b3117ee8760f6f00fc3cf3a5bb98f844"
|
branch = "master"
|
||||||
|
digest = "1:2ee402700d1a01bc9b09a41eea4823431685445f9aaf77fe4ba3fcea92ae952b"
|
||||||
name = "github.com/intel/govmm"
|
name = "github.com/intel/govmm"
|
||||||
packages = ["qemu"]
|
packages = ["qemu"]
|
||||||
pruneopts = "NUT"
|
pruneopts = "NUT"
|
||||||
revision = "ee21903287393441c7bb53a0b0d39b8fa4075221"
|
revision = "cab47093760f36ef5a5da880bb70c4bf128abbbf"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
digest = "1:903bfb87f41dc18a533d327b5b03fd2f562f34deafcbd0db93d4be3fa8d6099c"
|
digest = "1:903bfb87f41dc18a533d327b5b03fd2f562f34deafcbd0db93d4be3fa8d6099c"
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/intel/govmm"
|
name = "github.com/intel/govmm"
|
||||||
revision = "ee21903287393441c7bb53a0b0d39b8fa4075221"
|
revision = "cab47093760f36ef5a5da880bb70c4bf128abbbf"
|
||||||
|
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/kata-containers/agent"
|
name = "github.com/kata-containers/agent"
|
||||||
|
106
vendor/github.com/intel/govmm/qemu/qemu.go
generated
vendored
106
vendor/github.com/intel/govmm/qemu/qemu.go
generated
vendored
@ -106,6 +106,9 @@ const (
|
|||||||
|
|
||||||
// VirtioBlockCCW is the CCW block device driver
|
// VirtioBlockCCW is the CCW block device driver
|
||||||
VirtioBlockCCW DeviceDriver = "virtio-blk-ccw"
|
VirtioBlockCCW DeviceDriver = "virtio-blk-ccw"
|
||||||
|
|
||||||
|
// PCIeRootPort is a PCIe Root Port, the PCIe device should be hotplugged to this port.
|
||||||
|
PCIeRootPort DeviceDriver = "pcie-root-port"
|
||||||
)
|
)
|
||||||
|
|
||||||
// disableModern returns the parameters with the disable-modern option.
|
// disableModern returns the parameters with the disable-modern option.
|
||||||
@ -898,6 +901,102 @@ func (vhostuserDev VhostUserDevice) QemuParams(config *Config) []string {
|
|||||||
return qemuParams
|
return qemuParams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PCIeRootPortDevice represents a memory balloon device.
|
||||||
|
type PCIeRootPortDevice struct {
|
||||||
|
ID string // format: rp{n}, n>=0
|
||||||
|
|
||||||
|
Bus string // default is pcie.0
|
||||||
|
Chassis string // (slot, chassis) pair is mandatory and must be unique for each pcie-root-port, >=0, default is 0x00
|
||||||
|
Slot string // >=0, default is 0x00
|
||||||
|
|
||||||
|
Multifunction bool // true => "on", false => "off", default is off
|
||||||
|
Addr string // >=0, default is 0x00
|
||||||
|
|
||||||
|
// The PCIE-PCI bridge can be hot-plugged only into pcie-root-port that has 'bus-reserve' property value to
|
||||||
|
// provide secondary bus for the hot-plugged bridge.
|
||||||
|
BusReserve string
|
||||||
|
Pref64Reserve string // reserve prefetched MMIO aperture, 64-bit
|
||||||
|
Pref32Reserve string // reserve prefetched MMIO aperture, 32-bit
|
||||||
|
MemReserve string // reserve non-prefetched MMIO aperture, 32-bit *only*
|
||||||
|
IOReserve string // IO reservation
|
||||||
|
|
||||||
|
ROMFile string // ROMFile specifies the ROM file being used for this device.
|
||||||
|
}
|
||||||
|
|
||||||
|
// QemuParams returns the qemu parameters built out of the PCIeRootPortDevice.
|
||||||
|
func (b PCIeRootPortDevice) QemuParams(_ *Config) []string {
|
||||||
|
var qemuParams []string
|
||||||
|
var deviceParams []string
|
||||||
|
driver := PCIeRootPort
|
||||||
|
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("%s,id=%s", driver, b.ID))
|
||||||
|
|
||||||
|
if b.Bus == "" {
|
||||||
|
b.Bus = "pcie.0"
|
||||||
|
}
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("bus=%s", b.Bus))
|
||||||
|
|
||||||
|
if b.Chassis == "" {
|
||||||
|
b.Chassis = "0x00"
|
||||||
|
}
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("chassis=%s", b.Chassis))
|
||||||
|
|
||||||
|
if b.Slot == "" {
|
||||||
|
b.Slot = "0x00"
|
||||||
|
}
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("slot=%s", b.Slot))
|
||||||
|
|
||||||
|
multifunction := "off"
|
||||||
|
if b.Multifunction {
|
||||||
|
multifunction = "on"
|
||||||
|
if b.Addr == "" {
|
||||||
|
b.Addr = "0x00"
|
||||||
|
}
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("addr=%s", b.Addr))
|
||||||
|
}
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("multifunction=%v", multifunction))
|
||||||
|
|
||||||
|
if b.BusReserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("bus-reserve=%s", b.BusReserve))
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.Pref64Reserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("pref64-reserve=%s", b.Pref64Reserve))
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.Pref32Reserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("pref32-reserve=%s", b.Pref32Reserve))
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.MemReserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("mem-reserve=%s", b.MemReserve))
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.IOReserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("io-reserve=%s", b.IOReserve))
|
||||||
|
}
|
||||||
|
|
||||||
|
if isVirtioPCI[driver] && b.ROMFile != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", b.ROMFile))
|
||||||
|
}
|
||||||
|
|
||||||
|
qemuParams = append(qemuParams, "-device")
|
||||||
|
qemuParams = append(qemuParams, strings.Join(deviceParams, ","))
|
||||||
|
return qemuParams
|
||||||
|
}
|
||||||
|
|
||||||
|
// Valid returns true if the PCIeRootPortDevice structure is valid and complete.
|
||||||
|
func (b PCIeRootPortDevice) Valid() bool {
|
||||||
|
// the "pref32-reserve" and "pref64-reserve" hints are mutually exclusive.
|
||||||
|
if b.Pref64Reserve != "" && b.Pref32Reserve != "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if b.ID == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// VFIODevice represents a qemu vfio device meant for direct access by guest OS.
|
// VFIODevice represents a qemu vfio device meant for direct access by guest OS.
|
||||||
type VFIODevice struct {
|
type VFIODevice struct {
|
||||||
// Bus-Device-Function of device
|
// Bus-Device-Function of device
|
||||||
@ -914,6 +1013,9 @@ type VFIODevice struct {
|
|||||||
|
|
||||||
// DeviceID specifies device id
|
// DeviceID specifies device id
|
||||||
DeviceID string
|
DeviceID string
|
||||||
|
|
||||||
|
// Bus specifies device bus
|
||||||
|
Bus string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valid returns true if the VFIODevice structure is valid and complete.
|
// Valid returns true if the VFIODevice structure is valid and complete.
|
||||||
@ -939,6 +1041,10 @@ func (vfioDev VFIODevice) QemuParams(config *Config) []string {
|
|||||||
deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", vfioDev.ROMFile))
|
deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", vfioDev.ROMFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if vfioDev.Bus != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf(",bus=%s", vfioDev.Bus))
|
||||||
|
}
|
||||||
|
|
||||||
if isVirtioCCW[driver] {
|
if isVirtioCCW[driver] {
|
||||||
deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", vfioDev.DevNo))
|
deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", vfioDev.DevNo))
|
||||||
}
|
}
|
||||||
|
1
vendor/github.com/intel/govmm/qemu/qemu_arch_base.go
generated
vendored
1
vendor/github.com/intel/govmm/qemu/qemu_arch_base.go
generated
vendored
@ -59,6 +59,7 @@ var isVirtioPCI = map[DeviceDriver]bool{
|
|||||||
VirtioScsi: true,
|
VirtioScsi: true,
|
||||||
PCIBridgeDriver: true,
|
PCIBridgeDriver: true,
|
||||||
PCIePCIBridgeDriver: true,
|
PCIePCIBridgeDriver: true,
|
||||||
|
PCIeRootPort: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
// isVirtioCCW is a dummy map to return always false on no-s390x arch
|
// isVirtioCCW is a dummy map to return always false on no-s390x arch
|
||||||
|
13
vendor/github.com/intel/govmm/qemu/qmp.go
generated
vendored
13
vendor/github.com/intel/govmm/qemu/qmp.go
generated
vendored
@ -1156,17 +1156,20 @@ func (q *QMP) ExecutePCIVhostUserDevAdd(ctx context.Context, driver, devID, char
|
|||||||
return q.executeCommand(ctx, "device_add", args, nil)
|
return q.executeCommand(ctx, "device_add", args, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExecuteVFIODeviceAdd adds a VFIO device to a QEMU instance
|
// ExecuteVFIODeviceAdd adds a VFIO device to a QEMU instance using the device_add command.
|
||||||
// using the device_add command. devID is the id of the device to add.
|
// devID is the id of the device to add. Must be valid QMP identifier.
|
||||||
// Must be valid QMP identifier. bdf is the PCI bus-device-function
|
// bdf is the PCI bus-device-function of the pci device.
|
||||||
// of the pci device.
|
// bus is optional. When hot plugging a PCIe device, the bus can be the ID of the pcie-root-port.
|
||||||
func (q *QMP) ExecuteVFIODeviceAdd(ctx context.Context, devID, bdf, romfile string) error {
|
func (q *QMP) ExecuteVFIODeviceAdd(ctx context.Context, devID, bdf, bus, romfile string) error {
|
||||||
args := map[string]interface{}{
|
args := map[string]interface{}{
|
||||||
"id": devID,
|
"id": devID,
|
||||||
"driver": Vfio,
|
"driver": Vfio,
|
||||||
"host": bdf,
|
"host": bdf,
|
||||||
"romfile": romfile,
|
"romfile": romfile,
|
||||||
}
|
}
|
||||||
|
if bus != "" {
|
||||||
|
args["bus"] = bus
|
||||||
|
}
|
||||||
return q.executeCommand(ctx, "device_add", args, nil)
|
return q.executeCommand(ctx, "device_add", args, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1157,7 +1157,7 @@ func (q *qemu) hotplugVFIODevice(device *config.VFIODev, op operation) (err erro
|
|||||||
if q.state.HotplugVFIOOnRootBus {
|
if q.state.HotplugVFIOOnRootBus {
|
||||||
switch device.Type {
|
switch device.Type {
|
||||||
case config.VFIODeviceNormalType:
|
case config.VFIODeviceNormalType:
|
||||||
return q.qmpMonitorCh.qmp.ExecuteVFIODeviceAdd(q.qmpMonitorCh.ctx, devID, device.BDF, romFile)
|
return q.qmpMonitorCh.qmp.ExecuteVFIODeviceAdd(q.qmpMonitorCh.ctx, devID, device.BDF, "", romFile)
|
||||||
case config.VFIODeviceMediatedType:
|
case config.VFIODeviceMediatedType:
|
||||||
return q.qmpMonitorCh.qmp.ExecutePCIVFIOMediatedDeviceAdd(q.qmpMonitorCh.ctx, devID, device.SysfsDev, "", "", romFile)
|
return q.qmpMonitorCh.qmp.ExecutePCIVFIOMediatedDeviceAdd(q.qmpMonitorCh.ctx, devID, device.SysfsDev, "", "", romFile)
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user