dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
  • * Fwd: [PATCH] kref: prefer atomic_inc_not_zero to atomic_add_unless
           [not found] <1444474594-28359-1-git-send-email-Jason@zx2c4.com>
           [not found] ` <561ABFA6.8050102@vmware.com>
    @ 2016-08-10 12:24 ` Thomas Hellstrom
      1 sibling, 0 replies; 10+ messages in thread
    From: Thomas Hellstrom @ 2016-08-10 12:24 UTC (permalink / raw)
      To: Daniel Vetter; +Cc: dri-devel@lists.freedesktop.org
    
    By request forwarded patch
    
    This is also
    Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
    
    /Thomas
    
    
    -------- Forwarded Message --------
    Subject: 	[PATCH] kref: prefer atomic_inc_not_zero to atomic_add_unless
    Date: 	Sat, 10 Oct 2015 12:56:34 +0200
    From: 	Jason A. Donenfeld <Jason@zx2c4.com>
    To: 	Dave Airlie <airlied@redhat.com>, Thomas Hellstrom
    <thellstrom@vmware.com>, linux-kernel@vger.kernel.org
    CC: 	Jason A. Donenfeld <Jason@zx2c4.com>
    
    
    
    On most platforms, there exists this ifdef:
    
     #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
    
    This makes this patch functionally useless. However, on PPC, there is
    actually an explicit definition of atomic_inc_not_zero with its own
    assembly that is slightly more optimized than atomic_add_unless. So,
    this patch changes kref to use atomic_inc_not_zero instead, for PPC and
    any future platforms that might provide an explicit implementation.
    
    This also puts this usage of kref more in line with a verbatim reading
    of the examples in Paul McKenney's paper [1] in the section titled "2.4
    Atomic Counting With Check and Release Memory Barrier", which uses
    atomic_inc_not_zero.
    
    [1] https://urldefense.proofpoint.com/v2/url?u=http-3A__open-2Dstd.org_jtc1_sc22_wg21_docs_papers_2007_n2167.pdf&d=BQIBAg&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=vpukPkBtpoNQp2IUKuFviOmPNYWVKmen3Jeeu55zmEA&m=z5Nd9sYiJMKiphNjyZp6XT5CbayXMBlcb903f260pDY&s=HEHX3CuXRs2GRRQWuC4Vef6iJMwdilKVRkiZgJpjEpA&e= 
    
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    ---
     include/linux/kref.h | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/include/linux/kref.h b/include/linux/kref.h
    index 484604d..83d1f94 100644
    --- a/include/linux/kref.h
    +++ b/include/linux/kref.h
    @@ -166,6 +166,6 @@ static inline int kref_put_mutex(struct kref *kref,
      */
     static inline int __must_check kref_get_unless_zero(struct kref *kref)
     {
    -	return atomic_add_unless(&kref->refcount, 1, 0);
    +	return atomic_inc_not_zero(&kref->refcount);
     }
     #endif /* _KREF_H_ */
    -- 
    2.6.0
    
    _______________________________________________
    dri-devel mailing list
    dri-devel@lists.freedesktop.org
    https://lists.freedesktop.org/mailman/listinfo/dri-devel
    
    ^ permalink raw reply related	[flat|nested] 10+ messages in thread
  • * [PATCH] kref: prefer atomic_inc_not_zero to atomic_add_unless
    @ 2016-12-15 18:55 Jason A. Donenfeld
      2016-12-15 19:10 ` Greg KH
      0 siblings, 1 reply; 10+ messages in thread
    From: Jason A. Donenfeld @ 2016-12-15 18:55 UTC (permalink / raw)
      To: Christoph Hellwig, Thomas Hellstrom, dri-devel, linux-kernel,
    	Daniel Vetter, gregkh
      Cc: Jason A. Donenfeld
    
    On most platforms, there exists this ifdef:
    
     #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
    
    This makes this patch functionally useless. However, on PPC, there is
    actually an explicit definition of atomic_inc_not_zero with its own
    assembly that is slightly more optimized than atomic_add_unless. So,
    this patch changes kref to use atomic_inc_not_zero instead, for PPC and
    any future platforms that might provide an explicit implementation.
    
    This also puts this usage of kref more in line with a verbatim reading
    of the examples in Paul McKenney's paper [1] in the section titled "2.4
    Atomic Counting With Check and Release Memory Barrier", which uses
    atomic_inc_not_zero.
    
    [1] http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2167.pdf
    
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    ---
    Sorry to submit this again, but people keep reviewing it saying it's fine,
    but then point to somebody else to actually merge this. At the end of the
    chain of fingerpointing is usually Greg. "Just have Greg do it." At this
    point I'm confused, but it's certainly been sufficiently reviewed and
    accepted. So can one of you just respond saying "I'll take it!"
    
     include/linux/kref.h | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/include/linux/kref.h b/include/linux/kref.h
    index e15828fd71f1..62f0a84ae94e 100644
    --- a/include/linux/kref.h
    +++ b/include/linux/kref.h
    @@ -133,6 +133,6 @@ static inline int kref_put_mutex(struct kref *kref,
      */
     static inline int __must_check kref_get_unless_zero(struct kref *kref)
     {
    -	return atomic_add_unless(&kref->refcount, 1, 0);
    +	return atomic_inc_not_zero(&kref->refcount);
     }
     #endif /* _KREF_H_ */
    -- 
    2.11.0
    
    ^ permalink raw reply related	[flat|nested] 10+ messages in thread

    end of thread, other threads:[~2016-12-16  7:36 UTC | newest]
    
    Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1444474594-28359-1-git-send-email-Jason@zx2c4.com>
         [not found] ` <561ABFA6.8050102@vmware.com>
         [not found]   ` <CAHmME9qZwkUqYxsTohUoNTLzxcPsrxV9swM3HH0rxpOLMmCmjQ@mail.gmail.com>
         [not found]     ` <CAHmME9rVPQ+SWqAe6Lqj4Do16mpCmSUz5_6Q2qyYj6mqnJec7g@mail.gmail.com>
    2016-07-01  7:08       ` Patch for drm-next WAS Re: [PATCH] kref: prefer atomic_inc_not_zero to atomic_add_unless Thomas Hellstrom
    2016-07-12 12:28         ` Daniel Vetter
    2016-12-15  4:59           ` Jason A. Donenfeld
    2016-12-15  5:01           ` Jason A. Donenfeld
    2016-12-16  7:33             ` Daniel Vetter
    2016-08-10 12:24 ` Fwd: " Thomas Hellstrom
    2016-12-15 18:55 Jason A. Donenfeld
    2016-12-15 19:10 ` Greg KH
    2016-12-15 19:47   ` Jason A. Donenfeld
    2016-12-16  7:36   ` Daniel Vetter
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox