Signed-off-by: Gleb Natapov <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html