On 12/27/19 4:32 PM, George Dunlap wrote:
> The current fromC array code will do the "magic" casting and
> martialling even when num_foo variable is 0. Go crashes when doing
> the cast.
>
> Furthermore, the current toC array code will convert a nil slice into
> a zero-length malloc. The resulting pointer is non-NULL, and confuses
> libxl.
>
> Only do array marshalling if the number of elements is non-zero;
> otherwise, leave the target pointer empty (nil for Go slices, NULL for
> C arrays).
>
> The toC half of this should be folded into "golang/xenlight:
> implement array Go to C marshaling".
>
> Signed-off-by: George Dunlap <[email protected]>
The .go program I used to test this series is attached, to give you an
idea what the current iteration looks like, and potentially give it a spin.
-George
package main
import (
"fmt"
xl "golang.xenproject.org/xenlight"
)
func main() {
ctx, err := xl.NewContext()
if err != nil {
fmt.Printf("Opening context: %v\n", err)
return
}
defer ctx.Close()
doms := ctx.ListDomain()
for i := range doms {
fmt.Printf("%d %v\n", doms[i].Domid, doms[i].Uuid)
}
fmt.Printf("String for error ErrorNonspecific: %v\n", xl.ErrorNonspecific)
// type = "pv"
dconf, err := xl.NewDomainConfig(xl.DomainTypePv)
if err != nil {
fmt.Printf("NewDomainConfig: %v\n", err)
return
}
dconf.CInfo.Type = xl.DomainTypePv
// name = "c6-01"
dconf.CInfo.Name = "c6-01"
// vcpus=4
dconf.BInfo.MaxVcpus = 4
// memory = "2048"
dconf.BInfo.MaxMemkb = 2048 * 1024
dconf.BInfo.TargetMemkb = 2048 * 1024
// on_crash = 'destroy'
dconf.OnCrash = xl.ActionOnShutdownDestroy
// bootloader = "pygrub"
dconf.BInfo.Bootloader = "pygrub"
// disk = [ 'vdev=hda,format=raw,target=/images/c6-01.raw']
{
disk, err := xl.NewDeviceDisk()
if err != nil {
fmt.Printf("NewDeviceDisk: %v\n", err)
return
}
disk.Vdev = "hda"
//disk.DiskBackend = xl.DiskBackendPhy
disk.Format = xl.DiskFormatRaw
disk.PdevPath = "/images/c6-01.raw"
dconf.Disks = append(dconf.Disks, *disk)
}
// vif = [ 'mac=5a:5b:d6:f1:d6:b4' ]
{
vif, err := xl.NewDeviceNic()
if err != nil {
fmt.Printf("NewDeviceNic: %v\n", err)
return
}
vif.Mac = xl.Mac{ 0x5a, 0x5b, 0xd6, 0x31, 0xd6, 0xb4 }
dconf.Nics = append(dconf.Nics, *vif)
}
// serial='pty' # HVM only
did, err := ctx.DomainCreateNew(dconf)
if err != nil {
fmt.Printf("Creating domain: %v\n", err)
return
}
fmt.Printf("Domain %s(%d) created successfully", dconf.CInfo.Name, did)
}
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel