# HG changeset patch # User "Vadim Zaliva " # Date 1206752781 25200 # Node ID 98289648fd5e705f3537653d6c6b2f5130a33a76 # Parent b3dd1c9e90261b32a0fe123ac801c89c921f7e8c implemented Domain.pin_vcpu method diff -r b3dd1c9e9026 -r 98289648fd5e ext/libvirt/_libvirt.c --- a/ext/libvirt/_libvirt.c Fri Mar 28 11:33:43 2008 -0700 +++ b/ext/libvirt/_libvirt.c Fri Mar 28 18:06:21 2008 -0700 @@ -777,6 +777,41 @@ r = virDomainSetVcpus(dom, NUM2UINT(nvcpus)); _E(r < 0, conn(s), "virDomainSetVcpus"); + + return r; +} + +/* + * Call +virDomainPinVcpu+[http://www.libvirt.org/html/libvirt-libvirt.html#virDomainPinVcpu] + */ +VALUE libvirt_dom_pin_vcpu(VALUE s, VALUE vcpu, VALUE cpulist) { + virDomainPtr dom = domain_get(s); + int r,i,nvcpu,len,maplen; + unsigned char *cpumap; + virNodeInfo nodeinfo; + virConnectPtr c = conn(s); + + r = virNodeGetInfo(c, &nodeinfo); + _E(r < 0, c, "virNodeGetInfo"); + + maplen = VIR_CPU_MAPLEN(nodeinfo.cpus); + cpumap = malloc(maplen); + if(!cpumap) + rb_raise(rb_eSystemCallError, "malloc failed"); + + memset(cpumap,0,maplen); + + nvcpu = NUM2UINT(vcpu); + len = RARRAY(cpulist)->len; + for(i=0;i