History | View | Annotate | Download (35.3 kB)
qapi: Add human mode to StringOutputVisitor
This will be used by "info qtree". For numbers it prints both thedecimal and hex values. For sizes it rounds to the nearest powerof 2^10. For strings, it puts quotes around the string and separatesNULL and empty string....
Merge remote branch 'luiz/queue/qmp' into qmpq
qom: catch errors in object_property_add_child
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Reviewed-by: Igor Mammedov <imammedo@redhat.com>Tested-by: Igor Mammedov <imammedo@redhat.com>Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
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 <hpoussin@reactos.org>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>...
qom: Split out object and class caches
The object-cast and class-cast caches cannot be shared because classcaching is conditional on the target type not being an interface andobject caching is unconditional. Leads to a bug when a class castto an interface follows an object cast to the same interface type:...
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 andadd them to the interface list of the parent type....
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: qemu-stable@nongnu.orgSigned-off-by: Vlad Yasevich <vyasevic@redhat.com>Reviewed-by: Amos Kong <akong@redhat.com>Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>...
qom: add pointer to int property helpers
Make it easy to add read-only helpers for simpleinteger properties in memory.
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>Tested-by: Gerd Hoffmann <kraxel@redhat.com>...
qom: Pass available size to object_initialize()
To be passed on to object_initialize_with_type().
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com> (virtio-ccw)Signed-off-by: Andreas Färber <afaerber@suse.de>
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 <peter.maydell@linaro.org>Signed-off-by: Andreas Färber <afaerber@suse.de>
qom: Introduce instance_post_init hook
This will allow classes to specify a function to be called after allinstance_init functions were called.
This will be used by DeviceState to call qdev_prop_set_globals() at theright moment.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>...
qom: Fix class cast of NULL classes
Its clear from the implementation that class casting is supposed to workwith a NULL class argument. Guard all dereferences of the class argumentagainst NULL accordingly.
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>...
qom: Use atomics for object refcounting
Object reference counts will soon be changed outside the BQL. So we needto use atomics in object_ref/unref.
Based on a patch by Liu Ping Fan.
Signed-off-by: Liu Ping Fan <qemulist@gmail.com>Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>...
qom/object: Don't poll cast cache for NULL objects
object_dynamic_cast_assert used to be tolerant of NULL objects and notassert. It's clear from the implementation that this is the expectedbehavior.
The preceding check of the cast cache dereferences obj however causing...
qom: aggressively optimize qom casting
This patch adds a small typename cache to ObjectClass. This allowscaching positive casts within each ObjectClass. Benchmarking aPPC workload provided by Aurelien, this patch eliminates everysingle g_hash_table_lookup() happening during the benchmark (which...
qom: allow casting of a NULL class
This mimics what we do in object_dynamic_cast_assert.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Message-id: 1368188203-3407-3-git-send-email-pbonzini@redhat.comSigned-off-by: Anthony Liguori <aliguori@us.ibm.com>
qom: add a fast path to object_class_dynamic_cast
For leaf classes, in many cases the callbacks will simply downcastthe object back to the original class. Add this fast path toobject_class_dynamic_cast, object_dynamic_cast will inherit it.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>...
qom: pass file/line/function to asserting casts
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Message-id: 1368188203-3407-5-git-send-email-pbonzini@redhat.comSigned-off-by: Anthony Liguori <aliguori@us.ibm.com>
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 <pbonzini@redhat.com>Message-id: 1368188203-3407-6-git-send-email-pbonzini@redhat.com...
qom: allow turning cast debugging off
Cast debugging can have a substantial cost (20% or more). Instead of addingspecial-cased "fast casts" in the hot paths, we can just disable it inreleases. The tracing facilities we just added make it easier to analyze...
QOM: Fail casts for unknown types
When we try to cast an object to an unknown type, fail the cast. Todaywe would simply run into an assert().
This fixes a bug on qemu-system-s390x for me that gets triggered by theaudio code looking for PCI and ISA buses....
qom: do not return root for empty path
An empty path will return the sole object of that type in theQOM tree. This is different from "/", which returns the root.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Message-id: 1366303444-24620-7-git-send-email-pbonzini@redhat.com...
qom: do nothing on unparent of object without parent
Otherwise, device_unparent will fail to get a canonical path ofthe object.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Message-id: 1364910600-3418-1-git-send-email-pbonzini@redhat.comSigned-off-by: Anthony Liguori <aliguori@us.ibm.com>
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 anew qmp event for hotplug support by myself.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>...
qom: call class destructor before unparent
It seems more logical to have destruction flow start with the subclassand move up to the base class. This ensures object has a validcanonical path when destructor is called.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
qom: Detect attempts to add a property that already exists
Detect attempts to add a property to an object if one ofthat name already exists, and report them as errors.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>...
qom/object.c: Reset interface list on inheritance
The QOM framework will attempt the recreate a classes interface list fromscratch for each class. This means that a child class should zero out thelist of interfaces when cloned from the parent class.
Currently the list is memcpy()d from the parent to the child. As the interface...
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 definesno interfaces of its own, but its parent has interfaces you cannot cast to those...
qom: remove object_delete
This is now unused. Document the initial reference count of an objectand when it will be freed/finalized.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
qom: preserve object while unparenting it
Avoid that the object disappears after it's deleted from the QOMcomposition tree, in case that was the only reference to it.
Acked-by: Andreas Färber <afaerber@suse.de>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>...
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 <afaerber@suse.de>Cc: Anthony Liguori <anthony@codemonkey.ws>
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 <afaerber@suse.de>...
qom: move include files to include/qom/
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
qapi: move include files to include/qobject/
qapi: remove qapi/qapi-types-core.h
The file is only including error.h and qerror.h. Prefer explicitinclusion of whatever files are needed.Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
qom: make object_finalize static
It is not used anymore, and there is no need to make it public.
qom: fix refcount of non-heap-allocated objects
The reference count for embedded objects is always one too low, becauseobject_initialize_with_type returns with zero references to the object.This causes premature finalization of the object (or an assertion failure)...
qdev: move bus removal to object_unparent
Add an ObjectClass method that is done at object_unparent time. Itshould remove any backlinks to the object in the composition tree,so that object_delete will be able to drop the last reference andfree the object....
qom: make object_delete usable for statically-allocated objects
Store in the object the freeing function that will be used at deletiontime. This makes it possible to use object_delete on statically-allocated(embedded) objects. Dually, it makes it possible to use object_unparent...
qom: dynamic_cast of NULL is always NULL
Trying to cast a NULL value will cause a crash. ReturningNULL is also sensible, and it is also what the type-unsafeDO_UPCAST macro does.
Reported-by: Markus Armbruster <armbru@redhat.com>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>...
object: add object_property_add_bool (v2)
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>---v1 -> v2 - Fix whitespace (Andreas Faerber)
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_unparenteither does nothing or it will decrease the reference count.Because we know the reference count is zero, the object_unparent...
qom: Reimplement Interfaces
The current implementation of Interfaces is poorly designed. Each interfacethat an object implements ends up being an object that's tracked by theimplementing object. There's all sorts of gymnastics to deal with castingbetween these objects....
qbus: Make child devices links
Make qbus children show up as link<> properties. There is no stableaddressing for qbus children so we use an unstable naming convention.
This is okay in QOM though because the composition name is expected tobe what's stable....
qdev: Remove qdev_prop_exists()
Can be replaced everywhere with object_property_find().
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Signed-off-by: Andreas Färber <afaerber@suse.de>
qom: Push error reporting to object_property_find()
Avoids duplicated error_set().
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>[AF: Also drop error_set() in object_property_del().]Signed-off-by: Andreas Färber <afaerber@suse.de>
qom: Add class_base_init
The class_base_init TypeInfo callback was present in one of the earlyQOM versions but removed (on my request...) before committing. Wewill need it soon, add it.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>...
qom: Make Object a type
Right now the base Object class has a special NULL type. Change this sothat 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 reallynecessary.
qom: Assert that public types have a non-NULL parent field
This protects against unwanted effects of changing TYPE_OBJECT fromNULL to a string.
Suggested-by: Andreas Färber <afaerber@suse.de>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Signed-off-by: Andreas Färber <afaerber@suse.de>
qdev: Push "type" property up to Object
Now that Object is a type, add an instance_init function and pushthe "type" property from qdev to there.
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 <pbonzini@redhat.com>Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>[AF: Document possible NULL return value]...
qom: Introduce object_property_is_{child,link}()
Avoids hardcoding partial string comparisons.
Signed-off-by: Alexander Barabash <alexander_barabash@mentor.com>Signed-off-by: Andreas Färber <afaerber@suse.de>Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
qom: Add object_child_foreach()
A utility function that will be used to implement hierarchical realization.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>[AF: Drop unrelated whitespace change, add Returns: in documentation]...
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.
qom: add container_get
This is QOM "mkdir -p". It is useful when referring tocontainer objects such as "/machine".
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
qom/object.c: rename type_class_init() to type_initialize()
Function name type_class_init() gave us a wrong impression of separationof type's "class" and "object" entities initialization. Name type_initialize()is more appropriate for type_class_init() function (considering what operations...
qom: Introduce object_class_get_list()
This function allows to obtain a singly-linked list of classes, whichcan be sorted by the caller.
Signed-off-by: Andreas Färber <afaerber@suse.de>Cc: Anthony Liguori <anthony@codemonkey.ws>Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
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 sizewill be assigned to match parent object's size. But currently this feauture isnot implemented and qemu asserts during creation of object with zero instance_size....
qom: fix device hot-unplug
Property removal modifies the list, so it is not safe to continueiteration. We know anyway that each object can have only oneparent (see object_property_add_child), so exit after findingthe requested object.
Reported-by: Michael S. Tsirkin <mst@redhat.com>...
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 linksto 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....
qom: Fix object_initialize_with_type() assertion
Assert the object is at least sizeof(Object), not sizeof(ObjectClass).
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>Signed-off-by: Andreas Färber <afaerber@suse.de>Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
qom: add generic string parsing/printing
Add generic property accessors that take a string and parse itappropriately for the property type. All the magic here is doneby the new string-based visitors.
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 wherenecessary and don't put a semicolon after the closing brace....
qom: fix off-by-one
qom: add object_resolve_path_type
Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
qom: use object_resolve_path_type for links
This allows to restrict partial matches to objects of the expectedtype. It will let people use bare names to reference driveseven though their name might be the same as a device's (e.g.-drive id=hd0,if=none,... -device ...,drive=hd0,id=hd0)....
qom: fix canonical paths vs. interfaces
qom: add property get/set wrappers for links
These can set a link to any object, as long as it is included inthe composition tree.
qom: do not include qdev header file
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@aliguori@us.ibm.com>Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
qom: avoid useless conversions from string to type
qom: clean up/optimize object_dynamic_cast
The interface loop can be performed only on the parent object. Itdoes not need to be done on each interface. Similarly, we cansimplify the code by switching early from the implementationobject to the parent object....
qom: move properties from qdev to object
This is mostly code movement although not entirely. This makes properties partof the Object base class which means that we can now start using Object in ameaningful way outside of qdev.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
qom: accept any compatible type when setting a link property
Links had limited utility before as they only allowed a concrete type to bespecified. Now we can support abstract types and interfaces which means it'snow possible to have a link<PCIDevice>....
object: sure up reference counting
Now we have the following behavior:
1) object_new() returns an object with ref = 12) 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...
container: make a decendent of Object
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>---v1 -> v2 - Add license (Paolo)
qom: allow object_class_foreach to take additional parameters to refine search
qdev: change ambiguous qdev names
Reported-by: Blue Swirl <blauwirbel@gmail.com>Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
qom: add the base Object class (v2)
This class provides the main building block for QEMU Object Model and isextensively documented in the header file. It is largely inspired by GObject.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>---v1 -> v2...