Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 09 Jul 2002 08:40:25 -0400 (EDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        FreeBSD current users <current@FreeBSD.ORG>, Julian Elischer <julian@elischer.org>
Subject:   RE: userret() , ast() and the end of syscalls
Message-ID:  <XFMail.20020709084025.jhb@FreeBSD.org>
In-Reply-To: <XFMail.20020709080518.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 09-Jul-2002 John Baldwin wrote:
> 
> On 09-Jul-2002 Julian Elischer wrote:
>> 
>> A question to those who know..
>> 
>> why is userret() called both at the end of trap() or syscall()
>> and also almost immediatly again (often) at the end of ast().
> 
> ast() is really a special form of a trap that is triggered by doing
> a last-minute type check on return to userland to see if we still
> have work to do.
> 
>> It seems that really there is no one place that one can put code that will
>> be called ONCE and ONLY ONCE as a thread progresses to userland.
> 
> Sure there is.  When you want an action done, set a thread flag marking
> the request and set TDF_ASTPENDING.  Then handle it in ast() if the flag
> is set.

Or, if this needs to happen on every return and not conditionally,
then do it in userret() and use the state of a variable or some flag
to note when you've already done it.

-- 

John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20020709084025.jhb>