[Intel-xe] [PATCH v4 19/22] drm/managed: Add drmm_release_action

Rodrigo Vivi rodrigo.vivi at intel.com
Wed Nov 29 17:52:55 UTC 2023


On Wed, Nov 29, 2023 at 10:43:24AM +0100, Michal Wajdeczko wrote:
> 
> 
> 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 ?

yes, please. Let's send there and try to get that quickly through drm-misc,
or the proper reviews and acks there before getting to drm-xe-next or this
might block our initial pull request.

> 
> > 
> > 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