Statistics
| Branch: | Revision:

root / qom / object.c @ feature-archipelago

History | View | Annotate | Download (35.3 kB)

# Date Author Comment
0b7593e0 02/14/2014 10:12 pm Paolo Bonzini

qapi: Add human mode to StringOutputVisitor

This will be used by "info qtree". For numbers it prints both the
decimal and hex values. For sizes it rounds to the nearest power
of 2^10. For strings, it puts quotes around the string and separates
NULL and empty string....

133fe774 01/14/2014 04:10 am Edgar E. Iglesias

Merge remote branch 'luiz/queue/qmp' into qmpq

  • luiz/queue/qmp:
    migration: qmp_migrate(): keep working after syntax error
    qerror: Remove assert_no_error()
    qemu-option: Remove qemu_opts_create_nofail
    target-i386: Remove assert_no_error usage
    hw: Remove assert_no_error usages...
b0ed5e9f 01/06/2014 08:45 pm Paolo Bonzini

qom: catch errors in object_property_add_child

Signed-off-by: Paolo Bonzini <>
Reviewed-by: Igor Mammedov <>
Tested-by: Igor Mammedov <>
Signed-off-by: Luiz Capitulino <>

f54c19ca 12/24/2013 07:02 pm Hervé Poussineau

qom: Detect bad reentrance during object_class_foreach()

We should not modify the type hash table while it is being iterated on.
Assert that it does not happen.

Signed-off-by: Hervé Poussineau <>
Signed-off-by: Paolo Bonzini <>...

0ab4c94c 12/24/2013 06:27 pm Peter Crosthwaite

qom: Split out object and class caches

The object-cast and class-cast caches cannot be shared because class
caching is conditional on the target type not being an interface and
object caching is unconditional. Leads to a bug when a class cast
to an interface follows an object cast to the same interface type:...

b061dc41 12/24/2013 06:27 pm Paolo Bonzini

qom: Do not register interface "types" in the type table and fix names

There should be no need to look up nor enumerate the interface "types",
whose "classes" are really just vtables. Just create the types and
add them to the interface list of the parent type....

2d3aa28c 11/19/2013 11:58 am Vlad Yasevich

qom: Fix memory leak in object_property_set_link()

Save the result of the call to object_get_canonical_path()
so we can free it.

Cc:
Signed-off-by: Vlad Yasevich <>
Reviewed-by: Amos Kong <>
Reviewed-by: Stefan Hajnoczi <>...

e732ea63 10/14/2013 05:46 pm Michael S. Tsirkin

qom: add pointer to int property helpers

Make it easy to add read-only helpers for simple
integer properties in memory.

Reviewed-by: Paolo Bonzini <>
Reviewed-by: Gerd Hoffmann <>
Tested-by: Gerd Hoffmann <>...

213f0c4f 08/30/2013 10:15 pm Andreas Färber

qom: Pass available size to object_initialize()

To be passed on to object_initialize_with_type().

Acked-by: Cornelia Huck <> (virtio-ccw)
Signed-off-by: Andreas Färber <>

5b9237f6 08/30/2013 10:15 pm Andreas Färber

qom: Assert instance size in object_initialize_with_type()

This catches objects initializing beyond allocated memory, e.g.,
when subtypes get extended with instance state of their own.

Suggested-by: Peter Maydell <>
Signed-off-by: Andreas Färber <>

8231c2dd 08/16/2013 07:44 pm Eduardo Habkost

qom: Introduce instance_post_init hook

This will allow classes to specify a function to be called after all
instance_init functions were called.

This will be used by DeviceState to call qdev_prop_set_globals() at the
right moment.

Signed-off-by: Eduardo Habkost <>...

9d6a3d58 07/10/2013 06:53 pm Peter Crosthwaite

qom: Fix class cast of NULL classes

Its clear from the implementation that class casting is supposed to work
with a NULL class argument. Guard all dereferences of the class argument
against NULL accordingly.

Signed-off-by: Peter Crosthwaite <>...

f08c03f3 07/04/2013 06:42 pm Jan Kiszka

qom: Use atomics for object refcounting

Object reference counts will soon be changed outside the BQL. So we need
to use atomics in object_ref/unref.

Based on a patch by Liu Ping Fan.

Signed-off-by: Liu Ping Fan <>
Signed-off-by: Jan Kiszka <>...

95916abc 05/22/2013 03:40 pm Peter Crosthwaite

qom/object: Don't poll cast cache for NULL objects

object_dynamic_cast_assert used to be tolerant of NULL objects and not
assert. It's clear from the implementation that this is the expected
behavior.

The preceding check of the cast cache dereferences obj however causing...

03587328 05/13/2013 11:27 pm Anthony Liguori

qom: aggressively optimize qom casting

This patch adds a small typename cache to ObjectClass. This allows
caching positive casts within each ObjectClass. Benchmarking a
PPC workload provided by Aurelien, this patch eliminates every
single g_hash_table_lookup() happening during the benchmark (which...

bf0fda34 05/13/2013 05:52 pm Paolo Bonzini

qom: allow casting of a NULL class

This mimics what we do in object_dynamic_cast_assert.

Signed-off-by: Paolo Bonzini <>
Message-id:
Signed-off-by: Anthony Liguori <>

793c96b5 05/13/2013 05:52 pm Paolo Bonzini

qom: add a fast path to object_class_dynamic_cast

For leaf classes, in many cases the callbacks will simply downcast
the object back to the original class. Add this fast path to
object_class_dynamic_cast, object_dynamic_cast will inherit it.

Signed-off-by: Paolo Bonzini <>...

be17f18b 05/13/2013 05:52 pm Paolo Bonzini

qom: pass file/line/function to asserting casts

Signed-off-by: Paolo Bonzini <>
Message-id:
Signed-off-by: Anthony Liguori <>

fa131d94 05/13/2013 05:52 pm Paolo Bonzini

qom: trace asserting casts

This provides a way to detect the cast that leads to a (reproducible)
crash even when QOM cast debugging is disabled.

Signed-off-by: Paolo Bonzini <>
Message-id: ...

3556c233 05/13/2013 05:52 pm Paolo Bonzini

qom: allow turning cast debugging off

Cast debugging can have a substantial cost (20% or more). Instead of adding
special-cased "fast casts" in the hot paths, we can just disable it in
releases. The tracing facilities we just added make it easier to analyze...

9ab880b3 04/30/2013 05:40 pm Alexander Graf

QOM: Fail casts for unknown types

When we try to cast an object to an unknown type, fail the cast. Today
we would simply run into an assert().

This fixes a bug on qemu-system-s390x for me that gets triggered by the
audio code looking for PCI and ISA buses....

2e1103f6 04/29/2013 08:16 pm Paolo Bonzini

qom: do not return root for empty path

An empty path will return the sole object of that type in the
QOM tree. This is different from "/", which returns the root.

Signed-off-by: Paolo Bonzini <>
Message-id: ...

e0a83fc2 04/17/2013 12:10 am Paolo Bonzini

qom: do nothing on unparent of object without parent

Otherwise, device_unparent will fail to get a canonical path of
the object.

Signed-off-by: Paolo Bonzini <>
Message-id:
Signed-off-by: Anthony Liguori <>

404e7a4f 03/26/2013 11:16 pm Anthony Liguori

Merge remote-tracking branch 'mst/tags/for_anthony' into staging

virtio,pci,qom

Work by Alex to support VGA assignment,
pci and virtio fixes by Stefan, Jason and myself, and a
new qmp event for hotplug support by myself.

Signed-off-by: Michael S. Tsirkin <>...

e998fa8d 03/26/2013 09:00 pm Michael S. Tsirkin

qom: call class destructor before unparent

It seems more logical to have destruction flow start with the subclass
and move up to the base class. This ensures object has a valid
canonical path when destructor is called.

Signed-off-by: Michael S. Tsirkin <>

54852b03 03/26/2013 04:27 pm Peter Maydell

qom: Detect attempts to add a property that already exists

Detect attempts to add a property to an object if one of
that name already exists, and report them as errors.

Signed-off-by: Peter Maydell <>
Reviewed-by: Anthony Liguori <>...

3e407de4 02/22/2013 12:34 am Peter Crosthwaite

qom/object.c: Reset interface list on inheritance

The QOM framework will attempt the recreate a classes interface list from
scratch for each class. This means that a child class should zero out the
list of interfaces when cloned from the parent class.

Currently the list is memcpy()d from the parent to the child. As the interface...

00e2ceae 02/22/2013 12:34 am Peter Crosthwaite

qom/object.c: Allow itf cast with num_itfs = 0

num_interfaces only tells you how many interfaces the concrete child class has
(as defined in the TypeInfo). This means if you have a child class which defines
no interfaces of its own, but its parent has interfaces you cannot cast to those...

b76facc3 02/01/2013 11:53 pm Paolo Bonzini

qom: remove object_delete

This is now unused. Document the initial reference count of an object
and when it will be freed/finalized.

Signed-off-by: Paolo Bonzini <>
Signed-off-by: Anthony Liguori <>

52e636cd 02/01/2013 11:53 pm Paolo Bonzini

qom: preserve object while unparenting it

Avoid that the object disappears after it's deleted from the QOM
composition tree, in case that was the only reference to it.

Acked-by: Andreas Färber <>
Signed-off-by: Paolo Bonzini <>...

17862378 01/28/2013 12:33 am Andreas Färber

qom: Introduce object_class_is_abstract()

This lets a caller check if an ObjectClass as returned by, e.g.,
object_class_by_name() is instantiatable.

Signed-off-by: Andreas Färber <>
Cc: Anthony Liguori <>

3e84b483 01/15/2013 11:54 am Andreas Färber

qom: Make object_resolve_path_component() path argument const

A usage with a hardcoded partial path such as

object_resolve_path_component(obj, "foo")

is totally valid but currently leads to a compilation error. Fix this.

Signed-off-by: Andreas Färber <>...

14cccb61 12/19/2012 09:31 am Paolo Bonzini

qom: move include files to include/qom/

Signed-off-by: Paolo Bonzini <>

7b1b5d19 12/19/2012 09:31 am Paolo Bonzini

qapi: move include files to include/qobject/

Signed-off-by: Paolo Bonzini <>

4167c42c 12/19/2012 09:31 am Paolo Bonzini

qapi: remove qapi/qapi-types-core.h

The file is only including error.h and qerror.h. Prefer explicit
inclusion of whatever files are needed.
Signed-off-by: Paolo Bonzini <>

339c2708 11/26/2012 09:41 pm Paolo Bonzini

qom: make object_finalize static

It is not used anymore, and there is no need to make it public.

Signed-off-by: Paolo Bonzini <>
Signed-off-by: Anthony Liguori <>

764b6312 11/26/2012 09:41 pm Paolo Bonzini

qom: fix refcount of non-heap-allocated objects

The reference count for embedded objects is always one too low, because
object_initialize_with_type returns with zero references to the object.
This causes premature finalization of the object (or an assertion failure)...

667d22d1 11/26/2012 09:41 pm Paolo Bonzini

qdev: move bus removal to object_unparent

Add an ObjectClass method that is done at object_unparent time. It
should remove any backlinks to the object in the composition tree,
so that object_delete will be able to drop the last reference and
free the object....

fde9bf44 11/26/2012 09:41 pm Paolo Bonzini

qom: make object_delete usable for statically-allocated objects

Store in the object the freeing function that will be used at deletion
time. This makes it possible to use object_delete on statically-allocated
(embedded) objects. Dually, it makes it possible to use object_unparent...

b7f43fe4 11/26/2012 05:38 pm Paolo Bonzini

qom: dynamic_cast of NULL is always NULL

Trying to cast a NULL value will cause a crash. Returning
NULL is also sensible, and it is also what the type-unsafe
DO_UPCAST macro does.

Reported-by: Markus Armbruster <>
Signed-off-by: Paolo Bonzini <>...

0e558843 11/16/2012 04:36 pm Anthony Liguori

object: add object_property_add_bool (v2)

Signed-off-by: Anthony Liguori <>
---
v1 -> v2
- Fix whitespace (Andreas Faerber)

da5a44e8 08/24/2012 04:19 am Paolo Bonzini

qom: object_delete should unparent the object first

object_deinit is only called when the reference count goes to zero,
and yet tries to do an object_unparent. Now, object_unparent
either does nothing or it will decrease the reference count.
Because we know the reference count is zero, the object_unparent...

33e95c63 08/13/2012 12:20 pm Anthony Liguori

qom: Reimplement Interfaces

The current implementation of Interfaces is poorly designed. Each interface
that an object implements ends up being an object that's tracked by the
implementing object. There's all sorts of gymnastics to deal with casting
between these objects....

0866aca1 06/18/2012 04:14 pm Anthony Liguori

qbus: Make child devices links

Make qbus children show up as link<> properties. There is no stable
addressing for qbus children so we use an unstable naming convention.

This is okay in QOM though because the composition name is expected to
be what's stable....

8cb6789a 06/18/2012 04:14 pm Paolo Bonzini

qdev: Remove qdev_prop_exists()

Can be replaced everywhere with object_property_find().

Signed-off-by: Paolo Bonzini <>
Signed-off-by: Andreas Färber <>

89bfe000 06/18/2012 04:14 pm Paolo Bonzini

qom: Push error reporting to object_property_find()

Avoids duplicated error_set().

Signed-off-by: Paolo Bonzini <>
[AF: Also drop error_set() in object_property_del().]
Signed-off-by: Andreas Färber <>

3b50e311 06/18/2012 04:14 pm Paolo Bonzini

qom: Add class_base_init

The class_base_init TypeInfo callback was present in one of the early
QOM versions but removed (on my request...) before committing. We
will need it soon, add it.

Signed-off-by: Paolo Bonzini <>
Reviewed-by: Anthony Liguori <>...

745549c8 06/18/2012 04:14 pm Paolo Bonzini

qom: Make Object a type

Right now the base Object class has a special NULL type. Change this so
that we will be able to add class_init and class_base_init callbacks.
To do this, remove some special casing of ObjectClass that is not really
necessary.

Signed-off-by: Paolo Bonzini <>...

049cb3cf 06/18/2012 04:14 pm Paolo Bonzini

qom: Assert that public types have a non-NULL parent field

This protects against unwanted effects of changing TYPE_OBJECT from
NULL to a string.

Suggested-by: Andreas Färber <>
Signed-off-by: Paolo Bonzini <>
Signed-off-by: Andreas Färber <>

2f262e06 06/18/2012 04:14 pm Paolo Bonzini

qdev: Push "type" property up to Object

Now that Object is a type, add an instance_init function and push
the "type" property from qdev to there.

Signed-off-by: Paolo Bonzini <>
Signed-off-by: Andreas Färber <>

e7cce67f 06/18/2012 04:14 pm Paolo Bonzini

qom: Add object_class_get_parent()

This simple bit of functionality was missing and we'll need it soon,
so add it.

Signed-off-by: Paolo Bonzini <>
Reviewed-by: Anthony Liguori <>
[AF: Document possible NULL return value]...

5d9d3f47 06/18/2012 04:14 pm Andreas Färber

qom: Introduce object_property_is_{child,link}()

Avoids hardcoding partial string comparisons.

Signed-off-by: Alexander Barabash <>
Signed-off-by: Andreas Färber <>
Reviewed-by: Paolo Bonzini <>

32efc535 06/18/2012 04:14 pm Paolo Bonzini

qom: Add object_child_foreach()

A utility function that will be used to implement hierarchical realization.

Signed-off-by: Paolo Bonzini <>
Reviewed-by: Anthony Liguori <>
[AF: Drop unrelated whitespace change, add Returns: in documentation]...

8185bfc1 05/12/2012 03:17 pm Paolo Bonzini

qdev: Use object_property_print() in info qtree

Otherwise, non-string properties without a legacy counterpart are missed.
Also fix error propagation in object_property_print() itself.

Signed-off-by: Paolo Bonzini <>
Reviewed-by: Anthony Liguori <>...

a612b2a6 04/02/2012 11:04 pm Paolo Bonzini

qom: add container_get

This is QOM "mkdir -p". It is useful when referring to
container objects such as "/machine".

Reviewed-by: Anthony Liguori <>
Signed-off-by: Paolo Bonzini <>
Signed-off-by: Anthony Liguori <>

ac451033 03/14/2012 10:30 pm Igor Mitsyanko

qom/object.c: rename type_class_init() to type_initialize()

Function name type_class_init() gave us a wrong impression of separation
of type's "class" and "object" entities initialization. Name type_initialize()
is more appropriate for type_class_init() function (considering what operations...

418ba9e5 03/14/2012 10:30 pm Andreas Färber

qom: Introduce object_class_get_list()

This function allows to obtain a singly-linked list of classes, which
can be sorted by the caller.

Signed-off-by: Andreas Färber <>
Cc: Anthony Liguori <>
Signed-off-by: Anthony Liguori <>

aca59af6 03/14/2012 10:30 pm Igor Mitsyanko

qom: if @instance_size==0, assign size of object to parent object size

QOM documentation states that for objects of type with @instance_size == 0 size
will be assigned to match parent object's size. But currently this feauture is
not implemented and qemu asserts during creation of object with zero instance_size....

6c1fdcf9 03/12/2012 09:05 pm Paolo Bonzini

qom: fix device hot-unplug

Property removal modifies the list, so it is not safe to continue
iteration. We know anyway that each object can have only one
parent (see object_property_add_child), so exit after finding
the requested object.

Reported-by: Michael S. Tsirkin <>...

f0cdc966 02/22/2012 09:24 pm Alexander Barabash

qom: In function object_set_link_property(), first call object_ref(), then object_unref().

In the old implementation, if the new value of the property links
to the same object, as the old value, that object is first unref-ed,
and then ref-ed. This leads to unintended deinitialization of that object....

258b2c42 02/22/2012 05:02 pm Andreas Färber

qom: Fix object_initialize_with_type() assertion

Assert the object is at least sizeof(Object), not sizeof(ObjectClass).

Reviewed-by: Paolo Bonzini <>
Signed-off-by: Andreas Färber <>
Signed-off-by: Anthony Liguori <>

b2cd7dee 02/22/2012 09:31 am Paolo Bonzini

qom: add generic string parsing/printing

Add generic property accessors that take a string and parse it
appropriately for the property type. All the magic here is done
by the new string-based visitors.

Signed-off-by: Paolo Bonzini <>

83f7d43a 02/15/2012 05:39 pm Andreas Färber

qom: Unify type registration

Replace device_init() with generalized type_init().

While at it, unify naming convention: type_init([$prefix_]register_types)
Also, type_init() is a function, so add preceding blank line where
necessary and don't put a semicolon after the closing brace....

8f770d39 02/07/2012 02:52 pm Paolo Bonzini

qom: fix off-by-one

Signed-off-by: Paolo Bonzini <>

02fe2db6 02/07/2012 02:52 pm Paolo Bonzini

qom: add object_resolve_path_type

Reviewed-by: Anthony Liguori <>
Signed-off-by: Paolo Bonzini <>

11e35bfd 02/07/2012 02:52 pm Paolo Bonzini

qom: use object_resolve_path_type for links

This allows to restrict partial matches to objects of the expected
type. It will let people use bare names to reference drives
even though their name might be the same as a device's (e.g.
-drive id=hd0,if=none,... -device ...,drive=hd0,id=hd0)....

a1e7efdc 02/07/2012 02:52 pm Paolo Bonzini

qom: fix canonical paths vs. interfaces

Reviewed-by: Anthony Liguori <>
Signed-off-by: Paolo Bonzini <>

1d9c5a12 02/07/2012 02:52 pm Paolo Bonzini

qom: add property get/set wrappers for links

These can set a link to any object, as long as it is included in
the composition tree.

Reviewed-by: Anthony Liguori <>
Signed-off-by: Paolo Bonzini <>

b46d9b10 02/07/2012 02:52 pm Paolo Bonzini

qom: do not include qdev header file

Reviewed-by: Anthony Liguori <>
Signed-off-by: Paolo Bonzini <>

7b7b7d18 02/07/2012 02:52 pm Paolo Bonzini

qom: add property get/set wrappers for C types

Add wrappers that let you get/set properties using normal C data types.

Reviewed-by: Anthony Liguori <anthony@>
Signed-off-by: Paolo Bonzini <>

9970bd88 02/07/2012 02:52 pm Paolo Bonzini

qom: avoid useless conversions from string to type

Signed-off-by: Paolo Bonzini <>

acc4af3f 02/07/2012 02:51 pm Paolo Bonzini

qom: clean up/optimize object_dynamic_cast

The interface loop can be performed only on the parent object. It
does not need to be done on each interface. Similarly, we can
simplify the code by switching early from the implementation
object to the parent object....

57c9fafe 02/03/2012 06:41 pm Anthony Liguori

qom: move properties from qdev to object

This is mostly code movement although not entirely. This makes properties part
of the Object base class which means that we can now start using Object in a
meaningful way outside of qdev.

Signed-off-by: Anthony Liguori <>

fe40e627 02/03/2012 06:41 pm Anthony Liguori

qom: accept any compatible type when setting a link property

Links had limited utility before as they only allowed a concrete type to be
specified. Now we can support abstract types and interfaces which means it's
now possible to have a link<PCIDevice>....

db85b575 02/03/2012 06:41 pm Anthony Liguori

object: sure up reference counting

Now we have the following behavior:

1) object_new() returns an object with ref = 1
2) object_initialize() does not increase the reference count (ref may be 0).
3) object_deref() will finalize the object when ref = 0. it does not free the...

8b45d447 02/03/2012 06:41 pm Anthony Liguori

container: make a decendent of Object

Signed-off-by: Anthony Liguori <>
---
v1 -> v2
- Add license (Paolo)

93c511a1 02/03/2012 06:41 pm Anthony Liguori

qom: allow object_class_foreach to take additional parameters to refine search

Signed-off-by: Anthony Liguori <>

73093354 01/27/2012 06:50 pm Anthony Liguori

qdev: change ambiguous qdev names

Reported-by: Blue Swirl <>
Signed-off-by: Anthony Liguori <>

2f28d2ff 01/27/2012 06:28 pm Anthony Liguori

qom: add the base Object class (v2)

This class provides the main building block for QEMU Object Model and is
extensively documented in the header file. It is largely inspired by GObject.

Signed-off-by: Anthony Liguori <>
---
v1 -> v2...