[PATCH -v2] x86, pci: Handle fallout pci devices with peer root bus

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Graham bisected
|    commit 3e3da00c01d050307e753fb7b3e84aefc16da0d0
|    x86/pci: AMD one chain system to use pci read out res

cause the SND_HDA_INTEL doesn't work anymore.

https://bugzilla.kernel.org/show_bug.cgi?id=16007

It turns out that his system with via chipset only have one hypertransport
chain, but does have one extra orphan device 80:01.0

 PCI: Probing PCI hardware (bus 00)
 PCI: Discovered primary peer bus 80 [IRQ]

 node 0 link 0: io port [1000, ffffff]
 TOM: 0000000080000000 aka 2048M
 node 0 link 0: mmio [e0000000, efffffff]
 node 0 link 0: mmio [a0000, bffff]
 node 0 link 0: mmio [80000000, ffffffff]
 bus: [00, ff] on node 0 link 0

Try to make peer root buses to share same mmio/io resources if those peer root
buses fall into the same bus range.

Also need to update insert_resource to avoid insert same resource two times.

We need this patch for 2.6.34 stable.

Reported-by: Graham Ramsey <ramsey.graham@xxxxxxxxxxxx>
Bisected-by: Graham Ramsey <ramsey.graham@xxxxxxxxxxxx>
Tested-by: Graham Ramsey <ramsey.graham@xxxxxxxxxxxx>
Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
Cc: stable@xxxxxxxxxx

---
 arch/x86/pci/bus_numa.c |    3 ++-
 kernel/resource.c       |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

Index: linux-2.6/arch/x86/pci/bus_numa.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/bus_numa.c
+++ linux-2.6/arch/x86/pci/bus_numa.c
@@ -22,7 +22,8 @@ void x86_pci_root_bus_res_quirks(struct
 		return;
 
 	for (i = 0; i < pci_root_num; i++) {
-		if (pci_root_info[i].bus_min == b->number)
+		if (pci_root_info[i].bus_min <= b->number &&
+		    pci_root_info[i].bus_max >= b->number)
 			break;
 	}
 
Index: linux-2.6/kernel/resource.c
===================================================================
--- linux-2.6.orig/kernel/resource.c
+++ linux-2.6/kernel/resource.c
@@ -451,7 +451,7 @@ static struct resource * __insert_resour
 		if (!first)
 			return first;
 
-		if (first == parent)
+		if (first == parent || first == new)
 			return first;
 
 		if ((first->start > new->start) || (first->end < new->end))
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux