From: Dmitry Osipenko <dmitry.osipenko@collabora.com> To: "David Airlie" <airlied@gmail.com>, "Gerd Hoffmann" <kraxel@redhat.com>, "Gurchetan Singh" <gurchetansingh@chromium.org>, "Chia-I Wu" <olvaffe@gmail.com>, "Daniel Vetter" <daniel@ffwll.ch>, "Daniel Almeida" <daniel.almeida@collabora.com>, "Gustavo Padovan" <gustavo.padovan@collabora.com>, "Daniel Stone" <daniel@fooishbar.org>, "Tomeu Vizoso" <tomeu.vizoso@collabora.com>, "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>, "Maxime Ripard" <mripard@kernel.org>, "Thomas Zimmermann" <tzimmermann@suse.de>, "Rob Clark" <robdclark@gmail.com>, "Sumit Semwal" <sumit.semwal@linaro.org>, "Christian König" <christian.koenig@amd.com>, "Qiang Yu" <yuq825@gmail.com>, "Steven Price" <steven.price@arm.com>, "Alyssa Rosenzweig" <alyssa.rosenzweig@collabora.com>, "Rob Herring" <robh@kernel.org>, "Sean Paul" <sean@poorly.run>, "Dmitry Baryshkov" <dmitry.baryshkov@linaro.org>, "Abhinav Kumar" <quic_abhinavk@quicinc.com> Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com, virtualization@lists.linux-foundation.org Subject: [PATCH v9 03/11] drm/gem: Add evict() callback to drm_gem_object_funcs Date: Wed, 23 Nov 2022 05:57:15 +0300 [thread overview] Message-ID: <20221123025723.695075-4-dmitry.osipenko@collabora.com> (raw) In-Reply-To: <20221123025723.695075-1-dmitry.osipenko@collabora.com> 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 | 15 +++++++++++++++ include/drm/drm_gem.h | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 299bca1390aa..c0510b8080d2 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1458,3 +1458,18 @@ 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; +} diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index b46ade812443..add1371453f0 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); }; /** @@ -480,4 +490,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__ */ -- 2.38.1
WARNING: multiple messages have this Message-ID (diff)
From: Dmitry Osipenko <dmitry.osipenko@collabora.com> To: "David Airlie" <airlied@gmail.com>, "Gerd Hoffmann" <kraxel@redhat.com>, "Gurchetan Singh" <gurchetansingh@chromium.org>, "Chia-I Wu" <olvaffe@gmail.com>, "Daniel Vetter" <daniel@ffwll.ch>, "Daniel Almeida" <daniel.almeida@collabora.com>, "Gustavo Padovan" <gustavo.padovan@collabora.com>, "Daniel Stone" <daniel@fooishbar.org>, "Tomeu Vizoso" <tomeu.vizoso@collabora.com>, "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>, "Maxime Ripard" <mripard@kernel.org>, "Thomas Zimmermann" <tzimmermann@suse.de>, "Rob Clark" <robdclark@gmail.com>, "Sumit Semwal" <sumit.semwal@linaro.org>, "Christian König" <christian.koenig@amd.com>, "Qiang Yu" <yuq825@gmail.com>, "Steven Price" <steven.price@arm.com>, "Alyssa Rosenzweig" <alyssa.rosenzweig@collabora.com>, "Rob Herring" <robh@kernel.org>, "Sean Paul" <sean@poorly.run>, "Dmitry Baryshkov" <dmitry.baryshkov@linaro.org>, "Abhinav Kumar" <quic_abhinavk@quicinc.com> Cc: kernel@collabora.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org Subject: [PATCH v9 03/11] drm/gem: Add evict() callback to drm_gem_object_funcs Date: Wed, 23 Nov 2022 05:57:15 +0300 [thread overview] Message-ID: <20221123025723.695075-4-dmitry.osipenko@collabora.com> (raw) In-Reply-To: <20221123025723.695075-1-dmitry.osipenko@collabora.com> 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 | 15 +++++++++++++++ include/drm/drm_gem.h | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 299bca1390aa..c0510b8080d2 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1458,3 +1458,18 @@ 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; +} diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h index b46ade812443..add1371453f0 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); }; /** @@ -480,4 +490,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__ */ -- 2.38.1
next prev parent reply other threads:[~2022-11-23 3:00 UTC|newest] Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-11-23 2:57 [PATCH v9 00/11] Add generic memory shrinker to VirtIO-GPU and Panfrost DRM drivers Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 01/11] drm/msm/gem: Prevent blocking within shrinker loop Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-29 16:40 ` Rob Clark 2022-11-29 16:40 ` Rob Clark 2022-11-29 16:40 ` Rob Clark 2022-11-23 2:57 ` [PATCH v9 02/11] drm/panfrost: Don't sync rpm suspension after mmu flushing Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 15:59 ` Steven Price 2022-11-23 2:57 ` Dmitry Osipenko [this message] 2022-11-23 2:57 ` [PATCH v9 03/11] drm/gem: Add evict() callback to drm_gem_object_funcs Dmitry Osipenko 2022-11-23 15:58 ` Steven Price 2022-11-23 16:40 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 04/11] drm/shmem: Put booleans in the end of struct drm_gem_shmem_object Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 05/11] drm/shmem: Switch to use drm_* debug helpers Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 06/11] drm/shmem-helper: Don't use vmap_use_count for dma-bufs Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 07/11] drm/shmem-helper: Switch to reservation lock Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 08/11] drm/shmem-helper: Add memory shrinker Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 15:56 ` kernel test robot 2022-11-23 15:56 ` kernel test robot 2022-11-23 15:56 ` kernel test robot 2022-11-23 18:08 ` kernel test robot 2022-11-23 18:08 ` kernel test robot 2022-11-23 18:08 ` kernel test robot 2022-11-23 2:57 ` [PATCH v9 09/11] drm/gem: Add drm_gem_pin_unlocked() Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 10/11] drm/virtio: Support memory shrinking Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 2:57 ` [PATCH v9 11/11] drm/panfrost: Switch to generic memory shrinker Dmitry Osipenko 2022-11-23 2:57 ` Dmitry Osipenko 2022-11-23 17:03 ` Steven Price
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20221123025723.695075-4-dmitry.osipenko@collabora.com \ --to=dmitry.osipenko@collabora.com \ --cc=airlied@gmail.com \ --cc=alyssa.rosenzweig@collabora.com \ --cc=christian.koenig@amd.com \ --cc=daniel.almeida@collabora.com \ --cc=daniel@ffwll.ch \ --cc=daniel@fooishbar.org \ --cc=dmitry.baryshkov@linaro.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=gurchetansingh@chromium.org \ --cc=gustavo.padovan@collabora.com \ --cc=kernel@collabora.com \ --cc=kraxel@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=maarten.lankhorst@linux.intel.com \ --cc=mripard@kernel.org \ --cc=olvaffe@gmail.com \ --cc=quic_abhinavk@quicinc.com \ --cc=robdclark@gmail.com \ --cc=robh@kernel.org \ --cc=sean@poorly.run \ --cc=steven.price@arm.com \ --cc=sumit.semwal@linaro.org \ --cc=tomeu.vizoso@collabora.com \ --cc=tzimmermann@suse.de \ --cc=virtualization@lists.linux-foundation.org \ --cc=yuq825@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.