mm/damon/reclaim: make 'enabled' checking timer simpler
[platform/kernel/linux-starfive.git] / mm / damon / reclaim.c
index 8efbfb2..38da288 100644 (file)
@@ -353,7 +353,6 @@ static int damon_reclaim_turn(bool on)
        return 0;
 }
 
-#define ENABLE_CHECK_INTERVAL_MS       1000
 static struct delayed_work damon_reclaim_timer;
 static void damon_reclaim_timer_fn(struct work_struct *work)
 {
@@ -367,13 +366,11 @@ static void damon_reclaim_timer_fn(struct work_struct *work)
                else
                        enabled = last_enabled;
        }
-
-       if (enabled)
-               schedule_delayed_work(&damon_reclaim_timer,
-                       msecs_to_jiffies(ENABLE_CHECK_INTERVAL_MS));
 }
 static DECLARE_DELAYED_WORK(damon_reclaim_timer, damon_reclaim_timer_fn);
 
+static bool damon_reclaim_initialized;
+
 static int enabled_store(const char *val,
                const struct kernel_param *kp)
 {
@@ -382,9 +379,11 @@ static int enabled_store(const char *val,
        if (rc < 0)
                return rc;
 
-       if (enabled)
-               schedule_delayed_work(&damon_reclaim_timer, 0);
+       /* system_wq might not initialized yet */
+       if (!damon_reclaim_initialized)
+               return rc;
 
+       schedule_delayed_work(&damon_reclaim_timer, 0);
        return 0;
 }
 
@@ -397,10 +396,21 @@ module_param_cb(enabled, &enabled_param_ops, &enabled, 0600);
 MODULE_PARM_DESC(enabled,
        "Enable or disable DAMON_RECLAIM (default: disabled)");
 
+static int damon_reclaim_handle_commit_inputs(void)
+{
+       int err;
+
+       if (!commit_inputs)
+               return 0;
+
+       err = damon_reclaim_apply_parameters();
+       commit_inputs = false;
+       return err;
+}
+
 static int damon_reclaim_after_aggregation(struct damon_ctx *c)
 {
        struct damos *s;
-       int err = 0;
 
        /* update the stats parameter */
        damon_for_each_scheme(s, c) {
@@ -411,22 +421,12 @@ static int damon_reclaim_after_aggregation(struct damon_ctx *c)
                nr_quota_exceeds = s->stat.qt_exceeds;
        }
 
-       if (commit_inputs) {
-               err = damon_reclaim_apply_parameters();
-               commit_inputs = false;
-       }
-       return err;
+       return damon_reclaim_handle_commit_inputs();
 }
 
 static int damon_reclaim_after_wmarks_check(struct damon_ctx *c)
 {
-       int err = 0;
-
-       if (commit_inputs) {
-               err = damon_reclaim_apply_parameters();
-               commit_inputs = false;
-       }
-       return err;
+       return damon_reclaim_handle_commit_inputs();
 }
 
 static int __init damon_reclaim_init(void)
@@ -449,6 +449,8 @@ static int __init damon_reclaim_init(void)
        damon_add_target(ctx, target);
 
        schedule_delayed_work(&damon_reclaim_timer, 0);
+
+       damon_reclaim_initialized = true;
        return 0;
 }