diff --git a/ansible/roles/nova-cell/templates/nova.conf.d/libvirt.conf.j2 b/ansible/roles/nova-cell/templates/nova.conf.d/libvirt.conf.j2
index 3f599c051a..2a81411319 100644
--- a/ansible/roles/nova-cell/templates/nova.conf.d/libvirt.conf.j2
+++ b/ansible/roles/nova-cell/templates/nova.conf.d/libvirt.conf.j2
@@ -27,5 +27,6 @@ cpu_mode = {{ nova_libvirt_cpu_mode }}
 {% if enable_multipathd | bool %}
 volume_use_multipath = True
 {% endif %}
+num_pcie_ports = 16
 [workarounds]
 skip_cpu_compare_on_dest = True
diff --git a/releasenotes/notes/fix-q35-pcie-hotplug-libvirt-50b1879d61b1df72.yaml b/releasenotes/notes/fix-q35-pcie-hotplug-libvirt-50b1879d61b1df72.yaml
new file mode 100644
index 0000000000..380a4404b6
--- /dev/null
+++ b/releasenotes/notes/fix-q35-pcie-hotplug-libvirt-50b1879d61b1df72.yaml
@@ -0,0 +1,10 @@
+---
+upgrade:
+  - |
+    Configure Nova libvirt.num_pcie_ports to 16 by default. Nova currently
+    sets 'num_pcie_ports' to "0" (defaults to libvirt's "1"), which is
+    not sufficient for hotplug use with 'q35' machine type.
+fixes:
+  - |
+    Fixes an issue where 'q35' libvirt machine type VM could not hotplug
+    more than one PCIe device at a time.