Messages in this thread | | | From | Davidlohr Bueso <> | Subject | [PATCH v3 -tip 0/6] locking: Introduce range reader/writer lock | Date | Mon, 15 May 2017 02:07:19 -0700 |
| |
Changes from v2 (https://lwn.net/Articles/719182/): - Renamed to range_lock - Added lockdep support with rwsem semantics - Fix range_lock_set_reader() being overwritten - Improved documentation wrt ordering and fairness as well as overall description (less implementation details).
Changes from v1 (https://lwn.net/Articles/716383/), all in patch 2: - s/EXPORT_SYMBOL/EXPORT_SYMBOL_GPL - Made the tree walks a foreach loop, instead of while. - Fixed signal_pending() lockup issue for unaccounted waiters. - Fixed initialization macros. - Check condition before signal_pending in loop. - Make building the interval-tree unconditionally a separate patch. - More/better documentation. - Added jack's reviewed-by. - Renamed inf to full.
Hi,
Here's a very tardy proposal for enhancements to Jan's original[1] range lock using interval trees. Because at some point it would be awesome to switch mmap_sem from rwsem to range rwlock, I've focused on making it sharable and performance enhancements reducing the performance delta between this and conventional locks as much as possible -- details in patch 2.
The rest of the patches adds support for testing the new lock and actually makes use of it for lustre. It has passed quite a bit of artificial pounding and I believe/hope it is in shape to consider.
Applies on top of tip v4.12-rc1
[1] https://lkml.org/lkml/2013/1/31/483
Thanks!
Davidlohr Bueso (6): interval-tree: Build unconditionally locking: Introduce range reader/writer lock locking/locktorture: Fix rwsem reader_delay locking/locktorture: Fix num reader/writer corner cases locking/locktorture: Support range rwlocks staging/lustre: Use generic range rwlock
drivers/gpu/drm/Kconfig | 2 - drivers/gpu/drm/i915/Kconfig | 1 - drivers/staging/lustre/lustre/llite/Makefile | 2 +- drivers/staging/lustre/lustre/llite/file.c | 16 +- .../staging/lustre/lustre/llite/llite_internal.h | 2 +- drivers/staging/lustre/lustre/llite/range_lock.c | 239 ------- drivers/staging/lustre/lustre/llite/range_lock.h | 82 --- include/linux/lockdep.h | 33 + include/linux/range_lock.h | 181 ++++++ kernel/locking/Makefile | 2 +- kernel/locking/locktorture.c | 299 ++++++--- kernel/locking/range_lock.c | 690 +++++++++++++++++++++ lib/Kconfig | 14 - lib/Kconfig.debug | 1 - lib/Makefile | 3 +- 15 files changed, 1133 insertions(+), 434 deletions(-) delete mode 100644 drivers/staging/lustre/lustre/llite/range_lock.c delete mode 100644 drivers/staging/lustre/lustre/llite/range_lock.h create mode 100644 include/linux/range_lock.h create mode 100644 kernel/locking/range_lock.c
-- 2.12.0
| |