virQEMUCapsProbeQMPCPUDefinitions is now a small wrapper which fills in
qemuCaps with CPU models fetched by virQEMUCapsFetchCPUDefinitions.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
src/qemu/qemu_capabilities.c | 59 +++++++++++++++++++++++++++-----------------
src/qemu/qemu_capabilities.h | 1 +
2 files changed, 38 insertions(+), 22 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 29714855b0..8c65de956e 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2956,30 +2956,19 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps,
}
-int
-virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
- qemuMonitorPtr mon,
- bool tcg)
+virDomainCapsCPUModelsPtr
+virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon)
{
- virDomainCapsCPUModelsPtr models;
- qemuMonitorCPUDefInfoPtr *cpus;
- int ncpus;
- int ret = -1;
+ virDomainCapsCPUModelsPtr models = NULL;
+ qemuMonitorCPUDefInfoPtr *cpus = NULL;
+ int ncpus = 0;
size_t i;
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
- return 0;
-
if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0)
- return -1;
+ goto error;
if (!(models = virDomainCapsCPUModelsNew(ncpus)))
- goto cleanup;
-
- if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
- qemuCaps->tcgCPUModels = models;
- else
- qemuCaps->kvmCPUModels = models;
+ goto error;
for (i = 0; i < ncpus; i++) {
virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN;
@@ -2991,18 +2980,44 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable,
&cpus[i]->blockers) < 0)
- goto cleanup;
+ goto error;
}
- ret = 0;
-
cleanup:
for (i = 0; i < ncpus; i++)
qemuMonitorCPUDefInfoFree(cpus[i]);
VIR_FREE(cpus);
- return ret;
+ return models;
+
+ error:
+ virObjectUnref(models);
+ models = NULL;
+ goto cleanup;
}
+
+int
+virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
+ qemuMonitorPtr mon,
+ bool tcg)
+{
+ virDomainCapsCPUModelsPtr models = NULL;
+
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
+ return 0;
+
+ if (!(models = virQEMUCapsFetchCPUDefinitions(mon)))
+ return -1;
+
+ if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
+ qemuCaps->tcgCPUModels = models;
+ else
+ qemuCaps->kvmCPUModels = models;
+
+ return 0;
+}
+
+
static int
virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps,
qemuMonitorPtr mon,
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 9f239a0ecf..e73dbaa557 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -485,6 +485,7 @@ int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
virDomainCapsCPUUsable usable);
virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
virDomainVirtType type);
+virDomainCapsCPUModelsPtr virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon);
typedef enum {
/* Host CPU definition reported in domain capabilities. */
--
2.15.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 12/07/2017 08:20 AM, Jiri Denemark wrote:
> virQEMUCapsProbeQMPCPUDefinitions is now a small wrapper which fills in
> qemuCaps with CPU models fetched by virQEMUCapsFetchCPUDefinitions.
>
> Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
> ---
> src/qemu/qemu_capabilities.c | 59 +++++++++++++++++++++++++++-----------------
> src/qemu/qemu_capabilities.h | 1 +
> 2 files changed, 38 insertions(+), 22 deletions(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 29714855b0..8c65de956e 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -2956,30 +2956,19 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps,
> }
>
>
> -int
> -virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> - qemuMonitorPtr mon,
> - bool tcg)
> +virDomainCapsCPUModelsPtr
> +virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon)
> {
> - virDomainCapsCPUModelsPtr models;
> - qemuMonitorCPUDefInfoPtr *cpus;
> - int ncpus;
> - int ret = -1;
> + virDomainCapsCPUModelsPtr models = NULL;
> + qemuMonitorCPUDefInfoPtr *cpus = NULL;
> + int ncpus = 0;
> size_t i;
>
> - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
> - return 0;
> -
> if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0)
> - return -1;
> + goto error;
This adjustment causes a Coverity found problem for the "for (i = 0; i <
ncpus; i++)" in cleanup: on failure ncpus == -1.
John
>
> if (!(models = virDomainCapsCPUModelsNew(ncpus)))
> - goto cleanup;
> -
> - if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
> - qemuCaps->tcgCPUModels = models;
> - else
> - qemuCaps->kvmCPUModels = models;
> + goto error;
>
> for (i = 0; i < ncpus; i++) {
> virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN;
> @@ -2991,18 +2980,44 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
>
> if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable,
> &cpus[i]->blockers) < 0)
> - goto cleanup;
> + goto error;
> }
>
> - ret = 0;
> -
> cleanup:
> for (i = 0; i < ncpus; i++)
> qemuMonitorCPUDefInfoFree(cpus[i]);
> VIR_FREE(cpus);
> - return ret;
> + return models;
> +
> + error:
> + virObjectUnref(models);
> + models = NULL;
> + goto cleanup;
> }
>
> +
> +int
> +virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> + qemuMonitorPtr mon,
> + bool tcg)
> +{
> + virDomainCapsCPUModelsPtr models = NULL;
> +
> + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
> + return 0;
> +
> + if (!(models = virQEMUCapsFetchCPUDefinitions(mon)))
> + return -1;
> +
> + if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
> + qemuCaps->tcgCPUModels = models;
> + else
> + qemuCaps->kvmCPUModels = models;
> +
> + return 0;
> +}
> +
> +
> static int
> virQEMUCapsProbeQMPHostCPU(virQEMUCapsPtr qemuCaps,
> qemuMonitorPtr mon,
> diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
> index 9f239a0ecf..e73dbaa557 100644
> --- a/src/qemu/qemu_capabilities.h
> +++ b/src/qemu/qemu_capabilities.h
> @@ -485,6 +485,7 @@ int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
> virDomainCapsCPUUsable usable);
> virDomainCapsCPUModelsPtr virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
> virDomainVirtType type);
> +virDomainCapsCPUModelsPtr virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon);
>
> typedef enum {
> /* Host CPU definition reported in domain capabilities. */
>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Mon, Dec 11, 2017 at 07:59:44 -0500, John Ferlan wrote:
>
>
> On 12/07/2017 08:20 AM, Jiri Denemark wrote:
> > virQEMUCapsProbeQMPCPUDefinitions is now a small wrapper which fills in
> > qemuCaps with CPU models fetched by virQEMUCapsFetchCPUDefinitions.
> >
> > Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
> > ---
> > src/qemu/qemu_capabilities.c | 59 +++++++++++++++++++++++++++-----------------
> > src/qemu/qemu_capabilities.h | 1 +
> > 2 files changed, 38 insertions(+), 22 deletions(-)
> >
> > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> > index 29714855b0..8c65de956e 100644
> > --- a/src/qemu/qemu_capabilities.c
> > +++ b/src/qemu/qemu_capabilities.c
> > @@ -2956,30 +2956,19 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps,
> > }
> >
> >
> > -int
> > -virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> > - qemuMonitorPtr mon,
> > - bool tcg)
> > +virDomainCapsCPUModelsPtr
> > +virQEMUCapsFetchCPUDefinitions(qemuMonitorPtr mon)
> > {
> > - virDomainCapsCPUModelsPtr models;
> > - qemuMonitorCPUDefInfoPtr *cpus;
> > - int ncpus;
> > - int ret = -1;
> > + virDomainCapsCPUModelsPtr models = NULL;
> > + qemuMonitorCPUDefInfoPtr *cpus = NULL;
> > + int ncpus = 0;
> > size_t i;
> >
> > - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
> > - return 0;
> > -
> > if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0)
> > - return -1;
> > + goto error;
>
> This adjustment causes a Coverity found problem for the "for (i = 0; i <
> ncpus; i++)" in cleanup: on failure ncpus == -1.
Oh right, a patch is coming...
Jirka
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2026 Red Hat, Inc.