diff mbox series

[26/26] docs/devel: introduce some key concepts for QOM development

Message ID 20230623122100.1640995-27-alex.bennee@linaro.org
State New
Headers show
Series maintainer omnibus: testing, fuzz, plugins, documentation | expand

Commit Message

Alex Bennée June 23, 2023, 12:21 p.m. UTC
Using QOM correctly is increasingly important to maintaining a modern
code base. However the current documentation skips some important
concepts before launching into a simple example. Lets:

  - at least mention properties
  - mention TYPE_OBJECT and TYPE_DEVICE
  - talk about why we have realize/unrealize
  - mention the QOM tree

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230619171437.357374-6-alex.bennee@linaro.org>
---
 docs/devel/qom.rst | 47 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

Comments

Paolo Bonzini June 26, 2023, 1:27 p.m. UTC | #1
On 6/23/23 14:21, Alex Bennée wrote:
> Using QOM correctly is increasingly important to maintaining a modern
> code base. However the current documentation skips some important
> concepts before launching into a simple example. Lets:
> 
>    - at least mention properties
>    - mention TYPE_OBJECT and TYPE_DEVICE
>    - talk about why we have realize/unrealize
>    - mention the QOM tree
> 
> Signed-off-by: Alex Bennée<alex.bennee@linaro.org>
> Message-Id:<20230619171437.357374-6-alex.bennee@linaro.org>

There were review comments on this series that haven't been applied.

Paolo
Alex Bennée June 26, 2023, 1:39 p.m. UTC | #2
Paolo Bonzini <pbonzini@redhat.com> writes:

> On 6/23/23 14:21, Alex Bennée wrote:
>> Using QOM correctly is increasingly important to maintaining a modern
>> code base. However the current documentation skips some important
>> concepts before launching into a simple example. Lets:
>>    - at least mention properties
>>    - mention TYPE_OBJECT and TYPE_DEVICE
>>    - talk about why we have realize/unrealize
>>    - mention the QOM tree
>> Signed-off-by: Alex Bennée<alex.bennee@linaro.org>
>> Message-Id:<20230619171437.357374-6-alex.bennee@linaro.org>
>
> There were review comments on this series that haven't been applied.

Sorry I'd missed those. I've fixed that for the respin which is
currently checking on CI.
Paolo Bonzini June 26, 2023, 3:43 p.m. UTC | #3
On 6/26/23 15:39, Alex Bennée wrote:
>> There were review comments on this series that haven't been applied.
> Sorry I'd missed those. I've fixed that for the respin which is
> currently checking on CI.

Still not exactly what I asked for; please remove the "The Device Class" 
heading (just the heading, the content is good there) and change "API 
Reference" to an "======" heading.

Thanks,

Paolo
diff mbox series

Patch

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index c342ce18e3..0113afb6e6 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -13,6 +13,53 @@  features:
 - System for dynamically registering types
 - Support for single-inheritance of types
 - Multiple inheritance of stateless interfaces
+- Mapping internal members to publicly exposed properties
+
+The root object class is TYPE_OBJECT which provides for the basic
+object methods.
+
+The Device Class
+================
+
+The TYPE_DEVICE class is the parent class for all modern devices
+implemented in QEMU and adds some specific methods to handle QEMU
+device model. This includes managing the lifetime of devices from
+creation through to when they become visible to the guest and
+eventually unrealized.
+
+Device Life-cycle
+-----------------
+
+As class initialisation cannot fail devices have an two additional
+methods to handle the creation of dynamic devices. The ``realize``
+function is called with ``Error **`` pointer which should be set if
+the device cannot complete its setup. Otherwise on successful
+completion of the ``realize`` method the device object is added to the
+QOM tree and made visible to the guest.
+
+The reverse function is ``unrealize`` and should be were clean-up
+code lives to tidy up after the system is done with the device.
+
+All devices can be instantiated by C code, however only some can
+created dynamically via the command line or monitor. Likewise only
+some can be unplugged after creation and need an explicit
+``unrealize`` implementation. This is determined by the
+``user_creatable`` and ``hotpluggable`` variables in the root
+``DeviceClass`` structure.
+
+The QOM tree
+------------
+
+The QOM tree is a composition tree which represents all of the objects
+that make up a QEMU "machine". You can view this tree by running
+``info qom-tree`` in the :ref:`QEMU monitor`. It will contain both
+objects created by the machine itself as well those created due to
+user configuration.
+
+Creating a minimal device
+=========================
+
+A simple minimal device implementation may look something like bellow:
 
 .. code-block:: c
    :caption: Creating a minimal type