diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-27 00:59:20 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-27 00:59:20 -0700 |
commit | b9d0f05d7111d750b0affa9209c1d3f713b829e5 (patch) | |
tree | 91b7ac3cc2c488e6b636e079f14700bff58fdede /driver | |
parent | 900965d1b18d871b56f7839c4f76ce7ee6a6df12 (diff) | |
download | patches-b9d0f05d7111d750b0affa9209c1d3f713b829e5.tar.gz |
add device-groups patch
Diffstat (limited to 'driver')
-rw-r--r-- | driver/device-groups.patch | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/driver/device-groups.patch b/driver/device-groups.patch new file mode 100644 index 0000000000000..f2726ee0ff44a --- /dev/null +++ b/driver/device-groups.patch @@ -0,0 +1,90 @@ +From foo@baz Tue Apr 9 12:12:43 2002 +Date: Tue, 27 Jun 2006 00:06:09 -0700 +To: Greg KH <greg@kroah.com> +From: Greg Kroah-Hartman <gregkh@suse.de> +Subject: Driver core: add groups support to struct device + +This is needed for the network class devices in order to be able to +convert over to use struct device. + +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/base/core.c | 34 ++++++++++++++++++++++++++++++++++ + include/linux/device.h | 1 + + 2 files changed, 35 insertions(+) + +--- gregkh-2.6.orig/drivers/base/core.c ++++ gregkh-2.6/drivers/base/core.c +@@ -194,6 +194,35 @@ static ssize_t store_uevent(struct devic + return count; + } + ++static int device_add_groups(struct device *dev) ++{ ++ int i; ++ int error = 0; ++ ++ if (dev->groups) { ++ for (i = 0; dev->groups[i]; i++) { ++ error = sysfs_create_group(&dev->kobj, dev->groups[i]); ++ if (error) { ++ while (--i >= 0) ++ sysfs_remove_group(&dev->kobj, dev->groups[i]); ++ goto out; ++ } ++ } ++ } ++out: ++ return error; ++} ++ ++static void device_remove_groups(struct device *dev) ++{ ++ int i; ++ if (dev->groups) { ++ for (i = 0; dev->groups[i]; i++) { ++ sysfs_remove_group(&dev->kobj, dev->groups[i]); ++ } ++ } ++} ++ + static ssize_t show_dev(struct device *dev, struct device_attribute *attr, + char *buf) + { +@@ -347,6 +376,8 @@ int device_add(struct device *dev) + sysfs_create_link(&dev->parent->kobj, &dev->kobj, class_name); + } + ++ if ((error = device_add_groups(dev))) ++ goto GroupError; + if ((error = device_pm_add(dev))) + goto PMError; + if ((error = bus_add_device(dev))) +@@ -373,6 +404,8 @@ int device_add(struct device *dev) + BusError: + device_pm_remove(dev); + PMError: ++ device_remove_groups(dev); ++ GroupError: + if (dev->devt_attr) { + device_remove_file(dev, dev->devt_attr); + kfree(dev->devt_attr); +@@ -467,6 +500,7 @@ void device_del(struct device * dev) + up(&dev->class->sem); + } + device_remove_file(dev, &dev->uevent_attr); ++ device_remove_groups(dev); + + /* Notify the platform of the removal, in case they + * need to do anything... +--- gregkh-2.6.orig/include/linux/device.h ++++ gregkh-2.6/include/linux/device.h +@@ -338,6 +338,7 @@ struct device { + struct list_head node; + struct class *class; /* optional*/ + dev_t devt; /* dev_t, creates the sysfs "dev" */ ++ struct attribute_group **groups; /* optional groups */ + + void (*release)(struct device * dev); + }; |