diff options
author | Matthew Wilcox <mawilcox@microsoft.com> | 2018-04-10 19:36:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-04-11 13:28:39 -0400 |
commit | f6bb2a2c0b81c47282ddb7883f92e65a063c27dd (patch) | |
tree | 74eb6dece48af9baee664a3abe1d70b5798f8b0d /tools | |
parent | e5a955419642e0842fd26e1ada6ab3328018ca16 (diff) |
xarray: add the xa_lock to the radix_tree_root
This results in no change in structure size on 64-bit machines as it
fits in the padding between the gfp_t and the void *. 32-bit machines
will grow the structure from 8 to 12 bytes. Almost all radix trees are
protected with (at least) a spinlock, so as they are converted from
radix trees to xarrays, the data structures will shrink again.
Initialising the spinlock requires a name for the benefit of lockdep, so
RADIX_TREE_INIT() now needs to know the name of the radix tree it's
initialising, and so do IDR_INIT() and IDA_INIT().
Also add the xa_lock() and xa_unlock() family of wrappers to make it
easier to use the lock. If we could rely on -fplan9-extensions in the
compiler, we could avoid all of this syntactic sugar, but that wasn't
added until gcc 4.6.
Link: http://lkml.kernel.org/r/20180313132639.17387-8-willy@infradead.org
Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Cc: Darrick J. Wong <darrick.wong@oracle.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/include/linux/spinlock.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/tools/include/linux/spinlock.h b/tools/include/linux/spinlock.h index 4ed569fcb139..b21b586b9854 100644 --- a/tools/include/linux/spinlock.h +++ b/tools/include/linux/spinlock.h | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #define spinlock_t pthread_mutex_t | 8 | #define spinlock_t pthread_mutex_t |
9 | #define DEFINE_SPINLOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER; | 9 | #define DEFINE_SPINLOCK(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER; |
10 | #define __SPIN_LOCK_UNLOCKED(x) (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER | ||
10 | 11 | ||
11 | #define spin_lock_irqsave(x, f) (void)f, pthread_mutex_lock(x) | 12 | #define spin_lock_irqsave(x, f) (void)f, pthread_mutex_lock(x) |
12 | #define spin_unlock_irqrestore(x, f) (void)f, pthread_mutex_unlock(x) | 13 | #define spin_unlock_irqrestore(x, f) (void)f, pthread_mutex_unlock(x) |