[kernel] r19821 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/x86 patches/series
Ben Hutchings
benh at alioth.debian.org
Fri Feb 15 13:17:06 UTC 2013
Author: benh
Date: Fri Feb 15 13:17:05 2013
New Revision: 19821
Log:
[x86] PCI: Use _CRS by default on IBM System x3800 and VMware (Closes: #700544)
Added:
dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-Use-_CRS-by-default-on-VMware.patch
dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-for-debuggability-show-host-bridge-windows-e.patch
dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-use-host-bridge-_CRS-info-by-default-on-2008.patch
dists/squeeze/linux-2.6/debian/patches/series/49
Modified:
dists/squeeze/linux-2.6/debian/changelog
Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog Fri Feb 15 03:49:55 2013 (r19820)
+++ dists/squeeze/linux-2.6/debian/changelog Fri Feb 15 13:17:05 2013 (r19821)
@@ -1,3 +1,10 @@
+linux-2.6 (2.6.32-49) UNRELEASED; urgency=low
+
+ * [x86] PCI: Use _CRS by default on IBM System x3800 and VMware
+ (Closes: #700544)
+
+ -- Ben Hutchings <ben at decadent.org.uk> Fri, 15 Feb 2013 02:55:05 +0000
+
linux-2.6 (2.6.32-48) stable; urgency=low
* [s390] s390/time: fix sched_clock() overflow (Closes: #698382)
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-Use-_CRS-by-default-on-VMware.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-Use-_CRS-by-default-on-VMware.patch Fri Feb 15 13:17:05 2013 (r19821)
@@ -0,0 +1,29 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 15 Feb 2013 02:35:13 +0000
+Subject: x86/PCI: Use _CRS by default on VMware
+Bug-Debian: http://bugs.debian.org/700544
+
+VMware supports memory hotplug and we need to avoid mapping PCI devices
+in the address ranges where it will use for this.
+
+This change is effectively included in commit
+7bc5e3f2be32ae6fb0c74cd0f707f986b3a01a26 upstream, but I don't
+want to include that in squeeze in case it causes a regression.
+
+--- a/arch/x86/pci/acpi.c
++++ b/arch/x86/pci/acpi.c
+@@ -32,6 +32,14 @@
+ DMI_MATCH(DMI_PRODUCT_NAME, "x3800"),
+ },
+ },
++ /* http://bugs.debian.org/700544 */
++ {
++ .callback = set_use_crs,
++ .ident = "VMware",
++ .matches = {
++ DMI_MATCH(DMI_PRODUCT_NAME, "VMware Virtual Platform"),
++ },
++ },
+ {}
+ };
+
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-for-debuggability-show-host-bridge-windows-e.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-for-debuggability-show-host-bridge-windows-e.patch Fri Feb 15 13:17:05 2013 (r19821)
@@ -0,0 +1,73 @@
+From: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Date: Wed, 4 Nov 2009 10:39:13 -0700
+Subject: x86/PCI: for debuggability, show host bridge windows even when
+ ignoring _CRS
+
+commit f1db6fde09e201218f488d7205a7cd7bc448d496 upstream.
+
+We have occasional problems with PCI resource allocation, and sometimes
+they could be avoided by paying attention to what ACPI tells us about
+the host bridges. This patch doesn't change the behavior, but it prints
+window information that should make debugging easier.
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
+[bwh: Backported to 2.6.32:
+ - Adjust context
+ - Don't use pci_root_info::bridge in debug message]
+---
+--- a/arch/x86/pci/acpi.c
++++ b/arch/x86/pci/acpi.c
+@@ -91,11 +91,12 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
+ start = addr.minimum + addr.translation_offset;
+ end = start + addr.address_length - 1;
+ if (info->res_num >= max_root_bus_resources) {
+- printk(KERN_WARNING "PCI: Failed to allocate 0x%lx-0x%lx "
+- "from %s for %s due to _CRS returning more than "
+- "%d resource descriptors\n", (unsigned long) start,
+- (unsigned long) end, root->name, info->name,
+- max_root_bus_resources);
++ if (pci_probe & PCI_USE__CRS)
++ printk(KERN_WARNING "PCI: Failed to allocate "
++ "0x%lx-0x%lx from %s for %s due to _CRS "
++ "returning more than %d resource descriptors\n",
++ (unsigned long) start, (unsigned long) end,
++ root->name, info->name, max_root_bus_resources);
+ return AE_OK;
+ }
+
+@@ -106,6 +107,11 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
+ res->end = end;
+ res->child = NULL;
+
++ if (!(pci_probe & PCI_USE__CRS)) {
++ printk(KERN_DEBUG "host bridge window %pR (ignored)\n", res);
++ return AE_OK;
++ }
++
+ if (insert_resource(root, res)) {
+ printk(KERN_ERR "PCI: Failed to allocate 0x%lx-0x%lx "
+ "from %s for %s\n", (unsigned long) res->start,
+@@ -124,6 +131,11 @@ get_current_resources(struct acpi_device *device, int busnum,
+ struct pci_root_info info;
+ size_t size;
+
++ if (!(pci_probe & PCI_USE__CRS))
++ dev_info(&device->dev,
++ "ignoring host bridge windows from ACPI; "
++ "boot with \"pci=use_crs\" to use them\n");
++
+ info.bus = bus;
+ info.res_num = 0;
+ acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_resource,
+@@ -209,9 +221,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
+ } else {
+ bus = pci_create_bus(NULL, busnum, &pci_root_ops, sd);
+ if (bus) {
+- if (pci_probe & PCI_USE__CRS)
+- get_current_resources(device, busnum, domain,
+- bus);
++ get_current_resources(device, busnum, domain, bus);
+ bus->subordinate = pci_scan_child_bus(bus);
+ }
+ }
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-use-host-bridge-_CRS-info-by-default-on-2008.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/x86/x86-PCI-use-host-bridge-_CRS-info-by-default-on-2008.patch Fri Feb 15 13:17:05 2013 (r19821)
@@ -0,0 +1,162 @@
+From: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Date: Tue, 23 Feb 2010 10:24:41 -0700
+Subject: x86/PCI: use host bridge _CRS info by default on 2008 and newer
+ machines
+
+Part of commit 7bc5e3f2be32ae6fb0c74cd0f707f986b3a01a26 upstream.
+
+The main benefit of using ACPI host bridge window information is that
+we can do better resource allocation in systems with multiple host bridges,
+e.g., http://bugzilla.kernel.org/show_bug.cgi?id=14183
+
+Sometimes we need _CRS information even if we only have one host bridge,
+e.g., https://bugs.launchpad.net/ubuntu/+source/linux/+bug/341681
+
+Most of these systems are relatively new, so this patch turns on
+"pci=use_crs" only on machines with a BIOS date of 2008 or newer.
+
+Signed-off-by: Bjorn Helgaas <bjorn.helgaas at hp.com>
+Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
+[bwh: Conservative backport to squeeze:
+ - Adjust context
+ - Don't enable it based on BIOS date, but do start applying quirks for
+ specific models]
+---
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -1927,8 +1927,11 @@ and is between 256 and 4096 characters. It is defined in the file
+ IRQ routing is enabled.
+ noacpi [X86] Do not use ACPI for IRQ routing
+ or for PCI scanning.
+- use_crs [X86] Use _CRS for PCI resource
+- allocation.
++ use_crs [X86] Use PCI host bridge window information
++ from ACPI. If you need to use this, please
++ report a bug.
++ nocrs [X86] Ignore PCI host bridge windows from ACPI.
++ If you need to use this, please report a bug.
+ routeirq Do IRQ routing for all PCI devices.
+ This is normally done in pci_enable_device(),
+ so this option is a temporary workaround
+--- a/arch/ia64/include/asm/acpi.h
++++ b/arch/ia64/include/asm/acpi.h
+@@ -98,6 +98,7 @@ ia64_acpi_release_global_lock (unsigned int *lock)
+ #endif
+ #define acpi_processor_cstate_check(x) (x) /* no idle limits on IA64 :) */
+ static inline void disable_acpi(void) { }
++static inline void pci_acpi_crs_quirks(void) { }
+
+ const char *acpi_get_sysname (void);
+ int acpi_request_vector (u32 int_type);
+--- a/arch/x86/include/asm/pci_x86.h
++++ b/arch/x86/include/asm/pci_x86.h
+@@ -29,6 +29,7 @@
+ #define PCI_CHECK_ENABLE_AMD_MMCONF 0x20000
+ #define PCI_HAS_IO_ECS 0x40000
+ #define PCI_NOASSIGN_ROMS 0x80000
++#define PCI_ROOT_NO_CRS 0x100000
+
+ extern unsigned int pci_probe;
+ extern unsigned long pirq_table_addr;
+--- a/arch/x86/pci/acpi.c
++++ b/arch/x86/pci/acpi.c
+@@ -14,6 +14,46 @@ struct pci_root_info {
+ int busnum;
+ };
+
++static bool pci_use_crs = false;
++
++static int __init set_use_crs(const struct dmi_system_id *id)
++{
++ pci_use_crs = true;
++ return 0;
++}
++
++static const struct dmi_system_id pci_use_crs_table[] __initconst = {
++ /* http://bugzilla.kernel.org/show_bug.cgi?id=14183 */
++ {
++ .callback = set_use_crs,
++ .ident = "IBM System x3800",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "x3800"),
++ },
++ },
++ {}
++};
++
++void __init pci_acpi_crs_quirks(void)
++{
++ dmi_check_system(pci_use_crs_table);
++
++ /*
++ * If the user specifies "pci=use_crs" or "pci=nocrs" explicitly, that
++ * takes precedence over anything we figured out above.
++ */
++ if (pci_probe & PCI_ROOT_NO_CRS)
++ pci_use_crs = false;
++ else if (pci_probe & PCI_USE__CRS)
++ pci_use_crs = true;
++
++ printk(KERN_INFO "PCI: %s host bridge windows from ACPI; "
++ "if necessary, use \"pci=%s\" and report a bug\n",
++ pci_use_crs ? "Using" : "Ignoring",
++ pci_use_crs ? "nocrs" : "use_crs");
++}
++
+ static acpi_status
+ resource_to_addr(struct acpi_resource *resource,
+ struct acpi_resource_address64 *addr)
+@@ -107,7 +147,7 @@ setup_resource(struct acpi_resource *acpi_res, void *data)
+ res->end = end;
+ res->child = NULL;
+
+- if (!(pci_probe & PCI_USE__CRS)) {
++ if (!pci_use_crs) {
+ printk(KERN_DEBUG "host bridge window %pR (ignored)\n", res);
+ return AE_OK;
+ }
+@@ -130,11 +170,6 @@ get_current_resources(struct acpi_device *device, int busnum,
+ struct pci_root_info info;
+ size_t size;
+
+- if (!(pci_probe & PCI_USE__CRS))
+- dev_info(&device->dev,
+- "ignoring host bridge windows from ACPI; "
+- "boot with \"pci=use_crs\" to use them\n");
+-
+ info.bus = bus;
+ info.res_num = 0;
+ acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_resource,
+--- a/arch/x86/pci/common.c
++++ b/arch/x86/pci/common.c
+@@ -518,6 +518,9 @@ char * __devinit pcibios_setup(char *str)
+ } else if (!strcmp(str, "use_crs")) {
+ pci_probe |= PCI_USE__CRS;
+ return NULL;
++ } else if (!strcmp(str, "nocrs")) {
++ pci_probe |= PCI_ROOT_NO_CRS;
++ return NULL;
+ } else if (!strcmp(str, "earlydump")) {
+ pci_early_dump_regs = 1;
+ return NULL;
+--- a/drivers/acpi/pci_root.c
++++ b/drivers/acpi/pci_root.c
+@@ -606,6 +606,7 @@ static int __init acpi_pci_root_init(void)
+ if (acpi_pci_disabled)
+ return 0;
+
++ pci_acpi_crs_quirks();
+ if (acpi_bus_register_driver(&acpi_pci_root_driver) < 0)
+ return -ENODEV;
+
+--- a/include/acpi/acpi_drivers.h
++++ b/include/acpi/acpi_drivers.h
+@@ -104,6 +104,7 @@ int acpi_pci_bind_root(struct acpi_device *device);
+
+ struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain,
+ int bus);
++void pci_acpi_crs_quirks(void);
+
+ /* --------------------------------------------------------------------------
+ Processor
Added: dists/squeeze/linux-2.6/debian/patches/series/49
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/series/49 Fri Feb 15 13:17:05 2013 (r19821)
@@ -0,0 +1,3 @@
++ bugfix/x86/x86-PCI-for-debuggability-show-host-bridge-windows-e.patch
++ bugfix/x86/x86-PCI-use-host-bridge-_CRS-info-by-default-on-2008.patch
++ bugfix/x86/x86-PCI-Use-_CRS-by-default-on-VMware.patch
More information about the Kernel-svn-changes
mailing list