bus device/ivars
John Baldwin
jhb at freebsd.org
Thu May 31 15:57:59 UTC 2012
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
More information about the freebsd-hackers
mailing list