From owner-freebsd-current Tue Jul 9 14:16: 8 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C665D37B400; Tue, 9 Jul 2002 14:16:05 -0700 (PDT) Received: from mailman.zeta.org.au (mailman.zeta.org.au [203.26.10.16]) by mx1.FreeBSD.org (Postfix) with ESMTP id A9B1A43E09; Tue, 9 Jul 2002 14:16:04 -0700 (PDT) (envelope-from bde@zeta.org.au) Received: from bde.zeta.org.au (bde.zeta.org.au [203.2.228.102]) by mailman.zeta.org.au (8.9.3/8.8.7) with ESMTP id HAA06435; Wed, 10 Jul 2002 07:16:02 +1000 Date: Wed, 10 Jul 2002 07:19:12 +1000 (EST) From: Bruce Evans X-X-Sender: bde@gamplex.bde.org To: John Baldwin Cc: FreeBSD current users , FreeBSD current users , Julian Elischer Subject: RE: userret() , ast() and the end of syscalls In-Reply-To: Message-ID: <20020710071340.R8522-100000@gamplex.bde.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Tue, 9 Jul 2002, John Baldwin wrote: > 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. Hopefully there won't be any unconditional code. Unconditional code in userret() pessimizes all syscalls. Unconditional code added by KSEIII pessimized basic syscall overhead by 10% according to lmbench2. Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message