On Wed, 18 Apr 2007 12:41:36 -0400, "Dmitry Torokhov" <[EMAIL PROTECTED]> wrote:
> I am still do not understand why this is needed. Would it not be > simplier just to use a reference to struct device instead of embedding > it in a larger structure if their lifetimes are different and one does > not have a subsystem that takes care of releasing logic. Why are their lifetimes different? Usually, if I hold on to the device, I also want to be able to use the structure that embeds the device. > Pretty much drivers have 2 options: > > struct my_device { > void *private_data; > struct device dev; > }; > > In this case ->release must live in a subsystem code; individual > drivers kfree(my_dev->private) and do any additional cleanup after > calling device_unregister(&my_dev->dev); They must do this in the ->remove callback. > > Second option: > > struct my_device { > type member1; > type member2; > > struct device *dev; > }; > > dev is coming from _device_create(). Driver core takes care of > releasing dev structure; driver does cleanup of my_device. device_create() would need to not expect a class then, or it's not universally usable. Also, the driver would need a method to get back from the device to my_device. We're practically back at the first option again, only that now the ->release function is sitting in the driver core instead of the subsystem. > With current sysfs orphaning attributes upon removal request there is > no issue of accessing driver-private data through references obtained > via ether embedded or referenced dev structure so everything is fine. Discoupling of sysfs and kobject lifetime rules definetly eliminates a lot of issues. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/