From: Alexey Gladkov <legion@kernel.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Boqun Feng <boqun.feng@gmail.com>, Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Rik van Riel <riel@surriel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Waiman Long <longman@redhat.com>, Will Deacon <will@kernel.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/5] seqlock: introduce seqprop_lock/unlock
Date: Fri, 15 Sep 2023 20:25:31 +0200 [thread overview]
Message-ID: <ZQShm4QAeAtjR8EK@example.org> (raw)
In-Reply-To: <20230913155000.GA26248@redhat.com>
On Wed, Sep 13, 2023 at 05:50:00PM +0200, Oleg Nesterov wrote:
> which can be used to take/release the corresponding lock.
>
> Thanks to the previous patch, it is trivial to pass 2 arguments to
> the new __seqprop_##lockname##_lock/unlock "methods", plus we do not
> loose the type info and thus the new seqprop's are "type safe".
>
> So for example
>
> void func(seqcount_rwlock_t *s, rwlock_t *l)
> {
> seqprop_lock(s, l);
> }
>
> happily compiles, but this one
>
> void func(seqcount_rwlock_t *s, spinlock_t *l)
> {
> seqprop_lock(s, l);
> }
>
> doesn't.
>
> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
> ---
> include/linux/seqlock.h | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
> index 41e36f8afad4..9831683a0102 100644
> --- a/include/linux/seqlock.h
> +++ b/include/linux/seqlock.h
> @@ -241,6 +241,21 @@ static __always_inline void \
> __seqprop_##lockname##_assert(const seqcount_##lockname##_t *s) \
> { \
> __SEQ_LOCK(lockdep_assert_held(s->lock)); \
> +} \
> + \
> +static __always_inline void \
> +__seqprop_##lockname##_lock(seqcount_##lockname##_t *s, \
> + locktype *lock) \
> +{ \
> + __SEQ_LOCK(WARN_ON_ONCE(s->lock != lock)); \
> + lockbase##_lock(lock); \
> +} \
> + \
> +static __always_inline void \
> +__seqprop_##lockname##_unlock(seqcount_##lockname##_t *s, \
> + locktype *lock) \
> +{ \
> + lockbase##_unlock(lock); \
> }
Why are you creating a new method with an unused argument s ?
>
> /*
> @@ -306,6 +321,12 @@ SEQCOUNT_LOCKNAME(mutex, struct mutex, true, mutex)
> #define seqprop_preemptible(s) __seqprop(s, preemptible)(s)
> #define seqprop_assert(s) __seqprop(s, assert)(s)
>
> +/* seqcount_t doesn't have these methods */
> +static inline void __seqprop_lock (seqcount_t *s, void *l) { BUILD_BUG(); }
> +static inline void __seqprop_unlock (seqcount_t *s, void *l) { BUILD_BUG(); }
> +#define seqprop_lock(s, l) __seqprop(s, lock)(s, l)
> +#define seqprop_unlock(s, l) __seqprop(s, unlock)(s, l)
> +
> /**
> * __read_seqcount_begin() - begin a seqcount_t read section w/o barrier
> * @s: Pointer to seqcount_t or any of the seqcount_LOCKNAME_t variants
> --
> 2.25.1.362.g51ebf55
>
--
Rgrds, legion
next prev parent reply other threads:[~2023-09-15 18:26 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-13 15:49 [PATCH 0/5] turn signal_struct.stats_lock into seqcount_rwlock_t Oleg Nesterov
2023-09-13 15:49 ` [PATCH 1/5] seqlock: simplify SEQCOUNT_LOCKNAME() Oleg Nesterov
2023-09-15 17:36 ` Alexey Gladkov
2023-09-16 8:51 ` Peter Zijlstra
2023-09-21 11:48 ` Oleg Nesterov
2023-09-21 14:04 ` Peter Zijlstra
2023-09-21 14:31 ` Oleg Nesterov
2023-09-13 15:49 ` [PATCH 2/5] seqlock: change __seqprop() to return the function pointer Oleg Nesterov
2023-09-13 17:37 ` kernel test robot
2023-09-13 18:30 ` Oleg Nesterov
2023-09-13 17:59 ` kernel test robot
2023-09-13 19:23 ` kernel test robot
2023-09-13 15:50 ` [PATCH 3/5] seqlock: introduce seqprop_lock/unlock Oleg Nesterov
2023-09-15 18:25 ` Alexey Gladkov [this message]
2023-09-15 18:43 ` Oleg Nesterov
2023-09-13 15:50 ` [PATCH 4/5] seqlock: introduce read_seqcount_begin_or_lock() and friends Oleg Nesterov
2023-09-13 15:50 ` [PATCH 5/5] time,signal: turn signal_struct.stats_lock into seqcount_rwlock_t Oleg Nesterov
2023-09-23 12:37 ` Alexey Gladkov
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=ZQShm4QAeAtjR8EK@example.org \
--to=legion@kernel.org \
--cc=boqun.feng@gmail.com \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=tglx@linutronix.de \
--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 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.