Commit 4d3894dd authored by Peng Zhang's avatar Peng Zhang Committed by Peng Zhang
Browse files

maple_tree: introduce {mtree,mas}_lock_nested()

mainline inclusion
from mainline-v6.8-rc1
commit b2472efe4316b2687c153919c1513a098bd82c17
category: performance
bugzilla: https://gitee.com/openeuler/kernel/issues/I9AYM3
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b2472efe4316b2687c153919c1513a098bd82c17

--------------------------------

In some cases, nested locks may be needed, so {mtree,mas}_lock_nested is
introduced.  For example, when duplicating maple tree, we need to hold the
locks of two trees, in which case nested locks are needed.

At the same time, add the definition of spin_lock_nested() in tools for
testing.

Link: https://lkml.kernel.org/r/20231027033845.90608-3-zhangpeng.00@bytedance.com


Signed-off-by: default avatarPeng Zhang <zhangpeng.00@bytedance.com>
Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Mateusz Guzik <mjguzik@gmail.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Mike Christie <michael.christie@oracle.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarZhangPeng <zhangpeng362@huawei.com>
parent 139482ee
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -256,6 +256,8 @@ struct maple_tree {
	struct maple_tree name = MTREE_INIT(name, 0)

#define mtree_lock(mt)		spin_lock((&(mt)->ma_lock))
#define mtree_lock_nested(mas, subclass) \
		spin_lock_nested((&(mt)->ma_lock), subclass)
#define mtree_unlock(mt)	spin_unlock((&(mt)->ma_lock))

/*
@@ -406,6 +408,8 @@ struct ma_wr_state {
};

#define mas_lock(mas)           spin_lock(&((mas)->tree->ma_lock))
#define mas_lock_nested(mas, subclass) \
		spin_lock_nested(&((mas)->tree->ma_lock), subclass)
#define mas_unlock(mas)         spin_unlock(&((mas)->tree->ma_lock))


+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#define spin_lock_init(x)	pthread_mutex_init(x, NULL)

#define spin_lock(x)			pthread_mutex_lock(x)
#define spin_lock_nested(x, subclass)	pthread_mutex_lock(x)
#define spin_unlock(x)			pthread_mutex_unlock(x)
#define spin_lock_bh(x)			pthread_mutex_lock(x)
#define spin_unlock_bh(x)		pthread_mutex_unlock(x)