Il 15/06/2014 14:47, Peter Zijlstra ha scritto:> > - for (;;) { > - new = (val & ~_Q_PENDING_MASK) | _Q_LOCKED_VAL; > - > - old = atomic_cmpxchg(&lock->val, val, new); > - if (old == val) > - break; > - > - val = old; > - } > + clear_pending_set_locked(lock, val); > return;Might as well add clear_pending_set_locked already in patch 3. Paolo
Peter Zijlstra
2014-Jul-07 14:35 UTC
[PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS
On Wed, Jun 18, 2014 at 01:39:52PM +0200, Paolo Bonzini wrote:> Il 15/06/2014 14:47, Peter Zijlstra ha scritto: > > > >- for (;;) { > >- new = (val & ~_Q_PENDING_MASK) | _Q_LOCKED_VAL; > >- > >- old = atomic_cmpxchg(&lock->val, val, new); > >- if (old == val) > >- break; > >- > >- val = old; > >- } > >+ clear_pending_set_locked(lock, val); > > return; > > > Might as well add clear_pending_set_locked already in patch 3.Patch 4, if anywhere. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: not available URL: <http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20140707/73d4e9c3/attachment.sig>
Il 07/07/2014 16:35, Peter Zijlstra ha scritto:> On Wed, Jun 18, 2014 at 01:39:52PM +0200, Paolo Bonzini wrote: >> Il 15/06/2014 14:47, Peter Zijlstra ha scritto: >>> >>> - for (;;) { >>> - new = (val & ~_Q_PENDING_MASK) | _Q_LOCKED_VAL; >>> - >>> - old = atomic_cmpxchg(&lock->val, val, new); >>> - if (old == val) >>> - break; >>> - >>> - val = old; >>> - } >>> + clear_pending_set_locked(lock, val); >>> return; >> >> >> Might as well add clear_pending_set_locked already in patch 3. > > Patch 4, if anywhere. >This code is added in patch 3: + /* + * take ownership and clear the pending bit. + * + * *,1,0 -> *,0,1 + */ + for (;;) { + new = (val & ~_Q_PENDING_MASK) | _Q_LOCKED_VAL; + + old = atomic_cmpxchg(&lock->val, val, new); + if (old == val) + break; + + val = old; + } + return; Unlike the change in patch 4, clear_pending_set_locked doesn't change how qspinlock moves from a state to the next. Paolo
Apparently Analagous Threads
- [PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS
- [PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS
- [PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS
- [PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS
- [PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS