diff options
| author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2008-04-28 18:34:19 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2008-04-29 03:22:25 -0400 |
| commit | 30c016a0c8d2aae10be6a87bb98f0e85db8b09d5 (patch) | |
| tree | 3c76ff434ac96ca0a3948b335b740d8992651b68 | |
| parent | 28ccffcf028777e830cbdc30bc54ba8a37e2fc23 (diff) | |
PNP: reduce redundancy in pnp_check_port() and others
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>
| -rw-r--r-- | drivers/pnp/resource.c | 92 |
1 files changed, 54 insertions, 38 deletions
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index 15995f9f8b7c..f89945ebd8b6 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c | |||
| @@ -243,13 +243,15 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
| 243 | { | 243 | { |
| 244 | int i; | 244 | int i; |
| 245 | struct pnp_dev *tdev; | 245 | struct pnp_dev *tdev; |
| 246 | struct resource *res, *tres; | ||
| 246 | resource_size_t *port, *end, *tport, *tend; | 247 | resource_size_t *port, *end, *tport, *tend; |
| 247 | 248 | ||
| 248 | port = &dev->res.port_resource[idx].start; | 249 | res = &dev->res.port_resource[idx]; |
| 249 | end = &dev->res.port_resource[idx].end; | 250 | port = &res->start; |
| 251 | end = &res->end; | ||
| 250 | 252 | ||
| 251 | /* if the resource doesn't exist, don't complain about it */ | 253 | /* if the resource doesn't exist, don't complain about it */ |
| 252 | if (cannot_compare(dev->res.port_resource[idx].flags)) | 254 | if (cannot_compare(res->flags)) |
| 253 | return 1; | 255 | return 1; |
| 254 | 256 | ||
| 255 | /* check if the resource is already in use, skip if the | 257 | /* check if the resource is already in use, skip if the |
| @@ -269,9 +271,10 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
| 269 | 271 | ||
| 270 | /* check for internal conflicts */ | 272 | /* check for internal conflicts */ |
| 271 | for (i = 0; i < PNP_MAX_PORT && i != idx; i++) { | 273 | for (i = 0; i < PNP_MAX_PORT && i != idx; i++) { |
| 272 | if (dev->res.port_resource[i].flags & IORESOURCE_IO) { | 274 | tres = &dev->res.port_resource[i]; |
| 273 | tport = &dev->res.port_resource[i].start; | 275 | if (tres->flags & IORESOURCE_IO) { |
| 274 | tend = &dev->res.port_resource[i].end; | 276 | tport = &tres->start; |
| 277 | tend = &tres->end; | ||
| 275 | if (ranged_conflict(port, end, tport, tend)) | 278 | if (ranged_conflict(port, end, tport, tend)) |
| 276 | return 0; | 279 | return 0; |
| 277 | } | 280 | } |
| @@ -282,12 +285,12 @@ int pnp_check_port(struct pnp_dev *dev, int idx) | |||
| 282 | if (tdev == dev) | 285 | if (tdev == dev) |
| 283 | continue; | 286 | continue; |
| 284 | for (i = 0; i < PNP_MAX_PORT; i++) { | 287 | for (i = 0; i < PNP_MAX_PORT; i++) { |
| 285 | if (tdev->res.port_resource[i].flags & IORESOURCE_IO) { | 288 | tres = &tdev->res.port_resource[i]; |
| 286 | if (cannot_compare | 289 | if (tres->flags & IORESOURCE_IO) { |
| 287 | (tdev->res.port_resource[i].flags)) | 290 | if (cannot_compare(tres->flags)) |
| 288 | continue; | 291 | continue; |
| 289 | tport = &tdev->res.port_resource[i].start; | 292 | tport = &tres->start; |
| 290 | tend = &tdev->res.port_resource[i].end; | 293 | tend = &tres->end; |
| 291 | if (ranged_conflict(port, end, tport, tend)) | 294 | if (ranged_conflict(port, end, tport, tend)) |
| 292 | return 0; | 295 | return 0; |
| 293 | } | 296 | } |
| @@ -301,13 +304,15 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
| 301 | { | 304 | { |
| 302 | int i; | 305 | int i; |
| 303 | struct pnp_dev *tdev; | 306 | struct pnp_dev *tdev; |
| 307 | struct resource *res, *tres; | ||
| 304 | resource_size_t *addr, *end, *taddr, *tend; | 308 | resource_size_t *addr, *end, *taddr, *tend; |
| 305 | 309 | ||
| 306 | addr = &dev->res.mem_resource[idx].start; | 310 | res = &dev->res.mem_resource[idx]; |
| 307 | end = &dev->res.mem_resource[idx].end; | 311 | addr = &res->start; |
| 312 | end = &res->end; | ||
| 308 | 313 | ||
| 309 | /* if the resource doesn't exist, don't complain about it */ | 314 | /* if the resource doesn't exist, don't complain about it */ |
| 310 | if (cannot_compare(dev->res.mem_resource[idx].flags)) | 315 | if (cannot_compare(res->flags)) |
| 311 | return 1; | 316 | return 1; |
| 312 | 317 | ||
| 313 | /* check if the resource is already in use, skip if the | 318 | /* check if the resource is already in use, skip if the |
| @@ -327,9 +332,10 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
| 327 | 332 | ||
| 328 | /* check for internal conflicts */ | 333 | /* check for internal conflicts */ |
| 329 | for (i = 0; i < PNP_MAX_MEM && i != idx; i++) { | 334 | for (i = 0; i < PNP_MAX_MEM && i != idx; i++) { |
| 330 | if (dev->res.mem_resource[i].flags & IORESOURCE_MEM) { | 335 | tres = &dev->res.mem_resource[i]; |
| 331 | taddr = &dev->res.mem_resource[i].start; | 336 | if (tres->flags & IORESOURCE_MEM) { |
| 332 | tend = &dev->res.mem_resource[i].end; | 337 | taddr = &tres->start; |
| 338 | tend = &tres->end; | ||
| 333 | if (ranged_conflict(addr, end, taddr, tend)) | 339 | if (ranged_conflict(addr, end, taddr, tend)) |
| 334 | return 0; | 340 | return 0; |
| 335 | } | 341 | } |
| @@ -340,12 +346,12 @@ int pnp_check_mem(struct pnp_dev *dev, int idx) | |||
| 340 | if (tdev == dev) | 346 | if (tdev == dev) |
| 341 | continue; | 347 | continue; |
| 342 | for (i = 0; i < PNP_MAX_MEM; i++) { | 348 | for (i = 0; i < PNP_MAX_MEM; i++) { |
| 343 | if (tdev->res.mem_resource[i].flags & IORESOURCE_MEM) { | 349 | tres = &tdev->res.mem_resource[i]; |
| 344 | if (cannot_compare | 350 | if (tres->flags & IORESOURCE_MEM) { |
| 345 | (tdev->res.mem_resource[i].flags)) | 351 | if (cannot_compare(tres->flags)) |
| 346 | continue; | 352 | continue; |
| 347 | taddr = &tdev->res.mem_resource[i].start; | 353 | taddr = &tres->start; |
| 348 | tend = &tdev->res.mem_resource[i].end; | 354 | tend = &tres->end; |
| 349 | if (ranged_conflict(addr, end, taddr, tend)) | 355 | if (ranged_conflict(addr, end, taddr, tend)) |
| 350 | return 0; | 356 | return 0; |
| 351 | } | 357 | } |
| @@ -364,10 +370,14 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
| 364 | { | 370 | { |
| 365 | int i; | 371 | int i; |
| 366 | struct pnp_dev *tdev; | 372 | struct pnp_dev *tdev; |
| 367 | resource_size_t *irq = &dev->res.irq_resource[idx].start; | 373 | struct resource *res, *tres; |
| 374 | resource_size_t *irq; | ||
| 375 | |||
| 376 | res = &dev->res.irq_resource[idx]; | ||
| 377 | irq = &res->start; | ||
| 368 | 378 | ||
| 369 | /* if the resource doesn't exist, don't complain about it */ | 379 | /* if the resource doesn't exist, don't complain about it */ |
| 370 | if (cannot_compare(dev->res.irq_resource[idx].flags)) | 380 | if (cannot_compare(res->flags)) |
| 371 | return 1; | 381 | return 1; |
| 372 | 382 | ||
| 373 | /* check if the resource is valid */ | 383 | /* check if the resource is valid */ |
| @@ -382,8 +392,9 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
| 382 | 392 | ||
| 383 | /* check for internal conflicts */ | 393 | /* check for internal conflicts */ |
| 384 | for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) { | 394 | for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) { |
| 385 | if (dev->res.irq_resource[i].flags & IORESOURCE_IRQ) { | 395 | tres = &dev->res.irq_resource[i]; |
| 386 | if (dev->res.irq_resource[i].start == *irq) | 396 | if (tres->flags & IORESOURCE_IRQ) { |
| 397 | if (tres->start == *irq) | ||
| 387 | return 0; | 398 | return 0; |
| 388 | } | 399 | } |
| 389 | } | 400 | } |
| @@ -415,11 +426,11 @@ int pnp_check_irq(struct pnp_dev *dev, int idx) | |||
| 415 | if (tdev == dev) | 426 | if (tdev == dev) |
| 416 | continue; | 427 | continue; |
| 417 | for (i = 0; i < PNP_MAX_IRQ; i++) { | 428 | for (i = 0; i < PNP_MAX_IRQ; i++) { |
| 418 | if (tdev->res.irq_resource[i].flags & IORESOURCE_IRQ) { | 429 | tres = &tdev->res.irq_resource[i]; |
| 419 | if (cannot_compare | 430 | if (tres->flags & IORESOURCE_IRQ) { |
| 420 | (tdev->res.irq_resource[i].flags)) | 431 | if (cannot_compare(tres->flags)) |
| 421 | continue; | 432 | continue; |
| 422 | if ((tdev->res.irq_resource[i].start == *irq)) | 433 | if (tres->start == *irq) |
| 423 | return 0; | 434 | return 0; |
| 424 | } | 435 | } |
| 425 | } | 436 | } |
| @@ -433,10 +444,14 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
| 433 | #ifndef CONFIG_IA64 | 444 | #ifndef CONFIG_IA64 |
| 434 | int i; | 445 | int i; |
| 435 | struct pnp_dev *tdev; | 446 | struct pnp_dev *tdev; |
| 436 | resource_size_t *dma = &dev->res.dma_resource[idx].start; | 447 | struct resource *res, *tres; |
| 448 | resource_size_t *dma; | ||
| 449 | |||
| 450 | res = &dev->res.dma_resource[idx]; | ||
| 451 | dma = &res->start; | ||
| 437 | 452 | ||
| 438 | /* if the resource doesn't exist, don't complain about it */ | 453 | /* if the resource doesn't exist, don't complain about it */ |
| 439 | if (cannot_compare(dev->res.dma_resource[idx].flags)) | 454 | if (cannot_compare(res->flags)) |
| 440 | return 1; | 455 | return 1; |
| 441 | 456 | ||
| 442 | /* check if the resource is valid */ | 457 | /* check if the resource is valid */ |
| @@ -451,8 +466,9 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
| 451 | 466 | ||
| 452 | /* check for internal conflicts */ | 467 | /* check for internal conflicts */ |
| 453 | for (i = 0; i < PNP_MAX_DMA && i != idx; i++) { | 468 | for (i = 0; i < PNP_MAX_DMA && i != idx; i++) { |
| 454 | if (dev->res.dma_resource[i].flags & IORESOURCE_DMA) { | 469 | tres = &dev->res.dma_resource[i]; |
| 455 | if (dev->res.dma_resource[i].start == *dma) | 470 | if (tres->flags & IORESOURCE_DMA) { |
| 471 | if (tres->start == *dma) | ||
| 456 | return 0; | 472 | return 0; |
| 457 | } | 473 | } |
| 458 | } | 474 | } |
| @@ -470,11 +486,11 @@ int pnp_check_dma(struct pnp_dev *dev, int idx) | |||
| 470 | if (tdev == dev) | 486 | if (tdev == dev) |
| 471 | continue; | 487 | continue; |
| 472 | for (i = 0; i < PNP_MAX_DMA; i++) { | 488 | for (i = 0; i < PNP_MAX_DMA; i++) { |
| 473 | if (tdev->res.dma_resource[i].flags & IORESOURCE_DMA) { | 489 | tres = &tdev->res.dma_resource[i]; |
| 474 | if (cannot_compare | 490 | if (tres->flags & IORESOURCE_DMA) { |
| 475 | (tdev->res.dma_resource[i].flags)) | 491 | if (cannot_compare(tres->flags)) |
| 476 | continue; | 492 | continue; |
| 477 | if ((tdev->res.dma_resource[i].start == *dma)) | 493 | if (tres->start == *dma) |
| 478 | return 0; | 494 | return 0; |
| 479 | } | 495 | } |
| 480 | } | 496 | } |
