Subject: Re: Test and set (was Re: postgreSQL)
To: Jason Thorpe <thorpej@nas.nasa.gov>
From: Simon Burge <simonb@netbsd.org>
List: tech-kern
Date: 05/29/1999 14:34:20
Jason Thorpe wrote:
> On Fri, 28 May 1999 17:36:43 +1000
> Simon Burge <simonb@netbsd.org> wrote:
>
> > > atomic_value_t v1 = ATOMIC_INIT_RESET;
> > > atomic_value_t v2 = ATOMIC_INIT_SET;
> > >
> > > int atomic_set(atomic_value_t *v);
> > > set *v; return 1 if it wasn't already set.
> > > void atomic_reset(atomic_value_t *v);
> > > reset *v.
> > > int atomic_isset(atomic_value_t *v);
> > > return 1 if *v is set, otherwise 0.
> >
> > And this interface would live in <atomic.h> or <sys/atomic.h>? If
> > we need a kernel implementation (as for older MIPS chips), then
> > <sys/atomic.h> would be the way to go...
> >
> > I'll put together a full proposal.
>
> <machine/atomic.h> is the right thing, I think, since it's inherently
> machine-dependent.
I was thinking along the lines of <sys/atomic.h> more or less just
including <machine/atomic.h>, but I guess there's no need for the
extra level on indirection.
> Also note some of the atomic operations that arch/alpha/alpha/atomic.s
> implements...
>
> - atomic test-and-set (for spin locks)
>
> - atomic load-and-latch (for atomically reading a counter and
> resetting it to zero, for example)
I was only thinking in terms of Bill's interface for now. Would this
do for now? One thing that's missing is the size of "atomic_value_t".
Maybe that should be "atomic_set32" and so on...
Am I right in saying that each new interface to atomic operations
would require bumping either libc's minor number and/or the kernel's
alphabetic release number, even if only one architecture extends the
interface?
Simon.