[libvirt] [PATCH] qemu: don't use chardev FD passing with standalone args

Daniel P. Berrangé posted 1 patch 5 years, 10 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20180628115016.10327-1-berrange@redhat.com
Test syntax-check passed
src/qemu/qemu_process.c | 5 +++++
src/qemu/qemu_process.h | 2 ++
2 files changed, 7 insertions(+)
[libvirt] [PATCH] qemu: don't use chardev FD passing with standalone args
Posted by Daniel P. Berrangé 5 years, 10 months ago
When using domxml-to-native, we must generate CLI args that can be used
in a standalone scenario. This means no FD passing can be used. To
achieve this we must clear the QEMU_CAPS_CHARDEV_FD_PASS capability bit.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/qemu/qemu_process.c | 5 +++++
 src/qemu/qemu_process.h | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ac32dafcbe..40d35cbe6b 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5124,6 +5124,9 @@ qemuProcessInit(virQEMUDriverPtr driver,
                                                       vm->def->os.machine)))
         goto cleanup;
 
+    if (flags & VIR_QEMU_PROCESS_START_STANDALONE)
+        virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS);
+
     if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0)
         goto cleanup;
 
@@ -6632,6 +6635,8 @@ qemuProcessCreatePretendCmd(virQEMUDriverPtr driver,
 
     flags |= VIR_QEMU_PROCESS_START_PRETEND;
     flags |= VIR_QEMU_PROCESS_START_NEW;
+    if (standalone)
+        flags |= VIR_QEMU_PROCESS_START_STANDALONE;
 
     if (qemuProcessInit(driver, vm, NULL, QEMU_ASYNC_JOB_NONE,
                         !!migrateURI, flags) < 0)
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index 531c2a0cc7..07ce3a9915 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -81,6 +81,8 @@ typedef enum {
     VIR_QEMU_PROCESS_START_PRETEND      = 1 << 3,
     VIR_QEMU_PROCESS_START_NEW          = 1 << 4, /* internal, new VM is starting */
     VIR_QEMU_PROCESS_START_GEN_VMID     = 1 << 5, /* Generate a new VMID */
+    VIR_QEMU_PROCESS_START_STANDALONE   = 1 << 6, /* Require CLI args to be usable standalone,
+                                                     ie no FD passing and the like */
 } qemuProcessStartFlags;
 
 int qemuProcessStart(virConnectPtr conn,
-- 
2.17.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] qemu: don't use chardev FD passing with standalone args
Posted by Eric Blake 5 years, 10 months ago
On 06/28/2018 06:50 AM, Daniel P. Berrangé wrote:
> When using domxml-to-native, we must generate CLI args that can be used
> in a standalone scenario. This means no FD passing can be used. To
> achieve this we must clear the QEMU_CAPS_CHARDEV_FD_PASS capability bit.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>   src/qemu/qemu_process.c | 5 +++++
>   src/qemu/qemu_process.h | 2 ++
>   2 files changed, 7 insertions(+)
> 
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index ac32dafcbe..40d35cbe6b 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -5124,6 +5124,9 @@ qemuProcessInit(virQEMUDriverPtr driver,
>                                                         vm->def->os.machine)))
>           goto cleanup;
>   
> +    if (flags & VIR_QEMU_PROCESS_START_STANDALONE)
> +        virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS);
> +

Is priv->qemuCaps a transient copy, or do you need counterpart code to 
reinstate the capability as needed after the current API call is completed?

>       if (qemuDomainUpdateCPU(vm, updatedCPU, &origCPU) < 0)
>           goto cleanup;
>   
> @@ -6632,6 +6635,8 @@ qemuProcessCreatePretendCmd(virQEMUDriverPtr driver,
>   
>       flags |= VIR_QEMU_PROCESS_START_PRETEND;
>       flags |= VIR_QEMU_PROCESS_START_NEW;
> +    if (standalone)
> +        flags |= VIR_QEMU_PROCESS_START_STANDALONE;
>   
>       if (qemuProcessInit(driver, vm, NULL, QEMU_ASYNC_JOB_NONE,
>                           !!migrateURI, flags) < 0)
> diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
> index 531c2a0cc7..07ce3a9915 100644
> --- a/src/qemu/qemu_process.h
> +++ b/src/qemu/qemu_process.h
> @@ -81,6 +81,8 @@ typedef enum {
>       VIR_QEMU_PROCESS_START_PRETEND      = 1 << 3,
>       VIR_QEMU_PROCESS_START_NEW          = 1 << 4, /* internal, new VM is starting */
>       VIR_QEMU_PROCESS_START_GEN_VMID     = 1 << 5, /* Generate a new VMID */
> +    VIR_QEMU_PROCESS_START_STANDALONE   = 1 << 6, /* Require CLI args to be usable standalone,
> +                                                     ie no FD passing and the like */
>   } qemuProcessStartFlags;
>   
>   int qemuProcessStart(virConnectPtr conn,
> 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] qemu: don't use chardev FD passing with standalone args
Posted by Daniel P. Berrangé 5 years, 10 months ago
On Thu, Jun 28, 2018 at 07:42:33AM -0500, Eric Blake wrote:
> On 06/28/2018 06:50 AM, Daniel P. Berrangé wrote:
> > When using domxml-to-native, we must generate CLI args that can be used
> > in a standalone scenario. This means no FD passing can be used. To
> > achieve this we must clear the QEMU_CAPS_CHARDEV_FD_PASS capability bit.
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >   src/qemu/qemu_process.c | 5 +++++
> >   src/qemu/qemu_process.h | 2 ++
> >   2 files changed, 7 insertions(+)
> > 
> > diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> > index ac32dafcbe..40d35cbe6b 100644
> > --- a/src/qemu/qemu_process.c
> > +++ b/src/qemu/qemu_process.c
> > @@ -5124,6 +5124,9 @@ qemuProcessInit(virQEMUDriverPtr driver,
> >                                                         vm->def->os.machine)))
> >           goto cleanup;
> > +    if (flags & VIR_QEMU_PROCESS_START_STANDALONE)
> > +        virQEMUCapsClear(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS);
> > +
> 
> Is priv->qemuCaps a transient copy, or do you need counterpart code to
> reinstate the capability as needed after the current API call is completed?

Yes, you can't see it in the diffstat, but one line higher up we call

   virQEMUCapsCacheLookupCopy()

which deep clones the caps. This ensures the caps refects the QEMU
capabilities at the time it was launched, even if the binary on disk
then changes.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] qemu: don't use chardev FD passing with standalone args
Posted by John Ferlan 5 years, 9 months ago

On 06/28/2018 07:50 AM, Daniel P. Berrangé wrote:
> When using domxml-to-native, we must generate CLI args that can be used
> in a standalone scenario. This means no FD passing can be used. To
> achieve this we must clear the QEMU_CAPS_CHARDEV_FD_PASS capability bit.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  src/qemu/qemu_process.c | 5 +++++
>  src/qemu/qemu_process.h | 2 ++
>  2 files changed, 7 insertions(+)
> 

Reviewed-by: John Ferlan <jferlan@redhat.com>

John

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