Module: Mesa Branch: master Commit: a8fd58eae59607ac42eaa7187b0d9e6c51b83af9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a8fd58eae59607ac42eaa7187b0d9e6c51b83af9
Author: Eric Anholt <[email protected]> Date: Fri May 12 16:05:44 2017 -0700 vc4: Add labels to BOs for debug builds or with VC4_DEBUG=surf set. This has proven to be incredibly useful for debugging CMA allocation failures and driving memory management improvements. However, we don't want to burden entry and exit from the BO cache with the labeling ioctl's overhead on release builds. --- src/gallium/drivers/vc4/vc4_bufmgr.c | 30 ++++++++++++++++++++++++++++++ src/gallium/drivers/vc4/vc4_bufmgr.h | 3 +++ src/gallium/drivers/vc4/vc4_resource.c | 5 +++++ src/gallium/drivers/vc4/vc4_state.c | 3 +++ 4 files changed, 41 insertions(+) diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.c b/src/gallium/drivers/vc4/vc4_bufmgr.c index 0653f88232..9c4cc4cba8 100644 --- a/src/gallium/drivers/vc4/vc4_bufmgr.c +++ b/src/gallium/drivers/vc4/vc4_bufmgr.c @@ -48,6 +48,32 @@ static bool dump_stats = false; static void vc4_bo_cache_free_all(struct vc4_bo_cache *cache); +void +vc4_bo_label(struct vc4_screen *screen, struct vc4_bo *bo, const char *fmt, ...) +{ + /* Perform BO labeling by default on debug builds (so that you get + * whole-system allocation information), or if VC4_DEBUG=surf is set + * (for debugging a single app's allocation). + */ +#ifndef DEBUG + if (!(VC4_DEBUG & VC4_DEBUG_SURFACE)) + return; +#endif + va_list va; + va_start(va, fmt); + char *name = ralloc_vasprintf(NULL, fmt, va); + va_end(va); + + struct drm_vc4_label_bo label = { + .handle = bo->handle, + .len = strlen(name), + .name = (uintptr_t)name, + }; + drmIoctl(screen->fd, DRM_IOCTL_VC4_LABEL_BO, &label); + + ralloc_free(name); +} + static void vc4_bo_dump_stats(struct vc4_screen *screen) { @@ -114,6 +140,7 @@ vc4_bo_from_cache(struct vc4_screen *screen, uint32_t size, const char *name) pipe_reference_init(&bo->reference, 1); vc4_bo_remove_from_cache(cache, bo); + vc4_bo_label(screen, bo, "%s", name); bo->name = name; } mtx_unlock(&cache->lock); @@ -176,6 +203,8 @@ vc4_bo_alloc(struct vc4_screen *screen, uint32_t size, const char *name) vc4_bo_dump_stats(screen); } + vc4_bo_label(screen, bo, "%s", name); + return bo; } @@ -307,6 +336,7 @@ vc4_bo_last_unreference_locked_timed(struct vc4_bo *bo, time_t time) vc4_bo_dump_stats(screen); } bo->name = NULL; + vc4_bo_label(screen, bo, "mesa cache"); free_stale_bos(screen, time); } diff --git a/src/gallium/drivers/vc4/vc4_bufmgr.h b/src/gallium/drivers/vc4/vc4_bufmgr.h index 838314f43d..4e7b23e086 100644 --- a/src/gallium/drivers/vc4/vc4_bufmgr.h +++ b/src/gallium/drivers/vc4/vc4_bufmgr.h @@ -132,6 +132,9 @@ vc4_wait_seqno(struct vc4_screen *screen, uint64_t seqno, uint64_t timeout_ns, const char *reason); void +vc4_bo_label(struct vc4_screen *screen, struct vc4_bo *bo, const char *fmt, ...); + +void vc4_bufmgr_destroy(struct pipe_screen *pscreen); #endif /* VC4_BUFMGR_H */ diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c index 853f7bbfa1..cdcbcc917e 100644 --- a/src/gallium/drivers/vc4/vc4_resource.c +++ b/src/gallium/drivers/vc4/vc4_resource.c @@ -675,6 +675,11 @@ vc4_resource_create_with_modifiers(struct pipe_screen *pscreen, goto fail; } + vc4_bo_label(screen, rsc->bo, "%sresource %dx%d@%d/%d", + (tmpl->bind & PIPE_BIND_SCANOUT) ? "scanout " : "", + tmpl->width0, tmpl->height0, + rsc->cpp * 8, prsc->last_level); + return prsc; fail: vc4_resource_destroy(pscreen, prsc); diff --git a/src/gallium/drivers/vc4/vc4_state.c b/src/gallium/drivers/vc4/vc4_state.c index d6d44793e3..17aa7eb397 100644 --- a/src/gallium/drivers/vc4/vc4_state.c +++ b/src/gallium/drivers/vc4/vc4_state.c @@ -587,6 +587,9 @@ vc4_create_sampler_view(struct pipe_context *pctx, struct pipe_resource *prsc, return NULL; } rsc = vc4_resource(prsc); + vc4_bo_label(vc4_screen(pctx->screen), rsc->bo, + "tiling shadow %dx%d", + tmpl.width0, tmpl.height0); /* Flag it as needing update of the contents from the parent. */ rsc->writes = shadow_parent->writes - 1; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
