Skip to contentSkip to conversation

fix fusion breakage with multiple PCI domains

PATCH In review Bjorn Helgaas 1 participant 3 messages Mar 17, 2005 – Mar 25, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fix fusion breakage with multiple PCI domains

mpt_detect_bound_ports(): Don't assume that two devices with the same
dev->bus->number are on the same bus. With multiple PCI domains, many buses may have the same number.

===== drivers/message/fusion/mptbase.c 1.40 vs edited =====

drivers/message/fusion/mptbase.c +3 -3
@@ -1834,14 +1834,14 @@
 
 	match_lo = pdev->devfn-1;
 	match_hi = pdev->devfn+1;
-	dprintk((MYIOC_s_INFO_FMT "PCI bus/devfn=%x/%x, searching for devfn match on %x or %x\n",
-			ioc->name, pdev->bus->number, pdev->devfn, match_lo, match_hi));
+	dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x, searching for devfn match on %x or %x\n",
+			ioc->name, pci_name(pdev), pdev->devfn, match_lo, match_hi));
 
 	list_for_each_entry(ioc_srch, &ioc_list, list) {
 		struct pci_dev *_pcidev = ioc_srch->pcidev;
 
 		if ((_pcidev->device == pdev->device) &&
-		    (_pcidev->bus->number == pdev->bus->number) &&
+		    (_pcidev->bus == pdev->bus) &&
 		    (_pcidev->devfn == match_lo || _pcidev->devfn == match_hi) ) {
 			/* Paranoia checks */
 			if (ioc->alt_ioc != NULL) {
#1 lore raw
Quoted 3 lines · Bjorn Helgaas

mpt_detect_bound_ports(): Don't assume that two devices with the same
dev->bus->number are on the same bus. With multiple PCI domains, many buses may have the same number.

Maybe mpt_detect_bound_ports() could be rewritten to use pci_get_slot() instead? tg3_find_5704_peer() looks like it's doing basically the same thing; maybe you could copy it.

Quoted 22 lines

===== drivers/message/fusion/mptbase.c 1.40 vs edited =====

drivers/message/fusion/mptbase.c +3 -3
@@ -1834,14 +1834,14 @@
 
 	match_lo = pdev->devfn-1;
 	match_hi = pdev->devfn+1;
-	dprintk((MYIOC_s_INFO_FMT "PCI bus/devfn=%x/%x, searching for devfn match on %x or %x\n",
-			ioc->name, pdev->bus->number, pdev->devfn, match_lo, match_hi));
+	dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x, searching for devfn match on %x or %x\n",
+			ioc->name, pci_name(pdev), pdev->devfn, match_lo, match_hi));
 
 	list_for_each_entry(ioc_srch, &ioc_list, list) {
 		struct pci_dev *_pcidev = ioc_srch->pcidev;
 
 		if ((_pcidev->device == pdev->device) &&
-		    (_pcidev->bus->number == pdev->bus->number) &&
+		    (_pcidev->bus == pdev->bus) &&
 		    (_pcidev->devfn == match_lo || _pcidev->devfn == match_hi) ) {
 			/* Paranoia checks */
 			if (ioc->alt_ioc != NULL) {
#2 lore raw
In reply to Bjorn Helgaas

Any comments on the patch below? Eric, sorry I didn't sent this to you before -- maybe you'd consider the MAINTAINERS patch below as well?

I also suggested pci_get_slot() as a possibility for rewriting the function below (mpt_detect_bound_ports()). But that's a bit more than I want to do at the moment. We need a fix for RHEL4 and SLES9, and as a non-expert in mpt fusion, I'm more comfortable advocating the simple change below.

Quoted 18 lines · Bjorn Helgaas

mpt_detect_bound_ports(): Don't assume that two devices with the same
dev->bus->number are on the same bus. With multiple PCI domains, many buses may have the same number.

===== drivers/message/fusion/mptbase.c 1.40 vs edited =====

drivers/message/fusion/mptbase.c +2 -2
@@ -1834,14 +1834,14 @@
 
 	match_lo = pdev->devfn-1;
 	match_hi = pdev->devfn+1;
-	dprintk((MYIOC_s_INFO_FMT "PCI bus/devfn=%x/%x, searching for devfn match on %x or %x\n",
-			ioc->name, pdev->bus->number, pdev->devfn, match_lo, match_hi));
+	dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x, searching for devfn match on %x or %x\n",
+			ioc->name, pci_name(pdev), pdev->devfn, match_lo, match_hi));

drivers/message/fusion/mptbase.c line 1847

Quoted 10 lines
drivers/message/fusion/mptbase.c +1 -1
 
 	list_for_each_entry(ioc_srch, &ioc_list, list) {
 		struct pci_dev *_pcidev = ioc_srch->pcidev;
 
 		if ((_pcidev->device == pdev->device) &&
-		    (_pcidev->bus->number == pdev->bus->number) &&
+		    (_pcidev->bus == pdev->bus) &&
 		    (_pcidev->devfn == match_lo || _pcidev->devfn == match_hi) ) {
 			/* Paranoia checks */
 			if (ioc->alt_ioc != NULL) {

===== MAINTAINERS 1.291 vs edited =====

MAINTAINERS +6 -0
@@ -1449,6 +1449,12 @@
 L:	[email protected]
 S:	Maintained
 
+LSILOGIC FC9XX/53C1030/53C1035 FUSION MPT DRIVER
+P:	Eric Moore
+M:	[email protected]
+L:	[email protected]
+S:	Maintained
+
 M68K ARCHITECTURE
 P:	Geert Uytterhoeven
 M:	[email protected]