If one defines a P9 guest like -smp sockets=1,cores=1,threads=8 QEMU will silently changes threads to 4:
(guest) # lscpu Architecture: ppc64le Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 4 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 ... (qemu) info cpus * CPU #0: nip=0xc0000000000db9cc thread_id=9440 CPU #1: nip=0xc0000000000db9cc thread_id=9441 CPU #2: nip=0xc0000000000db9cc thread_id=9442 CPU #3: nip=0xc0000000000db9cc thread_id=9443 CPU #4: nip=0x0000000000000100 (halted) thread_id=9444 CPU #5: nip=0x0000000000000100 (halted) thread_id=9445 CPU #6: nip=0x0000000000000100 (halted) thread_id=9446 CPU #7: nip=0x0000000000000100 (halted) thread_id=9447 This behavior is causing confusion and QEMU will crash if one tries to hotplug a CPU. QEMU already has a number of SMT sane checking and this patch adds another one: it verifies if KVM supports (KVM_CAP_PPC_SMT_POSSIBLE) the required number of threads instead of impose a value defined in the compat table. Result: (guest) # lscpu Architecture: ppc64le Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 8 Core(s) per socket: 1 Socket(s): 1 ... (qemu) info cpus * CPU #0: nip=0xc0000000000d30ac thread_id=80197 CPU #1: nip=0xc0000000000d30ac thread_id=80198 CPU #2: nip=0xc0000000000d30ac thread_id=80199 CPU #3: nip=0xc0000000000d30ac thread_id=80200 CPU #4: nip=0xc0000000000d30ac thread_id=80201 CPU #5: nip=0xc0000000000d30ac thread_id=80202 CPU #6: nip=0xc0000000000d30ac thread_id=80203 CPU #7: nip=0xc0000000000d30ac thread_id=80204 This patch is based on ppc-for-2.12 Jose Ricardo Ziviani (1): spapr: Check SMT based on KVM_CAP_PPC_SMT_POSSIBLE hw/ppc/spapr.c | 14 +++++++++++++- hw/ppc/trace-events | 1 + target/ppc/kvm.c | 5 +++++ target/ppc/kvm_ppc.h | 6 ++++++ 4 files changed, 25 insertions(+), 1 deletion(-) -- 2.14.1