Re: [PATCH 4/6] genirq: optimize irq_do_set_affinity()

Jinjie Ruan
2024-05-14T12:51:49Z

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@gmail.com>
> ---
> 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"？

> fallthrough;
> case IRQ_SET_MASK_OK_NOCOPY:
> irq_validate_effective_affinity(data);