• J
    x86, ticketlock: Convert spin loop to C · c576a3ea
    Jeremy Fitzhardinge 提交于
    The inner loop of __ticket_spin_lock isn't doing anything very special,
    so reimplement it in C.
    
    For the 8 bit ticket lock variant, we use a register union to get direct
    access to the lower and upper bytes in the tickets, but unfortunately gcc
    won't generate a direct comparison between the two halves of the register,
    so the generated asm isn't quite as pretty as the hand-coded version.
    However benchmarking shows that this is actually a small improvement in
    runtime performance on some benchmarks, and never a slowdown.
    
    We also need to make sure there's a barrier at the end of the lock loop
    to make sure that the compiler doesn't move any instructions from within
    the locked region into the region where we don't yet own the lock.
    Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Link: http://lkml.kernel.org/r/4E5BCC40.3030501@goop.orgSigned-off-by: NH. Peter Anvin <hpa@linux.intel.com>
    c576a3ea
spinlock.h 7.9 KB