From nobody Thu Dec 18 12:32:32 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) client-ip=209.132.183.39; envelope-from=libvir-list-bounces@redhat.com; helo=mx6-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by mx.zohomail.com with SMTPS id 1487154428739718.3820868182594; Wed, 15 Feb 2017 02:27:08 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1FAHHSr047531; Wed, 15 Feb 2017 05:17:18 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v1FAFYan003197 for ; Wed, 15 Feb 2017 05:15:34 -0500 Received: from virval.usersys.redhat.com (dhcp129-92.brq.redhat.com [10.34.129.92]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1FAFW3M029866 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Wed, 15 Feb 2017 05:15:33 -0500 Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 78D411020D6; Wed, 15 Feb 2017 11:15:29 +0100 (CET) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 15 Feb 2017 11:15:08 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 14/33] cpu_x86: Drop virCPUx86MakeData and use virCPUDataNew X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jiri Denemark --- src/cpu/cpu_x86.c | 147 ++++++++++++++++++-------------------= ---- src/cpu/cpu_x86.h | 3 - src/libvirt_private.syms | 1 - src/libxl/libxl_capabilities.c | 18 ++--- src/qemu/qemu_monitor_json.c | 33 ++++----- 5 files changed, 92 insertions(+), 110 deletions(-) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index d9764a260..ccd68b681 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -303,22 +303,6 @@ virCPUx86DataClear(virCPUx86Data *data) } =20 =20 -virCPUDataPtr -virCPUx86MakeData(virArch arch, virCPUx86Data *data) -{ - virCPUDataPtr cpuData; - - if (VIR_ALLOC(cpuData) < 0) - return NULL; - - cpuData->arch =3D arch; - cpuData->data.x86 =3D *data; - data->len =3D 0; - data->data =3D NULL; - - return cpuData; -} - static void x86FreeCPUData(virCPUDataPtr data) { @@ -1441,7 +1425,6 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt) { xmlNodePtr *nodes =3D NULL; virCPUDataPtr cpuData =3D NULL; - virCPUx86Data data =3D VIR_CPU_X86_DATA_INIT; virCPUx86CPUID cpuid; size_t i; int n; @@ -1450,26 +1433,31 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt) if (n <=3D 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no x86 CPU data found")); - goto cleanup; + goto error; } =20 + if (!(cpuData =3D virCPUDataNew(VIR_ARCH_X86_64))) + goto error; + for (i =3D 0; i < n; i++) { ctxt->node =3D nodes[i]; if (x86ParseCPUID(ctxt, &cpuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to parse cpuid[%zu]"), i); - goto cleanup; + goto error; } - if (virCPUx86DataAddCPUID(&data, &cpuid) < 0) - goto cleanup; + if (virCPUx86DataAddCPUID(&cpuData->data.x86, &cpuid) < 0) + goto error; } =20 - cpuData =3D virCPUx86MakeData(VIR_ARCH_X86_64, &data); - cleanup: VIR_FREE(nodes); - virCPUx86DataClear(&data); return cpuData; + + error: + x86FreeCPUData(cpuData); + cpuData =3D NULL; + goto cleanup; } =20 =20 @@ -1514,7 +1502,7 @@ x86Compute(virCPUDefPtr host, virCPUx86ModelPtr cpu_forbid =3D NULL; virCPUx86ModelPtr diff =3D NULL; virCPUx86ModelPtr guest_model =3D NULL; - virCPUx86Data guestData =3D VIR_CPU_X86_DATA_INIT; + virCPUDataPtr guestData =3D NULL; virCPUCompareResult ret; virCPUx86CompareResult result; virArch arch; @@ -1633,9 +1621,11 @@ x86Compute(virCPUDefPtr host, =20 x86DataSubtract(&guest_model->data, &cpu_disable->data); =20 - if (x86DataCopy(&guestData, &guest_model->data) < 0 || - !(*guest =3D virCPUx86MakeData(arch, &guestData))) + if (!(guestData =3D virCPUDataNew(arch)) || + x86DataCopy(&guestData->data.x86, &guest_model->data) < 0) goto error; + + *guest =3D guestData; } =20 cleanup: @@ -1647,11 +1637,11 @@ x86Compute(virCPUDefPtr host, x86ModelFree(cpu_disable); x86ModelFree(cpu_forbid); x86ModelFree(guest_model); - virCPUx86DataClear(&guestData); =20 return ret; =20 error: + x86FreeCPUData(guestData); ret =3D VIR_CPU_COMPARE_ERROR; goto cleanup; } @@ -1958,12 +1948,12 @@ x86Encode(virArch arch, virCPUDataPtr *vendor) { virCPUx86MapPtr map =3D NULL; - virCPUx86Data data_forced =3D VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_required =3D VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_optional =3D VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_disabled =3D VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_forbidden =3D VIR_CPU_X86_DATA_INIT; - virCPUx86Data data_vendor =3D VIR_CPU_X86_DATA_INIT; + virCPUDataPtr data_forced =3D NULL; + virCPUDataPtr data_required =3D NULL; + virCPUDataPtr data_optional =3D NULL; + virCPUDataPtr data_disabled =3D NULL; + virCPUDataPtr data_forbidden =3D NULL; + virCPUDataPtr data_vendor =3D NULL; =20 if (forced) *forced =3D NULL; @@ -1982,23 +1972,33 @@ x86Encode(virArch arch, goto error; =20 if (forced && - x86EncodePolicy(&data_forced, cpu, map, VIR_CPU_FEATURE_FORCE) < 0) + (!(data_forced =3D virCPUDataNew(arch)) || + x86EncodePolicy(&data_forced->data.x86, cpu, map, + VIR_CPU_FEATURE_FORCE) < 0)) goto error; =20 if (required && - x86EncodePolicy(&data_required, cpu, map, VIR_CPU_FEATURE_REQUIRE)= < 0) + (!(data_required =3D virCPUDataNew(arch)) || + x86EncodePolicy(&data_required->data.x86, cpu, map, + VIR_CPU_FEATURE_REQUIRE) < 0)) goto error; =20 if (optional && - x86EncodePolicy(&data_optional, cpu, map, VIR_CPU_FEATURE_OPTIONAL= ) < 0) + (!(data_optional =3D virCPUDataNew(arch)) || + x86EncodePolicy(&data_optional->data.x86, cpu, map, + VIR_CPU_FEATURE_OPTIONAL) < 0)) goto error; =20 if (disabled && - x86EncodePolicy(&data_disabled, cpu, map, VIR_CPU_FEATURE_DISABLE)= < 0) + (!(data_disabled =3D virCPUDataNew(arch)) || + x86EncodePolicy(&data_disabled->data.x86, cpu, map, + VIR_CPU_FEATURE_DISABLE) < 0)) goto error; =20 if (forbidden && - x86EncodePolicy(&data_forbidden, cpu, map, VIR_CPU_FEATURE_FORBID)= < 0) + (!(data_forbidden =3D virCPUDataNew(arch)) || + x86EncodePolicy(&data_forbidden->data.x86, cpu, map, + VIR_CPU_FEATURE_FORBID) < 0)) goto error; =20 if (vendor) { @@ -2010,50 +2010,35 @@ x86Encode(virArch arch, goto error; } =20 - if (v && virCPUx86DataAddCPUID(&data_vendor, &v->cpuid) < 0) + if (!(data_vendor =3D virCPUDataNew(arch))) + goto error; + + if (v && virCPUx86DataAddCPUID(&data_vendor->data.x86, &v->cpuid) = < 0) goto error; } =20 - if (forced && - !(*forced =3D virCPUx86MakeData(arch, &data_forced))) - goto error; - if (required && - !(*required =3D virCPUx86MakeData(arch, &data_required))) - goto error; - if (optional && - !(*optional =3D virCPUx86MakeData(arch, &data_optional))) - goto error; - if (disabled && - !(*disabled =3D virCPUx86MakeData(arch, &data_disabled))) - goto error; - if (forbidden && - !(*forbidden =3D virCPUx86MakeData(arch, &data_forbidden))) - goto error; - if (vendor && - !(*vendor =3D virCPUx86MakeData(arch, &data_vendor))) - goto error; + if (forced) + *forced =3D data_forced; + if (required) + *required =3D data_required; + if (optional) + *optional =3D data_optional; + if (disabled) + *disabled =3D data_disabled; + if (forbidden) + *forbidden =3D data_forbidden; + if (vendor) + *vendor =3D data_vendor; =20 return 0; =20 error: - virCPUx86DataClear(&data_forced); - virCPUx86DataClear(&data_required); - virCPUx86DataClear(&data_optional); - virCPUx86DataClear(&data_disabled); - virCPUx86DataClear(&data_forbidden); - virCPUx86DataClear(&data_vendor); - if (forced) - x86FreeCPUData(*forced); - if (required) - x86FreeCPUData(*required); - if (optional) - x86FreeCPUData(*optional); - if (disabled) - x86FreeCPUData(*disabled); - if (forbidden) - x86FreeCPUData(*forbidden); - if (vendor) - x86FreeCPUData(*vendor); + x86FreeCPUData(data_forced); + x86FreeCPUData(data_required); + x86FreeCPUData(data_optional); + x86FreeCPUData(data_disabled); + x86FreeCPUData(data_forbidden); + x86FreeCPUData(data_vendor); return -1; } =20 @@ -2382,22 +2367,20 @@ static virCPUDataPtr x86NodeData(virArch arch) { virCPUDataPtr cpuData =3D NULL; - virCPUx86Data data =3D VIR_CPU_X86_DATA_INIT; =20 - if (cpuidSet(CPUX86_BASIC, &data) < 0) + if (!(cpuData =3D virCPUDataNew(arch))) goto error; =20 - if (cpuidSet(CPUX86_EXTENDED, &data) < 0) + if (cpuidSet(CPUX86_BASIC, &cpuData->data.x86) < 0) goto error; =20 - if (!(cpuData =3D virCPUx86MakeData(arch, &data))) + if (cpuidSet(CPUX86_EXTENDED, &cpuData->data.x86) < 0) goto error; =20 return cpuData; =20 error: - virCPUx86DataClear(&data); - + x86FreeCPUData(cpuData); return NULL; } #endif diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index 09b95a5a2..8c8c6ed4f 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -34,7 +34,4 @@ int virCPUx86DataAddCPUID(virCPUx86Data *data, =20 void virCPUx86DataClear(virCPUx86Data *data); =20 -virCPUDataPtr virCPUx86MakeData(virArch arch, - virCPUx86Data *data); - #endif /* __VIR_CPU_X86_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a2bcc6241..b4f61c87e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1007,7 +1007,6 @@ virCPUUpdate; # cpu/cpu_x86.h virCPUx86DataAddCPUID; virCPUx86DataClear; -virCPUx86MakeData; =20 =20 # datatypes.h diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c index 2bbd2d1b4..622e9f6bb 100644 --- a/src/libxl/libxl_capabilities.c +++ b/src/libxl/libxl_capabilities.c @@ -65,14 +65,14 @@ struct guest_arch { #define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(aarch64|armv= 7l|x86_32|x86_64|ia64|powerpc64)(p|be)?" =20 static int -libxlCapsAddCPUID(virCPUx86Data *data, virCPUx86CPUID *cpuid, ssize_t ncap= s) +libxlCapsAddCPUID(virCPUDataPtr data, virCPUx86CPUID *cpuid, ssize_t ncaps) { size_t i; =20 for (i =3D 0; i < ncaps; i++) { virCPUx86CPUID *c =3D &cpuid[i]; =20 - if (virCPUx86DataAddCPUID(data, c) < 0) { + if (virCPUx86DataAddCPUID(&data->data.x86, c) < 0) { VIR_DEBUG("Failed to add CPUID(%x,%x)", c->eax_in, c->ecx_in); return -1; } @@ -112,7 +112,6 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { ssize_t ncaps; virCPUDataPtr cpudata =3D NULL; - virCPUx86Data data =3D VIR_CPU_X86_DATA_INIT; virCPUx86CPUID cpuid[] =3D { { .eax_in =3D 0x00000001, .edx =3D hwcap[0] }, @@ -131,20 +130,23 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap, { .eax_in =3D 0x80000007, .ecx_in =3D 0U, .edx =3D hwcap[7] }, }; =20 + if (!(cpudata =3D virCPUDataNew(cpu->arch))) + goto error; + ncaps =3D ARRAY_CARDINALITY(cpuid); - if (libxlCapsAddCPUID(&data, cpuid, ncaps) < 0) + if (libxlCapsAddCPUID(cpudata, cpuid, ncaps) < 0) goto error; =20 ncaps =3D ARRAY_CARDINALITY(cpuid_ver1); if (version > LIBXL_HWCAP_V0 && - libxlCapsAddCPUID(&data, cpuid_ver1, ncaps) < 0) + libxlCapsAddCPUID(cpudata, cpuid_ver1, ncaps) < 0) goto error; =20 - cpudata =3D virCPUx86MakeData(cpu->arch, &data); + return cpudata; =20 error: - virCPUx86DataClear(&data); - return cpudata; + cpuDataFree(cpudata); + return NULL; } =20 /* hw_caps is an array of 32-bit words whose meaning is listed in diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 415761525..b4da12167 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -6565,37 +6565,35 @@ qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueP= tr data, } =20 =20 -static int -qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data, - virCPUDataPtr *cpudata) +static virCPUDataPtr +qemuMonitorJSONParseCPUx86Features(virJSONValuePtr data) { - virCPUx86Data x86Data =3D VIR_CPU_X86_DATA_INIT; + virCPUDataPtr cpudata =3D NULL; virCPUx86CPUID cpuid; size_t i; ssize_t n; - int ret =3D -1; =20 if (!data || (n =3D virJSONValueArraySize(data)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("invalid array of CPUID features")); - return -1; + goto error; } =20 + if (!(cpudata =3D virCPUDataNew(VIR_ARCH_X86_64))) + goto error; + for (i =3D 0; i < n; i++) { if (qemuMonitorJSONParseCPUx86FeatureWord(virJSONValueArrayGet(dat= a, i), &cpuid) < 0 || - virCPUx86DataAddCPUID(&x86Data, &cpuid) < 0) - goto cleanup; + virCPUx86DataAddCPUID(&cpudata->data.x86, &cpuid) < 0) + goto error; } =20 - if (!(*cpudata =3D virCPUx86MakeData(VIR_ARCH_X86_64, &x86Data))) - goto cleanup; + return cpudata; =20 - ret =3D 0; - - cleanup: - virCPUx86DataClear(&x86Data); - return ret; + error: + cpuDataFree(cpudata); + return NULL; } =20 =20 @@ -6622,7 +6620,10 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitorPtr mon, goto cleanup; =20 data =3D virJSONValueObjectGetArray(reply, "return"); - ret =3D qemuMonitorJSONParseCPUx86Features(data, cpudata); + if (!(*cpudata =3D qemuMonitorJSONParseCPUx86Features(data))) + goto cleanup; + + ret =3D 0; =20 cleanup: virJSONValueFree(cmd); --=20 2.11.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list