Cause: For domains with <numatune><memory mode='strict' nodeset='X'/> libvirt strictly prohibited qemu/kvm from allocating memory from NUMA nodes outside the nodeset X.
Consequence: When qemu initializes, kvm needs to allocate some memory from the DMA32 zone. If that zone was present only on a NUMA node outside that X, the allocation failed and the domain couldn't start.
Fix: libvirt only uses numa_membind() calls for restricting qemu user process at start and might restrict it using cgroups only after the memory was allocated (it has started).
Result: libvirt can start domains with memory strictly pinned to any available nodeset.