Re: [PATCH 10/11] qspinlock: Paravirt support

From: Peter Zijlstra
Date: Mon Jul 07 2014 - 11:21:19 EST


On Wed, Jun 18, 2014 at 02:03:12PM +0200, Paolo Bonzini wrote:
> Il 17/06/2014 00:08, Waiman Long ha scritto:
> >>+void __pv_queue_unlock(struct qspinlock *lock)
> >>+{
> >>+ int val = atomic_read(&lock->val);
> >>+
> >>+ native_queue_unlock(lock);
> >>+
> >>+ if (val & _Q_LOCKED_SLOW)
> >>+ ___pv_kick_head(lock);
> >>+}
> >>+
> >
> >Again a race can happen here between the reading and writing of the lock
> >value. I can't think of a good way to do that without using cmpxchg.
>
> Could you just use xchg on the locked byte?

I'll have to, indeed. This is racy.

Attachment: pgpmMEHmSNW87.pgp
Description: PGP signature