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>
This commit is contained in:
Alex Waterman
2017-09-14 13:43:24 -07:00
committed by mobile promotions
parent b9082f0760
commit 3e841d6a37
2 changed files with 47 additions and 24 deletions

View File

@@ -71,51 +71,85 @@ void nvgpu_big_free(struct gk20a *g, void *p)
void *__nvgpu_kmalloc(struct gk20a *g, size_t size, unsigned long ip)
{
void *alloc;
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
return __nvgpu_track_kmalloc(g, size, ip);
alloc = __nvgpu_track_kmalloc(g, size, ip);
#else
return kmalloc(size, GFP_KERNEL);
alloc = kmalloc(size, GFP_KERNEL);
#endif
kmem_dbg(g, "kmalloc: size=%-6ld addr=0x%p gfp=0x%08x",
size, alloc, GFP_KERNEL);
return alloc;
}
void *__nvgpu_kzalloc(struct gk20a *g, size_t size, unsigned long ip)
{
void *alloc;
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
return __nvgpu_track_kzalloc(g, size, ip);
alloc = __nvgpu_track_kzalloc(g, size, ip);
#else
return kzalloc(size, GFP_KERNEL);
alloc = kzalloc(size, GFP_KERNEL);
#endif
kmem_dbg(g, "kzalloc: size=%-6ld addr=0x%p gfp=0x%08x",
size, alloc, GFP_KERNEL);
return alloc;
}
void *__nvgpu_kcalloc(struct gk20a *g, size_t n, size_t size, unsigned long ip)
{
void *alloc;
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
return __nvgpu_track_kcalloc(g, n, size, ip);
alloc = __nvgpu_track_kcalloc(g, n, size, ip);
#else
return kcalloc(n, size, GFP_KERNEL);
alloc = kcalloc(n, size, GFP_KERNEL);
#endif
kmem_dbg(g, "kcalloc: size=%-6ld addr=0x%p gfp=0x%08x",
n * size, alloc, GFP_KERNEL);
return alloc;
}
void *__nvgpu_vmalloc(struct gk20a *g, unsigned long size, unsigned long ip)
{
void *alloc;
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
return __nvgpu_track_vmalloc(g, size, ip);
alloc = __nvgpu_track_vmalloc(g, size, ip);
#else
return vmalloc(size);
alloc = vmalloc(size);
#endif
kmem_dbg(g, "vmalloc: size=%-6ld addr=0x%p", size, alloc);
return alloc;
}
void *__nvgpu_vzalloc(struct gk20a *g, unsigned long size, unsigned long ip)
{
void *alloc;
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
return __nvgpu_track_vzalloc(g, size, ip);
alloc = __nvgpu_track_vzalloc(g, size, ip);
#else
return vzalloc(size);
alloc = vzalloc(size);
#endif
kmem_dbg(g, "vzalloc: size=%-6ld addr=0x%p", size, alloc);
return alloc;
}
void __nvgpu_kfree(struct gk20a *g, void *addr)
{
kmem_dbg(g, "kfree: addr=0x%p", addr);
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
__nvgpu_track_kfree(g, addr);
#else
@@ -125,6 +159,7 @@ void __nvgpu_kfree(struct gk20a *g, void *addr)
void __nvgpu_vfree(struct gk20a *g, void *addr)
{
kmem_dbg(g, "vfree: addr=0x%p", addr);
#ifdef CONFIG_NVGPU_TRACK_MEM_USAGE
__nvgpu_track_vfree(g, addr);
#else
@@ -292,7 +327,6 @@ void *__nvgpu_track_vmalloc(struct gk20a *g, unsigned long size,
if (!alloc)
return NULL;
kmem_dbg("vmalloc: size=%-6ld addr=0x%p", size, alloc);
__nvgpu_check_valloc_size(size);
/*
@@ -313,7 +347,6 @@ void *__nvgpu_track_vzalloc(struct gk20a *g, unsigned long size,
if (!alloc)
return NULL;
kmem_dbg("vzalloc: size=%-6ld addr=0x%p", size, alloc);
__nvgpu_check_valloc_size(size);
/*
@@ -333,8 +366,6 @@ void *__nvgpu_track_kmalloc(struct gk20a *g, size_t size, unsigned long ip)
if (!alloc)
return NULL;
kmem_dbg("kmalloc: size=%-6ld addr=0x%p gfp=0x%08x",
size, alloc, GFP_KERNEL);
__nvgpu_check_kalloc_size(size);
__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)
if (!alloc)
return NULL;
kmem_dbg("kzalloc: size=%-6ld addr=0x%p gfp=0x%08x",
size, alloc, GFP_KERNEL);
__nvgpu_check_kalloc_size(size);
__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,
if (!alloc)
return NULL;
kmem_dbg("kcalloc: size=%-6ld addr=0x%p gfp=0x%08x",
n * size, alloc, GFP_KERNEL);
__nvgpu_check_kalloc_size(n * size);
__nvgpu_save_kmem_alloc(g->kmallocs, n * size,
@@ -390,8 +417,6 @@ void __nvgpu_track_vfree(struct gk20a *g, void *addr)
vfree(addr);
kmem_dbg("vfree: addr=0x%p", addr);
__nvgpu_free_kmem_alloc(g->vmallocs, (u64)(uintptr_t)addr);
}
@@ -402,8 +427,6 @@ void __nvgpu_track_kfree(struct gk20a *g, void *addr)
kfree(addr);
kmem_dbg("kfree: addr=0x%p", addr);
__nvgpu_free_kmem_alloc(g->kmallocs, (u64)(uintptr_t)addr);
}

View File

@@ -185,8 +185,8 @@ void nvgpu_kmem_cache_free(struct nvgpu_kmem_cache *cache, void *ptr);
*/
#define nvgpu_vfree(g, addr) __nvgpu_vfree(g, addr)
#define kmem_dbg(fmt, args...) \
gk20a_dbg(gpu_dbg_kmem, fmt, ##args)
#define kmem_dbg(g, fmt, args...) \
nvgpu_log(g, gpu_dbg_kmem, fmt, ##args)
/**
* nvgpu_kmem_init - Initialize the kmem tracking stuff.