Konrad,
This looks OK to me, but do you have a chance to take a look?
/Thomas
-------- Original Message -------- Return-Path: dri-devel-bounces@lists.freedesktop.org X-Original-To: thomas@shipmail.org Delivered-To: thomas@shipmail.org Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 7EB6A33807A for thomas@shipmail.org; Tue, 20 May 2014 02:40:25 +0200 (CEST) Received: from lin0.kontor.shipmail.org [127.0.0.1] by BitDefender SMTP Proxy on lin0.kontor.shipmail.org [127.0.0.1] for lin0.kontor.shipmail.org [127.0.0.1]; Tue, 20 May 2014 02:40:25 +0200 (CEST) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.shipmail.org (Postfix) with ESMTP id 1D7B0338079 for thomas@shipmail.org; Tue, 20 May 2014 02:40:25 +0200 (CEST) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B14C16E104; Mon, 19 May 2014 17:40:25 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from gir.skynet.ie (gir.skynet.ie [193.1.99.77]) by gabe.freedesktop.org (Postfix) with ESMTP id E6E276E104 for dri-devel@lists.freedesktop.org; Mon, 19 May 2014 17:40:23 -0700 (PDT) Received: from skynet.skynet.ie (skynet.skynet.ie [193.1.99.74]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by gir.skynet.ie (Postfix) with ESMTPS id C819612529; Tue, 20 May 2014 01:40:21 +0100 (IST) Date: Tue, 20 May 2014 01:40:21 +0100 (IST) From: Dave Airlie airlied@linux.ie X-X-Sender: airlied@skynet.skynet.ie To: Tetsuo Handa penguin-kernel@I-love.SAKURA.ne.jp Subject: Re: [PATCH] gpu/drm/ttm: Use mutex_lock_killable() for shrinker functions. In-Reply-To: 201405192339.JIJ04144.FHQFVFOtOSLJOM@I-love.SAKURA.ne.jp Message-ID: alpine.DEB.2.00.1405200140010.20503@skynet.skynet.ie References: 201405192339.JIJ04144.FHQFVFOtOSLJOM@I-love.SAKURA.ne.jp User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 Cc: linux-kernel@vger.kernel.org, glommer@openvz.org, mgorman@suse.de, DRI mailing list dri-devel@lists.freedesktop.org, dchinner@redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Direct Rendering Infrastructure - Development <dri-devel.lists.freedesktop.org> List-Unsubscribe: http://lists.freedesktop.org/mailman/options/dri-devel, mailto:dri-devel-request@lists.freedesktop.org?subject=unsubscribe List-Archive: http://lists.freedesktop.org/archives/dri-devel List-Post: mailto:dri-devel@lists.freedesktop.org List-Help: mailto:dri-devel-request@lists.freedesktop.org?subject=help List-Subscribe: http://lists.freedesktop.org/mailman/listinfo/dri-devel, mailto:dri-devel-request@lists.freedesktop.org?subject=subscribe Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" dri-devel-bounces@lists.freedesktop.org X-BitDefender-Scanner: Mail not scanned due to license constraints
cc'ing dri-devel.
From e314a1a1583e585d062dfc30c8aad8bf5380510b Mon Sep 17 00:00:00 2001
From: Tetsuo Handa penguin-kernel@I-love.SAKURA.ne.jp Date: Mon, 19 May 2014 18:43:21 +0900 Subject: [PATCH] gpu/drm/ttm: Use mutex_lock_killable() for shrinker functions.
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.
I added debug printk() and observed that many threads are blocked for more than 10 seconds at ttm_dma_pool_shrink_count()/ttm_dma_pool_shrink_scan() functions. Since the kswapd can call these functions later, the current thread can return from these functions as soon as chosen by the OOM killer.
This patch changes "mutex_lock();" to "if (mutex_lock_killable()) return ...;" so that any threads can promptly give up. (By the way, as far as I tested, changing to "if (!mutex_trylock()) return ...;" likely shortens the duration of stall. Maybe we don't need to wait for mutex if someone is already calling these functions.)
Signed-off-by: Tetsuo Handa penguin-kernel@I-love.SAKURA.ne.jp
drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c index 1b79bf0..f75dab8 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c @@ -1012,7 +1012,8 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) if (list_empty(&_manager->pools)) return SHRINK_STOP;
- mutex_lock(&_manager->lock);
- if (mutex_lock_killable(&_manager->lock))
pool_offset = pool_offset % _manager->npools; list_for_each_entry(p, &_manager->pools, pools) { unsigned nr_free;return SHRINK_STOP;
@@ -1043,7 +1044,8 @@ ttm_dma_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc) struct device_pools *p; unsigned long count = 0;
- mutex_lock(&_manager->lock);
- if (mutex_lock_killable(&_manager->lock))
list_for_each_entry(p, &_manager->pools, pools) count += p->pool->npages_free; mutex_unlock(&_manager->lock);return 0;
_______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel