From nobody Sun Feb 8 01:33:19 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1548335872450917.1095062628451; Thu, 24 Jan 2019 05:17:52 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 764738E675; Thu, 24 Jan 2019 13:17:50 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 36C986D089; Thu, 24 Jan 2019 13:17:50 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id A8D893F605; Thu, 24 Jan 2019 13:17:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x0ODHOcO016853 for ; Thu, 24 Jan 2019 08:17:24 -0500 Received: by smtp.corp.redhat.com (Postfix) id 562012635A; Thu, 24 Jan 2019 13:17:24 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-112-61.ams2.redhat.com [10.36.112.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4FACF26E63; Thu, 24 Jan 2019 13:17:23 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Thu, 24 Jan 2019 13:17:06 +0000 Message-Id: <20190124131707.17976-8-berrange@redhat.com> In-Reply-To: <20190124131707.17976-1-berrange@redhat.com> References: <20190124131707.17976-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Subject: [libvirt] [go PATCH 7/8] Switch remaining typed parameter code to use C allocs 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 24 Jan 2019 13:17:51 +0000 (UTC) Bring remaining typed parameter code in line with previous patches by switching to C allocs instead of passing Go memory to C. Signed-off-by: Daniel P. Berrang=C3=A9 --- connect.go | 9 ++--- domain.go | 102 +++++++++++++++++++++++-------------------------- typedparams.go | 11 +++++- 3 files changed, 61 insertions(+), 61 deletions(-) diff --git a/connect.go b/connect.go index 632b7a6..f627e7d 100644 --- a/connect.go +++ b/connect.go @@ -1905,15 +1905,14 @@ func (c *Connect) GetMemoryParameters(flags uint32)= (*NodeMemoryParameters, erro return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virNodeGetMemoryParametersWrapper(c.ptr, (*C.virTypedParameter)= (unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virNodeGetMemoryParametersWrapper(c.ptr, cparams, &cnparams, C.= uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } diff --git a/domain.go b/domain.go index c851bf6..bee779f 100644 --- a/domain.go +++ b/domain.go @@ -1173,29 +1173,29 @@ func (d *Domain) GetCPUStats(startCpu int, nCpus ui= nt, flags uint32) ([]DomainCP if ret =3D=3D -1 { return []DomainCPUStats{}, makeError(&err) } - cnparams :=3D uint(ret) + cnparams :=3D C.int(ret) =20 - var cparams []C.virTypedParameter - var nallocparams uint + var cnallocparams C.int if startCpu =3D=3D -1 { - nallocparams =3D cnparams + cnallocparams =3D cnparams } else { - nallocparams =3D cnparams * nCpus + cnallocparams =3D cnparams * C.int(nCpus) } - cparams =3D make([]C.virTypedParameter, nallocparams) - ret =3D C.virDomainGetCPUStatsWrapper(d.ptr, (*C.virTypedParameter)(unsaf= e.Pointer(&cparams[0])), C.uint(cnparams), C.int(startCpu), C.uint(nCpus), = C.uint(flags), &err) + cparams :=3D typedParamsNew(cnallocparams) + defer C.virTypedParamsFree(cparams, cnallocparams) + ret =3D C.virDomainGetCPUStatsWrapper(d.ptr, cparams, C.uint(cnparams), C= .int(startCpu), C.uint(nCpus), C.uint(flags), &err) if ret =3D=3D -1 { return []DomainCPUStats{}, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), C.int(nallocparams)) - stats :=3D make([]DomainCPUStats, nCpus) for i :=3D 0; i < int(nCpus); i++ { - offset :=3D i * int(cnparams) + coffset :=3D C.int(i) * cnparams info :=3D getCPUStatsFieldInfo(&stats[i]) - cparamscpu :=3D cparams[offset : offset+int(ret)] - _, gerr :=3D typedParamsUnpack(cparamscpu, info) + var cparamscpu *C.virTypedParameter + cparamscpu =3D (*C.virTypedParameter)(unsafe.Pointer(uintptr(unsafe.Poin= ter(cparams)) + + (unsafe.Sizeof(*cparams) * uintptr(coffset)))) + _, gerr :=3D typedParamsUnpackLen(cparamscpu, cnparams, info) if gerr !=3D nil { return []DomainCPUStats{}, gerr } @@ -1268,15 +1268,14 @@ func (d *Domain) GetInterfaceParameters(device stri= ng, flags DomainModificationI return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virDomainGetInterfaceParametersWrapper(d.ptr, cdevice, (*C.virT= ypedParameter)(unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virDomainGetInterfaceParametersWrapper(d.ptr, cdevice, cparams,= &cnparams, C.uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -1659,15 +1658,14 @@ func (d *Domain) BlockStatsFlags(disk string, flags= uint32) (*DomainBlockStats, return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virDomainBlockStatsFlagsWrapper(d.ptr, cdisk, (*C.virTypedParam= eter)(unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virDomainBlockStatsFlagsWrapper(d.ptr, cdisk, cparams, &cnparam= s, C.uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -2604,15 +2602,14 @@ func (d *Domain) GetBlkioParameters(flags DomainMod= ificationImpact) (*DomainBlki return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virDomainGetBlkioParametersWrapper(d.ptr, (*C.virTypedParameter= )(unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virDomainGetBlkioParametersWrapper(d.ptr, cparams, &cnparams, C= .uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -2783,15 +2780,14 @@ func (d *Domain) GetBlockIoTune(disk string, flags = DomainModificationImpact) (*D return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virDomainGetBlockIoTuneWrapper(d.ptr, cdisk, (*C.virTypedParame= ter)(unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virDomainGetBlockIoTuneWrapper(d.ptr, cdisk, cparams, &cnparams= , C.uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -3156,11 +3152,11 @@ func getDomainJobInfoFieldInfo(params *DomainJobInf= o) map[string]typedParamsFiel =20 // See also https://libvirt.org/html/libvirt-libvirt-domain.html#virDomain= GetJobStats func (d *Domain) GetJobStats(flags DomainGetJobStatsFlags) (*DomainJobInfo= , error) { - var cparams *C.virTypedParameter + var cparams C.virTypedParameterPtr var cnparams C.int var jobtype C.int var err C.virError - ret :=3D C.virDomainGetJobStatsWrapper(d.ptr, &jobtype, (*C.virTypedParam= eterPtr)(unsafe.Pointer(&cparams)), &cnparams, C.uint(flags), &err) + ret :=3D C.virDomainGetJobStatsWrapper(d.ptr, &jobtype, &cparams, &cnpara= ms, C.uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } @@ -3256,15 +3252,14 @@ func (d *Domain) GetMemoryParameters(flags DomainMo= dificationImpact) (*DomainMem return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virDomainGetMemoryParametersWrapper(d.ptr, (*C.virTypedParamete= r)(unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virDomainGetMemoryParametersWrapper(d.ptr, cparams, &cnparams, = C.uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -3324,15 +3319,14 @@ func (d *Domain) GetNumaParameters(flags DomainModi= ficationImpact) (*DomainNumaP return nil, makeError(&err) } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret =3D C.virDomainGetNumaParametersWrapper(d.ptr, (*C.virTypedParameter)= (unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret =3D C.virDomainGetNumaParametersWrapper(d.ptr, cparams, &cnparams, C.= uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } =20 - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) - - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -3511,10 +3505,10 @@ func (d *Domain) GetPerfEvents(flags DomainModifica= tionImpact) (*DomainPerfEvent params :=3D &DomainPerfEvents{} info :=3D getDomainPerfEventsFieldInfo(params) =20 - var cparams *C.virTypedParameter + var cparams C.virTypedParameterPtr var cnparams C.int var err C.virError - ret :=3D C.virDomainGetPerfEventsWrapper(d.ptr, (*C.virTypedParameterPtr)= (unsafe.Pointer(&cparams)), &cnparams, C.uint(flags), &err) + ret :=3D C.virDomainGetPerfEventsWrapper(d.ptr, &cparams, &cnparams, C.ui= nt(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } @@ -3664,14 +3658,14 @@ func (d *Domain) GetSchedulerParameters() (*DomainS= chedulerParameters, error) { }, nil } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret :=3D C.virDomainGetSchedulerParametersWrapper(d.ptr, (*C.virTypedPara= meter)(unsafe.Pointer(&cparams[0])), &cnparams, &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret :=3D C.virDomainGetSchedulerParametersWrapper(d.ptr, cparams, &cnpara= ms, &err) if ret =3D=3D -1 { return nil, makeError(&err) } - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) =20 - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } @@ -3698,14 +3692,14 @@ func (d *Domain) GetSchedulerParametersFlags(flags = DomainModificationImpact) (*D }, nil } =20 - cparams :=3D make([]C.virTypedParameter, cnparams) - ret :=3D C.virDomainGetSchedulerParametersFlagsWrapper(d.ptr, (*C.virType= dParameter)(unsafe.Pointer(&cparams[0])), &cnparams, C.uint(flags), &err) + cparams :=3D typedParamsNew(cnparams) + defer C.virTypedParamsFree(cparams, cnparams) + ret :=3D C.virDomainGetSchedulerParametersFlagsWrapper(d.ptr, cparams, &c= nparams, C.uint(flags), &err) if ret =3D=3D -1 { return nil, makeError(&err) } - defer C.virTypedParamsClear((*C.virTypedParameter)(unsafe.Pointer(&cparam= s[0])), cnparams) =20 - _, gerr :=3D typedParamsUnpack(cparams, info) + _, gerr :=3D typedParamsUnpackLen(cparams, cnparams, info) if gerr !=3D nil { return nil, gerr } diff --git a/typedparams.go b/typedparams.go index ee531cc..0a4c175 100644 --- a/typedparams.go +++ b/typedparams.go @@ -131,8 +131,15 @@ func typedParamsUnpackLen(cparams *C.virTypedParameter= , cnparams C.int, infomap return count, nil } =20 -func typedParamsUnpack(cparams []C.virTypedParameter, infomap map[string]t= ypedParamsFieldInfo) (uint, error) { - return typedParamsUnpackLen(&cparams[0], C.int(len(cparams)), infomap) +func typedParamsNew(nparams C.int) *C.virTypedParameter { + var cparams *C.virTypedParameter + memlen :=3D C.size_t(unsafe.Sizeof(*cparams) * uintptr(nparams)) + cparams =3D (*C.virTypedParameter)(C.malloc(memlen)) + if cparams =3D=3D nil { + C.abort() + } + C.memset(unsafe.Pointer(cparams), 0, memlen) + return cparams } =20 func typedParamsPackNew(infomap map[string]typedParamsFieldInfo) (*C.virTy= pedParameter, C.int, error) { --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list