From: Eduardo Habkost <ehabkost@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Igor Mammedov <imammedo@redhat.com>,
Marcel Apfelbaum <marcel@redhat.com>
Subject: Re: [Qemu-devel] how to handle QOM 'container' objects whose contents depend on QOM properties?
Date: Tue, 6 Feb 2018 17:52:17 -0200 [thread overview]
Message-ID: <20180206195217.GG3291@localhost.localdomain> (raw)
In-Reply-To: <CAFEAcA8gwSqNpVD5xfk_yEz0OUMwa2rrfKaEhBXq5KravJmOag@mail.gmail.com>
On Tue, Feb 06, 2018 at 07:27:17PM +0000, Peter Maydell wrote:
> On 6 February 2018 at 19:04, Eduardo Habkost <ehabkost@redhat.com> wrote:
> > On Tue, Feb 06, 2018 at 06:18:25PM +0000, Peter Maydell wrote:
> >> One current approach to that is that instead of init'ing those
> >> child objects in the container init, we postpone that to
> >> container realize. This looks pretty ugly, and it also means
> >> that you can't do "forward this property" using add_alias if the
> >> target is the late-inited child (instead you have to have a
> >> real property on the container and set the property on the child
> >> manually after it's inited). You can see an example of this kind
> >> of thing in hw/arm/armv7m.c.
> >
> > My rule of thumb is: if something is configurable (even if it's
> > just slightly), it belongs to realize. instance_init is reserved
> > for stuff that don't take any external input. If your container
> > contents are not static, creating the contents is not a task for
> > instance_init.
> >
> > But I would like to understand the drawbacks of this approach
> > better. So, if the object didn't have any "forward this
> > property" aliases, would you see other problems with this
> > approach?
> >
> > Why exactly those boards need the aliases? Who sets those alias
> > properties? Can we provide helpers that make this task easier?
>
> The "forwarding properties" bit is the one I'm hitting at the
> moment. armv7m creates the CPU object, but it's really the
> SoC which creates armv7m that wants to set various properties
> on the CPU. (The CPU properties being set are things like
> "initial vector address" which in real hardware are set by
> the SoC hard-wiring various config signals on the core to 1 or 0.)
> So I'd end up needing to manually forward a lot of properties
> which are implemented in the cpu object but exposed to the
> rest of the system via the armv7m wrapper.
>
> It's also a bit weird because in the limit case you end up
> doing nothing in init and postponing it all to realize,
> at which point we're back to single-phase init. [...]
I disagree. A single-phase init inside realize would be able to
take external input, and that's a huge difference from
instance_init (which can't take any input).
> [...] I don't
> much like the "needed to configure this thing" design looking
> different from the "simple nonconfigurable thing" design.
> If nothing else, it makes it harder to convert from one to
> the other when we add a new SoC or whatever.
instance_init can't take any external input, so it can't be used
by configurable things. So if we really want both configurable
and non-configurable cases to look alike, it would mean not using
instance_init on the non-configurable cases.
If doing everything on realize is not practical, we need to
understand why and fix the limitations on our APIs.
---
Just for clarity, the assumptions I have here are:
A) Initialization has 3 steps:
1) telling QEMU what's the input we can get (registering
properties);
2) get input from the outside (setting properties); and
3) act on input set by (2).
B) Step (2) needs to be done after instance_init.
C) Step (3) can't be done on instance_init because of (B).
D) realize is the only opportunity we have to perform step (3)
today (but this can be changed).
--
Eduardo
next prev parent reply other threads:[~2018-02-06 19:52 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-06 18:18 [Qemu-devel] how to handle QOM 'container' objects whose contents depend on QOM properties? Peter Maydell
2018-02-06 19:04 ` Eduardo Habkost
2018-02-06 19:27 ` Peter Maydell
2018-02-06 19:52 ` Eduardo Habkost [this message]
2018-02-07 15:41 ` Paolo Bonzini
2018-02-07 16:22 ` Peter Maydell
2018-02-07 16:38 ` Paolo Bonzini
2018-02-07 16:49 ` Peter Maydell
2018-02-07 17:28 ` Paolo Bonzini
2018-02-07 17:34 ` Peter Maydell
2018-02-07 12:35 ` Igor Mammedov
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=20180206195217.GG3291@localhost.localdomain \
--to=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=marcel@redhat.com \
--cc=pbonzini@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).