mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: fix allocator debugfs deinit
Allocator (bitmap, buddy, page) debugfs files are not cleaned up when the allocators are destroyed. This leads to warning logs from nvgpu like below: [21073.493000] debugfs: File 'gk20a_as_17' in directory 'allocators' already present! [21073.493026] debugfs: File 'gk20a_as_17-sys' in directory 'allocators' already present! Remove the per-allocator debugfs node when destroying an allocator in runtime. While at this, add missing nvgpu_allocator locking to the function nvgpu_bitmap_alloc_destroy. And create nop functions for the functions nvgpu_init_alloc_debug and nvgpu_fini_alloc_debug when CONFIG_DEBUG_FS is not defined to avoid adding the CONFIG checks at multiple places. Move gk20a_debug_deinit to the end of gk20a_free_cb called in nvgpu_put as that tears down all debugfs entries. Allocator destroy happens as part of nvgpu_put call and it can lead to invalid debugfs dentry access if gk20a_debug_deinit is called before it. Bug 3481097 Change-Id: I8a66bcf6ade7e5707f9207c78a54d12d7bd94c02 Signed-off-by: Sagar Kamble <skamble@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2648012 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
2431b832e7
commit
535a27411a
@@ -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 <nvgpu/debug.h>
|
||||
#include <nvgpu/nvgpu_common.h>
|
||||
#include <nvgpu/kmem.h>
|
||||
#include <nvgpu/allocator.h>
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user