[PATCH v4 0/5] [PATCH v3 0/4] locking/rwsem: Add reader-owned state to the owner field

From: Waiman Long
Date: Tue May 17 2016 - 21:28:13 EST


v3->v4:
- Add a new patch 2 to use WRITE_ONCE() for all rwsem->owner stores
to prevent store tearing.

v2->v3:
- Make minor code changes as suggested by PeterZ & Peter Hurley.
- Add 2 minor patches (#2 & #3) to improve the rwsem code
- Add a 4th patch to streamline the rwsem_optimistic_spin() code.

v1->v2:
- Add rwsem_is_reader_owned() helper & rename rwsem_reader_owned()
to rwsem_set_reader_owned().
- Add more comments to clarify the purpose of some of the code
changes.

Patch 1 is the main patch of this series.

Patch 2 protects against store tearing of rwsem->owner field which
can cause problem when a reader tries to dereference it.

Patch 3 eliminates redundant wakeup caused by a reader waking itself.

Patch 4 improves the efficiency of the reader wakeup code.

Patch 5 streamlines the rwsem_optimistic_spin() to make it simpler.

Waiman Long (5):
locking/rwsem: Add reader-owned state to the owner field
locking/rwsem: Protect all writes to owner by WRITE_ONCE()
locking/rwsem: Don't wake up one's own task
locking/rwsem: Improve reader wakeup code
locking/rwsem: Streamline the rwsem_optimistic_spin() code

kernel/locking/rwsem-xadd.c | 75 ++++++++++++++++++++++++------------------
kernel/locking/rwsem.c | 8 +++-
kernel/locking/rwsem.h | 52 ++++++++++++++++++++++++++++-
3 files changed, 99 insertions(+), 36 deletions(-)