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:231243c827
("Revert mlx5: move affinity hints assignments to generic code") Fixes:a435393aca
("mlx5: move affinity hints assignments to generic code") Cc: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
8978cc921f
commit
05e0cc84e0
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue