From: Danilo Krummrich Date: Mon, 2 Feb 2026 23:48:15 +0000 (+0100) Subject: devres: add devres_node_add() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4796dfd7e0e845de5e76b1748d3c022d350f1b57;p=thirdparty%2Fkernel%2Flinux.git devres: add devres_node_add() Both devres_add() and devres_open_group() acquire the devres_lock and call add_dr(). Add a helper, devres_node_add(), for this pattern. Use guard(spinlock_irqsave) to avoid the explicit unlock call and local flag variables. Reviewed-by: Greg Kroah-Hartman Link: https://patch.msgid.link/20260202235210.55176-3-dakr@kernel.org Signed-off-by: Danilo Krummrich --- diff --git a/drivers/base/devres.c b/drivers/base/devres.c index ce519b98a1898..fd3e9dba8ff2c 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -231,6 +231,13 @@ void devres_free(void *res) } EXPORT_SYMBOL_GPL(devres_free); +static void devres_node_add(struct device *dev, struct devres_node *node) +{ + guard(spinlock_irqsave)(&dev->devres_lock); + + add_dr(dev, node); +} + /** * devres_add - Register device resource * @dev: Device to add resource to @@ -243,11 +250,8 @@ EXPORT_SYMBOL_GPL(devres_free); void devres_add(struct device *dev, void *res) { struct devres *dr = container_of(res, struct devres, data); - unsigned long flags; - spin_lock_irqsave(&dev->devres_lock, flags); - add_dr(dev, &dr->node); - spin_unlock_irqrestore(&dev->devres_lock, flags); + devres_node_add(dev, &dr->node); } EXPORT_SYMBOL_GPL(devres_add); @@ -552,7 +556,6 @@ int devres_release_all(struct device *dev) void *devres_open_group(struct device *dev, void *id, gfp_t gfp) { struct devres_group *grp; - unsigned long flags; grp = kmalloc_obj(*grp, gfp); if (unlikely(!grp)) @@ -569,9 +572,7 @@ void *devres_open_group(struct device *dev, void *id, gfp_t gfp) grp->id = id; grp->color = 0; - spin_lock_irqsave(&dev->devres_lock, flags); - add_dr(dev, &grp->node[0]); - spin_unlock_irqrestore(&dev->devres_lock, flags); + devres_node_add(dev, &grp->node[0]); return grp->id; } EXPORT_SYMBOL_GPL(devres_open_group);