On Tue, May 14, 2024 at 5:51 AM Jinjie Ruan <ruanjinjie@xxxxxxxxxx> wrote: > > > > On 2024/5/14 6:01, Yury Norov wrote: > > If mask == desc->irq_common_data.affinity, copying one to another is > > useless, and we can just skip it. > > > > Signed-off-by: Yury Norov <yury.norov@xxxxxxxxx> > > --- > > kernel/irq/manage.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c > > index bf9ae8a8686f..ad9ed9fdf919 100644 > > --- a/kernel/irq/manage.c > > +++ b/kernel/irq/manage.c > > @@ -285,7 +285,8 @@ int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask, > > switch (ret) { > > case IRQ_SET_MASK_OK: > > case IRQ_SET_MASK_OK_DONE: > > - cpumask_copy(desc->irq_common_data.affinity, mask); > > + if (desc->irq_common_data.affinity != mask) > > + cpumask_copy(desc->irq_common_data.affinity, mask); > > It seems that mask is a pointer, shouldn't use "cpumask_equal"? cpumask_equal() is O(N), just as cpumask_copy(), so we'll have no benefit if the masks are equal, and will double slow it if they aren't in the worst case. On the other hand, pointers comparison is O(1), a very quick tasks, even more the pointers are already in registers. > > fallthrough; > > case IRQ_SET_MASK_OK_NOCOPY: > > irq_validate_effective_affinity(data);