On Tue, Jun 28, 2011 at 4:46 PM, Ohad Ben-Cohen <ohad@xxxxxxxxxx> wrote: > Hi Grant, > > On Tue, Jun 28, 2011 at 1:21 AM, Grant Likely <grant.likely@xxxxxxxxxxxx> wrote: >>> +static int rpmsg_remove_device(struct device *dev, void *data) >>> +{ >>> + struct rpmsg_channel *rpdev = to_rpmsg_channel(dev); >>> + >>> + device_unregister(dev); >>> + >>> + kfree(rpdev); >> >> put_device() I think. > > Don't think so, we get the device handle from device_for_each_child > here, which doesn't call get_device (unlike device_find_child). It's not the device_for_each_child() that you're 'putting' back from here. Its the original kref initialization when the device was created. Once a device is initialized, it must never be directly kfree()'d. g. -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html