All of lore.kernel.org
 help / color / mirror / Atom feed
From: sj@kernel.org
To: akpm@linux-foundation.org
Cc: linux-damon@amazon.com, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, SeongJae Park <sj@kernel.org>
Subject: [PATCH 08/14] mm/damon/sysfs: reuse damon_set_regions() for regions setting
Date: Fri, 29 Apr 2022 16:06:00 +0000	[thread overview]
Message-ID: <20220429160606.127307-9-sj@kernel.org> (raw)
In-Reply-To: <20220429160606.127307-1-sj@kernel.org>

From: SeongJae Park <sj@kernel.org>

'damon_set_regions()' is general enough so that it can also be used for
only creating regions.  This commit makes DAMON sysfs interface to reuse
the function rather keeping two implementations for a same purpose.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 mm/damon/sysfs.c | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c
index 331647ab6396..0d6cb9b5bd5b 100644
--- a/mm/damon/sysfs.c
+++ b/mm/damon/sysfs.c
@@ -2095,28 +2095,31 @@ static void damon_sysfs_destroy_targets(struct damon_ctx *ctx)
 static int damon_sysfs_set_regions(struct damon_target *t,
 		struct damon_sysfs_regions *sysfs_regions)
 {
-	int i;
+	struct damon_addr_range *ranges = kmalloc_array(sysfs_regions->nr,
+			sizeof(*ranges), GFP_KERNEL | __GFP_NOWARN);
+	int i, err = -EINVAL;
 
+	if (!ranges)
+		return -ENOMEM;
 	for (i = 0; i < sysfs_regions->nr; i++) {
 		struct damon_sysfs_region *sys_region =
 			sysfs_regions->regions_arr[i];
-		struct damon_region *prev, *r;
 
 		if (sys_region->start > sys_region->end)
-			return -EINVAL;
-		r = damon_new_region(sys_region->start, sys_region->end);
-		if (!r)
-			return -ENOMEM;
-		damon_add_region(r, t);
-		if (damon_nr_regions(t) > 1) {
-			prev = damon_prev_region(r);
-			if (prev->ar.end > r->ar.start) {
-				damon_destroy_region(r, t);
-				return -EINVAL;
-			}
-		}
+			goto out;
+
+		ranges[i].start = sys_region->start;
+		ranges[i].end = sys_region->end;
+		if (i == 0)
+			continue;
+		if (ranges[i - 1].end > ranges[i].start)
+			goto out;
 	}
-	return 0;
+	err = damon_set_regions(t, ranges, sysfs_regions->nr);
+out:
+	kfree(ranges);
+	return err;
+
 }
 
 static int damon_sysfs_add_target(struct damon_sysfs_target *sys_target,
-- 
2.25.1


  parent reply	other threads:[~2022-04-29 16:06 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-29 16:05 [PATCH 00/14] mm/damon: Support online tuning sj
2022-04-29 16:05 ` [PATCH 01/14] mm/damon/core: add a new callback for watermarks checks sj
2022-04-29 16:05 ` [PATCH 02/14] mm/damon/core: finish kdamond as soon as any callback returns an error sj
2022-04-29 16:05 ` [PATCH 03/14] mm/damon/vaddr: generalize damon_va_apply_three_regions() sj
2022-04-29 16:05 ` [PATCH 04/14] mm/damon/vaddr: move 'damon_set_regions()' to core sj
2022-04-29 16:05 ` [PATCH 05/14] mm/damon/vaddr: remove damon_va_apply_three_regions() sj
2022-04-29 16:05 ` [PATCH 06/14] mm/damon/sysfs: prohibit multiple physical address space monitoring targets sj
2022-04-29 16:05 ` [PATCH 07/14] mm/damon/sysfs: move targets setup code to a separated function sj
2022-04-29 16:06 ` sj [this message]
2022-04-29 16:06 ` [PATCH 09/14] mm/damon/sysfs: use enum for 'state' input handling sj
2022-04-29 16:06 ` [PATCH 10/14] mm/damon/sysfs: update schemes stat in the kdamond context sj
2022-04-29 16:06 ` [PATCH 11/14] mm/damon/sysfs: support online inputs update sj
2022-04-29 16:06 ` [PATCH 12/14] Docs/{ABI,admin-guide}/damon: Update for 'state' sysfs file input keyword, 'commit' sj
2022-04-29 16:06 ` [PATCH 13/14] mm/damon/reclaim: support online inputs update sj
2022-04-29 16:06 ` [PATCH 14/14] Docs/admin-guide/mm/damon/reclaim: document 'commit_inputs' parameter sj

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220429160606.127307-9-sj@kernel.org \
    --to=sj@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-damon@amazon.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.