cpuset: remove redundant CS_ONLINE flag

The CS_ONLINE flag was introduced prior to the CSS_ONLINE flag in the
cpuset subsystem. Currently, the flag setting sequence is as follows:

1. cpuset_css_online() sets CS_ONLINE
2. css->flags gets CSS_ONLINE set
...
3. cgroup->kill_css sets CSS_DYING
4. cpuset_css_offline() clears CS_ONLINE
5. css->flags clears CSS_ONLINE

The is_cpuset_online() check currently occurs between steps 1 and 3.
However, it would be equally safe to perform this check between steps 2
and 3, as CSS_ONLINE provides the same synchronization guarantee as
CS_ONLINE.

Since CS_ONLINE is redundant with CSS_ONLINE and provides no additional
synchronization benefits, we can safely remove it to simplify the code.

Signed-off-by: Chen Ridong <chenridong@huawei.com>
Acked-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
pull/1354/merge
Chen Ridong 2025-08-13 08:29:01 +00:00 committed by Tejun Heo
parent 8a013ec9cb
commit 4c70fb2624
3 changed files with 7 additions and 5 deletions

View File

@ -354,6 +354,11 @@ static inline bool css_is_dying(struct cgroup_subsys_state *css)
return css->flags & CSS_DYING; return css->flags & CSS_DYING;
} }
static inline bool css_is_online(struct cgroup_subsys_state *css)
{
return css->flags & CSS_ONLINE;
}
static inline bool css_is_self(struct cgroup_subsys_state *css) static inline bool css_is_self(struct cgroup_subsys_state *css)
{ {
if (css == &css->cgroup->self) { if (css == &css->cgroup->self) {

View File

@ -38,7 +38,6 @@ enum prs_errcode {
/* bits in struct cpuset flags field */ /* bits in struct cpuset flags field */
typedef enum { typedef enum {
CS_ONLINE,
CS_CPU_EXCLUSIVE, CS_CPU_EXCLUSIVE,
CS_MEM_EXCLUSIVE, CS_MEM_EXCLUSIVE,
CS_MEM_HARDWALL, CS_MEM_HARDWALL,
@ -202,7 +201,7 @@ static inline struct cpuset *parent_cs(struct cpuset *cs)
/* convenient tests for these bits */ /* convenient tests for these bits */
static inline bool is_cpuset_online(struct cpuset *cs) static inline bool is_cpuset_online(struct cpuset *cs)
{ {
return test_bit(CS_ONLINE, &cs->flags) && !css_is_dying(&cs->css); return css_is_online(&cs->css) && !css_is_dying(&cs->css);
} }
static inline int is_cpu_exclusive(const struct cpuset *cs) static inline int is_cpu_exclusive(const struct cpuset *cs)

View File

@ -207,7 +207,7 @@ static inline void notify_partition_change(struct cpuset *cs, int old_prs)
* parallel, we may leave an offline CPU in cpu_allowed or some other masks. * parallel, we may leave an offline CPU in cpu_allowed or some other masks.
*/ */
static struct cpuset top_cpuset = { static struct cpuset top_cpuset = {
.flags = BIT(CS_ONLINE) | BIT(CS_CPU_EXCLUSIVE) | .flags = BIT(CS_CPU_EXCLUSIVE) |
BIT(CS_MEM_EXCLUSIVE) | BIT(CS_SCHED_LOAD_BALANCE), BIT(CS_MEM_EXCLUSIVE) | BIT(CS_SCHED_LOAD_BALANCE),
.partition_root_state = PRS_ROOT, .partition_root_state = PRS_ROOT,
.relax_domain_level = -1, .relax_domain_level = -1,
@ -3496,7 +3496,6 @@ static int cpuset_css_online(struct cgroup_subsys_state *css)
cpus_read_lock(); cpus_read_lock();
mutex_lock(&cpuset_mutex); mutex_lock(&cpuset_mutex);
set_bit(CS_ONLINE, &cs->flags);
if (is_spread_page(parent)) if (is_spread_page(parent))
set_bit(CS_SPREAD_PAGE, &cs->flags); set_bit(CS_SPREAD_PAGE, &cs->flags);
if (is_spread_slab(parent)) if (is_spread_slab(parent))
@ -3571,7 +3570,6 @@ static void cpuset_css_offline(struct cgroup_subsys_state *css)
cpuset_update_flag(CS_SCHED_LOAD_BALANCE, cs, 0); cpuset_update_flag(CS_SCHED_LOAD_BALANCE, cs, 0);
cpuset_dec(); cpuset_dec();
clear_bit(CS_ONLINE, &cs->flags);
mutex_unlock(&cpuset_mutex); mutex_unlock(&cpuset_mutex);
cpus_read_unlock(); cpus_read_unlock();