All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qi Zheng <zhengqi.arch@bytedance.com>
To: 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
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org,
	kvm@vger.kernel.org, xen-devel@lists.xenproject.org,
	linux-erofs@lists.ozlabs.org,
	linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
	linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org,
	rcu@vger.kernel.org, netdev@vger.kernel.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-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org,
	Qi Zheng <zhengqi.arch@bytedance.com>
Subject: [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2


WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng <zhengqi.arch@bytedance.com>
To: 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
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org,
	kvm@vger.kernel.org, xen-devel@lists.xenproject.org,
	linux-erofs@lists.ozlabs.org,
	linux-f2fs-devel@lists.sourceforge.net, cluster-devel@redhat.com,
	linux-nfs@vger.kernel.org, linux-mtd@lists.infradead.org,
	rcu@vger.kernel.org, netdev@vger.kernel.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-xfs@vger.kernel.org, linux-btrfs@vger.kernel.org,
	Qi Zheng <zhengqi.arch@bytedance.com>
Subject: [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng via Linux-erofs <linux-erofs@lists.ozlabs.org>
To: 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
Cc: 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,
	Qi Zheng <zhengqi.arch@bytedance.com>,
	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: [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2


WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng <zhengqi.arch@bytedance.com>
To: 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
Cc: 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,
	Qi Zheng <zhengqi.arch@bytedance.com>,
	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: [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2


WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: 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
Cc: 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,
	Qi Zheng <zhengqi.arch@bytedance.com>,
	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: [f2fs-dev] [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng <zhengqi.arch@bytedance.com>
To: 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
Cc: 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,
	Qi Zheng <zhengqi.arch@bytedance.com>,
	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: [dm-devel] [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel


WARNING: multiple messages have this Message-ID (diff)
From: Qi Zheng <zhengqi.arch@bytedance.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker
Date: Mon, 24 Jul 2023 17:43:31 +0800	[thread overview]
Message-ID: <20230724094354.90817-25-zhengqi.arch@bytedance.com> (raw)
In-Reply-To: <20230724094354.90817-1-zhengqi.arch@bytedance.com>

In preparation for implementing lockless slab shrink, use new APIs 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>
---
 drivers/gpu/drm/panfrost/panfrost_device.h    |  2 +-
 drivers/gpu/drm/panfrost/panfrost_drv.c       |  6 +++-
 drivers/gpu/drm/panfrost/panfrost_gem.h       |  2 +-
 .../gpu/drm/panfrost/panfrost_gem_shrinker.c  | 32 ++++++++++++-------
 4 files changed, 27 insertions(+), 15 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_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
index bbada731bbbd..f705bbdea360 100644
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
@@ -598,10 +598,14 @@ static int panfrost_probe(struct platform_device *pdev)
 	if (err < 0)
 		goto err_out1;
 
-	panfrost_gem_shrinker_init(ddev);
+	err = panfrost_gem_shrinker_init(ddev);
+	if (err)
+		goto err_out2;
 
 	return 0;
 
+err_out2:
+	drm_dev_unregister(ddev);
 err_out1:
 	pm_runtime_disable(pfdev->dev);
 	panfrost_device_fini(pfdev);
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.h b/drivers/gpu/drm/panfrost/panfrost_gem.h
index ad2877eeeccd..863d2ec8d4f0 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.h
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.h
@@ -81,7 +81,7 @@ panfrost_gem_mapping_get(struct panfrost_gem_object *bo,
 void panfrost_gem_mapping_put(struct panfrost_gem_mapping *mapping);
 void panfrost_gem_teardown_mappings_locked(struct panfrost_gem_object *bo);
 
-void panfrost_gem_shrinker_init(struct drm_device *dev);
+int panfrost_gem_shrinker_init(struct drm_device *dev);
 void panfrost_gem_shrinker_cleanup(struct drm_device *dev);
 
 #endif /* __PANFROST_GEM_H__ */
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c
index bf0170782f25..9a90dfb5301f 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;
 
@@ -97,13 +95,24 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
  *
  * This function registers and sets up the panfrost shrinker.
  */
-void panfrost_gem_shrinker_init(struct drm_device *dev)
+int 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(0, "drm-panfrost");
+	if (!pfdev->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	pfdev->shrinker->count_objects = panfrost_gem_shrinker_count;
+	pfdev->shrinker->scan_objects = panfrost_gem_shrinker_scan;
+	pfdev->shrinker->seeks = DEFAULT_SEEKS;
+	pfdev->shrinker->private_data = pfdev;
+
+	shrinker_register(pfdev->shrinker);
+
+	return 0;
 }
 
 /**
@@ -116,7 +125,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)
+		shrinker_unregister(pfdev->shrinker);
 }
-- 
2.30.2


  parent reply	other threads:[~2023-07-24  9:55 UTC|newest]

Thread overview: 763+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-24  9:43 [PATCH v2 00/47] use refcount+RCU method to implement lockless slab shrink Qi Zheng
2023-07-24  9:43 ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43 ` [dm-devel] " Qi Zheng
2023-07-24  9:43 ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` Qi Zheng
2023-07-24  9:43 ` Qi Zheng via Linux-erofs
2023-07-24  9:43 ` Qi Zheng
2023-07-24  9:43 ` [PATCH v2 01/47] mm: vmscan: move shrinker-related code into a separate file Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-25  2:35   ` Muchun Song
2023-07-25  2:35     ` [Cluster-devel] " Muchun Song
2023-07-25  2:35     ` Muchun Song
2023-07-25  2:35     ` Muchun Song
2023-07-25  2:35     ` [dm-devel] " Muchun Song
2023-07-25  2:35     ` Muchun Song
2023-07-25  2:35     ` [f2fs-dev] " Muchun Song
2023-07-25  3:09     ` Qi Zheng
2023-07-25  3:09       ` [Cluster-devel] " Qi Zheng
2023-07-25  3:09       ` Qi Zheng via Linux-erofs
2023-07-25  3:09       ` [dm-devel] " Qi Zheng
2023-07-25  3:09       ` Qi Zheng
2023-07-25  3:09       ` Qi Zheng
2023-07-25  3:09       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-25  3:23       ` Muchun Song
2023-07-25  3:23         ` [Cluster-devel] " Muchun Song
2023-07-25  3:23         ` Muchun Song
2023-07-25  3:23         ` Muchun Song
2023-07-25  3:23         ` [dm-devel] " Muchun Song
2023-07-25  3:23         ` Muchun Song
2023-07-25  3:23         ` [f2fs-dev] " Muchun Song
2023-07-25  3:27         ` Qi Zheng
2023-07-25  3:27           ` [Cluster-devel] " Qi Zheng
2023-07-25  3:27           ` Qi Zheng via Linux-erofs
2023-07-25  3:27           ` [dm-devel] " Qi Zheng
2023-07-25  3:27           ` Qi Zheng
2023-07-25  3:27           ` Qi Zheng
2023-07-25  3:27           ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 02/47] mm: shrinker: remove redundant shrinker_rwsem in debugfs operations Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-25  3:17   ` Muchun Song
2023-07-25  3:17     ` [Cluster-devel] " Muchun Song
2023-07-25  3:17     ` Muchun Song
2023-07-25  3:17     ` Muchun Song
2023-07-25  3:17     ` [dm-devel] " Muchun Song
2023-07-25  3:17     ` Muchun Song
2023-07-25  3:17     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 03/47] mm: shrinker: add infrastructure for dynamically allocating shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24 12:25   ` Peter Zijlstra
2023-07-24 12:25     ` [Cluster-devel] " Peter Zijlstra
2023-07-24 12:25     ` [dm-devel] " Peter Zijlstra
2023-07-24 12:25     ` Peter Zijlstra
2023-07-24 12:25     ` [f2fs-dev] " Peter Zijlstra
2023-07-24 12:25     ` Peter Zijlstra
2023-07-24 12:25     ` Peter Zijlstra
2023-07-25  3:01     ` Qi Zheng
2023-07-25  3:01       ` [Cluster-devel] " Qi Zheng
2023-07-25  3:01       ` [dm-devel] " Qi Zheng
2023-07-25  3:01       ` Qi Zheng
2023-07-25  3:01       ` Qi Zheng via Linux-erofs
2023-07-25  3:01       ` Qi Zheng
2023-07-25  3:01       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-25  9:02   ` Muchun Song
2023-07-25  9:02     ` [Cluster-devel] " Muchun Song
2023-07-25  9:02     ` [dm-devel] " Muchun Song
2023-07-25  9:02     ` Muchun Song
2023-07-25  9:02     ` Muchun Song
2023-07-25  9:02     ` [f2fs-dev] " Muchun Song
2023-07-25  9:56     ` Qi Zheng
2023-07-25  9:56       ` [Cluster-devel] " Qi Zheng
2023-07-25  9:56       ` [dm-devel] " Qi Zheng
2023-07-25  9:56       ` Qi Zheng
2023-07-25  9:56       ` Qi Zheng via Linux-erofs
2023-07-25  9:56       ` Qi Zheng
2023-07-25  9:56       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-26  7:26   ` Dave Chinner
2023-07-26  7:26     ` [Cluster-devel] " Dave Chinner
2023-07-26  7:26     ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-07-26  7:26     ` [dm-devel] " Dave Chinner
2023-07-26  7:26     ` Dave Chinner
2023-07-26  7:26     ` Dave Chinner via Linux-erofs
2023-07-26  7:26     ` Dave Chinner via Virtualization
2023-07-26  7:26     ` Dave Chinner
2023-07-26  9:20     ` Qi Zheng
2023-07-26  9:20       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:20       ` [dm-devel] " Qi Zheng
2023-07-26  9:20       ` Qi Zheng
2023-07-26  9:20       ` Qi Zheng via Linux-erofs
2023-07-26  9:20       ` Qi Zheng
2023-07-26  9:20       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 04/47] kvm: mmu: dynamically allocate the x86-mmu shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-25  9:16   ` Muchun Song
2023-07-25  9:16     ` [Cluster-devel] " Muchun Song
2023-07-25  9:16     ` Muchun Song
2023-07-25  9:16     ` Muchun Song
2023-07-25  9:16     ` [dm-devel] " Muchun Song
2023-07-25  9:16     ` Muchun Song
2023-07-25  9:16     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 05/47] binder: dynamically allocate the android-binder shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:56   ` Qi Zheng
2023-07-24  9:56     ` [Cluster-devel] " Qi Zheng
2023-07-24  9:56     ` [dm-devel] " Qi Zheng
2023-07-24  9:56     ` Qi Zheng
2023-07-24  9:56     ` Qi Zheng via Linux-erofs
2023-07-24  9:56     ` Qi Zheng
2023-07-24  9:56     ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 06/47] drm/ttm: dynamically allocate the drm-ttm_pool shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-25  9:19   ` Muchun Song
2023-07-25  9:19     ` [Cluster-devel] " Muchun Song
2023-07-25  9:19     ` Muchun Song
2023-07-25  9:19     ` [dm-devel] " Muchun Song
2023-07-25  9:19     ` Muchun Song
2023-07-25  9:19     ` Muchun Song
2023-07-25  9:19     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 07/47] xenbus/backend: dynamically allocate the xen-backend shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-25  9:22   ` Muchun Song
2023-07-25  9:22     ` [Cluster-devel] " Muchun Song
2023-07-25  9:22     ` Muchun Song
2023-07-25  9:22     ` [dm-devel] " Muchun Song
2023-07-25  9:22     ` Muchun Song
2023-07-25  9:22     ` Muchun Song
2023-07-25  9:22     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 08/47] erofs: dynamically allocate the erofs-shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-25  9:24   ` Muchun Song
2023-07-25  9:24     ` [Cluster-devel] " Muchun Song
2023-07-25  9:24     ` Muchun Song
2023-07-25  9:24     ` [dm-devel] " Muchun Song
2023-07-25  9:24     ` Muchun Song
2023-07-25  9:24     ` Muchun Song
2023-07-25  9:24     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 09/47] f2fs: dynamically allocate the f2fs-shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-25  9:25   ` Muchun Song
2023-07-25  9:25     ` [Cluster-devel] " Muchun Song
2023-07-25  9:25     ` Muchun Song
2023-07-25  9:25     ` [dm-devel] " Muchun Song
2023-07-25  9:25     ` Muchun Song
2023-07-25  9:25     ` Muchun Song
2023-07-25  9:25     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 10/47] gfs2: dynamically allocate the gfs2-glock shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-26  6:43   ` Muchun Song
2023-07-26  6:43     ` [Cluster-devel] " Muchun Song
2023-07-26  6:43     ` [dm-devel] " Muchun Song
2023-07-26  6:43     ` Muchun Song
2023-07-26  6:43     ` Muchun Song
2023-07-26  6:43     ` Muchun Song
2023-07-26  6:43     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 11/47] gfs2: dynamically allocate the gfs2-qd shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  6:49   ` Muchun Song
2023-07-26  6:49     ` [Cluster-devel] " Muchun Song
2023-07-26  6:49     ` [dm-devel] " Muchun Song
2023-07-26  6:49     ` Muchun Song
2023-07-26  6:49     ` Muchun Song
2023-07-26  6:49     ` [f2fs-dev] " Muchun Song
2023-07-26  9:22     ` Qi Zheng
2023-07-26  9:22       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:22       ` [dm-devel] " Qi Zheng
2023-07-26  9:22       ` Qi Zheng via Linux-erofs
2023-07-26  9:22       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-26  9:22       ` Qi Zheng
2023-07-26  9:22       ` Qi Zheng
2023-07-24  9:43 ` [PATCH v2 12/47] NFSv4.2: dynamically allocate the nfs-xattr shrinkers Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-26  6:55   ` Muchun Song
2023-07-26  6:55     ` [Cluster-devel] " Muchun Song
2023-07-26  6:55     ` [dm-devel] " Muchun Song
2023-07-26  6:55     ` Muchun Song
2023-07-26  6:55     ` Muchun Song
2023-07-26  6:55     ` Muchun Song
2023-07-26  6:55     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 13/47] nfs: dynamically allocate the nfs-acl shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  6:57   ` Muchun Song
2023-07-26  6:57     ` [Cluster-devel] " Muchun Song
2023-07-26  6:57     ` [dm-devel] " Muchun Song
2023-07-26  6:57     ` Muchun Song
2023-07-26  6:57     ` Muchun Song
2023-07-26  6:57     ` Muchun Song
2023-07-26  6:57     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 14/47] nfsd: dynamically allocate the nfsd-filecache shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  6:59   ` Muchun Song
2023-07-26  6:59     ` [Cluster-devel] " Muchun Song
2023-07-26  6:59     ` [dm-devel] " Muchun Song
2023-07-26  6:59     ` Muchun Song
2023-07-26  6:59     ` Muchun Song
2023-07-26  6:59     ` Muchun Song
2023-07-26  6:59     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 15/47] quota: dynamically allocate the dquota-cache shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  6:59   ` Muchun Song
2023-07-26  6:59     ` [Cluster-devel] " Muchun Song
2023-07-26  6:59     ` [dm-devel] " Muchun Song
2023-07-26  6:59     ` Muchun Song
2023-07-26  6:59     ` Muchun Song
2023-07-26  6:59     ` Muchun Song
2023-07-26  6:59     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 16/47] ubifs: dynamically allocate the ubifs-slab shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:00   ` Muchun Song
2023-07-26  7:00     ` [Cluster-devel] " Muchun Song
2023-07-26  7:00     ` [dm-devel] " Muchun Song
2023-07-26  7:00     ` Muchun Song
2023-07-26  7:00     ` Muchun Song
2023-07-26  7:00     ` Muchun Song
2023-07-26  7:00     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 17/47] rcu: dynamically allocate the rcu-lazy shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:04   ` Muchun Song
2023-07-26  7:04     ` [Cluster-devel] " Muchun Song
2023-07-26  7:04     ` [dm-devel] " Muchun Song
2023-07-26  7:04     ` Muchun Song
2023-07-26  7:04     ` Muchun Song
2023-07-26  7:04     ` Muchun Song
2023-07-26  7:04     ` [f2fs-dev] " Muchun Song
2023-07-26  9:24     ` Qi Zheng
2023-07-26  9:24       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:24       ` [dm-devel] " Qi Zheng
2023-07-26  9:24       ` Qi Zheng
2023-07-26  9:24       ` Qi Zheng via Linux-erofs
2023-07-26  9:24       ` Qi Zheng
2023-07-26  9:24       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 18/47] rcu: dynamically allocate the rcu-kfree shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:05   ` Muchun Song
2023-07-26  7:05     ` [Cluster-devel] " Muchun Song
2023-07-26  7:05     ` [dm-devel] " Muchun Song
2023-07-26  7:05     ` Muchun Song
2023-07-26  7:05     ` Muchun Song
2023-07-26  7:05     ` [f2fs-dev] " Muchun Song
2023-07-26  7:05     ` Muchun Song
2023-07-24  9:43 ` [PATCH v2 19/47] mm: thp: dynamically allocate the thp-related shrinkers Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:10   ` Muchun Song
2023-07-26  7:10     ` [Cluster-devel] " Muchun Song
2023-07-26  7:10     ` [dm-devel] " Muchun Song
2023-07-26  7:10     ` Muchun Song
2023-07-26  7:10     ` Muchun Song
2023-07-26  7:10     ` [f2fs-dev] " Muchun Song
2023-07-26  9:27     ` Qi Zheng
2023-07-26  9:27       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:27       ` [dm-devel] " Qi Zheng
2023-07-26  9:27       ` Qi Zheng
2023-07-26  9:27       ` Qi Zheng via Linux-erofs
2023-07-26  9:27       ` Qi Zheng
2023-07-26  9:27       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 20/47] sunrpc: dynamically allocate the sunrpc_cred shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:11   ` Muchun Song
2023-07-26  7:11     ` [Cluster-devel] " Muchun Song
2023-07-26  7:11     ` [dm-devel] " Muchun Song
2023-07-26  7:11     ` Muchun Song
2023-07-26  7:11     ` Muchun Song
2023-07-26  7:11     ` Muchun Song
2023-07-26  7:11     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 21/47] mm: workingset: dynamically allocate the mm-shadow shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:13   ` Muchun Song
2023-07-26  7:13     ` [Cluster-devel] " Muchun Song
2023-07-26  7:13     ` [dm-devel] " Muchun Song
2023-07-26  7:13     ` Muchun Song
2023-07-26  7:13     ` Muchun Song
2023-07-26  7:13     ` Muchun Song
2023-07-26  7:13     ` [f2fs-dev] " Muchun Song
2023-07-26  9:28     ` Qi Zheng
2023-07-26  9:28       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:28       ` [dm-devel] " Qi Zheng
2023-07-26  9:28       ` Qi Zheng
2023-07-26  9:28       ` Qi Zheng via Linux-erofs
2023-07-26  9:28       ` Qi Zheng
2023-07-26  9:28       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 22/47] drm/i915: dynamically allocate the i915_gem_mm shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:15   ` Muchun Song
2023-07-26  7:15     ` [Cluster-devel] " Muchun Song
2023-07-26  7:15     ` [dm-devel] " Muchun Song
2023-07-26  7:15     ` Muchun Song
2023-07-26  7:15     ` Muchun Song
2023-07-26  7:15     ` Muchun Song
2023-07-26  7:15     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:24   ` Muchun Song
2023-07-26  7:24     ` [Cluster-devel] " Muchun Song
2023-07-26  7:24     ` [dm-devel] " Muchun Song
2023-07-26  7:24     ` Muchun Song
2023-07-26  7:24     ` Muchun Song
2023-07-26  7:24     ` [f2fs-dev] " Muchun Song
2023-07-26  9:31     ` Qi Zheng
2023-07-26  9:31       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:31       ` [dm-devel] " Qi Zheng
2023-07-26  9:31       ` Qi Zheng
2023-07-26  9:31       ` Qi Zheng via Linux-erofs
2023-07-26  9:31       ` Qi Zheng
2023-07-26  9:31       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` Qi Zheng [this message]
2023-07-24  9:43   ` [Cluster-devel] [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost shrinker Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24 11:17   ` Steven Price
2023-07-24 11:17     ` [Cluster-devel] " Steven Price
2023-07-24 11:17     ` [dm-devel] " Steven Price
2023-07-24 11:17     ` [f2fs-dev] " Steven Price
2023-07-24 11:17     ` Steven Price
2023-07-24 11:17     ` Steven Price
2023-07-25  3:05     ` Qi Zheng
2023-07-25  3:05       ` [Cluster-devel] " Qi Zheng
2023-07-25  3:05       ` [dm-devel] " Qi Zheng
2023-07-25  3:05       ` Qi Zheng
2023-07-25  3:05       ` Qi Zheng via Linux-erofs
2023-07-25  3:05       ` Qi Zheng
2023-07-25  3:05       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 25/47] dm: dynamically allocate the dm-bufio shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:24   ` Muchun Song
2023-07-26  7:24     ` [Cluster-devel] " Muchun Song
2023-07-26  7:24     ` [dm-devel] " Muchun Song
2023-07-26  7:24     ` Muchun Song
2023-07-26  7:24     ` Muchun Song
2023-07-26  7:24     ` Muchun Song
2023-07-26  7:24     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 26/47] dm zoned: dynamically allocate the dm-zoned-meta shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:25   ` Muchun Song
2023-07-26  7:25     ` [Cluster-devel] " Muchun Song
2023-07-26  7:25     ` [dm-devel] " Muchun Song
2023-07-26  7:25     ` Muchun Song
2023-07-26  7:25     ` Muchun Song
2023-07-26  7:25     ` Muchun Song
2023-07-26  7:25     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 27/47] md/raid5: dynamically allocate the md-raid5 shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:27   ` Muchun Song
2023-07-26  7:27     ` [Cluster-devel] " Muchun Song
2023-07-26  7:27     ` [dm-devel] " Muchun Song
2023-07-26  7:27     ` Muchun Song
2023-07-26  7:27     ` Muchun Song
2023-07-26  7:27     ` Muchun Song
2023-07-26  7:27     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 28/47] bcache: dynamically allocate the md-bcache shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:32   ` Muchun Song
2023-07-26  7:32     ` [Cluster-devel] " Muchun Song
2023-07-26  7:32     ` [dm-devel] " Muchun Song
2023-07-26  7:32     ` Muchun Song
2023-07-26  7:32     ` Muchun Song
2023-07-26  7:32     ` [f2fs-dev] " Muchun Song
2023-07-26  9:33     ` Qi Zheng
2023-07-26  9:33       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:33       ` [dm-devel] " Qi Zheng
2023-07-26  9:33       ` Qi Zheng via Linux-erofs
2023-07-26  9:33       ` Qi Zheng
2023-07-26  9:33       ` Qi Zheng
2023-07-26  9:33       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 29/47] vmw_balloon: dynamically allocate the vmw-balloon shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:35   ` Muchun Song
2023-07-26  7:35     ` [Cluster-devel] " Muchun Song
2023-07-26  7:35     ` Muchun Song
2023-07-26  7:35     ` [dm-devel] " Muchun Song
2023-07-26  7:35     ` Muchun Song
2023-07-26  7:35     ` Muchun Song
2023-07-26  7:35     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 30/47] virtio_balloon: dynamically allocate the virtio-balloon shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:36   ` Muchun Song
2023-07-26  7:36     ` [Cluster-devel] " Muchun Song
2023-07-26  7:36     ` Muchun Song
2023-07-26  7:36     ` [dm-devel] " Muchun Song
2023-07-26  7:36     ` Muchun Song
2023-07-26  7:36     ` Muchun Song
2023-07-26  7:36     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 31/47] mbcache: dynamically allocate the mbcache shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-26  7:39   ` Muchun Song
2023-07-26  7:39     ` [Cluster-devel] " Muchun Song
2023-07-26  7:39     ` Muchun Song
2023-07-26  7:39     ` [dm-devel] " Muchun Song
2023-07-26  7:39     ` Muchun Song
2023-07-26  7:39     ` [f2fs-dev] " Muchun Song
2023-07-26  7:39     ` Muchun Song
2023-07-24  9:43 ` [PATCH v2 32/47] ext4: dynamically allocate the ext4-es shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:40   ` Muchun Song
2023-07-26  7:40     ` [Cluster-devel] " Muchun Song
2023-07-26  7:40     ` Muchun Song
2023-07-26  7:40     ` [dm-devel] " Muchun Song
2023-07-26  7:40     ` Muchun Song
2023-07-26  7:40     ` Muchun Song
2023-07-26  7:40     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 33/47] jbd2,ext4: dynamically allocate the jbd2-journal shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] [PATCH v2 33/47] jbd2, ext4: " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [PATCH v2 33/47] jbd2,ext4: " Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] [PATCH v2 33/47] jbd2, ext4: " Qi Zheng via Linux-f2fs-devel
2023-07-26  7:41   ` [PATCH v2 33/47] jbd2,ext4: " Muchun Song
2023-07-26  7:41     ` [Cluster-devel] [PATCH v2 33/47] jbd2, ext4: " Muchun Song
2023-07-26  7:41     ` Muchun Song
2023-07-26  7:41     ` [dm-devel] " Muchun Song
2023-07-26  7:41     ` [PATCH v2 33/47] jbd2,ext4: " Muchun Song
2023-07-26  7:41     ` Muchun Song
2023-07-26  7:41     ` [f2fs-dev] [PATCH v2 33/47] jbd2, ext4: " Muchun Song
2023-07-24  9:43 ` [PATCH v2 34/47] nfsd: dynamically allocate the nfsd-client shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24 12:17   ` Jeff Layton
2023-07-24 12:17     ` [Cluster-devel] " Jeff Layton
2023-07-24 12:17     ` [dm-devel] " Jeff Layton
2023-07-24 12:17     ` [f2fs-dev] " Jeff Layton
2023-07-24 12:17     ` Jeff Layton
2023-07-24 12:17     ` Jeff Layton
2023-07-24  9:43 ` [PATCH v2 35/47] nfsd: dynamically allocate the nfsd-reply shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24 12:17   ` Jeff Layton
2023-07-24 12:17     ` [Cluster-devel] " Jeff Layton
2023-07-24 12:17     ` [dm-devel] " Jeff Layton
2023-07-24 12:17     ` [f2fs-dev] " Jeff Layton
2023-07-24 12:17     ` Jeff Layton
2023-07-24 12:17     ` Jeff Layton
2023-07-24  9:43 ` [PATCH v2 36/47] xfs: dynamically allocate the xfs-buf shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:42   ` Muchun Song
2023-07-26  7:42     ` [Cluster-devel] " Muchun Song
2023-07-26  7:42     ` Muchun Song
2023-07-26  7:42     ` [dm-devel] " Muchun Song
2023-07-26  7:42     ` Muchun Song
2023-07-26  7:42     ` Muchun Song
2023-07-26  7:42     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 37/47] xfs: dynamically allocate the xfs-inodegc shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-26  7:42   ` Muchun Song
2023-07-26  7:42     ` [Cluster-devel] " Muchun Song
2023-07-26  7:42     ` Muchun Song
2023-07-26  7:42     ` [dm-devel] " Muchun Song
2023-07-26  7:42     ` Muchun Song
2023-07-26  7:42     ` Muchun Song
2023-07-26  7:42     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 38/47] xfs: dynamically allocate the xfs-qm shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:43   ` Muchun Song
2023-07-26  7:43     ` [Cluster-devel] " Muchun Song
2023-07-26  7:43     ` Muchun Song
2023-07-26  7:43     ` [dm-devel] " Muchun Song
2023-07-26  7:43     ` Muchun Song
2023-07-26  7:43     ` Muchun Song
2023-07-26  7:43     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 39/47] zsmalloc: dynamically allocate the mm-zspool shrinker Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-26  7:43   ` Muchun Song
2023-07-26  7:43     ` [Cluster-devel] " Muchun Song
2023-07-26  7:43     ` Muchun Song
2023-07-26  7:43     ` [dm-devel] " Muchun Song
2023-07-26  7:43     ` Muchun Song
2023-07-26  7:43     ` Muchun Song
2023-07-26  7:43     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 40/47] fs: super: dynamically allocate the s_shrink Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:45   ` Muchun Song
2023-07-26  7:45     ` [Cluster-devel] " Muchun Song
2023-07-26  7:45     ` [dm-devel] " Muchun Song
2023-07-26  7:45     ` Muchun Song
2023-07-26  7:45     ` Muchun Song
2023-07-26  7:45     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 41/47] mm: shrinker: remove old APIs Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-26  7:46   ` Muchun Song
2023-07-26  7:46     ` [Cluster-devel] " Muchun Song
2023-07-26  7:46     ` Muchun Song
2023-07-26  7:46     ` [dm-devel] " Muchun Song
2023-07-26  7:46     ` Muchun Song
2023-07-26  7:46     ` Muchun Song
2023-07-26  7:46     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 42/47] drm/ttm: introduce pool_shrink_rwsem Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-26  7:56   ` Muchun Song
2023-07-26  7:56     ` [Cluster-devel] " Muchun Song
2023-07-26  7:56     ` Muchun Song
2023-07-26  7:56     ` [dm-devel] " Muchun Song
2023-07-26  7:56     ` Muchun Song
2023-07-26  7:56     ` Muchun Song
2023-07-26  7:56     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 43/47] mm: shrinker: add a secondary array for shrinker_info::{map, nr_deferred} Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-26  9:30   ` Muchun Song
2023-07-26  9:30     ` [Cluster-devel] " Muchun Song
2023-07-26  9:30     ` Muchun Song
2023-07-26  9:30     ` [dm-devel] " Muchun Song
2023-07-26  9:30     ` Muchun Song
2023-07-26  9:30     ` Muchun Song
2023-07-26  9:30     ` [f2fs-dev] " Muchun Song
2023-07-24  9:43 ` [PATCH v2 44/47] mm: shrinker: make global slab shrink lockless Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-26  8:08   ` Dave Chinner
2023-07-26  8:08     ` [Cluster-devel] " Dave Chinner
2023-07-26  8:08     ` [dm-devel] " Dave Chinner
2023-07-26  8:08     ` Dave Chinner via Linux-erofs
2023-07-26  8:08     ` Dave Chinner
2023-07-26  8:08     ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-07-26  8:08     ` Dave Chinner
2023-07-26  8:08     ` Dave Chinner via Virtualization
2023-07-26  9:14     ` Qi Zheng
2023-07-26  9:14       ` [Cluster-devel] " Qi Zheng
2023-07-26  9:14       ` [dm-devel] " Qi Zheng
2023-07-26  9:14       ` Qi Zheng
2023-07-26  9:14       ` Qi Zheng via Linux-erofs
2023-07-26  9:14       ` Qi Zheng
2023-07-26  9:14       ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-26 23:09       ` Dave Chinner
2023-07-26 23:09         ` [Cluster-devel] " Dave Chinner
2023-07-26 23:09         ` [dm-devel] " Dave Chinner
2023-07-26 23:09         ` Dave Chinner
2023-07-26 23:09         ` Dave Chinner
2023-07-26 23:09         ` Dave Chinner via Linux-erofs
2023-07-26 23:09         ` Dave Chinner via Virtualization
2023-07-26 23:09         ` [f2fs-dev] " Dave Chinner via Linux-f2fs-devel
2023-07-27  3:34         ` Qi Zheng
2023-07-27  3:34           ` [Cluster-devel] " Qi Zheng
2023-07-27  3:34           ` [dm-devel] " Qi Zheng
2023-07-27  3:34           ` Qi Zheng
2023-07-27  3:34           ` Qi Zheng
2023-07-27  3:34           ` Qi Zheng via Linux-erofs
2023-07-27  3:34           ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43 ` [PATCH v2 45/47] mm: shrinker: make memcg " Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43 ` [PATCH v2 46/47] mm: shrinker: hold write lock to reparent shrinker nr_deferred Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43 ` [PATCH v2 47/47] mm: shrinker: convert shrinker_rwsem to mutex Qi Zheng
2023-07-24  9:43   ` [Cluster-devel] " Qi Zheng
2023-07-24  9:43   ` [dm-devel] " Qi Zheng
2023-07-24  9:43   ` [f2fs-dev] " Qi Zheng via Linux-f2fs-devel
2023-07-24  9:43   ` Qi Zheng
2023-07-24  9:43   ` Qi Zheng via Linux-erofs
2023-07-24  9:43   ` Qi Zheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230724094354.90817-25-zhengqi.arch@bytedance.com \
    --to=zhengqi.arch@bytedance.com \
    --cc=akpm@linux-foundation.org \
    --cc=brauner@kernel.org \
    --cc=cel@kernel.org \
    --cc=cluster-devel@redhat.com \
    --cc=david@fromorbit.com \
    --cc=djwong@kernel.org \
    --cc=dm-devel@redhat.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=muchun.song@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=paulmck@kernel.org \
    --cc=rcu@vger.kernel.org \
    --cc=roman.gushchin@linux.dev \
    --cc=senozhatsky@chromium.org \
    --cc=steven.price@arm.com \
    --cc=tkhai@ya.ru \
    --cc=tytso@mit.edu \
    --cc=vbabka@suse.cz \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    --cc=yujie.liu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.