From 8f2f979428e1e5a4ff71d91e30ba17813e6ee7be Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Mon, 21 Aug 2017 13:29:46 -0700 Subject: gpu: nvgpu: cleanup allocator debugging Remove debugging features that did not really get used and make the debugging code use the nvgpu_log() functionality. This ties the allocator debugging into the larger nvgpu debug framework. Also modify many of the places CONFIG_DEBUG_FS was used to conditionally compile allocator debug code to use __KERNEL__ instead. This is because that debug code can still be called even when debugfs is not present in Linux. Change-Id: I112ebe1cae22d6f8db96d023993498093e18d74a Signed-off-by: Alex Waterman Reviewed-on: https://git-master.nvidia.com/r/1544439 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/linux/debug_allocator.c | 6 --- drivers/gpu/nvgpu/common/mm/bitmap_allocator.c | 4 +- drivers/gpu/nvgpu/common/mm/buddy_allocator.c | 4 +- drivers/gpu/nvgpu/common/mm/lockless_allocator.c | 4 +- drivers/gpu/nvgpu/common/mm/nvgpu_allocator.c | 8 ++++ drivers/gpu/nvgpu/common/mm/page_allocator.c | 4 +- drivers/gpu/nvgpu/include/nvgpu/allocator.h | 49 ++++++++++++++---------- drivers/gpu/nvgpu/include/nvgpu/log.h | 1 + 8 files changed, 46 insertions(+), 34 deletions(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/nvgpu/common/linux/debug_allocator.c b/drivers/gpu/nvgpu/common/linux/debug_allocator.c index 766c8486..91ae0512 100644 --- a/drivers/gpu/nvgpu/common/linux/debug_allocator.c +++ b/drivers/gpu/nvgpu/common/linux/debug_allocator.c @@ -20,12 +20,6 @@ #include -void nvgpu_alloc_print_stats(struct nvgpu_allocator *__a, - struct seq_file *s, int lock) -{ - __a->ops->print_stats(__a, s, lock); -} - static int __alloc_show(struct seq_file *s, void *unused) { struct nvgpu_allocator *a = s->private; diff --git a/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c b/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c index 274e9c93..9b3fccf1 100644 --- a/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c @@ -311,7 +311,7 @@ static void nvgpu_bitmap_alloc_destroy(struct nvgpu_allocator *__a) nvgpu_kfree(nvgpu_alloc_to_gpu(__a), a); } -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ static void nvgpu_bitmap_print_stats(struct nvgpu_allocator *__a, struct seq_file *s, int lock) { @@ -347,7 +347,7 @@ static const struct nvgpu_allocator_ops bitmap_ops = { .fini = nvgpu_bitmap_alloc_destroy, -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ .print_stats = nvgpu_bitmap_print_stats, #endif }; diff --git a/drivers/gpu/nvgpu/common/mm/buddy_allocator.c b/drivers/gpu/nvgpu/common/mm/buddy_allocator.c index a2e6c44a..2938bfac 100644 --- a/drivers/gpu/nvgpu/common/mm/buddy_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/buddy_allocator.c @@ -1076,7 +1076,7 @@ static u64 nvgpu_buddy_alloc_space(struct nvgpu_allocator *a) return space; } -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ /* * Print the buddy allocator top level stats. If you pass @s as NULL then the * stats are printed to the kernel log. This lets this code be used for @@ -1174,7 +1174,7 @@ static const struct nvgpu_allocator_ops buddy_ops = { .fini = nvgpu_buddy_allocator_destroy, -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ .print_stats = nvgpu_buddy_print_stats, #endif }; diff --git a/drivers/gpu/nvgpu/common/mm/lockless_allocator.c b/drivers/gpu/nvgpu/common/mm/lockless_allocator.c index 8f712a14..04df7e3f 100644 --- a/drivers/gpu/nvgpu/common/mm/lockless_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/lockless_allocator.c @@ -116,7 +116,7 @@ static void nvgpu_lockless_alloc_destroy(struct nvgpu_allocator *a) nvgpu_kfree(nvgpu_alloc_to_gpu(a), pa); } -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ static void nvgpu_lockless_print_stats(struct nvgpu_allocator *a, struct seq_file *s, int lock) { @@ -146,7 +146,7 @@ static const struct nvgpu_allocator_ops pool_ops = { .fini = nvgpu_lockless_alloc_destroy, -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ .print_stats = nvgpu_lockless_print_stats, #endif }; diff --git a/drivers/gpu/nvgpu/common/mm/nvgpu_allocator.c b/drivers/gpu/nvgpu/common/mm/nvgpu_allocator.c index 1646d2b1..bc8d1b55 100644 --- a/drivers/gpu/nvgpu/common/mm/nvgpu_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/nvgpu_allocator.c @@ -114,6 +114,14 @@ void nvgpu_alloc_destroy(struct nvgpu_allocator *a) memset(a, 0, sizeof(*a)); } +#ifdef __KERNEL__ +void nvgpu_alloc_print_stats(struct nvgpu_allocator *__a, + struct seq_file *s, int lock) +{ + __a->ops->print_stats(__a, s, lock); +} +#endif + /* * Handle the common init stuff for a nvgpu_allocator. */ diff --git a/drivers/gpu/nvgpu/common/mm/page_allocator.c b/drivers/gpu/nvgpu/common/mm/page_allocator.c index 0eda13ec..72ff8f2d 100644 --- a/drivers/gpu/nvgpu/common/mm/page_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/page_allocator.c @@ -756,7 +756,7 @@ static void nvgpu_page_allocator_destroy(struct nvgpu_allocator *__a) alloc_unlock(__a); } -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ static void nvgpu_page_print_stats(struct nvgpu_allocator *__a, struct seq_file *s, int lock) { @@ -833,7 +833,7 @@ static const struct nvgpu_allocator_ops page_ops = { .fini = nvgpu_page_allocator_destroy, -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ .print_stats = nvgpu_page_print_stats, #endif }; diff --git a/drivers/gpu/nvgpu/include/nvgpu/allocator.h b/drivers/gpu/nvgpu/include/nvgpu/allocator.h index 30bfa750..ac8a0645 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/allocator.h +++ b/drivers/gpu/nvgpu/include/nvgpu/allocator.h @@ -17,8 +17,16 @@ #ifndef __NVGPU_ALLOCATOR_H__ #define __NVGPU_ALLOCATOR_H__ +#ifdef __KERNEL__ +/* + * The Linux kernel has this notion of seq_files for printing info to userspace. + * One of the allocator function pointers takes advantage of this and allows the + * debug output to be directed either to nvgpu_log() or a seq_file. + */ #include +#endif +#include #include #include @@ -72,7 +80,7 @@ struct nvgpu_allocator_ops { /* Destructor. */ void (*fini)(struct nvgpu_allocator *allocator); -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ /* Debugging. */ void (*print_stats)(struct nvgpu_allocator *allocator, struct seq_file *s, int lock); @@ -246,7 +254,7 @@ u64 nvgpu_alloc_space(struct nvgpu_allocator *a); void nvgpu_alloc_destroy(struct nvgpu_allocator *allocator); -#ifdef CONFIG_DEBUG_FS +#ifdef __KERNEL__ void nvgpu_alloc_print_stats(struct nvgpu_allocator *a, struct seq_file *s, int lock); #endif @@ -281,35 +289,36 @@ static inline void nvgpu_alloc_disable_dbg(struct nvgpu_allocator *a) /* * Debug stuff. */ +#ifdef __KERNEL__ #define __alloc_pstat(seq, allocator, fmt, arg...) \ do { \ - if (s) \ + if (seq) \ seq_printf(seq, fmt, ##arg); \ else \ alloc_dbg(allocator, fmt, ##arg); \ } while (0) +#endif -#define __alloc_dbg(a, fmt, arg...) \ - pr_info("%-25s %25s() " fmt, (a)->name, __func__, ##arg) +#define __alloc_dbg(a, fmt, arg...) \ + nvgpu_log((a)->g, gpu_dbg_alloc, "%25s " fmt, (a)->name, ##arg) -#if defined(ALLOCATOR_DEBUG) /* - * Always print the debug messages... - */ -#define alloc_dbg(a, fmt, arg...) __alloc_dbg(a, fmt, ##arg) -#else -/* - * Only print debug messages if debug is enabled for a given allocator. + * This gives finer control over debugging messages. By defining the + * ALLOCATOR_DEBUG macro prints for an allocator will only get made if + * that allocator's debug flag is set. + * + * Otherwise debugging is as normal: debug statements for all allocators + * if the GPU debugging mask bit is set. Note: even when ALLOCATOR_DEBUG + * is set gpu_dbg_alloc must still also be set to true. */ -#define alloc_dbg(a, fmt, arg...) \ - do { \ - if ((a)->debug) \ - __alloc_dbg((a), fmt, ##arg); \ +#if defined(ALLOCATOR_DEBUG) +#define alloc_dbg(a, fmt, arg...) \ + do { \ + if ((a)->debug) \ + __alloc_dbg((a), fmt, ##arg); \ } while (0) - +#else +#define alloc_dbg(a, fmt, arg...) __alloc_dbg(a, fmt, ##arg) #endif -#define balloc_pr(alloctor, format, arg...) \ - pr_info("%-25s %25s() " format, \ - alloctor->name, __func__, ##arg) #endif /* NVGPU_ALLOCATOR_H */ diff --git a/drivers/gpu/nvgpu/include/nvgpu/log.h b/drivers/gpu/nvgpu/include/nvgpu/log.h index a1110a59..11e6dacb 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/log.h +++ b/drivers/gpu/nvgpu/include/nvgpu/log.h @@ -69,6 +69,7 @@ enum nvgpu_log_categories { gpu_dbg_shutdown = BIT(18), /* GPU shutdown tracing. */ gpu_dbg_kmem = BIT(19), /* Kmem tracking debugging. */ gpu_dbg_pd_cache = BIT(20), /* PD cache traces. */ + gpu_dbg_alloc = BIT(21), /* Allocator debugging. */ gpu_dbg_mem = BIT(31), /* memory accesses; very verbose. */ }; -- cgit v1.2.2