From: Anthony Liguori <anthony@codemonkey.ws>
To: Jan Kiszka <jan.kiszka@web.de>
Cc: qemu-devel <qemu-devel@nongnu.org>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>
Subject: Re: [Qemu-devel] [RFC] Plan for moving forward with QOM
Date: Wed, 14 Sep 2011 14:42:38 -0500 [thread overview]
Message-ID: <4E7103AE.5060201@codemonkey.ws> (raw)
In-Reply-To: <4E7100E9.70305@web.de>
On 09/14/2011 02:30 PM, Jan Kiszka wrote:
> On 2011-09-14 20:04, Anthony Liguori wrote:
>> Hi,
>>
>> I spent a couple hours today writing up some comparisons and an initial
>> task list for converting qdev to QOM. The main location of this is the
>> wiki[1] but I thought I would inline it here for easier commenting.
>>
>> I decided to do this because I wanted to avoid a massively long 00 patch
>> explaining the rationale for the first batch of changes that I'm going
>> to send out.
>>
>> There is so much complexity in qdev and the device model in general that
>> it's hard to come up with a concise document. I'd really appreciate
>> suggestions for topics to write up more rationale as that would help me
>> avoid writing a book on the topic :-)
>>
>> [1] http://wiki.qemu.org/Features/QOM
>>
>> == Device Relationships ==
>>
>> === Device Relationships in QDev ===
>>
>> The two main concepts in QDev are devices and busses. A device is
>> represented
>> by a DeviceState and a bus is represented by a BusState. They do not
>> share a
>> common base class. Devices can have properties but busses cannot. A device
>> has no direct relationship with other devices. The only relationship is
>> indirect through busses.
>>
>> A device may have zero or more busses associated with it via a has-a
>> relationship. Each child bus may have multiple devices associated with
>> it via
>> a reference. All devices have a single parent bus and all busses have a
>> single
>> parent device. These relationships form a strict tree where every
>> alternating
>> level is a bus level followed by a device level. The root of the tree
>> is the
>> main system bus often referred to as SysBus.
>>
>> === Device Relationships in QOM ===
>>
>> Everything in QOM is a device. The concept of busses are implemented as an
>> interface that a device implements. Devices can have two types of
>> relationships
>> with other devices: device composition or device backlinks.
>
> "Backlink" somehow implies to me that there is also a forward link. Why
> "back"?
Because I prefer to use confusing terminology :-) link is definitely better.
I'll s/backlink/link/g
>>
>> === Naming in QOM ===
>>
>> In QOM, there are only two namespaces, the device namespace and the property
>> namespace.
>>
>> All devices have unique names.
>
> Globally unique?
Yes. It's also unique for all backends too (or will be eventually).
>> There are no exceptions. Devices created
>> through composition are given unique names by deriving the name based on the
>> parent device name and a special separator, "::", that cannot be used in
>> user
>> supplied names.
>
> That must be specified in more details. First of all, we likely need to
> add a '::' prefix to reflect the root device so that no user can
> override any auto-generated first-level device name.
Heh, I ended up doing this in my patch series as it turns out :-)
>
> What will be the unique name of some, say, smbus-eeprom?
> ::i440fx::PIIX4_PM::smbus-eeprom<something>?
The PIIX4_PM appears as a function on the PIIX4 device. That means it will
appear like:
::i440fx::piix4::pm::smbus-eeprom[N]
> Will that something be
> derived from its bus address? Or a counter that ran while all sibling
> eeproms were created?
It's derived during creation.
> Such names can get fairly long I'm afraid...
A user should never even see these names. A user probably will always interact
with devices via paths.
We can also look at doing things like user-defined aliases or something like that.
>> Since a bus is-a device in QOM, there is no notion of having multiple busses
>> under the same device. A device can implement multiple bus interfaces,
>> but can
>> only be a single bus of any given bus interface.
>>
>> Device names are completely independent of pathnames. For devices that
>> are no
>> user created, device names should be treated as opaque blobs with
>> absolutely no
>> semantic meaning.
>>
>> All device relationships are identified as named properties. A QOM path
>> name
>> consists of a named device,
>
> With a system root device called '/'. So '/' is another
> character(-sequence) that is forbidden in device names.
Yes, but there is no system root device.
In normal scenarios, the main device would be something like the i440fx. That's
a device that's explicitly created by the user.
>> followed by a series of properties which may
>> or may
>> not refer to other devices. For instance, all of the following are
>> valid paths:
>>
>> /i440fx/piix3/i8042/aux
>> /i440fx/slot[1.0]/i8042/aux
>> /i440fx/slot[1.0]/bus/piix3/i8042/aux
>
> Navigating along the properties sounds like a good idea. The properties
> (hopefully) have telling names so that it is (generally) also user-friendly.
Exactly.
> Nevertheless, I guess we should also establish and enforce some naming
> rules for properties to avoid inconsistencies like "i2c" vs.
> "my_i2c_devices" or just "d", ie. completely meaningless names. In the
> end, variable (property) names now become part of the user interface.
Indeed.
> This scheme also avoids having to merge the device namespace completely
> into the path namespace, which would cause all kinds of conflicts again.
>
> <snip>
> So far for now.
Thanks for taking a look!
Regards,
Anthony Liguori
> Jan
>
next prev parent reply other threads:[~2011-09-14 19:42 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-14 18:04 [Qemu-devel] [RFC] Plan for moving forward with QOM Anthony Liguori
2011-09-14 18:49 ` Anthony Liguori
2011-09-14 19:30 ` Jan Kiszka
2011-09-14 19:42 ` Anthony Liguori [this message]
2011-09-14 21:15 ` Jan Kiszka
2011-09-14 22:11 ` Anthony Liguori
2011-09-15 13:43 ` Jan Kiszka
2011-09-15 14:11 ` Anthony Liguori
2011-09-15 16:38 ` Jan Kiszka
2011-09-15 18:01 ` Anthony Liguori
2011-09-16 10:12 ` Kevin Wolf
2011-09-16 13:00 ` Anthony Liguori
2011-09-14 20:00 ` Edgar E. Iglesias
2011-09-14 20:22 ` Anthony Liguori
2011-09-14 20:27 ` Edgar E. Iglesias
2011-09-14 20:37 ` Blue Swirl
2011-09-14 21:25 ` Anthony Liguori
2011-09-15 6:31 ` Gleb Natapov
2011-09-15 10:49 ` Stefan Hajnoczi
2011-09-15 13:08 ` Anthony Liguori
2011-09-15 13:17 ` Anthony Liguori
2011-09-15 14:23 ` Gleb Natapov
2011-09-16 14:46 ` John Williams
2011-09-16 16:10 ` Anthony Liguori
2011-09-17 1:11 ` Edgar E. Iglesias
2011-09-17 2:12 ` Anthony Liguori
2011-09-17 2:35 ` Edgar E. Iglesias
2011-09-15 13:57 ` Anthony Liguori
2011-09-15 14:14 ` Paolo Bonzini
2011-09-15 14:25 ` Gleb Natapov
2011-09-15 15:28 ` Anthony Liguori
2011-09-15 15:38 ` Gleb Natapov
2011-09-15 16:33 ` Anthony Liguori
2011-09-15 16:59 ` Gleb Natapov
2011-09-15 17:51 ` Anthony Liguori
2011-09-15 20:29 ` Gleb Natapov
2011-09-15 20:45 ` Peter Maydell
2011-09-15 21:15 ` Anthony Liguori
2011-09-16 16:33 ` Gleb Natapov
2011-09-16 17:47 ` Peter Maydell
2011-09-16 18:08 ` Anthony Liguori
2011-09-16 18:22 ` Gleb Natapov
2011-09-16 18:42 ` Anthony Liguori
2011-09-16 19:13 ` Gleb Natapov
2011-09-16 19:29 ` Anthony Liguori
2011-09-16 20:48 ` Gleb Natapov
2011-09-16 21:03 ` Anthony Liguori
2011-09-17 0:01 ` Edgar E. Iglesias
2011-09-16 18:18 ` Gleb Natapov
2011-09-15 20:50 ` Anthony Liguori
2011-09-16 16:47 ` Gleb Natapov
2011-09-17 0:48 ` Edgar E. Iglesias
2011-09-17 2:17 ` Anthony Liguori
2011-09-17 2:29 ` Anthony Liguori
2011-09-17 2:41 ` Edgar E. Iglesias
2011-09-15 6:47 ` Paolo Bonzini
2011-09-15 13:26 ` Anthony Liguori
2011-09-15 13:35 ` Paolo Bonzini
2011-09-15 13:54 ` Peter Maydell
2011-09-15 14:18 ` Anthony Liguori
2011-09-15 14:33 ` Paolo Bonzini
2011-09-15 14:48 ` Peter Maydell
2011-09-15 15:31 ` Anthony Liguori
2011-09-15 15:47 ` Paolo Bonzini
2011-09-15 20:23 ` Avi Kivity
2011-09-15 20:52 ` Anthony Liguori
2011-09-18 7:56 ` Avi Kivity
2011-09-18 14:00 ` Avi Kivity
2011-09-16 9:36 ` Gerd Hoffmann
2011-12-13 4:47 ` Paul Brook
2011-12-13 13:22 ` Anthony Liguori
2011-12-13 17:40 ` Paul Brook
2011-12-13 18:00 ` Anthony Liguori
2011-12-13 20:36 ` Paul Brook
2011-12-13 21:53 ` Anthony Liguori
2011-12-14 0:39 ` Paul Brook
2011-12-14 13:53 ` Anthony Liguori
2011-12-14 14:01 ` Avi Kivity
2011-12-14 14:11 ` Anthony Liguori
2011-12-14 14:35 ` Avi Kivity
2011-12-14 14:46 ` Anthony Liguori
2011-12-14 14:50 ` Avi Kivity
2011-12-15 18:59 ` Paul Brook
2011-12-15 19:12 ` Anthony Liguori
2011-12-15 21:28 ` Paul Brook
2011-12-16 2:08 ` Anthony Liguori
2011-12-16 5:11 ` Paul Brook
2011-12-14 9:11 ` Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E7103AE.5060201@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=jan.kiszka@web.de \
--cc=kraxel@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.