]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
software node: provide wrappers around kobject_get/put()
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Mon, 27 Apr 2026 13:18:25 +0000 (15:18 +0200)
committerDanilo Krummrich <dakr@kernel.org>
Sat, 9 May 2026 18:22:40 +0000 (20:22 +0200)
Make the code more readable by avoid constant dereferencing of the
swnode's kobject when managing references. Provide wrappers that take
struct swnode * as argument and make them hide that logic.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
Link: https://patch.msgid.link/20260427131825.15793-1-bartosz.golaszewski@oss.qualcomm.com
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
drivers/base/swnode.c

index a19f8f722bc8e1115c497c4549de1009f8003ce7..869228a65cb365567ddac7db6ad7b8743e0dbca9 100644 (file)
@@ -374,20 +374,28 @@ EXPORT_SYMBOL_GPL(property_entries_free);
 /* -------------------------------------------------------------------------- */
 /* fwnode operations */
 
-static struct fwnode_handle *software_node_get(struct fwnode_handle *fwnode)
+static struct swnode *swnode_get(struct swnode *swnode)
 {
-       struct swnode *swnode = to_swnode(fwnode);
-
        kobject_get(&swnode->kobj);
 
+       return swnode;
+}
+
+static void swnode_put(struct swnode *swnode)
+{
+       kobject_put(&swnode->kobj);
+}
+
+static struct fwnode_handle *software_node_get(struct fwnode_handle *fwnode)
+{
+       struct swnode *swnode = swnode_get(to_swnode(fwnode));
+
        return &swnode->fwnode;
 }
 
 static void software_node_put(struct fwnode_handle *fwnode)
 {
-       struct swnode *swnode = to_swnode(fwnode);
-
-       kobject_put(&swnode->kobj);
+       swnode_put(to_swnode(fwnode));
 }
 
 static bool software_node_property_present(const struct fwnode_handle *fwnode,
@@ -493,7 +501,7 @@ software_node_get_named_child_node(const struct fwnode_handle *fwnode,
 
        list_for_each_entry(child, &swnode->children, entry) {
                if (!strcmp(childname, kobject_name(&child->kobj))) {
-                       kobject_get(&child->kobj);
+                       swnode_get(child);
                        return &child->fwnode;
                }
        }
@@ -737,7 +745,7 @@ software_node_find_by_name(const struct software_node *parent, const char *name)
                swnode = kobj_to_swnode(k);
                if (parent == swnode->node->parent && swnode->node->name &&
                    !strcmp(name, swnode->node->name)) {
-                       kobject_get(&swnode->kobj);
+                       swnode_get(swnode);
                        break;
                }
                swnode = NULL;
@@ -835,13 +843,13 @@ swnode_register(const struct software_node *node, struct swnode *parent,
                                           parent ? &parent->kobj : NULL,
                                           "node%d", swnode->id);
        if (ret) {
-               kobject_put(&swnode->kobj);
+               swnode_put(swnode);
                return ERR_PTR(ret);
        }
 
        /*
         * Assign the flag only in the successful case, so
-        * the above kobject_put() won't mess up with properties.
+        * the above swnode_put() won't mess up with properties.
         */
        swnode->allocated = allocated;
 
@@ -978,7 +986,7 @@ void fwnode_remove_software_node(struct fwnode_handle *fwnode)
        if (!swnode)
                return;
 
-       kobject_put(&swnode->kobj);
+       swnode_put(swnode);
 }
 EXPORT_SYMBOL_GPL(fwnode_remove_software_node);
 
@@ -1002,7 +1010,7 @@ int device_add_software_node(struct device *dev, const struct software_node *nod
 
        swnode = software_node_to_swnode(node);
        if (swnode) {
-               kobject_get(&swnode->kobj);
+               swnode_get(swnode);
        } else {
                ret = software_node_register(node);
                if (ret)
@@ -1044,7 +1052,7 @@ void device_remove_software_node(struct device *dev)
                software_node_notify_remove(dev);
 
        set_secondary_fwnode(dev, NULL);
-       kobject_put(&swnode->kobj);
+       swnode_put(swnode);
 }
 EXPORT_SYMBOL_GPL(device_remove_software_node);
 
@@ -1097,7 +1105,7 @@ void software_node_notify(struct device *dev)
        if (!swnode)
                return;
 
-       kobject_get(&swnode->kobj);
+       swnode_get(swnode);
        ret = sysfs_create_link(&dev->kobj, &swnode->kobj, "software_node");
        if (ret)
                return;
@@ -1119,11 +1127,11 @@ void software_node_notify_remove(struct device *dev)
 
        sysfs_remove_link(&swnode->kobj, dev_name(dev));
        sysfs_remove_link(&dev->kobj, "software_node");
-       kobject_put(&swnode->kobj);
+       swnode_put(swnode);
 
        if (swnode->managed) {
                set_secondary_fwnode(dev, NULL);
-               kobject_put(&swnode->kobj);
+               swnode_put(swnode);
        }
 }