On 2019-04-10 21:39:34 [-0700], Eric Biggers wrote: > Well, from a quick read of the patch, it's probably because it uses > raw_cpu_ptr() instead of per_cpu_ptr() when allocating/freeing the buffers, so > they are unlikely to actually be allocated for all CPUs. memory is allocated in crypto_scomp_alloc_scratches() before the algorithm is first used for for_each_possible_cpu. So all CPUs should have it. > Also Sebastian, I don't understand the point of the spinlock. What was wrong > with get_cpu()? Note that taking the spinlock disables preemption too... Also > now it's possible to spin for a long time on the spinlock, for no reason really. The long spin is only possible PREEMPT kernel if the context switches the CPU between getting the pointer and acquiring the CPU. Should this really become a problem I could try to think of something. That spin_lock gives us lock annotation and a lock context. With preempt_disable() it is just a BKL like thing with no context. And this basically kills PREEMPT_RT. > - Eric Sebastian