diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2008-04-28 18:34:21 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-04-29 03:22:25 -0400 |
commit | db9eaeab3e7ab72d773820820f1ba33960ad24c4 (patch) | |
tree | 230be670c84af99ab617d89ae89a1f115d766e0f /drivers/pnp | |
parent | 470feb113a23de365b6051efde0d69de86d9d2f8 (diff) |
PNP: check for conflicts with all resources, not just earlier ones
This patch removes a use of "idx" in pnp_check_port() and similar
functions, in preparation for replacing idx with a pointer to the
resource itself.
I split this out because it changes the behavior slightly: we used
to check for conflicts only with earlier resources, e.g., we checked
resource 2 against resources 0 and 1 but not against 3, 4, etc. Now
we will check against all resources except 2.
Since resources are assigned in ascending order, the old behavior
was probably safe, but I don't like to depend on that ordering.
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>
Diffstat (limited to 'drivers/pnp')
-rw-r--r-- | drivers/pnp/resource.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index f89945ebd8b6..eab16e5520ae 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c | |||
@@ -270,9 +270,9 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
270 | } | 270 | } |
271 | 271 | ||
272 | /* check for internal conflicts */ | 272 | /* check for internal conflicts */ |
273 | for (i = 0; i < PNP_MAX_PORT && i != idx; i++) { | 273 | for (i = 0; i < PNP_MAX_PORT; i++) { |
274 | tres = &dev->res.port_resource[i]; | 274 | tres = &dev->res.port_resource[i]; |
275 | if (tres->flags & IORESOURCE_IO) { | 275 | if (tres != res && tres->flags & IORESOURCE_IO) { |
276 | tport = &tres->start; | 276 | tport = &tres->start; |
277 | tend = &tres->end; | 277 | tend = &tres->end; |
278 | if (ranged_conflict(port, end, tport, tend)) | 278 | if (ranged_conflict(port, end, tport, tend)) |
@@ -331,9 +331,9 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
331 | } | 331 | } |
332 | 332 | ||
333 | /* check for internal conflicts */ | 333 | /* check for internal conflicts */ |
334 | for (i = 0; i < PNP_MAX_MEM && i != idx; i++) { | 334 | for (i = 0; i < PNP_MAX_MEM; i++) { |
335 | tres = &dev->res.mem_resource[i]; | 335 | tres = &dev->res.mem_resource[i]; |
336 | if (tres->flags & IORESOURCE_MEM) { | 336 | if (tres != res && tres->flags & IORESOURCE_MEM) { |
337 | taddr = &tres->start; | 337 | taddr = &tres->start; |
338 | tend = &tres->end; | 338 | tend = &tres->end; |
339 | if (ranged_conflict(addr, end, taddr, tend)) | 339 | if (ranged_conflict(addr, end, taddr, tend)) |
@@ -391,9 +391,9 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
391 | } | 391 | } |
392 | 392 | ||
393 | /* check for internal conflicts */ | 393 | /* check for internal conflicts */ |
394 | for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) { | 394 | for (i = 0; i < PNP_MAX_IRQ; i++) { |
395 | tres = &dev->res.irq_resource[i]; | 395 | tres = &dev->res.irq_resource[i]; |
396 | if (tres->flags & IORESOURCE_IRQ) { | 396 | if (tres != res && tres->flags & IORESOURCE_IRQ) { |
397 | if (tres->start == *irq) | 397 | if (tres->start == *irq) |
398 | return 0; | 398 | return 0; |
399 | } | 399 | } |
@@ -465,9 +465,9 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
465 | } | 465 | } |
466 | 466 | ||
467 | /* check for internal conflicts */ | 467 | /* check for internal conflicts */ |
468 | for (i = 0; i < PNP_MAX_DMA && i != idx; i++) { | 468 | for (i = 0; i < PNP_MAX_DMA; i++) { |
469 | tres = &dev->res.dma_resource[i]; | 469 | tres = &dev->res.dma_resource[i]; |
470 | if (tres->flags & IORESOURCE_DMA) { | 470 | if (tres != res && tres->flags & IORESOURCE_DMA) { |
471 | if (tres->start == *dma) | 471 | if (tres->start == *dma) |
472 | return 0; | 472 | return 0; |
473 | } | 473 | } |