Hi, Laine Stump and Oleg Vasilev:
1.  Laine, what is 'conventional PCI device'? in my case they are all virtio device.
2. Followed your guide,succeed in hotplug.  but there are lots of problems after hotplug. I think problems are more related to qemu.
  2.1) disk devices(qcow2,virio) hotpluged onto pci-bridge can not alloc bar resource.
  2.2) disk devices(qcow2,virio) are staticly pluged to pci-bridge can not be found by guest os. 
         those devices are on pci bus, but can not be recognized by guest os, no block device are probed.

qemu qemu-6.2.0
-----hotplug error message--------
[ 1067.577384] pci 0000:06:02.0: [1af4:1001] type 00 class 0x010000
[ 1067.578312] pci 0000:06:02.0: reg 0x10: [io 0x0000-0x007f]
[ 1067.578794] pci 0000:06:02.0: reg 0x14: [mem 0x00000000-0x00000fff]
[ 1067.579419] pci 0000:06:02.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit pref]
[ 1067.581592] pci 0000:06:02.0: BAR 4: no space for [mem size 0x00004000 64bit pref]
[ 1067.581942] pci 0000:06:02.0: BAR 4: failed to assign [mem size 0x00004000 64bit pref]
[ 1067.582264] pci 0000:06:02.0: BAR 1: no space for [mem size 0x00001000]
[ 1067.582625] pci 0000:06:02.0: BAR 1: failed to assign [mem size 0x00001000]
[ 1067.582942] pci 0000:06:02.0: BAR 0: no space for [io size 0x0080]
[ 1067.583253] pci 0000:06:02.0: BAR 0: failed to assign [io size 0x0080]
[ 1067.584019] PCI Interrupt Link [GSIE] enabled at IRQ 20
[ 1067.584749] virtio-pci 0000:06:02.0: virtio_pci: leaving for legacy driver
[ 1067.585296] virtio-pci: probe of 0000:06:02.0 failed with error -12

-------staticly plug------------
[ 0.680299] pci 0000:06:02.0: [1af4:1001] type 00 class 0x010000
[ 0.683035] pci 0000:06:02.0: reg 0x10: [io 0xc080-0xc0ff]
[ 0.688036] pci 0000:06:02.0: reg 0x14: [mem 0xfca01000-0xfca01fff]
[ 0.700040] pci 0000:06:02.0: reg 0x20: [mem 0xfb404000-0xfb407fff 64bit pref]

--------------------------------------



At 2022-11-04 05:28:47, "Laine Stump" <laine@laine.org> wrote: >On 11/3/22 6:35 AM, longguang.yue wrote: >> Hi, all >>   I have add two pcie-to-pci-bridge controllers, how hotplug devices >> onto this two controllers?  and libvirt knows to plug onto pci-bridge >> when there are no pcie-ports. >> defaultly libvirt plugs devices onto pcie-port. > >Do you mean you want hotplugged devices to be placed on the >pcie-to-pci-bridge even though there are unused pci-root-ports? > >You can force a new device to be hotplugged to a particular slot of a >particular controller by including the <address> element in the XML of >the device you attach - whatever controller/slot/function you specify >there is what libvirt will use (practically speaking the function must >be 0). > >My recollection is that, *if the device is a conventional PCI device >(and not a PCIe device) then libvirt will anyway attempt to find a an >open conventional PCI slot, which would be found only on the >pcie-to-pci-bridge. However, very few devices are actually conventional >PCI, so this will very rarely happen automatically (I haven't looked at >that code in a long time, and retain no specific memory, but I think the >only emulated device that is conventional PCI is a watchdog device or >something) > >So, if libvirt is selecting a pcie-root-port to plug in a device, that's >because the device is a PCIe device. If you want to force it to do >otherwise, you'll need to manually specify the address (just set "bus" >of the address to the "index" of the controller, set "slot" to an >unoccupied slot (1-31), and set domain and function to 0).