linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: SeongJae Park <sjpark@amazon.com>
To: <akpm@linux-foundation.org>
Cc: SeongJae Park <sjpark@amazon.de>, <Jonathan.Cameron@Huawei.com>,
	<aarcange@redhat.com>, <acme@kernel.org>,
	<alexander.shishkin@linux.intel.com>, <amit@kernel.org>,
	<benh@kernel.crashing.org>, <brendan.d.gregg@gmail.com>,
	<brendanhiggins@google.com>, <cai@lca.pw>,
	<colin.king@canonical.com>, <corbet@lwn.net>, <david@redhat.com>,
	<dwmw@amazon.com>, <fan.du@intel.com>, <foersleo@amazon.de>,
	<gthelen@google.com>, <irogers@google.com>, <jolsa@redhat.com>,
	<kirill@shutemov.name>, <mark.rutland@arm.com>, <mgorman@suse.de>,
	<minchan@kernel.org>, <mingo@redhat.com>, <namhyung@kernel.org>,
	<peterz@infradead.org>, <rdunlap@infradead.org>,
	<riel@surriel.com>, <rientjes@google.com>, <rostedt@goodmis.org>,
	<rppt@kernel.org>, <sblbir@amazon.com>, <shakeelb@google.com>,
	<shuah@kernel.org>, <sj38.park@gmail.com>, <snu@amazon.de>,
	<vbabka@suse.cz>, <vdavydov.dev@gmail.com>,
	<yang.shi@linux.alibaba.com>, <ying.huang@intel.com>,
	<linux-damon@amazon.com>, <linux-mm@kvack.org>,
	<linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: [PATCH v19 10/15] damon/debugfs: Support pidfd target id
Date: Tue, 4 Aug 2020 11:14:11 +0200	[thread overview]
Message-ID: <20200804091416.31039-11-sjpark@amazon.com> (raw)
In-Reply-To: <20200804091416.31039-1-sjpark@amazon.com>

From: SeongJae Park <sjpark@amazon.de>

DAMON programming interface users are safe from pid recycling problem
since it uses 'struct pid *' as target id.  However, debugfs interface
users might still get the problem since they should describe the target
ids with pid numbers.

This commit makes the debugfs interface to support pidfd target ids.
Using it, debugfs interface users can also easily be safe from the
races.  That said, the pid numbers are stil supported for the simple
command line uses.

The pid numbers target ids usages are same to the old one.  Therefore,
old users don't need to change anything.  To use pidfd target ids, users
should add a prefix, 'pidfd ' in front of the numbers.  Because pidfd is
process private, reading 'target_ids' file again will show pid numbers
of the target processes.

Signed-off-by: SeongJae Park <sjpark@amazon.de>
---
 mm/damon.c | 37 ++++++++++++++++++++++++++++++++++---
 1 file changed, 34 insertions(+), 3 deletions(-)

diff --git a/mm/damon.c b/mm/damon.c
index 01003a1ff551..61d93f1ea974 100644
--- a/mm/damon.c
+++ b/mm/damon.c
@@ -1450,11 +1450,32 @@ static unsigned long *str_to_target_ids(const char *str, ssize_t len,
 	return ids;
 }
 
+/* Returns pid for the given pidfd if it's valid, or NULL otherwise. */
+static struct pid *damon_get_pidfd_pid(unsigned int pidfd)
+{
+	struct fd f;
+	struct pid *pid;
+
+	f = fdget(pidfd);
+	if (!f.file)
+		return NULL;
+
+	pid = pidfd_pid(f.file);
+	if (!IS_ERR(pid))
+		get_pid(pid);
+	else
+		pid = NULL;
+
+	fdput(f);
+	return pid;
+}
+
 static ssize_t debugfs_target_ids_write(struct file *file,
 		const char __user *buf, size_t count, loff_t *ppos)
 {
 	struct damon_ctx *ctx = &damon_user_ctx;
-	char *kbuf;
+	char *kbuf, *nrs;
+	bool received_pidfds = false;
 	unsigned long *targets;
 	ssize_t nr_targets;
 	ssize_t ret = count;
@@ -1466,13 +1487,23 @@ static ssize_t debugfs_target_ids_write(struct file *file,
 	if (IS_ERR(kbuf))
 		return PTR_ERR(kbuf);
 
-	targets = str_to_target_ids(kbuf, ret, &nr_targets);
+	nrs = kbuf;
+	if (!strncmp(kbuf, "pidfd ", 6)) {
+		received_pidfds = true;
+		nrs = &kbuf[6];
+	}
+
+	targets = str_to_target_ids(nrs, ret, &nr_targets);
 	if (!targets) {
 		ret = -ENOMEM;
 		goto out;
 	}
 
-	if (targetid_is_pid(ctx)) {
+	if (received_pidfds) {
+		for (i = 0; i < nr_targets; i++)
+			targets[i] = (unsigned long)damon_get_pidfd_pid(
+					(unsigned int)targets[i]);
+	} else if (targetid_is_pid(ctx)) {
 		for (i = 0; i < nr_targets; i++)
 			targets[i] = (unsigned long)find_get_pid(
 					(int)targets[i]);
-- 
2.17.1



  parent reply	other threads:[~2020-08-04  9:18 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-04  9:14 [PATCH v19 00/15] Introduce Data Access MONitor (DAMON) SeongJae Park
2020-08-04  9:14 ` [PATCH v19 01/15] mm: " SeongJae Park
2020-08-04  9:14 ` [PATCH v19 02/15] mm/damon: Implement region based sampling SeongJae Park
2020-08-14  9:29   ` SeongJae Park
2020-08-04  9:14 ` [PATCH v19 03/15] mm/damon: Adaptively adjust regions SeongJae Park
2020-08-04  9:14 ` [PATCH v19 04/15] mm/damon: Track dynamic monitoring target regions update SeongJae Park
2020-08-04  9:14 ` [PATCH v19 05/15] mm/idle_page_tracking: Make PG_(idle|young) reusable SeongJae Park
2020-08-04  9:14 ` [PATCH v19 06/15] mm/damon: Implement callbacks for the virtual memory address spaces SeongJae Park
2020-08-04  9:14 ` [PATCH v19 07/15] mm/damon: Implement access pattern recording SeongJae Park
2020-08-04  9:14 ` [PATCH v19 08/15] mm/damon: Add a tracepoint SeongJae Park
2020-08-04 22:01   ` Steven Rostedt
2020-08-05  6:23     ` SeongJae Park
2020-08-04  9:14 ` [PATCH v19 09/15] mm/damon: Implement a debugfs interface SeongJae Park
2020-08-10  7:41   ` SeongJae Park
2020-08-04  9:14 ` SeongJae Park [this message]
2020-08-04  9:14 ` [PATCH v19 11/15] tools: Introduce a minimal user-space tool for DAMON SeongJae Park
2020-08-04  9:14 ` [PATCH v19 12/15] Documentation: Add documents " SeongJae Park
2020-08-04  9:14 ` [PATCH v19 13/15] mm/damon: Add kunit tests SeongJae Park
2020-08-04  9:14 ` [PATCH v19 14/15] mm/damon: Add user space selftests SeongJae Park
2020-08-04  9:14 ` [PATCH v19 15/15] MAINTAINERS: Update for DAMON SeongJae Park

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=20200804091416.31039-11-sjpark@amazon.com \
    --to=sjpark@amazon.com \
    --cc=Jonathan.Cameron@Huawei.com \
    --cc=aarcange@redhat.com \
    --cc=acme@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=amit@kernel.org \
    --cc=benh@kernel.crashing.org \
    --cc=brendan.d.gregg@gmail.com \
    --cc=brendanhiggins@google.com \
    --cc=cai@lca.pw \
    --cc=colin.king@canonical.com \
    --cc=corbet@lwn.net \
    --cc=david@redhat.com \
    --cc=dwmw@amazon.com \
    --cc=fan.du@intel.com \
    --cc=foersleo@amazon.de \
    --cc=gthelen@google.com \
    --cc=irogers@google.com \
    --cc=jolsa@redhat.com \
    --cc=kirill@shutemov.name \
    --cc=linux-damon@amazon.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mark.rutland@arm.com \
    --cc=mgorman@suse.de \
    --cc=minchan@kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=riel@surriel.com \
    --cc=rientjes@google.com \
    --cc=rostedt@goodmis.org \
    --cc=rppt@kernel.org \
    --cc=sblbir@amazon.com \
    --cc=shakeelb@google.com \
    --cc=shuah@kernel.org \
    --cc=sj38.park@gmail.com \
    --cc=sjpark@amazon.de \
    --cc=snu@amazon.de \
    --cc=vbabka@suse.cz \
    --cc=vdavydov.dev@gmail.com \
    --cc=yang.shi@linux.alibaba.com \
    --cc=ying.huang@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).