summaryrefslogtreecommitdiff
path: root/include/linux/rwlock_api_smp.h
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2022-01-27 12:54:16 -0800
committerJakub Kicinski <kuba@kernel.org>2022-01-27 12:54:16 -0800
commit72d044e4bfa6bd9096536e2e1c62aecfe1a525e4 (patch)
tree0e408f181f5c704ff43cd006f4643c339e04aff1 /include/linux/rwlock_api_smp.h
parente2cf07654efb0fd7bbcb475c6f74be7b5755a8fd (diff)
parent23a46422c56144939c091c76cf389aa863ce9c18 (diff)
downloadlinux-next-72d044e4bfa6bd9096536e2e1c62aecfe1a525e4.tar.gz
linux-next-72d044e4bfa6bd9096536e2e1c62aecfe1a525e4.zip
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
No conflicts. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/linux/rwlock_api_smp.h')
-rw-r--r--include/linux/rwlock_api_smp.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/rwlock_api_smp.h b/include/linux/rwlock_api_smp.h
index f1db6f17c4fb..dceb0a59b692 100644
--- a/include/linux/rwlock_api_smp.h
+++ b/include/linux/rwlock_api_smp.h
@@ -17,6 +17,7 @@
void __lockfunc _raw_read_lock(rwlock_t *lock) __acquires(lock);
void __lockfunc _raw_write_lock(rwlock_t *lock) __acquires(lock);
+void __lockfunc _raw_write_lock_nested(rwlock_t *lock, int subclass) __acquires(lock);
void __lockfunc _raw_read_lock_bh(rwlock_t *lock) __acquires(lock);
void __lockfunc _raw_write_lock_bh(rwlock_t *lock) __acquires(lock);
void __lockfunc _raw_read_lock_irq(rwlock_t *lock) __acquires(lock);
@@ -209,6 +210,13 @@ static inline void __raw_write_lock(rwlock_t *lock)
LOCK_CONTENDED(lock, do_raw_write_trylock, do_raw_write_lock);
}
+static inline void __raw_write_lock_nested(rwlock_t *lock, int subclass)
+{
+ preempt_disable();
+ rwlock_acquire(&lock->dep_map, subclass, 0, _RET_IP_);
+ LOCK_CONTENDED(lock, do_raw_write_trylock, do_raw_write_lock);
+}
+
#endif /* !CONFIG_GENERIC_LOCKBREAK || CONFIG_DEBUG_LOCK_ALLOC */
static inline void __raw_write_unlock(rwlock_t *lock)