• Daniel Vetter's avatar
    mutex: Add w/w mutex slowpath debugging · 23010027
    Daniel Vetter authored
    Injects EDEADLK conditions at pseudo-random interval, with
    exponential backoff up to UINT_MAX (to ensure that every lock
    operation still completes in a reasonable time).
    
    This way we can test the wound slowpath even for ww mutex users
    where contention is never expected, and the ww deadlock
    avoidance algorithm is only needed for correctness against
    malicious userspace. An example would be protecting kernel
    modesetting properties, which thanks to single-threaded X isn't
    really expected to contend, ever.
    
    I've looked into using the CONFIG_FAULT_INJECTION
    infrastructure, but decided against it for two reasons:
    
    - EDEADLK handling is mandatory for ww mutex users and should
      never affect the outcome of a syscall. This is in contrast to -ENOMEM
      injection. So fine configurability isn't required.
    
    - The fault injection framework only allows to set a simple
      probability for failure. Now the probability that a ww mutex acquire
      stage with N locks will never complete (due to too many injected
      EDEADLK backoffs) is zero. But the expected number of ww_mutex_lock
      operations for the completely uncontended case would be O(exp(N)).
      The per-acuiqire ctx exponential backoff solution choosen here only
      results in O(log N) overhead due to injection and so O(log N * N)
      lock operations. This way we can fail with high probability (and so
      have good test coverage even for fancy backoff and lock acquisition
      paths) without running into patalogical cases.
    
    Note that EDEADLK will only ever be injected when we managed to
    acquire the lock. This prevents any behaviour changes for users
    which rely on the EALREADY semantics.
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
    Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: dri-devel@lists.freedesktop.org
    Cc: linaro-mm-sig@lists.linaro.org
    Cc: rostedt@goodmis.org
    Cc: daniel@ffwll.ch
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20130620113117.4001.21681.stgit@patserSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    23010027
mutex.c 24.5 KB