From: Rob Clark <robdclark@gmail.com> To: dri-devel@lists.freedesktop.org Cc: Jordan Crouse <jordan@cosmicpenguin.net>, Rob Clark <robdclark@chromium.org>, Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, linux-arm-msm@vger.kernel.org (open list:DRM DRIVER FOR MSM ADRENO GPU), freedreno@lists.freedesktop.org (open list:DRM DRIVER FOR MSM ADRENO GPU), linux-kernel@vger.kernel.org (open list) Subject: [PATCH 4/8] drm/msm: Split iova purge and close Date: Mon, 5 Apr 2021 10:45:27 -0700 [thread overview] Message-ID: <20210405174532.1441497-5-robdclark@gmail.com> (raw) In-Reply-To: <20210405174532.1441497-1-robdclark@gmail.com> From: Rob Clark <robdclark@chromium.org> Currently these always go together, either when we purge MADV_WONTNEED objects or when the object is freed. But for unpin, we want to be able to purge (unmap from iommu) the vma, while keeping the iova range allocated (so we can remap back to the same GPU virtual address when the object is re-pinned. Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/msm/msm_gem.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 71530a89b675..5f0647adc29d 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -357,9 +357,14 @@ static void del_vma(struct msm_gem_vma *vma) kfree(vma); } -/* Called with msm_obj locked */ +/** + * If close is true, this also closes the VMA (releasing the allocated + * iova range) in addition to removing the iommu mapping. In the eviction + * case (!close), we keep the iova allocated, but only remove the iommu + * mapping. + */ static void -put_iova_spaces(struct drm_gem_object *obj) +put_iova_spaces(struct drm_gem_object *obj, bool close) { struct msm_gem_object *msm_obj = to_msm_bo(obj); struct msm_gem_vma *vma; @@ -369,7 +374,8 @@ put_iova_spaces(struct drm_gem_object *obj) list_for_each_entry(vma, &msm_obj->vmas, list) { if (vma->aspace) { msm_gem_purge_vma(vma->aspace, vma); - msm_gem_close_vma(vma->aspace, vma); + if (close) + msm_gem_close_vma(vma->aspace, vma); } } } @@ -711,7 +717,8 @@ void msm_gem_purge(struct drm_gem_object *obj) GEM_WARN_ON(!is_purgeable(msm_obj)); GEM_WARN_ON(obj->import_attach); - put_iova_spaces(obj); + /* Get rid of any iommu mapping(s): */ + put_iova_spaces(obj, true); msm_gem_vunmap(obj); @@ -1013,7 +1020,7 @@ void msm_gem_free_object(struct drm_gem_object *obj) /* object should not be on active list: */ GEM_WARN_ON(is_active(msm_obj)); - put_iova_spaces(obj); + put_iova_spaces(obj, true); if (obj->import_attach) { GEM_WARN_ON(msm_obj->vaddr); -- 2.30.2
WARNING: multiple messages have this Message-ID (diff)
From: Rob Clark <robdclark@gmail.com> To: dri-devel@lists.freedesktop.org Cc: Rob Clark <robdclark@chromium.org>, "open list:DRM DRIVER FOR MSM ADRENO GPU" <freedreno@lists.freedesktop.org>, David Airlie <airlied@linux.ie>, "open list:DRM DRIVER FOR MSM ADRENO GPU" <linux-arm-msm@vger.kernel.org>, open list <linux-kernel@vger.kernel.org>, Jordan Crouse <jordan@cosmicpenguin.net>, Sean Paul <sean@poorly.run> Subject: [PATCH 4/8] drm/msm: Split iova purge and close Date: Mon, 5 Apr 2021 10:45:27 -0700 [thread overview] Message-ID: <20210405174532.1441497-5-robdclark@gmail.com> (raw) In-Reply-To: <20210405174532.1441497-1-robdclark@gmail.com> From: Rob Clark <robdclark@chromium.org> Currently these always go together, either when we purge MADV_WONTNEED objects or when the object is freed. But for unpin, we want to be able to purge (unmap from iommu) the vma, while keeping the iova range allocated (so we can remap back to the same GPU virtual address when the object is re-pinned. Signed-off-by: Rob Clark <robdclark@chromium.org> --- drivers/gpu/drm/msm/msm_gem.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 71530a89b675..5f0647adc29d 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -357,9 +357,14 @@ static void del_vma(struct msm_gem_vma *vma) kfree(vma); } -/* Called with msm_obj locked */ +/** + * If close is true, this also closes the VMA (releasing the allocated + * iova range) in addition to removing the iommu mapping. In the eviction + * case (!close), we keep the iova allocated, but only remove the iommu + * mapping. + */ static void -put_iova_spaces(struct drm_gem_object *obj) +put_iova_spaces(struct drm_gem_object *obj, bool close) { struct msm_gem_object *msm_obj = to_msm_bo(obj); struct msm_gem_vma *vma; @@ -369,7 +374,8 @@ put_iova_spaces(struct drm_gem_object *obj) list_for_each_entry(vma, &msm_obj->vmas, list) { if (vma->aspace) { msm_gem_purge_vma(vma->aspace, vma); - msm_gem_close_vma(vma->aspace, vma); + if (close) + msm_gem_close_vma(vma->aspace, vma); } } } @@ -711,7 +717,8 @@ void msm_gem_purge(struct drm_gem_object *obj) GEM_WARN_ON(!is_purgeable(msm_obj)); GEM_WARN_ON(obj->import_attach); - put_iova_spaces(obj); + /* Get rid of any iommu mapping(s): */ + put_iova_spaces(obj, true); msm_gem_vunmap(obj); @@ -1013,7 +1020,7 @@ void msm_gem_free_object(struct drm_gem_object *obj) /* object should not be on active list: */ GEM_WARN_ON(is_active(msm_obj)); - put_iova_spaces(obj); + put_iova_spaces(obj, true); if (obj->import_attach) { GEM_WARN_ON(msm_obj->vaddr); -- 2.30.2 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2021-04-05 17:42 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-05 17:45 [PATCH 0/8] drm/msm: Swappable GEM objects Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` [PATCH 1/8] drm/msm: ratelimit GEM related WARN_ON()s Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` [PATCH 2/8] drm/msm: Reorganize msm_gem_shrinker_scan() Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` [PATCH 3/8] drm/msm: Clear msm_obj->sgt in put_pages() Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` Rob Clark [this message] 2021-04-05 17:45 ` [PATCH 4/8] drm/msm: Split iova purge and close Rob Clark 2021-04-05 17:45 ` [PATCH 5/8] drm/msm: Add $debugfs/gem stats on resident objects Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` [PATCH 6/8] drm/msm: Track potentially evictable objects Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` [PATCH 7/8] drm/msm: Small msm_gem_purge() fix Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-05 17:45 ` [PATCH 8/8] drm/msm: Support evicting GEM objects to swap Rob Clark 2021-04-05 17:45 ` Rob Clark 2021-04-08 11:15 ` [PATCH 0/8] drm/msm: Swappable GEM objects Daniel Vetter 2021-04-08 11:15 ` Daniel Vetter 2021-04-08 15:23 ` Rob Clark 2021-04-08 15:23 ` Rob Clark 2021-04-12 14:28 ` Daniel Vetter 2021-04-12 14:28 ` Daniel Vetter 2021-04-12 15:23 ` Rob Clark 2021-04-12 15:23 ` Rob Clark 2021-04-12 16:36 ` Daniel Vetter 2021-04-12 16:36 ` Daniel Vetter
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=20210405174532.1441497-5-robdclark@gmail.com \ --to=robdclark@gmail.com \ --cc=airlied@linux.ie \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=freedreno@lists.freedesktop.org \ --cc=jordan@cosmicpenguin.net \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=robdclark@chromium.org \ --cc=sean@poorly.run \ /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.