Re: [libvirt] [PATCH 16/41] qemu: Fill in CPU domain capabilities

2016-09-14 Thread Jiri Denemark
On Mon, Aug 29, 2016 at 17:59:02 -0400, John Ferlan wrote:
> 
> 
> On 08/12/2016 09:33 AM, Jiri Denemark wrote:
> > Signed-off-by: Jiri Denemark 
> > ---
> >  src/qemu/qemu_capabilities.c   |  24 +-
> >  src/qemu/qemu_capabilities.h   |   3 +-
> >  src/qemu/qemu_driver.c |   7 +-
> >  tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml   |  31 +-
> >  .../qemu_2.6.0-gicv2-virt.aarch64.xml  |  37 +-
> >  .../qemu_2.6.0-gicv3-virt.aarch64.xml  |  37 +-
> >  tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml  |  37 +-
> >  tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml  | 437 
> > -
> >  tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml   |  35 +-
> >  tests/domaincapstest.c |  56 ++-
> >  10 files changed, 682 insertions(+), 22 deletions(-)
> > 
> > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> > index aeea3a3..7a7ddb8 100644
> > --- a/src/qemu/qemu_capabilities.c
> > +++ b/src/qemu/qemu_capabilities.c
> > @@ -4194,6 +4194,26 @@ virQEMUCapsFillDomainOSCaps(virDomainCapsOSPtr os,
> >  
> >  
> >  static int
> > +virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
> > + virQEMUCapsPtr qemuCaps,
> > + virDomainCapsPtr domCaps)
> > +{
> > +
> > +if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM &&
> > +virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch))
> 
> 
> Can caps be NULL?
> 
> > +domCaps->cpu.hostPassthrough = true;
> > +
> > +if (qemuCaps->cpuDefinitions && caps && caps->host.cpu)
> 
>
> Since you check here

No, caps cannot be NULL and the code will go away completely in patch 28
in this series. I fixed it anyway.

Jirka

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


Re: [libvirt] [PATCH 16/41] qemu: Fill in CPU domain capabilities

2016-08-29 Thread John Ferlan


On 08/12/2016 09:33 AM, Jiri Denemark wrote:
> Signed-off-by: Jiri Denemark 
> ---
>  src/qemu/qemu_capabilities.c   |  24 +-
>  src/qemu/qemu_capabilities.h   |   3 +-
>  src/qemu/qemu_driver.c |   7 +-
>  tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml   |  31 +-
>  .../qemu_2.6.0-gicv2-virt.aarch64.xml  |  37 +-
>  .../qemu_2.6.0-gicv3-virt.aarch64.xml  |  37 +-
>  tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml  |  37 +-
>  tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml  | 437 
> -
>  tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml   |  35 +-
>  tests/domaincapstest.c |  56 ++-
>  10 files changed, 682 insertions(+), 22 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index aeea3a3..7a7ddb8 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -4194,6 +4194,26 @@ virQEMUCapsFillDomainOSCaps(virDomainCapsOSPtr os,
>  
>  
>  static int
> +virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
> + virQEMUCapsPtr qemuCaps,
> + virDomainCapsPtr domCaps)
> +{
> +
> +if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM &&
> +virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch))


Can caps be NULL?

> +domCaps->cpu.hostPassthrough = true;
> +
> +if (qemuCaps->cpuDefinitions && caps && caps->host.cpu)

   
Since you check here


So far as this patch it doesn't seem so and if I check at the end the
two callers to virQEMUCapsFillDomainCaps have failure paths for !caps
prior to the calls.

Perhaps adding a NONNULL to the prototype will just help clear things up.




> +domCaps->cpu.hostModel = virQEMUCapsGuestIsNative(caps->host.arch,
> +  qemuCaps->arch);
> +
> +domCaps->cpu.custom = virObjectRef(qemuCaps->cpuDefinitions);
> +
> +return 0;
> +}
> +
> +

[...]

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


[libvirt] [PATCH 16/41] qemu: Fill in CPU domain capabilities

2016-08-12 Thread Jiri Denemark
Signed-off-by: Jiri Denemark 
---
 src/qemu/qemu_capabilities.c   |  24 +-
 src/qemu/qemu_capabilities.h   |   3 +-
 src/qemu/qemu_driver.c |   7 +-
 tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml   |  31 +-
 .../qemu_2.6.0-gicv2-virt.aarch64.xml  |  37 +-
 .../qemu_2.6.0-gicv3-virt.aarch64.xml  |  37 +-
 tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml  |  37 +-
 tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml  | 437 -
 tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml   |  35 +-
 tests/domaincapstest.c |  56 ++-
 10 files changed, 682 insertions(+), 22 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index aeea3a3..7a7ddb8 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4194,6 +4194,26 @@ virQEMUCapsFillDomainOSCaps(virDomainCapsOSPtr os,
 
 
 static int
+virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
+ virQEMUCapsPtr qemuCaps,
+ virDomainCapsPtr domCaps)
+{
+
+if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM &&
+virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch))
+domCaps->cpu.hostPassthrough = true;
+
+if (qemuCaps->cpuDefinitions && caps && caps->host.cpu)
+domCaps->cpu.hostModel = virQEMUCapsGuestIsNative(caps->host.arch,
+  qemuCaps->arch);
+
+domCaps->cpu.custom = virObjectRef(qemuCaps->cpuDefinitions);
+
+return 0;
+}
+
+
+static int
 virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
 const char *machine,
 virDomainCapsDeviceDiskPtr disk)
@@ -4400,7 +4420,8 @@ virQEMUCapsFillDomainFeatureGICCaps(virQEMUCapsPtr 
qemuCaps,
 
 
 int
-virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
+virQEMUCapsFillDomainCaps(virCapsPtr caps,
+  virDomainCapsPtr domCaps,
   virQEMUCapsPtr qemuCaps,
   virFirmwarePtr *firmwares,
   size_t nfirmwares)
@@ -4423,6 +,7 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
 }
 
 if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 ||
+virQEMUCapsFillDomainCPUCaps(caps, qemuCaps, domCaps) < 0 ||
 virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps,
 domCaps->machine, disk) < 0 ||
 virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 ||
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 0767a87..9fd38d9 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -494,7 +494,8 @@ int virQEMUCapsInitGuestFromBinary(virCapsPtr caps,
virQEMUCapsPtr kvmbinCaps,
virArch guestarch);
 
-int virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
+int virQEMUCapsFillDomainCaps(virCapsPtr caps,
+  virDomainCapsPtr domCaps,
   virQEMUCapsPtr qemuCaps,
   virFirmwarePtr *firmwares,
   size_t nfirmwares);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a424af0..7e4f4e7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -18497,6 +18497,7 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
 virDomainCapsPtr domCaps = NULL;
 int arch = virArchFromHost(); /* virArch */
 virQEMUDriverConfigPtr cfg = NULL;
+virCapsPtr caps = NULL;
 
 virCheckFlags(0, ret);
 
@@ -18505,6 +18506,9 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
 
 cfg = virQEMUDriverGetConfig(driver);
 
+if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
+goto cleanup;
+
 if (qemuHostdevHostSupportsPassthroughLegacy() ||
 qemuHostdevHostSupportsPassthroughVFIO())
 virttype = VIR_DOMAIN_VIRT_KVM;
@@ -18576,13 +18580,14 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
 if (!(domCaps = virDomainCapsNew(emulatorbin, machine, arch, virttype)))
 goto cleanup;
 
-if (virQEMUCapsFillDomainCaps(domCaps, qemuCaps,
+if (virQEMUCapsFillDomainCaps(caps, domCaps, qemuCaps,
   cfg->firmwares, cfg->nfirmwares) < 0)
 goto cleanup;
 
 ret = virDomainCapsFormat(domCaps);
  cleanup:
 virObjectUnref(cfg);
+virObjectUnref(caps);
 virObjectUnref(domCaps);
 virObjectUnref(qemuCaps);
 return ret;
diff --git a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml 
b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
index 6da28b0..4ee2f95 100644
--- a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
@@ -19,9 +19,34 @@