From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:44811) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SvucC-0007V9-Tj for qemu-devel@nongnu.org; Mon, 30 Jul 2012 14:22:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SvucB-0007x3-Tn for qemu-devel@nongnu.org; Mon, 30 Jul 2012 14:22:48 -0400 Received: from mail-gh0-f173.google.com ([209.85.160.173]:53666) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SvucB-0007wv-Pm for qemu-devel@nongnu.org; Mon, 30 Jul 2012 14:22:47 -0400 Received: by ghrr14 with SMTP id r14so5005282ghr.4 for ; Mon, 30 Jul 2012 11:22:47 -0700 (PDT) From: riegamaths@gmail.com Date: Tue, 31 Jul 2012 02:22:38 +0800 Message-Id: <1343672558-8560-1-git-send-email-riegamaths@gmail.com> Subject: [Qemu-devel] [PATCH] kvm: Check if smp_cpus exceeds max cpus supported by kvm List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel Cc: Marcelo Tosatti , Dunrong Huang , Stefan Hajnoczi , kvm@vger.kernel.org, Avi Kivity From: Dunrong Huang Add a helper function for fetching max cpus supported by kvm. Make QEMU exit with an error message if smp_cpus exceeds limit of VCPU count retrieved by invoking this helper function. Signed-off-by: Dunrong Huang --- kvm-all.c | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/kvm-all.c b/kvm-all.c index 2148b20..8cb4b92 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -1207,6 +1207,23 @@ static int kvm_irqchip_create(KVMState *s) return 0; } +static int kvm_max_vcpus(KVMState *s) +{ + int max_vcpus = 4; + int ret; + ret = kvm_check_extension(s, KVM_CAP_MAX_VCPUS); + if (ret) { + max_vcpus = ret; + } else { + ret = kvm_check_extension(s, KVM_CAP_NR_VCPUS); + if (ret) { + max_vcpus = ret; + } + } + + return max_vcpus; +} + int kvm_init(void) { static const char upgrade_note[] = @@ -1216,6 +1233,7 @@ int kvm_init(void) const KVMCapabilityInfo *missing_cap; int ret; int i; + int max_vcpus; s = g_malloc0(sizeof(KVMState)); @@ -1256,6 +1274,13 @@ int kvm_init(void) goto err; } + max_vcpus = kvm_max_vcpus(s); + if (smp_cpus > max_vcpus) { + fprintf(stderr, "Number of SMP cpus requested (%d) exceeds max cpus " + "supported by KVM (%d)\n", smp_cpus, max_vcpus); + exit(1); + } + s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0); if (s->vmfd < 0) { #ifdef TARGET_S390X -- 1.7.8.6