rpms/kernel/F-8 linux-2.6-pnp-disable-overlapping-resources.patch, NONE, 1.1 kernel.spec, 1.415, 1.416

Chuck Ebbert (cebbert) fedora-extras-commits at redhat.com
Wed Apr 2 22:25:00 UTC 2008


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4042

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-pnp-disable-overlapping-resources.patch 
Log Message:
* Wed Apr 02 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.24.4-70
- PNP: disable PNP motherboard resources that overlap PCI BARs (#439978)


linux-2.6-pnp-disable-overlapping-resources.patch:

--- NEW FILE linux-2.6-pnp-disable-overlapping-resources.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0509ad5e1a7d9220f09edd5be114bf3bd51a7023
Commit:     0509ad5e1a7d9220f09edd5be114bf3bd51a7023
Parent:     e0aca2330b59752193877da49c6e6b07df78690a
Author:     Bjorn Helgaas <bjorn.helgaas at hp.com>
AuthorDate: Tue Mar 11 15:24:41 2008 -0600
Committer:  Linus Torvalds <torvalds at linux-foundation.org>
CommitDate: Wed Mar 12 12:39:36 2008 -0700

    PNP: disable PNP motherboard resources that overlap PCI BARs
    
    Some BIOSes have PNP motherboard devices with resources that
    partially overlap PCI BARs.  The PNP system driver claims these
    motherboard resources, which prevents the normal PCI driver from
    requesting them later.
    
    This patch disables the PNP resources that conflict with PCI BARs
    so they won't be claimed by the PNP system driver.
    
    Of course, this only works if PCI devices have already been enumerated.
    Currently this is the case because PCI devices are discovered before
    any PNP init via this path:
    
        acpi_pci_root_init() -> acpi_pci_root_add() -> pci_acpi_scan_root() ->
    	pci_scan_bus_parented() -> pci_scan_child_bus() -> ...
    
    Avuton Olrich tested this and confirmed that it fixes his ALSA sound
    card (see http://lkml.org/lkml/2008/1/27/168).
    
    References:
        https://bugzilla.redhat.com/show_bug.cgi?id=280641
        https://bugzilla.redhat.com/show_bug.cgi?id=313491
        http://lkml.org/lkml/2008/1/9/449
        http://thread.gmane.org/gmane.linux.acpi.devel/27312
        http://lkml.org/lkml/2008/1/27/168
    
    Signed-off-by: Bjorn Helgaas <bjorn.helgaas at hp.com>
    Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---
 drivers/pnp/quirks.c |   73 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
index e903b8c..3799320 100644
--- a/drivers/pnp/quirks.c
+++ b/drivers/pnp/quirks.c
@@ -108,6 +108,77 @@ static void quirk_sb16audio_resources(struct pnp_dev *dev)
 		       "pnp: SB audio device quirk - increasing port range\n");
 }
 
+
+#include <linux/pci.h>
+
+static void quirk_system_pci_resources(struct pnp_dev *dev)
+{
+	struct pci_dev *pdev = NULL;
+	resource_size_t pnp_start, pnp_end, pci_start, pci_end;
+	int i, j;
+
+	/*
+	 * Some BIOSes have PNP motherboard devices with resources that
+	 * partially overlap PCI BARs.  The PNP system driver claims these
+	 * motherboard resources, which prevents the normal PCI driver from
+	 * requesting them later.
+	 *
+	 * This patch disables the PNP resources that conflict with PCI BARs
+	 * so they won't be claimed by the PNP system driver.
+	 */
+	for_each_pci_dev(pdev) {
+		for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
+			if (!(pci_resource_flags(pdev, i) & IORESOURCE_MEM) ||
+			    pci_resource_len(pdev, i) == 0)
+				continue;
+
+			pci_start = pci_resource_start(pdev, i);
+			pci_end = pci_resource_end(pdev, i);
+			for (j = 0; j < PNP_MAX_MEM; j++) {
+				if (!pnp_mem_valid(dev, j) ||
+				    pnp_mem_len(dev, j) == 0)
+					continue;
+
+				pnp_start = pnp_mem_start(dev, j);
+				pnp_end = pnp_mem_end(dev, j);
+
+				/*
+				 * If the PNP region doesn't overlap the PCI
+				 * region at all, there's no problem.
+				 */
+				if (pnp_end < pci_start || pnp_start > pci_end)
+					continue;
+
+				/*
+				 * If the PNP region completely encloses (or is
+				 * at least as large as) the PCI region, that's
+				 * also OK.  For example, this happens when the
+				 * PNP device describes a bridge with PCI
+				 * behind it.
+				 */
+				if (pnp_start <= pci_start &&
+				    pnp_end >= pci_end)
+					continue;
+
+				/*
+				 * Otherwise, the PNP region overlaps *part* of
+				 * the PCI region, and that might prevent a PCI
+				 * driver from requesting its resources.
+				 */
+				dev_warn(&dev->dev, "mem resource "
+					"(0x%llx-0x%llx) overlaps %s BAR %d "
+					"(0x%llx-0x%llx), disabling\n",
+					(unsigned long long) pnp_start,
+					(unsigned long long) pnp_end,
+					pci_name(pdev), i,
+					(unsigned long long) pci_start,
+					(unsigned long long) pci_end);
+				pnp_mem_flags(dev, j) = 0;
+			}
+		}
+	}
+}
+
 /*
  *  PnP Quirks
  *  Cards or devices that need some tweaking due to incomplete resource info
@@ -128,6 +199,8 @@ static struct pnp_fixup pnp_fixups[] = {
 	{"CTL0043", quirk_sb16audio_resources},
 	{"CTL0044", quirk_sb16audio_resources},
 	{"CTL0045", quirk_sb16audio_resources},
+	{"PNP0c01", quirk_system_pci_resources},
+	{"PNP0c02", quirk_system_pci_resources},
 	{""}
 };
 


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.415
retrieving revision 1.416
diff -u -r1.415 -r1.416
--- kernel.spec	2 Apr 2008 02:52:21 -0000	1.415
+++ kernel.spec	2 Apr 2008 22:23:57 -0000	1.416
@@ -634,6 +634,7 @@
 Patch382: linux-2.6-pci-revert-remove-transparent-bridge-resizing.patch
 Patch383: linux-2.6-isapnp-fix-limits.patch
 Patch384: linux-2.6-pnp-extend-resource-limits.patch
+Patch385: linux-2.6-pnp-disable-overlapping-resources.patch
 
 Patch400: linux-2.6-scsi-cpqarray-set-master.patch
 Patch402: linux-2.6-scsi-mpt-vmware-fix.patch
@@ -1198,6 +1199,8 @@
 ApplyPatch linux-2.6-isapnp-fix-limits.patch
 # extend memory resource limit for pnp devices
 ApplyPatch linux-2.6-pnp-extend-resource-limits.patch
+# don't let pnp claim pci resources
+ApplyPatch linux-2.6-pnp-disable-overlapping-resources.patch
 
 #
 # SCSI Bits.
@@ -2001,6 +2004,9 @@
 
 
 %changelog
+* Wed Apr 02 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.24.4-70
+- PNP: disable PNP motherboard resources that overlap PCI BARs (#439978)
+
 * Tue Apr 01 2008 John W. Linville <linville at redhat.com> 2.6.24.4-69
 - mac80211: trigger ieee80211_sta_work after opening interface
 - b43: Add DMA mapping failure messages




More information about the fedora-extras-commits mailing list