]> Gentwo Git Trees - linux/.git/commitdiff
cpuset: remove global remote_children list
authorChen Ridong <chenridong@huawei.com>
Tue, 11 Nov 2025 13:24:28 +0000 (13:24 +0000)
committerTejun Heo <tj@kernel.org>
Tue, 11 Nov 2025 21:47:08 +0000 (11:47 -1000)
The remote_children list is used to track all remote partitions attached
to a cpuset. However, it serves no other purpose. Using a boolean flag to
indicate whether a cpuset is a remote partition is a more direct approach,
making remote_children unnecessary.

This patch replaces the list with a remote_partition flag in the cpuset
structure and removes remote_children entirely.

Signed-off-by: Chen Ridong <chenridong@huawei.com>
Reviewed-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup/cpuset-internal.h
kernel/cgroup/cpuset.c

index 5cac42c5fd9727c1b5021d92158b00cdd205c0d3..01976c8e7d496410bb87c8ccf6982e16c4ad4b3c 100644 (file)
@@ -158,6 +158,13 @@ struct cpuset {
        /* partition root state */
        int partition_root_state;
 
+       /*
+        * Whether cpuset is a remote partition.
+        * It used to be a list anchoring all remote partitions — we can switch back
+        * to a list if we need to iterate over the remote partitions.
+        */
+       bool remote_partition;
+
        /*
         * number of SCHED_DEADLINE tasks attached to this cpuset, so that we
         * know when to rebuild associated root domain bandwidth information.
@@ -172,9 +179,6 @@ struct cpuset {
        /* Handle for cpuset.cpus.partition */
        struct cgroup_file partition_file;
 
-       /* Remote partition silbling list anchored at remote_children */
-       struct list_head remote_sibling;
-
        /* Used to merge intersecting subsets for generate_sched_domains */
        struct uf_node node;
 };
index 7830c1b682051df013cf0003805150dae96c69d0..ca3d3f2450ae017c2715fad3366a0b056525662e 100644 (file)
@@ -94,9 +94,6 @@ static bool isolated_cpus_updating;
 static cpumask_var_t   boot_hk_cpus;
 static bool            have_boot_isolcpus;
 
-/* List of remote partition root children */
-static struct list_head remote_children;
-
 /*
  * A flag to force sched domain rebuild at the end of an operation.
  * It can be set in
@@ -219,7 +216,7 @@ static struct cpuset top_cpuset = {
                 BIT(CS_MEM_EXCLUSIVE) | BIT(CS_SCHED_LOAD_BALANCE),
        .partition_root_state = PRS_ROOT,
        .relax_domain_level = -1,
-       .remote_sibling = LIST_HEAD_INIT(top_cpuset.remote_sibling),
+       .remote_partition = false,
 };
 
 /*
@@ -1572,7 +1569,7 @@ static int compute_trialcs_excpus(struct cpuset *trialcs, struct cpuset *cs)
 
 static inline bool is_remote_partition(struct cpuset *cs)
 {
-       return !list_empty(&cs->remote_sibling);
+       return cs->remote_partition;
 }
 
 static inline bool is_local_partition(struct cpuset *cs)
@@ -1621,7 +1618,7 @@ static int remote_partition_enable(struct cpuset *cs, int new_prs,
 
        spin_lock_irq(&callback_lock);
        partition_xcpus_add(new_prs, NULL, tmp->new_cpus);
-       list_add(&cs->remote_sibling, &remote_children);
+       cs->remote_partition = true;
        cpumask_copy(cs->effective_xcpus, tmp->new_cpus);
        spin_unlock_irq(&callback_lock);
        update_isolation_cpumasks();
@@ -1651,7 +1648,7 @@ static void remote_partition_disable(struct cpuset *cs, struct tmpmasks *tmp)
        WARN_ON_ONCE(!cpumask_subset(cs->effective_xcpus, subpartitions_cpus));
 
        spin_lock_irq(&callback_lock);
-       list_del_init(&cs->remote_sibling);
+       cs->remote_partition = false;
        partition_xcpus_del(cs->partition_root_state, NULL, cs->effective_xcpus);
        if (cs->prs_err)
                cs->partition_root_state = -cs->partition_root_state;
@@ -3603,7 +3600,6 @@ cpuset_css_alloc(struct cgroup_subsys_state *parent_css)
        __set_bit(CS_SCHED_LOAD_BALANCE, &cs->flags);
        fmeter_init(&cs->fmeter);
        cs->relax_domain_level = -1;
-       INIT_LIST_HEAD(&cs->remote_sibling);
 
        /* Set CS_MEMORY_MIGRATE for default hierarchy */
        if (cpuset_v2())
@@ -3874,7 +3870,6 @@ int __init cpuset_init(void)
        nodes_setall(top_cpuset.effective_mems);
 
        fmeter_init(&top_cpuset.fmeter);
-       INIT_LIST_HEAD(&remote_children);
 
        BUG_ON(!alloc_cpumask_var(&cpus_attach, GFP_KERNEL));