On Thursday, May 31, 2012 4:19:46 am Norbert Koch wrote:
> Hello,
> 
> I have written a bus device driver
> which itself is a pci driver. Child devices
> may allocate resources from my bus device.
> 
> My bus device does the usual
> management of resources through
> the children's ivars.
> 
> My question is this:
> 
> The bus device mallocs the
> children's ivars in bus_add_child
> and frees the ivars in either
> bus_detach or bus_child_detached.
> 
> The children are added in identify
> methods through BUS_ADD_CHILD.
> 
> As I understand the code the bus device's
> bus_child_detached method is called
> in device_delete_child only if
> the child device is already attached.
> 
> So, there seems to be a memory leak if
> I delete the child device in either
> identify or probe.
> 
> My current solution (not tested yet) is to
> explicitly call BUS_CHILD_DETACHED
> in the child device's code before
> calling device_delete_child.
> 
> Is this the correct way or is
> there a more elegant/cleaner solution?
> 
> I expected to find something like a
> BUS_DELETE_CHILD method.

We should perhaps have a BUS_CHILD_DELETED?  I think that would do what you 
want.  We could maybe add a BUS_DELETE_CHILD(), but it would be assymmetric to 
have device_delete_child() call BUS_DELETE_CHILD() when device_add_child() 
does not call BUS_ADD_CHILD().  (Instead, BUS_ADD_CHILD() calls 
device_add_child, which is perhaps wrong.)

For now I would change your child code to call a wrapper foo_delete_child() 
function from your child drivers directly rather than calling 
device_delete_child().   foo_delete_child() can do its cleanup and then call 
device_delete_child().

-- 
John Baldwin
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to