[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v10 06/19] qspinlock: prolong the stay in the pending bit path
On Fri, May 09, 2014 at 08:58:47PM -0400, Waiman Long wrote: > On 05/08/2014 02:58 PM, Peter Zijlstra wrote: > >On Wed, May 07, 2014 at 11:01:34AM -0400, Waiman Long wrote: > >>@@ -221,11 +222,37 @@ static inline int trylock_pending(struct qspinlock > >>*lock, u32 *pval) > >> */ > >> for (;;) { > >> /* > >>- * If we observe any contention; queue. > >>+ * If we observe that the queue is not empty, > >>+ * return and be queued. > >> */ > >>- if (val& ~_Q_LOCKED_MASK) > >>+ if (val& _Q_TAIL_MASK) > >> return 0; > >> > >>+ if (val == (_Q_LOCKED_VAL|_Q_PENDING_VAL)) { > >>+ /* > >>+ * If both the lock and pending bits are set, we wait > >>+ * a while to see if that either bit will be cleared. > >>+ * If that is no change, we return and be queued. > >>+ */ > >>+ if (!retry) > >>+ return 0; > >>+ retry--; > >>+ cpu_relax(); > >>+ cpu_relax(); > >>+ *pval = val = atomic_read(&lock->val); > >>+ continue; > >>+ } else if (val == _Q_PENDING_VAL) { > >>+ /* > >>+ * Pending bit is set, but not the lock bit. > >>+ * Assuming that the pending bit holder is going to > >>+ * set the lock bit and clear the pending bit soon, > >>+ * it is better to wait than to exit at this point. > >>+ */ > >>+ cpu_relax(); > >>+ *pval = val = atomic_read(&lock->val); > >>+ continue; > >>+ } > >Didn't I give a much saner alternative to this mess last time? > > I don't recall you have any suggestion last time. Anyway, if you think the > code is too messy, I think I can give up the first if statement which is > more an optimistic spinning kind of code for short critical section. The 2nd > if statement is still need to improve chance of using this code path due to > timing reason. I will rerun my performance test to make sure it won't have > too much performance impact. lkml.kernel.org/r/20140417163640.GT11096@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Attachment:
pgp3UZTAszVzo.pgp _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |