在 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