aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/device.h
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2006-08-15 01:43:17 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-09-26 00:08:39 -0400
commit4a7fb6363f2d1a6c09a10253937f672f3c7929e1 (patch)
tree46e70fc8baca37ffd901c472ce7ce13338fb4ece /include/linux/device.h
parent35acfdd7253025e8441883fd8f879f5240844f95 (diff)
add __must_check to device management code
We're getting a lot of crashes in the sysfs/kobject/device/bus/class code and they're very hard to diagnose. I'm suspecting that in some cases this is because drivers aren't checking return values and aren't handling errors correctly. So the code blithely blunders on and crashes later in very obscure ways. There's just no reason to ignore errors which can and do occur. So the patch sprinkles __must_check all over these APIs. Causes 1,513 new warnings. Heh. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux/device.h')
-rw-r--r--include/linux/device.h52
1 files changed, 28 insertions, 24 deletions
diff --git a/include/linux/device.h b/include/linux/device.h
index 7d447d7271c5..ad4db72f5733 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -15,6 +15,7 @@
15#include <linux/kobject.h> 15#include <linux/kobject.h>
16#include <linux/klist.h> 16#include <linux/klist.h>
17#include <linux/list.h> 17#include <linux/list.h>
18#include <linux/compiler.h>
18#include <linux/types.h> 19#include <linux/types.h>
19#include <linux/module.h> 20#include <linux/module.h>
20#include <linux/pm.h> 21#include <linux/pm.h>
@@ -58,7 +59,7 @@ struct bus_type {
58 int (*resume)(struct device * dev); 59 int (*resume)(struct device * dev);
59}; 60};
60 61
61extern int bus_register(struct bus_type * bus); 62extern int __must_check bus_register(struct bus_type * bus);
62extern void bus_unregister(struct bus_type * bus); 63extern void bus_unregister(struct bus_type * bus);
63 64
64extern void bus_rescan_devices(struct bus_type * bus); 65extern void bus_rescan_devices(struct bus_type * bus);
@@ -70,9 +71,9 @@ int bus_for_each_dev(struct bus_type * bus, struct device * start, void * data,
70struct device * bus_find_device(struct bus_type *bus, struct device *start, 71struct device * bus_find_device(struct bus_type *bus, struct device *start,
71 void *data, int (*match)(struct device *, void *)); 72 void *data, int (*match)(struct device *, void *));
72 73
73int bus_for_each_drv(struct bus_type * bus, struct device_driver * start, 74int __must_check bus_for_each_drv(struct bus_type *bus,
74 void * data, int (*fn)(struct device_driver *, void *)); 75 struct device_driver *start, void *data,
75 76 int (*fn)(struct device_driver *, void *));
76 77
77/* driverfs interface for exporting bus attributes */ 78/* driverfs interface for exporting bus attributes */
78 79
@@ -85,7 +86,8 @@ struct bus_attribute {
85#define BUS_ATTR(_name,_mode,_show,_store) \ 86#define BUS_ATTR(_name,_mode,_show,_store) \
86struct bus_attribute bus_attr_##_name = __ATTR(_name,_mode,_show,_store) 87struct bus_attribute bus_attr_##_name = __ATTR(_name,_mode,_show,_store)
87 88
88extern int bus_create_file(struct bus_type *, struct bus_attribute *); 89extern int __must_check bus_create_file(struct bus_type *,
90 struct bus_attribute *);
89extern void bus_remove_file(struct bus_type *, struct bus_attribute *); 91extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
90 92
91struct device_driver { 93struct device_driver {
@@ -107,14 +109,13 @@ struct device_driver {
107}; 109};
108 110
109 111
110extern int driver_register(struct device_driver * drv); 112extern int __must_check driver_register(struct device_driver * drv);
111extern void driver_unregister(struct device_driver * drv); 113extern void driver_unregister(struct device_driver * drv);
112 114
113extern struct device_driver * get_driver(struct device_driver * drv); 115extern struct device_driver * get_driver(struct device_driver * drv);
114extern void put_driver(struct device_driver * drv); 116extern void put_driver(struct device_driver * drv);
115extern struct device_driver *driver_find(const char *name, struct bus_type *bus); 117extern struct device_driver *driver_find(const char *name, struct bus_type *bus);
116 118
117
118/* driverfs interface for exporting driver attributes */ 119/* driverfs interface for exporting driver attributes */
119 120
120struct driver_attribute { 121struct driver_attribute {
@@ -126,16 +127,17 @@ struct driver_attribute {
126#define DRIVER_ATTR(_name,_mode,_show,_store) \ 127#define DRIVER_ATTR(_name,_mode,_show,_store) \
127struct driver_attribute driver_attr_##_name = __ATTR(_name,_mode,_show,_store) 128struct driver_attribute driver_attr_##_name = __ATTR(_name,_mode,_show,_store)
128 129
129extern int driver_create_file(struct device_driver *, struct driver_attribute *); 130extern int __must_check driver_create_file(struct device_driver *,
131 struct driver_attribute *);
130extern void driver_remove_file(struct device_driver *, struct driver_attribute *); 132extern void driver_remove_file(struct device_driver *, struct driver_attribute *);
131 133
132extern int driver_for_each_device(struct device_driver * drv, struct device * start, 134extern int __must_check driver_for_each_device(struct device_driver * drv,
133 void * data, int (*fn)(struct device *, void *)); 135 struct device *start, void *data,
136 int (*fn)(struct device *, void *));
134struct device * driver_find_device(struct device_driver *drv, 137struct device * driver_find_device(struct device_driver *drv,
135 struct device *start, void *data, 138 struct device *start, void *data,
136 int (*match)(struct device *, void *)); 139 int (*match)(struct device *, void *));
137 140
138
139/* 141/*
140 * device classes 142 * device classes
141 */ 143 */
@@ -168,7 +170,7 @@ struct class {
168 int (*resume)(struct device *); 170 int (*resume)(struct device *);
169}; 171};
170 172
171extern int class_register(struct class *); 173extern int __must_check class_register(struct class *);
172extern void class_unregister(struct class *); 174extern void class_unregister(struct class *);
173 175
174 176
@@ -181,7 +183,8 @@ struct class_attribute {
181#define CLASS_ATTR(_name,_mode,_show,_store) \ 183#define CLASS_ATTR(_name,_mode,_show,_store) \
182struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store) 184struct class_attribute class_attr_##_name = __ATTR(_name,_mode,_show,_store)
183 185
184extern int class_create_file(struct class *, const struct class_attribute *); 186extern int __must_check class_create_file(struct class *,
187 const struct class_attribute *);
185extern void class_remove_file(struct class *, const struct class_attribute *); 188extern void class_remove_file(struct class *, const struct class_attribute *);
186 189
187struct class_device_attribute { 190struct class_device_attribute {
@@ -194,7 +197,7 @@ struct class_device_attribute {
194struct class_device_attribute class_device_attr_##_name = \ 197struct class_device_attribute class_device_attr_##_name = \
195 __ATTR(_name,_mode,_show,_store) 198 __ATTR(_name,_mode,_show,_store)
196 199
197extern int class_device_create_file(struct class_device *, 200extern int __must_check class_device_create_file(struct class_device *,
198 const struct class_device_attribute *); 201 const struct class_device_attribute *);
199 202
200/** 203/**
@@ -254,10 +257,10 @@ class_set_devdata (struct class_device *dev, void *data)
254} 257}
255 258
256 259
257extern int class_device_register(struct class_device *); 260extern int __must_check class_device_register(struct class_device *);
258extern void class_device_unregister(struct class_device *); 261extern void class_device_unregister(struct class_device *);
259extern void class_device_initialize(struct class_device *); 262extern void class_device_initialize(struct class_device *);
260extern int class_device_add(struct class_device *); 263extern int __must_check class_device_add(struct class_device *);
261extern void class_device_del(struct class_device *); 264extern void class_device_del(struct class_device *);
262 265
263extern int class_device_rename(struct class_device *, char *); 266extern int class_device_rename(struct class_device *, char *);
@@ -267,7 +270,7 @@ extern void class_device_put(struct class_device *);
267 270
268extern void class_device_remove_file(struct class_device *, 271extern void class_device_remove_file(struct class_device *,
269 const struct class_device_attribute *); 272 const struct class_device_attribute *);
270extern int class_device_create_bin_file(struct class_device *, 273extern int __must_check class_device_create_bin_file(struct class_device *,
271 struct bin_attribute *); 274 struct bin_attribute *);
272extern void class_device_remove_bin_file(struct class_device *, 275extern void class_device_remove_bin_file(struct class_device *,
273 struct bin_attribute *); 276 struct bin_attribute *);
@@ -282,7 +285,7 @@ struct class_interface {
282 void (*remove_dev) (struct device *, struct class_interface *); 285 void (*remove_dev) (struct device *, struct class_interface *);
283}; 286};
284 287
285extern int class_interface_register(struct class_interface *); 288extern int __must_check class_interface_register(struct class_interface *);
286extern void class_interface_unregister(struct class_interface *); 289extern void class_interface_unregister(struct class_interface *);
287 290
288extern struct class *class_create(struct module *owner, const char *name); 291extern struct class *class_create(struct module *owner, const char *name);
@@ -307,7 +310,8 @@ struct device_attribute {
307#define DEVICE_ATTR(_name,_mode,_show,_store) \ 310#define DEVICE_ATTR(_name,_mode,_show,_store) \
308struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store) 311struct device_attribute dev_attr_##_name = __ATTR(_name,_mode,_show,_store)
309 312
310extern int device_create_file(struct device *device, struct device_attribute * entry); 313extern int __must_check device_create_file(struct device *device,
314 struct device_attribute * entry);
311extern void device_remove_file(struct device * dev, struct device_attribute * attr); 315extern void device_remove_file(struct device * dev, struct device_attribute * attr);
312extern int __must_check device_create_bin_file(struct device *dev, 316extern int __must_check device_create_bin_file(struct device *dev,
313 struct bin_attribute *attr); 317 struct bin_attribute *attr);
@@ -380,12 +384,12 @@ static inline int device_is_registered(struct device *dev)
380/* 384/*
381 * High level routines for use by the bus drivers 385 * High level routines for use by the bus drivers
382 */ 386 */
383extern int device_register(struct device * dev); 387extern int __must_check device_register(struct device * dev);
384extern void device_unregister(struct device * dev); 388extern void device_unregister(struct device * dev);
385extern void device_initialize(struct device * dev); 389extern void device_initialize(struct device * dev);
386extern int device_add(struct device * dev); 390extern int __must_check device_add(struct device * dev);
387extern void device_del(struct device * dev); 391extern void device_del(struct device * dev);
388extern int device_for_each_child(struct device *, void *, 392extern int __must_check device_for_each_child(struct device *, void *,
389 int (*fn)(struct device *, void *)); 393 int (*fn)(struct device *, void *));
390extern int device_rename(struct device *dev, char *new_name); 394extern int device_rename(struct device *dev, char *new_name);
391 395
@@ -395,7 +399,7 @@ extern int device_rename(struct device *dev, char *new_name);
395 */ 399 */
396extern void device_bind_driver(struct device * dev); 400extern void device_bind_driver(struct device * dev);
397extern void device_release_driver(struct device * dev); 401extern void device_release_driver(struct device * dev);
398extern int device_attach(struct device * dev); 402extern int __must_check device_attach(struct device * dev);
399extern void driver_attach(struct device_driver * drv); 403extern void driver_attach(struct device_driver * drv);
400extern void device_reprobe(struct device *dev); 404extern void device_reprobe(struct device *dev);
401 405
@@ -433,7 +437,7 @@ extern void device_shutdown(void);
433 437
434 438
435/* drivers/base/firmware.c */ 439/* drivers/base/firmware.c */
436extern int firmware_register(struct subsystem *); 440extern int __must_check firmware_register(struct subsystem *);
437extern void firmware_unregister(struct subsystem *); 441extern void firmware_unregister(struct subsystem *);
438 442
439/* debugging and troubleshooting/diagnostic helpers. */ 443/* debugging and troubleshooting/diagnostic helpers. */