From nobody Tue Nov 11 07:31:02 2025 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1570461364; cv=none; d=zoho.com; s=zohoarc; b=KhXoa/yvJYdDOOpqR9IiDECr4XIrufMcL+p9tTRgWxJg+s/7/LhgVKBd5DzAJMG3CWrTVR4ugVo74UHaw9jLULtWAy6R5vZlO8rfM+fEXvHZNROJDwiQs2b/m6//Ek7b2sSa01OLgK3Eib9JcZtJ3MejYMil4+EoqmcFobwGoy0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570461364; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=bkTR9wViWcR05KEvQiezgWzkO6yqTjBYBbOQ9hYKTEY=; b=ceOWiIIrjUw2j/3LRaK9qNzAAjWd1pExmb3Llmqxb+fbsDAsDv91raANr9VVqCk8c4XQrCl4LAlluNFcC5jLqEuPXSVd0bR5aoiDH8a1pj5+aG2jmxuC+E26eeseTNwWboUkptTaz8VYnAYs7XT5fRUhsFp0ntYocpQVG4UrxlQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1570461364768945.8098460212809; Mon, 7 Oct 2019 08:16:04 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iHUj0-0007oF-Jk; Mon, 07 Oct 2019 15:15:02 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iHUiz-0007nW-QP for xen-devel@lists.xenproject.org; Mon, 07 Oct 2019 15:15:01 +0000 Received: from mail-qk1-x742.google.com (unknown [2607:f8b0:4864:20::742]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 0be8cd4a-e915-11e9-9bee-bc764e2007e4; Mon, 07 Oct 2019 15:13:41 +0000 (UTC) Received: by mail-qk1-x742.google.com with SMTP id h126so12881369qke.10 for ; Mon, 07 Oct 2019 08:13:41 -0700 (PDT) Received: from five.crux.rad.ainfosec.com (209-217-208-226.northland.net. [209.217.208.226]) by smtp.googlemail.com with ESMTPSA id c185sm8354313qkg.74.2019.10.07.08.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Oct 2019 08:13:39 -0700 (PDT) X-Inumbo-ID: 0be8cd4a-e915-11e9-9bee-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=H0/NygQB0jTA/IzmD+r7Xr4HrbLuhhEPzMD4UkBaT74=; b=gzI0WAgRHPbDr3xWa+n7KCvoprDPxQI60rVh4+0mKEzLrAzIvPvJMmkYlNY7fraaon jYod+sTHcFMn8u+vYRJKR9cP3a9HUK0rk/AuVHLjwPWuoRI9pgamAxh7vAVDfO6emtWE MctYx7M93DFn44dbF8iyUQfrW/Hi1eemGleahm/LatCqQV0WLPttuNSuPpEq+H6xs5j+ VOYaGmgdSuBIrfrKPR8Y+326+LQxBiFl9aWpck0MRbNq43QbSB2L5lIyzz13w44+4099 G+80b60CejaI+4L5PY5zCUh0ZgEjllXU0myOaJWebVk7PdBN2DSsLevABlIxmGPVgMVf hq4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H0/NygQB0jTA/IzmD+r7Xr4HrbLuhhEPzMD4UkBaT74=; b=uk4H2VrguyL5MSXJ3jETM36/VboLIoSmURk9s7jhOik4+USRgqfHwlL1QRkqhoFLw1 rmBz7kx3ijxY8cu+7dRSMvZ9uvTcUnpz3e7+DN/t/K3rrfruhKPTy5EoDYfT9msqgmIP 8O0JaEGubwrqfb7D838xaT9nuVUBYiyRwekBMhrsj+Uf+SgaihpxNvN40QTz5qf2LJvo XmARx3ak0mW1fZRkYErLuO7/4IxpHhI1DlZEvK10sEt1Y5mJOk5N1XyGdq8xB9il4lCO hQnmFgmU+qZYBOIKNtol9+UwFfllGw/4fvLFuRwTq9cZNj9XoYpZQ+LYwtGs5xJC+A25 GT4g== X-Gm-Message-State: APjAAAX9/E8xzR7gaGUEr0m1ifgnYirON/Nhtl1NJe4F8I5YrVvf/Ybt eVK1xC5WYe3/NLo2k5Mz9Od04G27 X-Google-Smtp-Source: APXvYqz7zQu+x5OC4GEp6c/51kxAN70hFvMzFzO9p8rWxAi6YknxMLWXSqvr2QouRmZPUnGgYhrg5g== X-Received: by 2002:a37:66c8:: with SMTP id a191mr24154096qkc.108.1570461220724; Mon, 07 Oct 2019 08:13:40 -0700 (PDT) From: Nick Rosbrook To: xen-devel@lists.xenproject.org Date: Mon, 7 Oct 2019 11:13:08 -0400 Message-Id: X-Mailer: git-send-email 2.19.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 21/24] golang/xenlight: implement array Go to C marshaling X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Nick Rosbrook , Ian Jackson , kerriganb@ainfosec.com, George Dunlap , Wei Liu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: Nick Rosbrook Signed-off-by: Nick Rosbrook --- Cc: George Dunlap Cc: Ian Jackson Cc: Wei Liu tools/golang/xenlight/gengotypes.py | 44 ++- tools/golang/xenlight/xenlight_helpers.go | 359 ++++++++++++++++++++++ 2 files changed, 402 insertions(+), 1 deletion(-) diff --git a/tools/golang/xenlight/gengotypes.py b/tools/golang/xenlight/ge= ngotypes.py index 35d9dfea40..d8a6120e5c 100644 --- a/tools/golang/xenlight/gengotypes.py +++ b/tools/golang/xenlight/gengotypes.py @@ -479,7 +479,7 @@ def xenlight_golang_define_to_C(ty =3D None, typename = =3D None, nested =3D False): for f in ty.fields: if f.type.typename is not None: if isinstance(f.type, idl.Array): - # TODO + s +=3D xenlight_golang_array_to_C(f, ty.dispose_fn) continue =20 gotypename =3D xenlight_golang_fmt_name(f.type.typename) @@ -610,6 +610,48 @@ def xenlight_golang_union_to_C(ty =3D None, union_name= =3D '', =20 return s =20 +def xenlight_golang_array_to_C(ty =3D None, dispose_fn =3D ''): + s =3D '' + + gotypename =3D xenlight_golang_fmt_name(ty.type.elem_type.typename) + goname =3D xenlight_golang_fmt_name(ty.name) + ctypename =3D ty.type.elem_type.typename + cname =3D ty.name + clenvar =3D ty.type.lenvar.name + golenvar =3D xenlight_golang_fmt_name(clenvar,exported=3DFalse) + + is_enum =3D isinstance(ty.type.elem_type,idl.Enumeration) + if gotypename in go_builtin_types or is_enum: + s +=3D '{} :=3D len(x.{})\n'.format(golenvar,goname) + s +=3D 'xc.{} =3D (*C.{})(C.malloc(C.size_t({}*{})))\n'.format(cna= me,ctypename, + golenva= r,golenvar) + s +=3D 'xc.{} =3D C.int({})\n'.format(clenvar,golenvar) + s +=3D 'c{} :=3D (*[1<<28]C.{})(unsafe.Pointer(xc.{}))[:{}:{}]\n'.= format(goname, + ctyp= ename,cname, + gole= nvar,golenvar) + s +=3D 'for i,v :=3D range x.{} {{\n'.format(goname) + s +=3D 'c{}[i] =3D C.{}(v)\n'.format(goname,ctypename) + s +=3D '}\n' + + return s + + s +=3D '{} :=3D len(x.{})\n'.format(golenvar,goname) + s +=3D 'xc.{} =3D (*C.{})(C.malloc(C.ulong({})*C.sizeof_{}))\n'.format= (cname,ctypename, + golenva= r,ctypename) + s +=3D 'xc.{} =3D C.int({})\n'.format(clenvar,golenvar) + s +=3D 'c{} :=3D (*[1<<28]C.{})(unsafe.Pointer(xc.{}))[:{}:{}]\n'.form= at(goname, + c= typename,cname, + g= olenvar,golenvar) + s +=3D 'for i,v :=3D range x.{} {{\n'.format(goname) + s +=3D 'tmp, err :=3D v.toC()\n' + s +=3D 'if err !=3D nil {\n' + s +=3D 'C.{}(&xc)\n'.format(dispose_fn) + s +=3D 'return xc,err\n}\n' + s +=3D 'c{}[i] =3D tmp\n'.format(goname) + s +=3D '}\n' + + return s + def xenlight_golang_fmt_name(name, exported =3D True): """ Take a given type name and return an diff --git a/tools/golang/xenlight/xenlight_helpers.go b/tools/golang/xenli= ght/xenlight_helpers.go index 2cb5adaec5..7940c209a2 100644 --- a/tools/golang/xenlight/xenlight_helpers.go +++ b/tools/golang/xenlight/xenlight_helpers.go @@ -662,6 +662,18 @@ func (x *VcpuSchedParams) fromC(xc *C.libxl_vcpu_sched= _params) error { func (x *VcpuSchedParams) toC() (xc C.libxl_vcpu_sched_params, err error) { C.libxl_vcpu_sched_params_init(&xc) xc.sched =3D C.libxl_scheduler(x.Sched) + numVcpus :=3D len(x.Vcpus) + xc.vcpus =3D (*C.libxl_sched_params)(C.malloc(C.ulong(numVcpus) * C.sizeo= f_libxl_sched_params)) + xc.num_vcpus =3D C.int(numVcpus) + cVcpus :=3D (*[1 << 28]C.libxl_sched_params)(unsafe.Pointer(xc.vcpus))[:n= umVcpus:numVcpus] + for i, v :=3D range x.Vcpus { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_vcpu_sched_params_dispose(&xc) + return xc, err + } + cVcpus[i] =3D tmp + } return xc, nil } =20 @@ -710,6 +722,13 @@ func (x *VnodeInfo) fromC(xc *C.libxl_vnode_info) erro= r { func (x *VnodeInfo) toC() (xc C.libxl_vnode_info, err error) { C.libxl_vnode_info_init(&xc) xc.memkb =3D C.uint64_t(x.Memkb) + numDistances :=3D len(x.Distances) + xc.distances =3D (*C.uint32_t)(C.malloc(C.size_t(numDistances * numDistan= ces))) + xc.num_distances =3D C.int(numDistances) + cDistances :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.distances))[:num= Distances:numDistances] + for i, v :=3D range x.Distances { + cDistances[i] =3D C.uint32_t(v) + } xc.pnode =3D C.uint32_t(x.Pnode) xc.vcpus, err =3D x.Vcpus.toC() if err !=3D nil { @@ -1096,6 +1115,30 @@ func (x *DomainBuildInfo) toC() (xc C.libxl_domain_b= uild_info, err error) { C.libxl_domain_build_info_dispose(&xc) return xc, err } + numVcpuHardAffinity :=3D len(x.VcpuHardAffinity) + xc.vcpu_hard_affinity =3D (*C.libxl_bitmap)(C.malloc(C.ulong(numVcpuHardA= ffinity) * C.sizeof_libxl_bitmap)) + xc.num_vcpu_hard_affinity =3D C.int(numVcpuHardAffinity) + cVcpuHardAffinity :=3D (*[1 << 28]C.libxl_bitmap)(unsafe.Pointer(xc.vcpu_= hard_affinity))[:numVcpuHardAffinity:numVcpuHardAffinity] + for i, v :=3D range x.VcpuHardAffinity { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_build_info_dispose(&xc) + return xc, err + } + cVcpuHardAffinity[i] =3D tmp + } + numVcpuSoftAffinity :=3D len(x.VcpuSoftAffinity) + xc.vcpu_soft_affinity =3D (*C.libxl_bitmap)(C.malloc(C.ulong(numVcpuSoftA= ffinity) * C.sizeof_libxl_bitmap)) + xc.num_vcpu_soft_affinity =3D C.int(numVcpuSoftAffinity) + cVcpuSoftAffinity :=3D (*[1 << 28]C.libxl_bitmap)(unsafe.Pointer(xc.vcpu_= soft_affinity))[:numVcpuSoftAffinity:numVcpuSoftAffinity] + for i, v :=3D range x.VcpuSoftAffinity { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_build_info_dispose(&xc) + return xc, err + } + cVcpuSoftAffinity[i] =3D tmp + } xc.numa_placement, err =3D x.NumaPlacement.toC() if err !=3D nil { C.libxl_domain_build_info_dispose(&xc) @@ -1125,6 +1168,18 @@ func (x *DomainBuildInfo) toC() (xc C.libxl_domain_b= uild_info, err error) { return xc, err } xc.blkdev_start =3D C.CString(x.BlkdevStart) + numVnumaNodes :=3D len(x.VnumaNodes) + xc.vnuma_nodes =3D (*C.libxl_vnode_info)(C.malloc(C.ulong(numVnumaNodes) = * C.sizeof_libxl_vnode_info)) + xc.num_vnuma_nodes =3D C.int(numVnumaNodes) + cVnumaNodes :=3D (*[1 << 28]C.libxl_vnode_info)(unsafe.Pointer(xc.vnuma_n= odes))[:numVnumaNodes:numVnumaNodes] + for i, v :=3D range x.VnumaNodes { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_build_info_dispose(&xc) + return xc, err + } + cVnumaNodes[i] =3D tmp + } xc.max_grant_frames =3D C.uint32_t(x.MaxGrantFrames) xc.max_maptrack_frames =3D C.uint32_t(x.MaxMaptrackFrames) xc.device_model_version =3D C.libxl_device_model_version(x.DeviceModelVer= sion) @@ -1157,6 +1212,37 @@ func (x *DomainBuildInfo) toC() (xc C.libxl_domain_b= uild_info, err error) { C.libxl_domain_build_info_dispose(&xc) return xc, err } + numIoports :=3D len(x.Ioports) + xc.ioports =3D (*C.libxl_ioport_range)(C.malloc(C.ulong(numIoports) * C.s= izeof_libxl_ioport_range)) + xc.num_ioports =3D C.int(numIoports) + cIoports :=3D (*[1 << 28]C.libxl_ioport_range)(unsafe.Pointer(xc.ioports)= )[:numIoports:numIoports] + for i, v :=3D range x.Ioports { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_build_info_dispose(&xc) + return xc, err + } + cIoports[i] =3D tmp + } + numIrqs :=3D len(x.Irqs) + xc.irqs =3D (*C.uint32_t)(C.malloc(C.size_t(numIrqs * numIrqs))) + xc.num_irqs =3D C.int(numIrqs) + cIrqs :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.irqs))[:numIrqs:numIr= qs] + for i, v :=3D range x.Irqs { + cIrqs[i] =3D C.uint32_t(v) + } + numIomem :=3D len(x.Iomem) + xc.iomem =3D (*C.libxl_iomem_range)(C.malloc(C.ulong(numIomem) * C.sizeof= _libxl_iomem_range)) + xc.num_iomem =3D C.int(numIomem) + cIomem :=3D (*[1 << 28]C.libxl_iomem_range)(unsafe.Pointer(xc.iomem))[:nu= mIomem:numIomem] + for i, v :=3D range x.Iomem { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_build_info_dispose(&xc) + return xc, err + } + cIomem[i] =3D tmp + } xc.claim_mode, err =3D x.ClaimMode.toC() if err !=3D nil { C.libxl_domain_build_info_dispose(&xc) @@ -1983,6 +2069,18 @@ func (x *DeviceVdispl) toC() (xc C.libxl_device_vdis= pl, err error) { xc.backend_domname =3D C.CString(x.BackendDomname) xc.devid =3D C.libxl_devid(x.Devid) xc.be_alloc =3D C.bool(x.BeAlloc) + numConnectors :=3D len(x.Connectors) + xc.connectors =3D (*C.libxl_connector_param)(C.malloc(C.ulong(numConnecto= rs) * C.sizeof_libxl_connector_param)) + xc.num_connectors =3D C.int(numConnectors) + cConnectors :=3D (*[1 << 28]C.libxl_connector_param)(unsafe.Pointer(xc.co= nnectors))[:numConnectors:numConnectors] + for i, v :=3D range x.Connectors { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_device_vdispl_dispose(&xc) + return xc, err + } + cConnectors[i] =3D tmp + } return xc, nil } =20 @@ -2007,6 +2105,20 @@ func (x *VsndParams) fromC(xc *C.libxl_vsnd_params) = error { =20 func (x *VsndParams) toC() (xc C.libxl_vsnd_params, err error) { C.libxl_vsnd_params_init(&xc) + numSampleRates :=3D len(x.SampleRates) + xc.sample_rates =3D (*C.uint32_t)(C.malloc(C.size_t(numSampleRates * numS= ampleRates))) + xc.num_sample_rates =3D C.int(numSampleRates) + cSampleRates :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.sample_rates))= [:numSampleRates:numSampleRates] + for i, v :=3D range x.SampleRates { + cSampleRates[i] =3D C.uint32_t(v) + } + numSampleFormats :=3D len(x.SampleFormats) + xc.sample_formats =3D (*C.libxl_vsnd_pcm_format)(C.malloc(C.size_t(numSam= pleFormats * numSampleFormats))) + xc.num_sample_formats =3D C.int(numSampleFormats) + cSampleFormats :=3D (*[1 << 28]C.libxl_vsnd_pcm_format)(unsafe.Pointer(xc= .sample_formats))[:numSampleFormats:numSampleFormats] + for i, v :=3D range x.SampleFormats { + cSampleFormats[i] =3D C.libxl_vsnd_pcm_format(v) + } xc.channels_min =3D C.uint32_t(x.ChannelsMin) xc.channels_max =3D C.uint32_t(x.ChannelsMax) xc.buffer_size =3D C.uint32_t(x.BufferSize) @@ -2064,6 +2176,18 @@ func (x *VsndPcm) toC() (xc C.libxl_vsnd_pcm, err er= ror) { C.libxl_vsnd_pcm_dispose(&xc) return xc, err } + numVsndStreams :=3D len(x.Streams) + xc.streams =3D (*C.libxl_vsnd_stream)(C.malloc(C.ulong(numVsndStreams) * = C.sizeof_libxl_vsnd_stream)) + xc.num_vsnd_streams =3D C.int(numVsndStreams) + cStreams :=3D (*[1 << 28]C.libxl_vsnd_stream)(unsafe.Pointer(xc.streams))= [:numVsndStreams:numVsndStreams] + for i, v :=3D range x.Streams { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_vsnd_pcm_dispose(&xc) + return xc, err + } + cStreams[i] =3D tmp + } return xc, nil } =20 @@ -2103,6 +2227,18 @@ func (x *DeviceVsnd) toC() (xc C.libxl_device_vsnd, = err error) { C.libxl_device_vsnd_dispose(&xc) return xc, err } + numVsndPcms :=3D len(x.Pcms) + xc.pcms =3D (*C.libxl_vsnd_pcm)(C.malloc(C.ulong(numVsndPcms) * C.sizeof_= libxl_vsnd_pcm)) + xc.num_vsnd_pcms =3D C.int(numVsndPcms) + cPcms :=3D (*[1 << 28]C.libxl_vsnd_pcm)(unsafe.Pointer(xc.pcms))[:numVsnd= Pcms:numVsndPcms] + for i, v :=3D range x.Pcms { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_device_vsnd_dispose(&xc) + return xc, err + } + cPcms[i] =3D tmp + } return xc, nil } =20 @@ -2287,6 +2423,186 @@ func (x *DomainConfig) toC() (xc C.libxl_domain_con= fig, err error) { C.libxl_domain_config_dispose(&xc) return xc, err } + numDisks :=3D len(x.Disks) + xc.disks =3D (*C.libxl_device_disk)(C.malloc(C.ulong(numDisks) * C.sizeof= _libxl_device_disk)) + xc.num_disks =3D C.int(numDisks) + cDisks :=3D (*[1 << 28]C.libxl_device_disk)(unsafe.Pointer(xc.disks))[:nu= mDisks:numDisks] + for i, v :=3D range x.Disks { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cDisks[i] =3D tmp + } + numNics :=3D len(x.Nics) + xc.nics =3D (*C.libxl_device_nic)(C.malloc(C.ulong(numNics) * C.sizeof_li= bxl_device_nic)) + xc.num_nics =3D C.int(numNics) + cNics :=3D (*[1 << 28]C.libxl_device_nic)(unsafe.Pointer(xc.nics))[:numNi= cs:numNics] + for i, v :=3D range x.Nics { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cNics[i] =3D tmp + } + numPcidevs :=3D len(x.Pcidevs) + xc.pcidevs =3D (*C.libxl_device_pci)(C.malloc(C.ulong(numPcidevs) * C.siz= eof_libxl_device_pci)) + xc.num_pcidevs =3D C.int(numPcidevs) + cPcidevs :=3D (*[1 << 28]C.libxl_device_pci)(unsafe.Pointer(xc.pcidevs))[= :numPcidevs:numPcidevs] + for i, v :=3D range x.Pcidevs { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cPcidevs[i] =3D tmp + } + numRdms :=3D len(x.Rdms) + xc.rdms =3D (*C.libxl_device_rdm)(C.malloc(C.ulong(numRdms) * C.sizeof_li= bxl_device_rdm)) + xc.num_rdms =3D C.int(numRdms) + cRdms :=3D (*[1 << 28]C.libxl_device_rdm)(unsafe.Pointer(xc.rdms))[:numRd= ms:numRdms] + for i, v :=3D range x.Rdms { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cRdms[i] =3D tmp + } + numDtdevs :=3D len(x.Dtdevs) + xc.dtdevs =3D (*C.libxl_device_dtdev)(C.malloc(C.ulong(numDtdevs) * C.siz= eof_libxl_device_dtdev)) + xc.num_dtdevs =3D C.int(numDtdevs) + cDtdevs :=3D (*[1 << 28]C.libxl_device_dtdev)(unsafe.Pointer(xc.dtdevs))[= :numDtdevs:numDtdevs] + for i, v :=3D range x.Dtdevs { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cDtdevs[i] =3D tmp + } + numVfbs :=3D len(x.Vfbs) + xc.vfbs =3D (*C.libxl_device_vfb)(C.malloc(C.ulong(numVfbs) * C.sizeof_li= bxl_device_vfb)) + xc.num_vfbs =3D C.int(numVfbs) + cVfbs :=3D (*[1 << 28]C.libxl_device_vfb)(unsafe.Pointer(xc.vfbs))[:numVf= bs:numVfbs] + for i, v :=3D range x.Vfbs { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cVfbs[i] =3D tmp + } + numVkbs :=3D len(x.Vkbs) + xc.vkbs =3D (*C.libxl_device_vkb)(C.malloc(C.ulong(numVkbs) * C.sizeof_li= bxl_device_vkb)) + xc.num_vkbs =3D C.int(numVkbs) + cVkbs :=3D (*[1 << 28]C.libxl_device_vkb)(unsafe.Pointer(xc.vkbs))[:numVk= bs:numVkbs] + for i, v :=3D range x.Vkbs { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cVkbs[i] =3D tmp + } + numVtpms :=3D len(x.Vtpms) + xc.vtpms =3D (*C.libxl_device_vtpm)(C.malloc(C.ulong(numVtpms) * C.sizeof= _libxl_device_vtpm)) + xc.num_vtpms =3D C.int(numVtpms) + cVtpms :=3D (*[1 << 28]C.libxl_device_vtpm)(unsafe.Pointer(xc.vtpms))[:nu= mVtpms:numVtpms] + for i, v :=3D range x.Vtpms { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cVtpms[i] =3D tmp + } + numP9S :=3D len(x.P9S) + xc.p9s =3D (*C.libxl_device_p9)(C.malloc(C.ulong(numP9S) * C.sizeof_libxl= _device_p9)) + xc.num_p9s =3D C.int(numP9S) + cP9S :=3D (*[1 << 28]C.libxl_device_p9)(unsafe.Pointer(xc.p9s))[:numP9S:n= umP9S] + for i, v :=3D range x.P9S { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cP9S[i] =3D tmp + } + numPvcallsifs :=3D len(x.Pvcallsifs) + xc.pvcallsifs =3D (*C.libxl_device_pvcallsif)(C.malloc(C.ulong(numPvcalls= ifs) * C.sizeof_libxl_device_pvcallsif)) + xc.num_pvcallsifs =3D C.int(numPvcallsifs) + cPvcallsifs :=3D (*[1 << 28]C.libxl_device_pvcallsif)(unsafe.Pointer(xc.p= vcallsifs))[:numPvcallsifs:numPvcallsifs] + for i, v :=3D range x.Pvcallsifs { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cPvcallsifs[i] =3D tmp + } + numVdispls :=3D len(x.Vdispls) + xc.vdispls =3D (*C.libxl_device_vdispl)(C.malloc(C.ulong(numVdispls) * C.= sizeof_libxl_device_vdispl)) + xc.num_vdispls =3D C.int(numVdispls) + cVdispls :=3D (*[1 << 28]C.libxl_device_vdispl)(unsafe.Pointer(xc.vdispls= ))[:numVdispls:numVdispls] + for i, v :=3D range x.Vdispls { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cVdispls[i] =3D tmp + } + numVsnds :=3D len(x.Vsnds) + xc.vsnds =3D (*C.libxl_device_vsnd)(C.malloc(C.ulong(numVsnds) * C.sizeof= _libxl_device_vsnd)) + xc.num_vsnds =3D C.int(numVsnds) + cVsnds :=3D (*[1 << 28]C.libxl_device_vsnd)(unsafe.Pointer(xc.vsnds))[:nu= mVsnds:numVsnds] + for i, v :=3D range x.Vsnds { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cVsnds[i] =3D tmp + } + numChannels :=3D len(x.Channels) + xc.channels =3D (*C.libxl_device_channel)(C.malloc(C.ulong(numChannels) *= C.sizeof_libxl_device_channel)) + xc.num_channels =3D C.int(numChannels) + cChannels :=3D (*[1 << 28]C.libxl_device_channel)(unsafe.Pointer(xc.chann= els))[:numChannels:numChannels] + for i, v :=3D range x.Channels { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cChannels[i] =3D tmp + } + numUsbctrls :=3D len(x.Usbctrls) + xc.usbctrls =3D (*C.libxl_device_usbctrl)(C.malloc(C.ulong(numUsbctrls) *= C.sizeof_libxl_device_usbctrl)) + xc.num_usbctrls =3D C.int(numUsbctrls) + cUsbctrls :=3D (*[1 << 28]C.libxl_device_usbctrl)(unsafe.Pointer(xc.usbct= rls))[:numUsbctrls:numUsbctrls] + for i, v :=3D range x.Usbctrls { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cUsbctrls[i] =3D tmp + } + numUsbdevs :=3D len(x.Usbdevs) + xc.usbdevs =3D (*C.libxl_device_usbdev)(C.malloc(C.ulong(numUsbdevs) * C.= sizeof_libxl_device_usbdev)) + xc.num_usbdevs =3D C.int(numUsbdevs) + cUsbdevs :=3D (*[1 << 28]C.libxl_device_usbdev)(unsafe.Pointer(xc.usbdevs= ))[:numUsbdevs:numUsbdevs] + for i, v :=3D range x.Usbdevs { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_domain_config_dispose(&xc) + return xc, err + } + cUsbdevs[i] =3D tmp + } xc.on_poweroff =3D C.libxl_action_on_shutdown(x.OnPoweroff) xc.on_reboot =3D C.libxl_action_on_shutdown(x.OnReboot) xc.on_watchdog =3D C.libxl_action_on_shutdown(x.OnWatchdog) @@ -2566,6 +2882,18 @@ func (x *Vdisplinfo) toC() (xc C.libxl_vdisplinfo, e= rr error) { xc.devid =3D C.libxl_devid(x.Devid) xc.state =3D C.int(x.State) xc.be_alloc =3D C.bool(x.BeAlloc) + numConnectors :=3D len(x.Connectors) + xc.connectors =3D (*C.libxl_connectorinfo)(C.malloc(C.ulong(numConnectors= ) * C.sizeof_libxl_connectorinfo)) + xc.num_connectors =3D C.int(numConnectors) + cConnectors :=3D (*[1 << 28]C.libxl_connectorinfo)(unsafe.Pointer(xc.conn= ectors))[:numConnectors:numConnectors] + for i, v :=3D range x.Connectors { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_vdisplinfo_dispose(&xc) + return xc, err + } + cConnectors[i] =3D tmp + } return xc, nil } =20 @@ -2598,6 +2926,18 @@ func (x *Pcminfo) fromC(xc *C.libxl_pcminfo) error { =20 func (x *Pcminfo) toC() (xc C.libxl_pcminfo, err error) { C.libxl_pcminfo_init(&xc) + numVsndStreams :=3D len(x.Streams) + xc.streams =3D (*C.libxl_streaminfo)(C.malloc(C.ulong(numVsndStreams) * C= .sizeof_libxl_streaminfo)) + xc.num_vsnd_streams =3D C.int(numVsndStreams) + cStreams :=3D (*[1 << 28]C.libxl_streaminfo)(unsafe.Pointer(xc.streams))[= :numVsndStreams:numVsndStreams] + for i, v :=3D range x.Streams { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_pcminfo_dispose(&xc) + return xc, err + } + cStreams[i] =3D tmp + } return xc, nil } =20 @@ -2629,6 +2969,18 @@ func (x *Vsndinfo) toC() (xc C.libxl_vsndinfo, err e= rror) { xc.frontend_id =3D C.uint32_t(x.FrontendId) xc.devid =3D C.libxl_devid(x.Devid) xc.state =3D C.int(x.State) + numVsndPcms :=3D len(x.Pcms) + xc.pcms =3D (*C.libxl_pcminfo)(C.malloc(C.ulong(numVsndPcms) * C.sizeof_l= ibxl_pcminfo)) + xc.num_vsnd_pcms =3D C.int(numVsndPcms) + cPcms :=3D (*[1 << 28]C.libxl_pcminfo)(unsafe.Pointer(xc.pcms))[:numVsndP= cms:numVsndPcms] + for i, v :=3D range x.Pcms { + tmp, err :=3D v.toC() + if err !=3D nil { + C.libxl_vsndinfo_dispose(&xc) + return xc, err + } + cPcms[i] =3D tmp + } return xc, nil } =20 @@ -2673,6 +3025,13 @@ func (x *Numainfo) toC() (xc C.libxl_numainfo, err e= rror) { C.libxl_numainfo_init(&xc) xc.size =3D C.uint64_t(x.Size) xc.free =3D C.uint64_t(x.Free) + numDists :=3D len(x.Dists) + xc.dists =3D (*C.uint32_t)(C.malloc(C.size_t(numDists * numDists))) + xc.num_dists =3D C.int(numDists) + cDists :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.dists))[:numDists:nu= mDists] + for i, v :=3D range x.Dists { + cDists[i] =3D C.uint32_t(v) + } return xc, nil } =20 --=20 2.19.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel