The AMD Bulldozer architecture consists of "modules" which are reported by the kernel as both threads and cores. Libvirt's processor topology detection code wasn't able to detect this properly thus libvirt reported twice the actual number of processors.
This issue was fixed by reporting a topology that adds up to the total number of processors reported in the system but the actual topology has to be checked in output of virCapabilities() (virsh capabilities). Also the fallback output was documented.
Additionally the users should be instructed to use the capability output for topology detection purposes due to performance reasons. NUMA topology has the important impact performance-wise but the physical topology can differ from that.