From: Anthony Liguori <anthony@codemonkey.ws>
To: Paul Brook <paul_brook@mentor.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Jan Kiszka <jan.kiszka@siemens.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [RFC] Plan for moving forward with QOM
Date: Thu, 15 Dec 2011 20:08:06 -0600 [thread overview]
Message-ID: <4EEAA806.2050200@codemonkey.ws> (raw)
In-Reply-To: <201112152128.43852.paul_brook@mentor.com>
On 12/15/2011 03:28 PM, Paul Brook wrote:
>> There is a second class of "user" that is doing very sophisticated things
>> and cares about this information. But this sophisticated user (i.e.
>> libvirt) wants to be able to probe QEMU to understand what features
>> are probably available because it very likely is evolving just as quickly as
>> QEMU is.
>
> I disagree. Maybe this is because you're coming from the PC/Linux world where
> all hardware is basically the same.
>
> In the embedded world there are many more vastly different machines. And some
> of those have several similar but different enough to matter variants.
> There's a good chance the guest OS needs exactly the right one.
>
> Take the Stellaris boards as an example. We currently implement two boards.
> There are well over a hundred variants in this SoC family. A good proportion
> of these chips will be used in projects that include a custom PCB design.
> There are at least three different reference boards for the LM3S6965 alone.
> This is not unusual.
>
> I really don't want to have to teach qemu about hunderds of different SoCs
> connected to thousands of different "motherboards", most of which we'll never
> even know about. I'd like for users to be able to create their own hardware
> config without having to track qemu implementation details.
Yes, we're on the same page here. One of my primary objectives in this
refactoring is to eliminate the notion of a "machine" as anything that is at all
special. I want the ability to have a "pc" device that has (via composition)
all of the normal PC components via composition.
But don't confuse flexibility with compatibility. If you're hooking up IRQ
lines to make a custom SOC, then I don't think you're the type of user that
can't handle the fact that we may change whether the PIIX inherits from or
implements it's bus in a new version.
I also don't want the user to have to always make the decision about how to hook
up IRQs for every single device because in a lot of circumstances, there's no point.
A basic premise for me is that simple things should be simple. It shouldn't
take a 800 line config file to create a PC.
>> You're advocating only connecting properties to properties, and never an
>> object to a property? I think that's needlessly complicated. In the vast
>> majority of cases, you just case about saying "connect this
>> CharDriverState to this Serial device". We should make it much more
>> complicated than that.
>
> Yes, that's what I'm saying. I'm finding it hard to believe that more than
> one link being stateful is such an exceptional case.
>
> Am I right in thinking that you're effectively implementing multiple
> inheritance via properties? If so I guess works around the single-inheritance
> limitation in many cases.
No. Properties are strictly for composition. A lot of times people advocate
using composition instead of inheritance. In fact, it's covered extensively in
"Effective C++" if you're interested.
>> But this entire use-case seems to be synthetic. Do you have a real case
>> where you would want to inherit twice from the same interface?
>
> A GPIO controller (of which interrupt controllers are a subset). We want to
> expose and use many single-bit control line interfaces.
I don't see it but perhaps it's because I don't have sufficient imagination.
Can you point me to a concrete example?
I very much want to avoid over engineering things so I would prefer to only
worry problems we know we need to solve.
Honestly, the details we're discussing right now are minor and it wouldn't be
that hard to change the way inheritance works if we wanted to support true MI.
> I suppose pckbd.c is annother example. This implements a pair of PS/2 serial
> busses.
I've dropped the notion of a "bus" in QOM. They don't exist at all.
The way this gets modeled in QOM is just to have a link<PS2Device> named kbd and
a link<PS2Device> named aux.
pckbd implements PS2Bus and PS2Bus looks something like:
typedef struct PS2Bus {
Interface parent;
void (*set_irq)(PS2Bus *bus, PS2Device *dev, int level);
} PS2Bus;
PS2Device looks like:
typedef struct PS2Device {
Device parent;
PS2Bus *bus;
// ...
} PS2Device;
The device just does:
void myfunc(PS2Keyboard *s)
{
ps2_bus_set_irq(s->bus, PS2_DEVICE(s), 1);
}
You could call bus "controller", "other-device", "fubar", or whatever.
> Currently we don't model these and use hardcoded callbacks when
> creating the keyboard/mouse devices.
Yes, it sucks, and once my qom-next tree is merged I'll fix this so it works as
above and you can instantiate a PS2Mouse and set the i8054.aux property to the
mouse device that you create.
> Once modelled properly I'd expect a
> board to be able to replace either with a third [as yet unimplemented] PS/2
> device.
The i8042 is not as generic as you think, but yes, if you made a PS/2 AUX
compatible device (perhaps a tablet or something), you could just drop it in.
> Any of the those devices should also be usable with the single-port
> ARM PL050 controller.
Yup, it would all work out very nicely. PL050 would implement PS2Bus and have
just a single link<PS2Device>.
Regards,
Anthony Liguori
>
> Paul
>
next prev parent reply other threads:[~2011-12-16 2:08 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
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 [this message]
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=4EEAA806.2050200@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=armbru@redhat.com \
--cc=avi@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=jan.kiszka@siemens.com \
--cc=kraxel@redhat.com \
--cc=paul_brook@mentor.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).