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