fix fusion breakage with multiple PCI domains
Subsystems (2)
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 ) {
Quoted 3 lines · Bjorn Helgaas
mpt_detect_bound_ports(): Don't assume that two devices with the same
dev->bus->numberare 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.c1.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 ) {
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->numberare on the same bus. With multiple PCI domains, many buses may have the same number.Signed-off-by Bjorn Helgaas <[email protected]>=====
drivers/message/fusion/mptbase.c1.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
-1list_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]