aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/base/Makefile2
-rw-r--r--drivers/base/bus.c13
-rw-r--r--drivers/base/component.c382
-rw-r--r--drivers/base/core.c7
-rw-r--r--drivers/base/devtmpfs.c2
-rw-r--r--drivers/base/firmware_class.c93
-rw-r--r--drivers/firmware/dmi-sysfs.c3
-rw-r--r--drivers/gpio/gpiolib.c4
-rw-r--r--drivers/md/bitmap.c2
-rw-r--r--drivers/md/bitmap.h2
-rw-r--r--drivers/md/md.h10
-rw-r--r--drivers/misc/mic/host/mic_device.h2
12 files changed, 478 insertions, 44 deletions
diff --git a/drivers/base/Makefile b/drivers/base/Makefile
index 94e8a80e87f8..870ecfd503af 100644
--- a/drivers/base/Makefile
+++ b/drivers/base/Makefile
@@ -1,6 +1,6 @@
1# Makefile for the Linux device tree 1# Makefile for the Linux device tree
2 2
3obj-y := core.o bus.o dd.o syscore.o \ 3obj-y := component.o core.o bus.o dd.o syscore.o \
4 driver.o class.o platform.o \ 4 driver.o class.o platform.o \
5 cpu.o firmware.o init.o map.o devres.o \ 5 cpu.o firmware.o init.o map.o devres.o \
6 attribute_container.o transport_class.o \ 6 attribute_container.o transport_class.o \
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 73f6c2925281..59dc8086e4fa 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -146,8 +146,19 @@ void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr)
146} 146}
147EXPORT_SYMBOL_GPL(bus_remove_file); 147EXPORT_SYMBOL_GPL(bus_remove_file);
148 148
149static void bus_release(struct kobject *kobj)
150{
151 struct subsys_private *priv =
152 container_of(kobj, typeof(*priv), subsys.kobj);
153 struct bus_type *bus = priv->bus;
154
155 kfree(priv);
156 bus->p = NULL;
157}
158
149static struct kobj_type bus_ktype = { 159static struct kobj_type bus_ktype = {
150 .sysfs_ops = &bus_sysfs_ops, 160 .sysfs_ops = &bus_sysfs_ops,
161 .release = bus_release,
151}; 162};
152 163
153static int bus_uevent_filter(struct kset *kset, struct kobject *kobj) 164static int bus_uevent_filter(struct kset *kset, struct kobject *kobj)
@@ -953,8 +964,6 @@ void bus_unregister(struct bus_type *bus)
953 kset_unregister(bus->p->devices_kset); 964 kset_unregister(bus->p->devices_kset);
954 bus_remove_file(bus, &bus_attr_uevent); 965 bus_remove_file(bus, &bus_attr_uevent);
955 kset_unregister(&bus->p->subsys); 966 kset_unregister(&bus->p->subsys);
956 kfree(bus->p);
957 bus->p = NULL;
958} 967}
959EXPORT_SYMBOL_GPL(bus_unregister); 968EXPORT_SYMBOL_GPL(bus_unregister);
960 969
diff --git a/drivers/base/component.c b/drivers/base/component.c
new file mode 100644
index 000000000000..c53efe6c6d8e
--- /dev/null
+++ b/drivers/base/component.c
@@ -0,0 +1,382 @@
1/*
2 * Componentized device handling.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This is work in progress. We gather up the component devices into a list,
9 * and bind them when instructed. At the moment, we're specific to the DRM
10 * subsystem, and only handles one master device, but this doesn't have to be
11 * the case.
12 */
13#include <linux/component.h>
14#include <linux/device.h>
15#include <linux/kref.h>
16#include <linux/list.h>
17#include <linux/module.h>
18#include <linux/mutex.h>
19#include <linux/slab.h>
20
21struct master {
22 struct list_head node;
23 struct list_head components;
24 bool bound;
25
26 const struct component_master_ops *ops;
27 struct device *dev;
28};
29
30struct component {
31 struct list_head node;
32 struct list_head master_node;
33 struct master *master;
34 bool bound;
35
36 const struct component_ops *ops;
37 struct device *dev;
38};
39
40static DEFINE_MUTEX(component_mutex);
41static LIST_HEAD(component_list);
42static LIST_HEAD(masters);
43
44static struct master *__master_find(struct device *dev,
45 const struct component_master_ops *ops)
46{
47 struct master *m;
48
49 list_for_each_entry(m, &masters, node)
50 if (m->dev == dev && (!ops || m->ops == ops))
51 return m;
52
53 return NULL;
54}
55
56/* Attach an unattached component to a master. */
57static void component_attach_master(struct master *master, struct component *c)
58{
59 c->master = master;
60
61 list_add_tail(&c->master_node, &master->components);
62}
63
64/* Detach a component from a master. */
65static void component_detach_master(struct master *master, struct component *c)
66{
67 list_del(&c->master_node);
68
69 c->master = NULL;
70}
71
72int component_master_add_child(struct master *master,
73 int (*compare)(struct device *, void *), void *compare_data)
74{
75 struct component *c;
76 int ret = -ENXIO;
77
78 list_for_each_entry(c, &component_list, node) {
79 if (c->master)
80 continue;
81
82 if (compare(c->dev, compare_data)) {
83 component_attach_master(master, c);
84 ret = 0;
85 break;
86 }
87 }
88
89 return ret;
90}
91EXPORT_SYMBOL_GPL(component_master_add_child);
92
93/* Detach all attached components from this master */
94static void master_remove_components(struct master *master)
95{
96 while (!list_empty(&master->components)) {
97 struct component *c = list_first_entry(&master->components,
98 struct component, master_node);
99
100 WARN_ON(c->master != master);
101
102 component_detach_master(master, c);
103 }
104}
105
106/*
107 * Try to bring up a master. If component is NULL, we're interested in
108 * this master, otherwise it's a component which must be present to try
109 * and bring up the master.
110 *
111 * Returns 1 for successful bringup, 0 if not ready, or -ve errno.
112 */
113static int try_to_bring_up_master(struct master *master,
114 struct component *component)
115{
116 int ret = 0;
117
118 if (!master->bound) {
119 /*
120 * Search the list of components, looking for components that
121 * belong to this master, and attach them to the master.
122 */
123 if (master->ops->add_components(master->dev, master)) {
124 /* Failed to find all components */
125 master_remove_components(master);
126 ret = 0;
127 goto out;
128 }
129
130 if (component && component->master != master) {
131 master_remove_components(master);
132 ret = 0;
133 goto out;
134 }
135
136 /* Found all components */
137 ret = master->ops->bind(master->dev);
138 if (ret < 0) {
139 master_remove_components(master);
140 goto out;
141 }
142
143 master->bound = true;
144 ret = 1;
145 }
146out:
147
148 return ret;
149}
150
151static int try_to_bring_up_masters(struct component *component)
152{
153 struct master *m;
154 int ret = 0;
155
156 list_for_each_entry(m, &masters, node) {
157 ret = try_to_bring_up_master(m, component);
158 if (ret != 0)
159 break;
160 }
161
162 return ret;
163}
164
165static void take_down_master(struct master *master)
166{
167 if (master->bound) {
168 master->ops->unbind(master->dev);
169 master->bound = false;
170 }
171
172 master_remove_components(master);
173}
174
175int component_master_add(struct device *dev,
176 const struct component_master_ops *ops)
177{
178 struct master *master;
179 int ret;
180
181 master = kzalloc(sizeof(*master), GFP_KERNEL);
182 if (!master)
183 return -ENOMEM;
184
185 master->dev = dev;
186 master->ops = ops;
187 INIT_LIST_HEAD(&master->components);
188
189 /* Add to the list of available masters. */
190 mutex_lock(&component_mutex);
191 list_add(&master->node, &masters);
192
193 ret = try_to_bring_up_master(master, NULL);
194
195 if (ret < 0) {
196 /* Delete off the list if we weren't successful */
197 list_del(&master->node);
198 kfree(master);
199 }
200 mutex_unlock(&component_mutex);
201
202 return ret < 0 ? ret : 0;
203}
204EXPORT_SYMBOL_GPL(component_master_add);
205
206void component_master_del(struct device *dev,
207 const struct component_master_ops *ops)
208{
209 struct master *master;
210
211 mutex_lock(&component_mutex);
212 master = __master_find(dev, ops);
213 if (master) {
214 take_down_master(master);
215
216 list_del(&master->node);
217 kfree(master);
218 }
219 mutex_unlock(&component_mutex);
220}
221EXPORT_SYMBOL_GPL(component_master_del);
222
223static void component_unbind(struct component *component,
224 struct master *master, void *data)
225{
226 WARN_ON(!component->bound);
227
228 component->ops->unbind(component->dev, master->dev, data);
229 component->bound = false;
230
231 /* Release all resources claimed in the binding of this component */
232 devres_release_group(component->dev, component);
233}
234
235void component_unbind_all(struct device *master_dev, void *data)
236{
237 struct master *master;
238 struct component *c;
239
240 WARN_ON(!mutex_is_locked(&component_mutex));
241
242 master = __master_find(master_dev, NULL);
243 if (!master)
244 return;
245
246 list_for_each_entry_reverse(c, &master->components, master_node)
247 component_unbind(c, master, data);
248}
249EXPORT_SYMBOL_GPL(component_unbind_all);
250
251static int component_bind(struct component *component, struct master *master,
252 void *data)
253{
254 int ret;
255
256 /*
257 * Each component initialises inside its own devres group.
258 * This allows us to roll-back a failed component without
259 * affecting anything else.
260 */
261 if (!devres_open_group(master->dev, NULL, GFP_KERNEL))
262 return -ENOMEM;
263
264 /*
265 * Also open a group for the device itself: this allows us
266 * to release the resources claimed against the sub-device
267 * at the appropriate moment.
268 */
269 if (!devres_open_group(component->dev, component, GFP_KERNEL)) {
270 devres_release_group(master->dev, NULL);
271 return -ENOMEM;
272 }
273
274 dev_dbg(master->dev, "binding %s (ops %ps)\n",
275 dev_name(component->dev), component->ops);
276
277 ret = component->ops->bind(component->dev, master->dev, data);
278 if (!ret) {
279 component->bound = true;
280
281 /*
282 * Close the component device's group so that resources
283 * allocated in the binding are encapsulated for removal
284 * at unbind. Remove the group on the DRM device as we
285 * can clean those resources up independently.
286 */
287 devres_close_group(component->dev, NULL);
288 devres_remove_group(master->dev, NULL);
289
290 dev_info(master->dev, "bound %s (ops %ps)\n",
291 dev_name(component->dev), component->ops);
292 } else {
293 devres_release_group(component->dev, NULL);
294 devres_release_group(master->dev, NULL);
295
296 dev_err(master->dev, "failed to bind %s (ops %ps): %d\n",
297 dev_name(component->dev), component->ops, ret);
298 }
299
300 return ret;
301}
302
303int component_bind_all(struct device *master_dev, void *data)
304{
305 struct master *master;
306 struct component *c;
307 int ret = 0;
308
309 WARN_ON(!mutex_is_locked(&component_mutex));
310
311 master = __master_find(master_dev, NULL);
312 if (!master)
313 return -EINVAL;
314
315 list_for_each_entry(c, &master->components, master_node) {
316 ret = component_bind(c, master, data);
317 if (ret)
318 break;
319 }
320
321 if (ret != 0) {
322 list_for_each_entry_continue_reverse(c, &master->components,
323 master_node)
324 component_unbind(c, master, data);
325 }
326
327 return ret;
328}
329EXPORT_SYMBOL_GPL(component_bind_all);
330
331int component_add(struct device *dev, const struct component_ops *ops)
332{
333 struct component *component;
334 int ret;
335
336 component = kzalloc(sizeof(*component), GFP_KERNEL);
337 if (!component)
338 return -ENOMEM;
339
340 component->ops = ops;
341 component->dev = dev;
342
343 dev_dbg(dev, "adding component (ops %ps)\n", ops);
344
345 mutex_lock(&component_mutex);
346 list_add_tail(&component->node, &component_list);
347
348 ret = try_to_bring_up_masters(component);
349 if (ret < 0) {
350 list_del(&component->node);
351
352 kfree(component);
353 }
354 mutex_unlock(&component_mutex);
355
356 return ret < 0 ? ret : 0;
357}
358EXPORT_SYMBOL_GPL(component_add);
359
360void component_del(struct device *dev, const struct component_ops *ops)
361{
362 struct component *c, *component = NULL;
363
364 mutex_lock(&component_mutex);
365 list_for_each_entry(c, &component_list, node)
366 if (c->dev == dev && c->ops == ops) {
367 list_del(&c->node);
368 component = c;
369 break;
370 }
371
372 if (component && component->master)
373 take_down_master(component->master);
374
375 mutex_unlock(&component_mutex);
376
377 WARN_ON(!component);
378 kfree(component);
379}
380EXPORT_SYMBOL_GPL(component_del);
381
382MODULE_LICENSE("GPL v2");
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 67b180d855b2..2b567177ef78 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -491,11 +491,13 @@ static int device_add_attrs(struct device *dev)
491 if (device_supports_offline(dev) && !dev->offline_disabled) { 491 if (device_supports_offline(dev) && !dev->offline_disabled) {
492 error = device_create_file(dev, &dev_attr_online); 492 error = device_create_file(dev, &dev_attr_online);
493 if (error) 493 if (error)
494 goto err_remove_type_groups; 494 goto err_remove_dev_groups;
495 } 495 }
496 496
497 return 0; 497 return 0;
498 498
499 err_remove_dev_groups:
500 device_remove_groups(dev, dev->groups);
499 err_remove_type_groups: 501 err_remove_type_groups:
500 if (type) 502 if (type)
501 device_remove_groups(dev, type->groups); 503 device_remove_groups(dev, type->groups);
@@ -1603,6 +1605,7 @@ device_create_groups_vargs(struct class *class, struct device *parent,
1603 goto error; 1605 goto error;
1604 } 1606 }
1605 1607
1608 device_initialize(dev);
1606 dev->devt = devt; 1609 dev->devt = devt;
1607 dev->class = class; 1610 dev->class = class;
1608 dev->parent = parent; 1611 dev->parent = parent;
@@ -1614,7 +1617,7 @@ device_create_groups_vargs(struct class *class, struct device *parent,
1614 if (retval) 1617 if (retval)
1615 goto error; 1618 goto error;
1616 1619
1617 retval = device_register(dev); 1620 retval = device_add(dev);
1618 if (retval) 1621 if (retval)
1619 goto error; 1622 goto error;
1620 1623
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c
index 0f3820121e02..25798db14553 100644
--- a/drivers/base/devtmpfs.c
+++ b/drivers/base/devtmpfs.c
@@ -299,7 +299,7 @@ static int handle_remove(const char *nodename, struct device *dev)
299{ 299{
300 struct path parent; 300 struct path parent;
301 struct dentry *dentry; 301 struct dentry *dentry;
302 int deleted = 1; 302 int deleted = 0;
303 int err; 303 int err;
304 304
305 dentry = kern_path_locked(nodename, &parent); 305 dentry = kern_path_locked(nodename, &parent);
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index eb8fb94ae2c5..8a97ddfa6122 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -96,6 +96,15 @@ static inline long firmware_loading_timeout(void)
96 return loading_timeout > 0 ? loading_timeout * HZ : MAX_SCHEDULE_TIMEOUT; 96 return loading_timeout > 0 ? loading_timeout * HZ : MAX_SCHEDULE_TIMEOUT;
97} 97}
98 98
99/* firmware behavior options */
100#define FW_OPT_UEVENT (1U << 0)
101#define FW_OPT_NOWAIT (1U << 1)
102#ifdef CONFIG_FW_LOADER_USER_HELPER
103#define FW_OPT_FALLBACK (1U << 2)
104#else
105#define FW_OPT_FALLBACK 0
106#endif
107
99struct firmware_cache { 108struct firmware_cache {
100 /* firmware_buf instance will be added into the below list */ 109 /* firmware_buf instance will be added into the below list */
101 spinlock_t lock; 110 spinlock_t lock;
@@ -219,6 +228,7 @@ static int fw_lookup_and_allocate_buf(const char *fw_name,
219} 228}
220 229
221static void __fw_free_buf(struct kref *ref) 230static void __fw_free_buf(struct kref *ref)
231 __releases(&fwc->lock)
222{ 232{
223 struct firmware_buf *buf = to_fwbuf(ref); 233 struct firmware_buf *buf = to_fwbuf(ref);
224 struct firmware_cache *fwc = buf->fwc; 234 struct firmware_cache *fwc = buf->fwc;
@@ -270,21 +280,21 @@ module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);
270MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path"); 280MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");
271 281
272/* Don't inline this: 'struct kstat' is biggish */ 282/* Don't inline this: 'struct kstat' is biggish */
273static noinline_for_stack long fw_file_size(struct file *file) 283static noinline_for_stack int fw_file_size(struct file *file)
274{ 284{
275 struct kstat st; 285 struct kstat st;
276 if (vfs_getattr(&file->f_path, &st)) 286 if (vfs_getattr(&file->f_path, &st))
277 return -1; 287 return -1;
278 if (!S_ISREG(st.mode)) 288 if (!S_ISREG(st.mode))
279 return -1; 289 return -1;
280 if (st.size != (long)st.size) 290 if (st.size != (int)st.size)
281 return -1; 291 return -1;
282 return st.size; 292 return st.size;
283} 293}
284 294
285static int fw_read_file_contents(struct file *file, struct firmware_buf *fw_buf) 295static int fw_read_file_contents(struct file *file, struct firmware_buf *fw_buf)
286{ 296{
287 long size; 297 int size;
288 char *buf; 298 char *buf;
289 int rc; 299 int rc;
290 300
@@ -820,7 +830,7 @@ static void firmware_class_timeout_work(struct work_struct *work)
820 830
821static struct firmware_priv * 831static struct firmware_priv *
822fw_create_instance(struct firmware *firmware, const char *fw_name, 832fw_create_instance(struct firmware *firmware, const char *fw_name,
823 struct device *device, bool uevent, bool nowait) 833 struct device *device, unsigned int opt_flags)
824{ 834{
825 struct firmware_priv *fw_priv; 835 struct firmware_priv *fw_priv;
826 struct device *f_dev; 836 struct device *f_dev;
@@ -832,7 +842,7 @@ fw_create_instance(struct firmware *firmware, const char *fw_name,
832 goto exit; 842 goto exit;
833 } 843 }
834 844
835 fw_priv->nowait = nowait; 845 fw_priv->nowait = !!(opt_flags & FW_OPT_NOWAIT);
836 fw_priv->fw = firmware; 846 fw_priv->fw = firmware;
837 INIT_DELAYED_WORK(&fw_priv->timeout_work, 847 INIT_DELAYED_WORK(&fw_priv->timeout_work,
838 firmware_class_timeout_work); 848 firmware_class_timeout_work);
@@ -848,8 +858,8 @@ exit:
848} 858}
849 859
850/* load a firmware via user helper */ 860/* load a firmware via user helper */
851static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent, 861static int _request_firmware_load(struct firmware_priv *fw_priv,
852 long timeout) 862 unsigned int opt_flags, long timeout)
853{ 863{
854 int retval = 0; 864 int retval = 0;
855 struct device *f_dev = &fw_priv->dev; 865 struct device *f_dev = &fw_priv->dev;
@@ -885,7 +895,7 @@ static int _request_firmware_load(struct firmware_priv *fw_priv, bool uevent,
885 goto err_del_bin_attr; 895 goto err_del_bin_attr;
886 } 896 }
887 897
888 if (uevent) { 898 if (opt_flags & FW_OPT_UEVENT) {
889 buf->need_uevent = true; 899 buf->need_uevent = true;
890 dev_set_uevent_suppress(f_dev, false); 900 dev_set_uevent_suppress(f_dev, false);
891 dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id); 901 dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id);
@@ -911,16 +921,16 @@ err_put_dev:
911 921
912static int fw_load_from_user_helper(struct firmware *firmware, 922static int fw_load_from_user_helper(struct firmware *firmware,
913 const char *name, struct device *device, 923 const char *name, struct device *device,
914 bool uevent, bool nowait, long timeout) 924 unsigned int opt_flags, long timeout)
915{ 925{
916 struct firmware_priv *fw_priv; 926 struct firmware_priv *fw_priv;
917 927
918 fw_priv = fw_create_instance(firmware, name, device, uevent, nowait); 928 fw_priv = fw_create_instance(firmware, name, device, opt_flags);
919 if (IS_ERR(fw_priv)) 929 if (IS_ERR(fw_priv))
920 return PTR_ERR(fw_priv); 930 return PTR_ERR(fw_priv);
921 931
922 fw_priv->buf = firmware->priv; 932 fw_priv->buf = firmware->priv;
923 return _request_firmware_load(fw_priv, uevent, timeout); 933 return _request_firmware_load(fw_priv, opt_flags, timeout);
924} 934}
925 935
926#ifdef CONFIG_PM_SLEEP 936#ifdef CONFIG_PM_SLEEP
@@ -942,7 +952,7 @@ static void kill_requests_without_uevent(void)
942#else /* CONFIG_FW_LOADER_USER_HELPER */ 952#else /* CONFIG_FW_LOADER_USER_HELPER */
943static inline int 953static inline int
944fw_load_from_user_helper(struct firmware *firmware, const char *name, 954fw_load_from_user_helper(struct firmware *firmware, const char *name,
945 struct device *device, bool uevent, bool nowait, 955 struct device *device, unsigned int opt_flags,
946 long timeout) 956 long timeout)
947{ 957{
948 return -ENOENT; 958 return -ENOENT;
@@ -1023,7 +1033,7 @@ _request_firmware_prepare(struct firmware **firmware_p, const char *name,
1023} 1033}
1024 1034
1025static int assign_firmware_buf(struct firmware *fw, struct device *device, 1035static int assign_firmware_buf(struct firmware *fw, struct device *device,
1026 bool skip_cache) 1036 unsigned int opt_flags)
1027{ 1037{
1028 struct firmware_buf *buf = fw->priv; 1038 struct firmware_buf *buf = fw->priv;
1029 1039
@@ -1040,7 +1050,8 @@ static int assign_firmware_buf(struct firmware *fw, struct device *device,
1040 * device may has been deleted already, but the problem 1050 * device may has been deleted already, but the problem
1041 * should be fixed in devres or driver core. 1051 * should be fixed in devres or driver core.
1042 */ 1052 */
1043 if (device && !skip_cache) 1053 /* don't cache firmware handled without uevent */
1054 if (device && (opt_flags & FW_OPT_UEVENT))
1044 fw_add_devm_name(device, buf->fw_id); 1055 fw_add_devm_name(device, buf->fw_id);
1045 1056
1046 /* 1057 /*
@@ -1061,7 +1072,7 @@ static int assign_firmware_buf(struct firmware *fw, struct device *device,
1061/* called from request_firmware() and request_firmware_work_func() */ 1072/* called from request_firmware() and request_firmware_work_func() */
1062static int 1073static int
1063_request_firmware(const struct firmware **firmware_p, const char *name, 1074_request_firmware(const struct firmware **firmware_p, const char *name,
1064 struct device *device, bool uevent, bool nowait) 1075 struct device *device, unsigned int opt_flags)
1065{ 1076{
1066 struct firmware *fw; 1077 struct firmware *fw;
1067 long timeout; 1078 long timeout;
@@ -1076,7 +1087,7 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
1076 1087
1077 ret = 0; 1088 ret = 0;
1078 timeout = firmware_loading_timeout(); 1089 timeout = firmware_loading_timeout();
1079 if (nowait) { 1090 if (opt_flags & FW_OPT_NOWAIT) {
1080 timeout = usermodehelper_read_lock_wait(timeout); 1091 timeout = usermodehelper_read_lock_wait(timeout);
1081 if (!timeout) { 1092 if (!timeout) {
1082 dev_dbg(device, "firmware: %s loading timed out\n", 1093 dev_dbg(device, "firmware: %s loading timed out\n",
@@ -1095,16 +1106,18 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
1095 1106
1096 ret = fw_get_filesystem_firmware(device, fw->priv); 1107 ret = fw_get_filesystem_firmware(device, fw->priv);
1097 if (ret) { 1108 if (ret) {
1098 dev_warn(device, "Direct firmware load failed with error %d\n", 1109 if (opt_flags & FW_OPT_FALLBACK) {
1099 ret); 1110 dev_warn(device,
1100 dev_warn(device, "Falling back to user helper\n"); 1111 "Direct firmware load failed with error %d\n",
1101 ret = fw_load_from_user_helper(fw, name, device, 1112 ret);
1102 uevent, nowait, timeout); 1113 dev_warn(device, "Falling back to user helper\n");
1114 ret = fw_load_from_user_helper(fw, name, device,
1115 opt_flags, timeout);
1116 }
1103 } 1117 }
1104 1118
1105 /* don't cache firmware handled without uevent */
1106 if (!ret) 1119 if (!ret)
1107 ret = assign_firmware_buf(fw, device, !uevent); 1120 ret = assign_firmware_buf(fw, device, opt_flags);
1108 1121
1109 usermodehelper_read_unlock(); 1122 usermodehelper_read_unlock();
1110 1123
@@ -1146,12 +1159,37 @@ request_firmware(const struct firmware **firmware_p, const char *name,
1146 1159
1147 /* Need to pin this module until return */ 1160 /* Need to pin this module until return */
1148 __module_get(THIS_MODULE); 1161 __module_get(THIS_MODULE);
1149 ret = _request_firmware(firmware_p, name, device, true, false); 1162 ret = _request_firmware(firmware_p, name, device,
1163 FW_OPT_UEVENT | FW_OPT_FALLBACK);
1150 module_put(THIS_MODULE); 1164 module_put(THIS_MODULE);
1151 return ret; 1165 return ret;
1152} 1166}
1153EXPORT_SYMBOL(request_firmware); 1167EXPORT_SYMBOL(request_firmware);
1154 1168
1169#ifdef CONFIG_FW_LOADER_USER_HELPER
1170/**
1171 * request_firmware: - load firmware directly without usermode helper
1172 * @firmware_p: pointer to firmware image
1173 * @name: name of firmware file
1174 * @device: device for which firmware is being loaded
1175 *
1176 * This function works pretty much like request_firmware(), but this doesn't
1177 * fall back to usermode helper even if the firmware couldn't be loaded
1178 * directly from fs. Hence it's useful for loading optional firmwares, which
1179 * aren't always present, without extra long timeouts of udev.
1180 **/
1181int request_firmware_direct(const struct firmware **firmware_p,
1182 const char *name, struct device *device)
1183{
1184 int ret;
1185 __module_get(THIS_MODULE);
1186 ret = _request_firmware(firmware_p, name, device, FW_OPT_UEVENT);
1187 module_put(THIS_MODULE);
1188 return ret;
1189}
1190EXPORT_SYMBOL_GPL(request_firmware_direct);
1191#endif
1192
1155/** 1193/**
1156 * release_firmware: - release the resource associated with a firmware image 1194 * release_firmware: - release the resource associated with a firmware image
1157 * @fw: firmware resource to release 1195 * @fw: firmware resource to release
@@ -1174,7 +1212,7 @@ struct firmware_work {
1174 struct device *device; 1212 struct device *device;
1175 void *context; 1213 void *context;
1176 void (*cont)(const struct firmware *fw, void *context); 1214 void (*cont)(const struct firmware *fw, void *context);
1177 bool uevent; 1215 unsigned int opt_flags;
1178}; 1216};
1179 1217
1180static void request_firmware_work_func(struct work_struct *work) 1218static void request_firmware_work_func(struct work_struct *work)
@@ -1185,7 +1223,7 @@ static void request_firmware_work_func(struct work_struct *work)
1185 fw_work = container_of(work, struct firmware_work, work); 1223 fw_work = container_of(work, struct firmware_work, work);
1186 1224
1187 _request_firmware(&fw, fw_work->name, fw_work->device, 1225 _request_firmware(&fw, fw_work->name, fw_work->device,
1188 fw_work->uevent, true); 1226 fw_work->opt_flags);
1189 fw_work->cont(fw, fw_work->context); 1227 fw_work->cont(fw, fw_work->context);
1190 put_device(fw_work->device); /* taken in request_firmware_nowait() */ 1228 put_device(fw_work->device); /* taken in request_firmware_nowait() */
1191 1229
@@ -1233,7 +1271,8 @@ request_firmware_nowait(
1233 fw_work->device = device; 1271 fw_work->device = device;
1234 fw_work->context = context; 1272 fw_work->context = context;
1235 fw_work->cont = cont; 1273 fw_work->cont = cont;
1236 fw_work->uevent = uevent; 1274 fw_work->opt_flags = FW_OPT_NOWAIT | FW_OPT_FALLBACK |
1275 (uevent ? FW_OPT_UEVENT : 0);
1237 1276
1238 if (!try_module_get(module)) { 1277 if (!try_module_get(module)) {
1239 kfree(fw_work); 1278 kfree(fw_work);
diff --git a/drivers/firmware/dmi-sysfs.c b/drivers/firmware/dmi-sysfs.c
index eb26d62e5188..e0f1cb3d3598 100644
--- a/drivers/firmware/dmi-sysfs.c
+++ b/drivers/firmware/dmi-sysfs.c
@@ -553,7 +553,7 @@ static const struct bin_attribute dmi_entry_raw_attr = {
553static void dmi_sysfs_entry_release(struct kobject *kobj) 553static void dmi_sysfs_entry_release(struct kobject *kobj)
554{ 554{
555 struct dmi_sysfs_entry *entry = to_entry(kobj); 555 struct dmi_sysfs_entry *entry = to_entry(kobj);
556 sysfs_remove_bin_file(&entry->kobj, &dmi_entry_raw_attr); 556
557 spin_lock(&entry_list_lock); 557 spin_lock(&entry_list_lock);
558 list_del(&entry->list); 558 list_del(&entry->list);
559 spin_unlock(&entry_list_lock); 559 spin_unlock(&entry_list_lock);
@@ -685,6 +685,7 @@ static void __exit dmi_sysfs_exit(void)
685 pr_debug("dmi-sysfs: unloading.\n"); 685 pr_debug("dmi-sysfs: unloading.\n");
686 cleanup_entry_list(); 686 cleanup_entry_list();
687 kset_unregister(dmi_kset); 687 kset_unregister(dmi_kset);
688 kobject_del(dmi_kobj);
688 kobject_put(dmi_kobj); 689 kobject_put(dmi_kobj);
689} 690}
690 691
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 85f772c0b26a..c8a7c810bade 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -393,7 +393,7 @@ static const DEVICE_ATTR(value, 0644,
393 393
394static irqreturn_t gpio_sysfs_irq(int irq, void *priv) 394static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
395{ 395{
396 struct sysfs_dirent *value_sd = priv; 396 struct kernfs_node *value_sd = priv;
397 397
398 sysfs_notify_dirent(value_sd); 398 sysfs_notify_dirent(value_sd);
399 return IRQ_HANDLED; 399 return IRQ_HANDLED;
@@ -402,7 +402,7 @@ static irqreturn_t gpio_sysfs_irq(int irq, void *priv)
402static int gpio_setup_irq(struct gpio_desc *desc, struct device *dev, 402static int gpio_setup_irq(struct gpio_desc *desc, struct device *dev,
403 unsigned long gpio_flags) 403 unsigned long gpio_flags)
404{ 404{
405 struct sysfs_dirent *value_sd; 405 struct kernfs_node *value_sd;
406 unsigned long irq_flags; 406 unsigned long irq_flags;
407 int ret, irq, id; 407 int ret, irq, id;
408 408
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
index 12dc29ba7399..4195a01b1535 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -1635,7 +1635,7 @@ int bitmap_create(struct mddev *mddev)
1635 sector_t blocks = mddev->resync_max_sectors; 1635 sector_t blocks = mddev->resync_max_sectors;
1636 struct file *file = mddev->bitmap_info.file; 1636 struct file *file = mddev->bitmap_info.file;
1637 int err; 1637 int err;
1638 struct sysfs_dirent *bm = NULL; 1638 struct kernfs_node *bm = NULL;
1639 1639
1640 BUILD_BUG_ON(sizeof(bitmap_super_t) != 256); 1640 BUILD_BUG_ON(sizeof(bitmap_super_t) != 256);
1641 1641
diff --git a/drivers/md/bitmap.h b/drivers/md/bitmap.h
index df4aeb6ac6f0..30210b9c4ef9 100644
--- a/drivers/md/bitmap.h
+++ b/drivers/md/bitmap.h
@@ -225,7 +225,7 @@ struct bitmap {
225 wait_queue_head_t overflow_wait; 225 wait_queue_head_t overflow_wait;
226 wait_queue_head_t behind_wait; 226 wait_queue_head_t behind_wait;
227 227
228 struct sysfs_dirent *sysfs_can_clear; 228 struct kernfs_node *sysfs_can_clear;
229}; 229};
230 230
231/* the bitmap API */ 231/* the bitmap API */
diff --git a/drivers/md/md.h b/drivers/md/md.h
index 0095ec84ffc7..07bba96de260 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -106,7 +106,7 @@ struct md_rdev {
106 */ 106 */
107 struct work_struct del_work; /* used for delayed sysfs removal */ 107 struct work_struct del_work; /* used for delayed sysfs removal */
108 108
109 struct sysfs_dirent *sysfs_state; /* handle for 'state' 109 struct kernfs_node *sysfs_state; /* handle for 'state'
110 * sysfs entry */ 110 * sysfs entry */
111 111
112 struct badblocks { 112 struct badblocks {
@@ -379,10 +379,10 @@ struct mddev {
379 sector_t resync_max; /* resync should pause 379 sector_t resync_max; /* resync should pause
380 * when it gets here */ 380 * when it gets here */
381 381
382 struct sysfs_dirent *sysfs_state; /* handle for 'array_state' 382 struct kernfs_node *sysfs_state; /* handle for 'array_state'
383 * file in sysfs. 383 * file in sysfs.
384 */ 384 */
385 struct sysfs_dirent *sysfs_action; /* handle for 'sync_action' */ 385 struct kernfs_node *sysfs_action; /* handle for 'sync_action' */
386 386
387 struct work_struct del_work; /* used for delayed sysfs removal */ 387 struct work_struct del_work; /* used for delayed sysfs removal */
388 388
@@ -501,13 +501,13 @@ struct md_sysfs_entry {
501}; 501};
502extern struct attribute_group md_bitmap_group; 502extern struct attribute_group md_bitmap_group;
503 503
504static inline struct sysfs_dirent *sysfs_get_dirent_safe(struct sysfs_dirent *sd, char *name) 504static inline struct kernfs_node *sysfs_get_dirent_safe(struct kernfs_node *sd, char *name)
505{ 505{
506 if (sd) 506 if (sd)
507 return sysfs_get_dirent(sd, name); 507 return sysfs_get_dirent(sd, name);
508 return sd; 508 return sd;
509} 509}
510static inline void sysfs_notify_dirent_safe(struct sysfs_dirent *sd) 510static inline void sysfs_notify_dirent_safe(struct kernfs_node *sd)
511{ 511{
512 if (sd) 512 if (sd)
513 sysfs_notify_dirent(sd); 513 sysfs_notify_dirent(sd);
diff --git a/drivers/misc/mic/host/mic_device.h b/drivers/misc/mic/host/mic_device.h
index b2da289320c9..1a6edce2ecde 100644
--- a/drivers/misc/mic/host/mic_device.h
+++ b/drivers/misc/mic/host/mic_device.h
@@ -112,7 +112,7 @@ struct mic_device {
112 struct work_struct shutdown_work; 112 struct work_struct shutdown_work;
113 u8 state; 113 u8 state;
114 u8 shutdown_status; 114 u8 shutdown_status;
115 struct sysfs_dirent *state_sysfs; 115 struct kernfs_node *state_sysfs;
116 struct completion reset_wait; 116 struct completion reset_wait;
117 void *log_buf_addr; 117 void *log_buf_addr;
118 int *log_buf_len; 118 int *log_buf_len;