diff options
| -rw-r--r-- | drivers/pnp/pnpacpi/rsparser.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c index 3aaf406b67b8..851c773feae1 100644 --- a/drivers/pnp/pnpacpi/rsparser.c +++ b/drivers/pnp/pnpacpi/rsparser.c | |||
| @@ -455,9 +455,16 @@ static __init void pnpacpi_parse_ext_irq_option(struct pnp_dev *dev, | |||
| 455 | return; | 455 | return; |
| 456 | 456 | ||
| 457 | bitmap_zero(map.bits, PNP_IRQ_NR); | 457 | bitmap_zero(map.bits, PNP_IRQ_NR); |
| 458 | for (i = 0; i < p->interrupt_count; i++) | 458 | for (i = 0; i < p->interrupt_count; i++) { |
| 459 | if (p->interrupts[i]) | 459 | if (p->interrupts[i]) { |
| 460 | __set_bit(p->interrupts[i], map.bits); | 460 | if (p->interrupts[i] < PNP_IRQ_NR) |
| 461 | __set_bit(p->interrupts[i], map.bits); | ||
| 462 | else | ||
| 463 | dev_err(&dev->dev, "ignoring IRQ %d option " | ||
| 464 | "(too large for %d entry bitmap)\n", | ||
| 465 | p->interrupts[i], PNP_IRQ_NR); | ||
| 466 | } | ||
| 467 | } | ||
| 461 | 468 | ||
| 462 | flags = irq_flags(p->triggering, p->polarity, p->sharable); | 469 | flags = irq_flags(p->triggering, p->polarity, p->sharable); |
| 463 | pnp_register_irq_resource(dev, option, &map, flags); | 470 | pnp_register_irq_resource(dev, option, &map, flags); |
