diff options
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r-- | kernel/irq/chip.c | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 44019ce30a14..cc54c6276356 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -286,7 +286,7 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
286 | * Note: The caller is expected to handle the ack, clear, mask and | 286 | * Note: The caller is expected to handle the ack, clear, mask and |
287 | * unmask issues if necessary. | 287 | * unmask issues if necessary. |
288 | */ | 288 | */ |
289 | void fastcall | 289 | void |
290 | handle_simple_irq(unsigned int irq, struct irq_desc *desc) | 290 | handle_simple_irq(unsigned int irq, struct irq_desc *desc) |
291 | { | 291 | { |
292 | struct irqaction *action; | 292 | struct irqaction *action; |
@@ -327,7 +327,7 @@ out_unlock: | |||
327 | * it after the associated handler has acknowledged the device, so the | 327 | * it after the associated handler has acknowledged the device, so the |
328 | * interrupt line is back to inactive. | 328 | * interrupt line is back to inactive. |
329 | */ | 329 | */ |
330 | void fastcall | 330 | void |
331 | handle_level_irq(unsigned int irq, struct irq_desc *desc) | 331 | handle_level_irq(unsigned int irq, struct irq_desc *desc) |
332 | { | 332 | { |
333 | unsigned int cpu = smp_processor_id(); | 333 | unsigned int cpu = smp_processor_id(); |
@@ -375,7 +375,7 @@ out_unlock: | |||
375 | * for modern forms of interrupt handlers, which handle the flow | 375 | * for modern forms of interrupt handlers, which handle the flow |
376 | * details in hardware, transparently. | 376 | * details in hardware, transparently. |
377 | */ | 377 | */ |
378 | void fastcall | 378 | void |
379 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) | 379 | handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc) |
380 | { | 380 | { |
381 | unsigned int cpu = smp_processor_id(); | 381 | unsigned int cpu = smp_processor_id(); |
@@ -434,7 +434,7 @@ out: | |||
434 | * the handler was running. If all pending interrupts are handled, the | 434 | * the handler was running. If all pending interrupts are handled, the |
435 | * loop is left. | 435 | * loop is left. |
436 | */ | 436 | */ |
437 | void fastcall | 437 | void |
438 | handle_edge_irq(unsigned int irq, struct irq_desc *desc) | 438 | handle_edge_irq(unsigned int irq, struct irq_desc *desc) |
439 | { | 439 | { |
440 | const unsigned int cpu = smp_processor_id(); | 440 | const unsigned int cpu = smp_processor_id(); |
@@ -505,7 +505,7 @@ out_unlock: | |||
505 | * | 505 | * |
506 | * Per CPU interrupts on SMP machines without locking requirements | 506 | * Per CPU interrupts on SMP machines without locking requirements |
507 | */ | 507 | */ |
508 | void fastcall | 508 | void |
509 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc) | 509 | handle_percpu_irq(unsigned int irq, struct irq_desc *desc) |
510 | { | 510 | { |
511 | irqreturn_t action_ret; | 511 | irqreturn_t action_ret; |
@@ -589,3 +589,39 @@ set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, | |||
589 | set_irq_chip(irq, chip); | 589 | set_irq_chip(irq, chip); |
590 | __set_irq_handler(irq, handle, 0, name); | 590 | __set_irq_handler(irq, handle, 0, name); |
591 | } | 591 | } |
592 | |||
593 | void __init set_irq_noprobe(unsigned int irq) | ||
594 | { | ||
595 | struct irq_desc *desc; | ||
596 | unsigned long flags; | ||
597 | |||
598 | if (irq >= NR_IRQS) { | ||
599 | printk(KERN_ERR "Trying to mark IRQ%d non-probeable\n", irq); | ||
600 | |||
601 | return; | ||
602 | } | ||
603 | |||
604 | desc = irq_desc + irq; | ||
605 | |||
606 | spin_lock_irqsave(&desc->lock, flags); | ||
607 | desc->status |= IRQ_NOPROBE; | ||
608 | spin_unlock_irqrestore(&desc->lock, flags); | ||
609 | } | ||
610 | |||
611 | void __init set_irq_probe(unsigned int irq) | ||
612 | { | ||
613 | struct irq_desc *desc; | ||
614 | unsigned long flags; | ||
615 | |||
616 | if (irq >= NR_IRQS) { | ||
617 | printk(KERN_ERR "Trying to mark IRQ%d probeable\n", irq); | ||
618 | |||
619 | return; | ||
620 | } | ||
621 | |||
622 | desc = irq_desc + irq; | ||
623 | |||
624 | spin_lock_irqsave(&desc->lock, flags); | ||
625 | desc->status &= ~IRQ_NOPROBE; | ||
626 | spin_unlock_irqrestore(&desc->lock, flags); | ||
627 | } | ||