[ECOS] Bug in i386 interrupt handler
Phil Hinton
phil@crosstor.com
Tue Oct 31 11:54:00 GMT 2000
Hi,
I've been trying to get SCSII interrupt drivers working on the i386 PC
eCos using the latest tree from anoncvs, plus various patches from
Fabrice (PCI config, multi-thread, etc).
In our implementation, DSR's were being posted for the SCSII interrupt
even though the interrupt handler returns CYG_ISR_HANDLED only.
After further investigation I found a bug in hal_pc_irq
(ecos\packages\hal\i386\arch\current\src\vectors.S).
hal_pc_irq calls the interrupt handler, invokes the hal_intc_ack macro,
then calls interrupt_end.
When the interrupt handler returns, EAX has its returned value, which is
to be passed as an argument to interrupt_end. Since the hal_intc_ack
macro uses the EAX register, it is first stored to ESI by:
movl %eax, %esi
The hal_intc_ack macro then uses EAX, and when interrupt_end is
called:
pushl %edx
pushl %eax
call interrupt_end
Instead this should be:
pushl %edx
pushl %esi <---- modification
call interrupt_end
Did I miss a patch? Anyone having trouble with i386 PC DSR posts?
Phil Hinton
CrosStor Software, Inc.
908-226-0100 ext 138
phil@crosstor.com
More information about the Ecos-discuss
mailing list