> +static int interrupt_init_v3_hw(struct hisi_hba *hisi_hba)How could MSIs be enabled at init time? Even if so you should use
> +{
> + struct device *dev = hisi_hba->dev;
> + struct pci_dev *pdev = hisi_hba->pci_dev;
> + int vectors, i, irq, rc;
> + int max_msi = HISI_SAS_MSI_COUNT_V3_HW;
> + int msi_vectors[HISI_SAS_MSI_COUNT_V3_HW];
> +
> + if (pdev->msi_enabled)
> + pci_disable_msi(pdev);
pci_free_irq_vectors.
> + for (i = 0; i < vectors; i++)You should not need this array, just use pci_irq_vectors().
> + msi_vectors[i] = pdev->irq + i;
.