mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 14:20:55 +07:00
sysfs: Add attribute array to sysdev classes
Add a attribute array that is automatically registered and unregistered to struct sysdev_class. This is similar to what struct class has. A lot of drivers add list of attributes, so it's better to do this easily in the common sysdev layer. This adds a new field to struct sysdev_class. I audited the whole tree and there are no dynamically allocated sysdev classes, so this is fully compatible. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
1c205ae18d
commit
38457ab3a0
@ -145,13 +145,20 @@ int sysdev_class_register(struct sysdev_class *cls)
|
|||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
return kset_register(&cls->kset);
|
retval = kset_register(&cls->kset);
|
||||||
|
if (!retval && cls->attrs)
|
||||||
|
retval = sysfs_create_files(&cls->kset.kobj,
|
||||||
|
(const struct attribute **)cls->attrs);
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sysdev_class_unregister(struct sysdev_class *cls)
|
void sysdev_class_unregister(struct sysdev_class *cls)
|
||||||
{
|
{
|
||||||
pr_debug("Unregistering sysdev class '%s'\n",
|
pr_debug("Unregistering sysdev class '%s'\n",
|
||||||
kobject_name(&cls->kset.kobj));
|
kobject_name(&cls->kset.kobj));
|
||||||
|
if (cls->attrs)
|
||||||
|
sysfs_remove_files(&cls->kset.kobj,
|
||||||
|
(const struct attribute **)cls->attrs);
|
||||||
kset_unregister(&cls->kset);
|
kset_unregister(&cls->kset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,10 +27,12 @@
|
|||||||
|
|
||||||
|
|
||||||
struct sys_device;
|
struct sys_device;
|
||||||
|
struct sysdev_class_attribute;
|
||||||
|
|
||||||
struct sysdev_class {
|
struct sysdev_class {
|
||||||
const char *name;
|
const char *name;
|
||||||
struct list_head drivers;
|
struct list_head drivers;
|
||||||
|
struct sysdev_class_attribute **attrs;
|
||||||
|
|
||||||
/* Default operations for these types of devices */
|
/* Default operations for these types of devices */
|
||||||
int (*shutdown)(struct sys_device *);
|
int (*shutdown)(struct sys_device *);
|
||||||
|
Loading…
Reference in New Issue
Block a user