[Problem Description]
I read qemu-doc.texi in qemu-mster source code, which have a explain of migrating ivshmem below
“With device property @option{master=on}, the guest will copy the shared.memory on migration to the destination host. With @option{master=off}, the guest will not be able to migrate with the device attached.”
However, libvirt library can not recognize the property “master=on”. When I directly used command "qemu-kvm -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,master=on,bus=pci.0,addr=0xa” to launch a guest, qemu support ivshmem property master=on.
So, I suggest adding code to support property master=on in libvirt.
[Code Review]
The below is the part of source code in qemu-master. There's no definition here about ivshmem master.
domain_conf.h
struct _virDomainShmemDef {
char *name;
unsigned long long size;
int model; /* enum virDomainShmemModel */
struct {
bool enabled;
virDomainChrSourceDef chr;
} server;
struct {
bool enabled;
unsigned vectors;
virTristateSwitch ioeventfd;
} msi;
virDomainDeviceInfo info;
};
[changed code]
src/conf/domain_conf.c
src/conf/domain_conf.h
[Detail of Source Code Modification]
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9f75dc4..b41be37 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -14665,7 +14665,6 @@ virDomainShmemDefParseXML(virDomainXMLOptionPtr xmlopt,
xmlNodePtr save = ctxt->node;
xmlNodePtr server = NULL;
-
if (VIR_ALLOC(def) < 0)
return NULL;
-
if (VIR_ALLOC(def) < 0)
return NULL;
@@ -14685,12 +14684,28 @@ virDomainShmemDefParseXML(virDomainXMLOptionPtr xmlopt,
VIR_FREE(tmp);
}
+
if (!(def->name = virXMLPropString(node, "name"))) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("shmem element must contain 'name' attribute"));
goto cleanup;
}
+
+ if ((tmp = virXMLPropString(node, "master"))) {
+ int val;
+
+ if ((val = virTristateSwitchTypeFromString(tmp)) <= 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("invalid ivshmem master setting for shmem: '%s'"),
+ tmp);
+ goto cleanup;
+ }
+ def->master = val;
+ VIR_FREE(tmp);
+ }
+
+
if (virDomainParseScaledValue("./size[1]", NULL, ctxt,
&def->size, 1, ULLONG_MAX, false) < 0)
goto cleanup;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index f1e6e4e..615d721 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1727,8 +1727,10 @@ typedef enum {
struct _virDomainShmemDef {
char *name;
+
unsigned long long size;
int model; /* enum virDomainShmemModel */
+ virTristateSwitch master;
struct {
bool enabled;
virDomainChrSourceDef chr;
}
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
[Please use git send-email or a normal client, this attachment is difficult to go through, not to mention that the diff is completely broken] On Fri, Feb 01, 2019 at 08:16:20AM +0000, 吴 雨霖 wrote: >[Problem Description] > > I read qemu-doc.texi in qemu-mster source code, which have a explain of migrating ivshmem below > >“With device property @option{master=on}, the guest will copy the shared.memory on migration to the destination host. With @option{master=off}, the guest will not be able to migrate with the device attached.” > > However, libvirt library can not recognize the property “master=on”. When I directly used command "qemu-kvm -device ivshmem-plain,id=shmem0,memdev=shmmem-shmem0,master=on,bus=pci.0,addr=0xa” to launch a guest, qemu support ivshmem property master=on. > > So, I suggest adding code to support property master=on in libvirt. > QEMU supports that, but libvirt doesn't. I remember there was a reason for it, but I can't seem to recall what the particular reason was. What is the reason for you to need master=on? > > >[Code Review] > > > > The below is the part of source code in qemu-master. There's no definition here about ivshmem master. > >domain_conf.h > >struct _virDomainShmemDef { > > char *name; > > unsigned long long size; > > int model; /* enum virDomainShmemModel */ > > struct { > > bool enabled; > > virDomainChrSourceDef chr; > > } server; > > struct { > > bool enabled; > > unsigned vectors; > > virTristateSwitch ioeventfd; > > } msi; > > virDomainDeviceInfo info; > >}; > >[changed code] > >src/conf/domain_conf.c > >src/conf/domain_conf.h > > > >[Detail of Source Code Modification] > > >diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c >index 9f75dc4..b41be37 100644 >--- a/src/conf/domain_conf.c >+++ b/src/conf/domain_conf.c >@@ -14665,7 +14665,6 @@ virDomainShmemDefParseXML(virDomainXMLOptionPtr xmlopt, > xmlNodePtr save = ctxt->node; > xmlNodePtr server = NULL; > >- > if (VIR_ALLOC(def) < 0) > return NULL; > >- > if (VIR_ALLOC(def) < 0) > return NULL; > >@@ -14685,12 +14684,28 @@ virDomainShmemDefParseXML(virDomainXMLOptionPtr xmlopt, > VIR_FREE(tmp); > } > >+ > if (!(def->name = virXMLPropString(node, "name"))) { > virReportError(VIR_ERR_XML_ERROR, "%s", > _("shmem element must contain 'name' attribute")); > goto cleanup; > } > >+ >+ if ((tmp = virXMLPropString(node, "master"))) { >+ int val; >+ >+ if ((val = virTristateSwitchTypeFromString(tmp)) <= 0) { >+ virReportError(VIR_ERR_XML_ERROR, >+ _("invalid ivshmem master setting for shmem: '%s'"), >+ tmp); >+ goto cleanup; >+ } >+ def->master = val; >+ VIR_FREE(tmp); >+ } >+ >+ > if (virDomainParseScaledValue("./size[1]", NULL, ctxt, > &def->size, 1, ULLONG_MAX, false) < 0) > goto cleanup; >diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h >index f1e6e4e..615d721 100644 >--- a/src/conf/domain_conf.h >+++ b/src/conf/domain_conf.h >@@ -1727,8 +1727,10 @@ typedef enum { > >struct _virDomainShmemDef { > char *name; >+ > unsigned long long size; > int model; /* enum virDomainShmemModel */ >+ virTristateSwitch master; > struct { > bool enabled; > virDomainChrSourceDef chr; >} >-- >libvir-list mailing list >libvir-list@redhat.com >https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2024 Red Hat, Inc.