From 2fa54c94a67e13d84df980d646674dde0ad27168 Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Wed, 21 Sep 2016 14:24:59 -0700 Subject: gpu: nvgpu: Remove global debugfs variable Remove a global debugfs variable and instead save the allocator debugfs root node in the gk20a struct. Bug 1799159 Change-Id: If4eed34fa24775e962001e34840b334658f2321c Signed-off-by: Alex Waterman Reviewed-on: http://git-master/r/1225611 (cherry picked from commit 1908fde10bb1fb60ce898ea329f5a441a3e4297a) Reviewed-on: http://git-master/r/1242390 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/fence_gk20a.c | 6 ++--- drivers/gpu/nvgpu/gk20a/gk20a.h | 1 + drivers/gpu/nvgpu/gk20a/gk20a_allocator.c | 27 +++++++++++++--------- drivers/gpu/nvgpu/gk20a/gk20a_allocator.h | 14 ++++++----- drivers/gpu/nvgpu/gk20a/gk20a_allocator_bitmap.c | 4 ++-- drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c | 11 +++++---- drivers/gpu/nvgpu/gk20a/gk20a_allocator_lockless.c | 6 +++-- drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c | 12 +++++----- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 10 ++++---- drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 2 +- drivers/gpu/nvgpu/vgpu/mm_vgpu.c | 6 ++++- 11 files changed, 58 insertions(+), 41 deletions(-) (limited to 'drivers/gpu/nvgpu') diff --git a/drivers/gpu/nvgpu/gk20a/fence_gk20a.c b/drivers/gpu/nvgpu/gk20a/fence_gk20a.c index 4673f28c..737ad1b1 100644 --- a/drivers/gpu/nvgpu/gk20a/fence_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fence_gk20a.c @@ -129,9 +129,9 @@ int gk20a_alloc_fence_pool(struct channel_gk20a *c, int count) if (!fence_pool) return -ENOMEM; - err = gk20a_lockless_allocator_init(&c->fence_allocator, - "fence_pool", (size_t)fence_pool, size, - sizeof(struct gk20a_fence), 0); + err = gk20a_lockless_allocator_init(c->g, &c->fence_allocator, + "fence_pool", (size_t)fence_pool, size, + sizeof(struct gk20a_fence), 0); if (err) goto fail; diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 635dddc4..58e69cbe 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -834,6 +834,7 @@ struct gk20a { struct dentry *debugfs_timeslice_medium_priority_us; struct dentry *debugfs_timeslice_high_priority_us; struct dentry *debugfs_runlist_interleave; + struct dentry *debugfs_allocators; struct dentry *debugfs_xve; #endif struct gk20a_ctxsw_ucode_info ctxsw_ucode_info; diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c index 15d5b732..3129b07c 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.c @@ -19,14 +19,13 @@ #include #include +#include "gk20a.h" #include "mm_gk20a.h" #include "platform_gk20a.h" #include "gk20a_allocator.h" u32 gk20a_alloc_tracing_on; -static struct dentry *gk20a_alloc_debugfs_root; - u64 gk20a_alloc_length(struct gk20a_allocator *a) { if (a->ops->length) @@ -152,6 +151,7 @@ void gk20a_alloc_print_stats(struct gk20a_allocator *__a, __a->ops->print_stats(__a, s, lock); } +#ifdef CONFIG_DEBUG_FS static int __alloc_show(struct seq_file *s, void *unused) { struct gk20a_allocator *a = s->private; @@ -172,35 +172,40 @@ static const struct file_operations __alloc_fops = { .llseek = seq_lseek, .release = single_release, }; +#endif -void gk20a_init_alloc_debug(struct gk20a_allocator *a) +void gk20a_init_alloc_debug(struct gk20a *g, struct gk20a_allocator *a) { - if (!gk20a_alloc_debugfs_root) +#ifdef CONFIG_DEBUG_FS + if (!g->debugfs_allocators) return; a->debugfs_entry = debugfs_create_file(a->name, S_IRUGO, - gk20a_alloc_debugfs_root, + g->debugfs_allocators, a, &__alloc_fops); +#endif } void gk20a_fini_alloc_debug(struct gk20a_allocator *a) { - if (!gk20a_alloc_debugfs_root) - return; - +#ifdef CONFIG_DEBUG_FS if (!IS_ERR_OR_NULL(a->debugfs_entry)) debugfs_remove(a->debugfs_entry); +#endif } void gk20a_alloc_debugfs_init(struct device *dev) { +#ifdef CONFIG_DEBUG_FS struct gk20a_platform *platform = dev_get_drvdata(dev); struct dentry *gpu_root = platform->debugfs; + struct gk20a *g = get_gk20a(dev); - gk20a_alloc_debugfs_root = debugfs_create_dir("allocators", gpu_root); - if (IS_ERR_OR_NULL(gk20a_alloc_debugfs_root)) + g->debugfs_allocators = debugfs_create_dir("allocators", gpu_root); + if (IS_ERR_OR_NULL(g->debugfs_allocators)) return; - debugfs_create_u32("tracing", 0664, gk20a_alloc_debugfs_root, + debugfs_create_u32("tracing", 0664, g->debugfs_allocators, &gk20a_alloc_tracing_on); +#endif } diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h index dc065ffa..b12926b3 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator.h @@ -26,6 +26,7 @@ struct gk20a_allocator; struct gk20a_alloc_carveout; struct vm_gk20a; +struct gk20a; /* * Operations for an allocator to implement. @@ -173,25 +174,25 @@ static inline void alloc_unlock(struct gk20a_allocator *a) /* * Buddy allocator specific initializers. */ -int __gk20a_buddy_allocator_init(struct gk20a_allocator *a, +int __gk20a_buddy_allocator_init(struct gk20a *g, struct gk20a_allocator *a, struct vm_gk20a *vm, const char *name, u64 base, u64 size, u64 blk_size, u64 max_order, u64 flags); -int gk20a_buddy_allocator_init(struct gk20a_allocator *allocator, +int gk20a_buddy_allocator_init(struct gk20a *g, struct gk20a_allocator *a, const char *name, u64 base, u64 size, u64 blk_size, u64 flags); /* * Bitmap initializers. */ -int gk20a_bitmap_allocator_init(struct gk20a_allocator *__a, +int gk20a_bitmap_allocator_init(struct gk20a *g, struct gk20a_allocator *a, const char *name, u64 base, u64 length, u64 blk_size, u64 flags); /* * Page allocator initializers. */ -int gk20a_page_allocator_init(struct gk20a_allocator *__a, +int gk20a_page_allocator_init(struct gk20a *g, struct gk20a_allocator *a, const char *name, u64 base, u64 length, u64 blk_size, u64 flags); @@ -200,7 +201,7 @@ int gk20a_page_allocator_init(struct gk20a_allocator *__a, * Note: This allocator can only allocate fixed-size structures of a * pre-defined size. */ -int gk20a_lockless_allocator_init(struct gk20a_allocator *__a, +int gk20a_lockless_allocator_init(struct gk20a *g, struct gk20a_allocator *a, const char *name, u64 base, u64 length, u64 struct_size, u64 flags); @@ -234,8 +235,9 @@ void gk20a_alloc_print_stats(struct gk20a_allocator *a, /* * Common functionality for the internals of the allocators. */ -void gk20a_init_alloc_debug(struct gk20a_allocator *a); +void gk20a_init_alloc_debug(struct gk20a *g, 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, bool dbg, const struct gk20a_allocator_ops *ops); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_bitmap.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_bitmap.c index 03ccbe85..f98e0782 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_bitmap.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_bitmap.c @@ -371,7 +371,7 @@ static const struct gk20a_allocator_ops bitmap_ops = { }; -int gk20a_bitmap_allocator_init(struct gk20a_allocator *__a, +int gk20a_bitmap_allocator_init(struct gk20a *g, struct gk20a_allocator *__a, const char *name, u64 base, u64 length, u64 blk_size, u64 flags) { @@ -426,7 +426,7 @@ int gk20a_bitmap_allocator_init(struct gk20a_allocator *__a, wmb(); a->inited = true; - gk20a_init_alloc_debug(__a); + gk20a_init_alloc_debug(g, __a); alloc_dbg(__a, "New allocator: type bitmap\n"); alloc_dbg(__a, " base 0x%llx\n", a->base); alloc_dbg(__a, " bit_offs 0x%llx\n", a->bit_offs); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c index a8a031be..3715e9f8 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_buddy.c @@ -1218,7 +1218,7 @@ static const struct gk20a_allocator_ops buddy_ops = { * will try and pick a reasonable max order. * @flags: Extra flags necessary. See GPU_BALLOC_*. */ -int __gk20a_buddy_allocator_init(struct gk20a_allocator *__a, +int __gk20a_buddy_allocator_init(struct gk20a *g, struct gk20a_allocator *__a, struct vm_gk20a *vm, const char *name, u64 base, u64 size, u64 blk_size, u64 max_order, u64 flags) @@ -1303,7 +1303,7 @@ int __gk20a_buddy_allocator_init(struct gk20a_allocator *__a, wmb(); a->initialized = 1; - gk20a_init_alloc_debug(__a); + gk20a_init_alloc_debug(g, __a); alloc_dbg(__a, "New allocator: type buddy\n"); alloc_dbg(__a, " base 0x%llx\n", a->base); alloc_dbg(__a, " size 0x%llx\n", a->length); @@ -1318,9 +1318,10 @@ fail: return err; } -int gk20a_buddy_allocator_init(struct gk20a_allocator *a, const char *name, - u64 base, u64 size, u64 blk_size, u64 flags) +int gk20a_buddy_allocator_init(struct gk20a *g, struct gk20a_allocator *a, + const char *name, u64 base, u64 size, + u64 blk_size, u64 flags) { - return __gk20a_buddy_allocator_init(a, NULL, name, + return __gk20a_buddy_allocator_init(g, a, NULL, name, base, size, blk_size, 0, 0); } diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_lockless.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_lockless.c index 32455c98..5b011d8c 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_lockless.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_lockless.c @@ -102,6 +102,8 @@ static void gk20a_lockless_alloc_destroy(struct gk20a_allocator *a) { struct gk20a_lockless_allocator *pa = a->priv; + gk20a_fini_alloc_debug(a); + vfree(pa->next); kfree(pa); } @@ -137,7 +139,7 @@ static const struct gk20a_allocator_ops pool_ops = { .print_stats = gk20a_lockless_print_stats, }; -int gk20a_lockless_allocator_init(struct gk20a_allocator *__a, +int gk20a_lockless_allocator_init(struct gk20a *g, struct gk20a_allocator *__a, const char *name, u64 base, u64 length, u64 blk_size, u64 flags) { @@ -189,7 +191,7 @@ int gk20a_lockless_allocator_init(struct gk20a_allocator *__a, wmb(); a->inited = true; - gk20a_init_alloc_debug(__a); + gk20a_init_alloc_debug(g, __a); alloc_dbg(__a, "New allocator: type lockless\n"); alloc_dbg(__a, " base 0x%llx\n", a->base); alloc_dbg(__a, " nodes %d\n", a->nr_nodes); diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c index 94d30abf..f670fd98 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_allocator_page.c @@ -866,9 +866,9 @@ static int gk20a_page_alloc_init_slabs(struct gk20a_page_allocator *a) return 0; } -int gk20a_page_allocator_init(struct gk20a_allocator *__a, - const char *name, u64 base, u64 length, - u64 blk_size, u64 flags) +int gk20a_page_allocator_init(struct gk20a *g, struct gk20a_allocator *__a, + const char *name, u64 base, u64 length, + u64 blk_size, u64 flags) { struct gk20a_page_allocator *a; char buddy_name[sizeof(__a->name)]; @@ -914,12 +914,12 @@ int gk20a_page_allocator_init(struct gk20a_allocator *__a, snprintf(buddy_name, sizeof(buddy_name), "%s-src", name); - err = gk20a_buddy_allocator_init(&a->source_allocator, buddy_name, base, - length, blk_size, 0); + err = gk20a_buddy_allocator_init(g, &a->source_allocator, buddy_name, + base, length, blk_size, 0); if (err) goto fail; - gk20a_init_alloc_debug(__a); + gk20a_init_alloc_debug(g, __a); palloc_dbg(a, "New allocator: type page\n"); palloc_dbg(a, " base 0x%llx\n", a->base); palloc_dbg(a, " size 0x%llx\n", a->length); diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 079e42ba..9906b77b 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -926,12 +926,12 @@ static int gk20a_init_vidmem(struct mm_gk20a *mm) * initialization requires vidmem but we want to use the CE to zero * out vidmem before allocating it... */ - err = gk20a_page_allocator_init(&g->mm.vidmem.bootstrap_allocator, + err = gk20a_page_allocator_init(g, &g->mm.vidmem.bootstrap_allocator, "vidmem-bootstrap", bootstrap_base, bootstrap_size, SZ_4K, 0); - err = gk20a_page_allocator_init(&g->mm.vidmem.allocator, + err = gk20a_page_allocator_init(g, &g->mm.vidmem.allocator, "vidmem", base, size - base, default_page_size, @@ -4336,7 +4336,7 @@ int gk20a_init_vm(struct mm_gk20a *mm, snprintf(alloc_name, sizeof(alloc_name), "gk20a_%s-fixed", name); - err = __gk20a_buddy_allocator_init(&vm->fixed, + err = __gk20a_buddy_allocator_init(g, &vm->fixed, vm, alloc_name, small_vma_start, g->separate_fixed_allocs, @@ -4354,6 +4354,7 @@ int gk20a_init_vm(struct mm_gk20a *mm, snprintf(alloc_name, sizeof(alloc_name), "gk20a_%s-%dKB", name, vm->gmmu_page_sizes[gmmu_page_size_small] >> 10); err = __gk20a_buddy_allocator_init( + g, &vm->vma[gmmu_page_size_small], vm, alloc_name, small_vma_start, @@ -4369,6 +4370,7 @@ int gk20a_init_vm(struct mm_gk20a *mm, snprintf(alloc_name, sizeof(alloc_name), "gk20a_%s-%dKB", name, vm->gmmu_page_sizes[gmmu_page_size_big] >> 10); err = __gk20a_buddy_allocator_init( + g, &vm->vma[gmmu_page_size_big], vm, alloc_name, large_vma_start, @@ -4385,7 +4387,7 @@ int gk20a_init_vm(struct mm_gk20a *mm, /* * kernel reserved VMA is at the end of the aperture */ - err = __gk20a_buddy_allocator_init(&vm->vma[gmmu_page_size_kernel], + err = __gk20a_buddy_allocator_init(g, &vm->vma[gmmu_page_size_kernel], vm, alloc_name, kernel_vma_start, kernel_vma_limit - kernel_vma_start, diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index 0a9a1fde..cd4bab76 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c @@ -3651,7 +3651,7 @@ static int pmu_process_init_msg(struct pmu_gk20a *pmu, pv->get_pmu_init_msg_pmu_sw_mg_size(init)) & ~(PMU_DMEM_ALLOC_ALIGNMENT - 1); u32 size = end - start; - gk20a_bitmap_allocator_init(&pmu->dmem, "gk20a_pmu_dmem", + gk20a_bitmap_allocator_init(g, &pmu->dmem, "gk20a_pmu_dmem", start, size, PMU_DMEM_ALLOC_ALIGNMENT, 0); } diff --git a/drivers/gpu/nvgpu/vgpu/mm_vgpu.c b/drivers/gpu/nvgpu/vgpu/mm_vgpu.c index b256598f..9a305fd5 100644 --- a/drivers/gpu/nvgpu/vgpu/mm_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/mm_vgpu.c @@ -371,6 +371,7 @@ static int vgpu_vm_alloc_share(struct gk20a_as_share *as_share, gmmu_page_sizes[gmmu_page_size_small] >> 10); err = __gk20a_buddy_allocator_init( + g, &vm->vma[gmmu_page_size_small], vm, name, small_vma_start, @@ -386,6 +387,7 @@ static int vgpu_vm_alloc_share(struct gk20a_as_share *as_share, snprintf(name, sizeof(name), "gk20a_as_%d-%dKB", as_share->id, gmmu_page_sizes[gmmu_page_size_big] >> 10); err = __gk20a_buddy_allocator_init( + g, &vm->vma[gmmu_page_size_big], vm, name, large_vma_start, @@ -402,7 +404,9 @@ static int vgpu_vm_alloc_share(struct gk20a_as_share *as_share, /* * kernel reserved VMA is at the end of the aperture */ - err = __gk20a_buddy_allocator_init(&vm->vma[gmmu_page_size_kernel], + err = __gk20a_buddy_allocator_init( + g, + &vm->vma[gmmu_page_size_kernel], vm, name, kernel_vma_start, kernel_vma_limit - kernel_vma_start, -- cgit v1.2.2