Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1168867AbdDXKqU (ORCPT ); Mon, 24 Apr 2017 06:46:20 -0400 Received: from merlin.infradead.org ([205.233.59.134]:50700 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1168436AbdDXKqB (ORCPT ); Mon, 24 Apr 2017 06:46:01 -0400 Date: Mon, 24 Apr 2017 12:45:39 +0200 From: Peter Zijlstra To: Kees Cook Cc: linux-kernel@vger.kernel.org, Eric Biggers , Christoph Hellwig , "axboe@kernel.dk" , James Bottomley , Elena Reshetova , Hans Liljestrand , David Windsor , x86@kernel.org, Ingo Molnar , Arnd Bergmann , Greg Kroah-Hartman , Jann Horn , davem@davemloft.net, linux-arch@vger.kernel.org, kernel-hardening@lists.openwall.com, PaX Team Subject: Re: [PATCH] x86/refcount: Implement fast refcount_t handling Message-ID: <20170424104539.qa2jva2jytwboeam@hirez.programming.kicks-ass.net> References: <20170421220939.GA65363@beast> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170421220939.GA65363@beast> User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 494 Lines: 21 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. > + if (likely(old == c)) > + break; > + c = old; > + } > + return c != u; > +}