All of lore.kernel.org
 help / color / mirror / Atom feed
From: Babu Moger <babu.moger@amd.com>
To: <fenghua.yu@intel.com>, <reinette.chatre@intel.com>
Cc: <tglx@linutronix.de>, <mingo@redhat.com>, <bp@alien8.de>,
	<dave.hansen@linux.intel.com>, <x86@kernel.org>, <hpa@zytor.com>,
	<corbet@lwn.net>, <linux-kernel@vger.kernel.org>,
	<linux-doc@vger.kernel.org>, <eranian@google.com>,
	<peternewman@google.com>
Subject: [RFC PATCH 1/3] x86/resctrl: Add multiple tasks to the resctrl group at once
Date: Tue, 3 Jan 2023 16:06:35 -0600	[thread overview]
Message-ID: <167278359522.34228.17439739885350817510.stgit@bmoger-ubuntu> (raw)
In-Reply-To: <167278351577.34228.12803395505584557101.stgit@bmoger-ubuntu>

Right now, the resctrl task assignment for the MONITOR or CONTROL group
needs to be one at a time. For example:
  $mount -t resctrl resctrl /sys/fs/resctrl/
  $mkdir /sys/fs/resctrl/clos1
  $echo 123 > /sys/fs/resctrl/clos1/tasks
  $echo 456 > /sys/fs/resctrl/clos1/tasks
  $echo 789 > /sys/fs/resctrl/clos1/tasks

This is not user-friendly when dealing with hundreds of tasks.

Improve the user experience by supporting the multiple task assignment
in one command with tasks separated by commas. For example:
  $echo 123,456,789 > /sys/fs/resctrl/clos1/tasks

Signed-off-by: Babu Moger <babu.moger@amd.com>
---
 Documentation/x86/resctrl.rst          |   13 ++++++------
 arch/x86/kernel/cpu/resctrl/rdtgroup.c |   35 ++++++++++++++++++++++++++------
 2 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/Documentation/x86/resctrl.rst b/Documentation/x86/resctrl.rst
index 71a531061e4e..f26e16412bcb 100644
--- a/Documentation/x86/resctrl.rst
+++ b/Documentation/x86/resctrl.rst
@@ -208,12 +208,13 @@ All groups contain the following files:
 "tasks":
 	Reading this file shows the list of all tasks that belong to
 	this group. Writing a task id to the file will add a task to the
-	group. If the group is a CTRL_MON group the task is removed from
-	whichever previous CTRL_MON group owned the task and also from
-	any MON group that owned the task. If the group is a MON group,
-	then the task must already belong to the CTRL_MON parent of this
-	group. The task is removed from any previous MON group.
-
+	group. Multiple tasks can be assigned at once with each task
+	separated by commas. If the group is a CTRL_MON group the task
+	is removed from whichever previous CTRL_MON group owned the task
+	and also from any MON group that owned the task. If the group is
+	a MON group, then the task must already belong to the CTRL_MON
+	parent of this group. The task is removed from any previous MON
+	group.
 
 "cpus":
 	Reading this file shows a bitmask of the logical CPUs owned by
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index e5a48f05e787..344607853f4c 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -686,28 +686,49 @@ static ssize_t rdtgroup_tasks_write(struct kernfs_open_file *of,
 				    char *buf, size_t nbytes, loff_t off)
 {
 	struct rdtgroup *rdtgrp;
+	char *pid_str;
 	int ret = 0;
 	pid_t pid;
 
-	if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0)
+	/* Valid input requires a trailing newline */
+	if (nbytes == 0 || buf[nbytes - 1] != '\n')
 		return -EINVAL;
+
+	buf[nbytes - 1] = '\0';
+
+	cpus_read_lock();
 	rdtgrp = rdtgroup_kn_lock_live(of->kn);
 	if (!rdtgrp) {
-		rdtgroup_kn_unlock(of->kn);
-		return -ENOENT;
+		ret = -ENOENT;
+		goto exit;
+	}
+
+next:
+	if (!buf || buf[0] == '\0')
+		goto exit;
+
+	pid_str = strim(strsep(&buf, ","));
+
+	if (kstrtoint(pid_str, 0, &pid) || pid < 0) {
+		ret = -EINVAL;
+		goto exit;
 	}
+
 	rdt_last_cmd_clear();
 
 	if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED ||
-	    rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) {
-		ret = -EINVAL;
+			rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) {
 		rdt_last_cmd_puts("Pseudo-locking in progress\n");
-		goto unlock;
+		ret = -EINVAL;
+		goto exit;
 	}
 
 	ret = rdtgroup_move_task(pid, rdtgrp, of);
 
-unlock:
+	goto next;
+
+exit:
+	cpus_read_unlock();
 	rdtgroup_kn_unlock(of->kn);
 
 	return ret ?: nbytes;



  reply	other threads:[~2023-01-03 22:07 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-03 22:06 [RFC PATCH 0/3] x86/resctrl: Miscellaneous resctrl features Babu Moger
2023-01-03 22:06 ` Babu Moger [this message]
2023-01-04  5:46   ` [RFC PATCH 1/3] x86/resctrl: Add multiple tasks to the resctrl group at once Yu, Fenghua
2023-01-04 17:20     ` Moger, Babu
2023-01-03 22:06 ` [RFC PATCH 2/3] x86/resctrl: Move the task's threads to the group automatically Babu Moger
2023-01-04  5:55   ` Yu, Fenghua
2023-01-04 17:49     ` Moger, Babu
2023-01-04 16:43   ` Reinette Chatre
2023-01-04 18:06     ` Moger, Babu
2023-01-03 22:06 ` [RFC PATCH 3/3] x86/resctrl: Display the RMID and COSID for resctrl groups Babu Moger
2023-01-04  6:06   ` Yu, Fenghua
2023-01-04  6:45     ` Stephane Eranian
2023-01-04 18:01       ` Moger, Babu
2023-01-04 17:58     ` Moger, Babu
2023-01-04 23:54       ` Yu, Fenghua
2023-01-05 15:48         ` Moger, Babu

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=167278359522.34228.17439739885350817510.stgit@bmoger-ubuntu \
    --to=babu.moger@amd.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=eranian@google.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peternewman@google.com \
    --cc=reinette.chatre@intel.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.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.