Subject: Re: mbuf external storage sharing
To: Martin Husemann <martin@duskware.de>
From: David Laight <david@l8s.co.uk>
List: tech-net
Date: 10/08/2004 10:51:59
On Fri, Oct 08, 2004 at 10:30:15AM +0200, Martin Husemann wrote:
> On Fri, Oct 08, 2004 at 11:29:33AM +0900, YAMAMOTO Takashi wrote:
> > 	(it might be good to have MI-exposed atomic_ operations like
> > 	freebsd and linux.  but it's a separate topic.)
> 
> Yes, in deed.
> Are there any archs that can not easily provide macros for those, so 
> we could copy the FreeBSD interface?
> 
> Otherwise we'd need a feature test macro and fall back to spinlocks,
> for archs that don't provide the atomice macros.

You can't do atomic increment on sparc, I don't think you can do it on
ppc (also arm - but i've not seem MP arm).

On architectures with an 'atomic exchange woth memory' you can:

For accurate statistics (but not reference counts) you can use an
'atomic exchange with memory' to write the new value, and repeat if the
returned value has changed.

For a reference counts you can use the exchange to write a 'magic' value
(eg ~0) when reading the current value, then write back the new one.
Loop and repeat if the read returns the 'magic value'.

Note that these both (effectively) implement a spin-lock using the
data area as a lock.

For stats, per-processor counts are usually better.

	David

-- 
David Laight: david@l8s.co.uk