Mercurial > flash_v2
diff packages/kernel/current/src/intr/intr.cxx @ 103:95f3e12a6327 ecos-sw-2000-06-23
Merge from eCos master repository on 2000-06-23-16:41:10-BST
| author | jlarmour |
|---|---|
| date | Fri, 23 Jun 2000 17:06:31 +0000 |
| parents | 6512add4f5d6 |
| children | 0c2b7be0d798 |
line wrap: on
line diff
--- a/packages/kernel/current/src/intr/intr.cxx +++ b/packages/kernel/current/src/intr/intr.cxx @@ -330,7 +330,8 @@ Cyg_Interrupt::chain_isr(cyg_vector vect { Cyg_Interrupt *p = *(Cyg_Interrupt **)data; register cyg_uint32 isr_ret = 0; - + register cyg_uint32 isr_chain_ret = 0; + CYG_INSTRUMENT_INTR(CHAIN_ISR, vector, 0); while( p != NULL ) @@ -339,6 +340,8 @@ Cyg_Interrupt::chain_isr(cyg_vector vect { isr_ret = p->isr(vector, p->data); + isr_chain_ret |= isr_ret; + if( isr_ret & Cyg_Interrupt::CALL_DSR ) p->post_dsr(); if( isr_ret & Cyg_Interrupt::HANDLED ) break; @@ -348,7 +351,7 @@ Cyg_Interrupt::chain_isr(cyg_vector vect } #ifdef HAL_DEFAULT_ISR - if( (isr_ret & Cyg_Interrupt::HANDLED) == 0 ) + if( (isr_chain_ret & (Cyg_Interrupt::HANDLED|Cyg_Interrupt::CALL_DSR)) == 0 ) { // If we finished the loop for some reason other than that an // ISR has handled the interrupt, call any default ISR to either
