On Thu, Jan 29, 2015 at 08:27:19PM +1100, Alexey Kardashevskiy wrote: > Every sPAPRTCETable object holds an IOMMU memory region which holds > a referenced to the sPAPRTCETable instance. So if we want to free > an sPAPRTCETable instance, calling object_unref() will not be enough > as embedded memory region will hold the reference and we need to break > the loop. > > This adds a spapr_tce_free_table() helper which destroys the embedded > memory region and then calls object_unref() on the sPAPRTCETable instance > which will succeed now. The helper adds a new child under unique name > derived from LIOBN. > > As we are here, fix spapr_tce_new_table() callers. > At the moment spapr_tce_new_table() references sPAPRTCETable twice - > once in object_new() and second time in object_property_add_child(). > The callers of spapr_tce_new_table() should take care of correct > referencing. > > Signed-off-by: Alexey Kardashevskiy Reviewed-by: David Gibson With the caveat that I don't know the QOM refcounting model well enough to really analyze if this is correct. It's not obviously wrong, and doesn't look like it will break anything in the actual PAPR related code. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson