Message ID | 20230108210445.3948344-4-dmitry.osipenko@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers | expand |
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@suse.de> > Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Reviewed-by: Thomas Zimmermann <tzimmermann@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 > + */ > +bool Please 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__ */
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 + */ +bool +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); }; /** @@ -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); + #endif /* __DRM_GEM_H__ */
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@suse.de> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> --- drivers/gpu/drm/drm_gem.c | 16 ++++++++++++++++ include/drm/drm_gem.h | 12 ++++++++++++ 2 files changed, 28 insertions(+)