qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 11/11] remove smp restriction from kvm


From: Glauber Costa
Subject: [Qemu-devel] [PATCH 11/11] remove smp restriction from kvm
Date: Wed, 2 Dec 2009 11:48:22 -0200

We don't support smp without irqchip in kernel, so only abort in
that situation

Signed-off-by: Glauber Costa <address@hidden>
---
 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]