Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 2820

kernel-2.6.18-194.11.1.el5.src.rpm

From: Ed Pollard <epollard@redhat.com>
Date: Tue, 8 Apr 2008 14:21:24 -0400
Subject: [pci] revert 'PCI: remove transparent bridge sizing'
Message-id: 47FBB7A4.4060207@redhat.com
O-Subject: [RHEL5.2 PATCH] RHBZ #252260 pci: revert "PCI: remove transparent bridge sizing"
Bugzilla: 252260

bugzilla:
https://bugzilla.redhat.com/show_bug.cgi?id=252260

Description:
   This patch reverts a previously accepted upstream patch that was then found to cause a regression
between 2.6.24 and 2.6.25 as detailed in the following thread: http://lkml.org/lkml/2008/3/26/176

   The best description is why this needs to be reverted is from: http://lkml.org/lkml/2008/3/26/94
Date	Wed, 26 Mar 2008 13:14:50 +0300
From	Ivan Kokshaysky
----quote---
Yeah, it's resource issue for sure. The 00:1e.0 is a transparent bridge,
 so I blame commit 8fa5913d54f3b1e09948e6a0db34da887e05ff1f
 (PCI: remove transparent bridge sizing). It's wrong for two reasons:
 - we cannot ignore standard windows of a transparent bridge as they
   always positive decode, so they are potential source of address conflicts;
 - that patch just broke whole bridge setup logic in unpredictable way.
---end quote---

   This reverts part of a patch that Konrad posted here:
http://post-office.corp.redhat.com/archives/rhkernel-list/2007-October/msg00521.html
After testing at IBM the original issue that these patches were submitted to address
is still fixed/working with this reverted.

Please review.

-------

Acked-by: Peter Martuccelli <peterm@redhat.com>

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 0bba74c..8f7bcf5 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -487,12 +487,7 @@ pci_bus_size_bridges(struct pci_bus *bus)
 		break;
 
 	case PCI_CLASS_BRIDGE_PCI:
-		/* don't size subtractive decoding (transparent)
-		 * PCI-to-PCI bridges */
-		if (bus->self->transparent)
-			break;
 		pci_bridge_check_ranges(bus);
-		/* fall through */
 	default:
 		pbus_size_io(bus);
 		/* If the bridge supports prefetchable range, size it