diff options
Diffstat (limited to 'drivers/base/devres.c')
| -rw-r--r-- | drivers/base/devres.c | 24 | 
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/base/devres.c b/drivers/base/devres.c index e038e2b3b7ea..0bbb328bd17f 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -755,10 +755,32 @@ void devm_remove_action(struct device *dev, void (*action)(void *), void *data)  	WARN_ON(devres_destroy(dev, devm_action_release, devm_action_match,  			       &devres)); -  }  EXPORT_SYMBOL_GPL(devm_remove_action); +/** + * devm_release_action() - release previously added custom action + * @dev: Device that owns the action + * @action: Function implementing the action + * @data: Pointer to data passed to @action implementation + * + * Releases and removes instance of @action previously added by + * devm_add_action().  Both action and data should match one of the + * existing entries. + */ +void devm_release_action(struct device *dev, void (*action)(void *), void *data) +{ +	struct action_devres devres = { +		.data = data, +		.action = action, +	}; + +	WARN_ON(devres_release(dev, devm_action_release, devm_action_match, +			       &devres)); + +} +EXPORT_SYMBOL_GPL(devm_release_action); +  /*   * Managed kmalloc/kfree   */  |