Hi
On Mon, 13 Apr 2026, Benjamin Marzinski wrote:
> + smp_mb__before_atomic();
> + atomic_inc(&ima->measure_idx);
> + wake_up_all(&ima->ima_wq);
There should be smp_mb__after_atomic() after atomic_inc() and before
wake_up_all(). Otherwise, the increment of atomic_inc could be moved
inside the wait queue spinlock in wake_up_all and executed after the wait
queue is checked for being empty.
Generally, the atomic variables and barriers are very hard to get right,
this is not performance-critical code that would justify the
complications, so I suggest to use a normal spinlock instead.
You can use something like:
spin_lock_irq(&ima->ima_wq.lock);
ima->measure_idx++;
wake_up_all_locked(&ima->ima_wq);
spin_unlock_irq(&ima->ima_wq.lock);
--- this would be obviously safe and easy to verify.
Mikulas