[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 - 2026 Red Hat, Inc.