aboutsummaryrefslogtreecommitdiffstats
diff options
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-10 15:55:31 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-10 15:55:31 -0700
commit71dc29f11ecf9b2d046caa36ae09f233b6fbcb8c (patch)
tree162b91c663ab0f7311728f65885074c3bafba81e
parentbed7d5b71789b44bce054958ef28b09425fd1e57 (diff)
downloadpatches-71dc29f11ecf9b2d046caa36ae09f233b6fbcb8c.tar.gz
fix ups and more patches added
-rw-r--r--driver-core-add-default-groups-to-struct-class.patch12
-rw-r--r--driver-core-bus_type-add-bus_groups.patch105
-rw-r--r--driver-core-bus_type-add-dev_groups.patch108
-rw-r--r--driver-core-bus_type-add-drv_groups.patch101
-rw-r--r--driver-core-remove-dev_attrs-from-struct-class.patch9
-rw-r--r--driver-core-remove-dev_bin_attrs-from-struct-class.patch2
-rw-r--r--series5
7 files changed, 334 insertions, 8 deletions
diff --git a/driver-core-add-default-groups-to-struct-class.patch b/driver-core-add-default-groups-to-struct-class.patch
index 88d2a54a5b77bb..29a19d6e329814 100644
--- a/driver-core-add-default-groups-to-struct-class.patch
+++ b/driver-core-add-default-groups-to-struct-class.patch
@@ -13,9 +13,9 @@ to use dev_groups.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
- drivers/base/core.c | 8 +++++++-
+ drivers/base/core.c | 9 ++++++++-
include/linux/device.h | 4 +++-
- 2 files changed, 10 insertions(+), 2 deletions(-)
+ 2 files changed, 11 insertions(+), 2 deletions(-)
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -43,6 +43,14 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
return error;
}
+@@ -581,6 +587,7 @@ static void device_remove_attrs(struct d
+ if (class) {
+ device_remove_attributes(dev, class->dev_attrs);
+ device_remove_bin_attributes(dev, class->dev_bin_attrs);
++ device_remove_groups(dev, class->dev_groups);
+ }
+ }
+
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -313,6 +313,7 @@ int subsys_virtual_register(struct bus_t
diff --git a/driver-core-bus_type-add-bus_groups.patch b/driver-core-bus_type-add-bus_groups.patch
new file mode 100644
index 00000000000000..397c9ca8b79a90
--- /dev/null
+++ b/driver-core-bus_type-add-bus_groups.patch
@@ -0,0 +1,105 @@
+From foo@baz Wed Jul 10 15:53:39 PDT 2013
+Date: Wed, 10 Jul 2013 15:53:39 -0700
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: driver core: bus_type: add bus_groups
+
+attribute groups are much more flexible than just a list of attributes,
+due to their support for visibility of the attributes, and binary
+attributes. Add bus_groups to struct bus_type which should be used
+instead of bus_attrs.
+
+bus_attrs will be removed from the structure soon.
+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/base/bus.c | 37 +++++++++++++++++++++++++++++++++++++
+ include/linux/device.h | 4 +++-
+ 2 files changed, 40 insertions(+), 1 deletion(-)
+
+--- a/drivers/base/bus.c
++++ b/drivers/base/bus.c
+@@ -881,6 +881,37 @@ static void bus_remove_attrs(struct bus_
+ }
+ }
+
++static int bus_add_groups(struct bus_type *bus,
++ const struct attribute_group **groups)
++{
++ int error = 0;
++ int i;
++
++ if (groups) {
++ for (i = 0; groups[i]; i++) {
++ error = sysfs_create_group(&bus->p->subsys.kobj,
++ groups[i]);
++ if (error) {
++ while (--i >= 0)
++ sysfs_remove_group(&bus->p->subsys.kobj,
++ groups[i]);
++ break;
++ }
++ }
++ }
++ return error;
++}
++
++static void bus_remove_groups(struct bus_type *bus,
++ const struct attribute_group **groups)
++{
++ int i;
++
++ if (groups)
++ for (i = 0; groups[i]; i++)
++ sysfs_remove_group(&bus->p->subsys.kobj, groups[i]);
++}
++
+ static void klist_devices_get(struct klist_node *n)
+ {
+ struct device_private *dev_prv = to_device_private_bus(n);
+@@ -973,10 +1004,15 @@ int bus_register(struct bus_type *bus)
+ retval = bus_add_attrs(bus);
+ if (retval)
+ goto bus_attrs_fail;
++ retval = bus_add_groups(bus, bus->bus_groups);
++ if (retval)
++ goto bus_groups_fail;
+
+ pr_debug("bus: '%s': registered\n", bus->name);
+ return 0;
+
++bus_groups_fail:
++ bus_remove_attrs(bus);
+ bus_attrs_fail:
+ remove_probe_files(bus);
+ bus_probe_files_fail:
+@@ -1007,6 +1043,7 @@ void bus_unregister(struct bus_type *bus
+ if (bus->dev_root)
+ device_unregister(bus->dev_root);
+ bus_remove_attrs(bus);
++ bus_remove_groups(bus, bus->bus_groups);
+ remove_probe_files(bus);
+ kset_unregister(bus->p->drivers_kset);
+ kset_unregister(bus->p->devices_kset);
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -62,6 +62,7 @@ extern void bus_remove_file(struct bus_t
+ * @bus_attrs: Default attributes of the bus.
+ * @dev_attrs: Default attributes of the devices on the bus.
+ * @drv_attrs: Default attributes of the device drivers on the bus.
++ * @bus_groups: Default attributes of the bus.
+ * @dev_groups: Default attributes of the devices on the bus.
+ * @drv_groups: Default attributes of the device drivers on the bus.
+ * @match: Called, perhaps multiple times, whenever a new device or driver
+@@ -101,9 +102,10 @@ struct bus_type {
+ const char *name;
+ const char *dev_name;
+ struct device *dev_root;
+- struct bus_attribute *bus_attrs;
++ struct bus_attribute *bus_attrs; /* use bus_groups instead */
+ struct device_attribute *dev_attrs; /* use dev_groups instead */
+ struct driver_attribute *drv_attrs; /* use drv_groups instead */
++ const struct attribute_group **bus_groups;
+ const struct attribute_group **dev_groups;
+ const struct attribute_group **drv_groups;
+
diff --git a/driver-core-bus_type-add-dev_groups.patch b/driver-core-bus_type-add-dev_groups.patch
new file mode 100644
index 00000000000000..9cd031d9819d9d
--- /dev/null
+++ b/driver-core-bus_type-add-dev_groups.patch
@@ -0,0 +1,108 @@
+From foo@baz Wed Jul 10 15:50:50 PDT 2013
+Date: Wed, 10 Jul 2013 15:50:50 -0700
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: driver core: bus_type: add dev_groups
+
+attribute groups are much more flexible than just a list of attributes,
+due to their support for visibility of the attributes, and binary
+attributes. Add dev_groups to struct bus_type which should be used
+instead of dev_attrs.
+
+dev_attrs will be removed from the structure soon.
+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/base/base.h | 5 +++++
+ drivers/base/bus.c | 6 ++++++
+ drivers/base/core.c | 7 +++----
+ include/linux/device.h | 4 +++-
+ 4 files changed, 17 insertions(+), 5 deletions(-)
+
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -119,6 +119,11 @@ static inline int driver_match_device(st
+ return drv->bus->match ? drv->bus->match(dev, drv) : 1;
+ }
+
++extern int device_add_groups(struct device *dev,
++ const struct attribute_group **groups);
++extern void device_remove_groups(struct device *dev,
++ const struct attribute_group **groups);
++
+ extern char *make_class_name(const char *name, struct kobject *kobj);
+
+ extern int devres_release_all(struct device *dev);
+--- a/drivers/base/bus.c
++++ b/drivers/base/bus.c
+@@ -499,6 +499,9 @@ int bus_add_device(struct device *dev)
+ error = device_add_attrs(bus, dev);
+ if (error)
+ goto out_put;
++ error = device_add_groups(dev, bus->dev_groups);
++ if (error)
++ goto out_groups;
+ error = sysfs_create_link(&bus->p->devices_kset->kobj,
+ &dev->kobj, dev_name(dev));
+ if (error)
+@@ -513,6 +516,8 @@ int bus_add_device(struct device *dev)
+
+ out_subsys:
+ sysfs_remove_link(&bus->p->devices_kset->kobj, dev_name(dev));
++out_groups:
++ device_remove_groups(dev, bus->dev_groups);
+ out_id:
+ device_remove_attrs(bus, dev);
+ out_put:
+@@ -575,6 +580,7 @@ void bus_remove_device(struct device *de
+ sysfs_remove_link(&dev->bus->p->devices_kset->kobj,
+ dev_name(dev));
+ device_remove_attrs(dev->bus, dev);
++ device_remove_groups(dev, dev->bus->dev_groups);
+ if (klist_node_attached(&dev->p->knode_bus))
+ klist_del(&dev->p->knode_bus);
+
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -433,8 +433,7 @@ static ssize_t store_online(struct devic
+ static struct device_attribute online_attr =
+ __ATTR(online, S_IRUGO | S_IWUSR, show_online, store_online);
+
+-static int device_add_groups(struct device *dev,
+- const struct attribute_group **groups)
++int device_add_groups(struct device *dev, const struct attribute_group **groups)
+ {
+ int error = 0;
+ int i;
+@@ -453,8 +452,8 @@ static int device_add_groups(struct devi
+ return error;
+ }
+
+-static void device_remove_groups(struct device *dev,
+- const struct attribute_group **groups)
++void device_remove_groups(struct device *dev,
++ const struct attribute_group **groups)
+ {
+ int i;
+
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -62,6 +62,7 @@ extern void bus_remove_file(struct bus_t
+ * @bus_attrs: Default attributes of the bus.
+ * @dev_attrs: Default attributes of the devices on the bus.
+ * @drv_attrs: Default attributes of the device drivers on the bus.
++ * @dev_groups: Default attributes of the devices on the bus.
+ * @match: Called, perhaps multiple times, whenever a new device or driver
+ * is added for this bus. It should return a nonzero value if the
+ * given device can be handled by the given driver.
+@@ -100,8 +101,9 @@ struct bus_type {
+ const char *dev_name;
+ struct device *dev_root;
+ struct bus_attribute *bus_attrs;
+- struct device_attribute *dev_attrs;
++ struct device_attribute *dev_attrs; /* use dev_groups instead */
+ struct driver_attribute *drv_attrs;
++ const struct attribute_group **dev_groups;
+
+ int (*match)(struct device *dev, struct device_driver *drv);
+ int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
diff --git a/driver-core-bus_type-add-drv_groups.patch b/driver-core-bus_type-add-drv_groups.patch
new file mode 100644
index 00000000000000..c95dc820306601
--- /dev/null
+++ b/driver-core-bus_type-add-drv_groups.patch
@@ -0,0 +1,101 @@
+From foo@baz Wed Jul 10 15:53:04 PDT 2013
+Date: Wed, 10 Jul 2013 15:53:04 -0700
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: driver core: bus_type: add drv_groups
+
+attribute groups are much more flexible than just a list of attributes,
+due to their support for visibility of the attributes, and binary
+attributes. Add drv_groups to struct bus_type which should be used
+instead of drv_attrs.
+
+drv_attrs will be removed from the structure soon.
+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/base/base.h | 5 +++++
+ drivers/base/bus.c | 5 +++++
+ drivers/base/driver.c | 8 ++++----
+ include/linux/device.h | 4 +++-
+ 4 files changed, 17 insertions(+), 5 deletions(-)
+
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -119,6 +119,11 @@ static inline int driver_match_device(st
+ return drv->bus->match ? drv->bus->match(dev, drv) : 1;
+ }
+
++extern int driver_add_groups(struct device_driver *drv,
++ const struct attribute_group **groups);
++extern void driver_remove_groups(struct device_driver *drv,
++ const struct attribute_group **groups);
++
+ extern int device_add_groups(struct device *dev,
+ const struct attribute_group **groups);
+ extern void device_remove_groups(struct device *dev,
+--- a/drivers/base/bus.c
++++ b/drivers/base/bus.c
+@@ -725,6 +725,10 @@ int bus_add_driver(struct device_driver
+ printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n",
+ __func__, drv->name);
+ }
++ error = driver_add_groups(drv, bus->drv_groups);
++ if (error)
++ printk(KERN_ERR "%s: driver_create_groups(%s) failed\n",
++ __func__, drv->name);
+
+ if (!drv->suppress_bind_attrs) {
+ error = add_bind_files(drv);
+@@ -762,6 +766,7 @@ void bus_remove_driver(struct device_dri
+ if (!drv->suppress_bind_attrs)
+ remove_bind_files(drv);
+ driver_remove_attrs(drv->bus, drv);
++ driver_remove_groups(drv, drv->bus->drv_groups);
+ driver_remove_file(drv, &driver_attr_uevent);
+ klist_remove(&drv->p->knode_bus);
+ pr_debug("bus: '%s': remove driver %s\n", drv->bus->name, drv->name);
+--- a/drivers/base/driver.c
++++ b/drivers/base/driver.c
+@@ -123,8 +123,8 @@ void driver_remove_file(struct device_dr
+ }
+ EXPORT_SYMBOL_GPL(driver_remove_file);
+
+-static int driver_add_groups(struct device_driver *drv,
+- const struct attribute_group **groups)
++int driver_add_groups(struct device_driver *drv,
++ const struct attribute_group **groups)
+ {
+ int error = 0;
+ int i;
+@@ -143,8 +143,8 @@ static int driver_add_groups(struct devi
+ return error;
+ }
+
+-static void driver_remove_groups(struct device_driver *drv,
+- const struct attribute_group **groups)
++void driver_remove_groups(struct device_driver *drv,
++ const struct attribute_group **groups)
+ {
+ int i;
+
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -63,6 +63,7 @@ extern void bus_remove_file(struct bus_t
+ * @dev_attrs: Default attributes of the devices on the bus.
+ * @drv_attrs: Default attributes of the device drivers on the bus.
+ * @dev_groups: Default attributes of the devices on the bus.
++ * @drv_groups: Default attributes of the device drivers on the bus.
+ * @match: Called, perhaps multiple times, whenever a new device or driver
+ * is added for this bus. It should return a nonzero value if the
+ * given device can be handled by the given driver.
+@@ -102,8 +103,9 @@ struct bus_type {
+ struct device *dev_root;
+ struct bus_attribute *bus_attrs;
+ struct device_attribute *dev_attrs; /* use dev_groups instead */
+- struct driver_attribute *drv_attrs;
++ struct driver_attribute *drv_attrs; /* use drv_groups instead */
+ const struct attribute_group **dev_groups;
++ const struct attribute_group **drv_groups;
+
+ int (*match)(struct device *dev, struct device_driver *drv);
+ int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
diff --git a/driver-core-remove-dev_attrs-from-struct-class.patch b/driver-core-remove-dev_attrs-from-struct-class.patch
index c7fd11f56c0cca..1d7478b2180766 100644
--- a/driver-core-remove-dev_attrs-from-struct-class.patch
+++ b/driver-core-remove-dev_attrs-from-struct-class.patch
@@ -9,9 +9,9 @@ dev_groups, we can safely remove dev_attrs from struct class.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
- drivers/base/core.c | 39 ++-------------------------------------
+ drivers/base/core.c | 38 +-------------------------------------
include/linux/device.h | 2 --
- 2 files changed, 2 insertions(+), 39 deletions(-)
+ 2 files changed, 1 insertion(+), 39 deletions(-)
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -75,15 +75,14 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
err_remove_class_groups:
if (class)
device_remove_groups(dev, class->dev_groups);
-@@ -585,7 +550,7 @@ static void device_remove_attrs(struct d
+@@ -585,7 +550,6 @@ static void device_remove_attrs(struct d
device_remove_groups(dev, type->groups);
if (class) {
- device_remove_attributes(dev, class->dev_attrs);
-+ device_remove_groups(dev, class->dev_groups);
device_remove_bin_attributes(dev, class->dev_bin_attrs);
+ device_remove_groups(dev, class->dev_groups);
}
- }
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -314,7 +314,6 @@ int subsys_virtual_register(struct bus_t
diff --git a/driver-core-remove-dev_bin_attrs-from-struct-class.patch b/driver-core-remove-dev_bin_attrs-from-struct-class.patch
index b6b39b19eac62e..d1fc656b98075c 100644
--- a/driver-core-remove-dev_bin_attrs-from-struct-class.patch
+++ b/driver-core-remove-dev_bin_attrs-from-struct-class.patch
@@ -85,9 +85,9 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
device_remove_groups(dev, type->groups);
- if (class) {
+- device_remove_bin_attributes(dev, class->dev_bin_attrs);
+ if (class)
device_remove_groups(dev, class->dev_groups);
-- device_remove_bin_attributes(dev, class->dev_bin_attrs);
- }
}
diff --git a/series b/series
index 9aff253c2fc975..6e73411d64aeca 100644
--- a/series
+++ b/series
@@ -87,3 +87,8 @@ usb-isp1362-move-debug-files-from-proc-to-debugfs.patch
#gregkh/gkh-version.patch
+driver-core-bus_type-add-dev_groups.patch
+driver-core-bus_type-add-drv_groups.patch
+driver-core-bus_type-add-bus_groups.patch
+
+