diff options
author | Jordan Crouse <jcrouse@codeaurora.org> | 2018-11-07 17:35:52 -0500 |
---|---|---|
committer | Rob Clark <robdclark@gmail.com> | 2018-12-11 13:06:59 -0500 |
commit | 0815d7749a68527adabe2ac40d49f6fc0800eae5 (patch) | |
tree | c25b7564d054a0d176b280974eff796d9dbc88e0 | |
parent | 7ad0e8cf6317825d2b7fc52a9000fb16461c2857 (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.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/adreno/a5xx_power.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/dsi/dsi_host.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_drv.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_drv.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_fb.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gpu.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_ringbuffer.c | 3 |
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 | ||
816 | static inline ktime_t to_ktime(struct drm_msm_timespec timeout) | 816 | static 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); | |||
309 | int msm_gem_cpu_fini(struct drm_gem_object *obj); | 309 | int msm_gem_cpu_fini(struct drm_gem_object *obj); |
310 | void msm_gem_free_object(struct drm_gem_object *obj); | 310 | void msm_gem_free_object(struct drm_gem_object *obj); |
311 | int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, | 311 | int 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); |
313 | struct drm_gem_object *msm_gem_new(struct drm_device *dev, | 313 | struct drm_gem_object *msm_gem_new(struct drm_device *dev, |
314 | uint32_t size, uint32_t flags); | 314 | uint32_t size, uint32_t flags); |
315 | struct drm_gem_object *msm_gem_new_locked(struct drm_device *dev, | 315 | struct 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, | |||
325 | struct drm_gem_object *msm_gem_import(struct drm_device *dev, | 325 | struct 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 | ||
328 | void msm_gem_object_set_name(struct drm_gem_object *bo, const char *fmt, ...); | ||
329 | |||
328 | int msm_framebuffer_prepare(struct drm_framebuffer *fb, | 330 | int msm_framebuffer_prepare(struct drm_framebuffer *fb, |
329 | struct msm_gem_address_space *aspace); | 331 | struct msm_gem_address_space *aspace); |
330 | void msm_framebuffer_cleanup(struct drm_framebuffer *fb, | 332 | void 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 | ||
497 | int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, | 497 | int 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 */ |
892 | int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, | 892 | int 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 | |||
1161 | void 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; |