• J
    paravirt: introduce a "lock-byte" spinlock implementation · 8efcbab6
    Jeremy Fitzhardinge 提交于
    Implement a version of the old spinlock algorithm, in which everyone
    spins waiting for a lock byte.  In order to be compatible with the
    ticket-lock's use of a zero initializer, this uses the convention of
    '0' for unlocked and '1' for locked.
    
    This algorithm is much better than ticket locks in a virtual
    envionment, because it doesn't interact badly with the vcpu scheduler.
    If there are multiple vcpus spinning on a lock and the lock is
    released, the next vcpu to be scheduled will take the lock, rather
    than cycling around until the next ticketed vcpu gets it.
    
    To use this, you must call paravirt_use_bytelocks() very early, before
    any spinlocks have been taken.
    Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Christoph Lameter <clameter@linux-foundation.org>
    Cc: Petr Tesarik <ptesarik@suse.cz>
    Cc: Virtualization <virtualization@lists.linux-foundation.org>
    Cc: Xen devel <xen-devel@lists.xensource.com>
    Cc: Thomas Friebel <thomas.friebel@amd.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    8efcbab6
spinlock.h 8.9 KB