]> git.baikalelectronics.ru Git - kernel.git/commit
u64_stats: Disable preemption on 32bit UP+SMP PREEMPT_RT during updates.
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Fri, 10 Dec 2021 20:29:59 +0000 (21:29 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Dec 2021 12:42:08 +0000 (12:42 +0000)
commitaa8333297041dd7d7742d8d3236292482c1fc4f7
tree76e62351ce3aea4b3e7d86ba7eaf2721019b1243
parent7b0dd17ea9df088ae2db34bb40ef87b5475f1cde
u64_stats: Disable preemption on 32bit UP+SMP PREEMPT_RT during updates.

On PREEMPT_RT the seqcount_t for synchronisation is required on 32bit
architectures even on UP because the softirq (and the threaded IRQ handler) can
be preempted.

With the seqcount_t for synchronisation, a reader with higher priority can
preempt the writer and then spin endlessly in read_seqcount_begin() while the
writer can't make progress.

To avoid such a lock up on PREEMPT_RT the writer must disable preemption during
the update. There is no need to disable interrupts because no writer is using
this API in hard-IRQ context on PREEMPT_RT.

Disable preemption on 32bit-RT within the u64_stats write section.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/u64_stats_sync.h