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/include/nvgpu/allocator.h | 49 +++++++++++++++++------------ drivers/gpu/nvgpu/include/nvgpu/log.h | 1 + 2 files changed, 30 insertions(+), 20 deletions(-) (limited to 'drivers/gpu/nvgpu/include') 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