aboutsummaryrefslogtreecommitdiffstats
path: root/f4.patch
diff options
Diffstat (limited to 'f4.patch')
-rw-r--r--f4.patch285
1 files changed, 285 insertions, 0 deletions
diff --git a/f4.patch b/f4.patch
new file mode 100644
index 00000000000000..7a9a2787ac5bba
--- /dev/null
+++ b/f4.patch
@@ -0,0 +1,285 @@
+---
+ drivers/base/bus.c | 39 ++-------------------------------------
+ drivers/base/platform.c | 10 ++++++----
+ drivers/hid/hid-core.c | 10 ++++++----
+ drivers/misc/mei/bus.c | 10 ++++++----
+ include/linux/device.h | 2 --
+ kernel/events/core.c | 13 ++++++++-----
+ kernel/workqueue.c | 27 +++++++++++++++------------
+ 7 files changed, 43 insertions(+), 68 deletions(-)
+
+--- a/drivers/base/bus.c
++++ b/drivers/base/bus.c
+@@ -452,35 +452,6 @@ int bus_for_each_drv(struct bus_type *bu
+ }
+ EXPORT_SYMBOL_GPL(bus_for_each_drv);
+
+-static int device_add_attrs(struct bus_type *bus, struct device *dev)
+-{
+- int error = 0;
+- int i;
+-
+- if (!bus->dev_attrs)
+- return 0;
+-
+- for (i = 0; attr_name(bus->dev_attrs[i]); i++) {
+- error = device_create_file(dev, &bus->dev_attrs[i]);
+- if (error) {
+- while (--i >= 0)
+- device_remove_file(dev, &bus->dev_attrs[i]);
+- break;
+- }
+- }
+- return error;
+-}
+-
+-static void device_remove_attrs(struct bus_type *bus, struct device *dev)
+-{
+- int i;
+-
+- if (bus->dev_attrs) {
+- for (i = 0; attr_name(bus->dev_attrs[i]); i++)
+- device_remove_file(dev, &bus->dev_attrs[i]);
+- }
+-}
+-
+ /**
+ * bus_add_device - add device to bus
+ * @dev: device being added
+@@ -496,16 +467,13 @@ int bus_add_device(struct device *dev)
+
+ if (bus) {
+ pr_debug("bus: '%s': add device %s\n", bus->name, dev_name(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;
++ goto out_put;
+ error = sysfs_create_link(&bus->p->devices_kset->kobj,
+ &dev->kobj, dev_name(dev));
+ if (error)
+- goto out_id;
++ goto out_groups;
+ error = sysfs_create_link(&dev->kobj,
+ &dev->bus->p->subsys.kobj, "subsystem");
+ if (error)
+@@ -518,8 +486,6 @@ 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:
+ bus_put(dev->bus);
+ return error;
+@@ -579,7 +545,6 @@ void bus_remove_device(struct device *de
+ sysfs_remove_link(&dev->kobj, "subsystem");
+ 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/platform.c
++++ b/drivers/base/platform.c
+@@ -671,11 +671,13 @@ static ssize_t modalias_show(struct devi
+
+ return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
+ }
++static DEVICE_ATTR_RO(modalias);
+
+-static struct device_attribute platform_dev_attrs[] = {
+- __ATTR_RO(modalias),
+- __ATTR_NULL,
++static struct attribute *platform_dev_attrs[] = {
++ &dev_attr_modalias.attr,
++ NULL,
+ };
++ATTRIBUTE_GROUPS(platform_dev);
+
+ static int platform_uevent(struct device *dev, struct kobj_uevent_env *env)
+ {
+@@ -892,7 +894,7 @@ static const struct dev_pm_ops platform_
+
+ struct bus_type platform_bus_type = {
+ .name = "platform",
+- .dev_attrs = platform_dev_attrs,
++ .dev_groups = platform_dev_groups,
+ .match = platform_match,
+ .uevent = platform_uevent,
+ .pm = &platform_dev_pm_ops,
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1917,11 +1917,13 @@ static ssize_t modalias_show(struct devi
+
+ return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
+ }
++static DEVICE_ATTR_RO(modalias);
+
+-static struct device_attribute hid_dev_attrs[] = {
+- __ATTR_RO(modalias),
+- __ATTR_NULL,
++static struct attribute *hid_dev_attrs[] = {
++ &dev_attr_modalias.attr,
++ NULL,
+ };
++ATTRIBUTE_GROUPS(hid_dev);
+
+ static int hid_uevent(struct device *dev, struct kobj_uevent_env *env)
+ {
+@@ -1949,7 +1951,7 @@ static int hid_uevent(struct device *dev
+
+ static struct bus_type hid_bus_type = {
+ .name = "hid",
+- .dev_attrs = hid_dev_attrs,
++ .dev_groups = hid_dev_groups,
+ .match = hid_bus_match,
+ .probe = hid_device_probe,
+ .remove = hid_device_remove,
+--- a/drivers/misc/mei/bus.c
++++ b/drivers/misc/mei/bus.c
+@@ -108,11 +108,13 @@ static ssize_t modalias_show(struct devi
+
+ return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
+ }
++static DEVICE_ATTR_RO(modalias);
+
+-static struct device_attribute mei_cl_dev_attrs[] = {
+- __ATTR_RO(modalias),
+- __ATTR_NULL,
++static struct attribute *mei_cl_dev_attrs[] = {
++ &dev_attr_modalias.attr,
++ NULL,
+ };
++ATTRIBUTE_GROUPS(mei_cl_dev);
+
+ static int mei_cl_uevent(struct device *dev, struct kobj_uevent_env *env)
+ {
+@@ -124,7 +126,7 @@ static int mei_cl_uevent(struct device *
+
+ static struct bus_type mei_cl_bus_type = {
+ .name = "mei",
+- .dev_attrs = mei_cl_dev_attrs,
++ .dev_groups = mei_cl_dev_groups,
+ .match = mei_cl_device_match,
+ .probe = mei_cl_device_probe,
+ .remove = mei_cl_device_remove,
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -63,7 +63,6 @@ extern void bus_remove_file(struct bus_t
+ * @name: The name of the bus.
+ * @dev_name: Used for subsystems to enumerate devices like ("foo%u", dev->id).
+ * @dev_root: Default device to use as the parent.
+- * @dev_attrs: Default attributes of the devices 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.
+@@ -104,7 +103,6 @@ struct bus_type {
+ const char *name;
+ const char *dev_name;
+ struct device *dev_root;
+- struct device_attribute *dev_attrs; /* use dev_groups instead */
+ const struct attribute_group **bus_groups;
+ const struct attribute_group **dev_groups;
+ const struct attribute_group **drv_groups;
+--- a/kernel/events/core.c
++++ b/kernel/events/core.c
+@@ -6167,6 +6167,7 @@ type_show(struct device *dev, struct dev
+
+ return snprintf(page, PAGE_SIZE-1, "%d\n", pmu->type);
+ }
++static DEVICE_ATTR_RO(type);
+
+ static ssize_t
+ perf_event_mux_interval_ms_show(struct device *dev,
+@@ -6211,17 +6212,19 @@ perf_event_mux_interval_ms_store(struct
+
+ return count;
+ }
++static DEVICE_ATTR_RW(perf_event_mux_interval_ms);
+
+-static struct device_attribute pmu_dev_attrs[] = {
+- __ATTR_RO(type),
+- __ATTR_RW(perf_event_mux_interval_ms),
+- __ATTR_NULL,
++static struct attribute *pmu_dev_attrs[] = {
++ &dev_attr_type.attr,
++ &dev_attr_perf_event_mux_interval_ms.attr,
++ NULL,
+ };
++ATTRIBUTE_GROUPS(pmu_dev);
+
+ static int pmu_bus_running;
+ static struct bus_type pmu_bus = {
+ .name = "event_source",
+- .dev_attrs = pmu_dev_attrs,
++ .dev_groups = pmu_dev_groups,
+ };
+
+ static void pmu_dev_release(struct device *dev)
+--- a/kernel/workqueue.c
++++ b/kernel/workqueue.c
+@@ -3081,25 +3081,26 @@ static struct workqueue_struct *dev_to_w
+ return wq_dev->wq;
+ }
+
+-static ssize_t wq_per_cpu_show(struct device *dev,
+- struct device_attribute *attr, char *buf)
++static ssize_t per_cpu_show(struct device *dev, struct device_attribute *attr,
++ char *buf)
+ {
+ struct workqueue_struct *wq = dev_to_wq(dev);
+
+ return scnprintf(buf, PAGE_SIZE, "%d\n", (bool)!(wq->flags & WQ_UNBOUND));
+ }
++static DEVICE_ATTR_RO(per_cpu);
+
+-static ssize_t wq_max_active_show(struct device *dev,
+- struct device_attribute *attr, char *buf)
++static ssize_t max_active_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
+ {
+ struct workqueue_struct *wq = dev_to_wq(dev);
+
+ return scnprintf(buf, PAGE_SIZE, "%d\n", wq->saved_max_active);
+ }
+
+-static ssize_t wq_max_active_store(struct device *dev,
+- struct device_attribute *attr,
+- const char *buf, size_t count)
++static ssize_t max_active_store(struct device *dev,
++ struct device_attribute *attr, const char *buf,
++ size_t count)
+ {
+ struct workqueue_struct *wq = dev_to_wq(dev);
+ int val;
+@@ -3110,12 +3111,14 @@ static ssize_t wq_max_active_store(struc
+ workqueue_set_max_active(wq, val);
+ return count;
+ }
++static DEVICE_ATTR_RW(max_active);
+
+-static struct device_attribute wq_sysfs_attrs[] = {
+- __ATTR(per_cpu, 0444, wq_per_cpu_show, NULL),
+- __ATTR(max_active, 0644, wq_max_active_show, wq_max_active_store),
+- __ATTR_NULL,
++static struct attribute *wq_sysfs_attrs[] = {
++ &dev_attr_per_cpu.attr,
++ &dev_attr_max_active.attr,
++ NULL,
+ };
++ATTRIBUTE_GROUPS(wq_sysfs);
+
+ static ssize_t wq_pool_ids_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+@@ -3265,7 +3268,7 @@ static struct device_attribute wq_sysfs_
+
+ static struct bus_type wq_subsys = {
+ .name = "workqueue",
+- .dev_attrs = wq_sysfs_attrs,
++ .dev_groups = wq_sysfs_groups,
+ };
+
+ static int __init wq_sysfs_init(void)