Re: [PATCH 13/33] cpuset: Update HK_TYPE_DOMAIN cpumask from cpuset
From: Waiman Long
Date: Wed Nov 05 2025 - 14:39:59 EST
On 11/5/25 10:45 AM, Frederic Weisbecker wrote:
Have a look at housekeeping_init() which reallocates the memblock+ if (!trial)If "isolcpus" boot command line option is set, old can be a pointer to the
+ return -ENOMEM;
+
+ cpumask_andnot(trial, housekeeping_cpumask(HK_TYPE_DOMAIN_BOOT), mask);
+ if (!cpumask_intersects(trial, cpu_online_mask)) {
+ kfree(trial);
+ return -EINVAL;
+ }
+
+ if (!housekeeping.flags)
+ static_branch_enable(&housekeeping_overridden);
+
+ if (!(housekeeping.flags & BIT(type)))
+ old = housekeeping_cpumask_dereference(type);
+ else
+ WRITE_ONCE(housekeeping.flags, housekeeping.flags | BIT(type));
+ rcu_assign_pointer(housekeeping.cpumasks[type], trial);
+
+ synchronize_rcu();
+
+ kfree(old);
boot time memblock area which isn't a pointer that can be handled by the
slab allocator AFAIU. I don't know the exact consequence, but it may not be
good. One possible solution I can think of is to make HK_TYPE_DOMAIN and
HK_TYPE_DOMAIN_ROOT point to the same memblock pointer and don't pass the
old HK_TYPE_DOMAIN pointer to kfree() if it matches HK_TYPE_DOMAIN_BOOT one.
Alternatively, we can just set the HK_TYPE_DOMAIN_BOOT pointer at boot and
make HK_TYPE_DOMAIN falls back to HK_TYPE_DOMAIN_BOOT if not set.
allocated memory with kmalloc to avoid these troubles.
Ah your previous patch of this series did that. I was thinking about the existing kernel code at the time. So you can ignore that comment.
Thanks,
Longman