aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--driver-core-add-default-groups-to-struct-class.patch75
-rw-r--r--driver-core-add-device_attr_rw-and-device_attr_ro-macros.patch82
-rw-r--r--driver-core-introduce-device_create_groups.patch179
-rw-r--r--f4.patch4
-rw-r--r--series10
-rw-r--r--sysfs-add-more-helper-macro-s-for-bin_-attribute-_groups.patch94
-rw-r--r--sysfs-add-support-for-binary-attributes-in-groups.patch131
-rw-r--r--sysfs-prevent-warning-when-only-using-binary-attributes.patch28
-rw-r--r--sysfs-use-file-mode-defines-from-stat.h.patch45
-rw-r--r--sysfs.h-add-__attr_rw-macro.patch51
-rw-r--r--sysfs.h-add-attribute_groups-macro.patch35
-rw-r--r--sysfs.h-add-bin_attr-macro.patch34
12 files changed, 2 insertions, 766 deletions
diff --git a/driver-core-add-default-groups-to-struct-class.patch b/driver-core-add-default-groups-to-struct-class.patch
deleted file mode 100644
index af701f865c33fa..00000000000000
--- a/driver-core-add-default-groups-to-struct-class.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From foo@baz Tue Jul 9 12:00:06 PDT 2013
-Date: Tue, 09 Jul 2013 12:00:06 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: driver core: add default groups to struct class
-
-We should be using groups, not attribute lists, for classes to allow
-subdirectories, and soon, binary files. Groups are just more flexible
-overall, so add them.
-
-The dev_attrs list will go away after all in-kernel users are converted
-to use dev_groups.
-
-Reviewed-by: Guenter Roeck <linux@roeck-us.net>
-Tested-by: Guenter Roeck <linux@roeck-us.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/base/core.c | 9 ++++++++-
- include/linux/device.h | 4 +++-
- 2 files changed, 11 insertions(+), 2 deletions(-)
-
---- a/drivers/base/core.c
-+++ b/drivers/base/core.c
-@@ -528,9 +528,12 @@ static int device_add_attrs(struct devic
- int error;
-
- if (class) {
-- error = device_add_attributes(dev, class->dev_attrs);
-+ error = device_add_groups(dev, class->dev_groups);
- if (error)
- return error;
-+ error = device_add_attributes(dev, class->dev_attrs);
-+ if (error)
-+ goto err_remove_class_groups;
- error = device_add_bin_attributes(dev, class->dev_bin_attrs);
- if (error)
- goto err_remove_class_attrs;
-@@ -563,6 +566,9 @@ static int device_add_attrs(struct devic
- err_remove_class_attrs:
- if (class)
- device_remove_attributes(dev, class->dev_attrs);
-+ err_remove_class_groups:
-+ if (class)
-+ device_remove_groups(dev, class->dev_groups);
-
- 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
-@@ -320,6 +320,7 @@ int subsys_virtual_register(struct bus_t
- * @name: Name of the class.
- * @owner: The module owner.
- * @class_attrs: Default attributes of this class.
-+ * @dev_groups: Default attributes of the devices that belong to the class.
- * @dev_attrs: Default attributes of the devices belong to the class.
- * @dev_bin_attrs: Default binary attributes of the devices belong to the class.
- * @dev_kobj: The kobject that represents this class and links it into the hierarchy.
-@@ -349,7 +350,8 @@ struct class {
- struct module *owner;
-
- struct class_attribute *class_attrs;
-- struct device_attribute *dev_attrs;
-+ struct device_attribute *dev_attrs; /* use dev_groups instead */
-+ const struct attribute_group **dev_groups;
- struct bin_attribute *dev_bin_attrs;
- struct kobject *dev_kobj;
-
diff --git a/driver-core-add-device_attr_rw-and-device_attr_ro-macros.patch b/driver-core-add-device_attr_rw-and-device_attr_ro-macros.patch
deleted file mode 100644
index 3dc53f256f316c..00000000000000
--- a/driver-core-add-device_attr_rw-and-device_attr_ro-macros.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From foo@baz Mon Jul 8 22:44:37 PDT 2013
-Date: Mon, 08 Jul 2013 22:44:37 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: driver core: device.h: add RW and RO attribute macros
-
-Make it easier to create attributes without having to always audit the
-mode settings.
-
-Reviewed-by: Guenter Roeck <linux@roeck-us.net>
-Tested-by: Guenter Roeck <linux@roeck-us.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- include/linux/device.h | 28 +++++++++++++++++++++-------
- 1 file changed, 21 insertions(+), 7 deletions(-)
-
---- a/include/linux/device.h
-+++ b/include/linux/device.h
-@@ -47,7 +47,11 @@ struct bus_attribute {
- };
-
- #define BUS_ATTR(_name, _mode, _show, _store) \
--struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
-+ struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
-+#define BUS_ATTR_RW(_name) \
-+ struct bus_attribute bus_attr_##_name = __ATTR_RW(_name)
-+#define BUS_ATTR_RO(_name) \
-+ struct bus_attribute bus_attr_##_name = __ATTR_RO(_name)
-
- extern int __must_check bus_create_file(struct bus_type *,
- struct bus_attribute *);
-@@ -261,9 +265,12 @@ struct driver_attribute {
- size_t count);
- };
-
--#define DRIVER_ATTR(_name, _mode, _show, _store) \
--struct driver_attribute driver_attr_##_name = \
-- __ATTR(_name, _mode, _show, _store)
-+#define DRIVER_ATTR(_name, _mode, _show, _store) \
-+ struct driver_attribute driver_attr_##_name = __ATTR(_name, _mode, _show, _store)
-+#define DRIVER_ATTR_RW(_name) \
-+ struct driver_attribute driver_attr_##_name = __ATTR_RW(_name)
-+#define DRIVER_ATTR_RO(_name) \
-+ struct driver_attribute driver_attr_##_name = __ATTR_RO(_name)
-
- extern int __must_check driver_create_file(struct device_driver *driver,
- const struct driver_attribute *attr);
-@@ -414,8 +421,12 @@ struct class_attribute {
- const struct class_attribute *attr);
- };
-
--#define CLASS_ATTR(_name, _mode, _show, _store) \
--struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
-+#define CLASS_ATTR(_name, _mode, _show, _store) \
-+ struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
-+#define CLASS_ATTR_RW(_name) \
-+ struct class_attribute class_attr_##_name = __ATTR_RW(_name)
-+#define CLASS_ATTR_RO(_name) \
-+ struct class_attribute class_attr_##_name = __ATTR_RO(_name)
-
- extern int __must_check class_create_file(struct class *class,
- const struct class_attribute *attr);
-@@ -423,7 +434,6 @@ extern void class_remove_file(struct cla
- const struct class_attribute *attr);
-
- /* Simple class attribute that is just a static string */
--
- struct class_attribute_string {
- struct class_attribute attr;
- char *str;
-@@ -512,6 +522,10 @@ ssize_t device_store_bool(struct device
-
- #define DEVICE_ATTR(_name, _mode, _show, _store) \
- struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
-+#define DEVICE_ATTR_RW(_name) \
-+ struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
-+#define DEVICE_ATTR_RO(_name) \
-+ struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
- #define DEVICE_ULONG_ATTR(_name, _mode, _var) \
- struct dev_ext_attribute dev_attr_##_name = \
- { __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) }
diff --git a/driver-core-introduce-device_create_groups.patch b/driver-core-introduce-device_create_groups.patch
deleted file mode 100644
index e73fe6ef2236d6..00000000000000
--- a/driver-core-introduce-device_create_groups.patch
+++ /dev/null
@@ -1,179 +0,0 @@
-From groeck7@gmail.com Sat Jul 6 10:25:17 2013
-From: Guenter Roeck <linux@roeck-us.net>
-Date: Sat, 6 Jul 2013 10:24:51 -0700
-Subject: driver core: Introduce device_create_groups
-To: Jean Delvare <khali@linux-fr.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Cc: lm-sensors@lm-sensors.org, linux-kernel@vger.kernel.org, Guenter Roeck <linux@roeck-us.net>
-
-From: Guenter Roeck <linux@roeck-us.net>
-
-device_create_groups lets callers create devices as well as associated
-sysfs attributes with a single call. This avoids race conditions seen
-if sysfs attributes on new devices are created later.
-
-[fixed up comment block placement and add checks for printk buffer
-formats - gregkh]
-
-Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-Cc: Jean Delvare <khali@linux-fr.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/base/core.c | 111 ++++++++++++++++++++++++++++++++++++-------------
- include/linux/device.h | 5 ++
- 2 files changed, 88 insertions(+), 28 deletions(-)
-
---- a/drivers/base/core.c
-+++ b/drivers/base/core.c
-@@ -1667,34 +1667,11 @@ static void device_create_release(struct
- kfree(dev);
- }
-
--/**
-- * device_create_vargs - creates a device and registers it with sysfs
-- * @class: pointer to the struct class that this device should be registered to
-- * @parent: pointer to the parent struct device of this new device, if any
-- * @devt: the dev_t for the char device to be added
-- * @drvdata: the data to be added to the device for callbacks
-- * @fmt: string for the device's name
-- * @args: va_list for the device's name
-- *
-- * This function can be used by char device classes. A struct device
-- * will be created in sysfs, registered to the specified class.
-- *
-- * A "dev" file will be created, showing the dev_t for the device, if
-- * the dev_t is not 0,0.
-- * If a pointer to a parent struct device is passed in, the newly created
-- * struct device will be a child of that device in sysfs.
-- * The pointer to the struct device will be returned from the call.
-- * Any further sysfs files that might be required can be created using this
-- * pointer.
-- *
-- * Returns &struct device pointer on success, or ERR_PTR() on error.
-- *
-- * Note: the struct class passed to this function must have previously
-- * been created with a call to class_create().
-- */
--struct device *device_create_vargs(struct class *class, struct device *parent,
-- dev_t devt, void *drvdata, const char *fmt,
-- va_list args)
-+static struct device *
-+device_create_groups_vargs(struct class *class, struct device *parent,
-+ dev_t devt, void *drvdata,
-+ const struct attribute_group **groups,
-+ const char *fmt, va_list args)
- {
- struct device *dev = NULL;
- int retval = -ENODEV;
-@@ -1711,6 +1688,7 @@ struct device *device_create_vargs(struc
- dev->devt = devt;
- dev->class = class;
- dev->parent = parent;
-+ dev->groups = groups;
- dev->release = device_create_release;
- dev_set_drvdata(dev, drvdata);
-
-@@ -1728,6 +1706,39 @@ error:
- put_device(dev);
- return ERR_PTR(retval);
- }
-+
-+/**
-+ * device_create_vargs - creates a device and registers it with sysfs
-+ * @class: pointer to the struct class that this device should be registered to
-+ * @parent: pointer to the parent struct device of this new device, if any
-+ * @devt: the dev_t for the char device to be added
-+ * @drvdata: the data to be added to the device for callbacks
-+ * @fmt: string for the device's name
-+ * @args: va_list for the device's name
-+ *
-+ * This function can be used by char device classes. A struct device
-+ * will be created in sysfs, registered to the specified class.
-+ *
-+ * A "dev" file will be created, showing the dev_t for the device, if
-+ * the dev_t is not 0,0.
-+ * If a pointer to a parent struct device is passed in, the newly created
-+ * struct device will be a child of that device in sysfs.
-+ * The pointer to the struct device will be returned from the call.
-+ * Any further sysfs files that might be required can be created using this
-+ * pointer.
-+ *
-+ * Returns &struct device pointer on success, or ERR_PTR() on error.
-+ *
-+ * Note: the struct class passed to this function must have previously
-+ * been created with a call to class_create().
-+ */
-+struct device *device_create_vargs(struct class *class, struct device *parent,
-+ dev_t devt, void *drvdata, const char *fmt,
-+ va_list args)
-+{
-+ return device_create_groups_vargs(class, parent, devt, drvdata, NULL,
-+ fmt, args);
-+}
- EXPORT_SYMBOL_GPL(device_create_vargs);
-
- /**
-@@ -1767,6 +1778,50 @@ struct device *device_create(struct clas
- }
- EXPORT_SYMBOL_GPL(device_create);
-
-+/**
-+ * device_create_with_groups - creates a device and registers it with sysfs
-+ * @class: pointer to the struct class that this device should be registered to
-+ * @parent: pointer to the parent struct device of this new device, if any
-+ * @devt: the dev_t for the char device to be added
-+ * @drvdata: the data to be added to the device for callbacks
-+ * @groups: NULL-terminated list of attribute groups to be created
-+ * @fmt: string for the device's name
-+ *
-+ * This function can be used by char device classes. A struct device
-+ * will be created in sysfs, registered to the specified class.
-+ * Additional attributes specified in the groups parameter will also
-+ * be created automatically.
-+ *
-+ * A "dev" file will be created, showing the dev_t for the device, if
-+ * the dev_t is not 0,0.
-+ * If a pointer to a parent struct device is passed in, the newly created
-+ * struct device will be a child of that device in sysfs.
-+ * The pointer to the struct device will be returned from the call.
-+ * Any further sysfs files that might be required can be created using this
-+ * pointer.
-+ *
-+ * Returns &struct device pointer on success, or ERR_PTR() on error.
-+ *
-+ * Note: the struct class passed to this function must have previously
-+ * been created with a call to class_create().
-+ */
-+struct device *device_create_with_groups(struct class *class,
-+ struct device *parent, dev_t devt,
-+ void *drvdata,
-+ const struct attribute_group **groups,
-+ const char *fmt, ...)
-+{
-+ va_list vargs;
-+ struct device *dev;
-+
-+ va_start(vargs, fmt);
-+ dev = device_create_groups_vargs(class, parent, devt, drvdata, groups,
-+ fmt, vargs);
-+ va_end(vargs);
-+ return dev;
-+}
-+EXPORT_SYMBOL_GPL(device_create_with_groups);
-+
- static int __match_devt(struct device *dev, const void *data)
- {
- const dev_t *devt = data;
---- a/include/linux/device.h
-+++ b/include/linux/device.h
-@@ -938,6 +938,11 @@ extern __printf(5, 6)
- struct device *device_create(struct class *cls, struct device *parent,
- dev_t devt, void *drvdata,
- const char *fmt, ...);
-+extern __printf(6, 7)
-+struct device *device_create_with_groups(struct class *cls,
-+ struct device *parent, dev_t devt, void *drvdata,
-+ const struct attribute_group **groups,
-+ const char *fmt, ...);
- extern void device_destroy(struct class *cls, dev_t devt);
-
- /*
diff --git a/f4.patch b/f4.patch
index b9c452085282b8..371e5f07871331 100644
--- a/f4.patch
+++ b/f4.patch
@@ -84,7 +84,7 @@
klist_del(&dev->p->knode_bus);
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
-@@ -671,11 +671,13 @@ static ssize_t modalias_show(struct devi
+@@ -672,11 +672,13 @@ static ssize_t modalias_show(struct devi
return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
}
@@ -101,7 +101,7 @@
static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
{
-@@ -892,7 +894,7 @@ static const struct dev_pm_ops platform_
+@@ -893,7 +895,7 @@ static const struct dev_pm_ops platform_
struct bus_type platform_bus_type = {
.name = "platform",
diff --git a/series b/series
index a5ca57de270439..c203b65ca5f9e4 100644
--- a/series
+++ b/series
@@ -1,16 +1,6 @@
# My specific stuff, at the top to make it easier to work stuff below.
# driver core attribute cleanup work
-sysfs.h-add-__attr_rw-macro.patch
-sysfs.h-add-attribute_groups-macro.patch
-sysfs.h-add-bin_attr-macro.patch
-driver-core-add-device_attr_rw-and-device_attr_ro-macros.patch
-sysfs-add-support-for-binary-attributes-in-groups.patch
-sysfs-prevent-warning-when-only-using-binary-attributes.patch
-driver-core-introduce-device_create_groups.patch
-driver-core-add-default-groups-to-struct-class.patch
-sysfs-add-more-helper-macro-s-for-bin_-attribute-_groups.patch
-sysfs-use-file-mode-defines-from-stat.h.patch
# dev_groups to struct class work
misc-c2port-use-dev_bin_attrs-instead-of-hand-coding-it.patch
diff --git a/sysfs-add-more-helper-macro-s-for-bin_-attribute-_groups.patch b/sysfs-add-more-helper-macro-s-for-bin_-attribute-_groups.patch
deleted file mode 100644
index e549896047c28d..00000000000000
--- a/sysfs-add-more-helper-macro-s-for-bin_-attribute-_groups.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 669597be47d042ee28abe5f7e172054043b003e7 Mon Sep 17 00:00:00 2001
-From: Oliver Schinagl <oliver@schinagl.nl>
-Date: Thu, 11 Jul 2013 13:48:18 +0200
-Subject: sysfs: add more helper macro's for (bin_)attribute(_groups)
-
-With the recent changes to sysfs there's various helper macro's.
-However there's no RW, RO BIN_ helper macro's. This patch adds them.
-
-Signed-off-by: Oliver Schinagl <oliver@schinagl.nl>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- include/linux/sysfs.h | 51 +++++++++++++++++++++++++++++++++++++-------------
- 1 file changed, 38 insertions(+), 13 deletions(-)
-
---- a/include/linux/sysfs.h
-+++ b/include/linux/sysfs.h
-@@ -17,6 +17,7 @@
- #include <linux/list.h>
- #include <linux/lockdep.h>
- #include <linux/kobject_ns.h>
-+#include <linux/stat.h>
- #include <linux/atomic.h>
-
- struct kobject;
-@@ -94,15 +95,18 @@ struct attribute_group {
- #define __ATTR_IGNORE_LOCKDEP __ATTR
- #endif
-
--#define ATTRIBUTE_GROUPS(name) \
--static const struct attribute_group name##_group = { \
-- .attrs = name##_attrs, \
--}; \
--static const struct attribute_group *name##_groups[] = { \
-- &name##_group, \
-+#define __ATTRIBUTE_GROUPS(_name) \
-+static const struct attribute_group *_name##_groups[] = { \
-+ &_name##_group, \
- NULL, \
- }
-
-+#define ATTRIBUTE_GROUPS(_name) \
-+static const struct attribute_group _name##_group = { \
-+ .attrs = _name##_attrs, \
-+}; \
-+__ATTRIBUTE_GROUPS(_name)
-+
- #define attr_name(_attr) (_attr).attr.name
-
- struct file;
-@@ -132,15 +136,36 @@ struct bin_attribute {
- */
- #define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
-
--/* macro to create static binary attributes easier */
--#define BIN_ATTR(_name, _mode, _read, _write, _size) \
--struct bin_attribute bin_attr_##_name = { \
-- .attr = {.name = __stringify(_name), .mode = _mode }, \
-- .read = _read, \
-- .write = _write, \
-- .size = _size, \
-+/* macros to create static binary attributes easier */
-+#define __BIN_ATTR(_name, _mode, _read, _write, _size) { \
-+ .attr = { .name = __stringify(_name), .mode = _mode }, \
-+ .read = _read, \
-+ .write = _write, \
-+ .size = _size, \
-+}
-+
-+#define __BIN_ATTR_RO(_name, _size) { \
-+ .attr = { .name = __stringify(_name), .mode = S_IRUGO }, \
-+ .read = _name##_read, \
-+ .size = _size, \
- }
-
-+#define __BIN_ATTR_RW(_name, _size) __BIN_ATTR(_name, \
-+ (S_IWUSR | S_IRUGO), _name##_read, \
-+ _name##_write)
-+
-+#define __BIN_ATTR_NULL __ATTR_NULL
-+
-+#define BIN_ATTR(_name, _mode, _read, _write, _size) \
-+struct bin_attribute bin_attr_##_name = __BIN_ATTR(_name, _mode, _read, \
-+ _write, _size)
-+
-+#define BIN_ATTR_RO(_name, _size) \
-+struct bin_attribute bin_attr_##_name = __BIN_ATTR_RO(_name, _size)
-+
-+#define BIN_ATTR_RW(_name, _size) \
-+struct bin_attribute bin_attr_##_name = __BIN_ATTR_RW(_name, _size)
-+
- struct sysfs_ops {
- ssize_t (*show)(struct kobject *, struct attribute *,char *);
- ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
diff --git a/sysfs-add-support-for-binary-attributes-in-groups.patch b/sysfs-add-support-for-binary-attributes-in-groups.patch
deleted file mode 100644
index 3756614b6409f8..00000000000000
--- a/sysfs-add-support-for-binary-attributes-in-groups.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-From foo@baz Wed Jul 10 12:02:20 PDT 2013
-Date: Wed, 10 Jul 2013 12:02:20 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: sysfs: add support for binary attributes in groups
-
-groups should be able to support binary attributes, just like it
-supports "normal" attributes. This lets us only handle one type of
-structure, groups, throughout the driver core and subsystems, making
-binary attributes a "full fledged" part of the driver model, and not
-something just "tacked on".
-
-Reported-by: Oliver Schinagl <oliver@schinagl.nl>
-Reviewed-by: Guenter Roeck <linux@roeck-us.net>
-Tested-by: Guenter Roeck <linux@roeck-us.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/sysfs/group.c | 66 ++++++++++++++++++++++++++++++++++----------------
- include/linux/sysfs.h | 4 +--
- 2 files changed, 48 insertions(+), 22 deletions(-)
-
---- a/fs/sysfs/group.c
-+++ b/fs/sysfs/group.c
-@@ -20,38 +20,64 @@ static void remove_files(struct sysfs_di
- const struct attribute_group *grp)
- {
- struct attribute *const* attr;
-- int i;
-+ struct bin_attribute *const* bin_attr;
-
-- for (i = 0, attr = grp->attrs; *attr; i++, attr++)
-- sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
-+ if (grp->attrs)
-+ for (attr = grp->attrs; *attr; attr++)
-+ sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
-+ if (grp->bin_attrs)
-+ for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++)
-+ sysfs_remove_bin_file(kobj, *bin_attr);
- }
-
- static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
- const struct attribute_group *grp, int update)
- {
- struct attribute *const* attr;
-+ struct bin_attribute *const* bin_attr;
- int error = 0, i;
-
-- for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) {
-- umode_t mode = 0;
-+ if (grp->attrs) {
-+ for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) {
-+ umode_t mode = 0;
-
-- /* in update mode, we're changing the permissions or
-- * visibility. Do this by first removing then
-- * re-adding (if required) the file */
-- if (update)
-- sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
-- if (grp->is_visible) {
-- mode = grp->is_visible(kobj, *attr, i);
-- if (!mode)
-- continue;
-+ /*
-+ * In update mode, we're changing the permissions or
-+ * visibility. Do this by first removing then
-+ * re-adding (if required) the file.
-+ */
-+ if (update)
-+ sysfs_hash_and_remove(dir_sd, NULL,
-+ (*attr)->name);
-+ if (grp->is_visible) {
-+ mode = grp->is_visible(kobj, *attr, i);
-+ if (!mode)
-+ continue;
-+ }
-+ error = sysfs_add_file_mode(dir_sd, *attr,
-+ SYSFS_KOBJ_ATTR,
-+ (*attr)->mode | mode);
-+ if (unlikely(error))
-+ break;
-+ }
-+ if (error) {
-+ remove_files(dir_sd, kobj, grp);
-+ goto exit;
-+ }
-+ }
-+
-+ if (grp->bin_attrs) {
-+ for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++) {
-+ if (update)
-+ sysfs_remove_bin_file(kobj, *bin_attr);
-+ error = sysfs_create_bin_file(kobj, *bin_attr);
-+ if (error)
-+ break;
- }
-- error = sysfs_add_file_mode(dir_sd, *attr, SYSFS_KOBJ_ATTR,
-- (*attr)->mode | mode);
-- if (unlikely(error))
-- break;
-+ if (error)
-+ remove_files(dir_sd, kobj, grp);
- }
-- if (error)
-- remove_files(dir_sd, kobj, grp);
-+exit:
- return error;
- }
-
---- a/include/linux/sysfs.h
-+++ b/include/linux/sysfs.h
-@@ -21,6 +21,7 @@
-
- struct kobject;
- struct module;
-+struct bin_attribute;
- enum kobj_ns_type;
-
- struct attribute {
-@@ -59,10 +60,9 @@ struct attribute_group {
- umode_t (*is_visible)(struct kobject *,
- struct attribute *, int);
- struct attribute **attrs;
-+ struct bin_attribute **bin_attrs;
- };
-
--
--
- /**
- * Use these macros to make defining attributes easier. See include/linux/device.h
- * for examples..
diff --git a/sysfs-prevent-warning-when-only-using-binary-attributes.patch b/sysfs-prevent-warning-when-only-using-binary-attributes.patch
deleted file mode 100644
index 8c0774eca2aa93..00000000000000
--- a/sysfs-prevent-warning-when-only-using-binary-attributes.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 5a4066011878134c1ab9412bc147c28c30f0fa4b Mon Sep 17 00:00:00 2001
-From: Oliver Schinagl <oliver@schinagl.nl>
-Date: Thu, 11 Jul 2013 13:40:20 +0200
-Subject: sysfs: prevent warning when only using binary attributes
-
-When only using bin_attrs instead of attrs the kernel prints a warning
-and refuses to create the sysfs entry. This fixes that.
-
-Signed-off-by: Oliver Schinagl <oliver@schinagl.nl>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/sysfs/group.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/fs/sysfs/group.c
-+++ b/fs/sysfs/group.c
-@@ -93,8 +93,8 @@ static int internal_create_group(struct
- /* Updates may happen before the object has been instantiated */
- if (unlikely(update && !kobj->sd))
- return -EINVAL;
-- if (!grp->attrs) {
-- WARN(1, "sysfs: attrs not set by subsystem for group: %s/%s\n",
-+ if (!grp->attrs && !grp->bin_attrs) {
-+ WARN(1, "sysfs: (bin_)attrs not set by subsystem for group: %s/%s\n",
- kobj->name, grp->name ? "" : grp->name);
- return -EINVAL;
- }
diff --git a/sysfs-use-file-mode-defines-from-stat.h.patch b/sysfs-use-file-mode-defines-from-stat.h.patch
deleted file mode 100644
index f96b8b73d4a665..00000000000000
--- a/sysfs-use-file-mode-defines-from-stat.h.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From a67de9f026363ce821c72a807d98830abece3cf7 Mon Sep 17 00:00:00 2001
-From: Oliver Schinagl <oliver@schinagl.nl>
-Date: Thu, 11 Jul 2013 13:57:42 +0200
-Subject: sysfs: use file mode defines from stat.h
-
-With the last patches stat.h was included to the header, and thus those
-permission defines should be used.
-
-Signed-off-by: Oliver Schinagl <oliver@schinagl.nl>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- include/linux/sysfs.h | 17 +++++++++--------
- 1 file changed, 9 insertions(+), 8 deletions(-)
-
---- a/include/linux/sysfs.h
-+++ b/include/linux/sysfs.h
-@@ -69,18 +69,19 @@ struct attribute_group {
- * for examples..
- */
-
--#define __ATTR(_name,_mode,_show,_store) { \
-- .attr = {.name = __stringify(_name), .mode = _mode }, \
-- .show = _show, \
-- .store = _store, \
-+#define __ATTR(_name,_mode,_show,_store) { \
-+ .attr = {.name = __stringify(_name), .mode = _mode }, \
-+ .show = _show, \
-+ .store = _store, \
- }
-
--#define __ATTR_RO(_name) { \
-- .attr = { .name = __stringify(_name), .mode = 0444 }, \
-- .show = _name##_show, \
-+#define __ATTR_RO(_name) { \
-+ .attr = { .name = __stringify(_name), .mode = S_IRUGO }, \
-+ .show = _name##_show, \
- }
-
--#define __ATTR_RW(_name) __ATTR(_name, 0644, _name##_show, _name##_store)
-+#define __ATTR_RW(_name) __ATTR(_name, (S_IWUSR | S_IRUGO), \
-+ _name##_show, _name##_store)
-
- #define __ATTR_NULL { .attr = { .name = NULL } }
-
diff --git a/sysfs.h-add-__attr_rw-macro.patch b/sysfs.h-add-__attr_rw-macro.patch
deleted file mode 100644
index e23971cb88196d..00000000000000
--- a/sysfs.h-add-__attr_rw-macro.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From foo@baz Mon Jul 8 12:30:29 PDT 2013
-Date: Mon, 08 Jul 2013 12:30:29 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: sysfs.h: add __ATTR_RW() macro
-
-A number of parts of the kernel created their own version of this, might
-as well have the sysfs core provide it instead.
-
-Reviewed-by: Guenter Roeck <linux@roeck-us.net>
-Tested-by: Guenter Roeck <linux@roeck-us.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- include/linux/sysfs.h | 2 ++
- kernel/events/core.c | 2 --
- mm/backing-dev.c | 2 --
- 3 files changed, 2 insertions(+), 4 deletions(-)
-
---- a/include/linux/sysfs.h
-+++ b/include/linux/sysfs.h
-@@ -79,6 +79,8 @@ struct attribute_group {
- .show = _name##_show, \
- }
-
-+#define __ATTR_RW(_name) __ATTR(_name, 0644, _name##_show, _name##_store)
-+
- #define __ATTR_NULL { .attr = { .name = NULL } }
-
- #ifdef CONFIG_DEBUG_LOCK_ALLOC
---- a/kernel/events/core.c
-+++ b/kernel/events/core.c
-@@ -6234,8 +6234,6 @@ perf_event_mux_interval_ms_store(struct
- return count;
- }
-
--#define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store)
--
- static struct device_attribute pmu_dev_attrs[] = {
- __ATTR_RO(type),
- __ATTR_RW(perf_event_mux_interval_ms),
---- a/mm/backing-dev.c
-+++ b/mm/backing-dev.c
-@@ -232,8 +232,6 @@ static ssize_t stable_pages_required_sho
- bdi_cap_stable_pages_required(bdi) ? 1 : 0);
- }
-
--#define __ATTR_RW(attr) __ATTR(attr, 0644, attr##_show, attr##_store)
--
- static struct device_attribute bdi_dev_attrs[] = {
- __ATTR_RW(read_ahead_kb),
- __ATTR_RW(min_ratio),
diff --git a/sysfs.h-add-attribute_groups-macro.patch b/sysfs.h-add-attribute_groups-macro.patch
deleted file mode 100644
index c6775e4880130a..00000000000000
--- a/sysfs.h-add-attribute_groups-macro.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From foo@baz Mon Jul 8 16:40:50 PDT 2013
-Date: Mon, 08 Jul 2013 16:40:50 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: sysfs.h: add ATTRIBUTE_GROUPS() macro
-
-To make it easier for driver subsystems to work with attribute groups,
-create the ATTRIBUTE_GROUPS macro to remove some of the repetitive
-typing for the most common use for attribute groups.
-
-Reviewed-by: Guenter Roeck <linux@roeck-us.net>
-Tested-by: Guenter Roeck <linux@roeck-us.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- include/linux/sysfs.h | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
---- a/include/linux/sysfs.h
-+++ b/include/linux/sysfs.h
-@@ -94,6 +94,15 @@ struct attribute_group {
- #define __ATTR_IGNORE_LOCKDEP __ATTR
- #endif
-
-+#define ATTRIBUTE_GROUPS(name) \
-+static const struct attribute_group name##_group = { \
-+ .attrs = name##_attrs, \
-+}; \
-+static const struct attribute_group *name##_groups[] = { \
-+ &name##_group, \
-+ NULL, \
-+}
-+
- #define attr_name(_attr) (_attr).attr.name
-
- struct file;
diff --git a/sysfs.h-add-bin_attr-macro.patch b/sysfs.h-add-bin_attr-macro.patch
deleted file mode 100644
index f3a1c5b230f365..00000000000000
--- a/sysfs.h-add-bin_attr-macro.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From foo@baz Wed Jul 10 12:06:27 PDT 2013
-Date: Wed, 10 Jul 2013 12:06:27 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: sysfs.h: add BIN_ATTR macro
-
-This makes it easier to create static binary attributes, which is needed
-in a number of drivers, instead of "open coding" them.
-
-Reviewed-by: Guenter Roeck <linux@roeck-us.net>
-Tested-by: Guenter Roeck <linux@roeck-us.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- include/linux/sysfs.h | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
---- a/include/linux/sysfs.h
-+++ b/include/linux/sysfs.h
-@@ -132,6 +132,15 @@ struct bin_attribute {
- */
- #define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
-
-+/* macro to create static binary attributes easier */
-+#define BIN_ATTR(_name, _mode, _read, _write, _size) \
-+struct bin_attribute bin_attr_##_name = { \
-+ .attr = {.name = __stringify(_name), .mode = _mode }, \
-+ .read = _read, \
-+ .write = _write, \
-+ .size = _size, \
-+}
-+
- struct sysfs_ops {
- ssize_t (*show)(struct kobject *, struct attribute *,char *);
- ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);