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 29F8FC001B0 for ; Fri, 23 Jun 2023 14:18:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F38308D0002; Fri, 23 Jun 2023 10:18:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EE8EF8D0001; Fri, 23 Jun 2023 10:18:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB0828D0002; Fri, 23 Jun 2023 10:18:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CC3568D0001 for ; Fri, 23 Jun 2023 10:18:29 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 9B73C40148 for ; Fri, 23 Jun 2023 14:18:29 +0000 (UTC) X-FDA: 80934217938.26.49995E8 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) by imf11.hostedemail.com (Postfix) with ESMTP id AFD374000E for ; Fri, 23 Jun 2023 14:18:26 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=TywO85a7; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf11.hostedemail.com: domain of robertharoldlee@gmail.com designates 209.85.167.46 as permitted sender) smtp.mailfrom=robertharoldlee@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687529906; 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=U03ByJLEXBVMFxhG8e0O73cGqPopBbGVt9AAt3CnnZM=; b=ZdfBL0NzSkUwnqflDI6nWaKqr6pr+29ltJnlxF3E+Z8ZYFggsLYXnN4PXwTiI925eCNrqj 972//PofLOB0Thg5P0boKa0PPhUUnbtGkFRuof2WTpq8JwoJTJhcg+n7EmRQDSjtbPJIJa U8K05H0Dz2kZ5RJ6zDFbbM5GP2XrCVY= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=TywO85a7; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf11.hostedemail.com: domain of robertharoldlee@gmail.com designates 209.85.167.46 as permitted sender) smtp.mailfrom=robertharoldlee@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687529906; a=rsa-sha256; cv=none; b=l4Kgh5/7DuLbQa5f0EUH44Cf0FpYnLQ9L8j3IY76/wslO0Gfqbo85kgxCkoNPn03KB57g0 qHcWf4epofGwn7eCZ4sth+AlYQ27BU6qgVGy1KeOQsMVGeHrCdEVy61jutFpdflfbUGi31 d1xIX0ZwkpsyY5Y2bF52KypspfW0whk= Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-4f96d680399so861080e87.0 for ; Fri, 23 Jun 2023 07:18:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687529904; x=1690121904; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=U03ByJLEXBVMFxhG8e0O73cGqPopBbGVt9AAt3CnnZM=; b=TywO85a77leSYCYVzYOanKoYa/s0ry32wpUrlEPzIhxZoGCaQs4jLZLSuvKMxBRSr+ TbsGogQpwLOF+rgYk/CyTwqloBlNuD8fJEweLuRiNozRHTFlrD5lDd7+9avg+CQ9MgTM 3NeNQ6SjuKvYW/h/6rmzX6ITBol7wIruscuj+zEIp+E6QNcBcAXEMSQV0OAye1V+K0WH IzEPw2+nBwMnUlvmly78g7ZGJr/xOC4JJohFIcJfH+Novulicc/nemrxnOoESSeW3KYG JFw/aKSW1VA6uVKgz1V2F9qLKxnTP/2DNimF/UcFJFDvaNOEmrMQ2SGXFJk5USkAjMlR TvMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687529904; x=1690121904; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=U03ByJLEXBVMFxhG8e0O73cGqPopBbGVt9AAt3CnnZM=; b=Icb6vo0IRrs/5T58IyhP9dM0onrt/4tyDzR2BQNJJKHijKCwWhj77bhqV4EkUFkyPm Wize8wqzfjNqkxvZqHftYXd/f3tG5qhSqLPAXfb/zXfQ4s5qfUu3eG+v/kxQDV2nZXFk V2PWDhbzjBnYrwuChJSFim5fuY2jYqxMsx4ya9BL9k9hf9H6h1z6GI+u0KR/P8dq7P++ 2jPuSQuy5wPj2FkC2X8lh9cBrVdnYf801h8U/Hqpct/U6dD4RN5sfHzlP599bONkTRbf vFNZIDITHgC3InoKPF0pff1MFHw4asSZhc04vTAFLEBkLkdSVqHFmk5RV4/EOryNciEJ /bKg== X-Gm-Message-State: AC+VfDzrunwlnuIvSWV+K9Endy/YaB+Hyel3jZrfH+vMtD/KrhRJ2vzB TIZJ4wZLHbgP5FM1sV0UOiREwG6puJAbALP8V18= X-Google-Smtp-Source: ACHHUZ5gD5e0fXJGAEuWY1GjpdaeAwxiN2MHag9P+QRePRiowthqZsR1lYoSq+npkE5Bp5epdKwCAQwNu+Xp8lfnykI= X-Received: by 2002:ac2:4f13:0:b0:4f9:6b06:129e with SMTP id k19-20020ac24f13000000b004f96b06129emr3293665lfr.65.1687529904252; Fri, 23 Jun 2023 07:18:24 -0700 (PDT) MIME-Version: 1.0 References: <20230622085335.77010-1-zhengqi.arch@bytedance.com> <20230622085335.77010-6-zhengqi.arch@bytedance.com> In-Reply-To: <20230622085335.77010-6-zhengqi.arch@bytedance.com> From: Bobs_Email Date: Fri, 23 Jun 2023 07:18:11 -0700 Message-ID: Subject: Re: [PATCH 05/29] drm/panfrost: dynamically allocate the drm-panfrost shrinker 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, linux-kernel@vger.kernel.org, linux-mm@kvack.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dm-devel@redhat.com, linux-raid@vger.kernel.org, linux-bcache@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-nfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org Content-Type: multipart/alternative; boundary="0000000000007dacb305feccace6" X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: AFD374000E X-Stat-Signature: 1nozcbm1f9enf1wk1w61xi6mgg8j9rki X-HE-Tag: 1687529906-296330 X-HE-Meta: U2FsdGVkX1+t+pcdiEY17MW7m/m0y5hFTFEbW69DVIuqNAGmuQBmXeZY8UKVCwo8oQtsCzJt010DlnynGjjRG9qdKlhjCcIsjSj1/4BDJIq8op1E9x8YwqUBcyEonBvmFfNUlzPf0zb71PAjoK7vUsRpB8HGvcFjhPrDAvAMCjYi9Ta1eQyxBL+pis3HDdqZQu1vtBUl/9Cu+D0Jd3J4U1eBsWAkNmP2oUXI06qCuTdk0MHV+WIHON/i+zCW6MSA3j+xyX5TGnI/wZXCfQ4zv7egXCz1G7LVQ0spd1TUdCjQODTytw85mCfE8YLjMQbNL1P18AQdJwNIPixUPGathSqh9yeliQQFEDjHlpkeNHDyzgWyY2VOQoC6WJWVaC5952SedDqCeBCDcpA7IPPFq3rSLZ8lLmal3rOFZmddh+UL0AL9OF6Qi5pEf3NbgFyZQANTbHBx7rb3NqO71j58KX9IvY+ob+QSfiQT3JAbShoJdK3iz7piWbOfmQtM8B8ElaN7Se9uMuE/QwThXOtvUNqGspwXWxV447aKrH30VJ6/izwIpd41UUgorOzIWpMTzHsey4/cKIZIii3Rz5nuaq01ru7z9tkLPXloeQjdhgqjAjHpox+mTwLjd8cztfgqI1i97dYWXNML1Kx+zMMTbaesF4HTkGBmtgQ7QLnVJmB+gIs+4PepuzH44wDr2ssjREaxHx31NLkclObFZPnGP92CWv1p72hXZ6ifTQwyFBeyJ7DTr7I93e7XG5Wj8i8hFCZ1L38BGDg9XGSdfLr4U6xLGLdGzHw8/T6671WV2CbSvVrT2uMHUFmj8VHfoKhN8OXWHXVT46+vT6j9eEwzbN8sKidBIJHkd3XQXnqV7V8bmEW3WeZ43r5brwhJeWSMuogyHGsId0ewnKPCzi5wloHVNinRLmo8Iw1BfJ2BnJL5nHjMgPm0T4myvixM744Zf6OHqWyOIYb5dgaLLpx I27uwHe+ 6ZsGgji95yetbC2JlSl4q6w4IDYxyHzVEW3AOnFlQTRf+46bSKJdNWAfbdRC8YnEqKEcw5y3EWHBxBUtVYJm3trdYL7Nlh+/q0nyfI8a87Ym7ecw6IE4uy0oaWk2QJUWXlaeAi4Nf8x3sV/F5zTpyRwdHnaeUVBdvGzM/nMoh2tggH6sU5nyeYUQvpH97hnBMD5gxE6ob/kwNS1K8BqIkI6RgqItyiouod4OqbsmHMxKP78+ZAqDnMG+r1W7F1YjjLtTATQNreymw+W4uf4hxT7QtkVJahqiAB1P/+CYJFIt1Ej//y+tVUOWADrxjidp3RkxNvyaUt6TXNzz2uIE2EtuPZt6vPPV/SDg+VhKEDwQLzJPnVoJTPfbYwMZVeJGLx0V1xvR8xtUfmBa5dK92HxFopE0+JXrzHQ1gclPtQ0BmYYxppB9laApfUwl/RJEhYsxG2z87VRKQf8du7Tyzw2XqonEzD2FtA2h2RBDGhslZWC6wyHGM2DvRBP43CnFkBsGzdJ7ppjGsSEQ= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --0000000000007dacb305feccace6 Content-Type: text/plain; charset="UTF-8" Please remove Bob Lee from this email group. He is deceased On Thu, Jun 22, 2023, 1:56 AM Qi Zheng wrote: > In preparation for implementing lockless slab shrink, > we need to dynamically allocate the drm-panfrost shrinker, > so that it can be freed asynchronously using kfree_rcu(). > Then it doesn't need to wait for RCU read-side critical > section when releasing the struct panfrost_device. > > Signed-off-by: Qi Zheng > --- > drivers/gpu/drm/panfrost/panfrost_device.h | 2 +- > .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 24 ++++++++++--------- > 2 files changed, 14 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h > b/drivers/gpu/drm/panfrost/panfrost_device.h > index b0126b9fbadc..e667e5689353 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_device.h > +++ b/drivers/gpu/drm/panfrost/panfrost_device.h > @@ -118,7 +118,7 @@ struct panfrost_device { > > struct mutex shrinker_lock; > struct list_head shrinker_list; > - struct shrinker shrinker; > + struct shrinker *shrinker; > > struct panfrost_devfreq pfdevfreq; > }; > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > index bf0170782f25..2a5513eb9e1f 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > @@ -18,8 +18,7 @@ > static unsigned long > panfrost_gem_shrinker_count(struct shrinker *shrinker, struct > shrink_control *sc) > { > - struct panfrost_device *pfdev = > - container_of(shrinker, struct panfrost_device, shrinker); > + struct panfrost_device *pfdev = shrinker->private_data; > struct drm_gem_shmem_object *shmem; > unsigned long count = 0; > > @@ -65,8 +64,7 @@ static bool panfrost_gem_purge(struct drm_gem_object > *obj) > static unsigned long > panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct > shrink_control *sc) > { > - struct panfrost_device *pfdev = > - container_of(shrinker, struct panfrost_device, shrinker); > + struct panfrost_device *pfdev = shrinker->private_data; > struct drm_gem_shmem_object *shmem, *tmp; > unsigned long freed = 0; > > @@ -100,10 +98,15 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, > struct shrink_control *sc) > void panfrost_gem_shrinker_init(struct drm_device *dev) > { > struct panfrost_device *pfdev = dev->dev_private; > - pfdev->shrinker.count_objects = panfrost_gem_shrinker_count; > - pfdev->shrinker.scan_objects = panfrost_gem_shrinker_scan; > - pfdev->shrinker.seeks = DEFAULT_SEEKS; > - WARN_ON(register_shrinker(&pfdev->shrinker, "drm-panfrost")); > + > + pfdev->shrinker = > shrinker_alloc_and_init(panfrost_gem_shrinker_count, > + > panfrost_gem_shrinker_scan, 0, > + DEFAULT_SEEKS, 0, pfdev); > + if (pfdev->shrinker && > + register_shrinker(pfdev->shrinker, "drm-panfrost")) { > + shrinker_free(pfdev->shrinker); > + WARN_ON(1); > + } > } > > /** > @@ -116,7 +119,6 @@ void panfrost_gem_shrinker_cleanup(struct drm_device > *dev) > { > struct panfrost_device *pfdev = dev->dev_private; > > - if (pfdev->shrinker.nr_deferred) { > - unregister_shrinker(&pfdev->shrinker); > - } > + if (pfdev->shrinker->nr_deferred) > + unregister_and_free_shrinker(pfdev->shrinker); > } > -- > 2.30.2 > > --0000000000007dacb305feccace6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Please remove Bob Lee from this email group.
He is deceased


On Thu, Jun 22, 2023= , 1:56 AM Qi Zheng <zhengq= i.arch@bytedance.com> wrote:
In preparation for implementing lockless slab shrink,
we need to dynamically allocate the drm-panfrost shrinker,
so that it can be freed asynchronously using kfree_rcu().
Then it doesn't need to wait for RCU read-side critical
section when releasing the struct panfrost_device.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
=C2=A0drivers/gpu/drm/panfrost/panfrost_device.h=C2=A0 =C2=A0 |=C2=A0 2 +-<= br> =C2=A0.../gpu/drm/panfrost/panfrost_gem_shrinker.c=C2=A0 | 24 ++++++++++---= ------
=C2=A02 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h
index b0126b9fbadc..e667e5689353 100644
--- a/drivers/gpu/drm/panfrost/panfrost_device.h
+++ b/drivers/gpu/drm/panfrost/panfrost_device.h
@@ -118,7 +118,7 @@ struct panfrost_device {

=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct mutex shrinker_lock;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct list_head shrinker_list;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0struct shrinker shrinker;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0struct shrinker *shrinker;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct panfrost_devfreq pfdevfreq;
=C2=A0};
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..2a5513eb9e1f 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
+++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
@@ -18,8 +18,7 @@
=C2=A0static unsigned long
=C2=A0panfrost_gem_shrinker_count(struct shrinker *shrinker, struct shrink_= control *sc)
=C2=A0{
-=C2=A0 =C2=A0 =C2=A0 =C2=A0struct panfrost_device *pfdev =3D
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0container_of(shrink= er, struct panfrost_device, shrinker);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0struct panfrost_device *pfdev =3D shrinker->= private_data;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct drm_gem_shmem_object *shmem;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 unsigned long count =3D 0;

@@ -65,8 +64,7 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj= )
=C2=A0static unsigned long
=C2=A0panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_c= ontrol *sc)
=C2=A0{
-=C2=A0 =C2=A0 =C2=A0 =C2=A0struct panfrost_device *pfdev =3D
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0container_of(shrink= er, struct panfrost_device, shrinker);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0struct panfrost_device *pfdev =3D shrinker->= private_data;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct drm_gem_shmem_object *shmem, *tmp;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 unsigned long freed =3D 0;

@@ -100,10 +98,15 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, = struct shrink_control *sc)
=C2=A0void panfrost_gem_shrinker_init(struct drm_device *dev)
=C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct panfrost_device *pfdev =3D dev->dev_p= rivate;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0pfdev->shrinker.count_objects =3D panfrost_g= em_shrinker_count;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0pfdev->shrinker.scan_objects =3D panfrost_ge= m_shrinker_scan;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0pfdev->shrinker.seeks =3D DEFAULT_SEEKS;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0WARN_ON(register_shrinker(&pfdev->shrink= er, "drm-panfrost"));
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0pfdev->shrinker =3D shrinker_alloc_and_init(= panfrost_gem_shrinker_count,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0panfrost_gem_shrinker_scan, 0,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0DEFAULT_SEEKS, 0, pfdev);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (pfdev->shrinker &&
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0register_shrinker(pfdev->shrin= ker, "drm-panfrost")) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0shrinker_free(pfdev= ->shrinker);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0WARN_ON(1);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0}
=C2=A0}

=C2=A0/**
@@ -116,7 +119,6 @@ void panfrost_gem_shrinker_cleanup(struct drm_device *d= ev)
=C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct panfrost_device *pfdev =3D dev->dev_p= rivate;

-=C2=A0 =C2=A0 =C2=A0 =C2=A0if (pfdev->shrinker.nr_deferred) {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0unregister_shrinker= (&pfdev->shrinker);
-=C2=A0 =C2=A0 =C2=A0 =C2=A0}
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (pfdev->shrinker->nr_deferred)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0unregister_and_free= _shrinker(pfdev->shrinker);
=C2=A0}
--
2.30.2

--0000000000007dacb305feccace6--