Messages in this thread | | | Date | Wed, 4 Oct 2023 08:19:58 -0400 | Subject | Re: [PATCH v4] sched/core: Use zero length to reset cpumasks in sched_setaffinity() | From | Waiman Long <> |
| |
On 10/4/23 06:06, Ingo Molnar wrote: > * Peter Zijlstra <peterz@infradead.org> wrote: > >> On Wed, Oct 04, 2023 at 11:23:41AM +0200, Ingo Molnar wrote: >> >>>> if (user_mask) { >>>> - cpumask_copy(user_mask, in_mask); >>>> + /* >>>> + * All-set user cpumask resets affinity and drops the explicit >>>> + * user mask. >>>> + */ >>>> + cpumask_and(user_mask, in_mask, cpu_possible_mask); >>>> + if (cpumask_equal(user_mask, cpu_possible_mask)) { >>>> + kfree(user_mask); >>>> + user_mask = NULL; >>>> + } >>> Question: is there any observable behavioral difference between current >>> (old) all-set cpumask calls and the patched (new) one? >> Very little I think -- the main difference is that we no longer carry >> the ->user_cpus_ptr mask around, and that saves a little masking. > So calling with a full mask would actually work fine on 'old' kernels too, > as it's a 'reset' event in essence. (With a bit of allocation & masking > overhead.) > > This pretty unambiguously marks the full-mask solution as the superior ABI ...
I am fine with that one too. I do have a little bit concern about that the difference in behavior when the full mask is passed in, but that is reverting to the old behavior before commit 8f9ea86fdf99 ("sched: Always preserve the user requested cpumask").
BTW, we can probably check the in_mask directly earlier to skip an unnecessary cpumask allocation and free in this particular case.
Cheers, Longman
| |