Skip to content

Commit b1081ef

Browse files
author
Danilo Krummrich
committed
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>
1 parent 9738ca7 commit b1081ef

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

drivers/base/base.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ struct devres_node {
231231
void devres_node_init(struct devres_node *node, dr_node_release_t release,
232232
dr_node_free_t free_node);
233233
void devres_node_add(struct device *dev, struct devres_node *node);
234+
bool devres_node_remove(struct device *dev, struct devres_node *node);
234235
void devres_for_each_res(struct device *dev, dr_release_t release,
235236
dr_match_t match, void *match_data,
236237
void (*fn)(struct device *, void *, void *),

drivers/base/devres.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,22 @@ void *devres_get(struct device *dev, void *new_res,
365365
}
366366
EXPORT_SYMBOL_GPL(devres_get);
367367

368+
bool devres_node_remove(struct device *dev, struct devres_node *node)
369+
{
370+
struct devres_node *__node;
371+
372+
guard(spinlock_irqsave)(&dev->devres_lock);
373+
list_for_each_entry_reverse(__node, &dev->devres_head, entry) {
374+
if (__node == node) {
375+
list_del_init(&node->entry);
376+
devres_log(dev, node, "REM");
377+
return true;
378+
}
379+
}
380+
381+
return false;
382+
}
383+
368384
/**
369385
* devres_remove - Find a device resource and remove it
370386
* @dev: Device to find resource from

0 commit comments

Comments
 (0)