This is the mail archive of the ecos-discuss@sources.redhat.com 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]

Re: Will unlock_inner() be called twice during Real Time Clock Interrupt in ecos?


"Qiang Huang" <jameshq@liverpool.ac.uk> writes:

> As I posted similar subject onto ecos mailing list before, still hasn't be
> clearly described.
> 
> Question:
> When a Real Time clock interrupt happens: clock tick.
> 
> interrupt VSR --> .. --> interrupt_end() -->  Cyg_Scheduler::unlock() -->
> **unlock_inner()** --> Cyg_Interrupt::call_pending_DSRs() --> calls to
> Cyg_RealTimeClock::dsr() --> rtc->tick( ) --> Cyg_Scheduler::unlock()-->
> **unlock_inner()** --> now comes back again, will it turn out to be
> recursive call? or the next time it won't drops into
> Cyg_RealTimeClock::dsr() again (which one is the fact??). but seems
> unlock_inner() has been called twice during a real time clock interrupt.
> 

You missed the call in rtc->tick() to Cyg_Scheduler::lock(). Since the
scheduler lock is not being zeroed at this point
Cyg_Scheduler::unlock() will not call unlock_inner().

-- 
Nick Garnett - eCos Kernel Architect
http://www.eCosCentric.com/


-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss


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