diff --git a/drivers/gpu/nvgpu/common/init/nvgpu_init.c b/drivers/gpu/nvgpu/common/init/nvgpu_init.c index 3bbf60ee6..61068908b 100644 --- a/drivers/gpu/nvgpu/common/init/nvgpu_init.c +++ b/drivers/gpu/nvgpu/common/init/nvgpu_init.c @@ -1,7 +1,7 @@ /* * GK20A Graphics * - * Copyright (c) 2011-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -22,6 +22,7 @@ * DEALINGS IN THE SOFTWARE. */ +#include #include #include #include @@ -1138,6 +1139,8 @@ static void gk20a_free_cb(struct nvgpu_ref *refcount) nvgpu_sw_quiesce_remove_support(g); + gk20a_debug_deinit(g); + if (g->gfree != NULL) { g->gfree(g); } diff --git a/drivers/gpu/nvgpu/common/mm/allocators/bitmap_allocator.c b/drivers/gpu/nvgpu/common/mm/allocators/bitmap_allocator.c index 25976a48f..1697160ba 100644 --- a/drivers/gpu/nvgpu/common/mm/allocators/bitmap_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/allocators/bitmap_allocator.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -349,6 +349,10 @@ static void nvgpu_bitmap_alloc_destroy(struct nvgpu_allocator *na) struct nvgpu_bitmap_alloc *alloc; struct nvgpu_rbtree_node *node = NULL; + alloc_lock(na); + + nvgpu_fini_alloc_debug(na); + /* * Kill any outstanding allocations. */ @@ -365,6 +369,8 @@ static void nvgpu_bitmap_alloc_destroy(struct nvgpu_allocator *na) nvgpu_kmem_cache_destroy(a->meta_data_cache); nvgpu_kfree(nvgpu_alloc_to_gpu(na), a->bitmap); nvgpu_kfree(nvgpu_alloc_to_gpu(na), a); + + alloc_unlock(na); } #ifdef __KERNEL__ @@ -493,9 +499,7 @@ int nvgpu_bitmap_allocator_init(struct gk20a *g, struct nvgpu_allocator *na, nvgpu_smp_wmb(); a->inited = true; -#ifdef CONFIG_DEBUG_FS nvgpu_init_alloc_debug(g, na); -#endif alloc_dbg(na, "New allocator: type bitmap"); alloc_dbg(na, " base 0x%llx", a->base); alloc_dbg(na, " bit_offs 0x%llx", a->bit_offs); diff --git a/drivers/gpu/nvgpu/common/mm/allocators/buddy_allocator.c b/drivers/gpu/nvgpu/common/mm/allocators/buddy_allocator.c index b4211a2cd..868e7ac13 100644 --- a/drivers/gpu/nvgpu/common/mm/allocators/buddy_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/allocators/buddy_allocator.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -302,9 +302,7 @@ static void nvgpu_buddy_allocator_destroy(struct nvgpu_allocator *na) alloc_lock(na); -#ifdef CONFIG_DEBUG_FS nvgpu_fini_alloc_debug(na); -#endif /* * Free the fixed allocs first. @@ -1543,9 +1541,7 @@ int nvgpu_buddy_allocator_init(struct gk20a *g, struct nvgpu_allocator *na, nvgpu_smp_wmb(); a->initialized = true; -#ifdef CONFIG_DEBUG_FS nvgpu_init_alloc_debug(g, na); -#endif alloc_dbg(na, "New allocator: type buddy"); alloc_dbg(na, " base 0x%llx", a->base); alloc_dbg(na, " size 0x%llx", a->length); diff --git a/drivers/gpu/nvgpu/common/mm/allocators/page_allocator.c b/drivers/gpu/nvgpu/common/mm/allocators/page_allocator.c index 790869910..4300381d7 100644 --- a/drivers/gpu/nvgpu/common/mm/allocators/page_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/allocators/page_allocator.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -918,6 +918,7 @@ static void nvgpu_page_allocator_destroy(struct nvgpu_allocator *na) struct nvgpu_page_allocator *a = page_allocator(na); alloc_lock(na); + nvgpu_fini_alloc_debug(na); nvgpu_kfree(nvgpu_alloc_to_gpu(na), a); na->priv = NULL; alloc_unlock(na); @@ -1114,9 +1115,7 @@ int nvgpu_page_allocator_init(struct gk20a *g, struct nvgpu_allocator *na, goto fail; } -#ifdef CONFIG_DEBUG_FS nvgpu_init_alloc_debug(g, na); -#endif palloc_dbg(a, "New allocator: type page"); palloc_dbg(a, " base 0x%llx", a->base); palloc_dbg(a, " size 0x%llx", a->length); diff --git a/drivers/gpu/nvgpu/include/nvgpu/allocator.h b/drivers/gpu/nvgpu/include/nvgpu/allocator.h index 6b8a11c11..283c23c05 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/allocator.h +++ b/drivers/gpu/nvgpu/include/nvgpu/allocator.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2021, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -789,7 +789,11 @@ void nvgpu_init_alloc_debug(struct gk20a *g, struct nvgpu_allocator *a); * @param[in] a Pointer to nvgpu allocator. */ void nvgpu_fini_alloc_debug(struct nvgpu_allocator *a); -#endif +#else +static inline void nvgpu_init_alloc_debug(struct gk20a *g, + struct nvgpu_allocator *a) {} +static inline void nvgpu_fini_alloc_debug(struct nvgpu_allocator *a) {} +#endif /* CONFIG_DEBUG_FS */ /** * @brief Initialize nvgpu allocator. diff --git a/drivers/gpu/nvgpu/os/linux/debug_allocator.c b/drivers/gpu/nvgpu/os/linux/debug_allocator.c index d63a90307..b6c58313c 100644 --- a/drivers/gpu/nvgpu/os/linux/debug_allocator.c +++ b/drivers/gpu/nvgpu/os/linux/debug_allocator.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 NVIDIA Corporation. All rights reserved. + * Copyright (C) 2017-2022 NVIDIA Corporation. All rights reserved. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and @@ -55,6 +55,12 @@ void nvgpu_init_alloc_debug(struct gk20a *g, struct nvgpu_allocator *a) void nvgpu_fini_alloc_debug(struct nvgpu_allocator *a) { + struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(a->g); + + if (!l->debugfs_allocators) + return; + + debugfs_remove(a->debugfs_entry); } void nvgpu_alloc_debugfs_init(struct gk20a *g) diff --git a/drivers/gpu/nvgpu/os/linux/module.c b/drivers/gpu/nvgpu/os/linux/module.c index 4186cc959..b53b92eae 100644 --- a/drivers/gpu/nvgpu/os/linux/module.c +++ b/drivers/gpu/nvgpu/os/linux/module.c @@ -1932,8 +1932,6 @@ int nvgpu_remove(struct device *dev) gk20a_power_node_deinit(dev_from_gk20a(g)); - gk20a_debug_deinit(g); - nvgpu_remove_sysfs(dev); if (platform->secure_buffer.destroy)