forked from Minki/linux
qedf: Use hwfns and affin_hwfn_idx to get MSI-X vector index to use
MSI-X vector index is determined using qed device information and affinity to use. Signed-off-by: Chad Dupuis <cdupuis@marvell.com> Signed-off-by: Saurav Kashyap <skashyap@marvell.com> Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2bfbc57058
commit
a9b02c615b
@ -2218,16 +2218,21 @@ static void qedf_simd_int_handler(void *cookie)
|
||||
static void qedf_sync_free_irqs(struct qedf_ctx *qedf)
|
||||
{
|
||||
int i;
|
||||
u16 vector_idx = 0;
|
||||
u32 vector;
|
||||
|
||||
if (qedf->int_info.msix_cnt) {
|
||||
for (i = 0; i < qedf->int_info.used_cnt; i++) {
|
||||
synchronize_irq(qedf->int_info.msix[i].vector);
|
||||
irq_set_affinity_hint(qedf->int_info.msix[i].vector,
|
||||
NULL);
|
||||
irq_set_affinity_notifier(qedf->int_info.msix[i].vector,
|
||||
NULL);
|
||||
free_irq(qedf->int_info.msix[i].vector,
|
||||
&qedf->fp_array[i]);
|
||||
vector_idx = i * qedf->dev_info.common.num_hwfns +
|
||||
qed_ops->common->get_affin_hwfn_idx(qedf->cdev);
|
||||
QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC,
|
||||
"Freeing IRQ #%d vector_idx=%d.\n",
|
||||
i, vector_idx);
|
||||
vector = qedf->int_info.msix[vector_idx].vector;
|
||||
synchronize_irq(vector);
|
||||
irq_set_affinity_hint(vector, NULL);
|
||||
irq_set_affinity_notifier(vector, NULL);
|
||||
free_irq(vector, &qedf->fp_array[i]);
|
||||
}
|
||||
} else
|
||||
qed_ops->common->simd_handler_clean(qedf->cdev,
|
||||
@ -2240,11 +2245,19 @@ static void qedf_sync_free_irqs(struct qedf_ctx *qedf)
|
||||
static int qedf_request_msix_irq(struct qedf_ctx *qedf)
|
||||
{
|
||||
int i, rc, cpu;
|
||||
u16 vector_idx = 0;
|
||||
u32 vector;
|
||||
|
||||
cpu = cpumask_first(cpu_online_mask);
|
||||
for (i = 0; i < qedf->num_queues; i++) {
|
||||
rc = request_irq(qedf->int_info.msix[i].vector,
|
||||
qedf_msix_handler, 0, "qedf", &qedf->fp_array[i]);
|
||||
vector_idx = i * qedf->dev_info.common.num_hwfns +
|
||||
qed_ops->common->get_affin_hwfn_idx(qedf->cdev);
|
||||
QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC,
|
||||
"Requesting IRQ #%d vector_idx=%d.\n",
|
||||
i, vector_idx);
|
||||
vector = qedf->int_info.msix[vector_idx].vector;
|
||||
rc = request_irq(vector, qedf_msix_handler, 0, "qedf",
|
||||
&qedf->fp_array[i]);
|
||||
|
||||
if (rc) {
|
||||
QEDF_WARN(&(qedf->dbg_ctx), "request_irq failed.\n");
|
||||
@ -2253,8 +2266,7 @@ static int qedf_request_msix_irq(struct qedf_ctx *qedf)
|
||||
}
|
||||
|
||||
qedf->int_info.used_cnt++;
|
||||
rc = irq_set_affinity_hint(qedf->int_info.msix[i].vector,
|
||||
get_cpu_mask(cpu));
|
||||
rc = irq_set_affinity_hint(vector, get_cpu_mask(cpu));
|
||||
cpu = cpumask_next(cpu, cpu_online_mask);
|
||||
}
|
||||
|
||||
@ -3211,6 +3223,11 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
|
||||
goto err1;
|
||||
}
|
||||
|
||||
QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC,
|
||||
"dev_info: num_hwfns=%d affin_hwfn_idx=%d.\n",
|
||||
qedf->dev_info.common.num_hwfns,
|
||||
qed_ops->common->get_affin_hwfn_idx(qedf->cdev));
|
||||
|
||||
/* queue allocation code should come here
|
||||
* order should be
|
||||
* slowpath_start
|
||||
|
Loading…
Reference in New Issue
Block a user