Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3cb0e47 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Martin K. Petersen
Browse files

scsi: isci: switch to pci_alloc_irq_vectors

parent 9dadfb97
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -295,7 +295,6 @@ enum sci_controller_states {
#define SCI_MAX_MSIX_INT (SCI_NUM_MSI_X_INT*SCI_MAX_CONTROLLERS)
#define SCI_MAX_MSIX_INT (SCI_NUM_MSI_X_INT*SCI_MAX_CONTROLLERS)


struct isci_pci_info {
struct isci_pci_info {
	struct msix_entry msix_entries[SCI_MAX_MSIX_INT];
	struct isci_host *hosts[SCI_MAX_CONTROLLERS];
	struct isci_host *hosts[SCI_MAX_CONTROLLERS];
	struct isci_orom *orom;
	struct isci_orom *orom;
};
};
+10 −13
Original line number Original line Diff line number Diff line
@@ -350,16 +350,12 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
	 */
	 */
	num_msix = num_controllers(pdev) * SCI_NUM_MSI_X_INT;
	num_msix = num_controllers(pdev) * SCI_NUM_MSI_X_INT;


	for (i = 0; i < num_msix; i++)
	err = pci_alloc_irq_vectors(pdev, num_msix, num_msix, PCI_IRQ_MSIX);
		pci_info->msix_entries[i].entry = i;
	if (err < 0)

	err = pci_enable_msix_exact(pdev, pci_info->msix_entries, num_msix);
	if (err)
		goto intx;
		goto intx;


	for (i = 0; i < num_msix; i++) {
	for (i = 0; i < num_msix; i++) {
		int id = i / SCI_NUM_MSI_X_INT;
		int id = i / SCI_NUM_MSI_X_INT;
		struct msix_entry *msix = &pci_info->msix_entries[i];
		irq_handler_t isr;
		irq_handler_t isr;


		ihost = pci_info->hosts[id];
		ihost = pci_info->hosts[id];
@@ -369,8 +365,8 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
		else
		else
			isr = isci_msix_isr;
			isr = isci_msix_isr;


		err = devm_request_irq(&pdev->dev, msix->vector, isr, 0,
		err = devm_request_irq(&pdev->dev, pci_irq_vector(pdev, i),
				       DRV_NAME"-msix", ihost);
				isr, 0, DRV_NAME"-msix", ihost);
		if (!err)
		if (!err)
			continue;
			continue;


@@ -378,18 +374,19 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
		while (i--) {
		while (i--) {
			id = i / SCI_NUM_MSI_X_INT;
			id = i / SCI_NUM_MSI_X_INT;
			ihost = pci_info->hosts[id];
			ihost = pci_info->hosts[id];
			msix = &pci_info->msix_entries[i];
			devm_free_irq(&pdev->dev, pci_irq_vector(pdev, i),
			devm_free_irq(&pdev->dev, msix->vector, ihost);
					ihost);
		}
		}
		pci_disable_msix(pdev);
		pci_free_irq_vectors(pdev);
		goto intx;
		goto intx;
	}
	}
	return 0;
	return 0;


 intx:
 intx:
	for_each_isci_host(i, ihost, pdev) {
	for_each_isci_host(i, ihost, pdev) {
		err = devm_request_irq(&pdev->dev, pdev->irq, isci_intx_isr,
		err = devm_request_irq(&pdev->dev, pci_irq_vector(pdev, 0),
				       IRQF_SHARED, DRV_NAME"-intx", ihost);
				isci_intx_isr, IRQF_SHARED, DRV_NAME"-intx",
				ihost);
		if (err)
		if (err)
			break;
			break;
	}
	}