All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Paul Brook <paul@codesourcery.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	qemu-devel@nongnu.org, 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 07:22:05 -0600	[thread overview]
Message-ID: <4EE7517D.2060709@codemonkey.ws> (raw)
In-Reply-To: <201112130447.58486.paul@codesourcery.com>

On 12/12/2011 10:47 PM, Paul Brook wrote:
>> 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.

This is an old thread.  A few things have evolved since then.

>
> Is the type of piix3::bus a typo? I think this should be Backlink<PciBus>.

Yup.  It's now link<PciBus>.

>
> What is the difference between "Is-a" and "Implements"?

It's multiple inheritance but interfaces (implements) cannot carry state which 
avoids an inheritance diamond problem.  This is the inheritance model used by 
Java, C#, and glib.

> 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.

Yes, that's exactly what this solves.  I think we could probably make i440fx 
is-a PCIDevice that implements a PciBus.  It's the same thing we would do with a 
PCI Bridge.

> I'm not so sure we should have Is-a at all.

A point that has been repeatedly brought up is that you can avoid primary 
inheritance and just rely on composition using composed interfaces as your 
communication vehicle.

I think in some cases, that will make sense, and the object model allows that.

> 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.

Yes, but don't confuse the inheritance tree with the device graph.

> 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.

i8042 is not a random ISA device.  It lives in the piix3 and the piix3 has 
intimate knowledge of it.  When model a20 line propagation, this is actually an 
important detail.

> 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>


No, there would be a single 'Pin' class that would be used for irqs.  There is 
no need to subclass it.

>
> 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>

So this is more like how it works today except s/Link/child/ and s/Target/link/g.

Regards,

Anthony Liguori

>
> 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
>

  reply	other threads:[~2011-12-13 13:22 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
2011-12-13 13:22   ` Anthony Liguori [this message]
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=4EE7517D.2060709@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kraxel@redhat.com \
    --cc=paul@codesourcery.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.