> On 9 Jun 2015, at 15:55, Alex Bennée <alex.ben...@linaro.org> wrote: > > > Alex Bennée <alex.ben...@linaro.org> writes: > >> fred.kon...@greensocs.com writes: >> >>> From: KONRAD Frederic <fred.kon...@greensocs.com> >>> >>> This mechanism replaces the existing load/store exclusive mechanism which >>> seems >>> to be broken for multithread. >>> It follows the intention of the existing mechanism and stores the target >>> address >>> and data values during a load operation and checks that they remain >>> unchanged >>> before a store. >>> >>> In common with the older approach, this provides weaker semantics than >>> required >>> in that it could be that a different processor writes the same value as a >>> non-exclusive write, however in practise this seems to be irrelevant. >> > <snip> >>> >>> +/* Protect cpu_exclusive_* variable .*/ >>> +__thread bool cpu_have_exclusive_lock; >>> +QemuMutex cpu_exclusive_lock; >>> + >>> +inline void arm_exclusive_lock(void) >>> +{ >>> + if (!cpu_have_exclusive_lock) { >>> + qemu_mutex_lock(&cpu_exclusive_lock); >>> + cpu_have_exclusive_lock = true; >>> + } >>> +} >>> + >>> +inline void arm_exclusive_unlock(void) >>> +{ >>> + if (cpu_have_exclusive_lock) { >>> + cpu_have_exclusive_lock = false; >>> + qemu_mutex_unlock(&cpu_exclusive_lock); >>> + } >>> +} >> >> I don't quite follow. If these locks are mean to be protecting access to >> variables then how do they do that? The lock won't block if another >> thread is currently messing with the protected values. > > Having re-read after coffee I'm still wondering why we need the > per-thread bool? All the lock/unlock pairs are for critical sections so > don't we just want to serialise on the qemu_mutex_lock(), what do the > flags add apart from allowing you to next locks that shouldn't happen? > >
you mean the “cpu_have_exclusive_lock” bools? Cheers Mark. > -- > Alex Bennée +44 (0)20 7100 3485 x 210 +33 (0)5 33 52 01 77x 210 +33 (0)603762104 mark.burton