• G
    kvm: check KVM_CAP_NR_VCPUS with kvm_vm_check_extension() · 11748ba7
    Greg Kurz 提交于
    On a modern server-class ppc host with the following CPU topology:
    
    Architecture:          ppc64le
    Byte Order:            Little Endian
    CPU(s):                32
    On-line CPU(s) list:   0,8,16,24
    Off-line CPU(s) list:  1-7,9-15,17-23,25-31
    Thread(s) per core:    1
    
    If both KVM PR and KVM HV loaded and we pass:
    
            -machine pseries,accel=kvm,kvm-type=PR -smp 8
    
    We expect QEMU to warn that this exceeds the number of online CPUs:
    
    Warning: Number of SMP cpus requested (8) exceeds the recommended
     cpus supported by KVM (4)
    Warning: Number of hotpluggable cpus requested (8) exceeds the
     recommended cpus supported by KVM (4)
    
    but nothing is printed...
    
    This happens because on ppc the KVM_CAP_NR_VCPUS capability is VM
    specific  ndreally depends on the KVM type, but we currently use it
    as a global capability. And KVM returns a fallback value based on
    KVM HV being present. Maybe KVM on POWER shouldn't presume anything
    as long as it doesn't have a VM, but in all cases, we should call
    KVM_CREATE_VM first and use KVM_CAP_NR_VCPUS as a VM capability.
    
    This patch hence changes kvm_recommended_vcpus() accordingly and
    moves the sanity checking of smp_cpus after the VM creation.
    
    It is okay for the other archs that also implement KVM_CAP_NR_VCPUS,
    ie, mips, s390, x86 and arm, because they don't depend on the VM
    being created or not.
    Signed-off-by: NGreg Kurz <groug@kaod.org>
    Reviewed-by: NDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: NThomas Huth <thuth@redhat.com>
    Message-Id: <150600966286.30533.10909862523552370889.stgit@bahia.lan>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    11748ba7
kvm-all.c 64.5 KB