From: Paul Brook <paul@codesourcery.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Anthony Liguori <aliguori@us.ibm.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
Markus Armbruster <armbru@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [Qemu-devel] [RFC] Plan for moving forward with QOM
Date: Tue, 13 Dec 2011 04:47:58 +0000 [thread overview]
Message-ID: <201112130447.58486.paul@codesourcery.com> (raw)
In-Reply-To: <4E70EC90.8000904@us.ibm.com>
> The full set of devices names and properties used in this example are
> below:
>
> Type: I440FX
> Is-a: Device
> Implements: PciBus
> Name: i440fx
> Properties:
> piix3: Composition<PIIX3>
> slot[1.0]: Backlink<PciDevice>
>
> Type: PIIX3
> Isa-a: PciDevice
> Implements: IsaBus
> Name: i440fx::piix3
> Properties:
> i8042: Composition<I8042>
> bus: Backlink<PciDevice> (inherited from PciDevice)
>
> Type: I8042
> Isa-a: Device
> Implements: Ps2Controller
> Name: i440fx::piix3::i8042
> Properties:
> aux: Backlink<Ps2Mouse>
I haven't looks at the patches in detail, but your description looks fairly
dubious in its current form.
Is the type of piix3::bus a typo? I think this should be Backlink<PciBus>.
What is the difference between "Is-a" and "Implements"? It sounds like some
form of multiple inheritance, but it's unclear to me which should be the
primary type. For PCI host bridges like the i440fx we currently have to split
them into two, one fot the host bus and the other for the PCI bus. It feels
like if we design the model properly this should no longer be necessary.
I'm not so sure we should have Is-a at all. Isn't the point of replacing the
bus/device hierachy with a set of links that devices don't follow a simple
tree structure? It's fairly common for the tree branches to merge back
together when a single device communicates via multiple busses.
It's somewhat unlear what the purpose of composition is. Using composition
for piix4::piiix and piix3::i8042 seems wrong. In fact piix3 shouldn't have
any knowledge of i8042 at all, it's just annother random ISA device.
Speaking of which, presumably i8042 should be an IsaDevice, which inherits
(amongst other things) a bus: Backlink<IsaBus> property.
What happens when my device has multiple parts that need to be referred to by
other devices? An interrupt controller is the most obvious example, but
similar issues occur for any device that has multiple connections of the same
type. Am I expected to create a whole bunch of dummy devices and a private
interface to bounce everything back to the main device, somethig like:
Type: MagicInterruptController
Is-a: SystemBusDevice
Implements: MagicInterruptInterface
Properties:
in_pin0: Composition<MagicInterruptPin, pin_number=0, controller=this>
in_pin1: Composition<MagicInterruptPin, pin_number=1, controller=this>
out_pin: link<IRQ>
Type: MagicInterruptPin
Implements: IRQ
Properties:
pin_number: int
controller: BackLink<MagicInterruptInterface>
It seems like rather than having a device implement a set of interfaces, it
might be better to have these be properties. Call them a Target<>. The above
then becomes something like:
Type: MagicInterruptController
Is-a: SystemBusDevice
Properties:
in_pin0: Target<IRQ>
in_pin1: Target<IRQ>
out_pin: Link<IRQ>
Where the Target<> properties are objects/methods provided by the device, and
the Link<> properties are pointed to them as the machine is constructed.
Paul
next prev parent reply other threads:[~2011-12-13 4:48 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
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 [this message]
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=201112130447.58486.paul@codesourcery.com \
--to=paul@codesourcery.com \
--cc=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=jan.kiszka@siemens.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).