summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2017-09-14 16:43:24 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-09-20 00:52:56 -0400
commit3e841d6a37ceddaf8aa224b597ab4927155d226e (patch)
treed01d87726e0a5e74e85457c1ac38461048712700 /drivers/gpu
parentb9082f076087d5420a5d7fe492ffefb2402397cc (diff)
gpu: nvgpu: Fix kmem debugging
Make the kmem debugging prints much more easily usable. Previously the prints would only take effect if the full tracking was enabled: CONFIG_NVGPU_TRACK_MEM_USAGE However, there are many times when just the debug prints would be nice to have by simply setting the log mask bit in the log mask. echo 0x80000 > /sys/kernel/debug/<gpu>/log_mask Also this change now uses the real nvgpu_log() function instead of the legacy nvgpu_dbg() function. This makes the logging appear with proper GPU printing as well. Change-Id: If545da3d357d38fe8252e7d548c6765b995cd3d7 Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1560248 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/common/linux/kmem.c67
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/kmem.h4
2 files changed, 47 insertions, 24 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/kmem.c b/drivers/gpu/nvgpu/common/linux/kmem.c
index 41aaa729..04df552c 100644
--- a/drivers/gpu/nvgpu/common/linux/kmem.c
+++ b/drivers/gpu/nvgpu/common/linux/kmem.c
@@ -71,51 +71,85 @@ void nvgpu_big_free(struct gk20a *g, void *p)
71 71
72void *__nvgpu_kmalloc(struct gk20a *g, size_t size, unsigned long ip) 72void *__nvgpu_kmalloc(struct gk20a *g, size_t size, unsigned long ip)
73{ 73{
74 void *alloc;
75
74#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 76#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
75 return __nvgpu_track_kmalloc(g, size, ip); 77 alloc = __nvgpu_track_kmalloc(g, size, ip);
76#else 78#else
77 return kmalloc(size, GFP_KERNEL); 79 alloc = kmalloc(size, GFP_KERNEL);
78#endif 80#endif
81
82 kmem_dbg(g, "kmalloc: size=%-6ld addr=0x%p gfp=0x%08x",
83 size, alloc, GFP_KERNEL);
84
85 return alloc;
79} 86}
80 87
81void *__nvgpu_kzalloc(struct gk20a *g, size_t size, unsigned long ip) 88void *__nvgpu_kzalloc(struct gk20a *g, size_t size, unsigned long ip)
82{ 89{
90 void *alloc;
91
83#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 92#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
84 return __nvgpu_track_kzalloc(g, size, ip); 93 alloc = __nvgpu_track_kzalloc(g, size, ip);
85#else 94#else
86 return kzalloc(size, GFP_KERNEL); 95 alloc = kzalloc(size, GFP_KERNEL);
87#endif 96#endif
97
98 kmem_dbg(g, "kzalloc: size=%-6ld addr=0x%p gfp=0x%08x",
99 size, alloc, GFP_KERNEL);
100
101 return alloc;
88} 102}
89 103
90void *__nvgpu_kcalloc(struct gk20a *g, size_t n, size_t size, unsigned long ip) 104void *__nvgpu_kcalloc(struct gk20a *g, size_t n, size_t size, unsigned long ip)
91{ 105{
106 void *alloc;
107
92#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 108#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
93 return __nvgpu_track_kcalloc(g, n, size, ip); 109 alloc = __nvgpu_track_kcalloc(g, n, size, ip);
94#else 110#else
95 return kcalloc(n, size, GFP_KERNEL); 111 alloc = kcalloc(n, size, GFP_KERNEL);
96#endif 112#endif
113
114 kmem_dbg(g, "kcalloc: size=%-6ld addr=0x%p gfp=0x%08x",
115 n * size, alloc, GFP_KERNEL);
116
117 return alloc;
97} 118}
98 119
99void *__nvgpu_vmalloc(struct gk20a *g, unsigned long size, unsigned long ip) 120void *__nvgpu_vmalloc(struct gk20a *g, unsigned long size, unsigned long ip)
100{ 121{
122 void *alloc;
123
101#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 124#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
102 return __nvgpu_track_vmalloc(g, size, ip); 125 alloc = __nvgpu_track_vmalloc(g, size, ip);
103#else 126#else
104 return vmalloc(size); 127 alloc = vmalloc(size);
105#endif 128#endif
129
130 kmem_dbg(g, "vmalloc: size=%-6ld addr=0x%p", size, alloc);
131
132 return alloc;
106} 133}
107 134
108void *__nvgpu_vzalloc(struct gk20a *g, unsigned long size, unsigned long ip) 135void *__nvgpu_vzalloc(struct gk20a *g, unsigned long size, unsigned long ip)
109{ 136{
137 void *alloc;
138
110#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 139#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
111 return __nvgpu_track_vzalloc(g, size, ip); 140 alloc = __nvgpu_track_vzalloc(g, size, ip);
112#else 141#else
113 return vzalloc(size); 142 alloc = vzalloc(size);
114#endif 143#endif
144
145 kmem_dbg(g, "vzalloc: size=%-6ld addr=0x%p", size, alloc);
146
147 return alloc;
115} 148}
116 149
117void __nvgpu_kfree(struct gk20a *g, void *addr) 150void __nvgpu_kfree(struct gk20a *g, void *addr)
118{ 151{
152 kmem_dbg(g, "kfree: addr=0x%p", addr);
119#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 153#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
120 __nvgpu_track_kfree(g, addr); 154 __nvgpu_track_kfree(g, addr);
121#else 155#else
@@ -125,6 +159,7 @@ void __nvgpu_kfree(struct gk20a *g, void *addr)
125 159
126void __nvgpu_vfree(struct gk20a *g, void *addr) 160void __nvgpu_vfree(struct gk20a *g, void *addr)
127{ 161{
162 kmem_dbg(g, "vfree: addr=0x%p", addr);
128#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE 163#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
129 __nvgpu_track_vfree(g, addr); 164 __nvgpu_track_vfree(g, addr);
130#else 165#else
@@ -292,7 +327,6 @@ void *__nvgpu_track_vmalloc(struct gk20a *g, unsigned long size,
292 if (!alloc) 327 if (!alloc)
293 return NULL; 328 return NULL;
294 329
295 kmem_dbg("vmalloc: size=%-6ld addr=0x%p", size, alloc);
296 __nvgpu_check_valloc_size(size); 330 __nvgpu_check_valloc_size(size);
297 331
298 /* 332 /*
@@ -313,7 +347,6 @@ void *__nvgpu_track_vzalloc(struct gk20a *g, unsigned long size,
313 if (!alloc) 347 if (!alloc)
314 return NULL; 348 return NULL;
315 349
316 kmem_dbg("vzalloc: size=%-6ld addr=0x%p", size, alloc);
317 __nvgpu_check_valloc_size(size); 350 __nvgpu_check_valloc_size(size);
318 351
319 /* 352 /*
@@ -333,8 +366,6 @@ void *__nvgpu_track_kmalloc(struct gk20a *g, size_t size, unsigned long ip)
333 if (!alloc) 366 if (!alloc)
334 return NULL; 367 return NULL;
335 368
336 kmem_dbg("kmalloc: size=%-6ld addr=0x%p gfp=0x%08x",
337 size, alloc, GFP_KERNEL);
338 __nvgpu_check_kalloc_size(size); 369 __nvgpu_check_kalloc_size(size);
339 370
340 __nvgpu_save_kmem_alloc(g->kmallocs, size, roundup_pow_of_two(size), 371 __nvgpu_save_kmem_alloc(g->kmallocs, size, roundup_pow_of_two(size),
@@ -350,8 +381,6 @@ void *__nvgpu_track_kzalloc(struct gk20a *g, size_t size, unsigned long ip)
350 if (!alloc) 381 if (!alloc)
351 return NULL; 382 return NULL;
352 383
353 kmem_dbg("kzalloc: size=%-6ld addr=0x%p gfp=0x%08x",
354 size, alloc, GFP_KERNEL);
355 __nvgpu_check_kalloc_size(size); 384 __nvgpu_check_kalloc_size(size);
356 385
357 __nvgpu_save_kmem_alloc(g->kmallocs, size, roundup_pow_of_two(size), 386 __nvgpu_save_kmem_alloc(g->kmallocs, size, roundup_pow_of_two(size),
@@ -368,8 +397,6 @@ void *__nvgpu_track_kcalloc(struct gk20a *g, size_t n, size_t size,
368 if (!alloc) 397 if (!alloc)
369 return NULL; 398 return NULL;
370 399
371 kmem_dbg("kcalloc: size=%-6ld addr=0x%p gfp=0x%08x",
372 n * size, alloc, GFP_KERNEL);
373 __nvgpu_check_kalloc_size(n * size); 400 __nvgpu_check_kalloc_size(n * size);
374 401
375 __nvgpu_save_kmem_alloc(g->kmallocs, n * size, 402 __nvgpu_save_kmem_alloc(g->kmallocs, n * size,
@@ -390,8 +417,6 @@ void __nvgpu_track_vfree(struct gk20a *g, void *addr)
390 417
391 vfree(addr); 418 vfree(addr);
392 419
393 kmem_dbg("vfree: addr=0x%p", addr);
394
395 __nvgpu_free_kmem_alloc(g->vmallocs, (u64)(uintptr_t)addr); 420 __nvgpu_free_kmem_alloc(g->vmallocs, (u64)(uintptr_t)addr);
396} 421}
397 422
@@ -402,8 +427,6 @@ void __nvgpu_track_kfree(struct gk20a *g, void *addr)
402 427
403 kfree(addr); 428 kfree(addr);
404 429
405 kmem_dbg("kfree: addr=0x%p", addr);
406
407 __nvgpu_free_kmem_alloc(g->kmallocs, (u64)(uintptr_t)addr); 430 __nvgpu_free_kmem_alloc(g->kmallocs, (u64)(uintptr_t)addr);
408} 431}
409 432
diff --git a/drivers/gpu/nvgpu/include/nvgpu/kmem.h b/drivers/gpu/nvgpu/include/nvgpu/kmem.h
index ff4b7820..db035060 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/kmem.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/kmem.h
@@ -185,8 +185,8 @@ void nvgpu_kmem_cache_free(struct nvgpu_kmem_cache *cache, void *ptr);
185 */ 185 */
186#define nvgpu_vfree(g, addr) __nvgpu_vfree(g, addr) 186#define nvgpu_vfree(g, addr) __nvgpu_vfree(g, addr)
187 187
188#define kmem_dbg(fmt, args...) \ 188#define kmem_dbg(g, fmt, args...) \
189 gk20a_dbg(gpu_dbg_kmem, fmt, ##args) 189 nvgpu_log(g, gpu_dbg_kmem, fmt, ##args)
190 190
191/** 191/**
192 * nvgpu_kmem_init - Initialize the kmem tracking stuff. 192 * nvgpu_kmem_init - Initialize the kmem tracking stuff.