All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nick Rosbrook <rosbrookn@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Nick Rosbrook <rosbrookn@ainfosec.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	kerriganb@ainfosec.com, George Dunlap <george.dunlap@citrix.com>,
	Wei Liu <wl@xen.org>
Subject: [Xen-devel] [PATCH v3 17/22] golang/xenlight: implement array C to Go marshaling
Date: Tue, 10 Dec 2019 10:47:32 -0500	[thread overview]
Message-ID: <67ce148341ae0823584777d15b0c6c4e6c74bddd.1575990937.git.rosbrookn@ainfosec.com> (raw)
In-Reply-To: <cover.1575990937.git.rosbrookn@ainfosec.com>

From: Nick Rosbrook <rosbrookn@ainfosec.com>

Signed-off-by: Nick Rosbrook <rosbrookn@ainfosec.com>
---
 tools/golang/xenlight/gengotypes.py  |  39 +++-
 tools/golang/xenlight/helpers.gen.go | 300 +++++++++++++++++++++++++++
 2 files changed, 338 insertions(+), 1 deletion(-)

diff --git a/tools/golang/xenlight/gengotypes.py b/tools/golang/xenlight/gengotypes.py
index b68c1aa66b..ee9aaf9eff 100644
--- a/tools/golang/xenlight/gengotypes.py
+++ b/tools/golang/xenlight/gengotypes.py
@@ -252,7 +252,7 @@ def xenlight_golang_define_from_C(ty = None):
     for f in ty.fields:
         if f.type.typename is not None:
             if isinstance(f.type, idl.Array):
-                # TODO
+                body += xenlight_golang_array_from_C(f)
                 continue
 
             body += xenlight_golang_convert_from_C(f)
@@ -399,6 +399,43 @@ def xenlight_golang_union_from_C(ty = None, union_name = '', struct_name = ''):
 
     return (s,extras)
 
+def xenlight_golang_array_from_C(ty = 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 = ''
+
+    gotypename = xenlight_golang_fmt_name(ty.type.elem_type.typename)
+    goname     = xenlight_golang_fmt_name(ty.name)
+    ctypename  = ty.type.elem_type.typename
+    cname      = ty.name
+    cslice     = 'c{}'.format(goname)
+    clenvar    = ty.type.lenvar.name
+    golenvar   = xenlight_golang_fmt_name(clenvar,exported=False)
+
+    s += '{} := int(xc.{})\n'.format(golenvar, clenvar)
+    s += '{} := '.format(cslice)
+    s +='(*[1<<28]C.{})(unsafe.Pointer(xc.{}))[:{}:{}]\n'.format(ctypename, cname,
+                                                                golenvar, golenvar)
+    s += 'x.{} = make([]{}, {})\n'.format(goname, gotypename, golenvar)
+    s += 'for i, v := range {} {{\n'.format(cslice)
+
+    is_enum = isinstance(ty.type.elem_type,idl.Enumeration)
+    if gotypename in go_builtin_types or is_enum:
+        s += 'x.{}[i] = {}(v)\n'.format(goname, gotypename)
+    else:
+        s += 'var e {}\n'.format(gotypename)
+        s += 'if err := e.fromC(&v); err != nil {\n'
+        s += 'return err }\n'
+        s += 'x.{}[i] = e\n'.format(goname)
+
+    s += '}\n'
+
+    return s
+
 def xenlight_golang_fmt_name(name, exported = True):
     """
     Take a given type name and return an
diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go
index e6eee234c0..2f917cac58 100644
--- a/tools/golang/xenlight/helpers.gen.go
+++ b/tools/golang/xenlight/helpers.gen.go
@@ -263,6 +263,16 @@ func (x *SchedParams) fromC(xc *C.libxl_sched_params) error {
 
 func (x *VcpuSchedParams) fromC(xc *C.libxl_vcpu_sched_params) error {
 	x.Sched = Scheduler(xc.sched)
+	numVcpus := int(xc.num_vcpus)
+	cVcpus := (*[1 << 28]C.libxl_sched_params)(unsafe.Pointer(xc.vcpus))[:numVcpus:numVcpus]
+	x.Vcpus = make([]SchedParams, numVcpus)
+	for i, v := range cVcpus {
+		var e SchedParams
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Vcpus[i] = e
+	}
 
 	return nil
 }
@@ -282,6 +292,12 @@ func (x *DomainSchedParams) fromC(xc *C.libxl_domain_sched_params) error {
 
 func (x *VnodeInfo) fromC(xc *C.libxl_vnode_info) error {
 	x.Memkb = uint64(xc.memkb)
+	numDistances := int(xc.num_distances)
+	cDistances := (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.distances))[:numDistances:numDistances]
+	x.Distances = make([]uint32, numDistances)
+	for i, v := range cDistances {
+		x.Distances[i] = uint32(v)
+	}
 	x.Pnode = uint32(xc.pnode)
 	if err := x.Vcpus.fromC(&xc.vcpus); err != nil {
 		return err
@@ -308,6 +324,26 @@ func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_build_info) error {
 	if err := x.Nodemap.fromC(&xc.nodemap); err != nil {
 		return err
 	}
+	numVcpuHardAffinity := int(xc.num_vcpu_hard_affinity)
+	cVcpuHardAffinity := (*[1 << 28]C.libxl_bitmap)(unsafe.Pointer(xc.vcpu_hard_affinity))[:numVcpuHardAffinity:numVcpuHardAffinity]
+	x.VcpuHardAffinity = make([]Bitmap, numVcpuHardAffinity)
+	for i, v := range cVcpuHardAffinity {
+		var e Bitmap
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.VcpuHardAffinity[i] = e
+	}
+	numVcpuSoftAffinity := int(xc.num_vcpu_soft_affinity)
+	cVcpuSoftAffinity := (*[1 << 28]C.libxl_bitmap)(unsafe.Pointer(xc.vcpu_soft_affinity))[:numVcpuSoftAffinity:numVcpuSoftAffinity]
+	x.VcpuSoftAffinity = make([]Bitmap, numVcpuSoftAffinity)
+	for i, v := range cVcpuSoftAffinity {
+		var e Bitmap
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.VcpuSoftAffinity[i] = e
+	}
 	if err := x.NumaPlacement.fromC(&xc.numa_placement); err != nil {
 		return err
 	}
@@ -330,6 +366,16 @@ func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_build_info) error {
 		return err
 	}
 	x.BlkdevStart = C.GoString(xc.blkdev_start)
+	numVnumaNodes := int(xc.num_vnuma_nodes)
+	cVnumaNodes := (*[1 << 28]C.libxl_vnode_info)(unsafe.Pointer(xc.vnuma_nodes))[:numVnumaNodes:numVnumaNodes]
+	x.VnumaNodes = make([]VnodeInfo, numVnumaNodes)
+	for i, v := range cVnumaNodes {
+		var e VnodeInfo
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.VnumaNodes[i] = e
+	}
 	x.MaxGrantFrames = uint32(xc.max_grant_frames)
 	x.MaxMaptrackFrames = uint32(xc.max_maptrack_frames)
 	x.DeviceModelVersion = DeviceModelVersion(xc.device_model_version)
@@ -352,6 +398,32 @@ func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_build_info) error {
 	if err := x.SchedParams.fromC(&xc.sched_params); err != nil {
 		return err
 	}
+	numIoports := int(xc.num_ioports)
+	cIoports := (*[1 << 28]C.libxl_ioport_range)(unsafe.Pointer(xc.ioports))[:numIoports:numIoports]
+	x.Ioports = make([]IoportRange, numIoports)
+	for i, v := range cIoports {
+		var e IoportRange
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Ioports[i] = e
+	}
+	numIrqs := int(xc.num_irqs)
+	cIrqs := (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.irqs))[:numIrqs:numIrqs]
+	x.Irqs = make([]uint32, numIrqs)
+	for i, v := range cIrqs {
+		x.Irqs[i] = uint32(v)
+	}
+	numIomem := int(xc.num_iomem)
+	cIomem := (*[1 << 28]C.libxl_iomem_range)(unsafe.Pointer(xc.iomem))[:numIomem:numIomem]
+	x.Iomem = make([]IomemRange, numIomem)
+	for i, v := range cIomem {
+		var e IomemRange
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Iomem[i] = e
+	}
 	if err := x.ClaimMode.fromC(&xc.claim_mode); err != nil {
 		return err
 	}
@@ -831,11 +903,33 @@ func (x *DeviceVdispl) fromC(xc *C.libxl_device_vdispl) error {
 	x.BackendDomname = C.GoString(xc.backend_domname)
 	x.Devid = Devid(xc.devid)
 	x.BeAlloc = bool(xc.be_alloc)
+	numConnectors := int(xc.num_connectors)
+	cConnectors := (*[1 << 28]C.libxl_connector_param)(unsafe.Pointer(xc.connectors))[:numConnectors:numConnectors]
+	x.Connectors = make([]ConnectorParam, numConnectors)
+	for i, v := range cConnectors {
+		var e ConnectorParam
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Connectors[i] = e
+	}
 
 	return nil
 }
 
 func (x *VsndParams) fromC(xc *C.libxl_vsnd_params) error {
+	numSampleRates := int(xc.num_sample_rates)
+	cSampleRates := (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.sample_rates))[:numSampleRates:numSampleRates]
+	x.SampleRates = make([]uint32, numSampleRates)
+	for i, v := range cSampleRates {
+		x.SampleRates[i] = uint32(v)
+	}
+	numSampleFormats := int(xc.num_sample_formats)
+	cSampleFormats := (*[1 << 28]C.libxl_vsnd_pcm_format)(unsafe.Pointer(xc.sample_formats))[:numSampleFormats:numSampleFormats]
+	x.SampleFormats = make([]VsndPcmFormat, numSampleFormats)
+	for i, v := range cSampleFormats {
+		x.SampleFormats[i] = VsndPcmFormat(v)
+	}
 	x.ChannelsMin = uint32(xc.channels_min)
 	x.ChannelsMax = uint32(xc.channels_max)
 	x.BufferSize = uint32(xc.buffer_size)
@@ -858,6 +952,16 @@ func (x *VsndPcm) fromC(xc *C.libxl_vsnd_pcm) error {
 	if err := x.Params.fromC(&xc.params); err != nil {
 		return err
 	}
+	numVsndStreams := int(xc.num_vsnd_streams)
+	cStreams := (*[1 << 28]C.libxl_vsnd_stream)(unsafe.Pointer(xc.streams))[:numVsndStreams:numVsndStreams]
+	x.Streams = make([]VsndStream, numVsndStreams)
+	for i, v := range cStreams {
+		var e VsndStream
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Streams[i] = e
+	}
 
 	return nil
 }
@@ -871,6 +975,16 @@ func (x *DeviceVsnd) fromC(xc *C.libxl_device_vsnd) error {
 	if err := x.Params.fromC(&xc.params); err != nil {
 		return err
 	}
+	numVsndPcms := int(xc.num_vsnd_pcms)
+	cPcms := (*[1 << 28]C.libxl_vsnd_pcm)(unsafe.Pointer(xc.pcms))[:numVsndPcms:numVsndPcms]
+	x.Pcms = make([]VsndPcm, numVsndPcms)
+	for i, v := range cPcms {
+		var e VsndPcm
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Pcms[i] = e
+	}
 
 	return nil
 }
@@ -882,6 +996,156 @@ func (x *DomainConfig) fromC(xc *C.libxl_domain_config) error {
 	if err := x.BInfo.fromC(&xc.b_info); err != nil {
 		return err
 	}
+	numDisks := int(xc.num_disks)
+	cDisks := (*[1 << 28]C.libxl_device_disk)(unsafe.Pointer(xc.disks))[:numDisks:numDisks]
+	x.Disks = make([]DeviceDisk, numDisks)
+	for i, v := range cDisks {
+		var e DeviceDisk
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Disks[i] = e
+	}
+	numNics := int(xc.num_nics)
+	cNics := (*[1 << 28]C.libxl_device_nic)(unsafe.Pointer(xc.nics))[:numNics:numNics]
+	x.Nics = make([]DeviceNic, numNics)
+	for i, v := range cNics {
+		var e DeviceNic
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Nics[i] = e
+	}
+	numPcidevs := int(xc.num_pcidevs)
+	cPcidevs := (*[1 << 28]C.libxl_device_pci)(unsafe.Pointer(xc.pcidevs))[:numPcidevs:numPcidevs]
+	x.Pcidevs = make([]DevicePci, numPcidevs)
+	for i, v := range cPcidevs {
+		var e DevicePci
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Pcidevs[i] = e
+	}
+	numRdms := int(xc.num_rdms)
+	cRdms := (*[1 << 28]C.libxl_device_rdm)(unsafe.Pointer(xc.rdms))[:numRdms:numRdms]
+	x.Rdms = make([]DeviceRdm, numRdms)
+	for i, v := range cRdms {
+		var e DeviceRdm
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Rdms[i] = e
+	}
+	numDtdevs := int(xc.num_dtdevs)
+	cDtdevs := (*[1 << 28]C.libxl_device_dtdev)(unsafe.Pointer(xc.dtdevs))[:numDtdevs:numDtdevs]
+	x.Dtdevs = make([]DeviceDtdev, numDtdevs)
+	for i, v := range cDtdevs {
+		var e DeviceDtdev
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Dtdevs[i] = e
+	}
+	numVfbs := int(xc.num_vfbs)
+	cVfbs := (*[1 << 28]C.libxl_device_vfb)(unsafe.Pointer(xc.vfbs))[:numVfbs:numVfbs]
+	x.Vfbs = make([]DeviceVfb, numVfbs)
+	for i, v := range cVfbs {
+		var e DeviceVfb
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Vfbs[i] = e
+	}
+	numVkbs := int(xc.num_vkbs)
+	cVkbs := (*[1 << 28]C.libxl_device_vkb)(unsafe.Pointer(xc.vkbs))[:numVkbs:numVkbs]
+	x.Vkbs = make([]DeviceVkb, numVkbs)
+	for i, v := range cVkbs {
+		var e DeviceVkb
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Vkbs[i] = e
+	}
+	numVtpms := int(xc.num_vtpms)
+	cVtpms := (*[1 << 28]C.libxl_device_vtpm)(unsafe.Pointer(xc.vtpms))[:numVtpms:numVtpms]
+	x.Vtpms = make([]DeviceVtpm, numVtpms)
+	for i, v := range cVtpms {
+		var e DeviceVtpm
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Vtpms[i] = e
+	}
+	numP9S := int(xc.num_p9s)
+	cP9S := (*[1 << 28]C.libxl_device_p9)(unsafe.Pointer(xc.p9s))[:numP9S:numP9S]
+	x.P9S = make([]DeviceP9, numP9S)
+	for i, v := range cP9S {
+		var e DeviceP9
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.P9S[i] = e
+	}
+	numPvcallsifs := int(xc.num_pvcallsifs)
+	cPvcallsifs := (*[1 << 28]C.libxl_device_pvcallsif)(unsafe.Pointer(xc.pvcallsifs))[:numPvcallsifs:numPvcallsifs]
+	x.Pvcallsifs = make([]DevicePvcallsif, numPvcallsifs)
+	for i, v := range cPvcallsifs {
+		var e DevicePvcallsif
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Pvcallsifs[i] = e
+	}
+	numVdispls := int(xc.num_vdispls)
+	cVdispls := (*[1 << 28]C.libxl_device_vdispl)(unsafe.Pointer(xc.vdispls))[:numVdispls:numVdispls]
+	x.Vdispls = make([]DeviceVdispl, numVdispls)
+	for i, v := range cVdispls {
+		var e DeviceVdispl
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Vdispls[i] = e
+	}
+	numVsnds := int(xc.num_vsnds)
+	cVsnds := (*[1 << 28]C.libxl_device_vsnd)(unsafe.Pointer(xc.vsnds))[:numVsnds:numVsnds]
+	x.Vsnds = make([]DeviceVsnd, numVsnds)
+	for i, v := range cVsnds {
+		var e DeviceVsnd
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Vsnds[i] = e
+	}
+	numChannels := int(xc.num_channels)
+	cChannels := (*[1 << 28]C.libxl_device_channel)(unsafe.Pointer(xc.channels))[:numChannels:numChannels]
+	x.Channels = make([]DeviceChannel, numChannels)
+	for i, v := range cChannels {
+		var e DeviceChannel
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Channels[i] = e
+	}
+	numUsbctrls := int(xc.num_usbctrls)
+	cUsbctrls := (*[1 << 28]C.libxl_device_usbctrl)(unsafe.Pointer(xc.usbctrls))[:numUsbctrls:numUsbctrls]
+	x.Usbctrls = make([]DeviceUsbctrl, numUsbctrls)
+	for i, v := range cUsbctrls {
+		var e DeviceUsbctrl
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Usbctrls[i] = e
+	}
+	numUsbdevs := int(xc.num_usbdevs)
+	cUsbdevs := (*[1 << 28]C.libxl_device_usbdev)(unsafe.Pointer(xc.usbdevs))[:numUsbdevs:numUsbdevs]
+	x.Usbdevs = make([]DeviceUsbdev, numUsbdevs)
+	for i, v := range cUsbdevs {
+		var e DeviceUsbdev
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Usbdevs[i] = e
+	}
 	x.OnPoweroff = ActionOnShutdown(xc.on_poweroff)
 	x.OnReboot = ActionOnShutdown(xc.on_reboot)
 	x.OnWatchdog = ActionOnShutdown(xc.on_watchdog)
@@ -1015,6 +1279,16 @@ func (x *Vdisplinfo) fromC(xc *C.libxl_vdisplinfo) error {
 	x.Devid = Devid(xc.devid)
 	x.State = int(xc.state)
 	x.BeAlloc = bool(xc.be_alloc)
+	numConnectors := int(xc.num_connectors)
+	cConnectors := (*[1 << 28]C.libxl_connectorinfo)(unsafe.Pointer(xc.connectors))[:numConnectors:numConnectors]
+	x.Connectors = make([]Connectorinfo, numConnectors)
+	for i, v := range cConnectors {
+		var e Connectorinfo
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Connectors[i] = e
+	}
 
 	return nil
 }
@@ -1027,6 +1301,16 @@ func (x *Streaminfo) fromC(xc *C.libxl_streaminfo) error {
 }
 
 func (x *Pcminfo) fromC(xc *C.libxl_pcminfo) error {
+	numVsndStreams := int(xc.num_vsnd_streams)
+	cStreams := (*[1 << 28]C.libxl_streaminfo)(unsafe.Pointer(xc.streams))[:numVsndStreams:numVsndStreams]
+	x.Streams = make([]Streaminfo, numVsndStreams)
+	for i, v := range cStreams {
+		var e Streaminfo
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Streams[i] = e
+	}
 
 	return nil
 }
@@ -1038,6 +1322,16 @@ func (x *Vsndinfo) fromC(xc *C.libxl_vsndinfo) error {
 	x.FrontendId = uint32(xc.frontend_id)
 	x.Devid = Devid(xc.devid)
 	x.State = int(xc.state)
+	numVsndPcms := int(xc.num_vsnd_pcms)
+	cPcms := (*[1 << 28]C.libxl_pcminfo)(unsafe.Pointer(xc.pcms))[:numVsndPcms:numVsndPcms]
+	x.Pcms = make([]Pcminfo, numVsndPcms)
+	for i, v := range cPcms {
+		var e Pcminfo
+		if err := e.fromC(&v); err != nil {
+			return err
+		}
+		x.Pcms[i] = e
+	}
 
 	return nil
 }
@@ -1058,6 +1352,12 @@ func (x *Vkbinfo) fromC(xc *C.libxl_vkbinfo) error {
 func (x *Numainfo) fromC(xc *C.libxl_numainfo) error {
 	x.Size = uint64(xc.size)
 	x.Free = uint64(xc.free)
+	numDists := int(xc.num_dists)
+	cDists := (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.dists))[:numDists:numDists]
+	x.Dists = make([]uint32, numDists)
+	for i, v := range cDists {
+		x.Dists[i] = uint32(v)
+	}
 
 	return nil
 }
-- 
2.19.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2019-12-10 15:49 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-10 15:47 [Xen-devel] [PATCH v3 00/22] generated Go libxl bindings using IDL Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 01/22] golang/xenlight: generate enum types from IDL Nick Rosbrook
2019-12-16 17:07   ` George Dunlap
2019-12-16 17:50     ` Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 02/22] golang/xenlight: define Defbool builtin type Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 03/22] golang/xenlight: define Devid type as int Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 04/22] golang/xenlight: define KeyValueList as empty struct Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 05/22] golang/xenlight: re-name Bitmap marshaling functions Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 06/22] golang/xenlight: define StringList builtin type Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 07/22] golang/xenlight: define Mac " Nick Rosbrook
2019-12-16 17:15   ` George Dunlap
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 08/22] golang/xenlight: define MsVmGenid " Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 09/22] golang/xenlight: define EvLink builtin as empty struct Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 10/22] golang/xenlight: define CpuidPolicyList builtin type Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 11/22] golang/xenlight: re-factor Uuid type implementation Nick Rosbrook
2019-12-16 18:06   ` George Dunlap
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 12/22] golang/xenlight: re-factor Hwcap " Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 13/22] golang/xenlight: generate structs from the IDL Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 14/22] golang/xenlight: remove no-longer used type MemKB Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 15/22] golang/xenlight: begin C to Go type marshaling Nick Rosbrook
2019-12-16 17:56   ` George Dunlap
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 16/22] golang/xenlight: implement keyed union C to Go marshaling Nick Rosbrook
2019-12-16 17:57   ` George Dunlap
2019-12-10 15:47 ` Nick Rosbrook [this message]
2019-12-17 11:16   ` [Xen-devel] [PATCH v3 17/22] golang/xenlight: implement array " George Dunlap
2019-12-17 14:51     ` Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 18/22] golang/xenlight: begin Go to C type marshaling Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 19/22] golang/xenlight: implement keyed union Go to C marshaling Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 20/22] golang/xenlight: implement array " Nick Rosbrook
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 21/22] golang/xenlight: revise use of Context type Nick Rosbrook
2019-12-17 17:28   ` George Dunlap
2019-12-10 15:47 ` [Xen-devel] [PATCH v3 22/22] golang/xenlight: add error return type to Context.Cpupoolinfo Nick Rosbrook
2019-12-17 17:29   ` George Dunlap

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=67ce148341ae0823584777d15b0c6c4e6c74bddd.1575990937.git.rosbrookn@ainfosec.com \
    --to=rosbrookn@gmail.com \
    --cc=george.dunlap@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=kerriganb@ainfosec.com \
    --cc=rosbrookn@ainfosec.com \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.