From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>,
Juri Lelli <juri.lelli@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Will Deacon <will@kernel.org>, Waiman Long <longman@redhat.com>,
Boqun Feng <boqun.feng@gmail.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Davidlohr Bueso <dave@stgolabs.net>,
Mike Galbraith <efault@gmx.de>
Subject: [patch V3 00/64] locking, sched: The PREEMPT-RT locking infrastructure
Date: Thu, 05 Aug 2021 17:13:00 +0200 [thread overview]
Message-ID: <20210805151300.330412127@linutronix.de> (raw)
Folks,
the following series is an update to V2 which can be found here:
https://lore.kernel.org/r/20210713151054.700719949@linutronix.de
It contains the bulk of the PREEMPT-RT locking infrastructure. In
PREEMPT-RT enabled kernels the following locking primitives are substituted
by RT-Mutex based variants:
mutex, ww_mutex, rw_semaphore, spinlock, rwlock
semaphores are not substituted because they do not provide strict owner
semantics.
Of course raw_spinlocks are not touched either as they protect low level
operations in the scheduler, timers and hardware access.
The most interesting parts of the series which need a lot of eyeballs
are:
- the scheduler bits which provide the infrastructure for spinlock and
rwlock substitution to ensure that the task state is preserved when
blocking on such a lock and a regular wakeup is handled correctly and
not lost
- the rtmutex core implementation to handle lock contention on spinlocks
and rwlocks correctly vs. the task state
- the rw_semaphore/rwlock substitutions which utilize the same
implementation vs. the reader/writer handling
- The new rtmutex based ww_mutex implementation.
- the PI futex related bits to handle the interaction between blocking
on the underlying rtmutex and contention on the hash bucket lock which
is converted to a 'sleeping spinlock'.
The rest surely needs a thorough review as well, but those parts are pretty
straight forward: quite some code restructuring and the actual wrapper
functions to replace the existing !RT implementations.
The series survived internal testing in RT kernels and is part of the
upcoming v5.14-rc4-rt5 release.
For !RT kernels there is no functional change.
The series is also available from git:
git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git rtmutex
and fully integrated into the upcoming v5.14-rc4-rt5 release.
Changes vs. V2:
- Rework the task state change helpers (Waiman)
- Add lockdep asserts for paranoia sake (Peter)
- Revert the double wake_q implementation as it is broken
and go back to the V1 implementation of rt_wake_q_head (Mike)
- Fix the UNinterruptible copy & pasta fail in ww_mutex (Mike)
- Pick up the futex changes from Peter
- Remove duplicate defines (Waiman)
- Fold the spin wait changes into one patch and rewrite changelog (Peter)
- Fix typos all over the place (Daniel)
Thanks,
tglx
---
b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c | 4
b/include/linux/debug_locks.h | 3
b/include/linux/mutex.h | 93 +
b/include/linux/preempt.h | 4
b/include/linux/rbtree.h | 30
b/include/linux/rbtree_types.h | 34
b/include/linux/rtmutex.h | 55 -
b/include/linux/rwbase_rt.h | 38
b/include/linux/rwlock_rt.h | 140 ++
b/include/linux/rwlock_types.h | 39
b/include/linux/rwsem.h | 58 +
b/include/linux/sched.h | 119 +-
b/include/linux/sched/wake_q.h | 8
b/include/linux/spinlock.h | 15
b/include/linux/spinlock_api_smp.h | 3
b/include/linux/spinlock_rt.h | 151 ++
b/include/linux/spinlock_types.h | 83 -
b/include/linux/spinlock_types_raw.h | 65 +
b/include/linux/ww_mutex.h | 50
b/kernel/Kconfig.locks | 2
b/kernel/futex.c | 488 ++++++--
b/kernel/locking/Makefile | 3
b/kernel/locking/mutex-debug.c | 5
b/kernel/locking/mutex.c | 431 -------
b/kernel/locking/mutex.h | 33
b/kernel/locking/rtmutex.c | 1095 ++++++++------------
b/kernel/locking/rtmutex_api.c | 590 ++++++++++
b/kernel/locking/rtmutex_common.h | 122 +-
b/kernel/locking/rwbase_rt.c | 263 ++++
b/kernel/locking/rwsem.c | 109 +
b/kernel/locking/spinlock.c | 7
b/kernel/locking/spinlock_debug.c | 5
b/kernel/locking/spinlock_rt.c | 257 ++++
b/kernel/locking/ww_mutex.h | 569 ++++++++++
b/kernel/locking/ww_rt_mutex.c | 76 +
b/kernel/rcu/tree_plugin.h | 6
b/kernel/sched/core.c | 109 +
b/lib/Kconfig.debug | 11
b/lib/test_lockup.c | 8
kernel/locking/mutex-debug.h | 29
40 files changed, 3759 insertions(+), 1451 deletions(-)
next reply other threads:[~2021-08-05 15:41 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-05 15:13 Thomas Gleixner [this message]
2021-08-05 15:13 ` [patch V3 01/64] sched: Split out the wakeup state check Thomas Gleixner
2021-08-05 15:13 ` [patch V3 02/64] sched: Introduce TASK_RTLOCK_WAIT Thomas Gleixner
2021-08-05 15:13 ` [patch V3 03/64] sched: Reorganize current::__state helpers Thomas Gleixner
2021-08-05 15:13 ` [patch V3 04/64] sched: Prepare for RT sleeping spin/rwlocks Thomas Gleixner
2021-08-05 15:13 ` [patch V3 05/64] sched: Rework the __schedule() preempt argument Thomas Gleixner
2021-08-05 15:13 ` [patch V3 06/64] sched: Provide schedule point for RT locks Thomas Gleixner
2021-08-05 15:13 ` [patch V3 07/64] sched/wake_q: Provide WAKE_Q_HEAD_INITIALIZER Thomas Gleixner
2021-08-05 15:13 ` [patch V3 08/64] media/atomisp: Use lockdep instead of *mutex_is_locked() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 09/64] rtmutex: Remove rt_mutex_is_locked() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 10/64] rtmutex: Convert macros to inlines Thomas Gleixner
2021-08-05 15:13 ` [patch V3 11/64] rtmutex: Switch to try_cmpxchg() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 12/64] rtmutex: Split API and implementation Thomas Gleixner
2021-08-05 15:13 ` [patch V3 13/64] rtmutex: Split out the inner parts of struct rtmutex Thomas Gleixner
2021-08-05 15:13 ` [patch V3 14/64] locking/rtmutex: Provide rt_mutex_slowlock_locked() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 15/64] rtmutex: Provide rt_mutex_base_is_locked() Thomas Gleixner
2021-08-08 20:41 ` Davidlohr Bueso
2021-08-09 10:18 ` Thomas Gleixner
2021-08-05 15:13 ` [patch V3 16/64] locking: Add base code for RT rw_semaphore and rwlock Thomas Gleixner
2021-08-05 15:13 ` [patch V3 17/64] locking/rwsem: Add rtmutex based R/W semaphore implementation Thomas Gleixner
2021-08-05 15:13 ` [patch V3 18/64] locking/rtmutex: Add wake_state to rt_mutex_waiter Thomas Gleixner
2021-08-05 15:13 ` [patch V3 19/64] locking/rtmutex: Provide rt_wake_q and helpers Thomas Gleixner
2021-08-05 15:13 ` [patch V3 20/64] locking/rtmutex: Use rt_mutex_wake_q_head Thomas Gleixner
2021-08-05 15:13 ` [patch V3 21/64] locking/rtmutex: Prepare RT rt_mutex_wake_q for RT locks Thomas Gleixner
2021-08-05 15:13 ` [patch V3 22/64] locking/rtmutex: Guard regular sleeping locks specific functions Thomas Gleixner
2021-08-05 15:13 ` [patch V3 23/64] locking/spinlock: Split the lock types header Thomas Gleixner
2021-08-05 15:13 ` [patch V3 24/64] locking/rtmutex: Prevent future include recursion hell Thomas Gleixner
2021-08-05 15:13 ` [patch V3 25/64] locking/lockdep: Reduce includes in debug_locks.h Thomas Gleixner
2021-08-05 15:13 ` [patch V3 26/64] rbtree: Split out the rbtree type definitions Thomas Gleixner
2021-08-05 15:13 ` [patch V3 27/64] locking/rtmutex: Include only rbtree types Thomas Gleixner
2021-08-05 15:13 ` [patch V3 28/64] locking/spinlock: Provide RT specific spinlock type Thomas Gleixner
2021-08-05 15:13 ` [patch V3 29/64] locking/spinlock: Provide RT variant header Thomas Gleixner
2021-08-05 15:13 ` [patch V3 30/64] locking/rtmutex: Provide the spin/rwlock core lock function Thomas Gleixner
2021-08-05 15:13 ` [patch V3 31/64] locking/spinlock: Provide RT variant Thomas Gleixner
2021-08-05 15:13 ` [patch V3 32/64] locking/rwlock: " Thomas Gleixner
2021-08-05 15:13 ` [patch V3 33/64] locking/mutex: Consolidate core headers Thomas Gleixner
2021-08-05 15:13 ` [patch V3 34/64] locking/mutex: Move waiter to core header Thomas Gleixner
2021-08-05 15:13 ` [patch V3 35/64] locking/ww_mutex: Move ww_mutex declarations into ww_mutex.h Thomas Gleixner
2021-08-05 15:13 ` [patch V3 36/64] locking/mutex: Make mutex::wait_lock raw Thomas Gleixner
2021-08-05 15:13 ` [patch V3 37/64] locking/ww_mutex: Simplify lockdep annotation Thomas Gleixner
2021-08-05 15:13 ` [patch V3 38/64] locking/ww_mutex: Gather mutex_waiter initialization Thomas Gleixner
2021-08-05 15:13 ` [patch V3 39/64] locking/ww_mutex: Split up ww_mutex_unlock() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 40/64] locking/ww_mutex: Split W/W implementation logic Thomas Gleixner
2021-08-05 15:13 ` [patch V3 41/64] locking/ww_mutex: Remove __sched annotation Thomas Gleixner
2021-08-05 15:13 ` [patch V3 42/64] locking/ww_mutex: Abstract waiter iteration Thomas Gleixner
2021-08-05 15:13 ` [patch V3 43/64] locking/ww_mutex: Abstract waiter enqueueing Thomas Gleixner
2021-08-05 15:13 ` [patch V3 44/64] locking/ww_mutex: Abstract mutex accessors Thomas Gleixner
2021-08-05 15:13 ` [patch V3 45/64] locking/ww_mutex: Abstract mutex types Thomas Gleixner
2021-08-05 15:13 ` [patch V3 46/64] locking/ww_mutex: Abstract internal lock access Thomas Gleixner
2021-08-05 15:13 ` [patch V3 47/64] locking/ww_mutex: Implement rt_mutex accessors Thomas Gleixner
2021-08-05 15:13 ` [patch V3 48/64] locking/ww_mutex: Add RT priority to W/W order Thomas Gleixner
2021-08-06 10:48 ` Peter Zijlstra
2021-08-06 11:50 ` Thomas Gleixner
2021-08-05 15:13 ` [patch V3 49/64] locking/ww_mutex: Add rt_mutex based lock type and accessors Thomas Gleixner
2021-08-05 15:13 ` [patch V3 50/64] locking/rtmutex: Extend the rtmutex core to support ww_mutex Thomas Gleixner
2021-08-06 11:00 ` Peter Zijlstra
2021-08-06 11:19 ` Thomas Gleixner
2021-08-06 13:48 ` Peter Zijlstra
2021-08-07 20:07 ` Thomas Gleixner
2021-08-05 15:13 ` [patch V3 51/64] locking/ww_mutex: Implement rtmutex based ww_mutex API functions Thomas Gleixner
2021-08-05 15:13 ` [patch V3 52/64] locking/rtmutex: Add mutex variant for RT Thomas Gleixner
2021-08-05 15:13 ` [patch V3 53/64] lib/test_lockup: Adapt to changed variables Thomas Gleixner
2021-08-05 15:13 ` [patch V3 54/64] futex: Validate waiter correctly in futex_proxy_trylock_atomic() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 55/64] futex: Cleanup stale comments Thomas Gleixner
2021-08-05 15:13 ` [patch V3 56/64] futex: Correct the number of requeued waiters for PI Thomas Gleixner
2021-08-08 17:05 ` Davidlohr Bueso
2021-08-09 8:18 ` Thomas Gleixner
2021-08-09 10:52 ` Thomas Gleixner
2021-08-05 15:13 ` [patch V3 57/64] futex: Restructure futex_requeue() Thomas Gleixner
2021-08-05 15:13 ` [patch V3 58/64] futex: Clarify comment in futex_requeue() Thomas Gleixner
2021-08-08 18:43 ` Davidlohr Bueso
2021-08-09 8:18 ` Thomas Gleixner
2021-08-05 15:13 ` [patch V3 59/64] futex: Simplify handle_early_requeue_pi_wakeup() Thomas Gleixner
2021-08-05 15:14 ` [patch V3 60/64] futex: Prevent requeue_pi() lock nesting issue on RT Thomas Gleixner
2021-08-05 15:14 ` [patch V3 61/64] rtmutex: Prevent lockdep false positive with PI futexes Thomas Gleixner
2021-08-05 15:14 ` [patch V3 62/64] preempt: Adjust PREEMPT_LOCK_OFFSET for RT Thomas Gleixner
2021-08-05 15:14 ` [patch V3 63/64] locking/rtmutex: Implement equal priority lock stealing Thomas Gleixner
2021-08-05 15:14 ` [patch V3 64/64] locking/rtmutex: Add adaptive spinwait mechanism Thomas Gleixner
2021-08-09 20:28 ` Davidlohr Bueso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210805151300.330412127@linutronix.de \
--to=tglx@linutronix.de \
--cc=bigeasy@linutronix.de \
--cc=boqun.feng@gmail.com \
--cc=bristot@redhat.com \
--cc=dave@stgolabs.net \
--cc=efault@gmx.de \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).