[RFC PATCH v1 2/3] mm/damon/core: Add damon_start_one()

Jonghyeon Kim
2022-02-18T10:27:03Z

damon_start() function is designed to start multiple damon monitoring
contexts. But, sometimes we need to start monitoring one context.
Although __damon_start() could be considered to start for one monitoring
context, it seems reasonable to adopt a new function that does not need
to handle 'damon_lock' from the caller.

Signed-off-by: Jonghyeon Kim <tome01@ajou.ac.kr>
---
include/linux/damon.h | 1 +
mm/damon/core.c | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+)

diff --git a/include/linux/damon.h b/include/linux/damon.h
index c0adf1566603..069577477662 100644
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -511,6 +511,7 @@ int damon_register_ops(struct damon_operations *ops);
int damon_select_ops(struct damon_ctx *ctx, enum damon_ops_id id);

int damon_start(struct damon_ctx **ctxs, int nr_ctxs);
+int damon_start_one(struct damon_ctx *ctx);
int damon_stop(struct damon_ctx **ctxs, int nr_ctxs);

#endif /* CONFIG_DAMON */
diff --git a/mm/damon/core.c b/mm/damon/core.c
index 290c9c0535ee..e43f138a3489 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -466,6 +466,31 @@ int damon_start(struct damon_ctx **ctxs, int nr_ctxs)
return err;
}

+/**
+ * damon_start_one() - Starts the monitorings for one context.
+ * @ctx: monitoring context
+ *
+ * This function starts one monitoring thread for only one monitoring context
+ * handling damon_lock.
+ *
+ * Return: 0 on success, negative error code otherwise.
+ */
+int damon_start_one(struct damon_ctx *ctx)
+{
+ int err = 0;
+
+ mutex_lock(&damon_lock);
+ err = __damon_start(ctx);
+ if (err) {
+ mutex_unlock(&damon_lock);
+ return err;
+ }
+ nr_running_ctxs++;
+ mutex_unlock(&damon_lock);
+
+ return err;
+}
+
/*
* __damon_stop() - Stops monitoring of given context.
* @ctx: monitoring context
--
2.17.1