Skip to content

Commit

Permalink
Merge branch 'irq-fixes-for-linus' of git://git.kernel.org/pub/scm/li…
Browse files Browse the repository at this point in the history
…nux/kernel/git/tip/linux-2.6-tip

* 'irq-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  genirq: Prevent irq storm on migration
  • Loading branch information
torvalds committed Feb 3, 2011
2 parents 49abda9 + f1a0639 commit aba9943
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions kernel/irq/migration.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,23 @@ void move_masked_irq(int irq)
void move_native_irq(int irq)
{
struct irq_desc *desc = irq_to_desc(irq);
bool masked;

if (likely(!(desc->status & IRQ_MOVE_PENDING)))
return;

if (unlikely(desc->status & IRQ_DISABLED))
return;

desc->irq_data.chip->irq_mask(&desc->irq_data);
/*
* Be careful vs. already masked interrupts. If this is a
* threaded interrupt with ONESHOT set, we can end up with an
* interrupt storm.
*/
masked = desc->status & IRQ_MASKED;
if (!masked)
desc->irq_data.chip->irq_mask(&desc->irq_data);
move_masked_irq(irq);
desc->irq_data.chip->irq_unmask(&desc->irq_data);
if (!masked)
desc->irq_data.chip->irq_unmask(&desc->irq_data);
}

0 comments on commit aba9943

Please sign in to comment.