mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: Frans Pop <elendil@planet.nl>
Cc: Rene Herman <rene.herman@keyaccess.nl>,
	linux-kernel@vger.kernel.org, Rene Herman <rene.herman@gmail.com>,
	Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>,
	Jesse Barnes <jbarnes@virtuousgeek.org>,
	Matthew Wilcox <matthew@wil.cx>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	bugme-daemon@bugzilla.kernel.org
Subject: [Bug #11550] pnp: Huge number of "io resource overlap" messages
Date: Fri, 26 Sep 2008 15:40:30 -0600	[thread overview]
Message-ID: <200809261540.31443.bjorn.helgaas@hp.com> (raw)
In-Reply-To: <200809201756.25157.bjorn.helgaas@hp.com>

http://bugzilla.kernel.org/show_bug.cgi?id=11550

On Saturday 20 September 2008 05:56:24 pm Bjorn Helgaas wrote:
> > > On Tuesday 09 September 2008 12:31:09 pm Rene Herman wrote:
> > > > On 09-09-08 19:40, Bjorn Helgaas wrote:
> > > > > If the PCI device isn't fully initialized, it doesn't seem right to
> > > > > check it for resource conflicts.  But I don't know how to tell
> > > > > that.
> > > >
> > > > His pci_resource_start() values are 0. How about just checking for
> > > > that?

> ...
> I am still not 100% comfortable with this because I think we really
> want to know whether the BAR value is zero, not whether the CPU
> address is zero, and pci_resource_start() gives us the CPU address.
> 
> Bus and CPU addresses are currently identical on x86, but I expect
> that will change someday.  They're already different on ia64 and
> some other architectures.

The problem seems to be that Frans has some PCI devices that are not
configured by the BIOS, and their BARs contain zero.  A PNP quirk
checks for overlaps of PCI devices and PNP devices, and those zero-
valued BARs of course conflict with the PNP motherboard devices that
describe legacy hardware.

Here's another approach based on section 3.5 of the PCI Firmware spec.
It says:

  Since not all devices may be configured prior to the operating
  system handoff, the operating system needs to know whether a
  specific BAR register has been configured by firmware. The operating
  system makes the determination by checking the I/O Enable, and
  Memory Enable bits in the device's command register, and Expansion
  ROM BAR enable bits. If the enable bit is set, then the corresponding
  resource register has been configured.

So instead of checking whether the BAR contains zero, the patch below
checks the I/O, Mem, and ROM BAR enable bits to determine whether a
BAR is enabled.

Frans, I'm sorry to trouble you again, but could you test this and
make sure it takes care of the "resource overlap" messages you saw?

diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
index 1a5fc83..26195c3 100644
--- a/drivers/pci/setup-res.c
+++ b/drivers/pci/setup-res.c
@@ -26,6 +26,28 @@
 #include "pci.h"
 
 
+int pci_resource_enabled(struct pci_dev *dev, int bar)
+{
+	u16 command = 0;
+	u32 addr = 0;
+
+	pci_read_config_word(dev, PCI_COMMAND, &command);
+
+	if (pci_resource_flags(dev, bar) & IORESOURCE_IO)
+		return command & PCI_COMMAND_IO;
+
+	if (command & PCI_COMMAND_MEMORY) {
+		if (bar == PCI_ROM_RESOURCE) {
+			pci_read_config_dword(dev, dev->rom_base_reg, &addr);
+			return addr & PCI_ROM_ADDRESS_ENABLE;
+		}
+
+		return 1;
+	}
+
+	return 0;
+}
+
 void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
 {
 	struct pci_bus_region region;
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
index 0bdf9b8..ef5ed99 100644
--- a/drivers/pnp/quirks.c
+++ b/drivers/pnp/quirks.c
@@ -247,6 +247,9 @@ static void quirk_system_pci_resources(struct pnp_dev *dev)
 		for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
 			unsigned int type;
 
+			if (!pci_resource_enabled(pdev, i))
+				continue;
+
 			type = pci_resource_flags(pdev, i) &
 					(IORESOURCE_IO | IORESOURCE_MEM);
 			if (!type || pci_resource_len(pdev, i) == 0)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index c0e1400..28ec520 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -796,6 +796,8 @@ static inline int pci_proc_domain(struct pci_bus *bus)
 }
 #endif /* CONFIG_PCI_DOMAINS */
 
+extern int pci_resource_enabled(struct pci_dev *dev, int bar);
+
 #else /* CONFIG_PCI is not enabled */
 
 /*
@@ -976,6 +978,9 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
 						unsigned int devfn)
 { return NULL; }
 
+static inline int pci_resource_enabled(struct pci_dev *dev, int bar)
+{ return 0; }
+
 #endif /* CONFIG_PCI */
 
 /* Include architecture-dependent settings and functions */

  reply	other threads:[~2008-09-26 21:40 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-09 10:50 [bisected][resend] " Frans Pop
2008-09-09 11:22 ` Rene Herman
2008-09-09 15:30 ` Bjorn Helgaas
2008-09-09 16:26   ` Frans Pop
2008-09-09 17:40     ` Bjorn Helgaas
2008-09-09 18:31       ` Rene Herman
2008-09-18  5:10         ` Bjorn Helgaas
2008-09-20 23:49           ` Frans Pop
2008-09-20 23:56             ` Bjorn Helgaas
2008-09-26 21:40               ` Bjorn Helgaas [this message]
2008-09-27 15:16                 ` [Bug #11550] " Frans Pop
2008-09-27 20:53                 ` Ingo Molnar
2009-03-04 20:17                 ` Frans Pop
2009-03-04 21:53                   ` Bjorn Helgaas
2009-03-20  2:07                     ` Jesse Barnes
2009-03-23 15:46                       ` Bjorn Helgaas
2008-09-10  7:39       ` [bisected][resend] " Frans Pop
2008-09-10 21:34         ` Bjorn Helgaas
2008-09-11 16:58           ` Frans Pop
2008-11-07  9:51       ` Frans Pop
2008-11-07 10:00         ` Ingo Molnar
2008-09-12 18:59 2.6.27-rc6-git2: Reported regressions from 2.6.26 Rafael J. Wysocki
2008-09-12 19:06 ` [Bug #11550] pnp: Huge number of "io resource overlap" messages Rafael J. Wysocki
2008-09-12 22:52   ` Rene Herman
2008-09-21 18:52 2.6.27-rc6-git6: Reported regressions from 2.6.26 Rafael J. Wysocki
2008-09-21 18:54 ` [Bug #11550] pnp: Huge number of "io resource overlap" messages Rafael J. Wysocki
2008-09-27 15:54 2.6.27-rc7-git5: Reported regressions from 2.6.26 Rafael J. Wysocki
2008-09-27 15:56 ` [Bug #11550] pnp: Huge number of "io resource overlap" messages Rafael J. Wysocki
2008-10-04 17:28 2.6.27-rc8-git7: Reported regressions from 2.6.26 Rafael J. Wysocki
2008-10-04 17:32 ` [Bug #11550] pnp: Huge number of "io resource overlap" messages Rafael J. Wysocki
2008-10-07 22:34   ` Frans Pop
2008-10-25 21:04 2.6.28-rc1-git1: Reported regressions 2.6.26 -> 2.6.27 Rafael J. Wysocki
2008-10-25 21:07 ` [Bug #11550] pnp: Huge number of "io resource overlap" messages Rafael J. Wysocki
2008-10-26 16:43   ` Frans Pop
2008-11-02 16:47 2.6.28-rc2-git7: Reported regressions 2.6.26 -> 2.6.27 Rafael J. Wysocki
2008-11-02 16:49 ` [Bug #11550] pnp: Huge number of "io resource overlap" messages Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200809261540.31443.bjorn.helgaas@hp.com \
    --to=bjorn.helgaas@hp.com \
    --cc=benh@kernel.crashing.org \
    --cc=bugme-daemon@bugzilla.kernel.org \
    --cc=elendil@planet.nl \
    --cc=jbarnes@virtuousgeek.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matthew@wil.cx \
    --cc=mingo@elte.hu \
    --cc=rene.herman@gmail.com \
    --cc=rene.herman@keyaccess.nl \
    --cc=rjw@sisk.pl \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®