]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
qemu: Auto assign pci addresses for shared memory devices
authorLuyao Huang <lhuang@redhat.com>
Wed, 17 Jun 2015 03:56:12 +0000 (11:56 +0800)
committerMartin Kletzander <mkletzan@redhat.com>
Wed, 8 Jul 2015 14:30:42 +0000 (16:30 +0200)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1165029

Signed-off-by: Luyao Huang <lhuang@redhat.com>
src/qemu/qemu_command.c
tests/qemuxml2argvdata/qemuxml2argv-shmem.args
tests/qemuxml2argvdata/qemuxml2argv-shmem.xml

index b91cf8aa1e30ad3929d32bdf023b29be64041e72..34fd398fb1c9c1fa80561ea659cfbf6685f29f95 100644 (file)
@@ -2562,6 +2562,7 @@ qemuAssignDevicePCISlots(virDomainDefPtr def,
                                                flags) < 0)
             goto error;
     }
+
     /* Further non-primary video cards which have to be qxl type */
     for (i = 1; i < def->nvideos; i++) {
         if (def->videos[i]->type != VIR_DOMAIN_VIDEO_TYPE_QXL) {
@@ -2575,6 +2576,16 @@ qemuAssignDevicePCISlots(virDomainDefPtr def,
                                                flags) < 0)
             goto error;
     }
+
+    /* Shared Memory */
+    for (i = 0; i < def->nshmems; i++) {
+        if (def->shmems[i]->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
+            continue;
+
+        if (virDomainPCIAddressReserveNextSlot(addrs,
+                                               &def->shmems[i]->info, flags) < 0)
+            goto error;
+    }
     for (i = 0; i < def->ninputs; i++) {
         /* Nada - none are PCI based (yet) */
     }
index a3d3cc82d8227ea86f8bf8bb72ae6ff8a034d81c..7e10fc42a9d1d244bfdf99cbf1a6d96724950a09 100644 (file)
@@ -1,16 +1,19 @@
 LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
 /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults \
 -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \
--device ivshmem,shm=shmem0 \
--device ivshmem,size=128m,shm=shmem1 \
--device ivshmem,size=256m,shm=shmem2 \
--device ivshmem,size=512m,chardev=charshmem3 \
+-device ivshmem,shm=shmem0,bus=pci.0,addr=0x3 \
+-device ivshmem,size=128m,shm=shmem1,bus=pci.0,addr=0x5 \
+-device ivshmem,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \
+-device ivshmem,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \
 -chardev socket,id=charshmem3,path=/var/lib/libvirt/shmem-shmem3-sock \
--device ivshmem,size=1024m,chardev=charshmem4 \
+-device ivshmem,size=1024m,chardev=charshmem4,bus=pci.0,addr=0x7 \
 -chardev socket,id=charshmem4,path=/tmp/shmem4-sock \
--device ivshmem,size=2048m,chardev=charshmem5,msi=on,ioeventfd=off \
+-device ivshmem,size=2048m,chardev=charshmem5,\
+msi=on,ioeventfd=off,bus=pci.0,addr=0x8 \
 -chardev socket,id=charshmem5,path=/tmp/shmem5-sock \
--device ivshmem,size=4096m,chardev=charshmem6,msi=on,vectors=16 \
+-device ivshmem,size=4096m,chardev=charshmem6,\
+msi=on,vectors=16,bus=pci.0,addr=0x9 \
 -chardev socket,id=charshmem6,path=/tmp/shmem6-sock \
--device ivshmem,size=8192m,chardev=charshmem7,msi=on,vectors=32,ioeventfd=on \
+-device ivshmem,size=8192m,chardev=charshmem7,\
+msi=on,vectors=32,ioeventfd=on,bus=pci.0,addr=0xa \
 -chardev socket,id=charshmem7,path=/tmp/shmem7-sock
index fd79c89c1a4389ed35a32a2edfd1f4c9888e0907..d4b38f91b05084d8b2003cd678f0a655ca603ffd 100644 (file)
@@ -23,6 +23,7 @@
     </shmem>
     <shmem name='shmem2'>
       <size unit='M'>256</size>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </shmem>
     <shmem name='shmem3'>
       <size unit='M'>512</size>