• W
    locking/qrwlock: Better optimization for interrupt context readers · 0e06e5be
    Waiman Long 提交于
    The qrwlock is fair in the process context, but becoming unfair when
    in the interrupt context to support use cases like the tasklist_lock.
    
    The current code isn't that well-documented on what happens when
    in the interrupt context. The rspin_until_writer_unlock() will only
    spin if the writer has gotten the lock. If the writer is still in the
    waiting state, the increment in the reader count will cause the writer
    to remain in the waiting state and the new interrupt context reader
    will get the lock and return immediately. The current code, however,
    does an additional read of the lock value which is not necessary as
    the information has already been there in the fast path. This may
    sometime cause an additional cacheline transfer when the lock is
    highly contended.
    
    This patch passes the lock value information gotten in the fast path
    to the slow path to eliminate the additional read. It also documents
    the action for the interrupt context readers more clearly.
    Signed-off-by: NWaiman Long <Waiman.Long@hp.com>
    Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: NWill Deacon <will.deacon@arm.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Douglas Hatch <doug.hatch@hp.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Scott J Norton <scott.norton@hp.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1434729002-57724-3-git-send-email-Waiman.Long@hp.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
    0e06e5be
qrwlock.h 4.5 KB