From nobody Tue Nov 11 07:31:03 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=1570461354; cv=none; d=zoho.com; s=zohoarc; b=dmaTsO6qhFFzCZ/OUCuczeS0yi8xbMVPwylDGn8dLk2532Bq4jqj0OCdbZqc1c9B6Q3A63owKH2iZLY5jTWDdFSbFmO7px3Zn4p0NlsJxwhuN2tbyrgDg3xAlnMj2pGy9uQ9FXpWpF/rZtxxAF9617PP11iCfmNrxH1Q5LPZrUQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570461354; 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=DiDWFn2c3bsOe7FUZMKfhFQgySBCUtyrtiXytjqNUrc=; b=k9hfAGaSbbgZNZrgOZDWBzpgqkXbLxrRSe6eSOIedsMCrIzHXBxyOSpX6F2v9HPruh9bqLdpoN9AGxlrIYNeG8MfwqstaGLDXlvvtQQErgzC6o6EuUMFjq0/RX0lBgPzb/1W7nIo6vBoD375K5fZDKh4NVbwwYH6K8lPF3h3Pn0= 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 1570461354198291.8046717107097; Mon, 7 Oct 2019 08:15:54 -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 1iHUil-0007Yn-Nq; Mon, 07 Oct 2019 15:14:47 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iHUik-0007Xn-Pa for xen-devel@lists.xenproject.org; Mon, 07 Oct 2019 15:14:46 +0000 Received: from mail-qk1-x732.google.com (unknown [2607:f8b0:4864:20::732]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 09b4cb14-e915-11e9-80e3-bc764e2007e4; Mon, 07 Oct 2019 15:13:37 +0000 (UTC) Received: by mail-qk1-x732.google.com with SMTP id z67so12870762qkb.12 for ; Mon, 07 Oct 2019 08:13:37 -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.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Oct 2019 08:13:36 -0700 (PDT) X-Inumbo-ID: 09b4cb14-e915-11e9-80e3-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=2Mq8gnqYu6RvzZZ4Dv6t9X9maxsR1srlDfTSM9jGW7Q=; b=OpENF7qEKrFeEL7WT8v2ehLIoWRAW4kbstAzmOhZDIkQLqowecFAWJNVjvFA9x/wBP rdpQKS2S8nWQWe1Sv2/GgvMSMx7mhdAPvU5QoW2+3dSNOica3IvbMkozUCS5R0+AatWQ uAeX0LAJ7JDxOuv7lHiL7laP3RjUCr+6rXLeoovJpNQ4lKRGfn+Knb9Hyrcm/3oeEiLs oEinaMfIoc90cJWzGkr7xIazAR2guWfbwV6DXDqLPN10Yq/zQB3FUSyLwlBb9DYDeVr/ y6HgI5LzHYqJ5aXUPcveczl7d4o2I+dNPtno6EgoRLtE2N1j7CLWJEfMMnImopaOrBnX 5jvw== 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=2Mq8gnqYu6RvzZZ4Dv6t9X9maxsR1srlDfTSM9jGW7Q=; b=E338YNQl9pppEG6r/E0rQYPg3jojtduckRLnE+5qiHxf3BAj/NoAzUHqeG6P9uV+nB muDPvfq+eKHQk7Cmt5VNnLhyxYieWX3n+6fabTlgsl8pxY2ytHLXl+y/rcrVxBUv2P+0 cA8pxYJS1Px2ujDrWtB5j+tI+e0XklAT3HMGazph2HTGz/ZdkMSZJnjblscGv6iB1HIW /K77ABwNAkTiii8SGmI0L5FEo/rzjkyn/b3wg6s/tuuZB/kZCbWnhoEa2ofxk3rD8fGo KjxgzGIUfykzif9z9b4DD1487G4UYjPPDX1m/99g6BScMeN+bShx+hTZ51UFzXFXuI/v 1GdQ== X-Gm-Message-State: APjAAAUrDe/kvOA+5Udj9Eo6b5i6zzJJM2Z/BJGn/7tyZZI7+ufFWndm UTfnjiZ0ycZXlfU3DcdQabu2Wz08 X-Google-Smtp-Source: APXvYqymMQd3lnDTI8TCz1bPudeUNG910LHgtmoYO81IRZjlnQwbP5r7aAjrPVJZircRkQhGw1iBaQ== X-Received: by 2002:a05:620a:1307:: with SMTP id o7mr24107875qkj.165.1570461217065; Mon, 07 Oct 2019 08:13:37 -0700 (PDT) From: Nick Rosbrook To: xen-devel@lists.xenproject.org Date: Mon, 7 Oct 2019 11:13:05 -0400 Message-Id: <006339543b7f837eee549482a20e8521e6f8ec4b.1570456846.git.rosbrookn@ainfosec.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH 18/24] golang/xenlight: implement array C to Go 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 | 39 ++- tools/golang/xenlight/xenlight_helpers.go | 300 ++++++++++++++++++++++ 2 files changed, 338 insertions(+), 1 deletion(-) diff --git a/tools/golang/xenlight/gengotypes.py b/tools/golang/xenlight/ge= ngotypes.py index ececaafd72..2b620f0ae9 100644 --- a/tools/golang/xenlight/gengotypes.py +++ b/tools/golang/xenlight/gengotypes.py @@ -257,7 +257,7 @@ def xenlight_golang_define_from_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_from_C(f) continue =20 gotypename =3D xenlight_golang_fmt_name(f.type.typename) @@ -420,6 +420,43 @@ def xenlight_golang_union_fields_from_C(ty =3D None): =20 return s =20 +def xenlight_golang_array_from_C(ty =3D None): + """ + Convert C array to Go slice using the method + described here: + + https://github.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices + """ + 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 + cslice =3D 'c{}'.format(goname) + clenvar =3D ty.type.lenvar.name + golenvar =3D xenlight_golang_fmt_name(clenvar,exported=3DFalse) + + s +=3D '{} :=3D int(xc.{})\n'.format(golenvar, clenvar) + s +=3D '{} :=3D '.format(cslice) + s +=3D'(*[1<<28]C.{})(unsafe.Pointer(xc.{}))[:{}:{}]\n'.format(ctypena= me, cname, + golenvar, = golenvar) + s +=3D 'x.{} =3D make([]{}, {})\n'.format(goname, gotypename, golenvar) + s +=3D 'for i, v :=3D range {} {{\n'.format(cslice) + + is_enum =3D isinstance(ty.type.elem_type,idl.Enumeration) + if gotypename in go_builtin_types or is_enum: + s +=3D 'x.{}[i] =3D {}(v)\n'.format(goname, gotypename) + else: + s +=3D 'var e {}\n'.format(gotypename) + s +=3D 'if err :=3D e.fromC(&v); err !=3D nil {\n' + s +=3D 'return err }\n' + s +=3D 'x.{}[i] =3D e\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 b8abef8068..2cdc1bbdc9 100644 --- a/tools/golang/xenlight/xenlight_helpers.go +++ b/tools/golang/xenlight/xenlight_helpers.go @@ -382,6 +382,16 @@ func (x *SchedParams) fromC(xc *C.libxl_sched_params) = error { =20 func (x *VcpuSchedParams) fromC(xc *C.libxl_vcpu_sched_params) error { x.Sched =3D Scheduler(xc.sched) + numVcpus :=3D int(xc.num_vcpus) + cVcpus :=3D (*[1 << 28]C.libxl_sched_params)(unsafe.Pointer(xc.vcpus))[:n= umVcpus:numVcpus] + x.Vcpus =3D make([]SchedParams, numVcpus) + for i, v :=3D range cVcpus { + var e SchedParams + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Vcpus[i] =3D e + } return nil } =20 @@ -399,6 +409,12 @@ func (x *DomainSchedParams) fromC(xc *C.libxl_domain_s= ched_params) error { =20 func (x *VnodeInfo) fromC(xc *C.libxl_vnode_info) error { x.Memkb =3D uint64(xc.memkb) + numDistances :=3D int(xc.num_distances) + cDistances :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.distances))[:num= Distances:numDistances] + x.Distances =3D make([]uint32, numDistances) + for i, v :=3D range cDistances { + x.Distances[i] =3D uint32(v) + } x.Pnode =3D uint32(xc.pnode) var bitmapVcpus Bitmap if err :=3D bitmapVcpus.fromC(&xc.vcpus); err !=3D nil { @@ -431,6 +447,26 @@ func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_bui= ld_info) error { return err } x.Nodemap =3D bitmapNodemap + numVcpuHardAffinity :=3D int(xc.num_vcpu_hard_affinity) + cVcpuHardAffinity :=3D (*[1 << 28]C.libxl_bitmap)(unsafe.Pointer(xc.vcpu_= hard_affinity))[:numVcpuHardAffinity:numVcpuHardAffinity] + x.VcpuHardAffinity =3D make([]Bitmap, numVcpuHardAffinity) + for i, v :=3D range cVcpuHardAffinity { + var e Bitmap + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.VcpuHardAffinity[i] =3D e + } + numVcpuSoftAffinity :=3D int(xc.num_vcpu_soft_affinity) + cVcpuSoftAffinity :=3D (*[1 << 28]C.libxl_bitmap)(unsafe.Pointer(xc.vcpu_= soft_affinity))[:numVcpuSoftAffinity:numVcpuSoftAffinity] + x.VcpuSoftAffinity =3D make([]Bitmap, numVcpuSoftAffinity) + for i, v :=3D range cVcpuSoftAffinity { + var e Bitmap + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.VcpuSoftAffinity[i] =3D e + } var defboolNumaPlacement Defbool if err :=3D defboolNumaPlacement.fromC(&xc.numa_placement); err !=3D nil { return err @@ -460,6 +496,16 @@ func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_bui= ld_info) error { } x.Cpuid =3D cpuidPolicyListCpuid x.BlkdevStart =3D C.GoString(xc.blkdev_start) + numVnumaNodes :=3D int(xc.num_vnuma_nodes) + cVnumaNodes :=3D (*[1 << 28]C.libxl_vnode_info)(unsafe.Pointer(xc.vnuma_n= odes))[:numVnumaNodes:numVnumaNodes] + x.VnumaNodes =3D make([]VnodeInfo, numVnumaNodes) + for i, v :=3D range cVnumaNodes { + var e VnodeInfo + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.VnumaNodes[i] =3D e + } x.MaxGrantFrames =3D uint32(xc.max_grant_frames) x.MaxMaptrackFrames =3D uint32(xc.max_maptrack_frames) x.DeviceModelVersion =3D DeviceModelVersion(xc.device_model_version) @@ -492,6 +538,32 @@ func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_bui= ld_info) error { return err } x.SchedParams =3D domainSchedParamsSchedParams + numIoports :=3D int(xc.num_ioports) + cIoports :=3D (*[1 << 28]C.libxl_ioport_range)(unsafe.Pointer(xc.ioports)= )[:numIoports:numIoports] + x.Ioports =3D make([]IoportRange, numIoports) + for i, v :=3D range cIoports { + var e IoportRange + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Ioports[i] =3D e + } + numIrqs :=3D int(xc.num_irqs) + cIrqs :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.irqs))[:numIrqs:numIr= qs] + x.Irqs =3D make([]uint32, numIrqs) + for i, v :=3D range cIrqs { + x.Irqs[i] =3D uint32(v) + } + numIomem :=3D int(xc.num_iomem) + cIomem :=3D (*[1 << 28]C.libxl_iomem_range)(unsafe.Pointer(xc.iomem))[:nu= mIomem:numIomem] + x.Iomem =3D make([]IomemRange, numIomem) + for i, v :=3D range cIomem { + var e IomemRange + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Iomem[i] =3D e + } var defboolClaimMode Defbool if err :=3D defboolClaimMode.fromC(&xc.claim_mode); err !=3D nil { return err @@ -982,10 +1054,32 @@ func (x *DeviceVdispl) fromC(xc *C.libxl_device_vdis= pl) error { x.BackendDomname =3D C.GoString(xc.backend_domname) x.Devid =3D Devid(xc.devid) x.BeAlloc =3D bool(xc.be_alloc) + numConnectors :=3D int(xc.num_connectors) + cConnectors :=3D (*[1 << 28]C.libxl_connector_param)(unsafe.Pointer(xc.co= nnectors))[:numConnectors:numConnectors] + x.Connectors =3D make([]ConnectorParam, numConnectors) + for i, v :=3D range cConnectors { + var e ConnectorParam + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Connectors[i] =3D e + } return nil } =20 func (x *VsndParams) fromC(xc *C.libxl_vsnd_params) error { + numSampleRates :=3D int(xc.num_sample_rates) + cSampleRates :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.sample_rates))= [:numSampleRates:numSampleRates] + x.SampleRates =3D make([]uint32, numSampleRates) + for i, v :=3D range cSampleRates { + x.SampleRates[i] =3D uint32(v) + } + numSampleFormats :=3D int(xc.num_sample_formats) + cSampleFormats :=3D (*[1 << 28]C.libxl_vsnd_pcm_format)(unsafe.Pointer(xc= .sample_formats))[:numSampleFormats:numSampleFormats] + x.SampleFormats =3D make([]VsndPcmFormat, numSampleFormats) + for i, v :=3D range cSampleFormats { + x.SampleFormats[i] =3D VsndPcmFormat(v) + } x.ChannelsMin =3D uint32(xc.channels_min) x.ChannelsMax =3D uint32(xc.channels_max) x.BufferSize =3D uint32(xc.buffer_size) @@ -1010,6 +1104,16 @@ func (x *VsndPcm) fromC(xc *C.libxl_vsnd_pcm) error { return err } x.Params =3D vsndParamsParams + numVsndStreams :=3D int(xc.num_vsnd_streams) + cStreams :=3D (*[1 << 28]C.libxl_vsnd_stream)(unsafe.Pointer(xc.streams))= [:numVsndStreams:numVsndStreams] + x.Streams =3D make([]VsndStream, numVsndStreams) + for i, v :=3D range cStreams { + var e VsndStream + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Streams[i] =3D e + } return nil } =20 @@ -1024,6 +1128,16 @@ func (x *DeviceVsnd) fromC(xc *C.libxl_device_vsnd) = error { return err } x.Params =3D vsndParamsParams + numVsndPcms :=3D int(xc.num_vsnd_pcms) + cPcms :=3D (*[1 << 28]C.libxl_vsnd_pcm)(unsafe.Pointer(xc.pcms))[:numVsnd= Pcms:numVsndPcms] + x.Pcms =3D make([]VsndPcm, numVsndPcms) + for i, v :=3D range cPcms { + var e VsndPcm + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Pcms[i] =3D e + } return nil } =20 @@ -1038,6 +1152,156 @@ func (x *DomainConfig) fromC(xc *C.libxl_domain_con= fig) error { return err } x.BInfo =3D domainBuildInfoBInfo + numDisks :=3D int(xc.num_disks) + cDisks :=3D (*[1 << 28]C.libxl_device_disk)(unsafe.Pointer(xc.disks))[:nu= mDisks:numDisks] + x.Disks =3D make([]DeviceDisk, numDisks) + for i, v :=3D range cDisks { + var e DeviceDisk + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Disks[i] =3D e + } + numNics :=3D int(xc.num_nics) + cNics :=3D (*[1 << 28]C.libxl_device_nic)(unsafe.Pointer(xc.nics))[:numNi= cs:numNics] + x.Nics =3D make([]DeviceNic, numNics) + for i, v :=3D range cNics { + var e DeviceNic + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Nics[i] =3D e + } + numPcidevs :=3D int(xc.num_pcidevs) + cPcidevs :=3D (*[1 << 28]C.libxl_device_pci)(unsafe.Pointer(xc.pcidevs))[= :numPcidevs:numPcidevs] + x.Pcidevs =3D make([]DevicePci, numPcidevs) + for i, v :=3D range cPcidevs { + var e DevicePci + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Pcidevs[i] =3D e + } + numRdms :=3D int(xc.num_rdms) + cRdms :=3D (*[1 << 28]C.libxl_device_rdm)(unsafe.Pointer(xc.rdms))[:numRd= ms:numRdms] + x.Rdms =3D make([]DeviceRdm, numRdms) + for i, v :=3D range cRdms { + var e DeviceRdm + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Rdms[i] =3D e + } + numDtdevs :=3D int(xc.num_dtdevs) + cDtdevs :=3D (*[1 << 28]C.libxl_device_dtdev)(unsafe.Pointer(xc.dtdevs))[= :numDtdevs:numDtdevs] + x.Dtdevs =3D make([]DeviceDtdev, numDtdevs) + for i, v :=3D range cDtdevs { + var e DeviceDtdev + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Dtdevs[i] =3D e + } + numVfbs :=3D int(xc.num_vfbs) + cVfbs :=3D (*[1 << 28]C.libxl_device_vfb)(unsafe.Pointer(xc.vfbs))[:numVf= bs:numVfbs] + x.Vfbs =3D make([]DeviceVfb, numVfbs) + for i, v :=3D range cVfbs { + var e DeviceVfb + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Vfbs[i] =3D e + } + numVkbs :=3D int(xc.num_vkbs) + cVkbs :=3D (*[1 << 28]C.libxl_device_vkb)(unsafe.Pointer(xc.vkbs))[:numVk= bs:numVkbs] + x.Vkbs =3D make([]DeviceVkb, numVkbs) + for i, v :=3D range cVkbs { + var e DeviceVkb + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Vkbs[i] =3D e + } + numVtpms :=3D int(xc.num_vtpms) + cVtpms :=3D (*[1 << 28]C.libxl_device_vtpm)(unsafe.Pointer(xc.vtpms))[:nu= mVtpms:numVtpms] + x.Vtpms =3D make([]DeviceVtpm, numVtpms) + for i, v :=3D range cVtpms { + var e DeviceVtpm + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Vtpms[i] =3D e + } + numP9S :=3D int(xc.num_p9s) + cP9S :=3D (*[1 << 28]C.libxl_device_p9)(unsafe.Pointer(xc.p9s))[:numP9S:n= umP9S] + x.P9S =3D make([]DeviceP9, numP9S) + for i, v :=3D range cP9S { + var e DeviceP9 + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.P9S[i] =3D e + } + numPvcallsifs :=3D int(xc.num_pvcallsifs) + cPvcallsifs :=3D (*[1 << 28]C.libxl_device_pvcallsif)(unsafe.Pointer(xc.p= vcallsifs))[:numPvcallsifs:numPvcallsifs] + x.Pvcallsifs =3D make([]DevicePvcallsif, numPvcallsifs) + for i, v :=3D range cPvcallsifs { + var e DevicePvcallsif + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Pvcallsifs[i] =3D e + } + numVdispls :=3D int(xc.num_vdispls) + cVdispls :=3D (*[1 << 28]C.libxl_device_vdispl)(unsafe.Pointer(xc.vdispls= ))[:numVdispls:numVdispls] + x.Vdispls =3D make([]DeviceVdispl, numVdispls) + for i, v :=3D range cVdispls { + var e DeviceVdispl + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Vdispls[i] =3D e + } + numVsnds :=3D int(xc.num_vsnds) + cVsnds :=3D (*[1 << 28]C.libxl_device_vsnd)(unsafe.Pointer(xc.vsnds))[:nu= mVsnds:numVsnds] + x.Vsnds =3D make([]DeviceVsnd, numVsnds) + for i, v :=3D range cVsnds { + var e DeviceVsnd + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Vsnds[i] =3D e + } + numChannels :=3D int(xc.num_channels) + cChannels :=3D (*[1 << 28]C.libxl_device_channel)(unsafe.Pointer(xc.chann= els))[:numChannels:numChannels] + x.Channels =3D make([]DeviceChannel, numChannels) + for i, v :=3D range cChannels { + var e DeviceChannel + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Channels[i] =3D e + } + numUsbctrls :=3D int(xc.num_usbctrls) + cUsbctrls :=3D (*[1 << 28]C.libxl_device_usbctrl)(unsafe.Pointer(xc.usbct= rls))[:numUsbctrls:numUsbctrls] + x.Usbctrls =3D make([]DeviceUsbctrl, numUsbctrls) + for i, v :=3D range cUsbctrls { + var e DeviceUsbctrl + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Usbctrls[i] =3D e + } + numUsbdevs :=3D int(xc.num_usbdevs) + cUsbdevs :=3D (*[1 << 28]C.libxl_device_usbdev)(unsafe.Pointer(xc.usbdevs= ))[:numUsbdevs:numUsbdevs] + x.Usbdevs =3D make([]DeviceUsbdev, numUsbdevs) + for i, v :=3D range cUsbdevs { + var e DeviceUsbdev + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Usbdevs[i] =3D e + } x.OnPoweroff =3D ActionOnShutdown(xc.on_poweroff) x.OnReboot =3D ActionOnShutdown(xc.on_reboot) x.OnWatchdog =3D ActionOnShutdown(xc.on_watchdog) @@ -1171,6 +1435,16 @@ func (x *Vdisplinfo) fromC(xc *C.libxl_vdisplinfo) e= rror { x.Devid =3D Devid(xc.devid) x.State =3D int(xc.state) x.BeAlloc =3D bool(xc.be_alloc) + numConnectors :=3D int(xc.num_connectors) + cConnectors :=3D (*[1 << 28]C.libxl_connectorinfo)(unsafe.Pointer(xc.conn= ectors))[:numConnectors:numConnectors] + x.Connectors =3D make([]Connectorinfo, numConnectors) + for i, v :=3D range cConnectors { + var e Connectorinfo + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Connectors[i] =3D e + } return nil } =20 @@ -1181,6 +1455,16 @@ func (x *Streaminfo) fromC(xc *C.libxl_streaminfo) e= rror { } =20 func (x *Pcminfo) fromC(xc *C.libxl_pcminfo) error { + numVsndStreams :=3D int(xc.num_vsnd_streams) + cStreams :=3D (*[1 << 28]C.libxl_streaminfo)(unsafe.Pointer(xc.streams))[= :numVsndStreams:numVsndStreams] + x.Streams =3D make([]Streaminfo, numVsndStreams) + for i, v :=3D range cStreams { + var e Streaminfo + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Streams[i] =3D e + } return nil } =20 @@ -1191,6 +1475,16 @@ func (x *Vsndinfo) fromC(xc *C.libxl_vsndinfo) error= { x.FrontendId =3D uint32(xc.frontend_id) x.Devid =3D Devid(xc.devid) x.State =3D int(xc.state) + numVsndPcms :=3D int(xc.num_vsnd_pcms) + cPcms :=3D (*[1 << 28]C.libxl_pcminfo)(unsafe.Pointer(xc.pcms))[:numVsndP= cms:numVsndPcms] + x.Pcms =3D make([]Pcminfo, numVsndPcms) + for i, v :=3D range cPcms { + var e Pcminfo + if err :=3D e.fromC(&v); err !=3D nil { + return err + } + x.Pcms[i] =3D e + } return nil } =20 @@ -1209,6 +1503,12 @@ func (x *Vkbinfo) fromC(xc *C.libxl_vkbinfo) error { func (x *Numainfo) fromC(xc *C.libxl_numainfo) error { x.Size =3D uint64(xc.size) x.Free =3D uint64(xc.free) + numDists :=3D int(xc.num_dists) + cDists :=3D (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.dists))[:numDists:nu= mDists] + x.Dists =3D make([]uint32, numDists) + for i, v :=3D range cDists { + x.Dists[i] =3D uint32(v) + } return nil } =20 --=20 2.19.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel