Fwd: Re: [PATCH] gpu/drm/ttm: Use mutex_lock_killable() for shrinker functions.

Thomas Hellstrom thellstrom at vmware.com
Tue May 20 01:38:07 PDT 2014


Konrad,

This looks OK to me, but do you have a chance to take a look?

/Thomas



-------- Original Message --------
Return-Path: 	<dri-devel-bounces at lists.freedesktop.org>
X-Original-To: 	thomas at shipmail.org
Delivered-To: 	thomas at 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 at 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 at 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 at lists.freedesktop.org
Delivered-To: 	dri-devel at 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 at 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 at linux.ie>
X-X-Sender: 	airlied at skynet.skynet.ie
To: 	Tetsuo Handa <penguin-kernel at I-love.SAKURA.ne.jp>
Subject: 	Re: [PATCH] gpu/drm/ttm: Use mutex_lock_killable() for
shrinker functions.
In-Reply-To: 	<201405192339.JIJ04144.FHQFVFOtOSLJOM at I-love.SAKURA.ne.jp>
Message-ID: 	<alpine.DEB.2.00.1405200140010.20503 at skynet.skynet.ie>
References: 	<201405192339.JIJ04144.FHQFVFOtOSLJOM at I-love.SAKURA.ne.jp>
User-Agent: 	Alpine 2.00 (DEB 1167 2008-08-23)
MIME-Version: 	1.0
Cc: 	linux-kernel at vger.kernel.org, glommer at openvz.org, mgorman at suse.de,
DRI mailing list <dri-devel at lists.freedesktop.org>, dchinner at redhat.com
X-BeenThere: 	dri-devel at 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 at lists.freedesktop.org?subject=unsubscribe>
List-Archive: 	<http://lists.freedesktop.org/archives/dri-devel>
List-Post: 	<mailto:dri-devel at lists.freedesktop.org>
List-Help: 	<mailto:dri-devel-request at lists.freedesktop.org?subject=help>
List-Subscribe:
<http://lists.freedesktop.org/mailman/listinfo/dri-devel>,
<mailto:dri-devel-request at lists.freedesktop.org?subject=subscribe>
Content-Type: 	text/plain; charset="us-ascii"
Content-Transfer-Encoding: 	7bit
Errors-To: 	dri-devel-bounces at lists.freedesktop.org
Sender: 	"dri-devel" <dri-devel-bounces at 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 at 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 at 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))
> +		return SHRINK_STOP;
>  	pool_offset = pool_offset % _manager->npools;
>  	list_for_each_entry(p, &_manager->pools, pools) {
>  		unsigned nr_free;
> @@ -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))
> +		return 0;
>  	list_for_each_entry(p, &_manager->pools, pools)
>  		count += p->pool->npages_free;
>  	mutex_unlock(&_manager->lock);
> 
_______________________________________________
dri-devel mailing list
dri-devel at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list