devres: Pass unique name of the resource to devm_add_action()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 24 Feb 2023 20:07:45 +0000 (22:07 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:06:22 +0000 (09:06 +0100)
Pass the unique name of the resource to devm_add_action(),
so it will be easier to debug managed resources.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20230224200745.17324-1-andriy.shevchenko@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/devres.c
include/linux/device.h

index c0e100074aa395425cc6191020174518bf9e4578..5c998cfac335dd405f39b8f17209738044087fa1 100644 (file)
@@ -722,20 +722,21 @@ static void devm_action_release(struct device *dev, void *res)
 }
 
 /**
- * devm_add_action() - add a custom action to list of managed resources
+ * __devm_add_action() - add a custom action to list of managed resources
  * @dev: Device that owns the action
  * @action: Function that should be called
  * @data: Pointer to data passed to @action implementation
+ * @name: Name of the resource (for debugging purposes)
  *
  * This adds a custom action to the list of managed resources so that
  * it gets executed as part of standard resource unwinding.
  */
-int devm_add_action(struct device *dev, void (*action)(void *), void *data)
+int __devm_add_action(struct device *dev, void (*action)(void *), void *data, const char *name)
 {
        struct action_devres *devres;
 
-       devres = devres_alloc(devm_action_release,
-                             sizeof(struct action_devres), GFP_KERNEL);
+       devres = __devres_alloc_node(devm_action_release, sizeof(struct action_devres),
+                                    GFP_KERNEL, NUMA_NO_NODE, name);
        if (!devres)
                return -ENOMEM;
 
@@ -745,7 +746,7 @@ int devm_add_action(struct device *dev, void (*action)(void *), void *data)
        devres_add(dev, devres);
        return 0;
 }
-EXPORT_SYMBOL_GPL(devm_add_action);
+EXPORT_SYMBOL_GPL(__devm_add_action);
 
 /**
  * devm_remove_action() - removes previously added custom action
index 19b6ba478fbf22e57e2d5b633e7c3eb84b1244e3..0f128520f6e511d55dad4c3b543a2f77ee96f708 100644 (file)
@@ -243,10 +243,13 @@ void __iomem *devm_of_iomap(struct device *dev,
                            resource_size_t *size);
 
 /* allows to add/remove a custom action to devres stack */
-int devm_add_action(struct device *dev, void (*action)(void *), void *data);
 void devm_remove_action(struct device *dev, void (*action)(void *), void *data);
 void devm_release_action(struct device *dev, void (*action)(void *), void *data);
 
+int __devm_add_action(struct device *dev, void (*action)(void *), void *data, const char *name);
+#define devm_add_action(release, action, data) \
+       __devm_add_action(release, action, data, #action)
+
 static inline int devm_add_action_or_reset(struct device *dev,
                                           void (*action)(void *), void *data)
 {