On Fri, Aug 22, 2008 at 03:16:42PM +0200, Guido G?nther wrote: > Hi, > with recent linux kernels we can detect the maximum number of virtual > cpus at runtime via an ioctl. Possible patch attached. It does this on > every call to qemudGetMaxVCPUs. Would you prefer something that does > this only once in qemudStartup()? > Cheers, > -- Guido > > +dnl > +dnl check for kvm headers > +dnl > +AC_CHECK_HEADERS([linux/kvm.h]) Hmm, I wonder if that's commonly installed by Fedora/Debian RPMs for KVM.... It might be neccessary to just #define the IOCTL constant in our own header files if its not available. > @@ -72,6 +77,9 @@ > static int qemudShutdown(void); > #endif > > +/* device for kvm ioctls */ > +#define KVM_DEVICE "/dev/kvm" > + > /* qemudDebug statements should be changed to use this macro instead. */ > #define DEBUG(fmt,...) VIR_DEBUG(__FILE__, fmt, __VA_ARGS__) > #define DEBUG0(msg) VIR_DEBUG(__FILE__, "%s", msg) > @@ -1768,6 +1776,29 @@ static const char *qemudGetType(virConnectPtr conn ATTRIBUTE_UNUSED) { > return "QEMU"; > } > > + > +static int kvmGetMaxVCPUs(void) { > + int maxvcpus = 1; > + > +#if defined(KVM_CAP_NR_VCPUS) > + int r, fd; > + > + fd = open(KVM_DEVICE, O_RDONLY); > + if (fd < 0) { > + qemudLog(QEMUD_WARN, _("Unable to open " KVM_DEVICE ": %s\n"), strerror(errno)); > + return maxvcpus; > + } > + > + r = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_NR_VCPUS); > + if (r > 0) > + maxvcpus = r; > + > + close(fd); > +#endif > + return maxvcpus; > +} This is all very cool. IIRC Cole has some code which could guess a reasonable maxvcpus from KVM version number which we could potentially fallback to Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list