From: Kevin Wolf <kwolf@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: lvivier@redhat.com, thuth@redhat.com, pkrempa@redhat.com,
berrange@redhat.com, Eduardo Habkost <ehabkost@redhat.com>,
qemu-block@nongnu.org, libvir-list@redhat.com, armbru@redhat.com,
jasowang@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com,
kraxel@redhat.com
Subject: Re: [PATCH 00/18] qapi/qom: QAPIfy object-add
Date: Wed, 2 Dec 2020 11:38:24 +0100 [thread overview]
Message-ID: <20201202103824.GB16765@merkur.fritz.box> (raw)
In-Reply-To: <17afbbfe-209f-e4b2-e9e1-b50abe1fce3c@redhat.com>
Am 02.12.2020 um 10:30 hat Paolo Bonzini geschrieben:
> On 01/12/20 23:08, Eduardo Habkost wrote:
> > > Properties are only a useful concept if they have a use. If
> > > -object/object_add/object-add can do the same job without properties,
> > > properties are not needed anymore.
> >
> > Do you mean "not needed for -object anymore"? Properties are
> > still used by internal C code (esp. board code),
> > -device/device_add, -machine, -cpu, and debugging commands (like
> > "info qtree" and qom-list/qom-get/qom-set).
>
> Yes.
Are internal uses mostly just right after object creation, or do we make
a lot of use of them during runtime?
> > > Right now QOM is all about exposing properties, and having multiple
> > > interfaces to set them (by picking a different visitor). But in practice
> > > most QOM objects have a lifetime that consists of 1) set properties 2) flip
> > > a switch (realized/complete/open) 3) let the object live on its own. 1+2
> > > are a single monitor command or CLI option; during 3 you access the object
> > > through monitor commands, not properties.
> >
> > I agree with this, except for the word "all" in "QOM is all
> > about". QOM is also an extensively used internal QEMU API,
> > including internal usage of the QOM property system.
>
> Yeah, "all about exposing properties" includes internal usage. And you're
> right that some "phase 3" monitor commands do work at the property level
> (mostly "info qtree", but also "qom-get" because there are some cases of
> public run-time properties).
>
> > I'm liking the direction this is taking. However, I would still
> > like to have a clearer and feasible plan that would work for
> > -device, -machine, and -cpu.
>
> -cpu is not a problem since it's generally created with a static
> configuration (now done with global properties, in the future it could be a
> struct).
>
> -machine and -device in principle could be done the same way as -object,
> just through a different registry (_not_ a huge struct; that's an acceptable
> stopgap for -object but that's it). The static aka field properties would
> remain as read-only, with defaults moved to instance_init or realize. But
> there would be again "triplication" with a trivial conversion:
>
> 1) in the QAPI schema, e.g. 'num_queues': 'int16'
>
> 2) in the struct, "int16_t num_queues;"
This one is optional, you can use the QAPI type even in the run-time
state. I guess this goes back to how much separation you want between
the configuration and the internal state.
> 3) in the realize function,
>
> s->num_queues = cfg->has_num_queues ? cfg->num_queues : 8;
>
> So having a mechanism for defaults in the QAPI schema would be good. Maybe
> 'num_queues': { 'type': 'int16', 'default': '8' }?
Defaults have been on the QAPI wishlist for a long time, and everyone
agrees that it would be nice to have them. Maybe it's time to finally
implement them.
> I also need to review more the part of this code with respect to the
> application of global properties. I wonder if there are visitor tricks that
> we can do, so that global properties keep working but correspond to QAPI
> fields instead of QOM properties.
Kevin
next prev parent reply other threads:[~2020-12-02 10:40 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-30 12:25 [PATCH 00/18] qapi/qom: QAPIfy object-add Kevin Wolf
2020-11-30 12:25 ` [PATCH 01/18] qapi/qom: Add ObjectOptions for iothread Kevin Wolf
2020-11-30 15:00 ` Paolo Bonzini
2020-11-30 15:54 ` Kevin Wolf
2020-11-30 12:25 ` [PATCH 02/18] qapi/qom: Add ObjectOptions for authz-* Kevin Wolf
2020-11-30 12:25 ` [PATCH 03/18] qapi/qom: Add ObjectOptions for cryptodev-* Kevin Wolf
2020-11-30 12:25 ` [PATCH 04/18] qapi/qom: Add ObjectOptions for dbus-vmstate Kevin Wolf
2020-11-30 12:25 ` [PATCH 05/18] qapi/qom: Add ObjectOptions for memory-backend-* Kevin Wolf
2020-11-30 12:25 ` [PATCH 06/18] qapi/qom: Add ObjectOptions for rng-*, deprecate 'opened' Kevin Wolf
2020-11-30 12:25 ` [PATCH 07/18] qapi/qom: Add ObjectOptions for throttle-group Kevin Wolf
2020-11-30 12:25 ` [PATCH 08/18] qapi/qom: Add ObjectOptions for secret*, deprecate 'loaded' Kevin Wolf
2020-11-30 12:25 ` [PATCH 09/18] qapi/qom: Add ObjectOptions for tls-*, " Kevin Wolf
2020-11-30 12:25 ` [PATCH 10/18] qapi/qom: Add ObjectOptions for can-* Kevin Wolf
2020-11-30 12:25 ` [PATCH 11/18] qapi/qom: Add ObjectOptions for colo-compare Kevin Wolf
2020-11-30 12:25 ` [PATCH 12/18] qapi/qom: Add ObjectOptions for filter-* Kevin Wolf
2020-11-30 12:25 ` [PATCH 13/18] qapi/qom: Add ObjectOptions for pr-manager-helper Kevin Wolf
2020-11-30 12:25 ` [PATCH 14/18] qapi/qom: Add ObjectOptions for sev-guest Kevin Wolf
2020-11-30 12:25 ` [PATCH 15/18] qapi/qom: Add ObjectOptions for input-* Kevin Wolf
2020-11-30 12:25 ` [PATCH 16/18] tests: Drop 'props' from object-add calls Kevin Wolf
2020-11-30 12:25 ` [PATCH 17/18] qapi/qom: Drop deprecated 'props' from object-add Kevin Wolf
2020-11-30 12:25 ` [PATCH 18/18] qapi/qom: QAPIfy object-add Kevin Wolf
2020-11-30 14:58 ` [PATCH 00/18] " Paolo Bonzini
2020-11-30 15:30 ` Daniel P. Berrangé
2020-11-30 16:13 ` Kevin Wolf
2020-11-30 16:52 ` Daniel P. Berrangé
2020-11-30 16:32 ` Paolo Bonzini
2020-12-01 8:36 ` Markus Armbruster
2020-11-30 15:46 ` Kevin Wolf
2020-11-30 16:57 ` Paolo Bonzini
2020-11-30 18:10 ` Kevin Wolf
2020-11-30 19:35 ` Paolo Bonzini
2020-12-01 16:20 ` Kevin Wolf
2020-12-01 17:16 ` Paolo Bonzini
2020-12-01 18:28 ` Eduardo Habkost
2020-12-01 19:35 ` Kevin Wolf
2020-12-01 21:23 ` Paolo Bonzini
2020-12-01 22:08 ` Eduardo Habkost
2020-12-02 9:30 ` Paolo Bonzini
2020-12-02 10:38 ` Kevin Wolf [this message]
2020-12-02 12:30 ` Paolo Bonzini
2020-12-02 12:51 ` Eduardo Habkost
2020-12-02 13:26 ` Paolo Bonzini
2020-12-02 13:54 ` Eduardo Habkost
2020-12-02 15:17 ` Kevin Wolf
2020-12-02 16:05 ` Eduardo Habkost
2020-12-02 17:35 ` Kevin Wolf
2020-12-02 19:45 ` Eduardo Habkost
2020-12-03 6:46 ` Gerd Hoffmann
2020-12-03 14:58 ` Eduardo Habkost
2020-12-03 11:11 ` Paolo Bonzini
2020-12-03 15:15 ` Kevin Wolf
2020-12-03 16:50 ` Paolo Bonzini
2020-12-03 17:43 ` Kevin Wolf
2020-12-03 18:01 ` Paolo Bonzini
2020-12-03 17:52 ` Eduardo Habkost
2020-12-03 18:10 ` Paolo Bonzini
2020-12-03 18:19 ` Eduardo Habkost
2020-12-02 10:27 ` Kevin Wolf
2020-12-02 12:41 ` Paolo Bonzini
2020-11-30 18:58 ` Peter Krempa
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=20201202103824.GB16765@merkur.fritz.box \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jasowang@redhat.com \
--cc=kraxel@redhat.com \
--cc=libvir-list@redhat.com \
--cc=lvivier@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=pkrempa@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/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).