From f99e05006f9f60b6d0bb5c05a5cdddf5fea4cc81 Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Fri, 8 Jul 2016 12:15:59 -0700 Subject: gpu: nvgpu: smarter debugging for allocators Allow individual allocacators to be debugged without enabling debugging on all allocators. The ALLOCATOR_DEBUG define will still work as expected and enable debugging for all allocators that see this define. Change-Id: I0d59fa29affeaac15381e65d4128e7bef2f15bd5 Signed-off-by: Alex Waterman Reviewed-on: http://git-master/r/1178689 Reviewed-by: Yu-Huan Hsu --- drivers/gpu/nvgpu/gk20a/gk20a_allocator.c | 3 ++- drivers/gpu/nvgpu/gk20a/gk20a_allocator.h | 33 +++++++++++++++++++++---- drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c | 2 +- 3 files changed, 31 insertions(+), 7 deletions(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c index b7e9a5e4..25d15d0f 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c @@ -86,7 +86,7 @@ void gk20a_alloc_destroy(struct gk20a_allocator *a) * Handle the common init stuff for a gk20a_allocator. */ int __gk20a_alloc_common_init(struct gk20a_allocator *a, - const char *name, void *priv, + const char *name, void *priv, bool dbg, const struct gk20a_allocator_ops *ops) { if (!ops) @@ -94,6 +94,7 @@ int __gk20a_alloc_common_init(struct gk20a_allocator *a, a->ops = ops; a->priv = priv; + a->debug = dbg; mutex_init(&a->lock); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h index a25f9850..5d6b9426 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h @@ -69,6 +69,7 @@ struct gk20a_allocator { const struct gk20a_allocator_ops *ops; struct dentry *debugfs_entry; + bool debug; /* Control for debug msgs. */ }; /* @@ -124,9 +125,19 @@ void gk20a_alloc_print_stats(struct gk20a_allocator *a, void gk20a_init_alloc_debug(struct gk20a_allocator *a); void gk20a_fini_alloc_debug(struct gk20a_allocator *a); int __gk20a_alloc_common_init(struct gk20a_allocator *a, - const char *name, void *priv, + const char *name, void *priv, bool dbg, const struct gk20a_allocator_ops *ops); +static inline void gk20a_alloc_enable_dbg(struct gk20a_allocator *a) +{ + a->debug = true; +} + +static inline void gk20a_alloc_disable_dbg(struct gk20a_allocator *a) +{ + a->debug = false; +} + /* * Debug stuff. */ @@ -154,12 +165,24 @@ void gk20a_alloc_debugfs_init(struct platform_device *pdev); alloc_dbg(allocator, fmt, ##arg); \ } while (0) +#define __alloc_dbg(a, fmt, arg...) \ + pr_info("%-25s %25s() " fmt, (a)->name, __func__, ##arg) + #if defined(ALLOCATOR_DEBUG) -#define alloc_dbg(allocator, format, arg...) \ - pr_info("%-25s %25s() " format, \ - allocator->name, __func__, ##arg) +/* + * Always print the debug messages... + */ +#define alloc_dbg(a, fmt, arg...) __alloc_dbg(a, fmt, ##arg) #else -#define alloc_dbg(allocator, format, arg...) +/* + * Only print debug messages if debug is enabled for a given allocator. + */ +#define alloc_dbg(a, fmt, arg...) \ + do { \ + if ((a)->debug) \ + __alloc_dbg((a), fmt, ##arg); \ + } while (0) + #endif #endif /* GK20A_ALLOCATOR_H */ diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c index c006480b..97605800 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c @@ -1119,7 +1119,7 @@ int __gk20a_buddy_allocator_init(struct gk20a_allocator *__a, if (!a) return -ENOMEM; - err = __gk20a_alloc_common_init(__a, name, a, &buddy_ops); + err = __gk20a_alloc_common_init(__a, name, a, false, &buddy_ops); if (err) goto fail; -- cgit v1.2.2