| From | "Ahmed S. Darwish" <> | Subject | [PATCH v1 0/5] seqlock: Introduce PREEMPT_RT support | Date | Fri, 28 Aug 2020 03:07:05 +0200 |
| |
Hi,
Preemption must be disabled before entering a sequence counter write side critical section. Failing to do so, 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. 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 solve this dilemma, do not disable preemption for seqcount_LOCKTYPE_t writers. Rather, detect if a seqcount_LOCKTYPE_t writer is in progress. If that is the case, acquire then release the associated LOCKTYPE writer serialization lock. This will allow any preempted writer to make progress until the end of its writer serialization lock critical section.
Implement this technique for all of PREEMPT_RT sleeping locks.
Thanks,
8<--------------
Ahmed S. Darwish (5): seqlock: seqcount_LOCKTYPE_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_LOCKTYPE_t: Introduce PREEMPT_RT support seqlock: PREEMPT_RT: Do not starve seqlock_t writers
include/linux/seqlock.h | 277 ++++++++++++++++++++++++---------------- 1 file changed, 167 insertions(+), 110 deletions(-)
base-commit: d012a7190fc1fd72ed48911e77ca97ba4521bccd -- 2.28.0
|