From: Ingo Molnar <mingo@kernel.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
will.deacon@arm.com, mark.rutland@arm.com,
torvalds@linux-foundation.org, paulmck@linux.vnet.ibm.com,
tglx@linutronix.de, hpa@zytor.com,
linux-tip-commits@vger.kernel.org
Subject: Re: [tip:locking/core] locking/atomics: Simplify the op definitions in atomic.h some more
Date: Tue, 15 May 2018 10:35:56 +0200 [thread overview]
Message-ID: <20180515083556.GA30420@gmail.com> (raw)
In-Reply-To: <20180509073327.GE12217@hirez.programming.kicks-ass.net>
* Peter Zijlstra <peterz@infradead.org> wrote:
> And if we're going to do codegen, we might as well all generate this
> anyway, so all this mucking about is a complete waste of time.
I'm not yet convinced that it will be cleaner, but can be convinced in principle,
but meanwhile the existing code is arguably butt-ugly and bloaty.
Regarding these cleanups, we had this before:
/* atomic_add_return_relaxed */
#ifndef atomic_add_return_relaxed
#define atomic_add_return_relaxed atomic_add_return
#define atomic_add_return_acquire atomic_add_return
#define atomic_add_return_release atomic_add_return
#else /* atomic_add_return_relaxed */
#ifndef atomic_add_return_acquire
#define atomic_add_return_acquire(...) \
__atomic_op_acquire(atomic_add_return, __VA_ARGS__)
#endif
#ifndef atomic_add_return_release
#define atomic_add_return_release(...) \
__atomic_op_release(atomic_add_return, __VA_ARGS__)
#endif
#ifndef atomic_add_return
#define atomic_add_return(...) \
__atomic_op_fence(atomic_add_return, __VA_ARGS__)
#endif
#endif /* atomic_add_return_relaxed */
Which is 23 lines per definition.
Now we have this much more compact definition:
#ifndef atomic_add_return_relaxed
# define atomic_add_return_relaxed atomic_add_return
# define atomic_add_return_acquire atomic_add_return
# define atomic_add_return_release atomic_add_return
#else
# ifndef atomic_add_return
# define atomic_add_return(...) __op_fence(atomic_add_return, __VA_ARGS__)
# define atomic_add_return_acquire(...) __op_acquire(atomic_add_return, __VA_ARGS__)
# define atomic_add_return_release(...) __op_release(atomic_add_return, __VA_ARGS__)
# endif
#endif
Which is just _half_ the linecount.
Automated code generation might improve this some more, but the net effect on the
core <linux/atomic.h> code right now is 373 lines removed:
include/linux/atomic.h | 1109 ++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------
1 file changed, 368 insertions(+), 741 deletions(-)
... <linux/atomic.h> shrunk to just 709 lines.
The x86/include/asm/atomic64_64.h file got smaller as well due to the cleanups:
arch/x86/include/asm/atomic64_64.h | 216 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------------------------------------------------------
1 file changed, 97 insertions(+), 119 deletions(-)
So unless you can clean this up and shrink this even more, these changes are
obviously justified on their own.
Thanks,
Ingo
next prev parent reply other threads:[~2018-05-15 8:36 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-04 17:39 [PATCH 0/6] arm64: add instrumented atomics Mark Rutland
2018-05-04 17:39 ` Mark Rutland
2018-05-04 17:39 ` [PATCH 1/6] locking/atomic, asm-generic: instrument ordering variants Mark Rutland
2018-05-04 17:39 ` Mark Rutland
2018-05-04 18:01 ` Peter Zijlstra
2018-05-04 18:01 ` Peter Zijlstra
2018-05-04 18:09 ` Mark Rutland
2018-05-04 18:09 ` Mark Rutland
2018-05-04 18:24 ` Peter Zijlstra
2018-05-04 18:24 ` Peter Zijlstra
2018-05-05 9:12 ` Mark Rutland
2018-05-05 9:12 ` Mark Rutland
2018-05-05 8:11 ` [PATCH] locking/atomics: Clean up the atomic.h maze of #defines Ingo Molnar
2018-05-05 8:11 ` Ingo Molnar
2018-05-05 8:36 ` [PATCH] locking/atomics: Simplify the op definitions in atomic.h some more Ingo Molnar
2018-05-05 8:36 ` Ingo Molnar
2018-05-05 8:54 ` [PATCH] locking/atomics: Combine the atomic_andnot() and atomic64_andnot() API definitions Ingo Molnar
2018-05-05 8:54 ` Ingo Molnar
2018-05-06 12:15 ` [tip:locking/core] " tip-bot for Ingo Molnar
2018-05-06 14:15 ` [PATCH] " Andrea Parri
2018-05-06 14:15 ` Andrea Parri
2018-05-06 12:14 ` [tip:locking/core] locking/atomics: Simplify the op definitions in atomic.h some more tip-bot for Ingo Molnar
2018-05-09 7:33 ` Peter Zijlstra
2018-05-09 13:03 ` Will Deacon
2018-05-15 8:54 ` Ingo Molnar
2018-05-15 8:35 ` Ingo Molnar [this message]
2018-05-15 11:41 ` Peter Zijlstra
2018-05-15 12:13 ` Peter Zijlstra
2018-05-15 15:43 ` Mark Rutland
2018-05-15 17:10 ` Peter Zijlstra
2018-05-15 17:53 ` Mark Rutland
2018-05-15 18:11 ` Peter Zijlstra
2018-05-15 18:15 ` Peter Zijlstra
2018-05-15 18:52 ` Linus Torvalds
2018-05-15 19:39 ` Peter Zijlstra
2018-05-21 17:12 ` Mark Rutland
2018-05-06 14:12 ` [PATCH] " Andrea Parri
2018-05-06 14:12 ` Andrea Parri
2018-05-06 14:57 ` Ingo Molnar
2018-05-06 14:57 ` Ingo Molnar
2018-05-07 9:54 ` Andrea Parri
2018-05-07 9:54 ` Andrea Parri
2018-05-18 18:43 ` Palmer Dabbelt
2018-05-18 18:43 ` Palmer Dabbelt
2018-05-05 8:47 ` [PATCH] locking/atomics: Clean up the atomic.h maze of #defines Peter Zijlstra
2018-05-05 8:47 ` Peter Zijlstra
2018-05-05 9:04 ` Ingo Molnar
2018-05-05 9:04 ` Ingo Molnar
2018-05-05 9:24 ` Peter Zijlstra
2018-05-05 9:24 ` Peter Zijlstra
2018-05-05 9:38 ` Ingo Molnar
2018-05-05 9:38 ` Ingo Molnar
2018-05-05 10:00 ` [RFC PATCH] locking/atomics/powerpc: Introduce optimized cmpxchg_release() family of APIs for PowerPC Ingo Molnar
2018-05-05 10:00 ` Ingo Molnar
2018-05-05 10:26 ` Boqun Feng
2018-05-05 10:26 ` Boqun Feng
2018-05-06 1:56 ` Benjamin Herrenschmidt
2018-05-06 1:56 ` Benjamin Herrenschmidt
2018-05-05 10:16 ` [PATCH] locking/atomics: Clean up the atomic.h maze of #defines Boqun Feng
2018-05-05 10:16 ` Boqun Feng
2018-05-05 10:35 ` [RFC PATCH] locking/atomics/powerpc: Clarify why the cmpxchg_relaxed() family of APIs falls back to full cmpxchg() Ingo Molnar
2018-05-05 10:35 ` Ingo Molnar
2018-05-05 11:28 ` Boqun Feng
2018-05-05 11:28 ` Boqun Feng
2018-05-05 13:27 ` [PATCH] locking/atomics/powerpc: Move cmpxchg helpers to asm/cmpxchg.h and define the full set of cmpxchg APIs Ingo Molnar
2018-05-05 13:27 ` Ingo Molnar
2018-05-05 14:03 ` Boqun Feng
2018-05-05 14:03 ` Boqun Feng
2018-05-06 12:11 ` Ingo Molnar
2018-05-06 12:11 ` Ingo Molnar
2018-05-07 1:04 ` Boqun Feng
2018-05-07 1:04 ` Boqun Feng
2018-05-07 6:50 ` Ingo Molnar
2018-05-07 6:50 ` Ingo Molnar
2018-05-06 12:13 ` [tip:locking/core] " tip-bot for Boqun Feng
2018-05-07 13:31 ` [PATCH v2] " Boqun Feng
2018-05-07 13:31 ` Boqun Feng
2018-05-05 9:05 ` [PATCH] locking/atomics: Clean up the atomic.h maze of #defines Dmitry Vyukov
2018-05-05 9:05 ` Dmitry Vyukov
2018-05-05 9:32 ` Peter Zijlstra
2018-05-05 9:32 ` Peter Zijlstra
2018-05-07 6:43 ` [RFC PATCH] locking/atomics/x86/64: Clean up and fix details of <asm/atomic64_64.h> Ingo Molnar
2018-05-07 6:43 ` Ingo Molnar
2018-05-05 9:09 ` [PATCH] locking/atomics: Clean up the atomic.h maze of #defines Ingo Molnar
2018-05-05 9:09 ` Ingo Molnar
2018-05-05 9:29 ` Peter Zijlstra
2018-05-05 9:29 ` Peter Zijlstra
2018-05-05 10:48 ` [PATCH] locking/atomics: Shorten the __atomic_op() defines to __op() Ingo Molnar
2018-05-05 10:48 ` Ingo Molnar
2018-05-05 10:59 ` Ingo Molnar
2018-05-05 10:59 ` Ingo Molnar
2018-05-06 12:15 ` [tip:locking/core] " tip-bot for Ingo Molnar
2018-05-06 12:14 ` [tip:locking/core] locking/atomics: Clean up the atomic.h maze of #defines tip-bot for Ingo Molnar
2018-05-04 17:39 ` [PATCH 2/6] locking/atomic, asm-generic: instrument atomic*andnot*() Mark Rutland
2018-05-04 17:39 ` Mark Rutland
2018-05-04 17:39 ` [PATCH 3/6] arm64: use <linux/atomic.h> for cmpxchg Mark Rutland
2018-05-04 17:39 ` Mark Rutland
2018-05-04 17:39 ` [PATCH 4/6] arm64: fix assembly constraints " Mark Rutland
2018-05-04 17:39 ` Mark Rutland
2018-05-04 17:39 ` [PATCH 5/6] arm64: use instrumented atomics Mark Rutland
2018-05-04 17:39 ` Mark Rutland
2018-05-04 17:39 ` [PATCH 6/6] arm64: instrument smp_{load_acquire,store_release} Mark Rutland
2018-05-04 17:39 ` Mark Rutland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180515083556.GA30420@gmail.com \
--to=mingo@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=will.deacon@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.