On Fri, Aug 15, 2014 at 08:12:28PM +1000, 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.
So I've been trying to determine if there's any way to avoid this by not constructing the reference loop in the first place, but all the qom is breaking my brain. -- 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
pgpgEe6RjLhhy.pgp
Description: PGP signature