diff options
| author | Danilo Krummrich <dakr@kernel.org> | 2026-02-14 01:07:13 +0300 |
|---|---|---|
| committer | Danilo Krummrich <dakr@kernel.org> | 2026-03-18 02:02:59 +0300 |
| commit | b1081ef74d804ae1c512151c2610b79513a52cd6 (patch) | |
| tree | 5b5638fbfcc868fba78f9b7ea58da1f713bdd1b1 | |
| parent | 9738ca7df98f37b647c6a2f5ac5dfe49db03c948 (diff) | |
| download | linux-b1081ef74d804ae1c512151c2610b79513a52cd6.tar.xz | |
devres: add devres_node_remove()
When the Rust Devres<T> container type is dropped we need a way to
remove the embedded struct devres_node from the device's node list.
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://patch.msgid.link/20260213220718.82835-4-dakr@kernel.org
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
| -rw-r--r-- | drivers/base/base.h | 1 | ||||
| -rw-r--r-- | drivers/base/devres.c | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/drivers/base/base.h b/drivers/base/base.h index 23828bd920db..c9812f0a56b0 100644 --- a/drivers/base/base.h +++ b/drivers/base/base.h @@ -231,6 +231,7 @@ struct devres_node { void devres_node_init(struct devres_node *node, dr_node_release_t release, dr_node_free_t free_node); void devres_node_add(struct device *dev, struct devres_node *node); +bool devres_node_remove(struct device *dev, struct devres_node *node); void devres_for_each_res(struct device *dev, dr_release_t release, dr_match_t match, void *match_data, void (*fn)(struct device *, void *, void *), diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 22d10b30774f..6c7854d4e4a8 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -365,6 +365,22 @@ void *devres_get(struct device *dev, void *new_res, } EXPORT_SYMBOL_GPL(devres_get); +bool devres_node_remove(struct device *dev, struct devres_node *node) +{ + struct devres_node *__node; + + guard(spinlock_irqsave)(&dev->devres_lock); + list_for_each_entry_reverse(__node, &dev->devres_head, entry) { + if (__node == node) { + list_del_init(&node->entry); + devres_log(dev, node, "REM"); + return true; + } + } + + return false; +} + /** * devres_remove - Find a device resource and remove it * @dev: Device to find resource from |
