lkml.org 
[lkml]   [2015]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 3/4] locking: Introduce smp_cond_acquire()
On 12/04/2015 05:05 PM, Linus Torvalds wrote:
> On Fri, Dec 4, 2015 at 12:51 PM, Waiman Long<waiman.long@hpe.com> wrote:
>> Will the following work?
> Are we trying to win some obfuscated C contest here?
>
> Just make it do something like (skipping backslashes to make it easier
> to type and read)
>
> #define smp_cond_load_acquire(ptr, cond_expr) ({
> typeof(*ptr) VAL;
> for (;;) {
> VAL = READ_ONCE(*ptr);
> if (cond_expr) break;
> cpu_relax();
> }
> smp_rmb();
> VAL;
> })
>
> and then you'd have it be
>
> val = smp_cond_load_acquire(&lock->val.counter,
> !(VAL& _Q_LOCKED_PENDING_MASK));
>
> which is at least halfway legible. Not some odd "fragments of
> expressions" interfaces unless absolutely required, please.

It is just some random thought that I have. I am not saying that it is
the right way to go.

> Of course, I suspect we should not use READ_ONCE(), but some
> architecture-overridable version that just defaults to READ_ONCE().
> Same goes for that "smp_rmb()". Because maybe some architectures will
> just prefer an explicit acquire, and I suspect we do *not* want
> architectures having to recreate and override that crazy loop.
>
> How much does this all actually end up mattering, btw?
>
> Linus

I think what Will want to do is to provide an architecture specific
replacement for the whole macro, not just part of it. So using READ_ONCE
should be fine.

Cheers,
Longman


\
 
 \ /
  Last update: 2015-12-05 00:01    [from the cache]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and my Meterkast|Read the blog