2014-11-03 12:41:19

by Jiang Liu

[permalink] [raw]
Subject: [PATCH] megaraid_sas : Fix bug in handling return value of pci_enable_msix_range()

Function pci_enable_msix_range() may return negative values for error
conditions. So it's a bug by checking (pci_enable_msix_range() != 0)
for success and causes failure to megaraid driver when MSI is disabled.
[ 16.487267] megaraid_sas 0000:02:00.0: Controller type: iMR
[ 16.487275] genirq: Flags mismatch irq 0. 00000000 (megasas) vs. 00015a00 (tii
mer)
[ 16.487347] megasas: Failed to register IRQ for vector 0.

Fixes: 8ae80ed1734b "megaraid: Use pci_enable_msix_range() instead of pci_enable_msix()"

Signed-off-by: Jiang Liu <[email protected]>
Cc: Alexander Gordeev <[email protected]>
Cc: "Bjorn Helgaas <[email protected]>"
Cc: [email protected]
Cc: <[email protected]> # 3.17
---
drivers/scsi/megaraid/megaraid_sas_base.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index f6a69a3b1b3f..5640ad1c8214 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4453,7 +4453,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
instance->msixentry[i].entry = i;
i = pci_enable_msix_range(instance->pdev, instance->msixentry,
1, instance->msix_vectors);
- if (i)
+ if (i > 0)
instance->msix_vectors = i;
else
instance->msix_vectors = 0;
--
1.7.10.4


2014-11-04 10:43:29

by Sumit Saxena

[permalink] [raw]
Subject: RE: [PATCH] megaraid_sas : Fix bug in handling return value of pci_enable_msix_range()

>-----Original Message-----
>From: Jiang Liu [mailto:[email protected]]
>Sent: Monday, November 03, 2014 6:14 PM
>To: Neela Syam Kolli; James E.J. Bottomley
>Cc: Jiang Liu; Alexander Gordeev; [email protected]; linux-
>[email protected]; [email protected]
>Subject: [PATCH] megaraid_sas : Fix bug in handling return value of
>pci_enable_msix_range()
>
>Function pci_enable_msix_range() may return negative values for error
>conditions. So it's a bug by checking (pci_enable_msix_range() != 0) for
>success and causes failure to megaraid driver when MSI is disabled.
>[ 16.487267] megaraid_sas 0000:02:00.0: Controller type: iMR
>[ 16.487275] genirq: Flags mismatch irq 0. 00000000 (megasas) vs.
00015a00 (tii
>mer)
>[ 16.487347] megasas: Failed to register IRQ for vector 0.
>
>Fixes: 8ae80ed1734b "megaraid: Use pci_enable_msix_range() instead of
>pci_enable_msix()"
>
>Signed-off-by: Jiang Liu <[email protected]>
>Cc: Alexander Gordeev <[email protected]>
>Cc: "Bjorn Helgaas <[email protected]>"
>Cc: [email protected]
>Cc: <[email protected]> # 3.17
>---
> drivers/scsi/megaraid/megaraid_sas_base.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
>b/drivers/scsi/megaraid/megaraid_sas_base.c
>index f6a69a3b1b3f..5640ad1c8214 100644
>--- a/drivers/scsi/megaraid/megaraid_sas_base.c
>+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
>@@ -4453,7 +4453,7 @@ static int megasas_init_fw(struct megasas_instance
>*instance)
> instance->msixentry[i].entry = i;
> i = pci_enable_msix_range(instance->pdev, instance-
>>msixentry,
> 1, instance->msix_vectors);
>- if (i)
>+ if (i > 0)
> instance->msix_vectors = i;
> else
> instance->msix_vectors = 0;

Acked-by: Sumit Saxena <[email protected]>

>--
>1.7.10.4

2014-11-06 16:54:39

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] megaraid_sas : Fix bug in handling return value of pci_enable_msix_range()

Thanks,

applied to the drivers-for-3.18 branch.