On May 31, 2012, at 9:54 AM, John Baldwin wrote:

> 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().

We likely should have a BUS_CHILD_DELETED function that can get called for each 
class in the stack when a child is deleted so you can remove the ivars.  The 
ivars should likely stay around when the device is merely detached.

Warner

_______________________________________________
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