Konrad, This looks OK to me, but do you have a chance to take a look? /Thomas -------- Original Message -------- Return-Path: <dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx> X-Original-To: thomas@xxxxxxxxxxxx Delivered-To: thomas@xxxxxxxxxxxx Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 7EB6A33807A for <thomas@xxxxxxxxxxxx>; 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@xxxxxxxxxxxx>; 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@xxxxxxxxxxxxxxxxxxxxx Delivered-To: dri-devel@xxxxxxxxxxxxxxxxxxxxx Received: from gir.skynet.ie (gir.skynet.ie [193.1.99.77]) by gabe.freedesktop.org (Postfix) with ESMTP id E6E276E104 for <dri-devel@xxxxxxxxxxxxxxxxxxxxx>; 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@xxxxxxxx> X-X-Sender: airlied@xxxxxxxxxxxxxxxx To: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx> Subject: Re: [PATCH] gpu/drm/ttm: Use mutex_lock_killable() for shrinker functions. In-Reply-To: <201405192339.JIJ04144.FHQFVFOtOSLJOM@xxxxxxxxxxxxxxxxxxx> Message-ID: <alpine.DEB.2.00.1405200140010.20503@xxxxxxxxxxxxxxxx> References: <201405192339.JIJ04144.FHQFVFOtOSLJOM@xxxxxxxxxxxxxxxxxxx> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 Cc: linux-kernel@xxxxxxxxxxxxxxx, glommer@xxxxxxxxxx, mgorman@xxxxxxx, DRI mailing list <dri-devel@xxxxxxxxxxxxxxxxxxxxx>, dchinner@xxxxxxxxxx X-BeenThere: dri-devel@xxxxxxxxxxxxxxxxxxxxx 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@xxxxxxxxxxxxxxxxxxxxx?subject=unsubscribe> List-Archive: <http://lists.freedesktop.org/archives/dri-devel> List-Post: <mailto:dri-devel@xxxxxxxxxxxxxxxxxxxxx> List-Help: <mailto:dri-devel-request@xxxxxxxxxxxxxxxxxxxxx?subject=help> List-Subscribe: <http://lists.freedesktop.org/mailman/listinfo/dri-devel>, <mailto:dri-devel-request@xxxxxxxxxxxxxxxxxxxxx?subject=subscribe> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx Sender: "dri-devel" <dri-devel-bounces@xxxxxxxxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxxx> > 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@xxxxxxxxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel