[Intel-xe] [PATCH v4 19/22] drm/managed: Add drmm_release_action
Michal Wajdeczko
michal.wajdeczko at intel.com
Wed Nov 29 09:43:24 UTC 2023
On 29.11.2023 02:16, Michał Winiarski wrote:
> Similar to devres equivalent, it allows to call the "release" action
> directly and remove the resource from the managed resources list.
>
> Signed-off-by: Michał Winiarski <michal.winiarski at intel.com>
> ---
> drivers/gpu/drm/drm_managed.c | 28 ++++++++++++++++++++++++++++
> include/drm/drm_managed.h | 4 ++++
> 2 files changed, 32 insertions(+)
shouldn't this go to the dri-devel first ?
>
> diff --git a/drivers/gpu/drm/drm_managed.c b/drivers/gpu/drm/drm_managed.c
> index bcd111404b128..f819940b8a959 100644
> --- a/drivers/gpu/drm/drm_managed.c
> +++ b/drivers/gpu/drm/drm_managed.c
> @@ -176,6 +176,34 @@ int __drmm_add_action_or_reset(struct drm_device *dev,
> }
> EXPORT_SYMBOL(__drmm_add_action_or_reset);
>
> +void drmm_release_action(struct drm_device *dev,
> + drmres_release_t action,
> + void *data)
> +{
> + struct drmres *dr_match = NULL, *dr;
> + unsigned long flags;
> +
> + spin_lock_irqsave(&dev->managed.lock, flags);
> + list_for_each_entry_reverse(dr, &dev->managed.resources, node.entry) {
> + if (dr->node.release == action) {
> + if (!data || (data && *(void **)dr->data == data)) {
> + dr_match = dr;
> + del_dr(dev, dr_match);
> + break;
> + }
> + }
> + }
> + spin_unlock_irqrestore(&dev->managed.lock, flags);
> +
> + if (WARN_ON(!dr_match))
> + return;
> +
> + action(dev, data);
> +
> + free_dr(dr_match);
> +}
> +EXPORT_SYMBOL(drmm_release_action);
> +
> /**
> * drmm_kmalloc - &drm_device managed kmalloc()
> * @dev: DRM device
> diff --git a/include/drm/drm_managed.h b/include/drm/drm_managed.h
> index ad08f834af408..f547b09ca0239 100644
> --- a/include/drm/drm_managed.h
> +++ b/include/drm/drm_managed.h
> @@ -45,6 +45,10 @@ int __must_check __drmm_add_action_or_reset(struct drm_device *dev,
> drmres_release_t action,
> void *data, const char *name);
>
> +void drmm_release_action(struct drm_device *dev,
> + drmres_release_t action,
> + void *data);
> +
> void *drmm_kmalloc(struct drm_device *dev, size_t size, gfp_t gfp) __malloc;
>
> /**
More information about the Intel-xe
mailing list