From: Waiman Long <longman@redhat.com>
To: Tejun Heo <tj@kernel.org>, Zefan Li <lizefan.x@bytedance.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Frederic Weisbecker <frederic@kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
"Paul E. McKenney" <paulmck@kernel.org>,
Neeraj Upadhyay <quic_neeraju@quicinc.com>,
Joel Fernandes <joel@joelfernandes.org>,
Josh Triplett <josh@joshtriplett.org>,
Boqun Feng <boqun.feng@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Zqiang <qiang.zhang1211@gmail.com>,
Davidlohr Bueso <dave@stgolabs.net>,
Shuah Khan <shuah@kernel.org>
Cc: cgroups@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, rcu@vger.kernel.org,
linux-kselftest@vger.kernel.org, Mrunal Patel <mpatel@redhat.com>,
Ryan Phillips <rphillips@redhat.com>,
Brent Rowsell <browsell@redhat.com>,
Peter Hunt <pehunt@redhat.com>,
Cestmir Kalina <ckalina@redhat.com>,
Nicolas Saenz Julienne <nsaenz@kernel.org>,
Alex Gladkov <agladkov@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Phil Auld <pauld@redhat.com>,
Paul Gortmaker <paul.gortmaker@windriver.com>,
Daniel Bristot de Oliveira <bristot@kernel.org>,
Juri Lelli <juri.lelli@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Costa Shulyupin <cshulyup@redhat.com>,
Waiman Long <longman@redhat.com>
Subject: [RFC PATCH 6/8] cgroup/cpuset: Enable dynamic rcu_nocb mode on isolated CPUs
Date: Wed, 17 Jan 2024 11:35:09 -0500 [thread overview]
Message-ID: <20240117163511.88173-7-longman@redhat.com> (raw)
In-Reply-To: <20240117163511.88173-1-longman@redhat.com>
The patch adds RCU no-callback isolation mode dynamically to isolated
CPUs within isolated partitions when the full CPU isolation mode is
enabled. This isolation feature will only be available for use by cpuset
if the "rcu_nocb" boot command line option is specified in the kernel
command line with or without the optional CPU list argument.
Signed-off-by: Waiman Long <longman@redhat.com>
---
kernel/cgroup/cpuset.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index d1d4ce213979..40bbb0a9cb84 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -218,6 +218,11 @@ enum isolated_cpus_modifiers {
*/
static cpumask_var_t isolated_cpus;
+/*
+ * rcu_nocb_mask set up at boot time.
+ */
+static cpumask_var_t rcu_nocb_mask_preset;
+
/*
* Enable full CPU isolation in isolated partitions, if set.
*/
@@ -229,15 +234,26 @@ static bool isolation_full;
static int isolation_flags;
enum cpuset_isolation_types {
+ ISOL_TYPE_RCU, /* RCU no-callback CPU mode */
ISOL_TYPE_MAX,
};
+enum cpuset_isolation_flags {
+ ISOL_FLAG_RCU = BIT(ISOL_TYPE_RCU),
+};
+
static const char * const isolation_type_names[ISOL_TYPE_MAX] = {
+ [ISOL_TYPE_RCU] = "rcu_nocbs",
};
/* Detect the cpuset isolation modes that can be enabled */
static __init int set_isolation_flags(void)
{
+ if (rcu_nocb_enabled(NULL)) {
+ BUG_ON(!zalloc_cpumask_var(&rcu_nocb_mask_preset, GFP_KERNEL));
+ (void)rcu_nocb_enabled(rcu_nocb_mask_preset);
+ isolation_flags |= ISOL_FLAG_RCU;
+ }
return 0;
}
late_initcall(set_isolation_flags);
@@ -1554,6 +1570,7 @@ static int partition_xcpus_del(int old_prs, struct cpuset *parent,
static int update_isolation_cpumasks(struct cpumask *mask, int modifier)
{
int err;
+ bool enable = (modifier == ISOL_CPUS_ADD);
lockdep_assert_cpus_held();
@@ -1569,6 +1586,25 @@ static int update_isolation_cpumasks(struct cpumask *mask, int modifier)
if (WARN_ON_ONCE(cpumask_empty(mask)))
return -EINVAL;
+ err = 0;
+ if (isolation_flags & ISOL_FLAG_RCU) {
+ /*
+ * When disabling rcu_nocb, make sure that we don't touch any
+ * CPUs that have already been set in rcu_nocb_mask_preset.
+ */
+ if (!enable && cpumask_intersects(mask, rcu_nocb_mask_preset)) {
+ cpumask_var_t tmp_mask;
+
+ if (WARN_ON_ONCE(!alloc_cpumask_var(&tmp_mask, GFP_KERNEL)))
+ return -ENOMEM;
+ if (cpumask_andnot(tmp_mask, mask, rcu_nocb_mask_preset))
+ err = rcu_nocb_cpumask_update(tmp_mask, enable);
+ free_cpumask_var(tmp_mask);
+ } else {
+ err = rcu_nocb_cpumask_update(mask, enable);
+ }
+ }
+ WARN_ON_ONCE(err);
return err;
}
--
2.39.3
next prev parent reply other threads:[~2024-01-17 16:36 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-17 16:35 [RFC PATCH 0/8] cgroup/cpuset: Support RCU_NOCB on isolated partitions Waiman Long
2024-01-17 16:35 ` [RFC PATCH 1/8] rcu/nocb: Pass a cpumask instead of a single CPU to offload/deoffload Waiman Long
2024-01-17 16:35 ` [RFC PATCH 2/8] rcu/nocb: Prepare to change nocb cpumask from CPU-hotplug protected cpuset caller Waiman Long
2024-01-17 16:35 ` [RFC PATCH 3/8] rcu/no_cb: Add rcu_nocb_enabled() to expose the rcu_nocb state Waiman Long
2024-01-17 16:35 ` [RFC PATCH 4/8] cgroup/cpuset: Better tracking of addition/deletion of isolated CPUs Waiman Long
2024-01-17 16:35 ` [RFC PATCH 5/8] cgroup/cpuset: Add cpuset.cpus.isolation_full Waiman Long
2024-01-17 16:35 ` Waiman Long [this message]
2024-01-17 16:35 ` [RFC PATCH 7/8] cgroup/cpuset: Document the new cpuset.cpus.isolation_full control file Waiman Long
2024-01-17 16:35 ` [RFC PATCH 8/8] cgroup/cpuset: Update test_cpuset_prs.sh to handle cpuset.cpus.isolation_full Waiman Long
2024-01-17 17:07 ` [RFC PATCH 0/8] cgroup/cpuset: Support RCU_NOCB on isolated partitions Tejun Heo
2024-01-17 17:15 ` Waiman Long
2024-02-06 12:56 ` Frederic Weisbecker
2024-02-06 19:15 ` Marcelo Tosatti
2024-02-07 14:47 ` Frederic Weisbecker
2024-02-07 14:59 ` Marcelo Tosatti
2024-02-10 4:19 ` Waiman Long
2024-01-19 10:24 ` Paul E. McKenney
2024-02-11 1:46 ` Waiman Long
2024-01-22 15:07 ` Michal Koutný
2024-01-23 5:50 ` Waiman Long
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=20240117163511.88173-7-longman@redhat.com \
--to=longman@redhat.com \
--cc=agladkov@redhat.com \
--cc=boqun.feng@gmail.com \
--cc=bristot@kernel.org \
--cc=browsell@redhat.com \
--cc=cgroups@vger.kernel.org \
--cc=ckalina@redhat.com \
--cc=corbet@lwn.net \
--cc=cshulyup@redhat.com \
--cc=dave@stgolabs.net \
--cc=frederic@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=juri.lelli@redhat.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=lizefan.x@bytedance.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mpatel@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nsaenz@kernel.org \
--cc=paul.gortmaker@windriver.com \
--cc=pauld@redhat.com \
--cc=paulmck@kernel.org \
--cc=pehunt@redhat.com \
--cc=peterz@infradead.org \
--cc=qiang.zhang1211@gmail.com \
--cc=quic_neeraju@quicinc.com \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=rphillips@redhat.com \
--cc=shuah@kernel.org \
--cc=tj@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 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).