From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DDA6EE49B0 for ; Wed, 23 Aug 2023 02:59:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 527E4280012; Tue, 22 Aug 2023 22:59:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4FE59940007; Tue, 22 Aug 2023 22:59:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3C688280012; Tue, 22 Aug 2023 22:59:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 2BACB940007 for ; Tue, 22 Aug 2023 22:59:54 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 05CCBB1EC6 for ; Wed, 23 Aug 2023 02:59:54 +0000 (UTC) X-FDA: 81153864708.03.8DA6765 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) by imf24.hostedemail.com (Postfix) with ESMTP id F317918001E for ; Wed, 23 Aug 2023 02:59:49 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="RzbIwpF/"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf24.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692759592; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=bhgEqLuvf9ApSnTvUwn1L76c2o2W1Ei/QD6yE6yt7Vo=; b=LUhBHjB4qaaOyKxNmx+jEB2P5M5eRv8HllazqjPeWKjNaA9nTWXBTXCrJBj0ZQ5k0qEKKD CZCfl61No/NMjXhHNgaykxqYZJH7UaxiAoeqykfG6AnUSpRGgv8VDukE4NEpHbf0NPksMh gF9JFk4nveaOV7ro8P7YQhIhMStYFD8= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b="RzbIwpF/"; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf24.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.180 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692759592; a=rsa-sha256; cv=none; b=3+Kts3mQPkaY4bgweTY29i3oRBCnXf21PnuMhn9S+ucPIMaGmRe9B6sdYduWSTeUS5MkQo uRLg0to1KcmlXTeWhP++hGOApHtoqe9abGCr4isvAteTGREs3vGIbYgfWJK58JjliEOxgO qIFYRYP051QQ7yMza3uITj4PzHfu0eo= Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-1befe39630bso9174925ad.0 for ; Tue, 22 Aug 2023 19:59:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1692759588; x=1693364388; h=content-transfer-encoding:in-reply-to:cc:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=bhgEqLuvf9ApSnTvUwn1L76c2o2W1Ei/QD6yE6yt7Vo=; b=RzbIwpF/0rWWCHIbil/kmvbYsiH+zzV8cteo0NeX4iqS5Th3aMObOrBBZ5QIYYiYNO EzLvxXnwaU3C6HJ66DVx0SYeH6DBUUXE/parOT0tZRTGaLZHY6BYCVv0BWvKsae2+Z4V HEkSBtQA++hJt6hjIX8coUzQJXYdSMU0EhPZnC3wJk9rsU5aMcdQM2J2gdrxRnnAl7ZG 8NIlks8SUC7HZyd+TSNVs6GUNYerNVLSzTLDuAq02G7Vh6n7NQtQV5W2S/tTxnIxqdnK Yk0AUrfOj+V8sxulrYV9L4sfBNDgKCkzUecP9KTfiIS3EGmzpdtRXoZ4mpHHvApm3vtv 04iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692759588; x=1693364388; h=content-transfer-encoding:in-reply-to:cc:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bhgEqLuvf9ApSnTvUwn1L76c2o2W1Ei/QD6yE6yt7Vo=; b=h1cYJt6BtsiOorPKor0bc0TMB02tCIhsLKJpLIkmenVX0oU6ELxJ8YQHz2J6fiKq2t WABKbps2HmCf/WfKvi5rMZeNu/t78Cse8zTm+SgwfTPjubsu7fhcMXjQKAXiYNuuEYfJ Mi2wySBtVoSO+0Rp9YcbIVVRGrVLCzi/Gs6IBS9lP/2jmIsG9UEakqnlNlzGsgwKzNhu yOIu9t4NQAmGmUkTB/RppCiGSZOqCTTCrX2/5zdpaqrAykBajB7Y9KbCePV+9UVFJ7VX sz9aWlvuAJz6tM0cwHY3iw8vZvKIBlJ1Du53LapOTCvRgxwYTCk7n4+1yEzU2KSwRGfv I0Xw== X-Gm-Message-State: AOJu0Yyex5c6hjpM/w4t/jELY7ejvtQWb37nST9o/pie4Cq27toy5H9Y Cy/OIr/VsMYdJdrJyWSg3KOvYA== X-Google-Smtp-Source: AGHT+IEfrTZGJtg+pRH2EfLUkWhGiT4SJbELosEEcEbXeeoUMWHqtsVXqJsCto+j1ri8qfTaL4v/sQ== X-Received: by 2002:a17:90a:2f41:b0:26d:4ade:fcf0 with SMTP id s59-20020a17090a2f4100b0026d4adefcf0mr10521410pjd.4.1692759588304; Tue, 22 Aug 2023 19:59:48 -0700 (PDT) Received: from ?IPV6:fdbd:ff1:ce00:1c25:884:3ed:e1db:b610? ([2408:8000:b001:1:1f:58ff:f102:103]) by smtp.gmail.com with ESMTPSA id z2-20020a17090a1fc200b00262ca945cecsm11045048pjz.54.2023.08.22.19.59.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 22 Aug 2023 19:59:47 -0700 (PDT) Message-ID: <63dc1d86-2a15-6b7e-f63a-63fccb25eae2@bytedance.com> Date: Wed, 23 Aug 2023 10:59:34 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Subject: Re: [PATCH v4 43/48] drm/ttm: introduce pool_shrink_rwsem Content-Language: en-US To: daniel@ffwll.ch References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> <20230807110936.21819-44-zhengqi.arch@bytedance.com> From: Qi Zheng Cc: akpm@linux-foundation.org, david@fromorbit.com, tkhai@ya.ru, vbabka@suse.cz, roman.gushchin@linux.dev, djwong@kernel.org, brauner@kernel.org, paulmck@kernel.org, tytso@mit.edu, steven.price@arm.com, cel@kernel.org, senozhatsky@chromium.org, yujie.liu@intel.com, gregkh@linuxfoundation.org, muchun.song@linux.dev, simon.horman@corigine.com, dlemoal@kernel.org, kvm@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, dm-devel@redhat.com, linux-mtd@lists.infradead.org, x86@kernel.org, cluster-devel@redhat.com, xen-devel@lists.xenproject.org, linux-ext4@vger.kernel.org, linux-arm-msm@vger.kernel.org, rcu@vger.kernel.org, linux-bcache@vger.kernel.org, Muchun Song , linux-raid@vger.kernel.org, linux-nfs@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-erofs@lists.ozlabs.org, linux-btrfs@vger.kernel.org, daniel.vetter@ffwll.ch In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: F317918001E X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: gnaa9z7ydowoafwr8atcosyoc4uchd1f X-HE-Tag: 1692759589-719064 X-HE-Meta: U2FsdGVkX19pcePIrtdiDD066akSKMXbtOZ41BxY40Nd68nvDF4/pTG0Ziw7xbYlwMoOPEFLd8Mluck8Cj7M4My8vK49un+WRDQ1D+sBQ+Kbh83XKQvTDzTl5p/KN+eRXYSk5IqJFFwICyQLqW/mc2aLcSxr1VIzq58r+na7bNadhR4bA5ehnu8bE7trorLZIpsPnLlI6rXQaQr1s2eYdLCIbfS8SMLGMpSbKadjzOkgnlO+EGZSShIofem03EL/6e8fakDYq0y+pOgO1c5Aan/a0XZxDcgBNQM7VRGJE15RObXs8+x2OxL1IfubUmbFe8tI7nOdgSX7Jtmx8ES1fumnPF118ULscsbsJaVu0MpNqzhnWl9JUi1oErY4iAOWP+9+iaKzV3Sy8m90wwVVTL4vPY4SKPv7xTPTtAXYSAVFRCPwFBtEiHR7oHdKzz7/DEcFwJAK415JhaHW9YbsB6VJoesW68uYkvKAtVcR+YMsZQEyS7dC4qKU8/LCF6vrvsjRzb4xbat18bu8vjCmtyb2AB6eA8/vIrStpKmROZk42zHsDEYDPntsNE3eBGfySvlBsrMml1zBMWspUXbzFN6d60i2LJ/4qOTBAzAX5yKJdQIMnvung/eLxI924WcBCpd2zH9EY5JO6lboKAXf3GBJJvQt9E4BjC06ysKitv88QYJEjOOKMDeXZCDnshONZMeWf9bSQ2PiLhrINx3EVNGScuKcWieJZtWquIO0OCqz6kXE6labW8JaWqt97pi0Jqv678VAnrAZXuh2YaSWF3tPZEMFnzrjGxlvgDTMiDMe2qgtU8gzWpMf5EbDS1rLvCp4posI01mMaCt7eZweifvgTQ6Ji5dl9EgpiFRFvt5PzqjqICltUKrdw3WZL1gx9z3utxd4k6Ca03hGFS2II/r+NtruMJowJJDOOpQv8QKE4hHy1PpGSy1GXxrA9/OnVgN9m4izRrdc64hx4Tj SlHhHAPW LIlWpir4fxa/X4hHkYUEs2PX1H2TeXaLfnC+EROeecZYEbFVzNUQoOvflVF2IsYV1yxBfPETHTsrCNwb2JFV6RBxYL4Jmgtph5Jl5fC9ATduF1yqAD+m16WISM/1iui9nmQ5TJGvxpFC94lfE4GXoL+/1egZ5+79EL3mvYtRykkM2oUlHDo9Fj1hsiQy0TnlzJyr1vNIpJGkTYmnZgidHEQ0BcuRdLVg63CYYUYY4uybjgVhC3YTNV5dHasg3Us64LJ6RljFP4z99FjEXlcpCc95kHL7czOB0SBgqqlC3C7sokZ55ubzALpLS5hUMd43U7MkoMd8S1cQ3kJTG32UpJwhUgrHBUSn//HLLD3AI4XjU+eeQ/6UrrgEFODWD3hiB5mgBFAs5Z6P2RUfgK7mqJdezGBNxk56qOsbS2s8y8rmD4byrYd73SaOOVucJA6kOxXzNEhTYw8/TqBqtAw9Nk4XCbvDxF1ffo8WpBoaoi3Zi5lo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hi Daniel, On 2023/8/22 21:56, Daniel Vetter wrote: > On Mon, Aug 07, 2023 at 07:09:31PM +0800, Qi Zheng wrote: >> Currently, the synchronize_shrinkers() is only used by TTM pool. It only >> requires that no shrinkers run in parallel. >> >> After we use RCU+refcount method to implement the lockless slab shrink, >> we can not use shrinker_rwsem or synchronize_rcu() to guarantee that all >> shrinker invocations have seen an update before freeing memory. >> >> So we introduce a new pool_shrink_rwsem to implement a private >> synchronize_shrinkers(), so as to achieve the same purpose. >> >> Signed-off-by: Qi Zheng >> Reviewed-by: Muchun Song > > On the 5 drm patches (I counted 2 ttm and 3 drivers) for merging through > some other tree (since I'm assuming that's how this will land): Yeah, there are 5 drm patches: PATCH v4 07/48 23/48 24/48 25/48 43/48. > > Acked-by: Daniel Vetter Thanks for your review! Qi > >> --- >> drivers/gpu/drm/ttm/ttm_pool.c | 15 +++++++++++++++ >> include/linux/shrinker.h | 2 -- >> mm/shrinker.c | 15 --------------- >> 3 files changed, 15 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c >> index c9c9618c0dce..38b4c280725c 100644 >> --- a/drivers/gpu/drm/ttm/ttm_pool.c >> +++ b/drivers/gpu/drm/ttm/ttm_pool.c >> @@ -74,6 +74,7 @@ static struct ttm_pool_type global_dma32_uncached[MAX_ORDER + 1]; >> static spinlock_t shrinker_lock; >> static struct list_head shrinker_list; >> static struct shrinker *mm_shrinker; >> +static DECLARE_RWSEM(pool_shrink_rwsem); >> >> /* Allocate pages of size 1 << order with the given gfp_flags */ >> static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags, >> @@ -317,6 +318,7 @@ static unsigned int ttm_pool_shrink(void) >> unsigned int num_pages; >> struct page *p; >> >> + down_read(&pool_shrink_rwsem); >> spin_lock(&shrinker_lock); >> pt = list_first_entry(&shrinker_list, typeof(*pt), shrinker_list); >> list_move_tail(&pt->shrinker_list, &shrinker_list); >> @@ -329,6 +331,7 @@ static unsigned int ttm_pool_shrink(void) >> } else { >> num_pages = 0; >> } >> + up_read(&pool_shrink_rwsem); >> >> return num_pages; >> } >> @@ -572,6 +575,18 @@ void ttm_pool_init(struct ttm_pool *pool, struct device *dev, >> } >> EXPORT_SYMBOL(ttm_pool_init); >> >> +/** >> + * synchronize_shrinkers - Wait for all running shrinkers to complete. >> + * >> + * This is useful to guarantee that all shrinker invocations have seen an >> + * update, before freeing memory, similar to rcu. >> + */ >> +static void synchronize_shrinkers(void) >> +{ >> + down_write(&pool_shrink_rwsem); >> + up_write(&pool_shrink_rwsem); >> +} >> + >> /** >> * ttm_pool_fini - Cleanup a pool >> * >> diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h >> index c55c07c3f0cb..025c8070dd86 100644 >> --- a/include/linux/shrinker.h >> +++ b/include/linux/shrinker.h >> @@ -103,8 +103,6 @@ struct shrinker *shrinker_alloc(unsigned int flags, const char *fmt, ...); >> void shrinker_register(struct shrinker *shrinker); >> void shrinker_free(struct shrinker *shrinker); >> >> -extern void synchronize_shrinkers(void); >> - >> #ifdef CONFIG_SHRINKER_DEBUG >> extern int __printf(2, 3) shrinker_debugfs_rename(struct shrinker *shrinker, >> const char *fmt, ...); >> diff --git a/mm/shrinker.c b/mm/shrinker.c >> index 3ab301ff122d..a27779ed3798 100644 >> --- a/mm/shrinker.c >> +++ b/mm/shrinker.c >> @@ -650,18 +650,3 @@ void shrinker_free(struct shrinker *shrinker) >> kfree(shrinker); >> } >> EXPORT_SYMBOL_GPL(shrinker_free); >> - >> -/** >> - * synchronize_shrinkers - Wait for all running shrinkers to complete. >> - * >> - * This is equivalent to calling unregister_shrink() and register_shrinker(), >> - * but atomically and with less overhead. This is useful to guarantee that all >> - * shrinker invocations have seen an update, before freeing memory, similar to >> - * rcu. >> - */ >> -void synchronize_shrinkers(void) >> -{ >> - down_write(&shrinker_rwsem); >> - up_write(&shrinker_rwsem); >> -} >> -EXPORT_SYMBOL(synchronize_shrinkers); >> -- >> 2.30.2 >> >