summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2003-07-08 16:08:49 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2003-07-08 16:08:49 +0000
commit307685b3a6c9510462c313394be58b698cb6ce9c (patch)
treeda8817f5c3cf7e61d4e0ea22bf97724f69dd3c08 /c/src/lib/libcpu
parent2003-07-08 Joel Sherrill <joel@OARcorp.com> (diff)
downloadrtems-307685b3a6c9510462c313394be58b698cb6ce9c.tar.bz2
2003-07-08 Joel Sherrill <joel@OARcorp.com>
PR 416/bsps * ppc403/ictrl/ictrl.c (ictrl_isr): We acknolwegde the interrupt in interrupt controller (clr_exisr(mask)) before calling the interrupt handler that will acnowledge the interrupt source. This results in the interrupt beeing seen a second time by the interrupt controller. Reported and fixed by El Kolli Yacine <yacine.elkolli@crf.canon.fr>.
Diffstat (limited to 'c/src/lib/libcpu')
-rw-r--r--c/src/lib/libcpu/powerpc/ChangeLog9
-rw-r--r--c/src/lib/libcpu/powerpc/ppc403/ictrl/ictrl.c3
2 files changed, 11 insertions, 1 deletions
diff --git a/c/src/lib/libcpu/powerpc/ChangeLog b/c/src/lib/libcpu/powerpc/ChangeLog
index fe9814f92e..07f491052d 100644
--- a/c/src/lib/libcpu/powerpc/ChangeLog
+++ b/c/src/lib/libcpu/powerpc/ChangeLog
@@ -1,3 +1,12 @@
+2003-07-08 Joel Sherrill <joel@OARcorp.com>
+
+ PR 416/bsps
+ * ppc403/ictrl/ictrl.c (ictrl_isr): We acknolwegde the interrupt in
+ interrupt controller (clr_exisr(mask)) before calling the interrupt
+ handler that will acnowledge the interrupt source. This results in
+ the interrupt beeing seen a second time by the interrupt controller.
+ Reported and fixed by El Kolli Yacine <yacine.elkolli@crf.canon.fr>.
+
2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
PR 368/filesystems
diff --git a/c/src/lib/libcpu/powerpc/ppc403/ictrl/ictrl.c b/c/src/lib/libcpu/powerpc/ppc403/ictrl/ictrl.c
index eb8bcb7bd8..769f200822 100644
--- a/c/src/lib/libcpu/powerpc/ppc403/ictrl/ictrl.c
+++ b/c/src/lib/libcpu/powerpc/ppc403/ictrl/ictrl.c
@@ -195,13 +195,14 @@ ictrl_isr(rtems_vector_number vector,CPU_Interrupt_frame *cpu_frame)
for (exvec = 0;exvec < PPC_IRQ_EXT_MAX;exvec++) {
mask = VEC_TO_EXMSK(exvec);
if (0 != (istat & mask)) {
- clr_exisr(mask);
+ /*clr_exisr(mask); too early to ack*/
handler = ictrl_vector_table[exvec];
if (handler) {
istat &= ~mask;
global_vec = exvec + PPC_IRQ_EXT_BASE;
(handler)(global_vec);
}
+ clr_exisr(mask);/* now we can ack*/
}
}
if (istat != 0) { /* anything left? then we have a spurious interrupt */