Patchwork lspci: zero address in IO isn't always unassigned

login
register
mail settings
Submitter Aaron Sierra
Date May 25, 2012, 7:11 p.m.
Message ID <f0307c62-e3e1-4cb7-a037-f410a12383cb@zimbra>
Download mbox | patch
Permalink /patch/161401/
State Not Applicable
Headers show

Comments

Aaron Sierra - May 25, 2012, 7:11 p.m.
Zero is a valid address in I/O space, so display it and it's associated
size when IO is enabled in the PCI command register.

From arch/powerpc/kernel/pci-common.c:

/* Here, we are a bit different than memory as typically IO space
 * starting at low addresses -is- valid. What we do instead [is] that
 * we consider as unassigned anything that doesn't have IO enabled
 * in the PCI command register, and that's it.
 */

Signed-off-by: Aaron Sierra <asierra@xes-inc.com>
---
 lib/sysfs.c |    2 +-
 lspci.c     |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
Martin Mares - May 28, 2012, 1:17 p.m.
Hi!

> Zero is a valid address in I/O space, so display it and it's associated
> size when IO is enabled in the PCI command register.

Thanks, applied.

				Have a nice fortnight

Patch

diff --git a/lib/sysfs.c b/lib/sysfs.c
index 1ec4afb..2197fab 100644
--- a/lib/sysfs.c
+++ b/lib/sysfs.c
@@ -125,7 +125,7 @@  sysfs_get_resources(struct pci_dev *d)
 	break;
       if (sscanf(buf, "%llx %llx %llx", &start, &end, &flags) != 3)
 	a->error("Syntax error in %s", namebuf);
-      if (start)
+      if (end > start)
 	size = end - start + 1;
       else
 	size = 0;
diff --git a/lspci.c b/lspci.c
index 681ef6a..a67a516 100644
--- a/lspci.c
+++ b/lspci.c
@@ -372,7 +372,7 @@  show_bases(struct device *d, int cnt)
 	{
 	  pciaddr_t a = pos & PCI_BASE_ADDRESS_IO_MASK;
 	  printf("I/O ports at ");
-	  if (a)
+	  if (a || (cmd & PCI_COMMAND_IO))
 	    printf(PCIADDR_PORT_FMT, a);
 	  else if (flg & PCI_BASE_ADDRESS_IO_MASK)
 	    printf("<ignored>");