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 B39C4EE49AE for ; Tue, 22 Aug 2023 13:56:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E374290000F; Tue, 22 Aug 2023 09:56:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DBFDD90000C; Tue, 22 Aug 2023 09:56:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C129890000F; Tue, 22 Aug 2023 09:56:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id AC0DB90000C for ; Tue, 22 Aug 2023 09:56:27 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 7852E80371 for ; Tue, 22 Aug 2023 13:56:27 +0000 (UTC) X-FDA: 81151890414.27.E59E0C8 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by imf20.hostedemail.com (Postfix) with ESMTP id 6957C1C0019 for ; Tue, 22 Aug 2023 13:56:24 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=ffwll.ch header.s=google header.b=OvQvaauB; dmarc=none; spf=none (imf20.hostedemail.com: domain of daniel@ffwll.ch has no SPF policy when checking 209.85.221.45) smtp.mailfrom=daniel@ffwll.ch ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692712584; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=LXzMnEM8moHL5KfliVx5cD1lb3aAd5NGNjk14fqFYLY=; b=7q4+E/gVn05VMdEBAaYHmwGSYTDtQ9imcmqytETiKQXw+WonLQzM8Tv5eeZqQRYNsb05YT WyabmuD0CdDcG/R1Ly21ac65DiZ6Vxxg1+PfPIFWCREuo5sdOK1Uun6Bp9mYJLfiaJkN+D wFp0bjcpP2d09uldT+JRVxRhlIXHLJA= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=ffwll.ch header.s=google header.b=OvQvaauB; dmarc=none; spf=none (imf20.hostedemail.com: domain of daniel@ffwll.ch has no SPF policy when checking 209.85.221.45) smtp.mailfrom=daniel@ffwll.ch ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692712584; a=rsa-sha256; cv=none; b=r0oUfMrrDZy5wZMUkm2SIEgH3D2J/oZV/ZmbnJ0UMj1wClmQjIUk1wkWTkh5il86uWht+H PZ0ybORA3Hb9ztJF1EKSUnJlcevFkZT9sRLcuBuygS5sUbb5FlUowoil2rjZikNefPrw/L xwN9PWV7uazueGi9BD6gasm0CUFb+5E= Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3175e1bb38cso748737f8f.1 for ; Tue, 22 Aug 2023 06:56:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; t=1692712583; x=1693317383; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:from:to:cc :subject:date:message-id:reply-to; bh=LXzMnEM8moHL5KfliVx5cD1lb3aAd5NGNjk14fqFYLY=; b=OvQvaauBf9P71X6OM3iV6zJjVstVKwDXVeR2TcNPjDcJz2f399JP5BZxFUiXHkTWc/ r5lP7XQ7vkvpSMptW40PFm8KnzYip/IftCKI/V7U1LWv+OZcsOEZqcqKXDKRf7oBDJOP RNOespNYAQNJ9FavrWx3YuWYiBeKAeIF+XsTA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692712583; x=1693317383; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LXzMnEM8moHL5KfliVx5cD1lb3aAd5NGNjk14fqFYLY=; b=S/r7Lc07R4CSu7hvvLfJ/8GfonapTu5ZyXX5K75b49Ql6JID0JRoo83qq1CwIjBZFY wFVBqEE1MlRD2O8TSHo9ydOYBbytu+1bZAJr2R1jSmFJ1E//k7TBEcu7yG7VX+Fb3DI9 665cDYgYM1nBQpx4NN38mVWiDr7x0QA/6DTxHN4LDQfGbEm36MEt+tIdRg7EGE+kMrjH 7vTef/l35bh8vdhIP5Ymkxkozzd+1ilU6r071jj/6a3/o5ZIBxlzasZA3GaAjr7IQTVH ydqSihhHrelBZ6o7r/iCfqE7PT9dMr1QmtEML9TxiEY2k/lrjGiW5QjzGumnjEz0TfOp rg9g== X-Gm-Message-State: AOJu0Yze8cbrcAAsDes2YnbVYsIGrsfbgzOmd0B50sqt38C5YJmEzudy mEMwsotOkatfXiezZXFt6mrhHw== X-Google-Smtp-Source: AGHT+IHJQrlSrCu8WgUX5s8XkdDm6/hR/jwfxds8mVBdQgFEL5tBYnuf/oIT+VMpj8Z6S8wRiH/+Kw== X-Received: by 2002:a5d:65c5:0:b0:319:8dcf:5c10 with SMTP id e5-20020a5d65c5000000b003198dcf5c10mr6979657wrw.6.1692712582669; Tue, 22 Aug 2023 06:56:22 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id u5-20020a05600c210500b003fc02e8ea68sm19456835wml.13.2023.08.22.06.56.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Aug 2023 06:56:22 -0700 (PDT) Date: Tue, 22 Aug 2023 15:56:19 +0200 From: Daniel Vetter To: 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 Subject: Re: [PATCH v4 43/48] drm/ttm: introduce pool_shrink_rwsem Message-ID: Mail-Followup-To: Qi Zheng , 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 References: <20230807110936.21819-1-zhengqi.arch@bytedance.com> <20230807110936.21819-44-zhengqi.arch@bytedance.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230807110936.21819-44-zhengqi.arch@bytedance.com> X-Operating-System: Linux phenom 6.3.0-2-amd64 X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 6957C1C0019 X-Stat-Signature: cparoqfwusefjbgos6fdo8mxezkowko1 X-HE-Tag: 1692712584-975368 X-HE-Meta: U2FsdGVkX1/GP+6Bzf4qIIohQhqhSjI0AotGya9T/Ed9waDezSCoQPVgC+WW43P0lLHYit9QY5EVIQ9Zlxrxj9tZ70QKNCwgbSiFBKyOgo7GN7B2y9K5HiBP78EaTgMn6sVD09v5gWsneUaGaXVNGJpHOkr4cPJII5eE5Xf99RHPBLeftI+PoRT3dabWpSOam7foDgkEqMNODekBgY9gkFbAx3zsUObrlfDK58B5W5MuNo7s36EGFPSLGN0NnLEuwBSs63q+Fmz6y7VGZfx4PHUQSGCZ+dF7d68/OYKDh5GIbGOArCv3yvCe3AQOak4+NfbBLCOJhxHrT9JZEm41mIs0HLthFmVEPALfNdVXBuvSprVlVoW4OQsNqB67cfk0gVMaCAOoalZRfUSbhlO0nlykvbqaj1bhHUHW7T5u3bGe2hjlMSNRE+D1v9Rl0Ehn7OzLuHQKC/hE4EDtgarXqdWlNXHMWBRtLr+aGGYyBU2O3g0WV52G8ChbavcZYSvFk2NU6NqJQyWSNBzfRD4ywCAWfPJMmGT6uFblcyVccqpa1N26Ps/AXMRrWzPW93OYFLAP7znBwhmduW7B9Qv+hBB/YceH+NHNLhf5WG5+bVmor6nO/SqzOyOicVlu2tkM4hrlB9UsQ92717hbiU0R/pYHPfIyvP+2iMaObrLtEhEJ7jIuVwYBEy0y133sXbrRP+E6zcsTHyoFjdhen95Yzh4I4KCLjegkNAgK5QDqGrGQRG4fnANjAkUncBV5efuwnZje9ZHDjRLcMmz1JMbDXvAEnPaCAKkvM7iLOYpCdCEmx0LHb9WpeED9+qBzPTd5VZkDomaye5BcBKZzf7nlDLmOEXDUqjI6tCyM6xa5chxPsBgLf+OKvzuoP82D52oDSq/efu/lfLW/c7w9rBUIC83nHzFa1bJxsq+T23Q8j+WNTleqc4dW1mH/WC4F+Kr3MklIOXmAkPR1XYIkUIM Qg/wVKWG 8FCZETAEOSFjgAQ3sKr0KY8Bd9wlUjiFJYTW5YskwOWVHni2/9t9B8PA427+kZgpFykIxEmvovhkfJrBTYp9SY8turfYNdWIL6ZRUcW/ghvtlnC3yDJJpIlf7OFA+SyoAJRzx4F/rk/IzpEB5Dp3KW5znMXdRwevpYFyFOZ9Go3uC7Nv0ybmBkvl4r+z78HlUWMSiEVM0+PXuaRzMgCVNKR/IOwprN6MUQNvagLFWIlGy5XL+LDnZ0jDXJ5vBAXEQhGq6o5Yf9UG31ibXDoZozjjRKoa2Y/nBHR4smLVGS4p/PvOw7wz5yKV1wMoZWYxUJP5v7Vdi+3KgeV3C2+UHjPRhD3LCduFNz2tfgZtREI4cKkJQy8Y0vfLEPjPjWrxTKnyBTI61cSJbjGIiPEh7RN7aVPT7FPG5sG3xoSO+7jLTt6xZ+B5cykf9Cw== 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: 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): Acked-by: Daniel Vetter > --- > 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 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch