driver core: Move driver_data back to struct device
PATCH 1/1 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.
---
Greg, we discussed that back in January (in a thread named "Freeing of dev->p") but I did not hear back from you and I can't see this fix in your driver-core tree.
As discussed in that thread, really reverting b4028437 might be an even better option, performance-wise. If we do that, we'll first have to update drivers/iommu/exynos-iommu.c and drivers/vfio/vfio.c to no longer check for the return value of dev_set_drvdata(). I can provide the patches, if you're fine with that.
drivers/base/base.h | 3 --- drivers/base/dd.c | 13 +++---------- include/linux/device.h | 4 ++++ 3 files changed, 7 insertions(+), 13 deletions(-)
drivers/base/base.h +0 -3
@@ -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) \
drivers/base/dd.c +3 -10
@@ -577,22 +577,15 @@ void driver_detach(struct device_driver*/ 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);
include/linux/device.h +4 -0
@@ -679,6 +679,8 @@ struct acpi_dev_node {* variants, which GPIO pins act in what additional roles, and so * on. This shrinks the "Board Support Packages" (BSPs) and * minimizes board-specific #ifdefs in drivers. +* @driver_data: Private pointer for driver specific info. Will turn into a +* list soon. * @power: For device power management. * See Documentation/power/devices.txt for details. * @pm_domain: Provide callbacks that are executed during system suspend,
@@ -740,6 +742,8 @@ struct device {device */ void *platform_data;/* Platform specific data, device core doesn't touch it */ +void *driver_data;/* Driver data, set and get with +dev_set/get_drvdata */ struct dev_pm_info power;struct dev_pm_domain *pm_domain;
Signature · 2 lines
Jean Delvare SUSE L3 Support
Greg Kroah-Hartman
maintainerQuoted 4 lines · Jean Delvare
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 movedriver_databack to struct device.
Quoted 8 lines
This is a partial revert of commit
b4028437.Signed-off-by Jean Delvare <[email protected]>Cc Greg Kroah-Hartman <[email protected]>---
Greg, we discussed that back in January (in a thread named "Freeing ofdev->p") but I did not hear back from you and I can't see this fix in your driver-core tree.
Thanks for doing this, I'll queue this up after -rc1 is out. I still have that thread in my TODO list, unfortunatly, higher-priority items keep bumping it down :(
greg k-h
Hi Greg,
Quoted 14 lines · Greg Kroah-Hartman
Quoted 4 lines · Jean Delvare
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 movedriver_databack to struct device.Quoted 8 lines
This is a partial revert of commit
b4028437.Signed-off-by Jean Delvare <[email protected]>Cc Greg Kroah-Hartman <[email protected]>---
Greg, we discussed that back in January (in a thread named "Freeing ofdev->p") but I did not hear back from you and I can't see this fix in your driver-core tree.
Quoted 3 lines
Thanks for doing this, I'll queue this up after -rc1 is out. I still have that thread in my TODO list, unfortunatly, higher-priority items keep bumping it down :(
No problem, I understand.
Meanwhile I have prepared a patch set with all the cleanups that could go in after that one, basically reverting all of commit b4028437 step by step. If you want to take a look, it's at:
http://jdelvare.nerim.net/devel/linux-3/driver-core/
FWIW the full patch set shaves about 1.2 MB off an allmodconfig x86_64 build. And it certainly comes with some performance gains too.
I can post the whole set now if you want, I just did not want to throw too much at you if you are already swamped.
Also, I can merge some of these patches together if you think I went too fine-grained.
Thanks,
Signature · 2 lines
Jean Delvare SUSE L3 Support
Greg Kroah-Hartman
maintainerQuoted 28 lines · Jean Delvare
Hi Greg,
Quoted 14 lines · Greg Kroah-Hartman
Quoted 4 lines · Jean Delvare
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 movedriver_databack to struct device.Quoted 8 lines
This is a partial revert of commit
b4028437.Signed-off-by Jean Delvare <[email protected]>Cc Greg Kroah-Hartman <[email protected]>---
Greg, we discussed that back in January (in a thread named "Freeing ofdev->p") but I did not hear back from you and I can't see this fix in your driver-core tree.Quoted 3 lines
Thanks for doing this, I'll queue this up after -rc1 is out. I still have that thread in my TODO list, unfortunatly, higher-priority items keep bumping it down :(
No problem, I understand.
Meanwhile I have prepared a patch set with all the cleanups that could go in after that one, basically reverting all of commit
b4028437step by step. If you want to take a look, it's at:
http://jdelvare.nerim.net/devel/linux-3/driver-core/
Quoted 5 lines
FWIW the full patch set shaves about 1.2 MB off an allmodconfig
x86_64build. And it certainly comes with some performance gains too.I can post the whole set now if you want, I just did not want to throw too much at you if you are already swamped.
Sure, please send them to me, my "swampedness" isn't an issue for queueing up patches, it helps, as they will then have to be dealt with in my queue :)
thanks,
greg k-h