Messages in this thread | | | From | "Ahmed S. Darwish" <> | Subject | [PATCH v2 0/5] seqlock: Introduce PREEMPT_RT support | Date | Fri, 4 Sep 2020 17:32:26 +0200 |
| |
Hi,
Changelog-v2 ============
- Standardize on seqcount_LOCKNAME_t as the canonical reference for sequence counters with associated locks, instead of v1 seqcount_LOCKTYPE_t.
- Use unique prefix "seqprop_*" for all seqcount_t/seqcount_LOCKNAME_t property accessors.
- Touch-up the lock-unlock rationale for more clarity. Enforce writer non-preemitiblity using "__seq_enforce_writer_non_preemptibility()".
Cover letter (v1) =================
https://lkml.kernel.org/r/20200828010710.5407-1-a.darwish@linutronix.de
Preemption must be disabled before entering a sequence counter write side critical section. Otherwise the read side section can preempt the write side section and spin for the entire scheduler tick. If that reader belongs to a real-time scheduling class, it can spin forever and the kernel will livelock.
Disabling preemption cannot be done for PREEMPT_RT though: it can lead to higher latencies, and the write side sections will not be able to acquire locks which become sleeping locks (e.g. spinlock_t).
To remain preemptible, while avoiding a possible livelock caused by the reader preempting the writer, use a different technique: let the reader detect if a seqcount_LOCKNAME_t writer is in progress. If that's the case, acquire then release the associated LOCKNAME writer serialization lock. This will allow any possibly-preempted writer to make progress until the end of its writer serialization lock critical section.
Implement this lock-unlock technique for all seqcount_LOCKNAME_t with an associated (PREEMPT_RT) sleeping lock, and for seqlock_t.
8<--------------
Ahmed S. Darwish (5): seqlock: seqcount_LOCKNAME_t: Standardize naming convention seqlock: Use unique prefix for seqcount_t property accessors seqlock: seqcount_t: Implement all read APIs as statement expressions seqlock: seqcount_LOCKNAME_t: Introduce PREEMPT_RT support seqlock: PREEMPT_RT: Do not starve seqlock_t writers
include/linux/seqlock.h | 281 ++++++++++++++++++++++++---------------- 1 file changed, 167 insertions(+), 114 deletions(-)
base-commit: f75aef392f869018f78cfedf3c320a6b3fcfda6b -- 2.28.0
| |