]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/mlx5: Use irq_set_affinity_and_hint()
authorNitesh Narayan Lal <nitesh@redhat.com>
Fri, 3 Sep 2021 15:24:29 +0000 (11:24 -0400)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 10 Dec 2021 19:47:39 +0000 (20:47 +0100)
The driver uses irq_set_affinity_hint() to update the affinity_hint mask
that is consumed by the userspace to distribute the interrupts and to apply
the provided mask as the affinity for the mlx5 interrupts. However,
irq_set_affinity_hint() applying the provided cpumask as an affinity for
the interrupt is an undocumented side effect.

To remove this side effect irq_set_affinity_hint() has been marked
as deprecated and new interfaces have been introduced. Hence, replace the
irq_set_affinity_hint() with the new interface irq_set_affinity_and_hint()
where the provided mask needs to be applied as the affinity and
affinity_hint pointer needs to be set and replace with
irq_update_affinity_hint() where only affinity_hint needs to be updated.

Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20210903152430.244937-14-nitesh@redhat.com
drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c

index 830444f927d456deff102c57dc26332bfc124696..54fb67cec544640a706700e52924d73eafc3c76c 100644 (file)
@@ -143,11 +143,11 @@ static void irq_release(struct mlx5_irq *irq)
        struct mlx5_irq_pool *pool = irq->pool;
 
        xa_erase(&pool->irqs, irq->index);
-       /* free_irq requires that affinity and rmap will be cleared
+       /* free_irq requires that affinity_hint and rmap will be cleared
         * before calling it. This is why there is asymmetry with set_rmap
         * which should be called after alloc_irq but before request_irq.
         */
-       irq_set_affinity_hint(irq->irqn, NULL);
+       irq_update_affinity_hint(irq->irqn, NULL);
        free_cpumask_var(irq->mask);
        free_irq(irq->irqn, &irq->nh);
        kfree(irq);
@@ -316,7 +316,7 @@ static struct mlx5_irq *irq_pool_create_irq(struct mlx5_irq_pool *pool,
        if (IS_ERR(irq))
                return irq;
        cpumask_copy(irq->mask, affinity);
-       irq_set_affinity_hint(irq->irqn, irq->mask);
+       irq_set_affinity_and_hint(irq->irqn, irq->mask);
        return irq;
 }
 
@@ -399,7 +399,7 @@ irq_pool_request_vector(struct mlx5_irq_pool *pool, int vecidx,
        if (!irq_pool_is_sf_pool(pool) && !pool->xa_num_irqs.max &&
            cpumask_empty(irq->mask))
                cpumask_set_cpu(0, irq->mask);
-       irq_set_affinity_hint(irq->irqn, irq->mask);
+       irq_set_affinity_and_hint(irq->irqn, irq->mask);
 unlock:
        mutex_unlock(&pool->lock);
        return irq;