[PATCH] Add kvm_set_boot_cpu_id() API.

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

 



Signed-off-by: Gleb Natapov <gleb@xxxxxxxxxx>
---
 hw/pc.c    |    3 ++-
 qemu-kvm.c |   17 +++++++++++++++++
 qemu-kvm.h |    1 +
 3 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/hw/pc.c b/hw/pc.c
index cb5b4d0..9ef245d 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -901,7 +901,8 @@ static void pc_init1(ram_addr_t ram_size,
         cpu_model = "qemu32";
 #endif
     }
-    
+
+    kvm_set_boot_cpu_id(0);
     for(i = 0; i < smp_cpus; i++) {
 	env = pc_new_cpu(i, cpu_model, pci_enabled);
     }
diff --git a/qemu-kvm.c b/qemu-kvm.c
index c5cd038..c57df57 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -441,6 +441,18 @@ err:
 	return NULL;
 }
 
+static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id)
+{
+#ifdef KVM_CAP_SET_BOOT_CPU_ID
+    int r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_SET_BOOT_CPU_ID);
+    if (r > 0)
+        return ioctl(kvm->vm_fd, KVM_SET_BOOT_CPU_ID, id);
+    return -ENOSYS;
+#else
+    return -ENOSYS;
+#endif
+}
+
 int kvm_create_vm(kvm_context_t kvm)
 {
 	int fd = kvm->fd;
@@ -2923,3 +2935,8 @@ void qemu_kvm_cpu_stop(CPUState *env)
     if (kvm_enabled())
         env->kvm_cpu_state.stopped = 1;
 }
+
+int kvm_set_boot_cpu_id(uint32_t id)
+{
+	return kvm_set_boot_vcpu_id(kvm_context, id);
+}
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 9c28566..8b51737 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -80,6 +80,7 @@ int kvm_arch_try_push_interrupts(void *opaque);
 void kvm_arch_push_nmi(void *opaque);
 void kvm_arch_update_regs_for_sipi(CPUState *env);
 void kvm_arch_cpu_reset(CPUState *env);
+int kvm_set_boot_cpu_id(uint32_t id);
 
 struct kvm_guest_debug;
 struct kvm_debug_exit_arch;
-- 
1.6.2.1

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux