Why use `thread' as an argument of Syscalls?

Robert Watson rwatson at FreeBSD.org
Mon Jun 5 08:56:17 PDT 2006


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


More information about the freebsd-arch mailing list