[libvirt] [PATCH 0/3] add pci-bridge device and address type

li guang lig.fnst at cn.fujitsu.com
Wed Dec 26 08:12:09 UTC 2012


在 2012-12-26三的 15:38 +0800,Osier Yang写道:
> On 2012年12月26日 09:00, liguang wrote:
> > Now, it's unnecessary to arrange devices into multi-pci-bus,
> > for example:
> >      <sound model='ac97'>
> >        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
> >      </sound>
> >     <video>
> >        <model type='cirrus' vram='9216' heads='1'/>
> >        <address type='pci' domain='0x0000' bus='0x1' slot='0x02' function='0x0'/>
> >      </video>
> > libvirt will complain about "bus != 0",
> > fortunately, qemu supports pci-to-pci bridge,
> > if we want to use multi-pci-bus, we can define
> > 2 pci bridge devices then attach 1 to the other
> > as a subordinate pci-bus, so, 2 pci-buses appear.
> > for example:
> >      <pci-bridge type='root'/>
> >      <pci-bridge type='subordinate'>
> >        <address type='pci-bridge' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
> >      </pci-bridge>
> >      <sound model='ac97'>
> >        <address type='pci-bridge' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/>
> >      </sound>
> >     <video>
> >        <model type='cirrus' vram='9216' heads='1'/>
> >        <address type='pci-bridge' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> >      </video>
> 
> I think this is rather not workable, E.g. how to known the video device
> attached to which pci bridge if there are multiple pci bridges? 

please bear in mind bus 0 is root bridge, bus 1 is subordinate bridge, 
and so forth, which was implemented in my patch 2/3

> And the
> new address type "pci-bridge" looks bogus, as the address properties of
> a pci bridge are exactly same with a normal pci device.
> 
>  From the qemu patch:
> 
>          -device pci-bridge,id=bridge1 \
>          -netdev user,id=u \
>          -device ne2k_pci,id=net2,bus=bridge1,netdev=u
> 
> I think what we only need is to describe the relapship between pci
> bridge and pci bridge (if it's supported, the two types "root" and
> "subordinate" are not enough to describe the relatioship), also pci
> device and pci bridge.

relationship between pci-bus and devices are embedded, just like
pci.0, e.g. 
<address type='pci' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
means a device sitting on bus pci.0 slot 4
then after my changes
<address type='pci-bridge' domain='0x0000' bus='0x00' slot='0x04'
function='0x0'/>
would have the same mean
relationship between pci-bridges are primary and secondary,
(as far as I know qemu doesn’t support multi-pci-bridges at present)
so root and subordinate attribute may be enough,
every subordinate will attach to root bridge, and has its own slot.

> 
> To describe the relationship between bridges, perhaps we will need
> "parent" and "child" properties for <pcibridge> device.
> 
> To describe the relatioship between a pci device and a pci bridge,
> a property like "bridge" for general pci device should be enough.
> In this case, another property for <pcibridge> is needed, to
> indentify it, such as "id" or "name".

only relationship is not enough, it's unsuitable for passing '-device
pci-bridge' to qemu, so I define a new device and address type for
pci-bridge in libvirt.

> 
> Regards,
> Osier
> 
> 

-- 
regards!
li guang





More information about the libvir-list mailing list