lkml.org 
[lkml]   [2016]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] seqlock: fix raw_read_seqcount_latch()
    On Sun, May 22, 2016 at 12:48:27PM +0200, Peter Zijlstra wrote:
    > On Sat, May 21, 2016 at 11:14:49PM +0300, Alexey Dobriyan wrote:
    > > lockless_dereference() is supposed to take pointer not integer.
    >
    > Urgh :/
    >
    > Is there any way we can make lockless_dereference() issue a warning if
    > we don't feed it a pointer?
    >
    > Would something like so work? All pointer types should silently cast to
    > void * while integer (and others) should refuse to.

    This works (and spammy enough in case of seqlock, which is good)
    but not for "unsigned long":

    include/linux/percpu-refcount.h:146:36: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
    percpu_ptr = lockless_dereference(ref->percpu_count_ptr);

    > --- a/include/linux/compiler.h
    > +++ b/include/linux/compiler.h
    > @@ -544,6 +544,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
    > */
    > #define lockless_dereference(p) \
    > ({ \
    > + __maybe_unused void * _________p2 = p; \
    > typeof(p) _________p1 = READ_ONCE(p); \
    > smp_read_barrier_depends(); /* Dependency order vs. p above. */ \
    > (_________p1); \

    \
     
     \ /
      Last update: 2016-05-22 21:01    [W:3.634 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site