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>