On 29/06/22 13:55, Petr Mladek wrote: > On Tue 2022-06-28 18:33:08, Valentin Schneider wrote: >> >> 8c5a1cf0ad3a ("kexec: use a mutex for locking rather than xchg()") was >> straightforward enough because it turned >> >> if (xchg(&lock, 1)) >> return -EBUSY; >> >> into >> >> if (!mutex_trylock(&lock)) >> return -EBUSY; >> >> Now, most of the kexec_mutex uses are trylocks, except for: >> - crash_get_memory_size() >> - crash_shrink_memory() >> >> I really don't want to go down the route of turning those into cmpxchg >> try-loops, would it be acceptable to make those use trylocks (i.e. return >> -EBUSY if the cmpxchg fails)? > > IMHO, -EBUSY is acceptable for both crash_get_memory_size() > and crash_shrink_memory(). They are used in the sysfs interface. > >> Otherwise, we keep the mutexes for functions like those which go nowhere >> near an NMI. > > If we go this way then I would hide the locking into some wrappers, > like crash_kexec_trylock()/unlock() that would do both mutex > and xchg. The xchg part might be hidden in a separate wrapper > __crash_kexec_trylock()/unlock() or > crash_kexec_atomic_trylock()/unlock(). > Makes sense, thanks. I've started playing with the trylock/-EBUSY approach, I'll toss it out if I don't end up hating it. > Best Regards, > Petr