From: Paolo Bonzini <pbonzini@redhat.com>
To: Markus Armbruster <armbru@redhat.com>,
Cao jin <caoj.fnst@cn.fujitsu.com>
Cc: qemu-trivial@nongnu.org, qemu-devel@nongnu.org, peter.maydell@linaro.org
Subject: Re: [Qemu-trivial] [Qemu-devel] [PATCH] qdev property: cleanup
Date: Fri, 15 Apr 2016 12:06:32 +0200 [thread overview]
Message-ID: <5710BD28.1090301@redhat.com> (raw)
In-Reply-To: <87a8kzkzlj.fsf@dusky.pond.sub.org>
On 12/04/2016 10:20, Markus Armbruster wrote:
> QOM replaced the static DeviceInfo. The static qdev property arrays
> remain, but they're now stored into their DeviceClass's member props
> dynamically, by the TypeInfo's class_init() method.
>
> The qdev properties so stored get mapped to QOM properties in
> device_initfn(). Two, in fact: a legacy property and a static property.
> qdev_property_add_legacy() converts to the former, and
> qdev_property_add_static() converts to the latter.
So far so good. :)
> I don't understand the difference between "legacy" and "static" well
> enough to explain it. I also don't really understand what other kinds
> of QOM properties exist.
The "legacy" properties are needed for "info qtree". For example, a PCI
address "01.0" is the number 8 in the normal property, and the string
"01.0" in the legacy property.
The normal property does accept a string, and converts it into the
number, but if you want the "human-readable" string back you need to use
the legacy properties.
>> original: *The actual type of the property and the field depends on
>> the property type*
>>
>> Using two same word 'property' is ambiguous and hard for newbie to
>> distinguish. The 1st 'property' should mean a QOM property. and the
>> 2nd 'property', I think the original author`s meaning is: qdev
>> property.
The type of the QOM property depends on the PropertyInfo and it's stored
in prop->info->name.
QType is, generally speaking, a JSON type name (int, bool, string, list,
dictionary). Instead, the QOM property type is more complex; it can be:
1) a QAPI type name 2) link<QOM-TYPE> 3) child<QOM-TYPE>.
QAPI type names in turns are a superset of JSON type names. For example
the QType for an enumeration could be QTYPE_QSTRING (yes, it has
prop->qtype equal to QTYPE_QINT now, but that's an accident). The QAPI
type name instead could be "LostTickPolicy". In the future, the latter
would also be introspectable through the "query-qmp-schema".
There is no reason for prop->qtype to be QTYPE_QINT in the case of a
string. It would be easy to fix. For example you could remove
prop->qtype and add a new prop->info->qtype that contains one of
QTYPE_QINT, QTYPE_QBOOL or, for enumerations, QTYPE_QSTRING.
> I agree the wording of the comment is suboptimal.
>
> The thing being added is a static QOM property. Its type and so forth
> are taken from the qdev property @prop.
>
>> But, what is the qdev property *type*? cannot find 'type'
>> field in the definition except a *qtype*
It is prop->info->name: PropertyInfo is a description of the property,
and the name of the PropertyInfo becomes the type of the QOM property.
>> struct Property {
>> const char *name;
>> PropertyInfo *info;
>> ptrdiff_t offset;
>> uint8_t bitnr;
>> QType qtype;
>> int64_t defval;
>> int arrayoffset;
>> PropertyInfo *arrayinfo;
>> int arrayfieldsize;
>> };
>>
>> And *the actual type of the field* depends on the qtype
It doesn't depend on the qtype. It is stored there for convenience.
> Here's my try rewording the comment (sticking to GTK-Doc conventions
> even though I dislike them):
>
> /**
> * @qdev_property_add_static:
> * @dev: Device to add the property to
> * @prop: The qdev property definition
> * @err: location to store error information
> *
> * Add a static QOM property to @dev for qdev property @prop.
> * On error, store error in @errp.
> */
>
> Paolo, is it correct?
Yes, it is. You can add also "The type of the QOM property is derived
from prop->info", which is what Cao Jin really wanted to convey in his
patch.
Paolo
WARNING: multiple messages have this Message-ID (diff)
From: Paolo Bonzini <pbonzini@redhat.com>
To: Markus Armbruster <armbru@redhat.com>,
Cao jin <caoj.fnst@cn.fujitsu.com>
Cc: qemu-trivial@nongnu.org, qemu-devel@nongnu.org, peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH] qdev property: cleanup
Date: Fri, 15 Apr 2016 12:06:32 +0200 [thread overview]
Message-ID: <5710BD28.1090301@redhat.com> (raw)
In-Reply-To: <87a8kzkzlj.fsf@dusky.pond.sub.org>
On 12/04/2016 10:20, Markus Armbruster wrote:
> QOM replaced the static DeviceInfo. The static qdev property arrays
> remain, but they're now stored into their DeviceClass's member props
> dynamically, by the TypeInfo's class_init() method.
>
> The qdev properties so stored get mapped to QOM properties in
> device_initfn(). Two, in fact: a legacy property and a static property.
> qdev_property_add_legacy() converts to the former, and
> qdev_property_add_static() converts to the latter.
So far so good. :)
> I don't understand the difference between "legacy" and "static" well
> enough to explain it. I also don't really understand what other kinds
> of QOM properties exist.
The "legacy" properties are needed for "info qtree". For example, a PCI
address "01.0" is the number 8 in the normal property, and the string
"01.0" in the legacy property.
The normal property does accept a string, and converts it into the
number, but if you want the "human-readable" string back you need to use
the legacy properties.
>> original: *The actual type of the property and the field depends on
>> the property type*
>>
>> Using two same word 'property' is ambiguous and hard for newbie to
>> distinguish. The 1st 'property' should mean a QOM property. and the
>> 2nd 'property', I think the original author`s meaning is: qdev
>> property.
The type of the QOM property depends on the PropertyInfo and it's stored
in prop->info->name.
QType is, generally speaking, a JSON type name (int, bool, string, list,
dictionary). Instead, the QOM property type is more complex; it can be:
1) a QAPI type name 2) link<QOM-TYPE> 3) child<QOM-TYPE>.
QAPI type names in turns are a superset of JSON type names. For example
the QType for an enumeration could be QTYPE_QSTRING (yes, it has
prop->qtype equal to QTYPE_QINT now, but that's an accident). The QAPI
type name instead could be "LostTickPolicy". In the future, the latter
would also be introspectable through the "query-qmp-schema".
There is no reason for prop->qtype to be QTYPE_QINT in the case of a
string. It would be easy to fix. For example you could remove
prop->qtype and add a new prop->info->qtype that contains one of
QTYPE_QINT, QTYPE_QBOOL or, for enumerations, QTYPE_QSTRING.
> I agree the wording of the comment is suboptimal.
>
> The thing being added is a static QOM property. Its type and so forth
> are taken from the qdev property @prop.
>
>> But, what is the qdev property *type*? cannot find 'type'
>> field in the definition except a *qtype*
It is prop->info->name: PropertyInfo is a description of the property,
and the name of the PropertyInfo becomes the type of the QOM property.
>> struct Property {
>> const char *name;
>> PropertyInfo *info;
>> ptrdiff_t offset;
>> uint8_t bitnr;
>> QType qtype;
>> int64_t defval;
>> int arrayoffset;
>> PropertyInfo *arrayinfo;
>> int arrayfieldsize;
>> };
>>
>> And *the actual type of the field* depends on the qtype
It doesn't depend on the qtype. It is stored there for convenience.
> Here's my try rewording the comment (sticking to GTK-Doc conventions
> even though I dislike them):
>
> /**
> * @qdev_property_add_static:
> * @dev: Device to add the property to
> * @prop: The qdev property definition
> * @err: location to store error information
> *
> * Add a static QOM property to @dev for qdev property @prop.
> * On error, store error in @errp.
> */
>
> Paolo, is it correct?
Yes, it is. You can add also "The type of the QOM property is derived
from prop->info", which is what Cao Jin really wanted to convey in his
patch.
Paolo
next prev parent reply other threads:[~2016-04-15 10:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-24 10:14 [Qemu-trivial] [PATCH] qdev property: cleanup Cao jin
2016-03-24 10:14 ` [Qemu-devel] " Cao jin
2016-03-24 11:25 ` [Qemu-trivial] " Paolo Bonzini
2016-03-24 11:25 ` [Qemu-devel] " Paolo Bonzini
2016-03-25 6:06 ` [Qemu-trivial] " Cao jin
2016-03-25 6:06 ` [Qemu-devel] " Cao jin
2016-04-08 11:17 ` [Qemu-trivial] " Markus Armbruster
2016-04-08 11:17 ` Markus Armbruster
2016-04-09 14:25 ` [Qemu-trivial] " Cao jin
2016-04-09 14:25 ` Cao jin
2016-04-12 8:20 ` [Qemu-trivial] " Markus Armbruster
2016-04-12 8:20 ` Markus Armbruster
2016-04-12 12:49 ` [Qemu-trivial] " Cao jin
2016-04-12 12:49 ` Cao jin
2016-04-15 10:06 ` Paolo Bonzini [this message]
2016-04-15 10:06 ` Paolo Bonzini
2016-04-15 11:15 ` [Qemu-trivial] " Cao jin
2016-04-15 11:15 ` Cao jin
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=5710BD28.1090301@redhat.com \
--to=pbonzini@redhat.com \
--cc=armbru@redhat.com \
--cc=caoj.fnst@cn.fujitsu.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-trivial@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.