Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Mar 2005 18:49:37 -0500
From:      Bosko Milekic <bmilekic@technokratis.com>
To:        Kris Kennaway <kris@obsecurity.org>
Cc:        bmilekic@freebsd.org
Subject:   Re: Race condition in mb_free_ext()?
Message-ID:  <20050301234937.GA19502@technokratis.com>
In-Reply-To: <20050301231438.GA25573@xor.obsecurity.org>
References:  <20050301000436.GA33346@xor.obsecurity.org> <200503011340.18162.jhb@FreeBSD.org> <bbebbd3d0503011504560a94b4@mail.gmail.com> <20050301231438.GA25573@xor.obsecurity.org>

next in thread | previous in thread | raw e-mail | index | archive | help

You know, the more and more we run into these problems specific to how
reference counting is performed, I keep wondering whether some cleverly
defined macros for dealing with common reference counting operations
would be worthwhile.  I'm not saying "introduce a refcount_t type and a
full-blown abstraction," but some template-like stuff might be useful.
It took a while just to get the refcount decrement on free path free of
races on SMP, and that's only in the mbuf code.

-Bosko

On Tue, Mar 01, 2005 at 03:14:38PM -0800, Kris Kennaway wrote:
> On Tue, Mar 01, 2005 at 06:04:27PM -0500, Bosko Milekic wrote:
> 
> > This does not appear to explain the livelock.
> 
> alc and dwhite tracked it down to a missing volatile causing gcc to
> mis-optimize the loop:
> 
> -               cnt = *(m->m_ext.ref_cnt);
> +               cnt = *(volatile u_int *)(m->m_ext.ref_cnt);
> 
> I'm currently testing that.
> 
> Kris


-- 
Bosko Milekic
bmilekic@technokratis.com
bmilekic@FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050301234937.GA19502>