]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
devres: add devres_node_add()
authorDanilo Krummrich <dakr@kernel.org>
Mon, 2 Feb 2026 23:48:15 +0000 (00:48 +0100)
committerDanilo Krummrich <dakr@kernel.org>
Tue, 17 Mar 2026 20:23:02 +0000 (21:23 +0100)
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 <gregkh@linuxfoundation.org>
Link: https://patch.msgid.link/20260202235210.55176-3-dakr@kernel.org
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
drivers/base/devres.c

index ce519b98a18984dbf93c6d3f9feb8e9c855c6936..fd3e9dba8ff2cc71c1aac5cef905300ffa41d51e 100644 (file)
@@ -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);