From patchwork Mon Jul 30 18:22:38 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: riegamaths@gmail.com X-Patchwork-Id: 1255711 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id C485D3FCFC for ; Mon, 30 Jul 2012 18:22:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754563Ab2G3SWs (ORCPT ); Mon, 30 Jul 2012 14:22:48 -0400 Received: from mail-gg0-f174.google.com ([209.85.161.174]:60456 "EHLO mail-gg0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754231Ab2G3SWr (ORCPT ); Mon, 30 Jul 2012 14:22:47 -0400 Received: by gglu4 with SMTP id u4so5142424ggl.19 for ; Mon, 30 Jul 2012 11:22:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=rlXM3cTKJ4pA90maO2+wbA3K61n9NCsJzThSPQYj7WE=; b=Sp81y/v1xGiRfYDON1BuouZiRTxB2H1cM7A7doi6H0TVgSML+7Qdxn4rXeLkl2X/ja d7lnRrdxENousbgIZ5YasxBAKgDwruLyazt4hLuRIgwEjrTEVsseJmYPhdB2lxuxYMji EZ5GXNJFF6wznwUGrKhRkmXj7xIWSQ/bW2puBxcfz2TMjuEgC4j/MnAmAdAkHjpVG2Es 0aAh+BqGfSWbuTTHq6MMivYum+4XXmnbgiZPYTsKKfmi7KQ/pUl5ZKFz2t8yA1wV0OKN OoXgxZvHPMXqrcS7KAXEh/GbL78fbHAtB6Mrd+OJJ89oWJFIiifYr0an2H8pW3GpleHj TMgA== Received: by 10.66.83.6 with SMTP id m6mr26509136pay.29.1343672566589; Mon, 30 Jul 2012 11:22:46 -0700 (PDT) Received: from localhost.localdomain ([123.113.133.140]) by mx.google.com with ESMTPS id jv6sm8364604pbc.40.2012.07.30.11.22.42 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 30 Jul 2012 11:22:45 -0700 (PDT) From: riegamaths@gmail.com To: qemu-devel Cc: Stefan Hajnoczi , Avi Kivity , Marcelo Tosatti , kvm@vger.kernel.org, Dunrong Huang Subject: [PATCH] kvm: Check if smp_cpus exceeds max cpus supported by kvm Date: Tue, 31 Jul 2012 02:22:38 +0800 Message-Id: <1343672558-8560-1-git-send-email-riegamaths@gmail.com> X-Mailer: git-send-email 1.7.8.6 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org 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