aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/dd.c
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2014-04-14 06:54:47 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-05-27 15:37:18 -0400
commit1bb6c08abfb653ce6e65d8ab4ddef403227afedf (patch)
treedba61f690d899880c97229b778f9fae838b9678a /drivers/base/dd.c
parent5cbb00cc4aae56378bf5376a62b4df3b89c28f92 (diff)
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>
Diffstat (limited to 'drivers/base/dd.c')
-rw-r--r--drivers/base/dd.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 62ec61e8f84a..d14b6e895896 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -594,22 +594,15 @@ void driver_detach(struct device_driver *drv)
594 */ 594 */
595void *dev_get_drvdata(const struct device *dev) 595void *dev_get_drvdata(const struct device *dev)
596{ 596{
597 if (dev && dev->p) 597 if (dev)
598 return dev->p->driver_data; 598 return dev->driver_data;
599 return NULL; 599 return NULL;
600} 600}
601EXPORT_SYMBOL(dev_get_drvdata); 601EXPORT_SYMBOL(dev_get_drvdata);
602 602
603int dev_set_drvdata(struct device *dev, void *data) 603int dev_set_drvdata(struct device *dev, void *data)
604{ 604{
605 int error; 605 dev->driver_data = data;
606
607 if (!dev->p) {
608 error = device_private_init(dev);
609 if (error)
610 return error;
611 }
612 dev->p->driver_data = data;
613 return 0; 606 return 0;
614} 607}
615EXPORT_SYMBOL(dev_set_drvdata); 608EXPORT_SYMBOL(dev_set_drvdata);