}
 
 /**
- * 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;
 
        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
 
                            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)
 {