• Tetsuo Handa's avatar
    drm/ttm: Use mutex_trylock() to avoid deadlock inside shrinker functions. · 22e71691
    Tetsuo Handa authored
    I can observe that RHEL7 environment stalls with 100% CPU usage when a
    certain type of memory pressure is given. While the shrinker functions
    are called by shrink_slab() before the OOM killer is triggered, the stall
    lasts for many minutes.
    
    One of reasons of this stall is that
    ttm_dma_pool_shrink_count()/ttm_dma_pool_shrink_scan() are called and
    are blocked at mutex_lock(&_manager->lock). GFP_KERNEL allocation with
    _manager->lock held causes someone (including kswapd) to deadlock when
    these functions are called due to memory pressure. This patch changes
    "mutex_lock();" to "if (!mutex_trylock()) return ...;" in order to
    avoid deadlock.
    Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: stable <stable@kernel.org> [3.3+]
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    22e71691
ttm_page_alloc_dma.c 30 KB