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>.
This commit is contained in:
Joel Sherrill
2003-07-08 16:09:24 +00:00
parent b7d37d6e28
commit 581a89ed79
2 changed files with 11 additions and 1 deletions

View File

@@ -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

View File

@@ -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 */