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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 23/47] drm/msm: dynamically allocate the drm-msm_gem shrinker
Date: Mon, 24 Jul 2023 17:43:30 +0800	[thread overview]
Message-ID: <20230724094354.90817-24-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-msm_gem 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 msm_drm_private.

Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
---
 drivers/gpu/drm/msm/msm_drv.c          |  4 ++-
 drivers/gpu/drm/msm/msm_drv.h          |  4 +--
 drivers/gpu/drm/msm/msm_gem_shrinker.c | 36 ++++++++++++++++----------
 3 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 891eff8433a9..7f6933be703f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -461,7 +461,9 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	if (ret)
 		goto err_msm_uninit;
 
-	msm_gem_shrinker_init(ddev);
+	ret = msm_gem_shrinker_init(ddev);
+	if (ret)
+		goto err_msm_uninit;
 
 	if (priv->kms_init) {
 		ret = priv->kms_init(ddev);
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index e13a8cbd61c9..84523d4a1e58 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -217,7 +217,7 @@ struct msm_drm_private {
 	} vram;
 
 	struct notifier_block vmap_notifier;
-	struct shrinker shrinker;
+	struct shrinker *shrinker;
 
 	struct drm_atomic_state *pm_state;
 
@@ -279,7 +279,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 unsigned long msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan);
 #endif
 
-void msm_gem_shrinker_init(struct drm_device *dev);
+int msm_gem_shrinker_init(struct drm_device *dev);
 void msm_gem_shrinker_cleanup(struct drm_device *dev);
 
 int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
diff --git a/drivers/gpu/drm/msm/msm_gem_shrinker.c b/drivers/gpu/drm/msm/msm_gem_shrinker.c
index f38296ad8743..7daab1298c11 100644
--- a/drivers/gpu/drm/msm/msm_gem_shrinker.c
+++ b/drivers/gpu/drm/msm/msm_gem_shrinker.c
@@ -34,8 +34,7 @@ static bool can_block(struct shrink_control *sc)
 static unsigned long
 msm_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	unsigned count = priv->lru.dontneed.count;
 
 	if (can_swap())
@@ -100,8 +99,7 @@ active_evict(struct drm_gem_object *obj)
 static unsigned long
 msm_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
 {
-	struct msm_drm_private *priv =
-		container_of(shrinker, struct msm_drm_private, shrinker);
+	struct msm_drm_private *priv = shrinker->private_data;
 	struct {
 		struct drm_gem_lru *lru;
 		bool (*shrink)(struct drm_gem_object *obj);
@@ -148,10 +146,11 @@ msm_gem_shrinker_shrink(struct drm_device *dev, unsigned long nr_to_scan)
 	struct shrink_control sc = {
 		.nr_to_scan = nr_to_scan,
 	};
-	int ret;
+	unsigned long ret = SHRINK_STOP;
 
 	fs_reclaim_acquire(GFP_KERNEL);
-	ret = msm_gem_shrinker_scan(&priv->shrinker, &sc);
+	if (priv->shrinker)
+		ret = msm_gem_shrinker_scan(priv->shrinker, &sc);
 	fs_reclaim_release(GFP_KERNEL);
 
 	return ret;
@@ -210,16 +209,27 @@ msm_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
  *
  * This function registers and sets up the msm shrinker.
  */
-void msm_gem_shrinker_init(struct drm_device *dev)
+int msm_gem_shrinker_init(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
-	priv->shrinker.count_objects = msm_gem_shrinker_count;
-	priv->shrinker.scan_objects = msm_gem_shrinker_scan;
-	priv->shrinker.seeks = DEFAULT_SEEKS;
-	WARN_ON(register_shrinker(&priv->shrinker, "drm-msm_gem"));
+
+	priv->shrinker = shrinker_alloc(0, "drm-msm_gem");
+	if (!priv->shrinker) {
+		WARN_ON(1);
+		return -ENOMEM;
+	}
+
+	priv->shrinker->count_objects = msm_gem_shrinker_count;
+	priv->shrinker->scan_objects = msm_gem_shrinker_scan;
+	priv->shrinker->seeks = DEFAULT_SEEKS;
+	priv->shrinker->private_data = priv;
+
+	shrinker_register(priv->shrinker);
 
 	priv->vmap_notifier.notifier_call = msm_gem_shrinker_vmap;
 	WARN_ON(register_vmap_purge_notifier(&priv->vmap_notifier));
+
+	return 0;
 }
 
 /**
@@ -232,8 +242,8 @@ void msm_gem_shrinker_cleanup(struct drm_device *dev)
 {
 	struct msm_drm_private *priv = dev->dev_private;
 
-	if (priv->shrinker.nr_deferred) {
+	if (priv->shrinker) {
 		WARN_ON(unregister_vmap_purge_notifier(&priv->vmap_notifier));
-		unregister_shrinker(&priv->shrinker);
+		shrinker_unregister(priv->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 ` Qi Zheng [this message]
2023-07-24  9:43   ` [Cluster-devel] [PATCH v2 23/47] drm/msm: dynamically allocate the drm-msm_gem 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-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 ` [PATCH v2 24/47] drm/panfrost: dynamically allocate the drm-panfrost 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 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-24-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.