mm/damon/lru_sort: deduplicate hot/cold schemes generators
authorSeongJae Park <sj@kernel.org>
Tue, 13 Sep 2022 17:44:49 +0000 (17:44 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 3 Oct 2022 21:03:13 +0000 (14:03 -0700)
damon_lru_sort_new_{hot,cold}_scheme() have quite a lot of duplicates.
This commit factors out the duplicate to a separate function and use it
for reducing the duplicate.

Link: https://lkml.kernel.org/r/20220913174449.50645-23-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/lru_sort.c

index 8d9c3d1..07a0908 100644 (file)
@@ -135,6 +135,25 @@ DEFINE_DAMON_MODULES_DAMOS_STATS_PARAMS(damon_lru_sort_cold_stat,
 static struct damon_ctx *ctx;
 static struct damon_target *target;
 
+static struct damos *damon_lru_sort_new_scheme(
+               struct damos_access_pattern *pattern, enum damos_action action)
+{
+       struct damos_quota quota = damon_lru_sort_quota;
+
+       /* Use half of total quota for hot/cold pages sorting */
+       quota.ms = quota.ms / 2;
+
+       return damon_new_scheme(
+                       /* find the pattern, and */
+                       pattern,
+                       /* (de)prioritize on LRU-lists */
+                       action,
+                       /* under the quota. */
+                       &quota,
+                       /* (De)activate this according to the watermarks. */
+                       &damon_lru_sort_wmarks);
+}
+
 /* Create a DAMON-based operation scheme for hot memory regions */
 static struct damos *damon_lru_sort_new_hot_scheme(unsigned int hot_thres)
 {
@@ -149,19 +168,8 @@ static struct damos *damon_lru_sort_new_hot_scheme(unsigned int hot_thres)
                .min_age_region = 0,
                .max_age_region = UINT_MAX,
        };
-       struct damos_quota quota = damon_lru_sort_quota;
-
-       /* Use half of total quota for hot pages sorting */
-       quota.ms = quota.ms / 2;
 
-       return damon_new_scheme(
-                       &pattern,
-                       /* prioritize those on LRU lists, as soon as found */
-                       DAMOS_LRU_PRIO,
-                       /* under the quota. */
-                       &quota,
-                       /* (De)activate this according to the watermarks. */
-                       &damon_lru_sort_wmarks);
+       return damon_lru_sort_new_scheme(&pattern, DAMOS_LRU_PRIO);
 }
 
 /* Create a DAMON-based operation scheme for cold memory regions */
@@ -178,19 +186,8 @@ static struct damos *damon_lru_sort_new_cold_scheme(unsigned int cold_thres)
                .min_age_region = cold_thres,
                .max_age_region = UINT_MAX,
        };
-       struct damos_quota quota = damon_lru_sort_quota;
 
-       /* Use half of total quota for cold pages sorting */
-       quota.ms = quota.ms / 2;
-
-       return damon_new_scheme(
-                       &pattern,
-                       /* mark those as not accessed, as soon as found */
-                       DAMOS_LRU_DEPRIO,
-                       /* under the quota. */
-                       &quota,
-                       /* (De)activate this according to the watermarks. */
-                       &damon_lru_sort_wmarks);
+       return damon_lru_sort_new_scheme(&pattern, DAMOS_LRU_DEPRIO);
 }
 
 static int damon_lru_sort_apply_parameters(void)