[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251025064844.495525-18-chenridong@huaweicloud.com>
Date: Sat, 25 Oct 2025 06:48:39 +0000
From: Chen Ridong <chenridong@...weicloud.com>
To: longman@...hat.com,
tj@...nel.org,
hannes@...xchg.org,
mkoutny@...e.com
Cc: cgroups@...r.kernel.org,
linux-kernel@...r.kernel.org,
lujialin4@...wei.com,
chenridong@...wei.com
Subject: [PATCH RFC v2 17/22] cpuset: unify local partition disable and invalidate
From: Chen Ridong <chenridong@...wei.com>
The local_partition_invalidate() and local_partition_disable() functions
contain similar logic that can be unified into a single implementation.
This patch consolidates both functions into local_partition_disable(),
creating symmetry with the existing remote_partition_disable() function.
This refactoring reduces code duplication and establishes a consistent
interface for partition disable operations across both local and remote
partition types.
Signed-off-by: Chen Ridong <chenridong@...wei.com>
---
kernel/cgroup/cpuset.c | 38 ++------------------------------------
1 file changed, 2 insertions(+), 36 deletions(-)
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index 3d4f2dc63c50..e60a774a3654 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -1956,40 +1956,6 @@ static void local_partition_disable(struct cpuset *cs, enum prs_errcode part_err
}
}
-/**
- * local_partition_invalidate - Invalidate a local partition
- * @cs: Target cpuset (local partition root) to invalidate
- * @tmp: Temporary masks
- */
-static void local_partition_invalidate(struct cpuset *cs, struct tmpmasks *tmp)
-{
- struct cpumask *xcpus = user_xcpus(cs);
- struct cpuset *parent = parent_cs(cs);
- int new_prs = cs->partition_root_state;
- bool cpumask_updated = false;
-
- lockdep_assert_held(&cpuset_mutex);
- WARN_ON_ONCE(is_remote_partition(cs)); /* For local partition only */
-
- if (!is_partition_valid(cs))
- return;
-
- /*
- * Make the current partition invalid.
- */
- if (is_partition_valid(parent))
- cpumask_updated = cpumask_and(tmp->addmask,
- xcpus, parent->effective_xcpus);
- if (cs->partition_root_state > 0)
- new_prs = -cs->partition_root_state;
-
- partition_disable(cs, parent, new_prs, cs->prs_err);
- if (cpumask_updated) {
- cpuset_update_tasks_cpumask(parent, tmp->addmask);
- update_sibling_cpumasks(parent, cs, tmp);
- }
-}
-
/**
* __local_partition_update - Update local partition configuration
* @cs: Target cpuset to update
@@ -2437,7 +2403,7 @@ static int cpus_allowed_validate_change(struct cpuset *cs, struct cpuset *trialc
if (is_partition_valid(cp) &&
cpumask_intersects(xcpus, cp->effective_xcpus)) {
rcu_read_unlock();
- local_partition_invalidate(cp, tmp);
+ local_partition_disable(cp, PERR_NOTEXCL, tmp);
rcu_read_lock();
}
}
@@ -2477,7 +2443,7 @@ static void partition_cpus_change(struct cpuset *cs, struct cpuset *trialcs,
trialcs->effective_xcpus, tmp);
} else {
if (trialcs->prs_err)
- local_partition_invalidate(cs, tmp);
+ local_partition_disable(cs, trialcs->prs_err, tmp);
else
__local_partition_update(cs, trialcs->exclusive_cpus,
trialcs->effective_xcpus, tmp, false);
--
2.34.1
Powered by blists - more mailing lists