Many (all?) versions of Windows only support a maximum of 2 cpu sockets but can have many cores per socket. libvirt presents vcpus as single core cpu sockets by default. This results in Windows reservations on KVM hosts only seeing 2 cpus even if more are assigned. Setting the topology in the cpu section of the xml such that there are 2 sockets with the number of cores evenly divided between them allows for all assigned cpus to show up (unless the VM has an odd number assigned, in which case, it will be one less; the frontend should be updated to require 1 core or an even number of cores).