Skip to content

Commit 0b4339c

Browse files
robclarkRob Clark
authored andcommitted
drm/msm: Add VMA unmap reason
Make the VM log a bit more useful by providing a reason for the unmap (ie. closing VM vs evict/purge, etc) Signed-off-by: Rob Clark <robdclark@chromium.org> Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Tested-by: Antonino Maniscalco <antomani103@gmail.com> Reviewed-by: Antonino Maniscalco <antomani103@gmail.com> Patchwork: https://patchwork.freedesktop.org/patch/661527/
1 parent 9edc529 commit 0b4339c

3 files changed

Lines changed: 24 additions & 13 deletions

File tree

drivers/gpu/drm/msm/msm_gem.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ static int msm_gem_open(struct drm_gem_object *obj, struct drm_file *file)
4343
return 0;
4444
}
4545

46-
static void put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm, bool close);
46+
static void put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm,
47+
bool close, const char *reason);
4748

4849
static void detach_vm(struct drm_gem_object *obj, struct drm_gpuvm *vm)
4950
{
@@ -57,7 +58,7 @@ static void detach_vm(struct drm_gem_object *obj, struct drm_gpuvm *vm)
5758
drm_gpuvm_bo_for_each_va (vma, vm_bo) {
5859
if (vma->vm != vm)
5960
continue;
60-
msm_gem_vma_unmap(vma);
61+
msm_gem_vma_unmap(vma, "detach");
6162
msm_gem_vma_close(vma);
6263
break;
6364
}
@@ -97,7 +98,7 @@ static void msm_gem_close(struct drm_gem_object *obj, struct drm_file *file)
9798
MAX_SCHEDULE_TIMEOUT);
9899

99100
msm_gem_lock_vm_and_obj(&exec, obj, ctx->vm);
100-
put_iova_spaces(obj, ctx->vm, true);
101+
put_iova_spaces(obj, ctx->vm, true, "close");
101102
detach_vm(obj, ctx->vm);
102103
drm_exec_fini(&exec); /* drop locks */
103104
}
@@ -425,7 +426,8 @@ static struct drm_gpuva *lookup_vma(struct drm_gem_object *obj,
425426
* mapping.
426427
*/
427428
static void
428-
put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm, bool close)
429+
put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm,
430+
bool close, const char *reason)
429431
{
430432
struct drm_gpuvm_bo *vm_bo, *tmp;
431433

@@ -440,7 +442,7 @@ put_iova_spaces(struct drm_gem_object *obj, struct drm_gpuvm *vm, bool close)
440442
drm_gpuvm_bo_get(vm_bo);
441443

442444
drm_gpuvm_bo_for_each_va_safe (vma, vmatmp, vm_bo) {
443-
msm_gem_vma_unmap(vma);
445+
msm_gem_vma_unmap(vma, reason);
444446
if (close)
445447
msm_gem_vma_close(vma);
446448
}
@@ -617,7 +619,7 @@ static int clear_iova(struct drm_gem_object *obj,
617619
if (!vma)
618620
return 0;
619621

620-
msm_gem_vma_unmap(vma);
622+
msm_gem_vma_unmap(vma, NULL);
621623
msm_gem_vma_close(vma);
622624

623625
return 0;
@@ -829,7 +831,7 @@ void msm_gem_purge(struct drm_gem_object *obj)
829831
GEM_WARN_ON(!is_purgeable(msm_obj));
830832

831833
/* Get rid of any iommu mapping(s): */
832-
put_iova_spaces(obj, NULL, false);
834+
put_iova_spaces(obj, NULL, false, "purge");
833835

834836
msm_gem_vunmap(obj);
835837

@@ -867,7 +869,7 @@ void msm_gem_evict(struct drm_gem_object *obj)
867869
GEM_WARN_ON(is_unevictable(msm_obj));
868870

869871
/* Get rid of any iommu mapping(s): */
870-
put_iova_spaces(obj, NULL, false);
872+
put_iova_spaces(obj, NULL, false, "evict");
871873

872874
drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping);
873875

@@ -1079,7 +1081,7 @@ static void msm_gem_free_object(struct drm_gem_object *obj)
10791081
drm_exec_retry_on_contention(&exec);
10801082
}
10811083
}
1082-
put_iova_spaces(obj, NULL, true);
1084+
put_iova_spaces(obj, NULL, true, "free");
10831085
drm_exec_fini(&exec); /* drop locks */
10841086
}
10851087

drivers/gpu/drm/msm/msm_gem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ struct msm_gem_vma {
168168
struct drm_gpuva *
169169
msm_gem_vma_new(struct drm_gpuvm *vm, struct drm_gem_object *obj,
170170
u64 offset, u64 range_start, u64 range_end);
171-
void msm_gem_vma_unmap(struct drm_gpuva *vma);
171+
void msm_gem_vma_unmap(struct drm_gpuva *vma, const char *reason);
172172
int msm_gem_vma_map(struct drm_gpuva *vma, int prot, struct sg_table *sgt);
173173
void msm_gem_vma_close(struct drm_gpuva *vma);
174174

drivers/gpu/drm/msm/msm_gem_vma.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ struct msm_vm_unmap_op {
5353
/** @range: size of region to unmap */
5454
uint64_t range;
5555

56+
/** @reason: The reason for the unmap */
57+
const char *reason;
58+
5659
/**
5760
* @queue_id: The id of the submitqueue the operation is performed
5861
* on, or zero for (in particular) UNMAP ops triggered outside of
@@ -242,7 +245,12 @@ vm_log(struct msm_gem_vm *vm, const char *op, uint64_t iova, uint64_t range, int
242245
static void
243246
vm_unmap_op(struct msm_gem_vm *vm, const struct msm_vm_unmap_op *op)
244247
{
245-
vm_log(vm, "unmap", op->iova, op->range, op->queue_id);
248+
const char *reason = op->reason;
249+
250+
if (!reason)
251+
reason = "unmap";
252+
253+
vm_log(vm, reason, op->iova, op->range, op->queue_id);
246254

247255
vm->mmu->funcs->unmap(vm->mmu, op->iova, op->range);
248256
}
@@ -257,7 +265,7 @@ vm_map_op(struct msm_gem_vm *vm, const struct msm_vm_map_op *op)
257265
}
258266

259267
/* Actually unmap memory for the vma */
260-
void msm_gem_vma_unmap(struct drm_gpuva *vma)
268+
void msm_gem_vma_unmap(struct drm_gpuva *vma, const char *reason)
261269
{
262270
struct msm_gem_vm *vm = to_msm_vm(vma->vm);
263271
struct msm_gem_vma *msm_vma = to_msm_vma(vma);
@@ -277,6 +285,7 @@ void msm_gem_vma_unmap(struct drm_gpuva *vma)
277285
vm_unmap_op(vm, &(struct msm_vm_unmap_op){
278286
.iova = vma->va.addr,
279287
.range = vma->va.range,
288+
.reason = reason,
280289
});
281290

282291
if (!vm->managed)
@@ -863,7 +872,7 @@ msm_gem_vm_close(struct drm_gpuvm *gpuvm)
863872
drm_exec_retry_on_contention(&exec);
864873
}
865874

866-
msm_gem_vma_unmap(vma);
875+
msm_gem_vma_unmap(vma, "close");
867876
msm_gem_vma_close(vma);
868877

869878
if (obj) {

0 commit comments

Comments
 (0)