From: Danilo Krummrich Date: Fri, 13 Feb 2026 22:07:13 +0000 (+0100) Subject: devres: add devres_node_remove() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1081ef74d804ae1c512151c2610b79513a52cd6;p=thirdparty%2Fkernel%2Flinux.git devres: add devres_node_remove() When the Rust Devres 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 Link: https://patch.msgid.link/20260213220718.82835-4-dakr@kernel.org Signed-off-by: Danilo Krummrich --- diff --git a/drivers/base/base.h b/drivers/base/base.h index 23828bd920db7..c9812f0a56b06 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 22d10b30774f1..6c7854d4e4a8a 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