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 CC105C001B0 for ; Wed, 16 Aug 2023 09:20:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6456928000B; Wed, 16 Aug 2023 05:20:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5F43B8D0001; Wed, 16 Aug 2023 05:20:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4BCB228000B; Wed, 16 Aug 2023 05:20:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 3B0C18D0001 for ; Wed, 16 Aug 2023 05:20:49 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id EEE16C0E2D for ; Wed, 16 Aug 2023 09:20:48 +0000 (UTC) X-FDA: 81129422976.15.ADEDDA8 Received: from mail-io1-f52.google.com (mail-io1-f52.google.com [209.85.166.52]) by imf10.hostedemail.com (Postfix) with ESMTP id 7B954C0019 for ; Wed, 16 Aug 2023 09:20:45 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=VNXSeICd; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.52 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=1692177646; 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=TlNpMQycLKXmojtrojHNMUrVrub9kauxQ1pbCjOut9s=; b=mrwt+qR+1H9vGqQnLPXf8GdTp6738Kd/g3gQgvEKBoifwhG5zKSLul8y9DZVNQzbH8cHij MhenWabJH3x6AUOiviuna6OBiMH0R4KtyuZKBLSUy+TB8VGKGM6MTsjBNvNVf1qU+uvOvt kCpvr2ZDsJ8jX192YjO7fszU66NbVPE= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=VNXSeICd; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf10.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.166.52 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692177646; a=rsa-sha256; cv=none; b=wxy+zWs9Gj+C9bRQTy4al2WOfYvngZ14GKLxUBbyJAjf1DlqTUD4aAMkqE6zGu7OlcEOhh BcSskGkyy3SDsfYVzLqV+LYgHKQ05e0pTKoSqBHv4BiTcXWPJYbF557O1ygCxCh8ZvcQnl ZB29w0lg2wSZbRYn6GBhaPoNhunXBrQ= Received: by mail-io1-f52.google.com with SMTP id ca18e2360f4ac-77dcff76e35so74099239f.1 for ; Wed, 16 Aug 2023 02:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1692177644; x=1692782444; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=TlNpMQycLKXmojtrojHNMUrVrub9kauxQ1pbCjOut9s=; b=VNXSeICdJxnay4PsGgOiLN++yIhFxxLuLHu0q+42622TWavZod6E8qedqi3F5lkaok QQl+Ba+d5ToSjggzLp5uhu9bF83vlsVOc8ZdfnRPrVtpgjycvhO3f9cwHa0XcX0bS475 STe7wEwNsA2V8kRa640PlOtaRzUwHEfGl3Snvh1ppLDc8ZjqeTZVuF3niDaHbkpQMyC/ DsWptFq3lwN34gJ/o5wNa9wjabdU+bFVC1od2A1AhpJLeZUbIztDXxE8mEXBZCHfgttu YuSqUBddCXNtau4INR3Ak0z1mSX+8RThGC0a9bli+uH8gafP5BHSWV79QolHwtqZj8zN 6a8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692177644; x=1692782444; h=content-transfer-encoding:in-reply-to:from:references:cc: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=TlNpMQycLKXmojtrojHNMUrVrub9kauxQ1pbCjOut9s=; b=Cziho3awkVOH4MoXgXkQMZx5Sx+vV9gf8DfnIKRi0O6yo9KAmJPLZn2kkn19KaAIuV RrbUIXrZ87/xFb7jPy37SsUsdYbwDwMyyb4TfRPQaapPDlDLzU6TkYIe6pnqxkpxhi61 zwe1ycENAKl0Hwa7g9QRX19/T1hW1ubUJW1lMsgWZ6e200bZucvgEUJyJnZHZPKdrP6p 9ZrwnDfiTY8uLCrPNMZzZwhyUkBSrH+SMxY9Mj88ZZ8KU5f/N00cw5+VHn5VtJQZ8OnC ougwaj29iE3HSfLIFVTQL5rYXddHDNxO3PasdSiFFfsY6ZPsY4MgpMQBylVW9KjWN5G7 6DAA== X-Gm-Message-State: AOJu0YyZLYnC4lJCfMgz8FXy0PLPiWnwOq325gaKBga8Xag8wqYk+GdG /HQoMSnvxwjoR0Vc3Vg8b+Mw1Q== X-Google-Smtp-Source: AGHT+IEgSkg0l4PkdpjEk3Z1pS47eJ+NP+gSmJGZ36H0C+AfOh96Ce1k2peW55SRVGXQZ+z1B6xQig== X-Received: by 2002:a92:dc92:0:b0:345:bdc2:eb42 with SMTP id c18-20020a92dc92000000b00345bdc2eb42mr1672561iln.3.1692177644351; Wed, 16 Aug 2023 02:20:44 -0700 (PDT) Received: from [10.70.252.135] ([203.208.167.146]) by smtp.gmail.com with ESMTPSA id oj3-20020a17090b4d8300b002694fee879csm12639094pjb.36.2023.08.16.02.20.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 16 Aug 2023 02:20:43 -0700 (PDT) Message-ID: Date: Wed, 16 Aug 2023 17:20:32 +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 4/5] drm/ttm: introduce pool_shrink_rwsem Content-Language: en-US To: =?UTF-8?Q?Christian_K=c3=b6nig?= Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, dri-devel@lists.freedesktop.org, linux-fsdevel@vger.kernel.org, Muchun Song , 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, joel@joelfernandes.org References: <20230816083419.41088-1-zhengqi.arch@bytedance.com> <20230816083419.41088-5-zhengqi.arch@bytedance.com> <01213258-6e27-f304-b420-f3d915e54ed1@amd.com> From: Qi Zheng In-Reply-To: <01213258-6e27-f304-b420-f3d915e54ed1@amd.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 7B954C0019 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: rfeh56jkuttbde4zmamdq3w4e7pnmtkh X-HE-Tag: 1692177645-262295 X-HE-Meta: U2FsdGVkX1+VxBsR4n5Gjqc6Y0hoVRbkq7JUiKXhEJWMwGTinqZwxnk9hllLnqHMHewUXoFuIp7TiP35Gtk0IWqgohybrRPqdQWFTQ/gpN6dG7cwm9sem3cvW2qcdGY7Kq31PdmgQZpFRWInv1QuZAijUhFTfMCQuZusobIipWs744oi20eBkBIDA/b2/WnMW0ALY0ns2lQvnBrxGMCjFtO70cFVjujojWAUd9K9VS4kW4ULZTusqR0+Eyp/VT1F43iscSL0VlOPMFxavERj/lCFA4TEEcPQ3l9+ewn2hS5ABYh+XyZP1ZVMqqMHkzFfwU3WsMGi1awcF1Y5m8iRSNGgU3zJ5vaD74O0fvEuqF8UZHIXW3EC+vobQtasQ0y6w7NAA4x8PKqFnDh0MByCu1PlJe5ayVmzKlVLPKzhD6RvCtUgCrExLBurG8TAc+VbC8l/eMFrrF7G1N7MozkjOn62EmmfSXmbnmtrqaDqF4dlJ/kfbTiv2W1NG1HTEhMifpCxXW7SdF2g6fxumNHDYsPWRoKOEzuJXg2WMNBm+Y6vj4iHnfydaI9umgtDBzK9oxHTsi6VqGzBzX0V6gWjzoSyZ6vd7Q/Ymf0V31B26hN6Tfk+6I2UKch1XI/WW9uKTOmNtcyZiIjs4qWJ+QOwS91eBIOq6y+ivZ7Afr2j8EcQAx0WbqYzzfXrKmLbdZgHtEQSnzTWjFRKi2c9XwXd8utsvZcDbkPsGvbnCOEZKTFBA+NMtX97qjqZNVu+5KktJqzmaXjZVe8uVUggIXQ+ka1lb8VOLtjackXFAaD8jBOvNiLu9KkvaN61Km/zWrAbE5QjO9FtKz1+xk8mrfj8OW/oB06ixQHuSerNsyEUIKVlDreDtOHsPVchTQ5RiBhxo5M30KckOUFa7tqd2LqssfYeOxad3Wl2HxrTs4GH3a3ixUYiJ22nOyWToSZC3G416lCdGQOGrqrQgWVeXNZ pCGR0gTf 05tPkxbF+5kccMVKLJOxagRrEhRmL83uI72LHSGQbFkncMj6ysAKm7X0JX6ZFG/djb5Ev585/pjSHpYaOp4PHtyLAtpWhKKGynkWHty0/y51IcOQYFxrXVdr8ssyFZjSXT9fM163gE+Mvx59EbKZ90+V0XbotQr/x9ayb34jC92bZTFbraXQfyXLsFyM62m0fR2ddfrCQgn5AnChwl1hpqtt4S5XwsZkaSU9T9St3sxRsB42wa+wpMF8vOLU9m9LKCiSN6I0QAqiEcaw7L4XpfO7DE+L8V/a9nTb4RD4LJLcXNs1YuhHj/nBdf8y81o4VXbXPSZfjk7a7zwtrRFp+qwGlBDUNhWalolAqgK6EDa5sZmgxc04gV2MXD1BgoiJUz/R7AHghbuCocq8x/6iNXv2vAATIx+Eflj8LU07849miVf6SeFVStkk52Vp1tBgQYh6KeqqGCP96r9OIvTgah00cqPgRnr+7bQU9EWN6Z58kJ1+dCsT627qNlA== 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 Christian, On 2023/8/16 17:14, Christian König wrote: > Am 16.08.23 um 10:34 schrieb Qi Zheng: >> 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 >> --- >>   drivers/gpu/drm/ttm/ttm_pool.c | 15 +++++++++++++++ >>   include/linux/shrinker.h       |  1 - >>   mm/shrinker.c                  | 15 --------------- >>   3 files changed, 15 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c >> b/drivers/gpu/drm/ttm/ttm_pool.c >> index cddb9151d20f..713b1c0a70e1 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) > > Please rename that function to ttm_pool_synchronize_shrinkers(). OK, will do. > > With that done feel free to add Reviewed-by: Christian König > > Thanks, Qi > Regards, > Christian. > >> +{ >> +    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 8dc15aa37410..6b5843c3b827 100644 >> --- a/include/linux/shrinker.h >> +++ b/include/linux/shrinker.h >> @@ -103,7 +103,6 @@ extern int __printf(2, 3) register_shrinker(struct >> shrinker *shrinker, >>                           const char *fmt, ...); >>   extern void unregister_shrinker(struct shrinker *shrinker); >>   extern void free_prealloced_shrinker(struct shrinker *shrinker); >> -extern void synchronize_shrinkers(void); >>   #ifdef CONFIG_SHRINKER_DEBUG >>   extern int __printf(2, 3) shrinker_debugfs_rename(struct shrinker >> *shrinker, >> diff --git a/mm/shrinker.c b/mm/shrinker.c >> index 043c87ccfab4..a16cd448b924 100644 >> --- a/mm/shrinker.c >> +++ b/mm/shrinker.c >> @@ -692,18 +692,3 @@ void unregister_shrinker(struct shrinker *shrinker) >>       shrinker->nr_deferred = NULL; >>   } >>   EXPORT_SYMBOL(unregister_shrinker); >> - >> -/** >> - * 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); >