The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Waiman Long <llong@redhat.com>
To: Chen Ridong <chenridong@huaweicloud.com>,
	tj@kernel.org, hannes@cmpxchg.org, mkoutny@suse.com
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
	lujialin4@huawei.com, chenridong@huawei.com
Subject: Re: [PATCH RFC v2 06/22] cpuset: introduce partition_update()
Date: Wed, 12 Nov 2025 15:58:04 -0500	[thread overview]
Message-ID: <91e163ac-4379-4875-9f08-bddebb1e616c@redhat.com> (raw)
In-Reply-To: <20251025064844.495525-7-chenridong@huaweicloud.com>

On 10/25/25 2:48 AM, Chen Ridong wrote:
> From: Chen Ridong <chenridong@huawei.com>
>
> Introduce partition_update() to centralize updates to key cpuset structures
> during a partition update, including:
> - effective_xcpus
> - exclusive_cpus
>
> Key operations performed:
> - Adding and removing exclusive CPUs via partition_xcpus_add()/del()
> - Synchronizing the effective exclusive CPUs mask
> - Updating the exclusive CPUs mask when modification is required
> - Triggering necessary system updates and workqueue synchronization
> - Updating the partition's exclusive flag
> - Sending partition change notifications
>
> Signed-off-by: Chen Ridong <chenridong@huawei.com>
> ---
>   kernel/cgroup/cpuset.c | 47 ++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 47 insertions(+)
>
> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
> index 4a79db1cdec1..3e414e19ae31 100644
> --- a/kernel/cgroup/cpuset.c
> +++ b/kernel/cgroup/cpuset.c
> @@ -1604,6 +1604,53 @@ static void partition_disable(struct cpuset *cs, struct cpuset *parent,
>   	notify_partition_change(cs, old_prs);
>   }
>   
> +/**
> + * partition_update - Update an existing partition configuration
> + * @cs: The cpuset to update
> + * @prs: Partition root state (must be positive)
> + * @xcpus: New exclusive CPUs mask for the partition (NULL to keep current)
> + * @excpus: New effective exclusive CPUs mask
> + * @tmp: Temporary masks
> + *
> + * Updates partition-related fields. The tmp->addmask is the CPU mask that
> + * will be added to the subpartitions_cpus and removed from parent's
> + * effective_cpus, and the tmp->delmask vice versa.
> + */
> +static void partition_update(struct cpuset *cs, int prs, struct cpumask *xcpus,
> +				  struct cpumask *excpus, struct tmpmasks *tmp)
> +{
> +	bool isolcpus_updated;
> +	bool excl_updated;
> +	struct cpuset *parent;
> +	int old_prs;
> +
> +	lockdep_assert_held(&cpuset_mutex);
> +	WARN_ON_ONCE(!cpuset_v2());
> +	WARN_ON_ONCE(prs <= 0);
> +
> +	parent = is_remote_partition(cs) ? NULL : parent_cs(cs);
> +	old_prs = cs->partition_root_state;
> +	excl_updated = !cpumask_empty(tmp->addmask) ||
> +		       !cpumask_empty(tmp->delmask);
Should partition_update() only be called if at least one of 
addmask/delmask is not empty? If they are both empty, no update is 
really needed. Right?
> +
> +	spin_lock_irq(&callback_lock);
> +	isolcpus_updated = partition_xcpus_add(prs, parent, tmp->addmask);
> +	isolcpus_updated |= partition_xcpus_del(prs, parent, tmp->delmask);

I see now that there is no adding and deleting boolean flags to indicate 
if the cpumasks are empty or not, so you have to add the empty cpumask 
check in those helpers. Please state that in your patch 2.

Cheers,
Longman

> +	/*
> +	 * Need to update effective_xcpus and exclusive_cpus now as
> +	 * update_sibling_cpumasks() below may iterate back to the same cs.
> +	 */
> +	cpumask_copy(cs->effective_xcpus, excpus);
> +	if (xcpus)
> +		cpumask_copy(cs->exclusive_cpus, xcpus);
> +	spin_unlock_irq(&callback_lock);
> +	update_unbound_workqueue_cpumask(isolcpus_updated);
> +	if (excl_updated)
> +		cpuset_force_rebuild();
> +	update_partition_exclusive_flag(cs, prs);
> +	notify_partition_change(cs, old_prs);
> +}
> +
>   /*
>    * prstate_housekeeping_conflict - check for partition & housekeeping conflicts
>    * @prstate: partition root state to be checked


  reply	other threads:[~2025-11-12 20:58 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-25  6:48 [PATCH RFC v2 00/22] cpuset: rework local partition logic Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 01/22] cpuset: fix isolcpus stay in root when isolated partition changes to root Chen Ridong
2025-11-12 20:09   ` Waiman Long
2025-11-13  1:24     ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 02/22] cpuset: add early empty cpumask check in partition_xcpus_add/del Chen Ridong
2025-11-12 20:18   ` Waiman Long
2025-11-13  1:36     ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 03/22] cpuset: generalize validate_partition() interface Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 04/22] cpuset: introduce partition_enable() Chen Ridong
2025-11-12 20:40   ` Waiman Long
2025-11-13  1:38     ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 05/22] cpuset: introduce partition_disable() Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 06/22] cpuset: introduce partition_update() Chen Ridong
2025-11-12 20:58   ` Waiman Long [this message]
2025-11-13  7:22     ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 07/22] cpuset: use partition_enable() for remote partition enablement Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 08/22] cpuset: use partition_disable() for remote partition disablement Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 09/22] cpuset: use partition_update() for remote partition update Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 10/22] cpuset: introduce local_partition_enable() Chen Ridong
2025-11-12 21:47   ` Waiman Long
2025-11-13  2:49     ` Chen Ridong
2025-11-13  2:58       ` Waiman Long
2025-11-13  7:16         ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 11/22] cpuset: introduce local_partition_disable() Chen Ridong
2025-11-12 22:10   ` Waiman Long
2025-11-13  3:27     ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 12/22] cpuset: introduce local_partition_invalidate() Chen Ridong
2025-11-12 22:54   ` Waiman Long
2025-11-13  7:03     ` Chen Ridong
2025-11-13  0:15   ` Waiman Long
2025-10-25  6:48 ` [PATCH RFC v2 13/22] cpuset: introduce local_partition_update() Chen Ridong
2025-11-13  2:06   ` Waiman Long
2025-11-13  6:33     ` Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 14/22] cpuset: remove update_parent_effective_cpumask Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 15/22] cpuset: remove redundant partition field updates Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 16/22] cpuset: simplify partition update logic for hotplug tasks Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 17/22] cpuset: unify local partition disable and invalidate Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 18/22] cpuset: use partition_disable for compute_partition_effective_cpumask Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 19/22] cpuset: use validate_local_partition in local_partition_enable Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 20/22] cpuset: introduce validate_remote_partition Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 21/22] cpuset: simplify update_prstate() function Chen Ridong
2025-10-25  6:48 ` [PATCH RFC v2 22/22] cpuset: remove prs_err clear when notify_partition_change Chen Ridong
2025-11-03 11:18 ` [PATCH RFC v2 00/22] cpuset: rework local partition logic Chen Ridong
2025-11-12  4:11   ` Chen Ridong
2025-11-12  4:19     ` Waiman Long
2025-11-12  4:49       ` Chen Ridong

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=91e163ac-4379-4875-9f08-bddebb1e616c@redhat.com \
    --to=llong@redhat.com \
    --cc=cgroups@vger.kernel.org \
    --cc=chenridong@huawei.com \
    --cc=chenridong@huaweicloud.com \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lujialin4@huawei.com \
    --cc=mkoutny@suse.com \
    --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