QOM infrastructure fixes and device conversions
* Fix for properties on objects > 4 GiB
* Performance improvements for QOM property handling
* Assertion cleanups
* MAINTAINERS additions
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABAgAGBQJWTd1wAAoJEPou0S0+fgE/v4oQAKdUcb8kDg8cb1rfjNHOGSxh
GLrBnpCE22ePtugMJqyGRE/bM2cMrXk/NLMGy1hXeNt+46zl6eUadZSV4UCjrq8q
I9S5/DuGpwc7NT5zw5/ZTx7b9rzCjwpvyq17Ljwme5QbKZvC86OiaZ5OjD7HZdYO
wY1vXuDoJXuj0r8hp6uS/mkfXx7R6O3bsmnOaz1yxSZqs0gi1r9En6Y/aoOCgz1V
bc09iWIAer0U71E9C+kinWwqBBx/PjhrkKxBGMmFEtf3O7Kd8irXpZPoafpRkgsJ
mvvUaiHFapJaXjjsSlknRfdspXdhwrrYhoCPso8vwEDEWMB03th2eBcau2rsfFXj
nHPAGwjxKETSQHD+/EbtCL+y94IkSbkdf1qF+TWnCiAHIF/yvoMbjRy5+7I/bsbC
Mp+qzjP+09E/qSclbeBH/EA/4ukjF2UbDGDh17/019aEpDVt016PKjoRhAWgbOJR
QKumj8y7+UQMvKo1jkqcOVf7pFTkKXeAsVvWjtA089X9iEczJQo6lrTxmtvLZ7K6
PehJPZFlm7hLTEykq+xZmgQAGrhx2MdQbbEgEDM5flGPRViypmihgRzFWIAT6rBY
WBEFRohRuHwTARDcmyP9MWeR5/hAlH3kD3O0qCYNbCZgQroXBW6bHQ913rerfwXh
uatso/iKOJ6YOlc7scPU
=/IfF
-----END PGP SIGNATURE-----
Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging
QOM infrastructure fixes and device conversions
* Fix for properties on objects > 4 GiB
* Performance improvements for QOM property handling
* Assertion cleanups
* MAINTAINERS additions
# gpg: Signature made Thu 19 Nov 2015 14:32:16 GMT using RSA key ID 3E7E013F
# gpg: Good signature from "Andreas Färber <afaerber@suse.de>"
# gpg: aka "Andreas Färber <afaerber@suse.com>"
* remotes/afaerber/tags/qom-devices-for-peter:
MAINTAINERS: Add check-qom-{interface,proplist} to QOM
qom: Clean up assertions to display values on failure
qom: Replace object property list with GHashTable
qom: Add a test case for complex property finalization
net: Convert net filter code to use object property iterators
ppc: Convert spapr code to use object property iterators
vl: Convert machine help code to use object property iterators
qmp: Convert QMP code to use object property iterators
qom: Introduce ObjectPropertyIterator struct for iteration
qdev: Change Property::offset field to ptrdiff_t type
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
28c3e6ee72
9 changed files with 387 additions and 52 deletions
|
|
@ -237,7 +237,7 @@ struct BusState {
|
|||
struct Property {
|
||||
const char *name;
|
||||
PropertyInfo *info;
|
||||
int offset;
|
||||
ptrdiff_t offset;
|
||||
uint8_t bitnr;
|
||||
qtype_code qtype;
|
||||
int64_t defval;
|
||||
|
|
|
|||
|
|
@ -344,8 +344,6 @@ typedef struct ObjectProperty
|
|||
ObjectPropertyResolve *resolve;
|
||||
ObjectPropertyRelease *release;
|
||||
void *opaque;
|
||||
|
||||
QTAILQ_ENTRY(ObjectProperty) node;
|
||||
} ObjectProperty;
|
||||
|
||||
/**
|
||||
|
|
@ -405,7 +403,7 @@ struct Object
|
|||
/*< private >*/
|
||||
ObjectClass *class;
|
||||
ObjectFree *free;
|
||||
QTAILQ_HEAD(, ObjectProperty) properties;
|
||||
GHashTable *properties;
|
||||
uint32_t ref;
|
||||
Object *parent;
|
||||
};
|
||||
|
|
@ -960,6 +958,55 @@ void object_property_del(Object *obj, const char *name, Error **errp);
|
|||
ObjectProperty *object_property_find(Object *obj, const char *name,
|
||||
Error **errp);
|
||||
|
||||
typedef struct ObjectPropertyIterator ObjectPropertyIterator;
|
||||
|
||||
/**
|
||||
* object_property_iter_init:
|
||||
* @obj: the object
|
||||
*
|
||||
* Initializes an iterator for traversing all properties
|
||||
* registered against an object instance.
|
||||
*
|
||||
* It is forbidden to modify the property list while iterating,
|
||||
* whether removing or adding properties.
|
||||
*
|
||||
* Typical usage pattern would be
|
||||
*
|
||||
* <example>
|
||||
* <title>Using object property iterators</title>
|
||||
* <programlisting>
|
||||
* ObjectProperty *prop;
|
||||
* ObjectPropertyIterator *iter;
|
||||
*
|
||||
* iter = object_property_iter_init(obj);
|
||||
* while ((prop = object_property_iter_next(iter))) {
|
||||
* ... do something with prop ...
|
||||
* }
|
||||
* object_property_iter_free(iter);
|
||||
* </programlisting>
|
||||
* </example>
|
||||
*
|
||||
* Returns: the new iterator
|
||||
*/
|
||||
ObjectPropertyIterator *object_property_iter_init(Object *obj);
|
||||
|
||||
/**
|
||||
* object_property_iter_free:
|
||||
* @iter: the iterator instance
|
||||
*
|
||||
* Releases any resources associated with the iterator.
|
||||
*/
|
||||
void object_property_iter_free(ObjectPropertyIterator *iter);
|
||||
|
||||
/**
|
||||
* object_property_iter_next:
|
||||
* @iter: the iterator instance
|
||||
*
|
||||
* Returns: the next property, or %NULL when all properties
|
||||
* have been traversed.
|
||||
*/
|
||||
ObjectProperty *object_property_iter_next(ObjectPropertyIterator *iter);
|
||||
|
||||
void object_unparent(Object *obj);
|
||||
|
||||
/**
|
||||
|
|
@ -1488,6 +1535,9 @@ void object_property_set_description(Object *obj, const char *name,
|
|||
* Call @fn passing each child of @obj and @opaque to it, until @fn returns
|
||||
* non-zero.
|
||||
*
|
||||
* It is forbidden to add or remove children from @obj from the @fn
|
||||
* callback.
|
||||
*
|
||||
* Returns: The last value returned by @fn, or 0 if there is no child.
|
||||
*/
|
||||
int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
|
||||
|
|
@ -1503,6 +1553,9 @@ int object_child_foreach(Object *obj, int (*fn)(Object *child, void *opaque),
|
|||
* non-zero. Calls recursively, all child nodes of @obj will also be passed
|
||||
* all the way down to the leaf nodes of the tree. Depth first ordering.
|
||||
*
|
||||
* It is forbidden to add or remove children from @obj (or its
|
||||
* child nodes) from the @fn callback.
|
||||
*
|
||||
* Returns: The last value returned by @fn, or 0 if there is no child.
|
||||
*/
|
||||
int object_child_foreach_recursive(Object *obj,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue