mirror of https://gitee.com/openkylin/linux.git
IB/hfi1: Update HFI to use the latest PCI API
The HFI PCI IRQ code uses an obsolete PCI API. Update the code to use the new PCI IRQ API and any necessary changes because of the new API. Reviewed-by: Sebastian Sanchez <sebastian.sanchez@intel.com> Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
c4bc615680
commit
05cb18fda9
|
@ -12929,7 +12929,7 @@ static void clean_up_interrupts(struct hfi1_devdata *dd)
|
|||
if (!me->arg) /* => no irq, no affinity */
|
||||
continue;
|
||||
hfi1_put_irq_affinity(dd, me);
|
||||
free_irq(me->irq, me->arg);
|
||||
pci_free_irq(dd->pcidev, i, me->arg);
|
||||
}
|
||||
|
||||
/* clean structures */
|
||||
|
@ -12939,7 +12939,7 @@ static void clean_up_interrupts(struct hfi1_devdata *dd)
|
|||
} else {
|
||||
/* INTx */
|
||||
if (dd->requested_intx_irq) {
|
||||
free_irq(dd->pcidev->irq, dd);
|
||||
pci_free_irq(dd->pcidev, 0, dd);
|
||||
dd->requested_intx_irq = 0;
|
||||
}
|
||||
disable_intx(dd->pcidev);
|
||||
|
@ -12998,10 +12998,8 @@ static int request_intx_irq(struct hfi1_devdata *dd)
|
|||
{
|
||||
int ret;
|
||||
|
||||
snprintf(dd->intx_name, sizeof(dd->intx_name), DRIVER_NAME "_%d",
|
||||
dd->unit);
|
||||
ret = request_irq(dd->pcidev->irq, general_interrupt,
|
||||
IRQF_SHARED, dd->intx_name, dd);
|
||||
ret = pci_request_irq(dd->pcidev, 0, general_interrupt, NULL, dd,
|
||||
DRIVER_NAME "_%d", dd->unit);
|
||||
if (ret)
|
||||
dd_dev_err(dd, "unable to request INTx interrupt, err %d\n",
|
||||
ret);
|
||||
|
@ -13044,13 +13042,14 @@ static int request_msix_irqs(struct hfi1_devdata *dd)
|
|||
int idx;
|
||||
struct hfi1_ctxtdata *rcd = NULL;
|
||||
struct sdma_engine *sde = NULL;
|
||||
char name[MAX_NAME_SIZE];
|
||||
|
||||
/* obtain the arguments to request_irq */
|
||||
/* obtain the arguments to pci_request_irq */
|
||||
if (first_general <= i && i < last_general) {
|
||||
idx = i - first_general;
|
||||
handler = general_interrupt;
|
||||
arg = dd;
|
||||
snprintf(me->name, sizeof(me->name),
|
||||
snprintf(name, sizeof(name),
|
||||
DRIVER_NAME "_%d", dd->unit);
|
||||
err_info = "general";
|
||||
me->type = IRQ_GENERAL;
|
||||
|
@ -13059,7 +13058,7 @@ static int request_msix_irqs(struct hfi1_devdata *dd)
|
|||
sde = &dd->per_sdma[idx];
|
||||
handler = sdma_interrupt;
|
||||
arg = sde;
|
||||
snprintf(me->name, sizeof(me->name),
|
||||
snprintf(name, sizeof(name),
|
||||
DRIVER_NAME "_%d sdma%d", dd->unit, idx);
|
||||
err_info = "sdma";
|
||||
remap_sdma_interrupts(dd, idx, i);
|
||||
|
@ -13078,7 +13077,7 @@ static int request_msix_irqs(struct hfi1_devdata *dd)
|
|||
handler = receive_context_interrupt;
|
||||
thread = receive_context_thread;
|
||||
arg = rcd;
|
||||
snprintf(me->name, sizeof(me->name),
|
||||
snprintf(name, sizeof(name),
|
||||
DRIVER_NAME "_%d kctxt%d",
|
||||
dd->unit, idx);
|
||||
err_info = "receive context";
|
||||
|
@ -13099,18 +13098,10 @@ static int request_msix_irqs(struct hfi1_devdata *dd)
|
|||
if (!arg)
|
||||
continue;
|
||||
/* make sure the name is terminated */
|
||||
me->name[sizeof(me->name) - 1] = 0;
|
||||
name[sizeof(name) - 1] = 0;
|
||||
me->irq = pci_irq_vector(dd->pcidev, i);
|
||||
/*
|
||||
* On err return me->irq. Don't need to clear this
|
||||
* because 'arg' has not been set, and cleanup will
|
||||
* do the right thing.
|
||||
*/
|
||||
if (me->irq < 0)
|
||||
return me->irq;
|
||||
|
||||
ret = request_threaded_irq(me->irq, handler, thread, 0,
|
||||
me->name, arg);
|
||||
ret = pci_request_irq(dd->pcidev, i, handler, thread, arg,
|
||||
name);
|
||||
if (ret) {
|
||||
dd_dev_err(dd,
|
||||
"unable to allocate %s interrupt, irq %d, index %d, err %d\n",
|
||||
|
@ -13118,7 +13109,7 @@ static int request_msix_irqs(struct hfi1_devdata *dd)
|
|||
return ret;
|
||||
}
|
||||
/*
|
||||
* assign arg after request_irq call, so it will be
|
||||
* assign arg after pci_request_irq call, so it will be
|
||||
* cleaned up
|
||||
*/
|
||||
me->arg = arg;
|
||||
|
@ -13136,7 +13127,7 @@ void hfi1_vnic_synchronize_irq(struct hfi1_devdata *dd)
|
|||
int i;
|
||||
|
||||
if (!dd->num_msix_entries) {
|
||||
synchronize_irq(dd->pcidev->irq);
|
||||
synchronize_irq(pci_irq_vector(dd->pcidev, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -13157,7 +13148,7 @@ void hfi1_reset_vnic_msix_info(struct hfi1_ctxtdata *rcd)
|
|||
return;
|
||||
|
||||
hfi1_put_irq_affinity(dd, me);
|
||||
free_irq(me->irq, me->arg);
|
||||
pci_free_irq(dd->pcidev, rcd->msix_intr, me->arg);
|
||||
|
||||
me->arg = NULL;
|
||||
}
|
||||
|
@ -13180,28 +13171,21 @@ void hfi1_set_vnic_msix_info(struct hfi1_ctxtdata *rcd)
|
|||
rcd->ireg = (IS_RCVAVAIL_START + idx) / 64;
|
||||
rcd->imask = ((u64)1) <<
|
||||
((IS_RCVAVAIL_START + idx) % 64);
|
||||
|
||||
snprintf(me->name, sizeof(me->name),
|
||||
DRIVER_NAME "_%d kctxt%d", dd->unit, idx);
|
||||
me->name[sizeof(me->name) - 1] = 0;
|
||||
me->type = IRQ_RCVCTXT;
|
||||
me->irq = pci_irq_vector(dd->pcidev, rcd->msix_intr);
|
||||
if (me->irq < 0) {
|
||||
dd_dev_err(dd, "vnic irq vector request (idx %d) fail %d\n",
|
||||
idx, me->irq);
|
||||
return;
|
||||
}
|
||||
remap_intr(dd, IS_RCVAVAIL_START + idx, rcd->msix_intr);
|
||||
|
||||
ret = request_threaded_irq(me->irq, receive_context_interrupt,
|
||||
receive_context_thread, 0, me->name, arg);
|
||||
ret = pci_request_irq(dd->pcidev, rcd->msix_intr,
|
||||
receive_context_interrupt,
|
||||
receive_context_thread, arg,
|
||||
DRIVER_NAME "_%d kctxt%d", dd->unit, idx);
|
||||
if (ret) {
|
||||
dd_dev_err(dd, "vnic irq request (irq %d, idx %d) fail %d\n",
|
||||
me->irq, idx, ret);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* assign arg after request_irq call, so it will be
|
||||
* assign arg after pci_request_irq call, so it will be
|
||||
* cleaned up
|
||||
*/
|
||||
me->arg = arg;
|
||||
|
@ -13210,7 +13194,7 @@ void hfi1_set_vnic_msix_info(struct hfi1_ctxtdata *rcd)
|
|||
if (ret) {
|
||||
dd_dev_err(dd,
|
||||
"unable to pin IRQ %d\n", ret);
|
||||
free_irq(me->irq, me->arg);
|
||||
pci_free_irq(dd->pcidev, rcd->msix_intr, me->arg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -616,7 +616,6 @@ struct hfi1_msix_entry {
|
|||
enum irq_type type;
|
||||
int irq;
|
||||
void *arg;
|
||||
char name[MAX_NAME_SIZE];
|
||||
cpumask_t mask;
|
||||
struct irq_affinity_notify notify;
|
||||
};
|
||||
|
@ -1183,7 +1182,6 @@ struct hfi1_devdata {
|
|||
|
||||
/* INTx information */
|
||||
u32 requested_intx_irq; /* did we request one? */
|
||||
char intx_name[MAX_NAME_SIZE]; /* INTx name */
|
||||
|
||||
/* general interrupt: mask of handled interrupts */
|
||||
u64 gi_mask[CCE_NUM_INT_CSRS];
|
||||
|
|
Loading…
Reference in New Issue