On 2019-04-05 10:02:45 [+0100], Julien Grall wrote:raw_spinlock_t would not work here without disabling preemption. Otherwise you may end up to recurse on the lock and therefore deadlock. But then it raise the question of the usefulness of the lock here.
RT folks already saw this corruption because local_bh_disable() does not
preempt on RT. They are carrying a patch (see "arm64: fpsimd: use
preemp_disable in addition to local_bh_disable()") to disable preemption
along with local_bh_disable().
Alternatively, Julia suggested to introduce a per-cpu lock to protect the
state. I am thinking to defer this for a follow-up patch. The changes in
this patch should make it easier because we now have helper to mark the
critical section.
A per-CPU lock? It has to be a raw_spinlock_t because a normal
spin_lock() / local_lock() would allow scheduling and might be taken as
part of the context switch or soon after.