On 25.02.2022 09:36, Juergen Gross wrote: > On 24.02.22 17:11, Jan Beulich wrote: >> On 24.02.2022 11:54, Juergen Gross wrote: >>> --- a/xen/arch/x86/mm/mm-locks.h >>> +++ b/xen/arch/x86/mm/mm-locks.h >>> @@ -42,7 +42,7 @@ static inline void mm_lock_init(mm_lock_t *l) >>> >>> static inline bool mm_locked_by_me(const mm_lock_t *l) >>> { >>> - return (l->lock.recurse_cpu == current->processor); >>> + return (l->lock.data.cpu == current->processor); >>> } >> >> I see a fair risk with this: Behavior will now differ between debug and >> non-debug builds. E.g. a livelock because of trying to acquire the same >> lock again would not be noticed in a debug build if the acquire is >> conditional upon this function's return value. I think this is the main >> reason behind having two separate field, despite the apparent redundancy. > > You are aware that mm_locked_by_me() is used for recursive spinlocks > only?
I will admit that it occurred to me only a while after writing the earlier reply that it's used only with recursive locking, due to _mm_lock() indeed using spin_lock_recursive() unconditionally (i.e. independent of its "rec" parameter). Nevertheless I continue to have the vague recollection that the duplication of the two fields was intentional and deemed necessary. Jan