|
@@ -36,6 +36,16 @@ struct attribute {
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * sysfs_attr_init - initialize a dynamically allocated sysfs attribute
|
|
|
+ * @attr: struct attribute to initialize
|
|
|
+ *
|
|
|
+ * Initialize a dynamically allocated struct attribute so we can
|
|
|
+ * make lockdep happy. This is a new requirement for attributes
|
|
|
+ * and initially this is only needed when lockdep is enabled.
|
|
|
+ * Lockdep gives a nice error when your attribute is added to
|
|
|
+ * sysfs if you don't have this.
|
|
|
+ */
|
|
|
#ifdef CONFIG_DEBUG_LOCK_ALLOC
|
|
|
#define sysfs_attr_init(attr) \
|
|
|
do { \
|
|
@@ -90,6 +100,16 @@ struct bin_attribute {
|
|
|
struct vm_area_struct *vma);
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute
|
|
|
+ * @attr: struct bin_attribute to initialize
|
|
|
+ *
|
|
|
+ * Initialize a dynamically allocated struct bin_attribute so we
|
|
|
+ * can make lockdep happy. This is a new requirement for
|
|
|
+ * attributes and initially this is only needed when lockdep is
|
|
|
+ * enabled. Lockdep gives a nice error when your attribute is
|
|
|
+ * added to sysfs if you don't have this.
|
|
|
+ */
|
|
|
#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&bin_attr->attr)
|
|
|
|
|
|
struct sysfs_ops {
|