From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NFpZZ-0006gL-Fs for qemu-devel@nongnu.org; Wed, 02 Dec 2009 08:48:49 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NFpZS-0006aE-Uq for qemu-devel@nongnu.org; Wed, 02 Dec 2009 08:48:47 -0500 Received: from [199.232.76.173] (port=58164 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NFpZS-0006Ze-CN for qemu-devel@nongnu.org; Wed, 02 Dec 2009 08:48:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34263) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NFpZR-0004HQ-Sh for qemu-devel@nongnu.org; Wed, 02 Dec 2009 08:48:42 -0500 From: Glauber Costa Date: Wed, 2 Dec 2009 11:48:22 -0200 Message-Id: <1259761702-4041-12-git-send-email-glommer@redhat.com> In-Reply-To: <1259761702-4041-11-git-send-email-glommer@redhat.com> References: <1259761702-4041-1-git-send-email-glommer@redhat.com> <1259761702-4041-2-git-send-email-glommer@redhat.com> <1259761702-4041-3-git-send-email-glommer@redhat.com> <1259761702-4041-4-git-send-email-glommer@redhat.com> <1259761702-4041-5-git-send-email-glommer@redhat.com> <1259761702-4041-6-git-send-email-glommer@redhat.com> <1259761702-4041-7-git-send-email-glommer@redhat.com> <1259761702-4041-8-git-send-email-glommer@redhat.com> <1259761702-4041-9-git-send-email-glommer@redhat.com> <1259761702-4041-10-git-send-email-glommer@redhat.com> <1259761702-4041-11-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH 11/11] remove smp restriction from kvm List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, avi@redhat.com We don't support smp without irqchip in kernel, so only abort in that situation Signed-off-by: Glauber Costa --- kvm-all.c | 10 +++++----- kvm.h | 2 ++ target-i386/kvm.c | 7 +++++++ target-ppc/kvm.c | 5 +++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/kvm-all.c b/kvm-all.c index 22d84a3..b17bd74 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -427,7 +427,12 @@ static int kvm_create_irqchip(KVMState *s) return ret; s->irqchip_in_kernel = 1; + #endif + if (!kvm_arch_can_smp() && (smp_cpus > 1)) { + fprintf(stderr, "No SMP KVM support, use '-smp 1'\n"); + ret = -EINVAL; + } return ret; } @@ -440,11 +445,6 @@ int kvm_init(int smp_cpus) int ret; int i; - if (smp_cpus > 1) { - fprintf(stderr, "No SMP KVM support, use '-smp 1'\n"); - return -EINVAL; - } - s = qemu_mallocz(sizeof(KVMState)); #ifdef KVM_CAP_SET_GUEST_DEBUG diff --git a/kvm.h b/kvm.h index 7b9d8b3..91a4bf4 100644 --- a/kvm.h +++ b/kvm.h @@ -101,6 +101,8 @@ int kvm_arch_init_vcpu(CPUState *env); void kvm_arch_reset_vcpu(CPUState *env); +int kvm_arch_can_smp(void); + #ifdef TARGET_I386 int kvm_set_lapic(CPUState *env, struct kvm_lapic_state *s); int kvm_get_lapic(CPUState *env, struct kvm_lapic_state *s); diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 65ad2a1..cea0cf1 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -1171,3 +1171,10 @@ int kvm_get_lapic(CPUState *env, struct kvm_lapic_state *s) return kvm_vcpu_ioctl(env, KVM_GET_LAPIC, s); } + +int kvm_arch_can_smp(void) +{ + if (kvm_irqchip_in_kernel()) + return 1; + return 0; +} diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index d08639b..cfe467f 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -62,6 +62,11 @@ int kvm_arch_set_irq(KVMState *s, int irq, int level, int *status) return -ENOSYS; } +int kvm_arch_can_smp(void) +{ + return 0; +} + int kvm_arch_put_registers(CPUState *env) { struct kvm_regs regs; -- 1.6.5.2