On Fri, Aug 12, 2022 at 04:39:27PM -0400, Waiman Long wrote: > The user_cpus_ptr field is added by commit b90ca8badbd1 ("sched: > Introduce task_struct::user_cpus_ptr to track requested affinity"). It > is currently used only by arm64 arch due to possible asymmetric cpu > setup. This patch extends its usage to save user provided cpumask when > sched_setaffinity() is called for all arches. > > To preserve the existing arm64 use case, a new cpus_affinity_set flag is > added to differentiate if user_cpus_ptr is set up by sched_setaffinity() > or by force_compatible_cpus_allowed_ptr(). user_cpus_ptr > set by sched_setaffinity() has priority and won't be > overwritten by force_compatible_cpus_allowed_ptr() or > relax_compatible_cpus_allowed_ptr(). What why ?! The only possible case where restrict_cpus_allowed_ptr() will now need that weird new state is when the affinity has never been set before, in that case cpus_ptr should be possible_mask. Please just make a single consistent rule and don't make weird corner cases like this.