From owner-freebsd-arch@FreeBSD.ORG Mon Jun 5 15:56:10 2006 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D942F16B034; Mon, 5 Jun 2006 15:56:10 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4FD8243D45; Mon, 5 Jun 2006 15:56:10 +0000 (GMT) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id B599746B0E; Mon, 5 Jun 2006 11:56:05 -0400 (EDT) Date: Mon, 5 Jun 2006 16:56:06 +0100 (BST) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Suleiman Souhlal In-Reply-To: <448450FD.4030709@FreeBSD.org> Message-ID: <20060605165355.L50057@fledge.watson.org> References: <1fa17f810606050044k2847e4a2i150eb934ed84006f@mail.gmail.com> <1fa17f810606050608l5bd2ec5ch37663375f6fa5b64@mail.gmail.com> <20060605163559.N50057@fledge.watson.org> <448450FD.4030709@FreeBSD.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Daniel Eischen , MingyanGuo , delphij@gmail.com, freebsd-arch@freebsd.org Subject: Re: Why use `thread' as an argument of Syscalls? X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Jun 2006 15:56:17 -0000 On Mon, 5 Jun 2006, Suleiman Souhlal wrote: > Robert Watson wrote: >> >> On Mon, 5 Jun 2006, Daniel Eischen wrote: >> >>>> They are the same questions, I think ;-). Now would you please explain >>>> "why use `proc' as an argument of Syscalls" to me :)? I've read some >>>> source code of the kernel, but no comments about it found. >>> >>> I don't know. Convention? It makes sense to me. >> >> Certainly consistency. Most system calls do actually use the argument at >> some point -- be it to look up a file descriptor, access control, or the >> like, and the calling context has it for free and in-hand anyway. > > But couldn't they just use curthread/curproc? In the past, in micro-benchmarking, I've measured a small performance hit from using per-cpu variables over variables already in the stack. However, that was quite a while ago, and I'm not entirely convinced the test results were valid. In the general case, it's pretty helpful to be able to pass in, for example, explicit credential references, as it means you can do acess control checks, auditing, accounting, etc, against arbitrary credentials rather than always against curthread->td_ucred. In a number of places, we pass threads down the stack where we mean to pass credentials, such as at several spots in the network stack. There are also places where the process is passed around so it can become a later argument to lockmgr() locking primitives, and since those are decreasingly used, the references are increasingly unnecessary. Robert N M Watson