diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index f80fe75a9ee..7d2b77ea904 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -700,5 +700,5 @@ int arch_show_interrupts(struct seq_file *p, int prec); extern int early_irq_init(void); extern int arch_probe_nr_irqs(void); extern int arch_early_irq_init(void); - +extern void irq_set_pending(unsigned int irq); #endif diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 9779937421b..165d5dc53fd 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1484,6 +1484,19 @@ int request_any_context_irq(unsigned int irq, irq_handler_t handler, } EXPORT_SYMBOL_GPL(request_any_context_irq); +void irq_set_pending(unsigned int irq) +{ + struct irq_desc *desc = irq_to_desc(irq); + unsigned long flags; + + if (desc) { + raw_spin_lock_irqsave(&desc->lock, flags); + desc->istate |= IRQS_PENDING; + raw_spin_unlock_irqrestore(&desc->lock, flags); + } +} +EXPORT_SYMBOL_GPL(irq_set_pending); + void enable_percpu_irq(unsigned int irq, unsigned int type) { unsigned int cpu = smp_processor_id();