[PATCH 6/8] docs: Convert 'pci-hotplug' page to rST

Peter Krempa pkrempa at redhat.com
Thu Mar 10 15:51:28 UTC 2022


One internal reference was modified to work properly.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 docs/meson.build         |   2 +-
 docs/pci-hotplug.html.in | 185 ---------------------------------------
 docs/pci-hotplug.rst     | 146 ++++++++++++++++++++++++++++++
 3 files changed, 147 insertions(+), 186 deletions(-)
 delete mode 100644 docs/pci-hotplug.html.in
 create mode 100644 docs/pci-hotplug.rst

diff --git a/docs/meson.build b/docs/meson.build
index 3bdea1407d..cdf78a04b4 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -51,7 +51,6 @@ docs_html_in_files = [
   'internals',
   'java',
   'logging',
-  'pci-hotplug',
   'php',
   'python',
   'remote',
@@ -104,6 +103,7 @@ docs_rst_files = [
   'newreposetup',
   'nss',
   'pci-addresses',
+  'pci-hotplug',
   'platforms',
   'programming-languages',
   'securityprocess',
diff --git a/docs/pci-hotplug.html.in b/docs/pci-hotplug.html.in
deleted file mode 100644
index d61af1930e..0000000000
--- a/docs/pci-hotplug.html.in
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <body>
-    <h1>PCI topology and hotplug</h1>
-
-    <ul id="toc"></ul>
-
-    <p>
-      Perhaps surprisingly, most libvirt guests support only limited PCI
-      device hotplug out of the box, or even none at all.
-    </p>
-    <p>
-      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. Since most PCI controllers can't be
-      hotplugged, they need to be added before the guest is started;
-      however, 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.
-    </p>
-    <p>
-      Ultimately, the user is the only one who knows how much the guest
-      will need to grow dynamically, so the responsibility of planning
-      a suitable PCI topology in advance falls on them.
-    </p>
-    <p>
-      This document aims at providing all the information needed to
-      successfully plan the PCI topology of a guest. Note that the
-      details can vary a lot between architectures and even machine
-      types, hence the way it's organized.
-    </p>
-
-    <h2><a id="x86_64">x86_64 architecture</a></h2>
-
-    <h3><a id="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>
-    <p>
-      If you have a very specific use case, such as the appliances
-      used by <a href="https://libguestfs.org/">libguestfs</a> behind
-      the scenes to access disk images, and this automatically-added
-      <code>pcie-root-port</code> controller ends up being a nuisance,
-      you can prevent libvirt from adding it by manually managing PCI
-      controllers and addresses according to your needs.
-    </p>
-    <p>
-      Slots on the <code>pcie-root</code> controller do not support
-      hotplug, so the device will be hotplugged into the
-      <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'/>
-<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. Note that you need to add
-      the <code>pcie-root</code> controller along with the
-      <code>pcie-root-port</code> controllers or you will get an
-      error.
-    </p>
-    <p>
-      Note that if you're adding PCI controllers to a guest and at
-      the same time you're also adding PCI devices, some of the
-      controllers will be used for the newly-added devices and won't
-      be available for hotplug once the guest has been started.
-    </p>
-    <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='pcie-to-pci-bridge'/></pre>
-
-    <p>
-      and you'll be able to hotplug up to 31 legacy PCI devices,
-      either emulated or assigned from the host, in the slots
-      from 0x01 to 0x1f of the <code>pcie-to-pci-bridge</code> controller.
-    </p>
-
-    <h3><a id="x86_64-i440fx">i440fx (pc) machine type</a></h3>
-
-    <p>
-      This is a legacy PCI native machine type. The default PCI
-      topology looks like
-    </p>
-
-<pre>
-<controller type='pci' index='0' model='pci-root'/></pre>
-
-    <p>
-      where each of the 31 slots (from 0x01 to 0x1f) on the
-      <code>pci-root</code> controller is hotplug capable and
-      can accept a legacy PCI device, either emulated or
-      assigned from the guest.
-    </p>
-
-    <h2><a id="ppc64">ppc64 architecture</a></h2>
-
-    <h3><a id="ppc64-pseries">pseries machine type</a></h3>
-
-    <p>
-      The default PCI topology for the <code>pseries</code> machine
-      type looks like
-    </p>
-
-<pre>
-<controller type='pci' index='0' model='pci-root'>
-  <model name='spapr-pci-host-bridge'/>
-  <target index='0'/>
-</controller></pre>
-
-    <p>
-      The 31 slots, from 0x01 to 0x1f, on a <code>pci-root</code>
-      controller are all hotplug capable and, despite the name
-      suggesting otherwise, starting with QEMU 2.9 all of them
-      can accept PCI Express devices in addition to legacy PCI
-      devices; however, libvirt will only place emulated devices
-      on the default <code>pci-root</code> controller.
-    </p>
-    <p>
-      In order to take advantage of improved error reporting and
-      recovering capabilities, PCI devices assigned from the
-      host need to be isolated by placing each on a separate
-      <code>pci-root</code> controller, which has to be prepared
-      in advance for hotplug to work: for example, add
-    </p>
-
-<pre>
-<controller type='pci' model='pci-root'/>
-<controller type='pci' model='pci-root'/>
-<controller type='pci' model='pci-root'/></pre>
-
-    <p>
-      if you expect to hotplug up to three PCI devices assigned
-      from the host.
-    </p>
-
-    <h2><a id="aarch64">aarch64 architecture</a></h2>
-
-    <h3><a id="aarch64-virt">mach-virt (virt) machine type</a></h3>
-
-    <p>
-      This machine type mostly behaves the same as the
-      <a href="#x86_64-q35">q35 machine type</a>, so you can just
-      refer to that section for information.
-    </p>
-    <p>
-      The only difference worth mentioning is that using legacy
-      PCI for <code>mach-virt</code> guests is extremely uncommon,
-      so you'll probably never need to add controllers other than
-      <code>pcie-root-port</code>.
-    </p>
-
-  </body>
-</html>
diff --git a/docs/pci-hotplug.rst b/docs/pci-hotplug.rst
new file mode 100644
index 0000000000..bc7fdbbd86
--- /dev/null
+++ b/docs/pci-hotplug.rst
@@ -0,0 +1,146 @@
+========================
+PCI topology and hotplug
+========================
+
+.. contents::
+
+Perhaps surprisingly, most libvirt guests support only limited PCI device
+hotplug out of the box, or even none at all.
+
+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. Since
+most PCI controllers can't be hotplugged, they need to be added before the guest
+is started; however, 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.
+
+Ultimately, the user is the only one who knows how much the guest will need to
+grow dynamically, so the responsibility of planning a suitable PCI topology in
+advance falls on them.
+
+This document aims at providing all the information needed to successfully plan
+the PCI topology of a guest. Note that the details can vary a lot between
+architectures and even machine types, hence the way it's organized.
+
+x86_64 architecture
+-------------------
+
+q35 machine type
+~~~~~~~~~~~~~~~~
+
+This is a PCI Express native machine type. The default PCI topology looks like
+
+::
+
+   <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>
+
+and supports hotplugging a single PCI Express device, either emulated or
+assigned from the host.
+
+If you have a very specific use case, such as the appliances used by
+`libguestfs <https://libguestfs.org/>`__ behind the scenes to access disk
+images, and this automatically-added ``pcie-root-port`` controller ends up being
+a nuisance, you can prevent libvirt from adding it by manually managing PCI
+controllers and addresses according to your needs.
+
+Slots on the ``pcie-root`` controller do not support hotplug, so the device will
+be hotplugged into the ``pcie-root-port`` controller. If you plan to hotplug
+more than a single PCI Express device, you should add a suitable number of
+``pcie-root-port`` controllers when defining the guest: for example, add
+
+::
+
+   <controller type='pci' model='pcie-root'/>
+   <controller type='pci' model='pcie-root-port'/>
+   <controller type='pci' model='pcie-root-port'/>
+   <controller type='pci' model='pcie-root-port'/>
+
+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. Note that you need to add the
+``pcie-root`` controller along with the ``pcie-root-port`` controllers or you
+will get an error.
+
+Note that if you're adding PCI controllers to a guest and at the same time
+you're also adding PCI devices, some of the controllers will be used for the
+newly-added devices and won't be available for hotplug once the guest has been
+started.
+
+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
+
+::
+
+   <controller type='pci' model='pcie-to-pci-bridge'/>
+
+and you'll be able to hotplug up to 31 legacy PCI devices, either emulated or
+assigned from the host, in the slots from 0x01 to 0x1f of the
+``pcie-to-pci-bridge`` controller.
+
+i440fx (pc) machine type
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+This is a legacy PCI native machine type. The default PCI topology looks like
+
+::
+
+   <controller type='pci' index='0' model='pci-root'/>
+
+where each of the 31 slots (from 0x01 to 0x1f) on the ``pci-root`` controller is
+hotplug capable and can accept a legacy PCI device, either emulated or assigned
+from the guest.
+
+ppc64 architecture
+------------------
+
+pseries machine type
+~~~~~~~~~~~~~~~~~~~~
+
+The default PCI topology for the ``pseries`` machine type looks like
+
+::
+
+   <controller type='pci' index='0' model='pci-root'>
+     <model name='spapr-pci-host-bridge'/>
+     <target index='0'/>
+   </controller>
+
+The 31 slots, from 0x01 to 0x1f, on a ``pci-root`` controller are all hotplug
+capable and, despite the name suggesting otherwise, starting with QEMU 2.9 all
+of them can accept PCI Express devices in addition to legacy PCI devices;
+however, libvirt will only place emulated devices on the default ``pci-root``
+controller.
+
+In order to take advantage of improved error reporting and recovering
+capabilities, PCI devices assigned from the host need to be isolated by placing
+each on a separate ``pci-root`` controller, which has to be prepared in advance
+for hotplug to work: for example, add
+
+::
+
+   <controller type='pci' model='pci-root'/>
+   <controller type='pci' model='pci-root'/>
+   <controller type='pci' model='pci-root'/>
+
+if you expect to hotplug up to three PCI devices assigned from the host.
+
+aarch64 architecture
+--------------------
+
+mach-virt (virt) machine type
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This machine type mostly behaves the same as the `q35 machine
+type <#q35-machine-type>`__, so you can just refer to that section for
+information.
+
+The only difference worth mentioning is that using legacy PCI for ``mach-virt``
+guests is extremely uncommon, so you'll probably never need to add controllers
+other than ``pcie-root-port``.
-- 
2.35.1



More information about the libvir-list mailing list