Commit f61ed7e3 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Andi Kleen

PNP: dont sort by type in /sys/.../resources

Rather than stepping through all IO resources, then stepping through
all MMIO resources, etc., we can just iterate over the resource list
once directly.

This can change the order in /sys, e.g.,

    # cat /sys/devices/pnp0/00:07/resources     # OLD
    state = active
    io 0x3f8-0x3ff
    irq 4

    # cat /sys/devices/pnp0/00:07/resources     # NEW
    state = active
    irq 4
    io 0x3f8-0x3ff

The old code artificially sorted resources by type; the new code
just lists them in the order we read them from the ISAPNP hardware
or the BIOS.
Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
parent 25d39c39
...@@ -248,8 +248,9 @@ static ssize_t pnp_show_current_resources(struct device *dmdev, ...@@ -248,8 +248,9 @@ static ssize_t pnp_show_current_resources(struct device *dmdev,
char *buf) char *buf)
{ {
struct pnp_dev *dev = to_pnp_dev(dmdev); struct pnp_dev *dev = to_pnp_dev(dmdev);
struct pnp_resource *pnp_res;
struct resource *res; struct resource *res;
int i, ret; int ret;
pnp_info_buffer_t *buffer; pnp_info_buffer_t *buffer;
if (!dev) if (!dev)
...@@ -262,46 +263,33 @@ static ssize_t pnp_show_current_resources(struct device *dmdev, ...@@ -262,46 +263,33 @@ static ssize_t pnp_show_current_resources(struct device *dmdev,
buffer->buffer = buf; buffer->buffer = buf;
buffer->curr = buffer->buffer; buffer->curr = buffer->buffer;
pnp_printf(buffer, "state = "); pnp_printf(buffer, "state = %s\n", dev->active ? "active" : "disabled");
if (dev->active)
pnp_printf(buffer, "active\n"); list_for_each_entry(pnp_res, &dev->resources, list) {
else res = &pnp_res->res;
pnp_printf(buffer, "disabled\n");
for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IO, i)); i++) { pnp_printf(buffer, pnp_resource_type_name(res));
pnp_printf(buffer, "io");
if (res->flags & IORESOURCE_DISABLED) if (res->flags & IORESOURCE_DISABLED) {
pnp_printf(buffer, " disabled\n"); pnp_printf(buffer, " disabled\n");
else continue;
pnp_printf(buffer, " 0x%llx-0x%llx\n",
(unsigned long long) res->start,
(unsigned long long) res->end);
} }
for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) {
pnp_printf(buffer, "mem"); switch (pnp_resource_type(res)) {
if (res->flags & IORESOURCE_DISABLED) case IORESOURCE_IO:
pnp_printf(buffer, " disabled\n"); case IORESOURCE_MEM:
else pnp_printf(buffer, " %#llx-%#llx\n",
pnp_printf(buffer, " 0x%llx-0x%llx\n",
(unsigned long long) res->start, (unsigned long long) res->start,
(unsigned long long) res->end); (unsigned long long) res->end);
} break;
for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IRQ, i)); i++) { case IORESOURCE_IRQ:
pnp_printf(buffer, "irq"); case IORESOURCE_DMA:
if (res->flags & IORESOURCE_DISABLED)
pnp_printf(buffer, " disabled\n");
else
pnp_printf(buffer, " %lld\n", pnp_printf(buffer, " %lld\n",
(unsigned long long) res->start); (unsigned long long) res->start);
break;
} }
for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_DMA, i)); i++) {
pnp_printf(buffer, "dma");
if (res->flags & IORESOURCE_DISABLED)
pnp_printf(buffer, " disabled\n");
else
pnp_printf(buffer, " %lld\n",
(unsigned long long) res->start);
} }
ret = (buffer->curr - buf); ret = (buffer->curr - buf);
kfree(buffer); kfree(buffer);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment