From: Rob Clark <robdclark@gmail.com>
To: dri-devel@lists.freedesktop.org
Cc: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org,
Connor Abbott <cwabbott0@gmail.com>,
Rob Clark <robdclark@chromium.org>,
Rob Clark <robdclark@gmail.com>,
Abhinav Kumar <quic_abhinavk@quicinc.com>,
Dmitry Baryshkov <lumag@kernel.org>, Sean Paul <sean@poorly.run>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
linux-kernel@vger.kernel.org (open list)
Subject: [PATCH v4 08/33] drm/msm: Collapse vma allocation and initialization
Date: Fri, 2 May 2025 09:56:35 -0700 [thread overview]
Message-ID: <20250502165831.44850-9-robdclark@gmail.com> (raw)
In-Reply-To: <20250502165831.44850-1-robdclark@gmail.com>
From: Rob Clark <robdclark@chromium.org>
Now that we've dropped vram carveout support, we can collapse vma
allocation and initialization. This better matches how things work
with drm_gpuvm.
Signed-off-by: Rob Clark <robdclark@chromium.org>
---
drivers/gpu/drm/msm/msm_gem.c | 30 +++-----------------------
drivers/gpu/drm/msm/msm_gem.h | 4 ++--
drivers/gpu/drm/msm/msm_gem_vma.c | 36 +++++++++++++------------------
3 files changed, 20 insertions(+), 50 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 621fb4e17a2e..29247911f048 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -337,23 +337,6 @@ uint64_t msm_gem_mmap_offset(struct drm_gem_object *obj)
return offset;
}
-static struct msm_gem_vma *add_vma(struct drm_gem_object *obj,
- struct msm_gem_vm *vm)
-{
- struct msm_gem_object *msm_obj = to_msm_bo(obj);
- struct msm_gem_vma *vma;
-
- msm_gem_assert_locked(obj);
-
- vma = msm_gem_vma_new(vm);
- if (!vma)
- return ERR_PTR(-ENOMEM);
-
- list_add_tail(&vma->list, &msm_obj->vmas);
-
- return vma;
-}
-
static struct msm_gem_vma *lookup_vma(struct drm_gem_object *obj,
struct msm_gem_vm *vm)
{
@@ -420,6 +403,7 @@ static struct msm_gem_vma *get_vma_locked(struct drm_gem_object *obj,
struct msm_gem_vm *vm,
u64 range_start, u64 range_end)
{
+ struct msm_gem_object *msm_obj = to_msm_bo(obj);
struct msm_gem_vma *vma;
msm_gem_assert_locked(obj);
@@ -427,18 +411,10 @@ static struct msm_gem_vma *get_vma_locked(struct drm_gem_object *obj,
vma = lookup_vma(obj, vm);
if (!vma) {
- int ret;
-
- vma = add_vma(obj, vm);
+ vma = msm_gem_vma_new(vm, obj, range_start, range_end);
if (IS_ERR(vma))
return vma;
-
- ret = msm_gem_vma_init(vma, obj->size,
- range_start, range_end);
- if (ret) {
- del_vma(vma);
- return ERR_PTR(ret);
- }
+ list_add_tail(&vma->list, &msm_obj->vmas);
} else {
GEM_WARN_ON(vma->iova < range_start);
GEM_WARN_ON((vma->iova + obj->size) > range_end);
diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h
index c16b11182831..9bd78642671c 100644
--- a/drivers/gpu/drm/msm/msm_gem.h
+++ b/drivers/gpu/drm/msm/msm_gem.h
@@ -66,8 +66,8 @@ struct msm_gem_vma {
bool mapped;
};
-struct msm_gem_vma *msm_gem_vma_new(struct msm_gem_vm *vm);
-int msm_gem_vma_init(struct msm_gem_vma *vma, int size,
+struct msm_gem_vma *
+msm_gem_vma_new(struct msm_gem_vm *vm, struct drm_gem_object *obj,
u64 range_start, u64 range_end);
void msm_gem_vma_purge(struct msm_gem_vma *vma);
int msm_gem_vma_map(struct msm_gem_vma *vma, int prot, struct sg_table *sgt, int size);
diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_gem_vma.c
index 9419692f0cc8..6d18364f321c 100644
--- a/drivers/gpu/drm/msm/msm_gem_vma.c
+++ b/drivers/gpu/drm/msm/msm_gem_vma.c
@@ -106,47 +106,41 @@ void msm_gem_vma_close(struct msm_gem_vma *vma)
msm_gem_vm_put(vm);
}
-struct msm_gem_vma *msm_gem_vma_new(struct msm_gem_vm *vm)
+/* Create a new vma and allocate an iova for it */
+struct msm_gem_vma *
+msm_gem_vma_new(struct msm_gem_vm *vm, struct drm_gem_object *obj,
+ u64 range_start, u64 range_end)
{
struct msm_gem_vma *vma;
+ int ret;
vma = kzalloc(sizeof(*vma), GFP_KERNEL);
if (!vma)
- return NULL;
+ return ERR_PTR(-ENOMEM);
vma->vm = vm;
- return vma;
-}
-
-/* Initialize a new vma and allocate an iova for it */
-int msm_gem_vma_init(struct msm_gem_vma *vma, int size,
- u64 range_start, u64 range_end)
-{
- struct msm_gem_vm *vm = vma->vm;
- int ret;
-
- if (GEM_WARN_ON(!vm))
- return -EINVAL;
-
- if (GEM_WARN_ON(vma->iova))
- return -EBUSY;
-
spin_lock(&vm->lock);
ret = drm_mm_insert_node_in_range(&vm->mm, &vma->node,
- size, PAGE_SIZE, 0,
+ obj->size, PAGE_SIZE, 0,
range_start, range_end, 0);
spin_unlock(&vm->lock);
if (ret)
- return ret;
+ goto err_free_vma;
vma->iova = vma->node.start;
vma->mapped = false;
+ INIT_LIST_HEAD(&vma->list);
+
kref_get(&vm->kref);
- return 0;
+ return vma;
+
+err_free_vma:
+ kfree(vma);
+ return ERR_PTR(ret);
}
struct msm_gem_vm *
--
2.49.0
next prev parent reply other threads:[~2025-05-02 17:08 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-02 16:56 [PATCH v4 00/33] drm/msm: sparse / "VM_BIND" support Rob Clark
2025-05-02 16:56 ` [PATCH v4 01/33] drm/gpuvm: Don't require obj lock in destructor path Rob Clark
2025-05-02 16:56 ` [PATCH v4 02/33] drm/gpuvm: Allow VAs to hold soft reference to BOs Rob Clark
2025-05-02 16:56 ` [PATCH v4 03/33] iommu/io-pgtable-arm: Add quirk to quiet WARN_ON() Rob Clark
2025-05-02 19:29 ` ALOK TIWARI
2025-05-02 16:56 ` [PATCH v4 04/33] drm/msm: Rename msm_file_private -> msm_context Rob Clark
2025-05-02 16:56 ` [PATCH v4 05/33] drm/msm: Improve msm_context comments Rob Clark
2025-05-02 16:56 ` [PATCH v4 06/33] drm/msm: Rename msm_gem_address_space -> msm_gem_vm Rob Clark
2025-05-02 16:56 ` [PATCH v4 07/33] drm/msm: Remove vram carveout support Rob Clark
2025-05-02 16:56 ` Rob Clark [this message]
2025-05-02 16:56 ` [PATCH v4 09/33] drm/msm: Collapse vma close and delete Rob Clark
2025-05-02 16:56 ` [PATCH v4 10/33] drm/msm: Don't close VMAs on purge Rob Clark
2025-05-02 16:56 ` [PATCH v4 11/33] drm/msm: drm_gpuvm conversion Rob Clark
2025-05-02 16:56 ` [PATCH v4 12/33] drm/msm: Convert vm locking Rob Clark
2025-05-02 16:56 ` [PATCH v4 13/33] drm/msm: Use drm_gpuvm types more Rob Clark
2025-05-02 16:56 ` [PATCH v4 14/33] drm/msm: Split out helper to get iommu prot flags Rob Clark
2025-05-02 16:56 ` [PATCH v4 15/33] drm/msm: Add mmu support for non-zero offset Rob Clark
2025-05-02 16:56 ` [PATCH v4 16/33] drm/msm: Add PRR support Rob Clark
2025-05-02 16:56 ` [PATCH v4 17/33] drm/msm: Rename msm_gem_vma_purge() -> _unmap() Rob Clark
2025-05-02 16:56 ` [PATCH v4 18/33] drm/msm: Lazily create context VM Rob Clark
2025-05-02 16:56 ` [PATCH v4 19/33] drm/msm: Add opt-in for VM_BIND Rob Clark
2025-05-02 16:56 ` [PATCH v4 20/33] drm/msm: Mark VM as unusable on GPU hangs Rob Clark
2025-05-02 16:56 ` [PATCH v4 21/33] drm/msm: Add _NO_SHARE flag Rob Clark
2025-05-05 7:54 ` Christian König
2025-05-05 14:15 ` Rob Clark
2025-05-05 15:17 ` Christian König
2025-05-02 16:56 ` [PATCH v4 22/33] drm/msm: Crashdump prep for sparse mappings Rob Clark
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=20250502165831.44850-9-robdclark@gmail.com \
--to=robdclark@gmail.com \
--cc=airlied@gmail.com \
--cc=cwabbott0@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=quic_abhinavk@quicinc.com \
--cc=robdclark@chromium.org \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox