• Michael Ellerman's avatar
    Merge branch 'topic/qspinlock' into next · 22db71bc
    Michael Ellerman authored
    Merge Nick's powerpc qspinlock implementation. From his cover letter:
    
    This replaces the generic queued spinlock code (like s390 does) with our
    own implementation.
    
    Generic PV qspinlock code is causing latency / starvation regressions on
    large systems that are resulting in hard lockups reported (mostly in
    pathoogical cases). The generic qspinlock code has a number of issues
    important for powerpc hardware and hypervisors that aren't easily solved
    without changing code that would impact other architectures. Follow
    s390's lead and implement our own for now.
    
    Issues for powerpc using generic qspinlocks:
      - The previous lock value should not be loaded with simple loads, and
        need not be passed around from previous loads or cmpxchg results,
        because powerpc uses ll/sc-style atomics which can perform more
        complex operations that do not require this. powerpc implementations
        tend to prefer loads use larx for improved coherency performance.
      - The queueing process should absolutely minimise the number of stores
        to the lock word to reduce exclusive coherency probes, important for
        large system scalability. The pending logic is counter productive
        here.
      - Non-atomic unlock for paravirt locks is important (atomic
        instructions tend to still be more expensive than x86 CPUs).
      - Yielding to the lock owner is important in the oversubscribed
        paravirt case, which requires storing the owner CPU in the lock
        word.
      - More control of lock stealing for the paravirt case is important to
        keep latency down on large systems.
      - The lock acquisition operation should always be made with a special
        variant of atomic instructions with the lock hint bit set,
        including (especially) in the queueing paths. This is more a matter
        of adding more arch lock helpers so not an insurmountable problem
        for generic code.
    22db71bc
Kconfig 39.3 KB