From: Frederic Weisbecker <frederic@kernel.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Frederic Weisbecker <frederic@kernel.org>,
Tejun Heo <tj@kernel.org>, Peter Zijlstra <peterz@infradead.org>,
"Paul E . McKenney" <paulmck@kernel.org>,
Paul Gortmaker <paul.gortmaker@windriver.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Marcelo Tosatti <mtosatti@redhat.com>,
Phil Auld <pauld@redhat.com>, Zefan Li <lizefan.x@bytedance.com>,
Waiman Long <longman@redhat.com>,
Daniel Bristot de Oliveira <bristot@kernel.org>,
Nicolas Saenz Julienne <nsaenz@kernel.org>,
rcu@vger.kernel.org
Subject: [PATCH 3/4] sched/isolation: Infrastructure to support rcu nocb cpumask changes
Date: Thu, 26 May 2022 00:10:54 +0200 [thread overview]
Message-ID: <20220525221055.1152307-4-frederic@kernel.org> (raw)
In-Reply-To: <20220525221055.1152307-1-frederic@kernel.org>
Provide a minimal infrastructure to change the housekeeping cpumasks.
For now only RCU NOCB cpumask is handled.
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Cc: Zefan Li <lizefan.x@bytedance.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Paul E. McKenney <paulmck@kernel.org>
Cc: Phil Auld <pauld@redhat.com>
Cc: Nicolas Saenz Julienne <nsaenz@kernel.org>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Cc: Waiman Long <longman@redhat.com>
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
---
include/linux/sched/isolation.h | 13 +++++++++++
kernel/sched/isolation.c | 38 +++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolation.h
index 8c15abd67aed..c6d0e3f83a20 100644
--- a/include/linux/sched/isolation.h
+++ b/include/linux/sched/isolation.h
@@ -25,6 +25,8 @@ extern const struct cpumask *housekeeping_cpumask(enum hk_type type);
extern bool housekeeping_enabled(enum hk_type type);
extern void housekeeping_affine(struct task_struct *t, enum hk_type type);
extern bool housekeeping_test_cpu(int cpu, enum hk_type type);
+extern int housekeeping_cpumask_set(struct cpumask *cpumask, enum hk_type type);
+extern int housekeeping_cpumask_clear(struct cpumask *cpumask, enum hk_type type);
extern void __init housekeeping_init(void);
#else
@@ -46,6 +48,17 @@ static inline bool housekeeping_enabled(enum hk_type type)
static inline void housekeeping_affine(struct task_struct *t,
enum hk_type type) { }
+
+static inline int housekeeping_cpumask_set(struct cpumask *cpumask, enum hk_type type)
+{
+ return -EINVAL;
+}
+
+static inline int housekeeping_cpumask_clear(struct cpumask *cpumask, enum hk_type type)
+{
+ return -EINVAL;
+}
+
static inline void housekeeping_init(void) { }
#endif /* CONFIG_CPU_ISOLATION */
diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c
index 373d42c707bc..ab4aba795c01 100644
--- a/kernel/sched/isolation.c
+++ b/kernel/sched/isolation.c
@@ -79,6 +79,44 @@ bool housekeeping_test_cpu(int cpu, enum hk_type type)
}
EXPORT_SYMBOL_GPL(housekeeping_test_cpu);
+static int housekeeping_cpumask_update(struct cpumask *cpumask,
+ enum hk_type type, bool on)
+{
+ int err;
+
+ switch (type) {
+ case HK_TYPE_RCU:
+ err = rcu_nocb_cpumask_update(cpumask, on);
+ break;
+ default:
+ err = -EINVAL;
+ }
+
+ if (err >= 0) {
+ if (on) {
+ cpumask_or(housekeeping.cpumasks[type],
+ housekeeping.cpumasks[type],
+ cpumask);
+ } else {
+ cpumask_andnot(housekeeping.cpumasks[type],
+ housekeeping.cpumasks[type],
+ cpumask);
+ }
+ }
+
+ return err;
+}
+
+int housekeeping_cpumask_set(struct cpumask *cpumask, enum hk_type type)
+{
+ return housekeeping_cpumask_update(cpumask, type, true);
+}
+
+int housekeeping_cpumask_clear(struct cpumask *cpumask, enum hk_type type)
+{
+ return housekeeping_cpumask_update(cpumask, type, false);
+}
+
void __init housekeeping_init(void)
{
enum hk_type type;
--
2.25.1
next prev parent reply other threads:[~2022-05-25 22:11 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-25 22:10 [PATCH 0/4] rcu/cpuset: Control RCU_NOCB offloading through cpusets Frederic Weisbecker
2022-05-25 22:10 ` [PATCH 1/4] rcu/nocb: Pass a cpumask instead of a single CPU to offload/deoffload Frederic Weisbecker
2022-05-25 22:19 ` Frederic Weisbecker
2022-05-25 22:42 ` Paul E. McKenney
2022-05-25 22:10 ` [PATCH 2/4] rcu/nocb: Prepare to change nocb cpumask from CPU-hotplug protected cpuset caller Frederic Weisbecker
2022-05-25 22:10 ` Frederic Weisbecker [this message]
2022-08-19 7:12 ` [PATCH 3/4] sched/isolation: Infrastructure to support rcu nocb cpumask changes Tobias Huschle
2022-05-25 22:10 ` [RFC PATCH 4/4] cpuset: Support RCU-NOCB toggle on v2 root partitions Frederic Weisbecker
2022-05-26 18:21 ` Tejun Heo
2022-05-26 22:51 ` Frederic Weisbecker
2022-05-26 23:02 ` Tejun Heo
2022-05-27 0:28 ` Waiman Long
2022-05-27 0:37 ` Tejun Heo
2022-05-27 8:30 ` Juri Lelli
2022-05-27 8:45 ` Tejun Heo
2022-05-27 12:58 ` Phil Auld
2022-05-28 14:24 ` Peter Zijlstra
2022-05-30 0:40 ` Frederic Weisbecker
2022-05-30 8:11 ` Peter Zijlstra
2022-05-30 10:56 ` Frederic Weisbecker
2022-05-30 13:16 ` Peter Zijlstra
2022-05-30 14:13 ` Juri Lelli
2022-05-30 21:35 ` Frederic Weisbecker
2022-05-31 0:57 ` Tejun Heo
2022-05-31 14:21 ` Waiman Long
2022-05-30 14:29 ` nicolas saenz julienne
2022-05-30 14:49 ` Paul E. McKenney
2022-05-30 22:36 ` Alison Chaiken
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=20220525221055.1152307-4-frederic@kernel.org \
--to=frederic@kernel.org \
--cc=bristot@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan.x@bytedance.com \
--cc=longman@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nsaenz@kernel.org \
--cc=paul.gortmaker@windriver.com \
--cc=pauld@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rcu@vger.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 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.