On Tue, 2017-08-08 at 10:06 -0400, Laine Stump wrote:
> + The reason for this apparent limitation is the fact that
each
> + hotplugged PCI device might require additional PCI controllers to
> + be added to the guest, and libvirt has no way of knowing in advance
> + how many devices will be hotplugged during the guest's lifetime,
> + thus making it impossible to automatically provide the right amount
> + of PCI controllers: any arbitrary number would end up being too big
> + for some users, and too small for others.
Of course we all know this, but you haven't said here that PCI
controllers in general cannot themselves be hotplugged (although the new
pcie-pci-bridge *will* be hotpluggable, as long as the OS supports that).
That's a good point, I'll mention it.
> + <h3><a name="x86_64-q35">q35 machine
type</a></h3>
> +
> + <p>
> + This is a PCI Express native machine type. The default PCI topology
> + looks like
> + </p>
> +
> +<pre>
> +<controller type='pci' index='0'
model='pcie-root'/>
> +<controller type='pci' index='1'
model='pcie-root-port'>
> + <model name='pcie-root-port'/>
> + <target chassis='1' port='0x10'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x0'/>
> +</controller></pre>
> +
> + <p>
> + and supports hotplugging a single PCI Express device, either
> + emulated or assigned from the host.
> + </p>
Didn't we include some trick in there (requested for libguestfs
appliances) that allows creating a config that has no pcie-root-ports?
Yeah, we had something like that but I can't recall the
specifics at the moment. I'll look it up and add a note
about it.
> + <code>pcie-root-port</code> controller. If
you plan to hotplug
> + more than a single PCI Express device, you should add a suitable
> + number of <code>pcie-root-port</code> controllers when defining
> + the guest: for example, add
> + </p>
> +
> +<pre>
> +<controller type='pci' model='pcie-root-port'/>
> +<controller type='pci' model='pcie-root-port'/>
> +<controller type='pci'
model='pcie-root-port'/></pre>
> +
> + <p>
> + if you expect to hotplug up to three PCI Express devices,
> + either emulated or assigned from the host. That's all the
> + information you need to provide: libvirt will fill in the
> + remaining details automatically.
> + </p>
Maybe a note here pointing out that if you add root-ports and new
endpoint devices at the same time, the endpoint devices will
automatically be attached to the manually added root-ports, so if you're
trying to end up with spares, you'll need to manually add enough for the
endpoints, plus the number of spares you want (you won't need to address
any of the controllers or endpoints though).
Sure.
> + <p>
> + If you expect to hotplug legacy PCI devices, then you will need
> + specialized controllers, since all those mentioned above are
> + intended for PCI Express devices only: add
> + </p>
> +
> +<pre>
> +<controller type='pci' model='dmi-to-pci-bridge'/>
> +<controller type='pci'
model='pci-bridge'/></pre>
> +
> + <p>
> + and you'll be able to hotplug up to 31 legacy PCI devices,
> + either emulated or assigned from the host.
> + </p>
Maybe mention that it's slot 1 - 31 because slot 0 is reserved.
Not sure that's necessarily in scope for the document, since
in general you'll let libvirt pick the slot for you.
That said, adding it would hardly make a difference when it
comes to document size, so why not I guess :)
> + <p>
> + The default PCI topology for the <code>pseries</code> machine
> + type looks like
> + </p>
> +
> +<pre>
> +<controller type='pci' index='0'
model='pcie-root'>
You mean pci-root, right? (I always get these mixed up for PPC, since I
don't actually use it).
Of course I did, and in fact I got it right right afterwards.
Nice catch :)
There's of course always more that can be written, but this is a
good
and useful start, so ACK (with the few typos fixed).
Thanks, I've pushed it. I'll address the improvements you
suggested next week.
--
Andrea Bolognani / Red Hat / Virtualization