Commit 3eaa3bfa authored by Qi Zheng's avatar Qi Zheng Committed by Jonathan Corbet
Browse files

kobject: documentation: Fix erroneous function example in kobject doc.



Update the definitions of some functions listed in the kobject
document, since they have been changed.

Signed-off-by: default avatarQi Zheng <arch0.zheng@gmail.com>
Link: https://lore.kernel.org/r/20200505061828.42952-1-arch0.zheng@gmail.com


Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
parent 919e2bb8
Loading
Loading
Loading
Loading
+14 −12
Original line number Original line Diff line number Diff line
@@ -80,11 +80,11 @@ what is the pointer to the containing structure? You must avoid tricks
(such as assuming that the kobject is at the beginning of the structure)
(such as assuming that the kobject is at the beginning of the structure)
and, instead, use the container_of() macro, found in ``<linux/kernel.h>``::
and, instead, use the container_of() macro, found in ``<linux/kernel.h>``::


    container_of(pointer, type, member)
    container_of(ptr, type, member)


where:
where:


  * ``pointer`` is the pointer to the embedded kobject,
  * ``ptr`` is the pointer to the embedded kobject,
  * ``type`` is the type of the containing structure, and
  * ``type`` is the type of the containing structure, and
  * ``member`` is the name of the structure field to which ``pointer`` points.
  * ``member`` is the name of the structure field to which ``pointer`` points.


@@ -140,7 +140,7 @@ the name of the kobject, call kobject_rename()::


    int kobject_rename(struct kobject *kobj, const char *new_name);
    int kobject_rename(struct kobject *kobj, const char *new_name);


kobject_rename does not perform any locking or have a solid notion of
kobject_rename() does not perform any locking or have a solid notion of
what names are valid so the caller must provide their own sanity checking
what names are valid so the caller must provide their own sanity checking
and serialization.
and serialization.


@@ -222,17 +222,17 @@ ksets, show and store functions, and other details. This is the one
exception where a single kobject should be created.  To create such an
exception where a single kobject should be created.  To create such an
entry, use the function::
entry, use the function::


    struct kobject *kobject_create_and_add(char *name, struct kobject *parent);
    struct kobject *kobject_create_and_add(const char *name, struct kobject *parent);


This function will create a kobject and place it in sysfs in the location
This function will create a kobject and place it in sysfs in the location
underneath the specified parent kobject.  To create simple attributes
underneath the specified parent kobject.  To create simple attributes
associated with this kobject, use::
associated with this kobject, use::


    int sysfs_create_file(struct kobject *kobj, struct attribute *attr);
    int sysfs_create_file(struct kobject *kobj, const struct attribute *attr);


or::
or::


    int sysfs_create_group(struct kobject *kobj, struct attribute_group *grp);
    int sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp);


Both types of attributes used here, with a kobject that has been created
Both types of attributes used here, with a kobject that has been created
with the kobject_create_and_add(), can be of type kobj_attribute, so no
with the kobject_create_and_add(), can be of type kobj_attribute, so no
@@ -300,8 +300,10 @@ kobj_type::
            void (*release)(struct kobject *kobj);
            void (*release)(struct kobject *kobj);
            const struct sysfs_ops *sysfs_ops;
            const struct sysfs_ops *sysfs_ops;
            struct attribute **default_attrs;
            struct attribute **default_attrs;
            const struct attribute_group **default_groups;
            const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
            const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
            const void *(*namespace)(struct kobject *kobj);
            const void *(*namespace)(struct kobject *kobj);
            void (*get_ownership)(struct kobject *kobj, kuid_t *uid, kgid_t *gid);
    };
    };


This structure is used to describe a particular type of kobject (or, more
This structure is used to describe a particular type of kobject (or, more
@@ -352,12 +354,12 @@ created and never declared statically or on the stack. To create a new
kset use::
kset use::


  struct kset *kset_create_and_add(const char *name,
  struct kset *kset_create_and_add(const char *name,
                                   struct kset_uevent_ops *u,
                                   const struct kset_uevent_ops *uevent_ops,
                                   struct kobject *parent);
                                   struct kobject *parent_kobj);


When you are finished with the kset, call::
When you are finished with the kset, call::


  void kset_unregister(struct kset *kset);
  void kset_unregister(struct kset *k);


to destroy it.  This removes the kset from sysfs and decrements its reference
to destroy it.  This removes the kset from sysfs and decrements its reference
count.  When the reference count goes to zero, the kset will be released.
count.  When the reference count goes to zero, the kset will be released.
@@ -371,9 +373,9 @@ If a kset wishes to control the uevent operations of the kobjects
associated with it, it can use the struct kset_uevent_ops to handle it::
associated with it, it can use the struct kset_uevent_ops to handle it::


  struct kset_uevent_ops {
  struct kset_uevent_ops {
          int (*filter)(struct kset *kset, struct kobject *kobj);
          int (* const filter)(struct kset *kset, struct kobject *kobj);
          const char *(*name)(struct kset *kset, struct kobject *kobj);
          const char *(* const name)(struct kset *kset, struct kobject *kobj);
          int (*uevent)(struct kset *kset, struct kobject *kobj,
          int (* const uevent)(struct kset *kset, struct kobject *kobj,
                        struct kobj_uevent_env *env);
                        struct kobj_uevent_env *env);
  };
  };