To highlight, comment by Eduardo: It looks like libvirt isn't following the expected interface for CPU hotplug. Understadable, as the documentation is sparse, and the paragraph below is easy to miss. Documentation for CpuInstanceProperties says: # Note: currently there are 5 properties that could be present # but management should be prepared to pass through other # properties with device_add command to allow for future # interface extension. This also requires the filed names to be kept in # sync with the properties passed to -device/device_add. If query-hotpluggable-cpus returns die-id=0 (which is the case in QEMU 4.1), libvirt should include die-id=0 in -device and device_add. We could make the interface a bit more flexible, though, and make die-id optional if there's only one possible value for it. I will submit a patch to QEMU upstream to make it more flexible, but I suggest we also change libvirt to follow the quoted paragraph above, and copy every single property from query-hotpluggable-cpus[].props.
*** This bug has been marked as a duplicate of bug 1741658 ***