can determine max VCPUs at runtime (Guido Günther).
+Wed Sep 17 15:03:00 BST 2008 Richard W.M. Jones <rjones@redhat.com>
+
+ * configure.in, src/qemu_driver.h, src/qemu_driver.c: KVM
+ can determine max VCPUs at runtime (Guido Günther).
+
Tue Sep 16 12:43:00 EST 2008 Cole Robinson <crobinso@redhat.com>
* src/storack_backend_disk.c: Implement disk volume delete
AC_MSG_ERROR([You must install kernel-headers in order to compile libvirt]))
fi
+dnl
+dnl check for kvm headers
+dnl
+AC_CHECK_HEADERS([linux/kvm.h])
+
dnl Need to test if pkg-config exists
PKG_PROG_PKG_CONFIG
#include <pwd.h>
#include <stdio.h>
#include <sys/wait.h>
+#include <sys/ioctl.h>
#if HAVE_NUMACTL
#include <numa.h>
return "QEMU";
}
+
+static int kvmGetMaxVCPUs(void) {
+ int maxvcpus = 1;
+
+ 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);
+ return maxvcpus;
+}
+
+
static int qemudGetMaxVCPUs(virConnectPtr conn, const char *type) {
if (!type)
return 16;
/* XXX future KVM will support SMP. Need to probe
kernel to figure out KVM module version i guess */
if (STRCASEEQ(type, "kvm"))
- return 1;
+ return kvmGetMaxVCPUs();
if (STRCASEEQ(type, "kqemu"))
return 1;
#include "internal.h"
+#if HAVE_LINUX_KVM_H
+#include <linux/kvm.h>
+#endif
+
+/* device for kvm ioctls */
+#define KVM_DEVICE "/dev/kvm"
+
+/* add definitions missing in older linux/kvm.h */
+#ifndef KVMIO
+# define KVMIO 0xAE
+#endif
+#ifndef KVM_CHECK_EXTENSION
+# define KVM_CHECK_EXTENSION _IO(KVMIO, 0x03)
+#endif
+#ifndef KVM_CAP_NR_VCPUS
+# define KVM_CAP_NR_VCPUS 9 /* returns max vcpus per vm */
+#endif
+
int qemudRegister(void);
#endif /* QEMUD_DRIVER_H */