On Tue, Mar 10, 2015 at 11:04:00AM -0400, John Ferlan wrote:
Test results in the following output:
$ perl examples/iothreadsinfo.pl
Addr
VMM type: QEMU
...
Domain: {
ID: 2 'f18iothr'
UUID: fb9f7826-b5d7-4f74-b962-7181ef3fc9ec
IOThread: {
affinity: 0010
number: 1
}
IOThread: {
affinity: 0001
number: 2
}
IOThread: {
affinity: 1100
number: 3
}
}
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Changes | 2 +-
Virt.xs | 42 ++++++++++++++++++++++++++++++++++++++++++
examples/iothreadsinfo.pl | 33 +++++++++++++++++++++++++++++++++
lib/Sys/Virt/Domain.pm | 17 +++++++++++++++++
4 files changed, 93 insertions(+), 1 deletion(-)
create mode 100644 examples/iothreadsinfo.pl
diff --git a/Changes b/Changes
index b62ee24..88f648c 100644
--- a/Changes
+++ b/Changes
@@ -2,7 +2,7 @@ Revision history for perl module Sys::Virt
1.2.14 2015-00-00
- - XXX
+ - Add virDomainGetIOThreads and virDomainPinIOThread API bindings
1.2.13 2015-03-05
diff --git a/Virt.xs b/Virt.xs
index f9ec7a4..56e143d 100644
--- a/Virt.xs
+++ b/Virt.xs
@@ -5014,6 +5014,48 @@ get_emulator_pin_info(dom, flags=0)
RETVAL
+void
+get_iothread_info(dom, flags=0)
+ virDomainPtr dom;
+ unsigned int flags;
+ PREINIT:
+ virDomainIOThreadInfoPtr *iothrinfo;
+ int niothreads;
+ int i;
+ PPCODE:
+ if ((niothreads = virDomainGetIOThreadsInfo(dom, &iothrinfo,
+ flags)) < 0)
+ _croak_error();
+
+ EXTEND(SP, niothreads);
+ for (i = 0 ; i < niothreads ; i++) {
+ HV *rec = newHV();
+ (void)hv_store(rec, "number", 6,
+ newSViv(iothrinfo[i]->iothread_id), 0);
+ (void)hv_store(rec, "affinity", 8,
+ newSVpvn((char*)iothrinfo[i]->cpumap,
+ iothrinfo[i]->cpumaplen), 0);
+ PUSHs(newRV_noinc((SV *)rec));
+ }
+
+ Safefree(iothrinfo);
Opps, we should have been calling virDomainIOThreadsInfoFree on
each element of iothrinfo, and then using free() rather than
Safefree(), since the memory was allocated by Libvirt rather
than by Perl.
+void
+pin_iothread(dom, iothread_id, mask, flags=0)
+ virDomainPtr dom;
+ unsigned int iothread_id;
+ SV *mask;
+ unsigned int flags;
+PREINIT:
+ STRLEN masklen;
+ unsigned char *maps;
+ PPCODE:
+ maps = (unsigned char *)SvPV(mask, masklen);
+ if (virDomainPinVcpuFlags(dom, iothread_id, maps, masklen, flags) < 0)
+ _croak_error();
And s/VcpuFlags/IOThreads/ here.
BTW, I noticed these mistakes by running the API coverage test suite
make test TEST_MAINTAINER=1
which reports anything in libvirt*.h that is not used from the Perl
code. I've pushed the obvious fixes.
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|