mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
nvmap: dynamically allocate nvmap page pool shrinker
Dynamically allocate the nvmpa pagepool shrinker as
shrinker register and unregister get removed from
Linux 6.7.
Based on change:
***
commit 86298d8b8ceacc17d0192cd6412d2773ff51b27f
Author: Qi Zheng <zhengqi.arch@bytedance.com>
md/raid5: dynamically allocate the md-raid5 shrinker
***
Bug 4346767
Change-Id: Idbe40753f79481d85e5899d2905039860d39dc5e
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3020001
(cherry picked from commit fc748158cc)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3036794
Reviewed-by: Jonathan Hunter <jonathanh@nvidia.com>
Tested-by: Jonathan Hunter <jonathanh@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
6b290b7f84
commit
0ca520ee30
6
Makefile
6
Makefile
@@ -53,6 +53,12 @@ subdir-ccflags-y += -DNV_V4L2_ASYNC_NF_SUBDEVICE_INIT_RENAME
|
|||||||
export CONFIG_SKIP_CRYPTO=y
|
export CONFIG_SKIP_CRYPTO=y
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Changes done in Linux 6.7 onwards
|
||||||
|
ifeq ($(shell test $(LINUX_VERSION) -ge $(LINUX_VERSION_6_7); echo $$?),0)
|
||||||
|
# Support enable to allocate shrinker dynamically
|
||||||
|
subdir-ccflags-y += -DNV_NVMAP_DYNAMIC_SHRINKER_ALLOC_SUPPORT
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_TEGRA_VIRTUALIZATION),y)
|
ifeq ($(CONFIG_TEGRA_VIRTUALIZATION),y)
|
||||||
subdir-ccflags-y += -DCONFIG_TEGRA_VIRTUALIZATION
|
subdir-ccflags-y += -DCONFIG_TEGRA_VIRTUALIZATION
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -581,11 +581,15 @@ static unsigned long nvmap_page_pool_scan_objects(struct shrinker *shrinker,
|
|||||||
SHRINK_STOP : (sc->nr_to_scan - remaining);
|
SHRINK_STOP : (sc->nr_to_scan - remaining);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(NV_NVMAP_DYNAMIC_SHRINKER_ALLOC_SUPPORT)
|
||||||
|
static struct shrinker *nvmap_page_pool_shrinker;
|
||||||
|
#else
|
||||||
static struct shrinker nvmap_page_pool_shrinker = {
|
static struct shrinker nvmap_page_pool_shrinker = {
|
||||||
.count_objects = nvmap_page_pool_count_objects,
|
.count_objects = nvmap_page_pool_count_objects,
|
||||||
.scan_objects = nvmap_page_pool_scan_objects,
|
.scan_objects = nvmap_page_pool_scan_objects,
|
||||||
.seeks = 1,
|
.seeks = 1,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static void shrink_page_pools(unsigned long *total_pages, unsigned long *available_pages)
|
static void shrink_page_pools(unsigned long *total_pages, unsigned long *available_pages)
|
||||||
{
|
{
|
||||||
@@ -771,10 +775,23 @@ int nvmap_page_pool_init(struct nvmap_device *dev)
|
|||||||
NULL, "nvmap-bz");
|
NULL, "nvmap-bz");
|
||||||
if (IS_ERR(background_allocator))
|
if (IS_ERR(background_allocator))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
#if defined(NV_NVMAP_DYNAMIC_SHRINKER_ALLOC_SUPPORT)
|
||||||
|
nvmap_page_pool_shrinker = shrinker_alloc(0, "nvmap_pp_shrinker");
|
||||||
|
if (!nvmap_page_pool_shrinker) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
nvmap_page_pool_shrinker->count_objects = nvmap_page_pool_count_objects;
|
||||||
|
nvmap_page_pool_shrinker->scan_objects = nvmap_page_pool_scan_objects;
|
||||||
|
nvmap_page_pool_shrinker->seeks = 1;
|
||||||
|
|
||||||
|
shrinker_register(nvmap_page_pool_shrinker);
|
||||||
|
#else
|
||||||
#if defined(NV_REGISTER_SHRINKER_HAS_FMT_ARG) /* Linux v6.0 */
|
#if defined(NV_REGISTER_SHRINKER_HAS_FMT_ARG) /* Linux v6.0 */
|
||||||
register_shrinker(&nvmap_page_pool_shrinker, "nvmap_pp_shrinker");
|
register_shrinker(&nvmap_page_pool_shrinker, "nvmap_pp_shrinker");
|
||||||
#else
|
#else
|
||||||
register_shrinker(&nvmap_page_pool_shrinker);
|
register_shrinker(&nvmap_page_pool_shrinker);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -793,7 +810,12 @@ int nvmap_page_pool_fini(struct nvmap_device *dev)
|
|||||||
* registered
|
* registered
|
||||||
*/
|
*/
|
||||||
if (!IS_ERR_OR_NULL(background_allocator)) {
|
if (!IS_ERR_OR_NULL(background_allocator)) {
|
||||||
|
#if defined(NV_NVMAP_DYNAMIC_SHRINKER_ALLOC_SUPPORT)
|
||||||
|
shrinker_free(nvmap_page_pool_shrinker);
|
||||||
|
nvmap_page_pool_shrinker = NULL;
|
||||||
|
#else
|
||||||
unregister_shrinker(&nvmap_page_pool_shrinker);
|
unregister_shrinker(&nvmap_page_pool_shrinker);
|
||||||
|
#endif
|
||||||
kthread_stop(background_allocator);
|
kthread_stop(background_allocator);
|
||||||
background_allocator = NULL;
|
background_allocator = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user