Race condition in mb_free_ext()?
Bosko Milekic
bmilekic at technokratis.com
Tue Mar 1 23:49:59 GMT 2005
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 at technokratis.com
bmilekic at FreeBSD.org
More information about the freebsd-net
mailing list