From: Waiman Long <longman@redhat.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>,
Boqun Feng <boqun.feng@gmail.com>, Arnd Bergmann <arnd@arndb.de>,
linux-sh@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-s390 <linux-s390@vger.kernel.org>
Subject: Re: [PATCH/RFC] locking/spinlocks: Make __raw_* lock ops static
Date: Sun, 3 Mar 2024 21:54:06 -0500 [thread overview]
Message-ID: <fad87131-8952-4c67-9208-e7c4683c0234@redhat.com> (raw)
In-Reply-To: <CAMuHMdX+mpc5++8h4oM98FTPAdV-c8TzscTQA095Wzssae6amg@mail.gmail.com>
On 3/3/24 11:11, Geert Uytterhoeven wrote:
> Hi Waiman,
>
> CC s390
>
> On Sun, Mar 3, 2024 at 5:25 AM Waiman Long <longman@redhat.com> wrote:
>> On 3/1/24 15:43, Geert Uytterhoeven wrote:
>>> sh/sdk7786_defconfig (CONFIG_GENERIC_LOCKBREAK=y and
>>> CONFIG_DEBUG_LOCK_ALLOC=n):
>>>
>>> kernel/locking/spinlock.c:68:17: warning: no previous prototype for '__raw_spin_lock' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:80:26: warning: no previous prototype for '__raw_spin_lock_irqsave' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:98:17: warning: no previous prototype for '__raw_spin_lock_irq' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:103:17: warning: no previous prototype for '__raw_spin_lock_bh' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:68:17: warning: no previous prototype for '__raw_read_lock' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:80:26: warning: no previous prototype for '__raw_read_lock_irqsave' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:98:17: warning: no previous prototype for '__raw_read_lock_irq' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:103:17: warning: no previous prototype for '__raw_read_lock_bh' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:68:17: warning: no previous prototype for '__raw_write_lock' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:80:26: warning: no previous prototype for '__raw_write_lock_irqsave' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:98:17: warning: no previous prototype for '__raw_write_lock_irq' [-Wmissing-prototypes]
>>> kernel/locking/spinlock.c:103:17: warning: no previous prototype for '__raw_write_lock_bh' [-Wmissing-prototypes]
>>>
>>> Fix this by making the __raw_* lock ops static.
>>>
>>> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
>>> ---
>>> Compile-tested only.
>>>
>>> Is SH really the only SMP platform where CONFIG_GENERIC_LOCKBREAK=y?
>>> ---
>>> kernel/locking/spinlock.c | 8 ++++----
>>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/kernel/locking/spinlock.c b/kernel/locking/spinlock.c
>>> index 8475a0794f8c5ad2..7009b568e6255d64 100644
>>> --- a/kernel/locking/spinlock.c
>>> +++ b/kernel/locking/spinlock.c
>>> @@ -65,7 +65,7 @@ EXPORT_PER_CPU_SYMBOL(__mmiowb_state);
>>> * towards that other CPU that it should break the lock ASAP.
>>> */
>>> #define BUILD_LOCK_OPS(op, locktype) \
>>> -void __lockfunc __raw_##op##_lock(locktype##_t *lock) \
>>> +static void __lockfunc __raw_##op##_lock(locktype##_t *lock) \
>>> { \
>>> for (;;) { \
>>> preempt_disable(); \
>>> @@ -77,7 +77,7 @@ void __lockfunc __raw_##op##_lock(locktype##_t *lock) \
>>> } \
>>> } \
>>> \
>>> -unsigned long __lockfunc __raw_##op##_lock_irqsave(locktype##_t *lock) \
>>> +static unsigned long __lockfunc __raw_##op##_lock_irqsave(locktype##_t *lock) \
>>> { \
>>> unsigned long flags; \
>>> \
>>> @@ -95,12 +95,12 @@ unsigned long __lockfunc __raw_##op##_lock_irqsave(locktype##_t *lock) \
>>> return flags; \
>>> } \
>>> \
>>> -void __lockfunc __raw_##op##_lock_irq(locktype##_t *lock) \
>>> +static void __lockfunc __raw_##op##_lock_irq(locktype##_t *lock) \
>>> { \
>>> _raw_##op##_lock_irqsave(lock); \
>>> } \
>>> \
>>> -void __lockfunc __raw_##op##_lock_bh(locktype##_t *lock) \
>>> +static void __lockfunc __raw_##op##_lock_bh(locktype##_t *lock) \
>>> { \
>>> unsigned long flags; \
>>> \
>> This may not work if CONFIG_GENERIC_LOCKBREAK is defined. We had been
> sdk7786_defconfig sets CONFIG_GENERIC_LOCKBREAK=y?
>
> FTR, I checked all defconfigs, and it's set in three of them:
> - s390/debug_defconfig
> - sh/sdk7786_defconfig
> - sh/shx3_defconfig
>
> However, the first one has CONFIG_DEBUG_LOCK_ALLOC=y, so the issue
> does not trigger there (but see below).
I was worrying about any of the INLINE_*_LOCK* config being turned on.
It turns out that setting GENERIC_LOCKBREAK will not allow those locking
functions to be inlined. So my concern is not warranted.
With that, I think your patch should be safe.
Acked-by: Waiman Long <longman@redhat.com>
It will be nice if you can document that either in the change log or in
a comment.
Still the lock-break lock variants are simple TaS locks with preemption
turned on in between successive attempts to acquire the lock. It will be
slow and is only suitable for system with small number of cores. The
long term goal should be to get rid of these variants and
CONFIG_GENERIC_LOCKBREAK if possible.
Cheers,
Longman
prev parent reply other threads:[~2024-03-04 2:54 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <c395b02613572131568bc1fd1bc456d20d1a5426.1709325647.git.geert+renesas@glider.be>
[not found] ` <87fe0004-0e53-4b7a-b19d-c6b37c8db8dc@redhat.com>
2024-03-03 16:11 ` [PATCH/RFC] locking/spinlocks: Make __raw_* lock ops static Geert Uytterhoeven
2024-03-04 2:54 ` Waiman Long [this message]
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=fad87131-8952-4c67-9208-e7c4683c0234@redhat.com \
--to=longman@redhat.com \
--cc=arnd@arndb.de \
--cc=boqun.feng@gmail.com \
--cc=geert@linux-m68k.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=will@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox