On Mon, Apr 24, 2017 at 3:45 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > On Fri, Apr 21, 2017 at 03:09:39PM -0700, Kees Cook wrote: >> +static __always_inline __must_check bool refcount_inc_not_zero(refcount_t *r) >> +{ >> + const int a = 1; >> + const int u = 0; >> + int c, old; >> + >> + c = atomic_read(&(r->refs)); >> + for (;;) { >> + if (unlikely(c == (u))) >> + break; >> + old = atomic_cmpxchg(&(r->refs), c, c + (a)); > > Please use atomic_try_cmpxchg(), that generates saner code. Ah-ha, thanks. I actually copied this directly out of the existing atomic_t function, so we should probably update it there too. -Kees > >> + if (likely(old == c)) >> + break; >> + c = old; >> + } >> + return c != u; >> +} -- Kees Cook Pixel Security