public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
From: Hugo Tyson <hmt@redhat.com>
To: ecos-discuss@sourceware.cygnus.com
Subject: Re: [ECOS] About Cyg_Scheduler::unlock_inner
Date: Wed, 23 May 2001 03:41:00 -0000	[thread overview]
Message-ID: <wwt7kz8ibzl.fsf@masala.cambridge.redhat.com> (raw)
In-Reply-To: <3B0AD0F4.E14617C3@redhat.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1682 bytes --]

Jonathan Larmour <jlarmour@redhat.com> writes:
> Rafael Rodríguez Velilla wrote:
> > 
> >   I'm working with eCos 1.3.1 and I have a question about
> > Cyg_Scheduler::unlock_inner.
> > 
> >   This method is only called when  calling Cyg_Scheduler::unlock with
> > sched_lock=1; (so it should become 0)
> >   I have seen in the code that it first calls any pending DSR (if there
> > is any) and then it checks if there's a new thread that reclaims the
> > CPU.
> >   Why is the context of the new thread restored before decrementing
> > sched_lock?
> 
> You can't be in the process of switching the context when there's a chance
> the system could be rescheduled again (e.g. due to a new interrupt).
> 
> >   Why is not the new thread run with the scheduler unlocked?
> 
> Once it is restored, it unlocks the scheduler almost straight away.

Yup.  To clarify, the new thread context is not just some random location
in the thread's execution.  It can only be either that very same location
in Cyg_Scheduler::unlock() or a similar piece of code used at the very
start of a thread's life.

You would expect that a thread which is interrupted and descheduled by a
real hardware IRQ, such as timer ticks, had a saved context that points to
what the thread was doing at the time.  But it's not so, the saved context
is in the middle of the interrupt-handling code, doing the same unlock()
call as a "normal" yield of the CPU.

So when an interrupted thread restarts, it restarts in the middle of the
normal interrupt sequence, and does all of: unlocks the scheduler, restores
the interrupted state and returns from interrupt, and thus continues where
it was interrupted.

HTH,
	- Huge

  reply	other threads:[~2001-05-23  3:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-05-22 12:55 Rafael Rodríguez Velilla
2001-05-22 13:50 ` Jonathan Larmour
2001-05-23  3:41   ` Hugo Tyson [this message]
2001-05-23  3:53     ` Rafael Rodríguez Velilla
2001-05-23  4:05       ` Hugo Tyson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=wwt7kz8ibzl.fsf@masala.cambridge.redhat.com \
    --to=hmt@redhat.com \
    --cc=ecos-discuss@sourceware.cygnus.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).