Date: Thu, 28 Mar 2002 00:02:40 -0500 From: Bosko Milekic <bmilekic@unixdaemons.com> To: Julian Elischer <julian@elischer.org> Cc: arch@FreeBSD.ORG Subject: Re: SMP safe reference counting Message-ID: <20020328000240.A94897@unixdaemons.com> In-Reply-To: <Pine.BSF.4.21.0203271150430.47944-100000@InterJet.elischer.org>; from julian@elischer.org on Wed, Mar 27, 2002 at 12:10:36PM -0800 References: <Pine.BSF.4.21.0203271150430.47944-100000@InterJet.elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I don't think we really need a ref. count API, per-se. I can think of several places that may need to do ref. counting but wouldn't want to do it with a bus-locked instruction because their reference counter(s) are already protected by an existing mutex. -Bosko On Wed, Mar 27, 2002 at 12:10:36PM -0800, Julian Elischer wrote: > > [please remove -smp from your reply] > > Once again on the SMP list a lock is being used to make a reference count > safe. I'd like to re-raise the issue of a safe reference counting > fascility. > > what would be the semantics? > > typedef volatile u_int ref_cnt; > typedef void ref_free(void *); > > reference_add(ref_cnt *); > reference_drop(ref_cnt *, ref_free *, void *); > > > > > > __inline void > reference_add(ref_cnt *cnt) { > atomic_inc(cnt); > } > > /* Note I use the non-existing "atomic_inc()". I think > we should have this as its SO COMMONLY used. */ > > __inline void > reference_drop(ref_cnt *cnt, ref_free *fn. void * arg) { > int newcount; > int oldcount; > > do { > newcount = (oldcount = *cnt) - 1; > } while (atomic_cmp_and_set(cnt, oldcount, newcount) == ACS_FAILED); > } > /* I can't remember off the top of my head the cmp-and-set command */ > > > > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-arch" in the body of the message > -- Bosko Milekic bmilekic@unixdaemons.com bmilekic@FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020328000240.A94897>