[libvirt-users] assigning PCI addresses with bus > 0x09

Laine Stump laine at redhat.com
Thu Dec 20 14:39:35 UTC 2018


On 12/20/18 9:20 AM, Daniel P. Berrangé wrote:
> On Thu, Dec 20, 2018 at 03:15:34PM +0100, Riccardo Ravaioli wrote:
>> Hi,
>>
>> My goal is to assign PCI addresses to a number of devices (network
>> interfaces, disks and PCI devices in PCI-passthrough) without delegating to
>> libvirt the generation of those values. This should give me more control
>> and for sure more predictability over the hardware configuration of a
>> virtual machine and consequently the name of the interfaces in it.  I'm
>> using libvirt 4.3.0 to create qemu/KVM virtual machines running Linux
>> (Debian Stretch).
>>
>> So, for every device of the type mentioned above, I add this line:
>> <address type='pci' domain='0x0000' bus='0x__' slot='0x__' function='0x0'/>,
>> ... with values from 00 to ff in the bus field, and from 00 to 1f in the
>> slot field, as described in the documentation.
>>
>> Long story short, I noticed that as soon as I assign values > 0x09 to the
>> bus field, the serial console hangs indefinitely, in both Debian and
>> Ubuntu. The VM seems to be started correctly and its state is "running"; in
>> the XML file created by libvirt, I see all controllers from 0 the largest
>> bus value I assigned, so everything from that side seems ok.
> 
> I guess the hang is that you hit some limit in PCI buses.

I think you're right. Each bus requires some amount of IO space, and I 
thought I recalled someone saying that all of the available IO space is 
exhausted after 7 or 8 buses. This was in relation to PCIe, where each 
root port is a bus, and can potentially take up IO space, so possibly in 
that context they were talking about the buses *after* the root bus and 
pcie-pci-bridge, which would bring us back to the same number you're 
getting.

For PCIe our solution was to turn off IO space usage on the 
pcie-root-ports, but you can't do that for conventional PCI buses, since 
the devices might actually need IO space to function properly and the 
standard requires that you provide it.


> 
> The real question though is why you need to create sooooo many PCI buses.
> Each bus can do 31 devices.  Do you really need to have more than 279
> devices in your VM ?

And if you do need more than 279 devices, do they all need to be 
hot-pluggable? If not, then you can put up to 8 devices on each slot 
(functions 0 - 7).

> 
> Regards,
> Daniel
> 




More information about the libvirt-users mailing list