aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJordan Crouse <jcrouse@codeaurora.org>2018-11-07 17:35:52 -0500
committerRob Clark <robdclark@gmail.com>2018-12-11 13:06:59 -0500
commit0815d7749a68527adabe2ac40d49f6fc0800eae5 (patch)
treec25b7564d054a0d176b280974eff796d9dbc88e0
parent7ad0e8cf6317825d2b7fc52a9000fb16461c2857 (diff)
drm/msm: Add a name field for gem objects
For debugging purposes it is useful to assign descriptions to buffers so that we know what they are used for. Add a field to the buffer object and use that to name the various kernel side allocations which ends up looking like like this in /d/dri/X/gem: flags id ref offset kaddr size madv name 00040000: I 0 ( 1) 00000000 0000000070b79eca 00004096 memptrs vmas: [gpu: 01000000,mapped,inuse=1] 00020000: I 0 ( 1) 00000000 0000000031ed4074 00032768 ring0 Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_gpu.c8
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_power.c2
-rw-r--r--drivers/gpu/drm/msm/adreno/a5xx_preempt.c2
-rw-r--r--drivers/gpu/drm/msm/adreno/a6xx_gpu.c2
-rw-r--r--drivers/gpu/drm/msm/dsi/dsi_host.c2
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c2
-rw-r--r--drivers/gpu/drm/msm/msm_drv.h4
-rw-r--r--drivers/gpu/drm/msm/msm_fb.c2
-rw-r--r--drivers/gpu/drm/msm/msm_gem.c25
-rw-r--r--drivers/gpu/drm/msm/msm_gem.h2
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c2
-rw-r--r--drivers/gpu/drm/msm/msm_ringbuffer.c3
12 files changed, 50 insertions, 6 deletions
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index c514590ef593..d5f5e56422f5 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -510,6 +510,7 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
510 a5xx_gpu->pm4_bo = adreno_fw_create_bo(gpu, 510 a5xx_gpu->pm4_bo = adreno_fw_create_bo(gpu,
511 adreno_gpu->fw[ADRENO_FW_PM4], &a5xx_gpu->pm4_iova); 511 adreno_gpu->fw[ADRENO_FW_PM4], &a5xx_gpu->pm4_iova);
512 512
513
513 if (IS_ERR(a5xx_gpu->pm4_bo)) { 514 if (IS_ERR(a5xx_gpu->pm4_bo)) {
514 ret = PTR_ERR(a5xx_gpu->pm4_bo); 515 ret = PTR_ERR(a5xx_gpu->pm4_bo);
515 a5xx_gpu->pm4_bo = NULL; 516 a5xx_gpu->pm4_bo = NULL;
@@ -517,6 +518,8 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
517 ret); 518 ret);
518 return ret; 519 return ret;
519 } 520 }
521
522 msm_gem_object_set_name(a5xx_gpu->pm4_bo, "pm4fw");
520 } 523 }
521 524
522 if (!a5xx_gpu->pfp_bo) { 525 if (!a5xx_gpu->pfp_bo) {
@@ -530,6 +533,8 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
530 ret); 533 ret);
531 return ret; 534 return ret;
532 } 535 }
536
537 msm_gem_object_set_name(a5xx_gpu->pfp_bo, "pfpfw");
533 } 538 }
534 539
535 gpu_write64(gpu, REG_A5XX_CP_ME_INSTR_BASE_LO, 540 gpu_write64(gpu, REG_A5XX_CP_ME_INSTR_BASE_LO,
@@ -1214,6 +1219,9 @@ static int a5xx_crashdumper_init(struct msm_gpu *gpu,
1214 SZ_1M, MSM_BO_UNCACHED, gpu->aspace, 1219 SZ_1M, MSM_BO_UNCACHED, gpu->aspace,
1215 &dumper->bo, &dumper->iova); 1220 &dumper->bo, &dumper->iova);
1216 1221
1222 if (!IS_ERR(dumper->ptr))
1223 msm_gem_object_set_name(dumper->bo, "crashdump");
1224
1217 return PTR_ERR_OR_ZERO(dumper->ptr); 1225 return PTR_ERR_OR_ZERO(dumper->ptr);
1218} 1226}
1219 1227
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_power.c b/drivers/gpu/drm/msm/adreno/a5xx_power.c
index 66bcd88dd8c0..70e65c94e525 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_power.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_power.c
@@ -300,6 +300,8 @@ void a5xx_gpmu_ucode_init(struct msm_gpu *gpu)
300 if (IS_ERR(ptr)) 300 if (IS_ERR(ptr))
301 return; 301 return;
302 302
303 msm_gem_object_set_name(a5xx_gpu->gpmu_bo, "gpmufw");
304
303 while (cmds_size > 0) { 305 while (cmds_size > 0) {
304 int i; 306 int i;
305 uint32_t _size = cmds_size > TYPE4_MAX_PAYLOAD ? 307 uint32_t _size = cmds_size > TYPE4_MAX_PAYLOAD ?
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c
index 48481e663685..3d62310a535f 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c
@@ -245,6 +245,8 @@ static int preempt_init_ring(struct a5xx_gpu *a5xx_gpu,
245 if (IS_ERR(ptr)) 245 if (IS_ERR(ptr))
246 return PTR_ERR(ptr); 246 return PTR_ERR(ptr);
247 247
248 msm_gem_object_set_name(bo, "preempt");
249
248 a5xx_gpu->preempt_bo[ring->id] = bo; 250 a5xx_gpu->preempt_bo[ring->id] = bo;
249 a5xx_gpu->preempt_iova[ring->id] = iova; 251 a5xx_gpu->preempt_iova[ring->id] = iova;
250 a5xx_gpu->preempt[ring->id] = ptr; 252 a5xx_gpu->preempt[ring->id] = ptr;
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index 34d6087e5209..fefe773c989e 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -333,6 +333,8 @@ static int a6xx_ucode_init(struct msm_gpu *gpu)
333 333
334 return ret; 334 return ret;
335 } 335 }
336
337 msm_gem_object_set_name(a6xx_gpu->sqe_bo, "sqefw");
336 } 338 }
337 339
338 gpu_write64(gpu, REG_A6XX_CP_SQE_INSTR_BASE_LO, 340 gpu_write64(gpu, REG_A6XX_CP_SQE_INSTR_BASE_LO,
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index 3b7092e1dcc7..38e481d2d606 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -1083,6 +1083,8 @@ int dsi_tx_buf_alloc_6g(struct msm_dsi_host *msm_host, int size)
1083 return PTR_ERR(data); 1083 return PTR_ERR(data);
1084 } 1084 }
1085 1085
1086 msm_gem_object_set_name(msm_host->tx_gem_obj, "tx_gem");
1087
1086 msm_host->tx_size = msm_host->tx_gem_obj->size; 1088 msm_host->tx_size = msm_host->tx_gem_obj->size;
1087 1089
1088 return 0; 1090 return 0;
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 3f8ed21dfffb..a73187274b62 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -810,7 +810,7 @@ static int msm_ioctl_gem_new(struct drm_device *dev, void *data,
810 } 810 }
811 811
812 return msm_gem_new_handle(dev, file, args->size, 812 return msm_gem_new_handle(dev, file, args->size,
813 args->flags, &args->handle); 813 args->flags, &args->handle, NULL);
814} 814}
815 815
816static inline ktime_t to_ktime(struct drm_msm_timespec timeout) 816static inline ktime_t to_ktime(struct drm_msm_timespec timeout)
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index 955c2f522db6..71a03ce21da5 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -309,7 +309,7 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout);
309int msm_gem_cpu_fini(struct drm_gem_object *obj); 309int msm_gem_cpu_fini(struct drm_gem_object *obj);
310void msm_gem_free_object(struct drm_gem_object *obj); 310void msm_gem_free_object(struct drm_gem_object *obj);
311int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, 311int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
312 uint32_t size, uint32_t flags, uint32_t *handle); 312 uint32_t size, uint32_t flags, uint32_t *handle, char *name);
313struct drm_gem_object *msm_gem_new(struct drm_device *dev, 313struct drm_gem_object *msm_gem_new(struct drm_device *dev,
314 uint32_t size, uint32_t flags); 314 uint32_t size, uint32_t flags);
315struct drm_gem_object *msm_gem_new_locked(struct drm_device *dev, 315struct drm_gem_object *msm_gem_new_locked(struct drm_device *dev,
@@ -325,6 +325,8 @@ void msm_gem_kernel_put(struct drm_gem_object *bo,
325struct drm_gem_object *msm_gem_import(struct drm_device *dev, 325struct drm_gem_object *msm_gem_import(struct drm_device *dev,
326 struct dma_buf *dmabuf, struct sg_table *sgt); 326 struct dma_buf *dmabuf, struct sg_table *sgt);
327 327
328void msm_gem_object_set_name(struct drm_gem_object *bo, const char *fmt, ...);
329
328int msm_framebuffer_prepare(struct drm_framebuffer *fb, 330int msm_framebuffer_prepare(struct drm_framebuffer *fb,
329 struct msm_gem_address_space *aspace); 331 struct msm_gem_address_space *aspace);
330void msm_framebuffer_cleanup(struct drm_framebuffer *fb, 332void msm_framebuffer_cleanup(struct drm_framebuffer *fb,
diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c
index 1224739094f2..67dfd8d3dc12 100644
--- a/drivers/gpu/drm/msm/msm_fb.c
+++ b/drivers/gpu/drm/msm/msm_fb.c
@@ -237,6 +237,8 @@ msm_alloc_stolen_fb(struct drm_device *dev, int w, int h, int p, uint32_t format
237 return ERR_CAST(bo); 237 return ERR_CAST(bo);
238 } 238 }
239 239
240 msm_gem_object_set_name(bo, "stolenfb");
241
240 fb = msm_framebuffer_init(dev, &mode_cmd, &bo); 242 fb = msm_framebuffer_init(dev, &mode_cmd, &bo);
241 if (IS_ERR(fb)) { 243 if (IS_ERR(fb)) {
242 DRM_DEV_ERROR(dev->dev, "failed to allocate fb\n"); 244 DRM_DEV_ERROR(dev->dev, "failed to allocate fb\n");
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 3d46d931ba67..ee44b0f01e90 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -491,7 +491,7 @@ int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
491 args->pitch = align_pitch(args->width, args->bpp); 491 args->pitch = align_pitch(args->width, args->bpp);
492 args->size = PAGE_ALIGN(args->pitch * args->height); 492 args->size = PAGE_ALIGN(args->pitch * args->height);
493 return msm_gem_new_handle(dev, file, args->size, 493 return msm_gem_new_handle(dev, file, args->size,
494 MSM_BO_SCANOUT | MSM_BO_WC, &args->handle); 494 MSM_BO_SCANOUT | MSM_BO_WC, &args->handle, "dumb");
495} 495}
496 496
497int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, 497int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
@@ -794,7 +794,7 @@ void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
794 obj->name, kref_read(&obj->refcount), 794 obj->name, kref_read(&obj->refcount),
795 off, msm_obj->vaddr); 795 off, msm_obj->vaddr);
796 796
797 seq_printf(m, " %08zu%9s\n", obj->size, madv); 797 seq_printf(m, " %08zu %9s %-32s\n", obj->size, madv, msm_obj->name);
798 798
799 if (!list_empty(&msm_obj->vmas)) { 799 if (!list_empty(&msm_obj->vmas)) {
800 800
@@ -833,7 +833,7 @@ void msm_gem_describe_objects(struct list_head *list, struct seq_file *m)
833 int count = 0; 833 int count = 0;
834 size_t size = 0; 834 size_t size = 0;
835 835
836 seq_puts(m, " flags id ref offset kaddr size madv\n"); 836 seq_puts(m, " flags id ref offset kaddr size madv name\n");
837 list_for_each_entry(msm_obj, list, mm_list) { 837 list_for_each_entry(msm_obj, list, mm_list) {
838 struct drm_gem_object *obj = &msm_obj->base; 838 struct drm_gem_object *obj = &msm_obj->base;
839 seq_puts(m, " "); 839 seq_puts(m, " ");
@@ -890,7 +890,8 @@ void msm_gem_free_object(struct drm_gem_object *obj)
890 890
891/* convenience method to construct a GEM buffer object, and userspace handle */ 891/* convenience method to construct a GEM buffer object, and userspace handle */
892int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, 892int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
893 uint32_t size, uint32_t flags, uint32_t *handle) 893 uint32_t size, uint32_t flags, uint32_t *handle,
894 char *name)
894{ 895{
895 struct drm_gem_object *obj; 896 struct drm_gem_object *obj;
896 int ret; 897 int ret;
@@ -900,6 +901,9 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file,
900 if (IS_ERR(obj)) 901 if (IS_ERR(obj))
901 return PTR_ERR(obj); 902 return PTR_ERR(obj);
902 903
904 if (name)
905 msm_gem_object_set_name(obj, "%s", name);
906
903 ret = drm_gem_handle_create(file, obj, handle); 907 ret = drm_gem_handle_create(file, obj, handle);
904 908
905 /* drop reference from allocate - handle holds it now */ 909 /* drop reference from allocate - handle holds it now */
@@ -1153,3 +1157,16 @@ void msm_gem_kernel_put(struct drm_gem_object *bo,
1153 else 1157 else
1154 drm_gem_object_put_unlocked(bo); 1158 drm_gem_object_put_unlocked(bo);
1155} 1159}
1160
1161void msm_gem_object_set_name(struct drm_gem_object *bo, const char *fmt, ...)
1162{
1163 struct msm_gem_object *msm_obj = to_msm_bo(bo);
1164 va_list ap;
1165
1166 if (!fmt)
1167 return;
1168
1169 va_start(ap, fmt);
1170 vsnprintf(msm_obj->name, sizeof(msm_obj->name), fmt, ap);
1171 va_end(ap);
1172}
diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h
index b318fe278e52..2064fac871b8 100644
--- a/drivers/gpu/drm/msm/msm_gem.h
+++ b/drivers/gpu/drm/msm/msm_gem.h
@@ -93,6 +93,8 @@ struct msm_gem_object {
93 */ 93 */
94 struct drm_mm_node *vram_node; 94 struct drm_mm_node *vram_node;
95 struct mutex lock; /* Protects resources associated with bo */ 95 struct mutex lock; /* Protects resources associated with bo */
96
97 char name[32]; /* Identifier to print for the debugfs files */
96}; 98};
97#define to_msm_bo(x) container_of(x, struct msm_gem_object, base) 99#define to_msm_bo(x) container_of(x, struct msm_gem_object, base)
98 100
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 86bb1ed8ddbb..c3909ba75b12 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -950,6 +950,8 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
950 goto fail; 950 goto fail;
951 } 951 }
952 952
953 msm_gem_object_set_name(gpu->memptrs_bo, "memptrs");
954
953 if (nr_rings > ARRAY_SIZE(gpu->rb)) { 955 if (nr_rings > ARRAY_SIZE(gpu->rb)) {
954 DRM_DEV_INFO_ONCE(drm->dev, "Only creating %zu ringbuffers\n", 956 DRM_DEV_INFO_ONCE(drm->dev, "Only creating %zu ringbuffers\n",
955 ARRAY_SIZE(gpu->rb)); 957 ARRAY_SIZE(gpu->rb));
diff --git a/drivers/gpu/drm/msm/msm_ringbuffer.c b/drivers/gpu/drm/msm/msm_ringbuffer.c
index 9fa9525c5293..6169bd6ca153 100644
--- a/drivers/gpu/drm/msm/msm_ringbuffer.c
+++ b/drivers/gpu/drm/msm/msm_ringbuffer.c
@@ -45,6 +45,9 @@ struct msm_ringbuffer *msm_ringbuffer_new(struct msm_gpu *gpu, int id,
45 ring->start = 0; 45 ring->start = 0;
46 goto fail; 46 goto fail;
47 } 47 }
48
49 msm_gem_object_set_name(ring->bo, "ring%d", id);
50
48 ring->end = ring->start + (MSM_GPU_RINGBUFFER_SZ >> 2); 51 ring->end = ring->start + (MSM_GPU_RINGBUFFER_SZ >> 2);
49 ring->next = ring->start; 52 ring->next = ring->start;
50 ring->cur = ring->start; 53 ring->cur = ring->start;