From 967e7533ac3b6dbd9e11874d2e8a1d8941f7b204 Mon Sep 17 00:00:00 2001 From: Amit Pundir Date: Tue, 7 Nov 2023 10:47:05 +0530 Subject: [PATCH] ANDROID: ashmem: dynamically allocate the android-ashmem shrinker Old APIs are removed since the upstream commit f2383e01507e ("mm: shrinker: remove old APIs"). So use the new APIs to dynamically allocate the android-ashmem shrinker. Bug: 146449535 Change-Id: I1100b9eb66886c3350c780a759f66f6a3807d52f Signed-off-by: Amit Pundir Signed-off-by: Greg Kroah-Hartman --- drivers/staging/android/ashmem.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c index 11521cdb3f58..d57cb8ab424e 100644 --- a/drivers/staging/android/ashmem.c +++ b/drivers/staging/android/ashmem.c @@ -527,15 +527,26 @@ ashmem_shrink_count(struct shrinker *shrink, struct shrink_control *sc) return lru_count; } -static struct shrinker ashmem_shrinker = { - .count_objects = ashmem_shrink_count, - .scan_objects = ashmem_shrink_scan, +static struct shrinker *ashmem_shrinker; + +static int __init ashmem_init_shrinker(void) +{ + ashmem_shrinker = shrinker_alloc(0, "android-ashmem"); + if (!ashmem_shrinker) + return -ENOMEM; + + ashmem_shrinker->count_objects = ashmem_shrink_count; + ashmem_shrinker->scan_objects = ashmem_shrink_scan; /* * XXX (dchinner): I wish people would comment on why they need on * significant changes to the default value here */ - .seeks = DEFAULT_SEEKS * 4, -}; + ashmem_shrinker->seeks = DEFAULT_SEEKS * 4; + + shrinker_register(ashmem_shrinker); + + return 0; +} static int set_prot_mask(struct ashmem_area *asma, unsigned long prot) { @@ -860,8 +871,8 @@ static long ashmem_ioctl(struct file *file, unsigned int cmd, unsigned long arg) .gfp_mask = GFP_KERNEL, .nr_to_scan = LONG_MAX, }; - ret = ashmem_shrink_count(&ashmem_shrinker, &sc); - ashmem_shrink_scan(&ashmem_shrinker, &sc); + ret = ashmem_shrink_count(ashmem_shrinker, &sc); + ashmem_shrink_scan(ashmem_shrinker, &sc); } break; case ASHMEM_GET_FILE_ID: @@ -969,7 +980,7 @@ static int __init ashmem_init(void) goto out_free2; } - ret = register_shrinker(&ashmem_shrinker, "android-ashmem"); + ret = ashmem_init_shrinker(); if (ret) { pr_err("failed to register shrinker!\n"); goto out_demisc;