Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05e0cc84 authored by Saeed Mahameed's avatar Saeed Mahameed
Browse files

net/mlx5: Fix get vector affinity helper function



mlx5_get_vector_affinity used to call pci_irq_get_affinity and after
reverting the patch that sets the device affinity via PCI_IRQ_AFFINITY
API, calling pci_irq_get_affinity becomes useless and it breaks RDMA
mlx5 users.  To fix this, this patch provides an alternative way to
retrieve IRQ vector affinity using legacy IRQ API, following
smp_affinity read procfs implementation.

Fixes: 231243c8 ("Revert mlx5: move affinity hints assignments to generic code")
Fixes: a435393a ("mlx5: move affinity hints assignments to generic code")
Cc: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent 8978cc92
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@
#include <linux/kernel.h>
#include <linux/completion.h>
#include <linux/pci.h>
#include <linux/irq.h>
#include <linux/spinlock_types.h>
#include <linux/semaphore.h>
#include <linux/slab.h>
@@ -1231,7 +1232,23 @@ enum {
static inline const struct cpumask *
mlx5_get_vector_affinity(struct mlx5_core_dev *dev, int vector)
{
	return pci_irq_get_affinity(dev->pdev, MLX5_EQ_VEC_COMP_BASE + vector);
	const struct cpumask *mask;
	struct irq_desc *desc;
	unsigned int irq;
	int eqn;
	int err;

	err = mlx5_vector2eqn(dev, vector, &eqn, &irq);
	if (err)
		return NULL;

	desc = irq_to_desc(irq);
#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
	mask = irq_data_get_effective_affinity_mask(&desc->irq_data);
#else
	mask = desc->irq_common_data.affinity;
#endif
	return mask;
}

#endif /* MLX5_DRIVER_H */