[libvirt] How should libvirt apps enable virtio-pci for aarch64?

Cole Robinson crobinso at redhat.com
Mon Dec 7 15:35:14 UTC 2015


On 12/07/2015 06:38 AM, Pavel Hrdina wrote:
> On Sun, Dec 06, 2015 at 09:46:56PM -0500, Cole Robinson wrote:
>> Hi all,
> 
> [...]
> 
>> Here are some possible solutions:
>>
>> * Drop the current behavior of adding a PCIe controller unconditionally, and
>> instead require apps to specify it in the XML. Then, if libvirt sees a PCIe
>> controller in the XML, default the virtio address type to pci. Apps will know
>> if the OS they are installing supports virtio-pci (eventually via libosinfo),
>> so this is the way we can implicitly ask libvirt 'allocate us pci addresses'
> 
> For now this is probably better solution considering the fact that there is
> minimal support from OSes.  But eventually it would be better to switch to PCIe
> as default.  From libvirt POV we should allow to choose between mmio and PCIe to
> override the default.  This would resolve the current situation and also the
> future state, where PCIe will became the preferred one.
> 
>>
>> Upsides:
>> - Solves both the stated problems.
>> - Simplest addition for applications IMO
>>
>> Downsides:
>> - Requires a libvirt behavior change, no longer adding the PCIe controller by
>> default. But in practice I don't think it will really affect anyone, since
>> there isn't really any OS support for virtio-pci yet, and no apps support it
>> either AFAIK.
>> - The PCIe controller is not strictly about virtio-pci, it's for enabling
>> plain emulated PCI devices as well. So there is a use case for using the PCIe
>> controller for a graphics card even while your OS doesn't yet support
>> virtio-pci. In the big picture though this is a small time window with current
>> OS, and users can work around it by manually requesting <address
>> type='virtio-mmio'/>, so medium/long term this isn't a big deal IMO
>> - The PCIe controller XML is:
>>     <controller type='pci' index='0' model='pcie-root'/>
>>     <controller type='pci' index='1' model='dmi-to-pci-bridge'/>
>>     <controller type='pci' index='2' model='pci-bridge'/>
>> I have no idea if that's always going to be the expected XML, maybe it's not
>> wise to hardcode that in apps. Laine?
> 
> No, hardcoded staff tend to be short-term solution and makes more pain in the
> future to get rid of them and don't break anything.  The other thing is, aarch64
> doesn't have i82801b11-bridge controller, which is used for dmi-to-pci-bridge.
> I'm not even sure, whether pci-bridge is required for aarch64 to use pci
> devices.
> 

Yeah maybe we can add a convenience options like <controller type='pcie'/>
that libvirt converts to the correct topology for qemu. Dunno. Step 1 is
figuring out if that XML even makes sense for qemu aarch64

>>
>>
>> * Next idea: Users specify something like like <address type='pci'/> and
>> libvirt fills in the address for us.
> 
> This would be nice feature to specify address type and let libvirt fill
> remaining address information and add required controllers or report that
> required controllers are missing.
> 

Yeah I'll look into it.

- Cole




More information about the libvir-list mailing list