Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SCSI] ipr: ipr_test_msi() fails when running with msi-x enabled adapter

Loading ipr modules failed(-22) with msi-x enabled adapter. In ipr_test_msi(),
We need to pass the first vector of msix vectors instead of using pdev->irq
to request_irq() when adapter enables msix feature.

Signed-off-by: Wen Xiong <wenxiong@linux.vnet.ibm.com>
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>

authored by

wenxiong@linux.vnet.ibm.com and committed by
James Bottomley
f19799f4 fe696909

+8 -2
+8 -2
drivers/scsi/ipr.c
··· 9349 9349 int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg); 9350 9350 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); 9351 9351 9352 - rc = request_irq(pdev->irq, ipr_test_intr, 0, IPR_NAME, ioa_cfg); 9352 + if (ioa_cfg->intr_flag == IPR_USE_MSIX) 9353 + rc = request_irq(ioa_cfg->vectors_info[0].vec, ipr_test_intr, 0, IPR_NAME, ioa_cfg); 9354 + else 9355 + rc = request_irq(pdev->irq, ipr_test_intr, 0, IPR_NAME, ioa_cfg); 9353 9356 if (rc) { 9354 9357 dev_err(&pdev->dev, "Can not assign irq %d\n", pdev->irq); 9355 9358 return rc; ··· 9374 9371 9375 9372 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); 9376 9373 9377 - free_irq(pdev->irq, ioa_cfg); 9374 + if (ioa_cfg->intr_flag == IPR_USE_MSIX) 9375 + free_irq(ioa_cfg->vectors_info[0].vec, ioa_cfg); 9376 + else 9377 + free_irq(pdev->irq, ioa_cfg); 9378 9378 9379 9379 LEAVE; 9380 9380