LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* Subject: [PATCH 1/3] driver core: cleanup device links code
@ 2007-02-27 13:59 Akinobu Mita
0 siblings, 0 replies; only message in thread
From: Akinobu Mita @ 2007-02-27 13:59 UTC (permalink / raw)
To: Linux Kernel List, Greg KH
Cleanup by introducing device_add_links() and device_remove_links().
This patch should not change any current behavior except the scope of
class_name moved to the inside of device_add_links().
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/base/core.c | 92 +++++++++++++++++++++++++++++-----------------------
1 file changed, 52 insertions(+), 40 deletions(-)
Index: 2.6-mm/drivers/base/core.c
===================================================================
--- 2.6-mm.orig/drivers/base/core.c
+++ 2.6-mm/drivers/base/core.c
@@ -487,6 +487,56 @@ static int setup_parent(struct device *d
return 0;
}
+static void device_add_links(struct device *dev, struct device *parent)
+{
+ if (dev->class) {
+ sysfs_create_link(&dev->kobj, &dev->class->subsys.kset.kobj,
+ "subsystem");
+ /* If this is not a "fake" compatible device, then create the
+ * symlink from the class to the device. */
+ if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
+ sysfs_create_link(&dev->class->subsys.kset.kobj,
+ &dev->kobj, dev->bus_id);
+#ifdef CONFIG_SYSFS_DEPRECATED
+ if (parent) {
+ char *class_name = NULL;
+
+ sysfs_create_link(&dev->kobj, &dev->parent->kobj,
+ "device");
+ class_name = make_class_name(dev->class->name,
+ &dev->kobj);
+ if (class_name)
+ sysfs_create_link(&dev->parent->kobj,
+ &dev->kobj, class_name);
+ kfree(class_name);
+ }
+#endif
+ }
+}
+
+static void device_remove_links(struct device *dev, struct device *parent)
+{
+ if (dev->class) {
+ sysfs_remove_link(&dev->kobj, "subsystem");
+ /* If this is not a "fake" compatible device, remove the
+ * symlink from the class to the device. */
+ if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
+ sysfs_remove_link(&dev->class->subsys.kset.kobj,
+ dev->bus_id);
+#ifdef CONFIG_SYSFS_DEPRECATED
+ if (parent) {
+ char *class_name = make_class_name(dev->class->name,
+ &dev->kobj);
+ if (class_name)
+ sysfs_remove_link(&dev->parent->kobj,
+ class_name);
+ kfree(class_name);
+ sysfs_remove_link(&dev->kobj, "device");
+ }
+#endif
+ }
+}
+
/**
* device_add - add device to device hierarchy.
* @dev: device.
@@ -501,7 +551,6 @@ static int setup_parent(struct device *d
int device_add(struct device *dev)
{
struct device *parent = NULL;
- char *class_name = NULL;
struct class_interface *class_intf;
int error = -EINVAL;
@@ -562,26 +611,7 @@ int device_add(struct device *dev)
dev->devt_attr = attr;
}
- if (dev->class) {
- sysfs_create_link(&dev->kobj, &dev->class->subsys.kset.kobj,
- "subsystem");
- /* If this is not a "fake" compatible device, then create the
- * symlink from the class to the device. */
- if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
- sysfs_create_link(&dev->class->subsys.kset.kobj,
- &dev->kobj, dev->bus_id);
-#ifdef CONFIG_SYSFS_DEPRECATED
- if (parent) {
- sysfs_create_link(&dev->kobj, &dev->parent->kobj,
- "device");
- class_name = make_class_name(dev->class->name,
- &dev->kobj);
- if (class_name)
- sysfs_create_link(&dev->parent->kobj,
- &dev->kobj, class_name);
- }
-#endif
- }
+ device_add_links(dev, parent);
if ((error = device_add_attrs(dev)))
goto AttrsError;
@@ -609,7 +639,6 @@ int device_add(struct device *dev)
up(&dev->class->sem);
}
Done:
- kfree(class_name);
put_device(dev);
return error;
BusError:
@@ -709,25 +738,8 @@ void device_del(struct device * dev)
device_remove_file(dev, dev->devt_attr);
kfree(dev->devt_attr);
}
+ device_remove_links(dev, parent);
if (dev->class) {
- sysfs_remove_link(&dev->kobj, "subsystem");
- /* If this is not a "fake" compatible device, remove the
- * symlink from the class to the device. */
- if (dev->kobj.parent != &dev->class->subsys.kset.kobj)
- sysfs_remove_link(&dev->class->subsys.kset.kobj,
- dev->bus_id);
-#ifdef CONFIG_SYSFS_DEPRECATED
- if (parent) {
- char *class_name = make_class_name(dev->class->name,
- &dev->kobj);
- if (class_name)
- sysfs_remove_link(&dev->parent->kobj,
- class_name);
- kfree(class_name);
- sysfs_remove_link(&dev->kobj, "device");
- }
-#endif
-
down(&dev->class->sem);
/* notify any interfaces that the device is now gone */
list_for_each_entry(class_intf, &dev->class->interfaces, node)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2007-02-27 14:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-27 13:59 Subject: [PATCH 1/3] driver core: cleanup device links code Akinobu Mita
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).