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