Re: [PATCH] locking/atomics: Clean up the atomic.h maze of #defines
From: Ingo Molnar
Date: Sat May 05 2018 - 05:09:12 EST
* Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> On Sat, May 05, 2018 at 10:11:00AM +0200, Ingo Molnar wrote:
>
> > Before:
> >
> > #ifndef atomic_fetch_dec_relaxed
> >
> > #ifndef atomic_fetch_dec
> > #define atomic_fetch_dec(v) atomic_fetch_sub(1, (v))
> > #define atomic_fetch_dec_relaxed(v) atomic_fetch_sub_relaxed(1, (v))
> > #define atomic_fetch_dec_acquire(v) atomic_fetch_sub_acquire(1, (v))
> > #define atomic_fetch_dec_release(v) atomic_fetch_sub_release(1, (v))
> > #else /* atomic_fetch_dec */
> > #define atomic_fetch_dec_relaxed atomic_fetch_dec
> > #define atomic_fetch_dec_acquire atomic_fetch_dec
> > #define atomic_fetch_dec_release atomic_fetch_dec
> > #endif /* atomic_fetch_dec */
> >
> > #else /* atomic_fetch_dec_relaxed */
> >
> > #ifndef atomic_fetch_dec_acquire
> > #define atomic_fetch_dec_acquire(...) \
> > __atomic_op_acquire(atomic_fetch_dec, __VA_ARGS__)
> > #endif
> >
> > #ifndef atomic_fetch_dec_release
> > #define atomic_fetch_dec_release(...) \
> > __atomic_op_release(atomic_fetch_dec, __VA_ARGS__)
> > #endif
> >
> > #ifndef atomic_fetch_dec
> > #define atomic_fetch_dec(...) \
> > __atomic_op_fence(atomic_fetch_dec, __VA_ARGS__)
> > #endif
> > #endif /* atomic_fetch_dec_relaxed */
> >
> > After:
> >
> > #ifndef atomic_fetch_dec_relaxed
> > # ifndef atomic_fetch_dec
> > # define atomic_fetch_dec(v) atomic_fetch_sub(1, (v))
> > # define atomic_fetch_dec_relaxed(v) atomic_fetch_sub_relaxed(1, (v))
> > # define atomic_fetch_dec_acquire(v) atomic_fetch_sub_acquire(1, (v))
> > # define atomic_fetch_dec_release(v) atomic_fetch_sub_release(1, (v))
> > # else
> > # define atomic_fetch_dec_relaxed atomic_fetch_dec
> > # define atomic_fetch_dec_acquire atomic_fetch_dec
> > # define atomic_fetch_dec_release atomic_fetch_dec
> > # endif
> > #else
> > # ifndef atomic_fetch_dec_acquire
> > # define atomic_fetch_dec_acquire(...) __atomic_op_acquire(atomic_fetch_dec, __VA_ARGS__)
> > # endif
> > # ifndef atomic_fetch_dec_release
> > # define atomic_fetch_dec_release(...) __atomic_op_release(atomic_fetch_dec, __VA_ARGS__)
> > # endif
> > # ifndef atomic_fetch_dec
> > # define atomic_fetch_dec(...) __atomic_op_fence(atomic_fetch_dec, __VA_ARGS__)
> > # endif
> > #endif
> >
> > The new variant is readable at a glance, and the hierarchy of defines is very
> > obvious as well.
>
> It wraps and looks hideous in my normal setup. And I do detest that indent
> after # thing.
You should use wider terminals if you take a look at such code - there's already
numerous areas of the kernel that are not readable on 80x25 terminals.
_Please_ try the following experiment, for me:
Enter the 21st century temporarily and widen two of your terminals from 80 cols to
100 cols - it's only ~20% wider.
Apply the 3 patches I sent and then open the new and the old atomic.h in the two
terminals and compare them visually.
The new structure is _much_ more compact, it is nicer looking and much more
readable.
Thanks,
Ingo