Re: [PATCH v1 4/6] qemu: Build command line for ivshmem device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Aug 22, 2014 at 12:47:03PM +0200, Maxime Leroy wrote:
This patch implements support for the ivshmem device
in QEMU.

Example from this xml:

   <shmem name='ivshmem0' model='ivshmem'>
     <server path='/tmp/socket-ivshmem0'/>
     <size unit='M'>32</size>
     <msi vectors='32' ioeventfd='on'/>
   </shmem>

The following QEMU line is built:

  -device ivshmem,size=32m,vectors=32,chardev=charshmem0,msi=on,
	ioeventfd=on,role=master
  -chardev socket,path=/tmp/socket-ivshmem0,id=charshmem0

Note: PCI hotpluging is not implemented.

Signed-off-by: Maxime Leroy <maxime.leroy@xxxxxxxxx>
---
src/qemu/qemu_command.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++-
src/qemu/qemu_command.h |   4 ++
src/qemu/qemu_hotplug.c |   1 +
3 files changed, 109 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 0d7b12d..9fcceae 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1019,6 +1019,10 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
        if (virAsprintf(&def->hubs[i]->info.alias, "hub%zu", i) < 0)
            return -1;
    }
+    for (i = 0; i < def->nshmems; i++) {
+        if (virAsprintf(&def->shmems[i]->info.alias, "shmem%zu", i) < 0)
+            return -1;
+    }
    for (i = 0; i < def->nsmartcards; i++) {
        if (virAsprintf(&def->smartcards[i]->info.alias, "smartcard%zu", i) < 0)
            return -1;
@@ -5043,6 +5047,100 @@ qemuBuildRedirdevDevStr(virDomainDefPtr def,
    return NULL;
}

+static char *
+qemuBuildIvshmemDevStr(virDomainDefPtr def,
+                       virDomainShmemDefPtr dev,
+                       virQEMUCapsPtr qemuCaps)
+{
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
+    virDomainIvshmemDefPtr ivshmem = &dev->data.ivshmem;
+
+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_IVSHMEM)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("ivshmem device is not supported by QEMU"));
+        goto error;
+    }
+
+    virBufferAddLit(&buf, "ivshmem");
+    if (ivshmem->size)
+        virBufferAsprintf(&buf, ",size=%llum", ivshmem->size / (1024 * 1024));
+

It will sometimes format the command-line parameter to size=0m, which
will terribly fail.  We should add it to the command-line with the
smallest scale possible, so it can be configured to the tiniest bit
(and it will also get rid of this error).

Other than that, the patch looks fine.

Martin

Attachment: signature.asc
Description: Digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]