mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-30 12:44:39 +00:00
govmm/qemu: Let IO/memory reservations be specified for bridge devices
This adds fields to BridgeDevice struct to allow qemu's io-reserve, mem-reserve and pref64-reserve properties to be set for PCI bridges. This is needed for Kata's upcoming change to ACPI hotplug. fixes #200 Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
2f8e417bb2
commit
de039da2a9
19
qemu/qemu.go
19
qemu/qemu.go
@ -1802,6 +1802,15 @@ type BridgeDevice struct {
|
|||||||
|
|
||||||
// ROMFile specifies the ROM file being used for this device.
|
// ROMFile specifies the ROM file being used for this device.
|
||||||
ROMFile string
|
ROMFile string
|
||||||
|
|
||||||
|
// Address range reservations for devices behind the bridge
|
||||||
|
// NB: strings seem an odd choice, but if they were integers,
|
||||||
|
// they'd default to 0 by Go's rules in all the existing users
|
||||||
|
// who don't set them. 0 is a valid value for certain cases,
|
||||||
|
// but not you want by default.
|
||||||
|
IOReserve string
|
||||||
|
MemReserve string
|
||||||
|
Pref64Reserve string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valid returns true if the BridgeDevice structure is valid and complete.
|
// Valid returns true if the BridgeDevice structure is valid and complete.
|
||||||
@ -1852,6 +1861,16 @@ func (bridgeDev BridgeDevice) QemuParams(config *Config) []string {
|
|||||||
deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", bridgeDev.ROMFile))
|
deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", bridgeDev.ROMFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if bridgeDev.IOReserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("io-reserve=%s", bridgeDev.IOReserve))
|
||||||
|
}
|
||||||
|
if bridgeDev.MemReserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("mem-reserve=%s", bridgeDev.MemReserve))
|
||||||
|
}
|
||||||
|
if bridgeDev.Pref64Reserve != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("pref64-reserve=%s", bridgeDev.Pref64Reserve))
|
||||||
|
}
|
||||||
|
|
||||||
qemuParams = append(qemuParams, "-device")
|
qemuParams = append(qemuParams, "-device")
|
||||||
qemuParams = append(qemuParams, strings.Join(deviceParams, ","))
|
qemuParams = append(qemuParams, strings.Join(deviceParams, ","))
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !s390x
|
||||||
// +build !s390x
|
// +build !s390x
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -38,6 +39,7 @@ var (
|
|||||||
deviceVhostUserBlkString = "-chardev socket,id=char2,path=/tmp/nonexistentsocket.socket -device vhost-user-blk-pci,logical_block_size=4096,size=512M,chardev=char2,romfile=efi-virtio.rom"
|
deviceVhostUserBlkString = "-chardev socket,id=char2,path=/tmp/nonexistentsocket.socket -device vhost-user-blk-pci,logical_block_size=4096,size=512M,chardev=char2,romfile=efi-virtio.rom"
|
||||||
deviceBlockString = "-device virtio-blk-pci,disable-modern=true,drive=hd0,scsi=off,config-wce=off,romfile=efi-virtio.rom,share-rw=on,serial=hd0 -drive id=hd0,file=/var/lib/vm.img,aio=threads,format=qcow2,if=none,readonly"
|
deviceBlockString = "-device virtio-blk-pci,disable-modern=true,drive=hd0,scsi=off,config-wce=off,romfile=efi-virtio.rom,share-rw=on,serial=hd0 -drive id=hd0,file=/var/lib/vm.img,aio=threads,format=qcow2,if=none,readonly"
|
||||||
devicePCIBridgeString = "-device pci-bridge,bus=/pci-bus/pcie.0,id=mybridge,chassis_nr=5,shpc=on,addr=ff,romfile=efi-virtio.rom"
|
devicePCIBridgeString = "-device pci-bridge,bus=/pci-bus/pcie.0,id=mybridge,chassis_nr=5,shpc=on,addr=ff,romfile=efi-virtio.rom"
|
||||||
|
devicePCIBridgeStringReserved = "-device pci-bridge,bus=/pci-bus/pcie.0,id=mybridge,chassis_nr=5,shpc=off,addr=ff,romfile=efi-virtio.rom,io-reserve=4k,mem-reserve=1m,pref64-reserve=1m"
|
||||||
devicePCIEBridgeString = "-device pcie-pci-bridge,bus=/pci-bus/pcie.0,id=mybridge,addr=ff,romfile=efi-virtio.rom"
|
devicePCIEBridgeString = "-device pcie-pci-bridge,bus=/pci-bus/pcie.0,id=mybridge,addr=ff,romfile=efi-virtio.rom"
|
||||||
romfile = "efi-virtio.rom"
|
romfile = "efi-virtio.rom"
|
||||||
)
|
)
|
||||||
|
@ -486,6 +486,24 @@ func TestAppendPCIBridgeDevice(t *testing.T) {
|
|||||||
testAppend(bridge, devicePCIBridgeString, t)
|
testAppend(bridge, devicePCIBridgeString, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAppendPCIBridgeDeviceWithReservations(t *testing.T) {
|
||||||
|
|
||||||
|
bridge := BridgeDevice{
|
||||||
|
Type: PCIBridge,
|
||||||
|
ID: "mybridge",
|
||||||
|
Bus: "/pci-bus/pcie.0",
|
||||||
|
Addr: "255",
|
||||||
|
Chassis: 5,
|
||||||
|
SHPC: false,
|
||||||
|
ROMFile: romfile,
|
||||||
|
IOReserve: "4k",
|
||||||
|
MemReserve: "1m",
|
||||||
|
Pref64Reserve: "1m",
|
||||||
|
}
|
||||||
|
|
||||||
|
testAppend(bridge, devicePCIBridgeStringReserved, t)
|
||||||
|
}
|
||||||
|
|
||||||
func TestAppendPCIEBridgeDevice(t *testing.T) {
|
func TestAppendPCIEBridgeDevice(t *testing.T) {
|
||||||
|
|
||||||
bridge := BridgeDevice{
|
bridge := BridgeDevice{
|
||||||
|
Loading…
Reference in New Issue
Block a user