This is the mail archive of the ecos-bugs@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug 1000660] ARM HAL breaks on spurious interrupt


Please do not reply to this email. Use the web interface provided at:
http://bugs.ecos.sourceware.org/show_bug.cgi?id=1000660

Morten Lave <ml@tctechnologies.tc> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ml@tctechnologies.tc

--- Comment #4 from Morten Lave <ml@tctechnologies.tc> 2011-02-23 15:39:22 GMT ---
I have seen the same problem and it is in both eCos 2.x and 3.0. We have
created a fix which has worked well for 2.x and this as far as i can see works
for 3.0 as well. The fix seems to be along the same lines as what has allegedly
been done in eCosPro.

We have replaced:
        // The return value from the handler (in r0) will indicate whether a 
        // DSR is to be posted. Pass this together with a pointer to the
        // interrupt object we have just used to the interrupt tidy up routine.

                              // don't run this for spurious interrupts!
        cmp     v1,#CYGNUM_HAL_INTERRUPT_NONE
        beq     17f
        ldr     r1,.hal_interrupt_objects

With
        // The return value from the handler (in r0) will indicate whether a 
        // DSR is to be posted. Pass this together with a pointer to the
        // interrupt object we have just used to the interrupt tidy up routine.

                              // don't run this for spurious interrupts!
        cmp     v1,#CYGNUM_HAL_INTERRUPT_NONE
        //ML23-02-2011, even spurious interrupts must unlock scheduler
        moveq   r0,#0         
        ldr     r1,.hal_interrupt_objects

This will make sure that interrupt_end is called even for a spurious interrupt
but no DSR is posted as r0 is zero and therefore the vector is ignored.

This fix replaces a conditional branch with a conditional move so it would not
add any latency to regular interrupt processing.

-- 
Configure bugmail: http://bugs.ecos.sourceware.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]