diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-19 16:39:42 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-19 16:39:42 -0400 |
| commit | 2eb645e7b5662da47646f76b41b4141f2c9bf13a (patch) | |
| tree | b5b99f8111a72a81d085cc3e3acca706de43062e | |
| parent | 8fdb7e9f612b7c6ba6c3ba460c14263b5ce90f79 (diff) | |
| parent | 12ee3c0a0ac42bed0939420468fd35f5cdceae4f (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6:
driver core: numa: fix BUILD_BUG_ON for node_read_distance
driver-core: document ERR_PTR() return values
kobject: documentation: Update to refer to kset-example.c.
sysdev: the cpu probe/release attributes should be sysdev_class_attributes
kobject: documentation: Fix erroneous example in kobject doc.
driver-core: fix missing kernel-doc in firmware_class
Driver core: Early platform kernel-doc update
sysfs: fix sysfs lockdep warning in mlx4 code
sysfs: fix sysfs lockdep warning in infiniband code
sysfs: fix sysfs lockdep warning in ipmi code
sysfs: Initialised pci bus legacy_mem field before use
sysfs: use sysfs_bin_attr_init in firmware class driver
| -rw-r--r-- | Documentation/kobject.txt | 60 | ||||
| -rw-r--r-- | drivers/base/class.c | 2 | ||||
| -rw-r--r-- | drivers/base/core.c | 6 | ||||
| -rw-r--r-- | drivers/base/cpu.c | 16 | ||||
| -rw-r--r-- | drivers/base/firmware_class.c | 2 | ||||
| -rw-r--r-- | drivers/base/node.c | 7 | ||||
| -rw-r--r-- | drivers/base/platform.c | 33 | ||||
| -rw-r--r-- | drivers/char/ipmi/ipmi_msghandler.c | 10 | ||||
| -rw-r--r-- | drivers/infiniband/core/sysfs.c | 1 | ||||
| -rw-r--r-- | drivers/net/mlx4/main.c | 1 | ||||
| -rw-r--r-- | drivers/pci/pci-sysfs.c | 2 |
11 files changed, 102 insertions, 38 deletions
diff --git a/Documentation/kobject.txt b/Documentation/kobject.txt index bdb13817e1e9..3ab2472509cb 100644 --- a/Documentation/kobject.txt +++ b/Documentation/kobject.txt | |||
| @@ -59,37 +59,56 @@ nice to have in other objects. The C language does not allow for the | |||
| 59 | direct expression of inheritance, so other techniques - such as structure | 59 | direct expression of inheritance, so other techniques - such as structure |
| 60 | embedding - must be used. | 60 | embedding - must be used. |
| 61 | 61 | ||
| 62 | So, for example, the UIO code has a structure that defines the memory | 62 | (As an aside, for those familiar with the kernel linked list implementation, |
| 63 | region associated with a uio device: | 63 | this is analogous as to how "list_head" structs are rarely useful on |
| 64 | their own, but are invariably found embedded in the larger objects of | ||
| 65 | interest.) | ||
| 64 | 66 | ||
| 65 | struct uio_mem { | 67 | So, for example, the UIO code in drivers/uio/uio.c has a structure that |
| 68 | defines the memory region associated with a uio device: | ||
| 69 | |||
| 70 | struct uio_map { | ||
| 66 | struct kobject kobj; | 71 | struct kobject kobj; |
| 67 | unsigned long addr; | 72 | struct uio_mem *mem; |
| 68 | unsigned long size; | 73 | }; |
| 69 | int memtype; | ||
| 70 | void __iomem *internal_addr; | ||
| 71 | }; | ||
| 72 | 74 | ||
| 73 | If you have a struct uio_mem structure, finding its embedded kobject is | 75 | If you have a struct uio_map structure, finding its embedded kobject is |
| 74 | just a matter of using the kobj member. Code that works with kobjects will | 76 | just a matter of using the kobj member. Code that works with kobjects will |
| 75 | often have the opposite problem, however: given a struct kobject pointer, | 77 | often have the opposite problem, however: given a struct kobject pointer, |
| 76 | what is the pointer to the containing structure? You must avoid tricks | 78 | what is the pointer to the containing structure? You must avoid tricks |
| 77 | (such as assuming that the kobject is at the beginning of the structure) | 79 | (such as assuming that the kobject is at the beginning of the structure) |
| 78 | and, instead, use the container_of() macro, found in <linux/kernel.h>: | 80 | and, instead, use the container_of() macro, found in <linux/kernel.h>: |
| 79 | 81 | ||
| 80 | container_of(pointer, type, member) | 82 | container_of(pointer, type, member) |
| 83 | |||
| 84 | where: | ||
| 85 | |||
| 86 | * "pointer" is the pointer to the embedded kobject, | ||
| 87 | * "type" is the type of the containing structure, and | ||
| 88 | * "member" is the name of the structure field to which "pointer" points. | ||
| 89 | |||
| 90 | The return value from container_of() is a pointer to the corresponding | ||
| 91 | container type. So, for example, a pointer "kp" to a struct kobject | ||
| 92 | embedded *within* a struct uio_map could be converted to a pointer to the | ||
| 93 | *containing* uio_map structure with: | ||
| 94 | |||
| 95 | struct uio_map *u_map = container_of(kp, struct uio_map, kobj); | ||
| 96 | |||
| 97 | For convenience, programmers often define a simple macro for "back-casting" | ||
| 98 | kobject pointers to the containing type. Exactly this happens in the | ||
| 99 | earlier drivers/uio/uio.c, as you can see here: | ||
| 100 | |||
| 101 | struct uio_map { | ||
| 102 | struct kobject kobj; | ||
| 103 | struct uio_mem *mem; | ||
| 104 | }; | ||
| 81 | 105 | ||
| 82 | where pointer is the pointer to the embedded kobject, type is the type of | 106 | #define to_map(map) container_of(map, struct uio_map, kobj) |
| 83 | the containing structure, and member is the name of the structure field to | ||
| 84 | which pointer points. The return value from container_of() is a pointer to | ||
| 85 | the given type. So, for example, a pointer "kp" to a struct kobject | ||
| 86 | embedded within a struct uio_mem could be converted to a pointer to the | ||
| 87 | containing uio_mem structure with: | ||
| 88 | 107 | ||
| 89 | struct uio_mem *u_mem = container_of(kp, struct uio_mem, kobj); | 108 | where the macro argument "map" is a pointer to the struct kobject in |
| 109 | question. That macro is subsequently invoked with: | ||
| 90 | 110 | ||
| 91 | Programmers often define a simple macro for "back-casting" kobject pointers | 111 | struct uio_map *map = to_map(kobj); |
| 92 | to the containing type. | ||
| 93 | 112 | ||
| 94 | 113 | ||
| 95 | Initialization of kobjects | 114 | Initialization of kobjects |
| @@ -387,4 +406,5 @@ called, and the objects in the former circle release each other. | |||
| 387 | Example code to copy from | 406 | Example code to copy from |
| 388 | 407 | ||
| 389 | For a more complete example of using ksets and kobjects properly, see the | 408 | For a more complete example of using ksets and kobjects properly, see the |
| 390 | sample/kobject/kset-example.c code. | 409 | example programs samples/kobject/{kobject-example.c,kset-example.c}, |
| 410 | which will be built as loadable modules if you select CONFIG_SAMPLE_KOBJECT. | ||
diff --git a/drivers/base/class.c b/drivers/base/class.c index 0147f476b8a9..9c6a0d6408e7 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c | |||
| @@ -219,6 +219,8 @@ static void class_create_release(struct class *cls) | |||
| 219 | * This is used to create a struct class pointer that can then be used | 219 | * This is used to create a struct class pointer that can then be used |
| 220 | * in calls to device_create(). | 220 | * in calls to device_create(). |
| 221 | * | 221 | * |
| 222 | * Returns &struct class pointer on success, or ERR_PTR() on error. | ||
| 223 | * | ||
| 222 | * Note, the pointer created here is to be destroyed when finished by | 224 | * Note, the pointer created here is to be destroyed when finished by |
| 223 | * making a call to class_destroy(). | 225 | * making a call to class_destroy(). |
| 224 | */ | 226 | */ |
diff --git a/drivers/base/core.c b/drivers/base/core.c index ef55df34ddd0..b56a0ba31d4a 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
| @@ -1345,6 +1345,8 @@ static void root_device_release(struct device *dev) | |||
| 1345 | * 'module' symlink which points to the @owner directory | 1345 | * 'module' symlink which points to the @owner directory |
| 1346 | * in sysfs. | 1346 | * in sysfs. |
| 1347 | * | 1347 | * |
| 1348 | * Returns &struct device pointer on success, or ERR_PTR() on error. | ||
| 1349 | * | ||
| 1348 | * Note: You probably want to use root_device_register(). | 1350 | * Note: You probably want to use root_device_register(). |
| 1349 | */ | 1351 | */ |
| 1350 | struct device *__root_device_register(const char *name, struct module *owner) | 1352 | struct device *__root_device_register(const char *name, struct module *owner) |
| @@ -1432,6 +1434,8 @@ static void device_create_release(struct device *dev) | |||
| 1432 | * Any further sysfs files that might be required can be created using this | 1434 | * Any further sysfs files that might be required can be created using this |
| 1433 | * pointer. | 1435 | * pointer. |
| 1434 | * | 1436 | * |
| 1437 | * Returns &struct device pointer on success, or ERR_PTR() on error. | ||
| 1438 | * | ||
| 1435 | * Note: the struct class passed to this function must have previously | 1439 | * Note: the struct class passed to this function must have previously |
| 1436 | * been created with a call to class_create(). | 1440 | * been created with a call to class_create(). |
| 1437 | */ | 1441 | */ |
| @@ -1492,6 +1496,8 @@ EXPORT_SYMBOL_GPL(device_create_vargs); | |||
| 1492 | * Any further sysfs files that might be required can be created using this | 1496 | * Any further sysfs files that might be required can be created using this |
| 1493 | * pointer. | 1497 | * pointer. |
| 1494 | * | 1498 | * |
| 1499 | * Returns &struct device pointer on success, or ERR_PTR() on error. | ||
| 1500 | * | ||
| 1495 | * Note: the struct class passed to this function must have previously | 1501 | * Note: the struct class passed to this function must have previously |
| 1496 | * been created with a call to class_create(). | 1502 | * been created with a call to class_create(). |
| 1497 | */ | 1503 | */ |
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index 7036e8e96ab8..b5242e1e8bc4 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c | |||
| @@ -79,24 +79,24 @@ void unregister_cpu(struct cpu *cpu) | |||
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE | 81 | #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE |
| 82 | static ssize_t cpu_probe_store(struct sys_device *dev, | 82 | static ssize_t cpu_probe_store(struct sysdev_class *class, |
| 83 | struct sysdev_attribute *attr, | 83 | struct sysdev_class_attribute *attr, |
| 84 | const char *buf, | 84 | const char *buf, |
| 85 | size_t count) | 85 | size_t count) |
| 86 | { | 86 | { |
| 87 | return arch_cpu_probe(buf, count); | 87 | return arch_cpu_probe(buf, count); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | static ssize_t cpu_release_store(struct sys_device *dev, | 90 | static ssize_t cpu_release_store(struct sysdev_class *class, |
| 91 | struct sysdev_attribute *attr, | 91 | struct sysdev_class_attribute *attr, |
| 92 | const char *buf, | 92 | const char *buf, |
| 93 | size_t count) | 93 | size_t count) |
| 94 | { | 94 | { |
| 95 | return arch_cpu_release(buf, count); | 95 | return arch_cpu_release(buf, count); |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | static SYSDEV_ATTR(probe, S_IWUSR, NULL, cpu_probe_store); | 98 | static SYSDEV_CLASS_ATTR(probe, S_IWUSR, NULL, cpu_probe_store); |
| 99 | static SYSDEV_ATTR(release, S_IWUSR, NULL, cpu_release_store); | 99 | static SYSDEV_CLASS_ATTR(release, S_IWUSR, NULL, cpu_release_store); |
| 100 | #endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */ | 100 | #endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */ |
| 101 | 101 | ||
| 102 | #else /* ... !CONFIG_HOTPLUG_CPU */ | 102 | #else /* ... !CONFIG_HOTPLUG_CPU */ |
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index d0dc26ad5387..18518ba13c81 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c | |||
| @@ -78,6 +78,7 @@ firmware_timeout_show(struct class *class, | |||
| 78 | /** | 78 | /** |
| 79 | * firmware_timeout_store - set number of seconds to wait for firmware | 79 | * firmware_timeout_store - set number of seconds to wait for firmware |
| 80 | * @class: device class pointer | 80 | * @class: device class pointer |
| 81 | * @attr: device attribute pointer | ||
| 81 | * @buf: buffer to scan for timeout value | 82 | * @buf: buffer to scan for timeout value |
| 82 | * @count: number of bytes in @buf | 83 | * @count: number of bytes in @buf |
| 83 | * | 84 | * |
| @@ -442,6 +443,7 @@ static int fw_setup_device(struct firmware *fw, struct device **dev_p, | |||
| 442 | fw_priv = dev_get_drvdata(f_dev); | 443 | fw_priv = dev_get_drvdata(f_dev); |
| 443 | 444 | ||
| 444 | fw_priv->fw = fw; | 445 | fw_priv->fw = fw; |
| 446 | sysfs_bin_attr_init(&fw_priv->attr_data); | ||
| 445 | retval = sysfs_create_bin_file(&f_dev->kobj, &fw_priv->attr_data); | 447 | retval = sysfs_create_bin_file(&f_dev->kobj, &fw_priv->attr_data); |
| 446 | if (retval) { | 448 | if (retval) { |
| 447 | dev_err(device, "%s: sysfs_create_bin_file failed\n", __func__); | 449 | dev_err(device, "%s: sysfs_create_bin_file failed\n", __func__); |
diff --git a/drivers/base/node.c b/drivers/base/node.c index ad43185ec15a..93b3ac65c2d4 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
| @@ -165,8 +165,11 @@ static ssize_t node_read_distance(struct sys_device * dev, | |||
| 165 | int len = 0; | 165 | int len = 0; |
| 166 | int i; | 166 | int i; |
| 167 | 167 | ||
| 168 | /* buf currently PAGE_SIZE, need ~4 chars per node */ | 168 | /* |
| 169 | BUILD_BUG_ON(MAX_NUMNODES*4 > PAGE_SIZE/2); | 169 | * buf is currently PAGE_SIZE in length and each node needs 4 chars |
| 170 | * at the most (distance + space or newline). | ||
| 171 | */ | ||
| 172 | BUILD_BUG_ON(MAX_NUMNODES * 4 > PAGE_SIZE); | ||
| 170 | 173 | ||
| 171 | for_each_online_node(i) | 174 | for_each_online_node(i) |
| 172 | len += sprintf(buf + len, "%s%d", i ? " " : "", node_distance(nid, i)); | 175 | len += sprintf(buf + len, "%s%d", i ? " " : "", node_distance(nid, i)); |
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 1ba9d617d241..4b4b565c835f 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
| @@ -362,6 +362,8 @@ EXPORT_SYMBOL_GPL(platform_device_unregister); | |||
| 362 | * enumeration tasks, they don't fully conform to the Linux driver model. | 362 | * enumeration tasks, they don't fully conform to the Linux driver model. |
| 363 | * In particular, when such drivers are built as modules, they can't be | 363 | * In particular, when such drivers are built as modules, they can't be |
| 364 | * "hotplugged". | 364 | * "hotplugged". |
| 365 | * | ||
| 366 | * Returns &struct platform_device pointer on success, or ERR_PTR() on error. | ||
| 365 | */ | 367 | */ |
| 366 | struct platform_device *platform_device_register_simple(const char *name, | 368 | struct platform_device *platform_device_register_simple(const char *name, |
| 367 | int id, | 369 | int id, |
| @@ -408,6 +410,8 @@ EXPORT_SYMBOL_GPL(platform_device_register_simple); | |||
| 408 | * allocated for the device allows drivers using such devices to be | 410 | * allocated for the device allows drivers using such devices to be |
| 409 | * unloaded without waiting for the last reference to the device to be | 411 | * unloaded without waiting for the last reference to the device to be |
| 410 | * dropped. | 412 | * dropped. |
| 413 | * | ||
| 414 | * Returns &struct platform_device pointer on success, or ERR_PTR() on error. | ||
| 411 | */ | 415 | */ |
| 412 | struct platform_device *platform_device_register_data( | 416 | struct platform_device *platform_device_register_data( |
| 413 | struct device *parent, | 417 | struct device *parent, |
| @@ -559,6 +563,8 @@ EXPORT_SYMBOL_GPL(platform_driver_probe); | |||
| 559 | * | 563 | * |
| 560 | * Use this in legacy-style modules that probe hardware directly and | 564 | * Use this in legacy-style modules that probe hardware directly and |
| 561 | * register a single platform device and corresponding platform driver. | 565 | * register a single platform device and corresponding platform driver. |
| 566 | * | ||
| 567 | * Returns &struct platform_device pointer on success, or ERR_PTR() on error. | ||
| 562 | */ | 568 | */ |
| 563 | struct platform_device * __init_or_module platform_create_bundle( | 569 | struct platform_device * __init_or_module platform_create_bundle( |
| 564 | struct platform_driver *driver, | 570 | struct platform_driver *driver, |
| @@ -1052,9 +1058,11 @@ static __initdata LIST_HEAD(early_platform_driver_list); | |||
| 1052 | static __initdata LIST_HEAD(early_platform_device_list); | 1058 | static __initdata LIST_HEAD(early_platform_device_list); |
| 1053 | 1059 | ||
| 1054 | /** | 1060 | /** |
| 1055 | * early_platform_driver_register | 1061 | * early_platform_driver_register - register early platform driver |
| 1056 | * @epdrv: early_platform driver structure | 1062 | * @epdrv: early_platform driver structure |
| 1057 | * @buf: string passed from early_param() | 1063 | * @buf: string passed from early_param() |
| 1064 | * | ||
| 1065 | * Helper function for early_platform_init() / early_platform_init_buffer() | ||
| 1058 | */ | 1066 | */ |
| 1059 | int __init early_platform_driver_register(struct early_platform_driver *epdrv, | 1067 | int __init early_platform_driver_register(struct early_platform_driver *epdrv, |
| 1060 | char *buf) | 1068 | char *buf) |
| @@ -1106,9 +1114,12 @@ int __init early_platform_driver_register(struct early_platform_driver *epdrv, | |||
| 1106 | } | 1114 | } |
| 1107 | 1115 | ||
| 1108 | /** | 1116 | /** |
| 1109 | * early_platform_add_devices - add a numbers of early platform devices | 1117 | * early_platform_add_devices - adds a number of early platform devices |
| 1110 | * @devs: array of early platform devices to add | 1118 | * @devs: array of early platform devices to add |
| 1111 | * @num: number of early platform devices in array | 1119 | * @num: number of early platform devices in array |
| 1120 | * | ||
| 1121 | * Used by early architecture code to register early platform devices and | ||
| 1122 | * their platform data. | ||
| 1112 | */ | 1123 | */ |
| 1113 | void __init early_platform_add_devices(struct platform_device **devs, int num) | 1124 | void __init early_platform_add_devices(struct platform_device **devs, int num) |
| 1114 | { | 1125 | { |
| @@ -1128,8 +1139,12 @@ void __init early_platform_add_devices(struct platform_device **devs, int num) | |||
| 1128 | } | 1139 | } |
| 1129 | 1140 | ||
| 1130 | /** | 1141 | /** |
| 1131 | * early_platform_driver_register_all | 1142 | * early_platform_driver_register_all - register early platform drivers |
| 1132 | * @class_str: string to identify early platform driver class | 1143 | * @class_str: string to identify early platform driver class |
| 1144 | * | ||
| 1145 | * Used by architecture code to register all early platform drivers | ||
| 1146 | * for a certain class. If omitted then only early platform drivers | ||
| 1147 | * with matching kernel command line class parameters will be registered. | ||
| 1133 | */ | 1148 | */ |
| 1134 | void __init early_platform_driver_register_all(char *class_str) | 1149 | void __init early_platform_driver_register_all(char *class_str) |
| 1135 | { | 1150 | { |
| @@ -1151,7 +1166,7 @@ void __init early_platform_driver_register_all(char *class_str) | |||
| 1151 | } | 1166 | } |
| 1152 | 1167 | ||
| 1153 | /** | 1168 | /** |
| 1154 | * early_platform_match | 1169 | * early_platform_match - find early platform device matching driver |
| 1155 | * @epdrv: early platform driver structure | 1170 | * @epdrv: early platform driver structure |
| 1156 | * @id: id to match against | 1171 | * @id: id to match against |
| 1157 | */ | 1172 | */ |
| @@ -1169,7 +1184,7 @@ early_platform_match(struct early_platform_driver *epdrv, int id) | |||
| 1169 | } | 1184 | } |
| 1170 | 1185 | ||
| 1171 | /** | 1186 | /** |
| 1172 | * early_platform_left | 1187 | * early_platform_left - check if early platform driver has matching devices |
| 1173 | * @epdrv: early platform driver structure | 1188 | * @epdrv: early platform driver structure |
| 1174 | * @id: return true if id or above exists | 1189 | * @id: return true if id or above exists |
| 1175 | */ | 1190 | */ |
| @@ -1187,7 +1202,7 @@ static __init int early_platform_left(struct early_platform_driver *epdrv, | |||
| 1187 | } | 1202 | } |
| 1188 | 1203 | ||
| 1189 | /** | 1204 | /** |
| 1190 | * early_platform_driver_probe_id | 1205 | * early_platform_driver_probe_id - probe drivers matching class_str and id |
| 1191 | * @class_str: string to identify early platform driver class | 1206 | * @class_str: string to identify early platform driver class |
| 1192 | * @id: id to match against | 1207 | * @id: id to match against |
| 1193 | * @nr_probe: number of platform devices to successfully probe before exiting | 1208 | * @nr_probe: number of platform devices to successfully probe before exiting |
| @@ -1257,10 +1272,14 @@ static int __init early_platform_driver_probe_id(char *class_str, | |||
| 1257 | } | 1272 | } |
| 1258 | 1273 | ||
| 1259 | /** | 1274 | /** |
| 1260 | * early_platform_driver_probe | 1275 | * early_platform_driver_probe - probe a class of registered drivers |
| 1261 | * @class_str: string to identify early platform driver class | 1276 | * @class_str: string to identify early platform driver class |
| 1262 | * @nr_probe: number of platform devices to successfully probe before exiting | 1277 | * @nr_probe: number of platform devices to successfully probe before exiting |
| 1263 | * @user_only: only probe user specified early platform devices | 1278 | * @user_only: only probe user specified early platform devices |
| 1279 | * | ||
| 1280 | * Used by architecture code to probe registered early platform drivers | ||
| 1281 | * within a certain class. For probe to happen a registered early platform | ||
| 1282 | * device matching a registered early platform driver is needed. | ||
| 1264 | */ | 1283 | */ |
| 1265 | int __init early_platform_driver_probe(char *class_str, | 1284 | int __init early_platform_driver_probe(char *class_str, |
| 1266 | int nr_probe, | 1285 | int nr_probe, |
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index ec5e3f8df648..c6ad4234378d 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c | |||
| @@ -2272,42 +2272,52 @@ static int create_files(struct bmc_device *bmc) | |||
| 2272 | bmc->device_id_attr.attr.name = "device_id"; | 2272 | bmc->device_id_attr.attr.name = "device_id"; |
| 2273 | bmc->device_id_attr.attr.mode = S_IRUGO; | 2273 | bmc->device_id_attr.attr.mode = S_IRUGO; |
| 2274 | bmc->device_id_attr.show = device_id_show; | 2274 | bmc->device_id_attr.show = device_id_show; |
| 2275 | sysfs_attr_init(&bmc->device_id_attr.attr); | ||
| 2275 | 2276 | ||
| 2276 | bmc->provides_dev_sdrs_attr.attr.name = "provides_device_sdrs"; | 2277 | bmc->provides_dev_sdrs_attr.attr.name = "provides_device_sdrs"; |
| 2277 | bmc->provides_dev_sdrs_attr.attr.mode = S_IRUGO; | 2278 | bmc->provides_dev_sdrs_attr.attr.mode = S_IRUGO; |
| 2278 | bmc->provides_dev_sdrs_attr.show = provides_dev_sdrs_show; | 2279 | bmc->provides_dev_sdrs_attr.show = provides_dev_sdrs_show; |
| 2280 | sysfs_attr_init(&bmc->provides_dev_sdrs_attr.attr); | ||
| 2279 | 2281 | ||
| 2280 | bmc->revision_attr.attr.name = "revision"; | 2282 | bmc->revision_attr.attr.name = "revision"; |
| 2281 | bmc->revision_attr.attr.mode = S_IRUGO; | 2283 | bmc->revision_attr.attr.mode = S_IRUGO; |
| 2282 | bmc->revision_attr.show = revision_show; | 2284 | bmc->revision_attr.show = revision_show; |
| 2285 | sysfs_attr_init(&bmc->revision_attr.attr); | ||
| 2283 | 2286 | ||
| 2284 | bmc->firmware_rev_attr.attr.name = "firmware_revision"; | 2287 | bmc->firmware_rev_attr.attr.name = "firmware_revision"; |
| 2285 | bmc->firmware_rev_attr.attr.mode = S_IRUGO; | 2288 | bmc->firmware_rev_attr.attr.mode = S_IRUGO; |
| 2286 | bmc->firmware_rev_attr.show = firmware_rev_show; | 2289 | bmc->firmware_rev_attr.show = firmware_rev_show; |
| 2290 | sysfs_attr_init(&bmc->firmware_rev_attr.attr); | ||
| 2287 | 2291 | ||
| 2288 | bmc->version_attr.attr.name = "ipmi_version"; | 2292 | bmc->version_attr.attr.name = "ipmi_version"; |
| 2289 | bmc->version_attr.attr.mode = S_IRUGO; | 2293 | bmc->version_attr.attr.mode = S_IRUGO; |
| 2290 | bmc->version_attr.show = ipmi_version_show; | 2294 | bmc->version_attr.show = ipmi_version_show; |
| 2295 | sysfs_attr_init(&bmc->version_attr.attr); | ||
| 2291 | 2296 | ||
| 2292 | bmc->add_dev_support_attr.attr.name = "additional_device_support"; | 2297 | bmc->add_dev_support_attr.attr.name = "additional_device_support"; |
| 2293 | bmc->add_dev_support_attr.attr.mode = S_IRUGO; | 2298 | bmc->add_dev_support_attr.attr.mode = S_IRUGO; |
| 2294 | bmc->add_dev_support_attr.show = add_dev_support_show; | 2299 | bmc->add_dev_support_attr.show = add_dev_support_show; |
| 2300 | sysfs_attr_init(&bmc->add_dev_support_attr.attr); | ||
| 2295 | 2301 | ||
| 2296 | bmc->manufacturer_id_attr.attr.name = "manufacturer_id"; | 2302 | bmc->manufacturer_id_attr.attr.name = "manufacturer_id"; |
| 2297 | bmc->manufacturer_id_attr.attr.mode = S_IRUGO; | 2303 | bmc->manufacturer_id_attr.attr.mode = S_IRUGO; |
| 2298 | bmc->manufacturer_id_attr.show = manufacturer_id_show; | 2304 | bmc->manufacturer_id_attr.show = manufacturer_id_show; |
| 2305 | sysfs_attr_init(&bmc->manufacturer_id_attr.attr); | ||
| 2299 | 2306 | ||
| 2300 | bmc->product_id_attr.attr.name = "product_id"; | 2307 | bmc->product_id_attr.attr.name = "product_id"; |
| 2301 | bmc->product_id_attr.attr.mode = S_IRUGO; | 2308 | bmc->product_id_attr.attr.mode = S_IRUGO; |
| 2302 | bmc->product_id_attr.show = product_id_show; | 2309 | bmc->product_id_attr.show = product_id_show; |
| 2310 | sysfs_attr_init(&bmc->product_id_attr.attr); | ||
| 2303 | 2311 | ||
| 2304 | bmc->guid_attr.attr.name = "guid"; | 2312 | bmc->guid_attr.attr.name = "guid"; |
| 2305 | bmc->guid_attr.attr.mode = S_IRUGO; | 2313 | bmc->guid_attr.attr.mode = S_IRUGO; |
| 2306 | bmc->guid_attr.show = guid_show; | 2314 | bmc->guid_attr.show = guid_show; |
| 2315 | sysfs_attr_init(&bmc->guid_attr.attr); | ||
| 2307 | 2316 | ||
| 2308 | bmc->aux_firmware_rev_attr.attr.name = "aux_firmware_revision"; | 2317 | bmc->aux_firmware_rev_attr.attr.name = "aux_firmware_revision"; |
| 2309 | bmc->aux_firmware_rev_attr.attr.mode = S_IRUGO; | 2318 | bmc->aux_firmware_rev_attr.attr.mode = S_IRUGO; |
| 2310 | bmc->aux_firmware_rev_attr.show = aux_firmware_rev_show; | 2319 | bmc->aux_firmware_rev_attr.show = aux_firmware_rev_show; |
| 2320 | sysfs_attr_init(&bmc->aux_firmware_rev_attr.attr); | ||
| 2311 | 2321 | ||
| 2312 | err = device_create_file(&bmc->dev->dev, | 2322 | err = device_create_file(&bmc->dev->dev, |
| 2313 | &bmc->device_id_attr); | 2323 | &bmc->device_id_attr); |
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c index 1558bb7fc74d..f901957abc8b 100644 --- a/drivers/infiniband/core/sysfs.c +++ b/drivers/infiniband/core/sysfs.c | |||
| @@ -461,6 +461,7 @@ alloc_group_attrs(ssize_t (*show)(struct ib_port *, | |||
| 461 | element->attr.attr.mode = S_IRUGO; | 461 | element->attr.attr.mode = S_IRUGO; |
| 462 | element->attr.show = show; | 462 | element->attr.show = show; |
| 463 | element->index = i; | 463 | element->index = i; |
| 464 | sysfs_attr_init(&element->attr.attr); | ||
| 464 | 465 | ||
| 465 | tab_attr[i] = &element->attr.attr; | 466 | tab_attr[i] = &element->attr.attr; |
| 466 | } | 467 | } |
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c index 8f6e816a7395..b402a95c87c7 100644 --- a/drivers/net/mlx4/main.c +++ b/drivers/net/mlx4/main.c | |||
| @@ -1023,6 +1023,7 @@ static int mlx4_init_port_info(struct mlx4_dev *dev, int port) | |||
| 1023 | info->port_attr.attr.mode = S_IRUGO | S_IWUSR; | 1023 | info->port_attr.attr.mode = S_IRUGO | S_IWUSR; |
| 1024 | info->port_attr.show = show_port_type; | 1024 | info->port_attr.show = show_port_type; |
| 1025 | info->port_attr.store = set_port_type; | 1025 | info->port_attr.store = set_port_type; |
| 1026 | sysfs_attr_init(&info->port_attr.attr); | ||
| 1026 | 1027 | ||
| 1027 | err = device_create_file(&dev->pdev->dev, &info->port_attr); | 1028 | err = device_create_file(&dev->pdev->dev, &info->port_attr); |
| 1028 | if (err) { | 1029 | if (err) { |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index de296452c957..997668558e79 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
| @@ -655,8 +655,8 @@ void pci_create_legacy_files(struct pci_bus *b) | |||
| 655 | goto legacy_io_err; | 655 | goto legacy_io_err; |
| 656 | 656 | ||
| 657 | /* Allocated above after the legacy_io struct */ | 657 | /* Allocated above after the legacy_io struct */ |
| 658 | sysfs_bin_attr_init(b->legacy_mem); | ||
| 659 | b->legacy_mem = b->legacy_io + 1; | 658 | b->legacy_mem = b->legacy_io + 1; |
| 659 | sysfs_bin_attr_init(b->legacy_mem); | ||
| 660 | b->legacy_mem->attr.name = "legacy_mem"; | 660 | b->legacy_mem->attr.name = "legacy_mem"; |
| 661 | b->legacy_mem->size = 1024*1024; | 661 | b->legacy_mem->size = 1024*1024; |
| 662 | b->legacy_mem->attr.mode = S_IRUSR | S_IWUSR; | 662 | b->legacy_mem->attr.mode = S_IRUSR | S_IWUSR; |
