mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
software node: provide wrappers around kobject_get/put()
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>
This commit is contained in:
committed by
Danilo Krummrich
parent
f71cc65c01
commit
c393ef0741
@@ -374,20 +374,28 @@ EXPORT_SYMBOL_GPL(property_entries_free);
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* fwnode operations */
|
||||
|
||||
static struct swnode *swnode_get(struct swnode *swnode)
|
||||
{
|
||||
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 = to_swnode(fwnode);
|
||||
|
||||
kobject_get(&swnode->kobj);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user