Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'cgroup-for-6.19-rc3-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup

Pull cgroup fix from Tejun Heo:

- Fix a spurious cpuset warning when disabling remote partition after
CPU hotplug leaves subpartitions_cpus empty. Guard the warning and
invalidate affected partitions.

* tag 'cgroup-for-6.19-rc3-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
cpuset: fix warning when disabling remote partition

+16 -5
+16 -5
kernel/cgroup/cpuset.c
··· 1668 1668 static void remote_partition_disable(struct cpuset *cs, struct tmpmasks *tmp) 1669 1669 { 1670 1670 WARN_ON_ONCE(!is_remote_partition(cs)); 1671 - WARN_ON_ONCE(!cpumask_subset(cs->effective_xcpus, subpartitions_cpus)); 1671 + /* 1672 + * When a CPU is offlined, top_cpuset may end up with no available CPUs, 1673 + * which should clear subpartitions_cpus. We should not emit a warning for this 1674 + * scenario: the hierarchy is updated from top to bottom, so subpartitions_cpus 1675 + * may already be cleared when disabling the partition. 1676 + */ 1677 + WARN_ON_ONCE(!cpumask_subset(cs->effective_xcpus, subpartitions_cpus) && 1678 + !cpumask_empty(subpartitions_cpus)); 1672 1679 1673 1680 spin_lock_irq(&callback_lock); 1674 1681 cs->remote_partition = false; ··· 3983 3976 if (remote || (is_partition_valid(cs) && is_partition_valid(parent))) 3984 3977 compute_partition_effective_cpumask(cs, &new_cpus); 3985 3978 3986 - if (remote && cpumask_empty(&new_cpus) && 3987 - partition_is_populated(cs, NULL)) { 3979 + if (remote && (cpumask_empty(subpartitions_cpus) || 3980 + (cpumask_empty(&new_cpus) && 3981 + partition_is_populated(cs, NULL)))) { 3988 3982 cs->prs_err = PERR_HOTPLUG; 3989 3983 remote_partition_disable(cs, tmp); 3990 3984 compute_effective_cpumask(&new_cpus, cs, parent); ··· 3998 3990 * 1) empty effective cpus but not valid empty partition. 3999 3991 * 2) parent is invalid or doesn't grant any cpus to child 4000 3992 * partitions. 3993 + * 3) subpartitions_cpus is empty. 4001 3994 */ 4002 - if (is_local_partition(cs) && (!is_partition_valid(parent) || 4003 - tasks_nocpu_error(parent, cs, &new_cpus))) 3995 + if (is_local_partition(cs) && 3996 + (!is_partition_valid(parent) || 3997 + tasks_nocpu_error(parent, cs, &new_cpus) || 3998 + cpumask_empty(subpartitions_cpus))) 4004 3999 partcmd = partcmd_invalidate; 4005 4000 /* 4006 4001 * On the other hand, an invalid partition root may be transitioned