* [PATCH] pmcraid: switch to pci_alloc_irq_vectors
@ 2016-11-18 6:28 Christoph Hellwig
2016-11-29 16:42 ` Martin K. Petersen
2017-01-09 9:54 ` Hannes Reinecke
0 siblings, 2 replies; 5+ messages in thread
From: Christoph Hellwig @ 2016-11-18 6:28 UTC (permalink / raw)
To: linux-scsi
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/pmcraid.c | 92 ++++++++++++++++++++++----------------------------
drivers/scsi/pmcraid.h | 1 -
2 files changed, 41 insertions(+), 52 deletions(-)
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index 68a5c34..b517642 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -4590,16 +4590,14 @@ static void pmcraid_tasklet_function(unsigned long instance)
static
void pmcraid_unregister_interrupt_handler(struct pmcraid_instance *pinstance)
{
+ struct pci_dev *pdev = pinstance->pdev;
int i;
for (i = 0; i < pinstance->num_hrrq; i++)
- free_irq(pinstance->hrrq_vector[i].vector,
- &(pinstance->hrrq_vector[i]));
+ free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]);
- if (pinstance->interrupt_mode) {
- pci_disable_msix(pinstance->pdev);
- pinstance->interrupt_mode = 0;
- }
+ pinstance->interrupt_mode = 0;
+ pci_free_irq_vectors(pdev);
}
/**
@@ -4612,60 +4610,52 @@ void pmcraid_unregister_interrupt_handler(struct pmcraid_instance *pinstance)
static int
pmcraid_register_interrupt_handler(struct pmcraid_instance *pinstance)
{
- int rc;
struct pci_dev *pdev = pinstance->pdev;
+ unsigned int irq_flag = PCI_IRQ_LEGACY, flag;
+ int num_hrrq, rc, i;
+ irq_handler_t isr;
- if ((pmcraid_enable_msix) &&
- (pci_find_capability(pdev, PCI_CAP_ID_MSIX))) {
- int num_hrrq = PMCRAID_NUM_MSIX_VECTORS;
- struct msix_entry entries[PMCRAID_NUM_MSIX_VECTORS];
- int i;
- for (i = 0; i < PMCRAID_NUM_MSIX_VECTORS; i++)
- entries[i].entry = i;
-
- num_hrrq = pci_enable_msix_range(pdev, entries, 1, num_hrrq);
- if (num_hrrq < 0)
- goto pmcraid_isr_legacy;
-
- for (i = 0; i < num_hrrq; i++) {
- pinstance->hrrq_vector[i].hrrq_id = i;
- pinstance->hrrq_vector[i].drv_inst = pinstance;
- pinstance->hrrq_vector[i].vector = entries[i].vector;
- rc = request_irq(pinstance->hrrq_vector[i].vector,
- pmcraid_isr_msix, 0,
- PMCRAID_DRIVER_NAME,
- &(pinstance->hrrq_vector[i]));
-
- if (rc) {
- int j;
- for (j = 0; j < i; j++)
- free_irq(entries[j].vector,
- &(pinstance->hrrq_vector[j]));
- pci_disable_msix(pdev);
- goto pmcraid_isr_legacy;
- }
- }
+ if (pmcraid_enable_msix)
+ irq_flag |= PCI_IRQ_MSIX;
- pinstance->num_hrrq = num_hrrq;
+ num_hrrq = pci_alloc_irq_vectors(pdev, 1, PMCRAID_NUM_MSIX_VECTORS,
+ irq_flag);
+ if (num_hrrq < 0)
+ return num_hrrq;
+
+ if (pdev->msix_enabled) {
+ flag = 0;
+ isr = pmcraid_isr_msix;
+ } else {
+ flag = IRQF_SHARED;
+ isr = pmcraid_isr;
+ }
+
+ for (i = 0; i < num_hrrq; i++) {
+ struct pmcraid_isr_param *vec = &pinstance->hrrq_vector[i];
+
+ vec->hrrq_id = i;
+ vec->drv_inst = pinstance;
+ rc = request_irq(pci_irq_vector(pdev, i), isr, flag,
+ PMCRAID_DRIVER_NAME, vec);
+ if (rc)
+ goto out_unwind;
+ }
+
+ pinstance->num_hrrq = num_hrrq;
+ if (pdev->msix_enabled) {
pinstance->interrupt_mode = 1;
iowrite32(DOORBELL_INTR_MODE_MSIX,
pinstance->int_regs.host_ioa_interrupt_reg);
ioread32(pinstance->int_regs.host_ioa_interrupt_reg);
- goto pmcraid_isr_out;
}
-pmcraid_isr_legacy:
- /* If MSI-X registration failed fallback to legacy mode, where
- * only one hrrq entry will be used
- */
- pinstance->hrrq_vector[0].hrrq_id = 0;
- pinstance->hrrq_vector[0].drv_inst = pinstance;
- pinstance->hrrq_vector[0].vector = pdev->irq;
- pinstance->num_hrrq = 1;
-
- rc = request_irq(pdev->irq, pmcraid_isr, IRQF_SHARED,
- PMCRAID_DRIVER_NAME, &pinstance->hrrq_vector[0]);
-pmcraid_isr_out:
+ return 0;
+
+out_unwind:
+ while (--i > 0)
+ free_irq(pci_irq_vector(pdev, i), &pinstance->hrrq_vector[i]);
+ pci_free_irq_vectors(pdev);
return rc;
}
diff --git a/drivers/scsi/pmcraid.h b/drivers/scsi/pmcraid.h
index e1d150f..568b18a 100644
--- a/drivers/scsi/pmcraid.h
+++ b/drivers/scsi/pmcraid.h
@@ -628,7 +628,6 @@ struct pmcraid_interrupts {
/* ISR parameters LLD allocates (one for each MSI-X if enabled) vectors */
struct pmcraid_isr_param {
struct pmcraid_instance *drv_inst;
- u16 vector; /* allocated msi-x vector */
u8 hrrq_id; /* hrrq entry index */
};
--
2.1.4
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] pmcraid: switch to pci_alloc_irq_vectors
2016-11-18 6:28 [PATCH] pmcraid: switch to pci_alloc_irq_vectors Christoph Hellwig
@ 2016-11-29 16:42 ` Martin K. Petersen
2017-01-08 15:00 ` Christoph Hellwig
2017-01-09 9:54 ` Hannes Reinecke
1 sibling, 1 reply; 5+ messages in thread
From: Martin K. Petersen @ 2016-11-29 16:42 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-scsi
>>>>> "Christoph" == Christoph Hellwig <hch@lst.de> writes:
Somebody please review.
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] pmcraid: switch to pci_alloc_irq_vectors
2016-11-29 16:42 ` Martin K. Petersen
@ 2017-01-08 15:00 ` Christoph Hellwig
2017-01-10 4:47 ` Martin K. Petersen
0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2017-01-08 15:00 UTC (permalink / raw)
To: Martin K. Petersen; +Cc: Christoph Hellwig, linux-scsi
On Tue, Nov 29, 2016 at 11:42:35AM -0500, Martin K. Petersen wrote:
> >>>>> "Christoph" == Christoph Hellwig <hch@lst.de> writes:
>
> Somebody please review.
review ping^2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] pmcraid: switch to pci_alloc_irq_vectors
2017-01-08 15:00 ` Christoph Hellwig
@ 2017-01-10 4:47 ` Martin K. Petersen
0 siblings, 0 replies; 5+ messages in thread
From: Martin K. Petersen @ 2017-01-10 4:47 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Martin K. Petersen, Christoph Hellwig, linux-scsi
>>>>> "Christoph" == Christoph Hellwig <hch@infradead.org> writes:
Christoph> On Tue, Nov 29, 2016 at 11:42:35AM -0500, Martin K. Petersen wrote:
>> >>>>> "Christoph" == Christoph Hellwig <hch@lst.de> writes:
>>
>> Somebody please review.
Christoph> review ping^2
Applied to 4.11/scsi-queue.
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] pmcraid: switch to pci_alloc_irq_vectors
2016-11-18 6:28 [PATCH] pmcraid: switch to pci_alloc_irq_vectors Christoph Hellwig
2016-11-29 16:42 ` Martin K. Petersen
@ 2017-01-09 9:54 ` Hannes Reinecke
1 sibling, 0 replies; 5+ messages in thread
From: Hannes Reinecke @ 2017-01-09 9:54 UTC (permalink / raw)
To: Christoph Hellwig, linux-scsi
On 11/18/2016 07:28 AM, Christoph Hellwig wrote:
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> drivers/scsi/pmcraid.c | 92 ++++++++++++++++++++++----------------------------
> drivers/scsi/pmcraid.h | 1 -
> 2 files changed, 41 insertions(+), 52 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare@suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-01-10 4:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-18 6:28 [PATCH] pmcraid: switch to pci_alloc_irq_vectors Christoph Hellwig
2016-11-29 16:42 ` Martin K. Petersen
2017-01-08 15:00 ` Christoph Hellwig
2017-01-10 4:47 ` Martin K. Petersen
2017-01-09 9:54 ` Hannes Reinecke
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).