All of lore.kernel.org
 help / color / mirror / Atom feed
From: Waiman Long <longman@redhat.com>
To: Kuniyuki Iwashima <kuniyu@amazon.co.jp>,
	"David S . Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Eric Dumazet <edumazet@google.com>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>,
	Martin KaFai Lau <kafai@fb.com>
Cc: Benjamin Herrenschmidt <benh@amazon.com>,
	Kuniyuki Iwashima <kuni1840@gmail.com>,
	bpf@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 bpf-next 03/13] Revert "locking/spinlocks: Remove the unused spin_lock_bh_nested() API"
Date: Mon, 7 Dec 2020 11:25:07 -0500	[thread overview]
Message-ID: <541e72f2-f836-1534-cd86-f3f0a13074a7@redhat.com> (raw)
In-Reply-To: <20201207132456.65472-4-kuniyu@amazon.co.jp>

On 12/7/20 8:24 AM, Kuniyuki Iwashima wrote:
> This reverts commit 607904c357c61adf20b8fd18af765e501d61a385 to use
> spin_lock_bh_nested() in the next commit.
>
> Link: https://lore.kernel.org/netdev/9d290a57-49e1-04cd-2487-262b0d7c5844@gmail.com/
> Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.co.jp>
> CC: Waiman Long <longman@redhat.com>

If there is a use case for spin_lock_bh_nested(), it is perfectly fine 
to add it back.

Acked-by: Waiman Long <longman@redhat.com>

> ---
>   include/linux/spinlock.h         | 8 ++++++++
>   include/linux/spinlock_api_smp.h | 2 ++
>   include/linux/spinlock_api_up.h  | 1 +
>   kernel/locking/spinlock.c        | 8 ++++++++
>   4 files changed, 19 insertions(+)
>
> diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h
> index 79897841a2cc..c020b375a071 100644
> --- a/include/linux/spinlock.h
> +++ b/include/linux/spinlock.h
> @@ -227,6 +227,8 @@ static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
>   #ifdef CONFIG_DEBUG_LOCK_ALLOC
>   # define raw_spin_lock_nested(lock, subclass) \
>   	_raw_spin_lock_nested(lock, subclass)
> +# define raw_spin_lock_bh_nested(lock, subclass) \
> +	_raw_spin_lock_bh_nested(lock, subclass)
>   
>   # define raw_spin_lock_nest_lock(lock, nest_lock)			\
>   	 do {								\
> @@ -242,6 +244,7 @@ static inline void do_raw_spin_unlock(raw_spinlock_t *lock) __releases(lock)
>   # define raw_spin_lock_nested(lock, subclass)		\
>   	_raw_spin_lock(((void)(subclass), (lock)))
>   # define raw_spin_lock_nest_lock(lock, nest_lock)	_raw_spin_lock(lock)
> +# define raw_spin_lock_bh_nested(lock, subclass)	_raw_spin_lock_bh(lock)
>   #endif
>   
>   #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
> @@ -369,6 +372,11 @@ do {								\
>   	raw_spin_lock_nested(spinlock_check(lock), subclass);	\
>   } while (0)
>   
> +#define spin_lock_bh_nested(lock, subclass)			\
> +do {								\
> +	raw_spin_lock_bh_nested(spinlock_check(lock), subclass);\
> +} while (0)
> +
>   #define spin_lock_nest_lock(lock, nest_lock)				\
>   do {									\
>   	raw_spin_lock_nest_lock(spinlock_check(lock), nest_lock);	\
> diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h
> index 19a9be9d97ee..d565fb6304f2 100644
> --- a/include/linux/spinlock_api_smp.h
> +++ b/include/linux/spinlock_api_smp.h
> @@ -22,6 +22,8 @@ int in_lock_functions(unsigned long addr);
>   void __lockfunc _raw_spin_lock(raw_spinlock_t *lock)		__acquires(lock);
>   void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass)
>   								__acquires(lock);
> +void __lockfunc _raw_spin_lock_bh_nested(raw_spinlock_t *lock, int subclass)
> +								__acquires(lock);
>   void __lockfunc
>   _raw_spin_lock_nest_lock(raw_spinlock_t *lock, struct lockdep_map *map)
>   								__acquires(lock);
> diff --git a/include/linux/spinlock_api_up.h b/include/linux/spinlock_api_up.h
> index d0d188861ad6..d3afef9d8dbe 100644
> --- a/include/linux/spinlock_api_up.h
> +++ b/include/linux/spinlock_api_up.h
> @@ -57,6 +57,7 @@
>   
>   #define _raw_spin_lock(lock)			__LOCK(lock)
>   #define _raw_spin_lock_nested(lock, subclass)	__LOCK(lock)
> +#define _raw_spin_lock_bh_nested(lock, subclass) __LOCK(lock)
>   #define _raw_read_lock(lock)			__LOCK(lock)
>   #define _raw_write_lock(lock)			__LOCK(lock)
>   #define _raw_spin_lock_bh(lock)			__LOCK_BH(lock)
> diff --git a/kernel/locking/spinlock.c b/kernel/locking/spinlock.c
> index 0ff08380f531..48e99ed1bdd8 100644
> --- a/kernel/locking/spinlock.c
> +++ b/kernel/locking/spinlock.c
> @@ -363,6 +363,14 @@ void __lockfunc _raw_spin_lock_nested(raw_spinlock_t *lock, int subclass)
>   }
>   EXPORT_SYMBOL(_raw_spin_lock_nested);
>   
> +void __lockfunc _raw_spin_lock_bh_nested(raw_spinlock_t *lock, int subclass)
> +{
> +	__local_bh_disable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET);
> +	spin_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
> +	LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
> +}
> +EXPORT_SYMBOL(_raw_spin_lock_bh_nested);
> +
>   unsigned long __lockfunc _raw_spin_lock_irqsave_nested(raw_spinlock_t *lock,
>   						   int subclass)
>   {



  reply	other threads:[~2020-12-07 16:27 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-07 13:24 [PATCH v2 bpf-next 00/13] Socket migration for SO_REUSEPORT Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 01/13] tcp: Allow TCP_CLOSE sockets to hold the reuseport group Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 02/13] bpf: Define migration types for SO_REUSEPORT Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 03/13] Revert "locking/spinlocks: Remove the unused spin_lock_bh_nested() API" Kuniyuki Iwashima
2020-12-07 16:25   ` Waiman Long [this message]
2020-12-07 13:24 ` [PATCH v2 bpf-next 04/13] tcp: Introduce inet_csk_reqsk_queue_migrate() Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 05/13] tcp: Set the new listener to migrated TFO requests Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 06/13] tcp: Migrate TCP_ESTABLISHED/TCP_SYN_RECV sockets in accept queues Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 07/13] tcp: Migrate TCP_NEW_SYN_RECV requests Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 08/13] bpf: Introduce two attach types for BPF_PROG_TYPE_SK_REUSEPORT Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 09/13] libbpf: Set expected_attach_type " Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 10/13] bpf: Add migration to sk_reuseport_(kern|md) Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 11/13] bpf: Support BPF_FUNC_get_socket_cookie() for BPF_PROG_TYPE_SK_REUSEPORT Kuniyuki Iwashima
2020-12-10  0:31   ` kernel test robot
2020-12-10  0:31     ` kernel test robot
2020-12-07 13:24 ` [PATCH v2 bpf-next 12/13] bpf: Call bpf_run_sk_reuseport() for socket migration Kuniyuki Iwashima
2020-12-07 13:24 ` [PATCH v2 bpf-next 13/13] bpf: Test BPF_SK_REUSEPORT_SELECT_OR_MIGRATE Kuniyuki Iwashima

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=541e72f2-f836-1534-cd86-f3f0a13074a7@redhat.com \
    --to=longman@redhat.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=benh@amazon.com \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kafai@fb.com \
    --cc=kuba@kernel.org \
    --cc=kuni1840@gmail.com \
    --cc=kuniyu@amazon.co.jp \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.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.