Re: [PATCH 05/11] qspinlock: Optimize for smaller NR_CPUS

From: Paolo Bonzini
Date: Mon Jul 07 2014 - 11:09:19 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/