]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Save various defaults for shmem
authorMartin Kletzander <mkletzan@redhat.com>
Wed, 3 Aug 2016 15:34:51 +0000 (17:34 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Wed, 2 Nov 2016 15:05:39 +0000 (16:05 +0100)
We're keeping some things at default and that's not something we want to
do intentionally.  Let's save some sensible defaults upfront in order to
avoid having problems later.  The details for the defaults (of the newer
implementation) can be found in qemu's commit 5400c02b90bb:

  http://git.qemu.org/?p=qemu.git;a=commit;h=5400c02b90bb

Since we are merely saving the defaults it will not change the guest ABI
and thanks to the fact that we're doing it in the PostParse callback it
will not break the ABI stability checks.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
src/qemu/qemu_domain.c
tests/qemuxml2argvdata/qemuxml2argv-shmem.args
tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem-plain-doorbell.xml
tests/qemuxml2xmloutdata/qemuxml2xmlout-shmem.xml

index 838e838bad8ccc0885a3317957cc957a043484ed..8cba755c9b35916f04a05f4714fa9c3be666acb4 100644 (file)
@@ -2843,6 +2843,56 @@ qemuDomainChrDefDropDefaultPath(virDomainChrDefPtr chr,
 }
 
 
+static int
+qemuDomainShmemDefPostParse(virDomainShmemDefPtr shm)
+{
+    /* This was the default since the introduction of this device. */
+    if (shm->model != VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL && !shm->size)
+        shm->size = 4 << 20;
+
+    /* Nothing more to check/change for IVSHMEM */
+    if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM)
+        return 0;
+
+    if (!shm->server.enabled) {
+        if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("shmem model '%s' is supported "
+                             "only with server option enabled"),
+                           virDomainShmemModelTypeToString(shm->model));
+            return -1;
+        }
+
+        if (shm->msi.enabled) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("shmem model '%s' doesn't support "
+                             "msi"),
+                           virDomainShmemModelTypeToString(shm->model));
+        }
+    } else {
+        if (shm->model == VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("shmem model '%s' is supported "
+                             "only with server option disabled"),
+                           virDomainShmemModelTypeToString(shm->model));
+            return -1;
+        }
+
+        if (shm->size) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("shmem model '%s' does not support size setting"),
+                           virDomainShmemModelTypeToString(shm->model));
+            return -1;
+        }
+        shm->msi.enabled = true;
+        if (!shm->msi.ioeventfd)
+            shm->msi.ioeventfd = VIR_TRISTATE_SWITCH_ON;
+    }
+
+    return 0;
+}
+
+
 static int
 qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
                              const virDomainDef *def,
@@ -3047,6 +3097,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
         }
     }
 
+    if (dev->type == VIR_DOMAIN_DEVICE_SHMEM &&
+        qemuDomainShmemDefPostParse(dev->data.shmem) < 0)
+        goto cleanup;
+
     ret = 0;
 
  cleanup:
index 99fac119b04caee7523d8603e13ae5198abadf76..bdf660a3c43581543f8b511e02d3f037a96ff493 100644 (file)
@@ -17,7 +17,7 @@ QEMU_AUDIO_DRV=none \
 -no-acpi \
 -boot c \
 -usb \
--device ivshmem,id=shmem0,shm=shmem0,bus=pci.0,addr=0x3 \
+-device ivshmem,id=shmem0,size=4m,shm=shmem0,bus=pci.0,addr=0x3 \
 -device ivshmem,id=shmem1,size=128m,shm=shmem1,bus=pci.0,addr=0x5 \
 -device ivshmem,id=shmem2,size=256m,shm=shmem2,bus=pci.0,addr=0x4 \
 -device ivshmem,id=shmem3,size=512m,chardev=charshmem3,bus=pci.0,addr=0x6 \
index ab9c69bfccd4c685483aef7132fd9c539b6b57b2..7872e1c8a102892c2e68a551d8da75ffc59b62d4 100644 (file)
@@ -23,6 +23,7 @@
     <memballoon model='none'/>
     <shmem name='shmem0'>
       <model type='ivshmem-plain'/>
+      <size unit='M'>4</size>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </shmem>
     <shmem name='shmem1'>
     <shmem name='shmem3'>
       <model type='ivshmem-doorbell'/>
       <server/>
+      <msi ioeventfd='on'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
     </shmem>
     <shmem name='shmem4'>
       <model type='ivshmem-doorbell'/>
       <server path='/tmp/shmem4-sock'/>
+      <msi ioeventfd='on'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
     </shmem>
     <shmem name='shmem5'>
@@ -54,7 +57,7 @@
     <shmem name='shmem6'>
       <model type='ivshmem-doorbell'/>
       <server path='/tmp/shmem6-sock'/>
-      <msi vectors='16'/>
+      <msi vectors='16' ioeventfd='on'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
     </shmem>
     <shmem name='shmem7'>
index 5602913648bcdf09344fa3f5863a9404c00faf64..04b463a278921eb1b122ef13cb2f5fa67642bfd7 100644 (file)
@@ -23,6 +23,7 @@
     <memballoon model='none'/>
     <shmem name='shmem0'>
       <model type='ivshmem'/>
+      <size unit='M'>4</size>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </shmem>
     <shmem name='shmem1'>