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