PNP: reduce redundancy in pnp_set_current_resources()

Use a temporary "res" pointer to replace repeated lookups in
the pnp resource tables.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>
Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Bjorn Helgaas 2008-04-28 16:34:20 -06:00 committed by Len Brown
parent 30c016a0c8
commit 470feb113a

View file

@ -323,6 +323,7 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
const char *ubuf, size_t count) const char *ubuf, size_t count)
{ {
struct pnp_dev *dev = to_pnp_dev(dmdev); struct pnp_dev *dev = to_pnp_dev(dmdev);
struct resource *res;
char *buf = (void *)ubuf; char *buf = (void *)ubuf;
int retval = 0; int retval = 0;
@ -382,21 +383,18 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
buf += 2; buf += 2;
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
dev->res.port_resource[nport].start = res = &dev->res.port_resource[nport];
simple_strtoul(buf, &buf, 0); res->start = simple_strtoul(buf, &buf, 0);
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
if (*buf == '-') { if (*buf == '-') {
buf += 1; buf += 1;
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
dev->res.port_resource[nport].end = res->end = simple_strtoul(buf, &buf, 0);
simple_strtoul(buf, &buf, 0);
} else } else
dev->res.port_resource[nport].end = res->end = res->start;
dev->res.port_resource[nport].start; res->flags = IORESOURCE_IO;
dev->res.port_resource[nport].flags =
IORESOURCE_IO;
nport++; nport++;
if (nport >= PNP_MAX_PORT) if (nport >= PNP_MAX_PORT)
break; break;
@ -406,21 +404,18 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
buf += 3; buf += 3;
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
dev->res.mem_resource[nmem].start = res = &dev->res.mem_resource[nmem];
simple_strtoul(buf, &buf, 0); res->start = simple_strtoul(buf, &buf, 0);
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
if (*buf == '-') { if (*buf == '-') {
buf += 1; buf += 1;
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
dev->res.mem_resource[nmem].end = res->end = simple_strtoul(buf, &buf, 0);
simple_strtoul(buf, &buf, 0);
} else } else
dev->res.mem_resource[nmem].end = res->end = res->start;
dev->res.mem_resource[nmem].start; res->flags = IORESOURCE_MEM;
dev->res.mem_resource[nmem].flags =
IORESOURCE_MEM;
nmem++; nmem++;
if (nmem >= PNP_MAX_MEM) if (nmem >= PNP_MAX_MEM)
break; break;
@ -430,11 +425,10 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
buf += 3; buf += 3;
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
dev->res.irq_resource[nirq].start = res = &dev->res.irq_resource[nirq];
dev->res.irq_resource[nirq].end = res->start = res->end =
simple_strtoul(buf, &buf, 0); simple_strtoul(buf, &buf, 0);
dev->res.irq_resource[nirq].flags = res->flags = IORESOURCE_IRQ;
IORESOURCE_IRQ;
nirq++; nirq++;
if (nirq >= PNP_MAX_IRQ) if (nirq >= PNP_MAX_IRQ)
break; break;
@ -444,11 +438,10 @@ pnp_set_current_resources(struct device *dmdev, struct device_attribute *attr,
buf += 3; buf += 3;
while (isspace(*buf)) while (isspace(*buf))
++buf; ++buf;
dev->res.dma_resource[ndma].start = res = &dev->res.dma_resource[ndma];
dev->res.dma_resource[ndma].end = res->start = res->end =
simple_strtoul(buf, &buf, 0); simple_strtoul(buf, &buf, 0);
dev->res.dma_resource[ndma].flags = res->flags = IORESOURCE_DMA;
IORESOURCE_DMA;
ndma++; ndma++;
if (ndma >= PNP_MAX_DMA) if (ndma >= PNP_MAX_DMA)
break; break;