lkml.org 
[lkml]   [2010]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [5/12] SYSFS: Add attribute array to sysdev classes
    Date

    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>

    ---
    drivers/base/sys.c | 9 ++++++++-
    include/linux/sysdev.h | 2 ++
    2 files changed, 10 insertions(+), 1 deletion(-)

    Index: linux-2.6.33-rc2-ak/drivers/base/sys.c
    ===================================================================
    --- linux-2.6.33-rc2-ak.orig/drivers/base/sys.c
    +++ linux-2.6.33-rc2-ak/drivers/base/sys.c
    @@ -145,13 +145,20 @@ int sysdev_class_register(struct sysdev_
    if (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)
    {
    pr_debug("Unregistering sysdev class '%s'\n",
    kobject_name(&cls->kset.kobj));
    + if (cls->attrs)
    + sysfs_remove_files(&cls->kset.kobj,
    + (const struct attribute **)cls->attrs);
    kset_unregister(&cls->kset);
    }

    Index: linux-2.6.33-rc2-ak/include/linux/sysdev.h
    ===================================================================
    --- linux-2.6.33-rc2-ak.orig/include/linux/sysdev.h
    +++ linux-2.6.33-rc2-ak/include/linux/sysdev.h
    @@ -27,10 +27,12 @@


    struct sys_device;
    +struct sysdev_class_attribute;

    struct sysdev_class {
    const char *name;
    struct list_head drivers;
    + struct sysdev_class_attribute **attrs;

    /* Default operations for these types of devices */
    int (*shutdown)(struct sys_device *);

    \
     
     \ /
      Last update: 2010-01-05 12:53    [W:0.027 / U:0.960 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site