mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-23 21:57:40 +03:00
qemu: Generate and use zPCI device in QEMU command line
Add new functions to generate zPCI command string and append it to QEMU command line. And the related tests are added. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
parent
b9be36b691
commit
9d6be3ff79
@ -2195,6 +2195,57 @@ qemuBuildDiskDeviceStr(const virDomainDef *def,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *
|
||||
qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
|
||||
virBufferAsprintf(&buf,
|
||||
"zpci,uid=%u,fid=%u,target=%s,id=zpci%u",
|
||||
dev->addr.pci.zpci.uid,
|
||||
dev->addr.pci.zpci.fid,
|
||||
dev->alias,
|
||||
dev->addr.pci.zpci.uid);
|
||||
|
||||
if (virBufferCheckError(&buf) < 0) {
|
||||
virBufferFreeAndReset(&buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return virBufferContentAndReset(&buf);
|
||||
}
|
||||
|
||||
static int
|
||||
qemuCommandAddZPCIDevice(virCommandPtr cmd,
|
||||
virDomainDeviceInfoPtr dev)
|
||||
{
|
||||
char *devstr = NULL;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
|
||||
if (!(devstr = qemuBuildZPCIDevStr(dev)))
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, devstr);
|
||||
|
||||
VIR_FREE(devstr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
qemuCommandAddExtDevice(virCommandPtr cmd,
|
||||
virDomainDeviceInfoPtr dev)
|
||||
{
|
||||
if (dev->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI ||
|
||||
dev->addr.pci.extFlags == VIR_PCI_ADDRESS_EXTENSION_NONE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dev->addr.pci.extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI)
|
||||
return qemuCommandAddZPCIDevice(cmd, dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd,
|
||||
@ -2431,6 +2482,9 @@ qemuBuildDiskCommandLine(virCommandPtr cmd,
|
||||
if (!qemuDiskBusNeedsDriveArg(disk->bus)) {
|
||||
if (disk->bus != VIR_DOMAIN_DISK_BUS_FDC ||
|
||||
virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
|
||||
if (qemuCommandAddExtDevice(cmd, &disk->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
|
||||
if (!(optstr = qemuBuildDiskDeviceStr(def, disk, bootindex,
|
||||
@ -2629,6 +2683,9 @@ qemuBuildFSDevCommandLine(virCommandPtr cmd,
|
||||
virCommandAddArg(cmd, optstr);
|
||||
VIR_FREE(optstr);
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, &fs->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps)))
|
||||
return -1;
|
||||
@ -3089,6 +3146,11 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd,
|
||||
goto cleanup;
|
||||
|
||||
if (devstr) {
|
||||
if (qemuCommandAddExtDevice(cmd, &cont->info) < 0) {
|
||||
VIR_FREE(devstr);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
virCommandAddArg(cmd, devstr);
|
||||
VIR_FREE(devstr);
|
||||
@ -3887,6 +3949,9 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd,
|
||||
if (!def->watchdog)
|
||||
return 0;
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, &def->watchdog->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
|
||||
optstr = qemuBuildWatchdogDevStr(def, watchdog, qemuCaps);
|
||||
@ -3959,6 +4024,9 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd,
|
||||
if (qemuBuildVirtioOptionsStr(&buf, def->memballoon->virtio, qemuCaps) < 0)
|
||||
goto error;
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, &def->memballoon->info) < 0)
|
||||
goto error;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
virCommandAddArgBuffer(cmd, &buf);
|
||||
return 0;
|
||||
@ -4153,6 +4221,9 @@ qemuBuildInputCommandLine(virCommandPtr cmd,
|
||||
virDomainInputDefPtr input = def->inputs[i];
|
||||
char *devstr = NULL;
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, &input->info) < 0)
|
||||
return -1;
|
||||
|
||||
if (qemuBuildInputDevStr(&devstr, def, input, qemuCaps) < 0)
|
||||
return -1;
|
||||
|
||||
@ -4294,6 +4365,9 @@ qemuBuildSoundCommandLine(virCommandPtr cmd,
|
||||
if (sound->model == VIR_DOMAIN_SOUND_MODEL_PCSPK) {
|
||||
virCommandAddArgList(cmd, "-soundhw", "pcspk", NULL);
|
||||
} else {
|
||||
if (qemuCommandAddExtDevice(cmd, &sound->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
if (!(str = qemuBuildSoundDevStr(def, sound, qemuCaps)))
|
||||
return -1;
|
||||
@ -4531,6 +4605,10 @@ qemuBuildVideoCommandLine(virCommandPtr cmd,
|
||||
if (video->primary) {
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY)) {
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd,
|
||||
&def->videos[i]->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
|
||||
if (!(str = qemuBuildDeviceVideoStr(def, video, qemuCaps)))
|
||||
@ -4543,6 +4621,9 @@ qemuBuildVideoCommandLine(virCommandPtr cmd,
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
if (qemuCommandAddExtDevice(cmd, &def->videos[i]->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
|
||||
if (!(str = qemuBuildDeviceVideoStr(def, video, qemuCaps)))
|
||||
@ -5378,6 +5459,10 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd,
|
||||
VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
}
|
||||
}
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, hostdev->info) < 0)
|
||||
return -1;
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
devstr = qemuBuildPCIHostdevDevStr(def, hostdev, bootIndex,
|
||||
configfd_name, qemuCaps);
|
||||
@ -5832,6 +5917,9 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager,
|
||||
virCommandAddArgBuffer(cmd, &buf);
|
||||
|
||||
/* add the device */
|
||||
if (qemuCommandAddExtDevice(cmd, &rng->info) < 0)
|
||||
return -1;
|
||||
|
||||
if (!(tmp = qemuBuildRNGDevStr(def, rng, qemuCaps)))
|
||||
return -1;
|
||||
virCommandAddArgList(cmd, "-device", tmp, NULL);
|
||||
@ -8553,11 +8641,17 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
|
||||
* New way: -netdev type=tap,id=netdev1 -device e1000,id=netdev1
|
||||
*/
|
||||
if (qemuDomainSupportsNicdev(def, net)) {
|
||||
if (qemuCommandAddExtDevice(cmd, &net->info) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(nic = qemuBuildNicDevStr(def, net, bootindex,
|
||||
net->driver.virtio.queues, qemuCaps)))
|
||||
goto cleanup;
|
||||
virCommandAddArgList(cmd, "-device", nic, NULL);
|
||||
} else if (!requireNicdev) {
|
||||
if (qemuCommandAddExtDevice(cmd, &net->info) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (!(nic = qemuBuildLegacyNicStr(net)))
|
||||
goto cleanup;
|
||||
virCommandAddArgList(cmd, "-net", nic, NULL);
|
||||
@ -9005,6 +9099,12 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
||||
|
||||
if (!devstr)
|
||||
return -1;
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, &shmem->info) < 0) {
|
||||
VIR_FREE(devstr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
virCommandAddArgList(cmd, "-device", devstr, NULL);
|
||||
VIR_FREE(devstr);
|
||||
|
||||
@ -10172,6 +10272,10 @@ qemuBuildVsockCommandLine(virCommandPtr cmd,
|
||||
|
||||
virCommandPassFD(cmd, priv->vhostfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
||||
priv->vhostfd = -1;
|
||||
|
||||
if (qemuCommandAddExtDevice(cmd, &vsock->info) < 0)
|
||||
goto cleanup;
|
||||
|
||||
virCommandAddArgList(cmd, "-device", devstr, NULL);
|
||||
|
||||
ret = 0;
|
||||
|
@ -174,6 +174,8 @@ char *qemuBuildRedirdevDevStr(const virDomainDef *def,
|
||||
virDomainRedirdevDefPtr dev,
|
||||
virQEMUCapsPtr qemuCaps);
|
||||
|
||||
char *qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev);
|
||||
|
||||
int qemuNetworkPrepareDevices(virDomainDefPtr def);
|
||||
|
||||
int qemuGetDriveSourceString(virStorageSourcePtr src,
|
||||
|
@ -20,6 +20,7 @@ server,nowait \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
|
||||
-device zpci,uid=25,fid=31,target=virtio-disk0,id=zpci25 \
|
||||
-device virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk0,\
|
||||
id=virtio-disk0,bootindex=1 \
|
||||
-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0000
|
||||
|
25
tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args
Normal file
25
tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args
Normal file
@ -0,0 +1,25 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-s390x \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-device zpci,uid=1,fid=0,target=hostdev0,id=zpci1 \
|
||||
-device vfio-pci,host=00:00.0,id=hostdev0,bus=pci.0,addr=0x1 \
|
||||
-device zpci,uid=2,fid=1,target=balloon0,id=zpci2 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2
|
18
tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml
Normal file
18
tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory>219100</memory>
|
||||
<os>
|
||||
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci'/>
|
||||
</hostdev>
|
||||
</devices>
|
||||
</domain>
|
29
tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args
Normal file
29
tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args
Normal file
@ -0,0 +1,29 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-s390x \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-device zpci,uid=3,fid=2,target=pci.1,id=zpci3 \
|
||||
-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \
|
||||
-device zpci,uid=65535,fid=4294967295,target=hostdev0,id=zpci65535 \
|
||||
-device vfio-pci,host=ffff:00:00.0,id=hostdev0,bus=pci.1,addr=0x1f \
|
||||
-device zpci,uid=1,fid=0,target=hostdev1,id=zpci1 \
|
||||
-device vfio-pci,host=00:00.0,id=hostdev1,bus=pci.0,addr=0x2 \
|
||||
-device zpci,uid=2,fid=1,target=balloon0,id=zpci2 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
|
30
tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml
Normal file
30
tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory>219100</memory>
|
||||
<os>
|
||||
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0xffff' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x1f' function='0x0'>
|
||||
<zpci uid='0xffff' fid='0xffffffff'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci'>
|
||||
<zpci uid='0x0001' fid='0x00000000'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
</devices>
|
||||
</domain>
|
@ -0,0 +1,39 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-s390x \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-device zpci,uid=35,fid=63,target=hostdev0,id=zpci35 \
|
||||
-device vfio-pci,host=0001:00:00.0,id=hostdev0,bus=pci.0,addr=0x3 \
|
||||
-device zpci,uid=53,fid=104,target=hostdev1,id=zpci53 \
|
||||
-device vfio-pci,host=0002:00:00.0,id=hostdev1,bus=pci.0,addr=0x1 \
|
||||
-device zpci,uid=1,fid=1,target=hostdev2,id=zpci1 \
|
||||
-device vfio-pci,host=0003:00:00.0,id=hostdev2,bus=pci.0,addr=0x2 \
|
||||
-device zpci,uid=2,fid=2,target=hostdev3,id=zpci2 \
|
||||
-device vfio-pci,host=0004:00:00.0,id=hostdev3,bus=pci.0,addr=0x5 \
|
||||
-device zpci,uid=83,fid=0,target=hostdev4,id=zpci83 \
|
||||
-device vfio-pci,host=0005:00:00.0,id=hostdev4,bus=pci.0,addr=0x7 \
|
||||
-device zpci,uid=3,fid=114,target=hostdev5,id=zpci3 \
|
||||
-device vfio-pci,host=0006:00:00.0,id=hostdev5,bus=pci.0,addr=0x9 \
|
||||
-device zpci,uid=23,fid=3,target=hostdev6,id=zpci23 \
|
||||
-device vfio-pci,host=0007:00:00.0,id=hostdev6,bus=pci.0,addr=0x4 \
|
||||
-device zpci,uid=4,fid=40,target=hostdev7,id=zpci4 \
|
||||
-device vfio-pci,host=0008:00:00.0,id=hostdev7,bus=pci.0,addr=0x6 \
|
||||
-device zpci,uid=5,fid=4,target=balloon0,id=zpci5 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8
|
@ -0,0 +1,79 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory>219100</memory>
|
||||
<os>
|
||||
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'>
|
||||
<zpci uid='0x0023' fid='0x0000003f'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0002' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci'>
|
||||
<zpci uid='0x0035' fid='0x00000068'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0003' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0004' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0005' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'>
|
||||
<zpci uid='0x0053'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0006' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'>
|
||||
<zpci uid='0x0003' fid='0x00000072'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0007' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci'>
|
||||
<zpci uid='0x0017' fid='0x00000003'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0008' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci'>
|
||||
<zpci uid='0x0004' fid='0x00000028'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
</devices>
|
||||
</domain>
|
@ -19,5 +19,7 @@ server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-device zpci,uid=25,fid=31,target=hostdev0,id=zpci25 \
|
||||
-device vfio-pci,host=00:00.0,id=hostdev0,bus=pci.0,addr=0x8 \
|
||||
-device zpci,uid=1,fid=0,target=balloon0,id=zpci1 \
|
||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x1
|
||||
|
@ -1688,6 +1688,19 @@ mymain(void)
|
||||
DO_TEST("hostdev-vfio-zpci",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST("hostdev-vfio-zpci-multidomain-many",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST("hostdev-vfio-zpci-autogenerate",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST("hostdev-vfio-zpci-boundaries",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST_PARSE_ERROR("hostdev-vfio-zpci",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
DO_TEST("pci-rom", NONE);
|
||||
DO_TEST("pci-rom-disabled", NONE);
|
||||
DO_TEST("pci-rom-disabled-invalid", NONE);
|
||||
|
34
tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml
Normal file
34
tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219100</memory>
|
||||
<currentMemory unit='KiB'>219100</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'>
|
||||
<zpci uid='0x0001' fid='0x00000000'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<memballoon model='virtio'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'>
|
||||
<zpci uid='0x0002' fid='0x00000001'/>
|
||||
</address>
|
||||
</memballoon>
|
||||
<panic model='s390'/>
|
||||
</devices>
|
||||
</domain>
|
48
tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml
Normal file
48
tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml
Normal file
@ -0,0 +1,48 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219100</memory>
|
||||
<currentMemory unit='KiB'>219100</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='pci' index='1' model='pci-bridge'>
|
||||
<model name='pci-bridge'/>
|
||||
<target chassisNr='1'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
|
||||
</controller>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0xffff' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x1f' function='0x0'>
|
||||
<zpci uid='0xffff' fid='0xffffffff'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'>
|
||||
<zpci uid='0x0001' fid='0x00000000'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<memballoon model='virtio'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'>
|
||||
<zpci uid='0x0002' fid='0x00000001'/>
|
||||
</address>
|
||||
</memballoon>
|
||||
<panic model='s390'/>
|
||||
</devices>
|
||||
</domain>
|
@ -0,0 +1,97 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219100</memory>
|
||||
<currentMemory unit='KiB'>219100</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='s390x' machine='s390-ccw-virtio'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu-system-s390x</emulator>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'>
|
||||
<zpci uid='0x0023' fid='0x0000003f'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0002' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'>
|
||||
<zpci uid='0x0035' fid='0x00000068'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0003' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'>
|
||||
<zpci uid='0x0001' fid='0x00000001'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0004' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'>
|
||||
<zpci uid='0x0002' fid='0x00000002'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0005' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'>
|
||||
<zpci uid='0x0053' fid='0x00000000'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0006' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'>
|
||||
<zpci uid='0x0003' fid='0x00000072'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0007' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'>
|
||||
<zpci uid='0x0017' fid='0x00000003'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='pci' managed='no'>
|
||||
<driver name='vfio'/>
|
||||
<source>
|
||||
<address domain='0x0008' bus='0x00' slot='0x00' function='0x0'/>
|
||||
</source>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'>
|
||||
<zpci uid='0x0004' fid='0x00000028'/>
|
||||
</address>
|
||||
</hostdev>
|
||||
<memballoon model='virtio'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'>
|
||||
<zpci uid='0x0005' fid='0x00000004'/>
|
||||
</address>
|
||||
</memballoon>
|
||||
<panic model='s390'/>
|
||||
</devices>
|
||||
</domain>
|
@ -464,6 +464,17 @@ mymain(void)
|
||||
DO_TEST("hostdev-vfio-zpci",
|
||||
QEMU_CAPS_DEVICE_ZPCI,
|
||||
QEMU_CAPS_CCW);
|
||||
DO_TEST("hostdev-vfio-zpci-multidomain-many",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST("hostdev-vfio-zpci-autogenerate",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST("hostdev-vfio-zpci-boundaries",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_ZPCI);
|
||||
DO_TEST("hostdev-mdev-precreated", NONE);
|
||||
DO_TEST("hostdev-mdev-display", QEMU_CAPS_VFIO_PCI_DISPLAY);
|
||||
DO_TEST("pci-rom", NONE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user