driver core: Move driver_data back to struct device
Having to allocate memory as part of dev_set_drvdata() is a problem
because that memory may never get freed if the device itself is not
created. So move driver_data back to struct device.
This is a partial revert of commit b4028437.
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5cbb00cc4a
commit
1bb6c08abf
@@ -63,8 +63,6 @@ struct driver_private {
|
||||
* binding of drivers which were unable to get all the resources needed by
|
||||
* the device; typically because it depends on another driver getting
|
||||
* probed first.
|
||||
* @driver_data - private pointer for driver specific info. Will turn into a
|
||||
* list soon.
|
||||
* @device - pointer back to the struct class that this structure is
|
||||
* associated with.
|
||||
*
|
||||
@@ -76,7 +74,6 @@ struct device_private {
|
||||
struct klist_node knode_driver;
|
||||
struct klist_node knode_bus;
|
||||
struct list_head deferred_probe;
|
||||
void *driver_data;
|
||||
struct device *device;
|
||||
};
|
||||
#define to_device_private_parent(obj) \
|
||||
|
||||
+3
-10
@@ -594,22 +594,15 @@ void driver_detach(struct device_driver *drv)
|
||||
*/
|
||||
void *dev_get_drvdata(const struct device *dev)
|
||||
{
|
||||
if (dev && dev->p)
|
||||
return dev->p->driver_data;
|
||||
if (dev)
|
||||
return dev->driver_data;
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(dev_get_drvdata);
|
||||
|
||||
int dev_set_drvdata(struct device *dev, void *data)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (!dev->p) {
|
||||
error = device_private_init(dev);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
dev->p->driver_data = data;
|
||||
dev->driver_data = data;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dev_set_drvdata);
|
||||
|
||||
Reference in New Issue
Block a user