---
fixes:
  - |
    The nova libvirt driver supports two independent features, virtual CPU
    topologies and virtual NUMA topologies. Previously, when
    ``hw:cpu_max_sockets``, ``hw:cpu_max_cores`` and ``hw:cpu_max_threads``
    were specified for pinned instances (``hw:cpu_policy=dedicated``)
    without explicit ``hw:cpu_sockets``, ``hw:cpu_cores``, ``hw:cpu_threads``
    extra specs or their image equivalent, nova failed to generate a valid
    virtual CPU topology. This has now been fixed and it is now possible to
    use max CPU constraints with pinned instances.
    e.g. a combination of  ``hw:numa_nodes=2``, ``hw:cpu_max_sockets=2``,
    ``hw:cpu_max_cores=2``, ``hw:cpu_max_threads=8`` and
    ``hw:cpu_policy=dedicated`` can now generate a valid topology using
    a flavor with 8 vCPUs.
upgrade:
  - |
    As part of the fix for bug 1910466, code that attempted to optimize VM CPU
    thread assignment based on the host CPU topology as it was determined
    to be buggy, undocumented and rejected valid virtual CPU topologies while
    also producing different behavior when CPU pinning was enabled vs disabled.
    The optimization may be reintroduced in the future with a more generic
    implementation that works for both pinned and unpinned VMs.
