[RFC][PATCH 00/13] percpu rwsem -v2

From: Peter Zijlstra
Date: Mon Jun 22 2015 - 08:25:06 EST


This is a derived work of the cpu hotplug lock rework I did in 2013 which never
really went anywhere because Linus didn't like it.

This applies those same optimizations to the percpu-rwsem. Seeing how we did
all the work it seemed a waste to not use it at all. Linus still didn't like it
because there was only a single user, there are two now:

- uprobes
- cgroups

This series converts the cpu hotplug lock into a percpu-rwsem to provide a 3rd
user.

Also, since Linus thinks lglocks is a failed locking primitive (which I whole
heartedly agree with, its preempt-disable latencies are an abomination), it
also converts the global part of fs/locks's usage of lglock over to a
percpu-rwsem and uses a per-cpu spinlock for the local part. This both provides
another (4th) percpu-rwsem users and removes an lglock user.

It further removes the stop_machine lglock usage, and with it kills lglocks.

Changes since -v1:

- Added the missing smp_load_acquire()/smp_store_release() as spotted by Oleg
- Added percpu_down_read_trylock()
- Convert cpu hotplug lock
- Convert fs/locks
- Removes lglock from stop_machine
- Removes lglock

---
Documentation/locking/lglock.txt | 166 -------------------------
fs/Kconfig | 1 +
fs/file_table.c | 1 -
fs/locks.c | 65 +++++++---
include/linux/cpu.h | 6 +
include/linux/lglock.h | 81 -------------
include/linux/percpu-rwsem.h | 96 +++++++++++++--
include/linux/sched.h | 9 +-
init/main.c | 1 +
kernel/cpu.c | 130 ++++++--------------
kernel/fork.c | 2 +
kernel/locking/Makefile | 1 -
kernel/locking/lglock.c | 111 -----------------
kernel/locking/percpu-rwsem.c | 255 +++++++++++++++++++++------------------
kernel/rcu/Makefile | 2 +-
kernel/stop_machine.c | 52 ++++----
lib/Kconfig | 10 ++
17 files changed, 371 insertions(+), 618 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at http://www.tux.org/lkml/