Skip to content

Commit e7f8516

Browse files
Yinghai Lumartinkpetersen
authored andcommitted
megaraid_sas: Fix probing cards without io port
Found one megaraid_sas HBA probe fails, [ 187.235190] scsi host2: Avago SAS based MegaRAID driver [ 191.112365] megaraid_sas 0000:89:00.0: BAR 0: can't reserve [io 0x0000-0x00ff] [ 191.120548] megaraid_sas 0000:89:00.0: IO memory region busy! and the card has resource like, [ 125.097714] pci 0000:89:00.0: [1000:005d] type 00 class 0x010400 [ 125.104446] pci 0000:89:00.0: reg 0x10: [io 0x0000-0x00ff] [ 125.110686] pci 0000:89:00.0: reg 0x14: [mem 0xce400000-0xce40ffff 64bit] [ 125.118286] pci 0000:89:00.0: reg 0x1c: [mem 0xce300000-0xce3fffff 64bit] [ 125.125891] pci 0000:89:00.0: reg 0x30: [mem 0xce200000-0xce2fffff pref] that does not io port resource allocated from BIOS, and kernel can not assign one as io port shortage. The driver is only looking for MEM, and should not fail. It turns out megasas_init_fw() etc are using bar index as mask. index 1 is used as mask 1, so that pci_request_selected_regions() is trying to request BAR0 instead of BAR1. Fix all related reference. Fixes: b6d5d88 ("megaraid_sas: Use lowest memory bar for SR-IOV VF support") Signed-off-by: Yinghai Lu <yinghai@kernel.org> Acked-by: Kashyap Desai <kashyap.desai@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent fa00c43 commit e7f8516

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

drivers/scsi/megaraid/megaraid_sas_base.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5037,7 +5037,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
50375037
/* Find first memory bar */
50385038
bar_list = pci_select_bars(instance->pdev, IORESOURCE_MEM);
50395039
instance->bar = find_first_bit(&bar_list, sizeof(unsigned long));
5040-
if (pci_request_selected_regions(instance->pdev, instance->bar,
5040+
if (pci_request_selected_regions(instance->pdev, 1<<instance->bar,
50415041
"megasas: LSI")) {
50425042
dev_printk(KERN_DEBUG, &instance->pdev->dev, "IO memory region busy!\n");
50435043
return -EBUSY;
@@ -5339,7 +5339,7 @@ static int megasas_init_fw(struct megasas_instance *instance)
53395339
iounmap(instance->reg_set);
53405340

53415341
fail_ioremap:
5342-
pci_release_selected_regions(instance->pdev, instance->bar);
5342+
pci_release_selected_regions(instance->pdev, 1<<instance->bar);
53435343

53445344
return -EINVAL;
53455345
}
@@ -5360,7 +5360,7 @@ static void megasas_release_mfi(struct megasas_instance *instance)
53605360

53615361
iounmap(instance->reg_set);
53625362

5363-
pci_release_selected_regions(instance->pdev, instance->bar);
5363+
pci_release_selected_regions(instance->pdev, 1<<instance->bar);
53645364
}
53655365

53665366
/**

drivers/scsi/megaraid/megaraid_sas_fusion.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2603,7 +2603,7 @@ megasas_release_fusion(struct megasas_instance *instance)
26032603

26042604
iounmap(instance->reg_set);
26052605

2606-
pci_release_selected_regions(instance->pdev, instance->bar);
2606+
pci_release_selected_regions(instance->pdev, 1<<instance->bar);
26072607
}
26082608

26092609
/**

0 commit comments

Comments
 (0)