aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/cciss.c41
1 files changed, 25 insertions, 16 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 55ca1f45c0c7..63fe05af2c5d 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -4719,6 +4719,28 @@ static void cciss_free_cmd_pool(ctlr_info_t *h)
4719 h->errinfo_pool, h->errinfo_pool_dhandle); 4719 h->errinfo_pool, h->errinfo_pool_dhandle);
4720} 4720}
4721 4721
4722static int cciss_request_irq(ctlr_info_t *h,
4723 irqreturn_t (*msixhandler)(int, void *),
4724 irqreturn_t (*intxhandler)(int, void *))
4725{
4726 if (h->msix_vector || h->msi_vector) {
4727 if (!request_irq(h->intr[PERF_MODE_INT], msixhandler,
4728 IRQF_DISABLED, h->devname, h))
4729 return 0;
4730 dev_err(&h->pdev->dev, "Unable to get msi irq %d"
4731 " for %s\n", h->intr[PERF_MODE_INT],
4732 h->devname);
4733 return -1;
4734 }
4735
4736 if (!request_irq(h->intr[PERF_MODE_INT], intxhandler,
4737 IRQF_DISABLED, h->devname, h))
4738 return 0;
4739 dev_err(&h->pdev->dev, "Unable to get irq %d for %s\n",
4740 h->intr[PERF_MODE_INT], h->devname);
4741 return -1;
4742}
4743
4722/* 4744/*
4723 * This is it. Find all the controllers and register them. I really hate 4745 * This is it. Find all the controllers and register them. I really hate
4724 * stealing all these major device numbers. 4746 * stealing all these major device numbers.
@@ -4789,22 +4811,9 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
4789 4811
4790 /* make sure the board interrupts are off */ 4812 /* make sure the board interrupts are off */
4791 h->access.set_intr_mask(h, CCISS_INTR_OFF); 4813 h->access.set_intr_mask(h, CCISS_INTR_OFF);
4792 if (h->msi_vector || h->msix_vector) { 4814 rc = cciss_request_irq(h, do_cciss_msix_intr, do_cciss_intx);
4793 if (request_irq(h->intr[PERF_MODE_INT], 4815 if (rc)
4794 do_cciss_msix_intr, 4816 goto clean2;
4795 IRQF_DISABLED, h->devname, h)) {
4796 dev_err(&h->pdev->dev, "Unable to get irq %d for %s\n",
4797 h->intr[PERF_MODE_INT], h->devname);
4798 goto clean2;
4799 }
4800 } else {
4801 if (request_irq(h->intr[PERF_MODE_INT], do_cciss_intx,
4802 IRQF_DISABLED, h->devname, h)) {
4803 dev_err(&h->pdev->dev, "Unable to get irq %d for %s\n",
4804 h->intr[PERF_MODE_INT], h->devname);
4805 goto clean2;
4806 }
4807 }
4808 4817
4809 dev_info(&h->pdev->dev, "%s: <0x%x> at PCI %s IRQ %d%s using DAC\n", 4818 dev_info(&h->pdev->dev, "%s: <0x%x> at PCI %s IRQ %d%s using DAC\n",
4810 h->devname, pdev->device, pci_name(pdev), 4819 h->devname, pdev->device, pci_name(pdev),