| Date | Wed, 18 Jun 2014 14:04:28 +0200 | From | Paolo Bonzini <> | Subject | Re: [PATCH 10/11] qspinlock: Paravirt support |
| |
Il 15/06/2014 14:47, Peter Zijlstra ha scritto: > > > #if !defined(CONFIG_X86_OOSTORE) && !defined(CONFIG_X86_PPRO_FENCE) > > -#define queue_spin_unlock queue_spin_unlock > /** > * queue_spin_unlock - release a queue spinlock > * @lock : Pointer to queue spinlock structure > * > * An effective smp_store_release() on the least-significant byte. > */ > -static inline void queue_spin_unlock(struct qspinlock *lock) > +static inline void native_queue_unlock(struct qspinlock *lock) > { > barrier(); > ACCESS_ONCE(*(u8 *)lock) = 0; > } > > +#else > + > +static inline void native_queue_unlock(struct qspinlock *lock) > +{ > + atomic_dec(&lock->val); > +} > + > #endif /* !CONFIG_X86_OOSTORE && !CONFIG_X86_PPRO_FENCE */
Should be (part of) an earlier patch? Also, does it get wrong if (CONFIG_X86_OOSTORE || CONFIG_X86_PPRO_FENCE) && paravirt patches the unlock to a single movb? Of course the paravirt spinlocks could simply depend on !CONFIG_X86_OOSTORE && !CONFIG_X86_PPRO_FENCE.
> + > +#define INVALID_HEAD -1 > +#define NO_HEAD nr_cpu_ids > +
-2, like Waiman said.
Paolo
|