Re: [libvirt] [PATCH v2 16/23] qemu: add a flag to the cookie to prevent slirp-helper setup

2019-09-06 Thread John Ferlan


On 8/8/19 10:55 AM, marcandre.lur...@redhat.com wrote:
> From: Marc-André Lureau 
> 
> For VM started and migrated/saved without slirp-helpers, let's prevent
> the automatic setup (as it would fail to migrate otherwise).
> 
> Signed-off-by: Marc-André Lureau 
> ---
>  src/qemu/qemu_domain.c | 30 --
>  src/qemu/qemu_domain.h |  2 ++
>  src/qemu/qemu_driver.c |  8 
>  3 files changed, 38 insertions(+), 2 deletions(-)
> 

[...]

> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index ff83d1c024..4b49203738 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -6971,6 +6971,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
> bool start_paused,
> qemuDomainAsyncJob asyncJob)
>  {
> +qemuDomainObjPrivatePtr priv = vm->privateData;
>  int ret = -1;
>  bool restored = false;
>  virObjectEventPtr event;
> @@ -7011,6 +7012,9 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
>  qemuDomainFixupCPUs(vm, >cpu) < 0)
>  goto cleanup;
>  
> +if (!cookie->slirpHelper)
> +priv->disableSlirp = true;
> +

Coverity lets me know that the above will need to have a "cookie &&" in
the if statement (similar to the lines just above it and of course the
check just below for @cookie being NULL...

John

>  if (qemuProcessStart(conn, driver, vm, cookie ? cookie->cpu : NULL,
>   asyncJob, "stdio", *fd, path, NULL,
>   VIR_NETDEV_VPORT_PROFILE_OP_RESTORE,
> @@ -16654,6 +16658,10 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
> snapshot,
>  virCPUDefFree(priv->origCPU);
>  VIR_STEAL_PTR(priv->origCPU, origCPU);
>  }
> +
> +if (cookie && !cookie->slirpHelper)
> +priv->disableSlirp = true;

hmm... yeah, just like this ;-)

> +
>  } else {
>  /* Transitions 2, 3 */
>  load:
> 

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

Re: [libvirt] [PATCH v2 16/23] qemu: add a flag to the cookie to prevent slirp-helper setup

2019-09-06 Thread Michal Privoznik

On 8/8/19 4:55 PM, marcandre.lur...@redhat.com wrote:

From: Marc-André Lureau 

For VM started and migrated/saved without slirp-helpers, let's prevent
the automatic setup (as it would fail to migrate otherwise).

Signed-off-by: Marc-André Lureau 
---
  src/qemu/qemu_domain.c | 30 --
  src/qemu/qemu_domain.h |  2 ++
  src/qemu/qemu_driver.c |  8 
  3 files changed, 38 insertions(+), 2 deletions(-)


Reviewed-by: Michal Privoznik 

Michal

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

[libvirt] [PATCH v2 16/23] qemu: add a flag to the cookie to prevent slirp-helper setup

2019-08-08 Thread marcandre . lureau
From: Marc-André Lureau 

For VM started and migrated/saved without slirp-helpers, let's prevent
the automatic setup (as it would fail to migrate otherwise).

Signed-off-by: Marc-André Lureau 
---
 src/qemu/qemu_domain.c | 30 --
 src/qemu/qemu_domain.h |  2 ++
 src/qemu/qemu_driver.c |  8 
 3 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index b6f7e8bacc..04301c0a15 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2652,6 +2652,24 @@ qemuDomainHasSlirp(virDomainObjPtr vm)
 }
 
 
+static bool
+qemuDomainGetSlirpHelperOk(virDomainObjPtr vm)
+{
+size_t i;
+
+for (i = 0; i < vm->def->nnets; i++) {
+virDomainNetDefPtr net = vm->def->nets[i];
+
+/* if there is a builtin slirp, prevent slirp-helper */
+if (net->type == VIR_DOMAIN_NET_TYPE_USER &&
+!QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp)
+return false;
+}
+
+return true;
+}
+
+
 static int
 qemuDomainObjPrivateXMLFormatSlirp(virBufferPtr buf,
virDomainObjPtr vm)
@@ -14546,7 +14564,7 @@ qemuDomainSaveCookieDispose(void *obj)
 
 
 qemuDomainSaveCookiePtr
-qemuDomainSaveCookieNew(virDomainObjPtr vm ATTRIBUTE_UNUSED)
+qemuDomainSaveCookieNew(virDomainObjPtr vm)
 {
 qemuDomainObjPrivatePtr priv = vm->privateData;
 qemuDomainSaveCookiePtr cookie = NULL;
@@ -14560,7 +14578,10 @@ qemuDomainSaveCookieNew(virDomainObjPtr vm 
ATTRIBUTE_UNUSED)
 if (priv->origCPU && !(cookie->cpu = virCPUDefCopy(vm->def->cpu)))
 goto error;
 
-VIR_DEBUG("Save cookie %p, cpu=%p", cookie, cookie->cpu);
+cookie->slirpHelper = qemuDomainGetSlirpHelperOk(vm);
+
+VIR_DEBUG("Save cookie %p, cpu=%p, slirpHelper=%d",
+  cookie, cookie->cpu, cookie->slirpHelper);
 
 return cookie;
 
@@ -14586,6 +14607,8 @@ qemuDomainSaveCookieParse(xmlXPathContextPtr ctxt 
ATTRIBUTE_UNUSED,
   >cpu) < 0)
 goto error;
 
+cookie->slirpHelper = virXPathBoolean("boolean(./slirpHelper)", ctxt) > 0;
+
 *obj = (virObjectPtr) cookie;
 return 0;
 
@@ -14605,6 +14628,9 @@ qemuDomainSaveCookieFormat(virBufferPtr buf,
 virCPUDefFormatBufFull(buf, cookie->cpu, NULL) < 0)
 return -1;
 
+if (cookie->slirpHelper)
+virBufferAddLit(buf, "\n");
+
 return 0;
 }
 
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 84c39dfb54..caa2aff965 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -394,6 +394,7 @@ struct _qemuDomainObjPrivate {
 virHashTablePtr blockjobs;
 
 virHashTablePtr dbusVMStates;
+bool disableSlirp;
 };
 
 #define QEMU_DOMAIN_PRIVATE(vm) \
@@ -559,6 +560,7 @@ struct _qemuDomainSaveCookie {
 virObject parent;
 
 virCPUDefPtr cpu;
+bool slirpHelper;
 };
 
 
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index ff83d1c024..4b49203738 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6971,6 +6971,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
bool start_paused,
qemuDomainAsyncJob asyncJob)
 {
+qemuDomainObjPrivatePtr priv = vm->privateData;
 int ret = -1;
 bool restored = false;
 virObjectEventPtr event;
@@ -7011,6 +7012,9 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
 qemuDomainFixupCPUs(vm, >cpu) < 0)
 goto cleanup;
 
+if (!cookie->slirpHelper)
+priv->disableSlirp = true;
+
 if (qemuProcessStart(conn, driver, vm, cookie ? cookie->cpu : NULL,
  asyncJob, "stdio", *fd, path, NULL,
  VIR_NETDEV_VPORT_PROFILE_OP_RESTORE,
@@ -16654,6 +16658,10 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr 
snapshot,
 virCPUDefFree(priv->origCPU);
 VIR_STEAL_PTR(priv->origCPU, origCPU);
 }
+
+if (cookie && !cookie->slirpHelper)
+priv->disableSlirp = true;
+
 } else {
 /* Transitions 2, 3 */
 load:
-- 
2.23.0.rc1

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