mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
synced 2025-09-29 20:28:12 +10:00
software node: Simplify software_node_release() function
It's possible to release the node ID immediately when fwnode_remove_software_node() is called, no need to wait for software_node_release() with that. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Tested-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
a79969868a
commit
3df85a1ae5
@ -557,13 +557,6 @@ static void software_node_release(struct kobject *kobj)
|
|||||||
{
|
{
|
||||||
struct software_node *swnode = kobj_to_swnode(kobj);
|
struct software_node *swnode = kobj_to_swnode(kobj);
|
||||||
|
|
||||||
if (swnode->parent) {
|
|
||||||
ida_simple_remove(&swnode->parent->child_ids, swnode->id);
|
|
||||||
list_del(&swnode->entry);
|
|
||||||
} else {
|
|
||||||
ida_simple_remove(&swnode_root_ids, swnode->id);
|
|
||||||
}
|
|
||||||
|
|
||||||
ida_destroy(&swnode->child_ids);
|
ida_destroy(&swnode->child_ids);
|
||||||
property_entries_free(swnode->properties);
|
property_entries_free(swnode->properties);
|
||||||
kfree(swnode);
|
kfree(swnode);
|
||||||
@ -610,9 +603,6 @@ fwnode_create_software_node(const struct property_entry *properties,
|
|||||||
INIT_LIST_HEAD(&swnode->children);
|
INIT_LIST_HEAD(&swnode->children);
|
||||||
swnode->parent = p;
|
swnode->parent = p;
|
||||||
|
|
||||||
if (p)
|
|
||||||
list_add_tail(&swnode->entry, &p->children);
|
|
||||||
|
|
||||||
ret = kobject_init_and_add(&swnode->kobj, &software_node_type,
|
ret = kobject_init_and_add(&swnode->kobj, &software_node_type,
|
||||||
p ? &p->kobj : NULL, "node%d", swnode->id);
|
p ? &p->kobj : NULL, "node%d", swnode->id);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@ -626,6 +616,9 @@ fwnode_create_software_node(const struct property_entry *properties,
|
|||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p)
|
||||||
|
list_add_tail(&swnode->entry, &p->children);
|
||||||
|
|
||||||
kobject_uevent(&swnode->kobj, KOBJ_ADD);
|
kobject_uevent(&swnode->kobj, KOBJ_ADD);
|
||||||
return &swnode->fwnode;
|
return &swnode->fwnode;
|
||||||
}
|
}
|
||||||
@ -638,6 +631,13 @@ void fwnode_remove_software_node(struct fwnode_handle *fwnode)
|
|||||||
if (!swnode)
|
if (!swnode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (swnode->parent) {
|
||||||
|
ida_simple_remove(&swnode->parent->child_ids, swnode->id);
|
||||||
|
list_del(&swnode->entry);
|
||||||
|
} else {
|
||||||
|
ida_simple_remove(&swnode_root_ids, swnode->id);
|
||||||
|
}
|
||||||
|
|
||||||
kobject_put(&swnode->kobj);
|
kobject_put(&swnode->kobj);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(fwnode_remove_software_node);
|
EXPORT_SYMBOL_GPL(fwnode_remove_software_node);
|
||||||
|
Loading…
Reference in New Issue
Block a user