diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-01-23 14:19:32 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-01-23 14:19:32 -0500 |
commit | d227e87e6c939c6071def92bc7691ad774c733ff (patch) | |
tree | 31fbc74974da765322b26de321e0b33f2f7e1478 /arch/mips/vr41xx/common/irq.c | |
parent | f66d45e99eb7ca91822c3e3f6d7a98843c9626cb (diff) | |
parent | 364ca8a897eadb2f0e76b7f0ffe94168f6d83d66 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
[MIPS] Vr41xx: Fix after GENERIC_HARDIRQS_NO__DO_IRQ change
[MIPS] SMTC: Instant IPI replay.
Diffstat (limited to 'arch/mips/vr41xx/common/irq.c')
-rw-r--r-- | arch/mips/vr41xx/common/irq.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c index 397ba94cd7ec..16decf4ac2f4 100644 --- a/arch/mips/vr41xx/common/irq.c +++ b/arch/mips/vr41xx/common/irq.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Interrupt handing routines for NEC VR4100 series. | 2 | * Interrupt handing routines for NEC VR4100 series. |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2005-2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
@@ -73,13 +73,19 @@ static void irq_dispatch(unsigned int irq) | |||
73 | if (cascade->get_irq != NULL) { | 73 | if (cascade->get_irq != NULL) { |
74 | unsigned int source_irq = irq; | 74 | unsigned int source_irq = irq; |
75 | desc = irq_desc + source_irq; | 75 | desc = irq_desc + source_irq; |
76 | desc->chip->ack(source_irq); | 76 | if (desc->chip->mask_ack) |
77 | desc->chip->mask_ack(source_irq); | ||
78 | else { | ||
79 | desc->chip->mask(source_irq); | ||
80 | desc->chip->ack(source_irq); | ||
81 | } | ||
77 | irq = cascade->get_irq(irq); | 82 | irq = cascade->get_irq(irq); |
78 | if (irq < 0) | 83 | if (irq < 0) |
79 | atomic_inc(&irq_err_count); | 84 | atomic_inc(&irq_err_count); |
80 | else | 85 | else |
81 | irq_dispatch(irq); | 86 | irq_dispatch(irq); |
82 | desc->chip->end(source_irq); | 87 | if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask) |
88 | desc->chip->unmask(source_irq); | ||
83 | } else | 89 | } else |
84 | do_IRQ(irq); | 90 | do_IRQ(irq); |
85 | } | 91 | } |