Thomas Zimmermann
2023-Feb-17 12:23 UTC
[PATCH v10 03/11] drm/gem: Add evict() callback to drm_gem_object_funcs
Hi Am 08.01.23 um 22:04 schrieb Dmitry Osipenko:> Add new common evict() callback to drm_gem_object_funcs and corresponding > drm_gem_object_evict() helper. This is a first step on a way to providing > common GEM-shrinker API for DRM drivers. > > Suggested-by: Thomas Zimmermann <tzimmermann at suse.de> > Signed-off-by: Dmitry Osipenko <dmitry.osipenko at collabora.com>Reviewed-by: Thomas Zimmermann <tzimmermann at suse.de> with my comments below addressed.> --- > drivers/gpu/drm/drm_gem.c | 16 ++++++++++++++++ > include/drm/drm_gem.h | 12 ++++++++++++ > 2 files changed, 28 insertions(+) > > diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > index c6bca5ac6e0f..dbb48fc9dff3 100644 > --- a/drivers/gpu/drm/drm_gem.c > +++ b/drivers/gpu/drm/drm_gem.c > @@ -1471,3 +1471,19 @@ drm_gem_lru_scan(struct drm_gem_lru *lru, > return freed; > } > EXPORT_SYMBOL(drm_gem_lru_scan); > + > +/** > + * drm_gem_object_evict - helper to evict backing pages for a GEM object > + * @obj: obj in question > + */ > +boolPlease use int and return an errno code. No newline here, please.> +drm_gem_object_evict(struct drm_gem_object *obj) > +{ > + dma_resv_assert_held(obj->resv); > + > + if (obj->funcs->evict) > + return obj->funcs->evict(obj); > + > + return false; > +} > +EXPORT_SYMBOL(drm_gem_object_evict); > diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h > index f1f00fc2dba6..8e5c22f25691 100644 > --- a/include/drm/drm_gem.h > +++ b/include/drm/drm_gem.h > @@ -172,6 +172,16 @@ struct drm_gem_object_funcs { > * This is optional but necessary for mmap support. > */ > const struct vm_operations_struct *vm_ops; > + > + /** > + * @evict: > + * > + * Evicts gem object out from memory. Used by the drm_gem_object_evict() > + * helper. Returns true on success, false otherwise. > + * > + * This callback is optional. > + */ > + bool (*evict)(struct drm_gem_object *obj);This should be declared between mmap and evict. Again, please use int and return an errno code.> }; > > /** > @@ -481,4 +491,6 @@ unsigned long drm_gem_lru_scan(struct drm_gem_lru *lru, > unsigned long *remaining, > bool (*shrink)(struct drm_gem_object *obj)); > > +bool drm_gem_object_evict(struct drm_gem_object *obj);drm_gem_evict() should be the correct name; like drm_gem_vmap() and drm_gem_pin(), etc. Best regards Thomas> + > #endif /* __DRM_GEM_H__ */-- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 N?rnberg, Germany (HRB 36809, AG N?rnberg) Gesch?ftsf?hrer: Ivo Totev -------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_signature Type: application/pgp-signature Size: 840 bytes Desc: OpenPGP digital signature URL: <http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20230217/5f1f9425/attachment.sig>