diff options
author | Jean Delvare <jdelvare@suse.de> | 2014-04-14 06:54:47 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-05-27 15:37:18 -0400 |
commit | 1bb6c08abfb653ce6e65d8ab4ddef403227afedf (patch) | |
tree | dba61f690d899880c97229b778f9fae838b9678a /drivers/base/dd.c | |
parent | 5cbb00cc4aae56378bf5376a62b4df3b89c28f92 (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.c | 13 |
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 | */ |
595 | void *dev_get_drvdata(const struct device *dev) | 595 | void *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 | } |
601 | EXPORT_SYMBOL(dev_get_drvdata); | 601 | EXPORT_SYMBOL(dev_get_drvdata); |
602 | 602 | ||
603 | int dev_set_drvdata(struct device *dev, void *data) | 603 | int 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 | } |
615 | EXPORT_SYMBOL(dev_set_drvdata); | 608 | EXPORT_SYMBOL(dev_set_drvdata); |