linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] debugobjects: install CPU hotplug callback
@ 2020-09-08  6:27 qiang.zhang
  2020-09-08 18:23 ` Waiman Long
  2020-10-01 14:40 ` [tip: core/debugobjects] debugobjects: Free per CPU pool after CPU unplug tip-bot2 for Zqiang
  0 siblings, 2 replies; 6+ messages in thread
From: qiang.zhang @ 2020-09-08  6:27 UTC (permalink / raw)
  To: tglx, longman, mingo, elver; +Cc: linux-kernel

From: Zqiang <qiang.zhang@windriver.com>

Due to CPU hotplug, it may never be online after it's offline,
some objects in percpu pool is never free. in order to avoid
this happening, install CPU hotplug callback, call this callback
func to free objects in percpu pool when CPU going offline.

Signed-off-by: Zqiang <qiang.zhang@windriver.com>
---
 v1->v2:
 Modify submission information.

 v2->v3:
 In CPU hotplug callback func, add clear percpu pool "obj_free" operation.
 capitalize 'CPU', and use shorter preprocessor sequence.

 include/linux/cpuhotplug.h |  1 +
 lib/debugobjects.c         | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index 3215023d4852..0c39d57e5342 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -36,6 +36,7 @@ enum cpuhp_state {
 	CPUHP_X86_MCE_DEAD,
 	CPUHP_VIRT_NET_DEAD,
 	CPUHP_SLUB_DEAD,
+	CPUHP_DEBUG_OBJ_DEAD,
 	CPUHP_MM_WRITEBACK_DEAD,
 	CPUHP_MM_VMSTAT_DEAD,
 	CPUHP_SOFTIRQ_DEAD,
diff --git a/lib/debugobjects.c b/lib/debugobjects.c
index fe4557955d97..bb69a02c3e7b 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 #include <linux/hash.h>
 #include <linux/kmemleak.h>
+#include <linux/cpu.h>
 
 #define ODEBUG_HASH_BITS	14
 #define ODEBUG_HASH_SIZE	(1 << ODEBUG_HASH_BITS)
@@ -433,6 +434,24 @@ static void free_object(struct debug_obj *obj)
 	}
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+static int object_cpu_offline(unsigned int cpu)
+{
+	struct debug_percpu_free *percpu_pool;
+	struct hlist_node *tmp;
+	struct debug_obj *obj;
+
+	percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu);
+	hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) {
+		hlist_del(&obj->node);
+		kmem_cache_free(obj_cache, obj);
+	}
+	percpu_pool->obj_free = 0;
+
+	return 0;
+}
+#endif
+
 /*
  * We run out of memory. That means we probably have tons of objects
  * allocated.
@@ -1367,6 +1386,11 @@ void __init debug_objects_mem_init(void)
 	} else
 		debug_objects_selftest();
 
+#ifdef CONFIG_HOTPLUG_CPU
+	cpuhp_setup_state_nocalls(CPUHP_DEBUG_OBJ_DEAD, "object:offline", NULL,
+					object_cpu_offline);
+#endif
+
 	/*
 	 * Increase the thresholds for allocating and freeing objects
 	 * according to the number of possible CPUs available in the system.
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] debugobjects: install CPU hotplug callback
  2020-09-08  6:27 [PATCH v3] debugobjects: install CPU hotplug callback qiang.zhang
@ 2020-09-08 18:23 ` Waiman Long
  2020-09-10  1:48   ` 回复: " Zhang, Qiang
  2020-10-01 14:40 ` [tip: core/debugobjects] debugobjects: Free per CPU pool after CPU unplug tip-bot2 for Zqiang
  1 sibling, 1 reply; 6+ messages in thread
From: Waiman Long @ 2020-09-08 18:23 UTC (permalink / raw)
  To: qiang.zhang, tglx, mingo, elver; +Cc: linux-kernel

On 9/8/20 2:27 AM, qiang.zhang@windriver.com wrote:
> From: Zqiang <qiang.zhang@windriver.com>
>
> Due to CPU hotplug, it may never be online after it's offline,
> some objects in percpu pool is never free. in order to avoid
> this happening, install CPU hotplug callback, call this callback
> func to free objects in percpu pool when CPU going offline.
>
> Signed-off-by: Zqiang <qiang.zhang@windriver.com>
> ---
>   v1->v2:
>   Modify submission information.
>
>   v2->v3:
>   In CPU hotplug callback func, add clear percpu pool "obj_free" operation.
>   capitalize 'CPU', and use shorter preprocessor sequence.
>
>   include/linux/cpuhotplug.h |  1 +
>   lib/debugobjects.c         | 24 ++++++++++++++++++++++++
>   2 files changed, 25 insertions(+)
>
> diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
> index 3215023d4852..0c39d57e5342 100644
> --- a/include/linux/cpuhotplug.h
> +++ b/include/linux/cpuhotplug.h
> @@ -36,6 +36,7 @@ enum cpuhp_state {
>   	CPUHP_X86_MCE_DEAD,
>   	CPUHP_VIRT_NET_DEAD,
>   	CPUHP_SLUB_DEAD,
> +	CPUHP_DEBUG_OBJ_DEAD,
>   	CPUHP_MM_WRITEBACK_DEAD,
>   	CPUHP_MM_VMSTAT_DEAD,
>   	CPUHP_SOFTIRQ_DEAD,
> diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> index fe4557955d97..bb69a02c3e7b 100644
> --- a/lib/debugobjects.c
> +++ b/lib/debugobjects.c
> @@ -19,6 +19,7 @@
>   #include <linux/slab.h>
>   #include <linux/hash.h>
>   #include <linux/kmemleak.h>
> +#include <linux/cpu.h>
>   
>   #define ODEBUG_HASH_BITS	14
>   #define ODEBUG_HASH_SIZE	(1 << ODEBUG_HASH_BITS)
> @@ -433,6 +434,24 @@ static void free_object(struct debug_obj *obj)
>   	}
>   }
>   
> +#ifdef CONFIG_HOTPLUG_CPU
> +static int object_cpu_offline(unsigned int cpu)
> +{
> +	struct debug_percpu_free *percpu_pool;
> +	struct hlist_node *tmp;
> +	struct debug_obj *obj;
> +
> +	percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu);
> +	hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) {
> +		hlist_del(&obj->node);
> +		kmem_cache_free(obj_cache, obj);
> +	}
> +	percpu_pool->obj_free = 0;

For pointer, it is better to use NULL for clarity.

Cheers,
Longman

> +
> +	return 0;
> +}
> +#endif
> +
>   /*
>    * We run out of memory. That means we probably have tons of objects
>    * allocated.
> @@ -1367,6 +1386,11 @@ void __init debug_objects_mem_init(void)
>   	} else
>   		debug_objects_selftest();
>   
> +#ifdef CONFIG_HOTPLUG_CPU
> +	cpuhp_setup_state_nocalls(CPUHP_DEBUG_OBJ_DEAD, "object:offline", NULL,
> +					object_cpu_offline);
> +#endif
> +
>   	/*
>   	 * Increase the thresholds for allocating and freeing objects
>   	 * according to the number of possible CPUs available in the system.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* 回复: [PATCH v3] debugobjects: install CPU hotplug callback
  2020-09-08 18:23 ` Waiman Long
@ 2020-09-10  1:48   ` Zhang, Qiang
  2020-09-10  2:50     ` Waiman Long
  0 siblings, 1 reply; 6+ messages in thread
From: Zhang, Qiang @ 2020-09-10  1:48 UTC (permalink / raw)
  To: Waiman Long, tglx, mingo, elver; +Cc: linux-kernel



________________________________________
发件人: Waiman Long <longman@redhat.com>
发送时间: 2020年9月9日 2:23
收件人: Zhang, Qiang; tglx@linutronix.de; mingo@kernel.org; elver@google.com
抄送: linux-kernel@vger.kernel.org
主题: Re: [PATCH v3] debugobjects: install CPU hotplug callback

On 9/8/20 2:27 AM, qiang.zhang@windriver.com wrote:
> From: Zqiang <qiang.zhang@windriver.com>
>
> Due to CPU hotplug, it may never be online after it's offline,
> some objects in percpu pool is never free. in order to avoid
> this happening, install CPU hotplug callback, call this callback
> func to free objects in percpu pool when CPU going offline.
>
> Signed-off-by: Zqiang <qiang.zhang@windriver.com>
> ---
>   v1->v2:
>   Modify submission information.
>
>   v2->v3:
>   In CPU hotplug callback func, add clear percpu pool "obj_free" operation.
>   capitalize 'CPU', and use shorter preprocessor sequence.
>
>   include/linux/cpuhotplug.h |  1 +
>   lib/debugobjects.c         | 24 ++++++++++++++++++++++++
>   2 files changed, 25 insertions(+)
>
> diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
> index 3215023d4852..0c39d57e5342 100644
> --- a/include/linux/cpuhotplug.h
> +++ b/include/linux/cpuhotplug.h
> @@ -36,6 +36,7 @@ enum cpuhp_state {
>       CPUHP_X86_MCE_DEAD,
>       CPUHP_VIRT_NET_DEAD,
>       CPUHP_SLUB_DEAD,
> +     CPUHP_DEBUG_OBJ_DEAD,
>       CPUHP_MM_WRITEBACK_DEAD,
>       CPUHP_MM_VMSTAT_DEAD,
>       CPUHP_SOFTIRQ_DEAD,
> diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> index fe4557955d97..bb69a02c3e7b 100644
> --- a/lib/debugobjects.c
> +++ b/lib/debugobjects.c
> @@ -19,6 +19,7 @@
>   #include <linux/slab.h>
>   #include <linux/hash.h>
>   #include <linux/kmemleak.h>
> +#include <linux/cpu.h>
>
>   #define ODEBUG_HASH_BITS    14
>   #define ODEBUG_HASH_SIZE    (1 << ODEBUG_HASH_BITS)
> @@ -433,6 +434,24 @@ static void free_object(struct debug_obj *obj)
>       }
>   }
>
> +#ifdef CONFIG_HOTPLUG_CPU
> +static int object_cpu_offline(unsigned int cpu)
> +{
> +     struct debug_percpu_free *percpu_pool;
> +     struct hlist_node *tmp;
> +     struct debug_obj *obj;
> +
> +     percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu);
> +     hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) {
> +             hlist_del(&obj->node);
> +             kmem_cache_free(obj_cache, obj);
> +     }
> +     percpu_pool->obj_free = 0;

>>For pointer, it is better to use NULL for clarity.

>>Cheers,
>>Longman

Do you mean "->obj_free" variable ?   this represents the number of free objects in  percpu_pool .

> +
> +     return 0;
> +}
> +#endif
> +
>   /*
>    * We run out of memory. That means we probably have tons of objects
>    * allocated.
> @@ -1367,6 +1386,11 @@ void __init debug_objects_mem_init(void)
>       } else
>               debug_objects_selftest();
>
> +#ifdef CONFIG_HOTPLUG_CPU
> +     cpuhp_setup_state_nocalls(CPUHP_DEBUG_OBJ_DEAD, "object:offline", NULL,
> +                                     object_cpu_offline);
> +#endif
> +
>       /*
>        * Increase the thresholds for allocating and freeing objects
>        * according to the number of possible CPUs available in the system.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: 回复: [PATCH v3] debugobjects: install CPU hotplug callback
  2020-09-10  1:48   ` 回复: " Zhang, Qiang
@ 2020-09-10  2:50     ` Waiman Long
  2020-09-16  6:00       ` 回复: " Zhang, Qiang
  0 siblings, 1 reply; 6+ messages in thread
From: Waiman Long @ 2020-09-10  2:50 UTC (permalink / raw)
  To: Zhang, Qiang, tglx, mingo, elver; +Cc: linux-kernel

On 9/9/20 9:48 PM, Zhang, Qiang wrote:
>
> ________________________________________
> 发件人: Waiman Long <longman@redhat.com>
> 发送时间: 2020年9月9日 2:23
> 收件人: Zhang, Qiang; tglx@linutronix.de; mingo@kernel.org; elver@google.com
> 抄送: linux-kernel@vger.kernel.org
> 主题: Re: [PATCH v3] debugobjects: install CPU hotplug callback
>
> On 9/8/20 2:27 AM, qiang.zhang@windriver.com wrote:
>> From: Zqiang <qiang.zhang@windriver.com>
>>
>> Due to CPU hotplug, it may never be online after it's offline,
>> some objects in percpu pool is never free. in order to avoid
>> this happening, install CPU hotplug callback, call this callback
>> func to free objects in percpu pool when CPU going offline.
>>
>> Signed-off-by: Zqiang <qiang.zhang@windriver.com>
>> ---
>>    v1->v2:
>>    Modify submission information.
>>
>>    v2->v3:
>>    In CPU hotplug callback func, add clear percpu pool "obj_free" operation.
>>    capitalize 'CPU', and use shorter preprocessor sequence.
>>
>>    include/linux/cpuhotplug.h |  1 +
>>    lib/debugobjects.c         | 24 ++++++++++++++++++++++++
>>    2 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
>> index 3215023d4852..0c39d57e5342 100644
>> --- a/include/linux/cpuhotplug.h
>> +++ b/include/linux/cpuhotplug.h
>> @@ -36,6 +36,7 @@ enum cpuhp_state {
>>        CPUHP_X86_MCE_DEAD,
>>        CPUHP_VIRT_NET_DEAD,
>>        CPUHP_SLUB_DEAD,
>> +     CPUHP_DEBUG_OBJ_DEAD,
>>        CPUHP_MM_WRITEBACK_DEAD,
>>        CPUHP_MM_VMSTAT_DEAD,
>>        CPUHP_SOFTIRQ_DEAD,
>> diff --git a/lib/debugobjects.c b/lib/debugobjects.c
>> index fe4557955d97..bb69a02c3e7b 100644
>> --- a/lib/debugobjects.c
>> +++ b/lib/debugobjects.c
>> @@ -19,6 +19,7 @@
>>    #include <linux/slab.h>
>>    #include <linux/hash.h>
>>    #include <linux/kmemleak.h>
>> +#include <linux/cpu.h>
>>
>>    #define ODEBUG_HASH_BITS    14
>>    #define ODEBUG_HASH_SIZE    (1 << ODEBUG_HASH_BITS)
>> @@ -433,6 +434,24 @@ static void free_object(struct debug_obj *obj)
>>        }
>>    }
>>
>> +#ifdef CONFIG_HOTPLUG_CPU
>> +static int object_cpu_offline(unsigned int cpu)
>> +{
>> +     struct debug_percpu_free *percpu_pool;
>> +     struct hlist_node *tmp;
>> +     struct debug_obj *obj;
>> +
>> +     percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu);
>> +     hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) {
>> +             hlist_del(&obj->node);
>> +             kmem_cache_free(obj_cache, obj);
>> +     }
>> +     percpu_pool->obj_free = 0;
>>> For pointer, it is better to use NULL for clarity.
>>> Cheers,
>>> Longman
> Do you mean "->obj_free" variable ?   this represents the number of free objects in  percpu_pool .
>
You are right. I got confused. Sorry for the noise.

Cheers,
Longman


^ permalink raw reply	[flat|nested] 6+ messages in thread

* 回复: 回复: [PATCH v3] debugobjects: install CPU hotplug callback
  2020-09-10  2:50     ` Waiman Long
@ 2020-09-16  6:00       ` Zhang, Qiang
  0 siblings, 0 replies; 6+ messages in thread
From: Zhang, Qiang @ 2020-09-16  6:00 UTC (permalink / raw)
  To: tglx, mingo, elver, Waiman Long; +Cc: linux-kernel



________________________________________
发件人: Waiman Long <longman@redhat.com>
发送时间: 2020年9月10日 10:50
收件人: Zhang, Qiang; tglx@linutronix.de; mingo@kernel.org; elver@google.com
抄送: linux-kernel@vger.kernel.org
主题: Re: 回复: [PATCH v3] debugobjects: install CPU hotplug callback

On 9/9/20 9:48 PM, Zhang, Qiang wrote:
>
> ________________________________________
> 发件人: Waiman Long <longman@redhat.com>
> 发送时间: 2020年9月9日 2:23
> 收件人: Zhang, Qiang; tglx@linutronix.de; mingo@kernel.org; elver@google.com
> 抄送: linux-kernel@vger.kernel.org
> 主题: Re: [PATCH v3] debugobjects: install CPU hotplug callback
>
> On 9/8/20 2:27 AM, qiang.zhang@windriver.com wrote:
>> From: Zqiang <qiang.zhang@windriver.com>
>>
>> Due to CPU hotplug, it may never be online after it's offline,
>> some objects in percpu pool is never free. in order to avoid
>> this happening, install CPU hotplug callback, call this callback
>> func to free objects in percpu pool when CPU going offline.
>>
>> Signed-off-by: Zqiang <qiang.zhang@windriver.com>
>> ---
>>    v1->v2:
>>    Modify submission information.
>>
>>    v2->v3:
>>    In CPU hotplug callback func, add clear percpu pool "obj_free" operation.
>>    capitalize 'CPU', and use shorter preprocessor sequence.
>>
>>    include/linux/cpuhotplug.h |  1 +
>>    lib/debugobjects.c         | 24 ++++++++++++++++++++++++
>>    2 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
>> index 3215023d4852..0c39d57e5342 100644
>> --- a/include/linux/cpuhotplug.h
>> +++ b/include/linux/cpuhotplug.h
>> @@ -36,6 +36,7 @@ enum cpuhp_state {
>>        CPUHP_X86_MCE_DEAD,
>>        CPUHP_VIRT_NET_DEAD,
>>        CPUHP_SLUB_DEAD,
>> +     CPUHP_DEBUG_OBJ_DEAD,
>>        CPUHP_MM_WRITEBACK_DEAD,
>>        CPUHP_MM_VMSTAT_DEAD,
>>        CPUHP_SOFTIRQ_DEAD,
>> diff --git a/lib/debugobjects.c b/lib/debugobjects.c
>> index fe4557955d97..bb69a02c3e7b 100644
>> --- a/lib/debugobjects.c
>> +++ b/lib/debugobjects.c
>> @@ -19,6 +19,7 @@
>>    #include <linux/slab.h>
>>    #include <linux/hash.h>
>>    #include <linux/kmemleak.h>
>> +#include <linux/cpu.h>
>>
>>    #define ODEBUG_HASH_BITS    14
>>    #define ODEBUG_HASH_SIZE    (1 << ODEBUG_HASH_BITS)
>> @@ -433,6 +434,24 @@ static void free_object(struct debug_obj *obj)
>>        }
>>    }
>>
>> +#ifdef CONFIG_HOTPLUG_CPU
>> +static int object_cpu_offline(unsigned int cpu)
>> +{
>> +     struct debug_percpu_free *percpu_pool;
>> +     struct hlist_node *tmp;
>> +     struct debug_obj *obj;
>> +
>> +     percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu);
>> +     hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) {
>> +             hlist_del(&obj->node);
>> +             kmem_cache_free(obj_cache, obj);
>> +     }
>> +     percpu_pool->obj_free = 0;
>>> For pointer, it is better to use NULL for clarity.
>>> Cheers,
>>> Longman
> Do you mean "->obj_free" variable ?   this represents the number of free objects in  percpu_pool .
>
>>You are right. I got confused. Sorry for the noise.

>>Cheers,
>>Longman

Hello tglx, mingo

 Is this patch acceptable? 

Thanks 

Qiang

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [tip: core/debugobjects] debugobjects: Free per CPU pool after CPU unplug
  2020-09-08  6:27 [PATCH v3] debugobjects: install CPU hotplug callback qiang.zhang
  2020-09-08 18:23 ` Waiman Long
@ 2020-10-01 14:40 ` tip-bot2 for Zqiang
  1 sibling, 0 replies; 6+ messages in thread
From: tip-bot2 for Zqiang @ 2020-10-01 14:40 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Zqiang, Thomas Gleixner, Waiman Long, x86, LKML

The following commit has been merged into the core/debugobjects branch of tip:

Commit-ID:     88451f2cd3cec2abc30debdf129422d2699d1eba
Gitweb:        https://git.kernel.org/tip/88451f2cd3cec2abc30debdf129422d2699d1eba
Author:        Zqiang <qiang.zhang@windriver.com>
AuthorDate:    Tue, 08 Sep 2020 14:27:09 +08:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Thu, 01 Oct 2020 16:13:54 +02:00

debugobjects: Free per CPU pool after CPU unplug

If a CPU is offlined the debug objects per CPU pool is not cleaned up. If
the CPU is never onlined again then the objects in the pool are wasted.

Add a CPU hotplug callback which is invoked after the CPU is dead to free
the pool.

[ tglx: Massaged changelog and added comment about remote access safety ]

Signed-off-by: Zqiang <qiang.zhang@windriver.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Waiman Long <longman@redhat.com>
Link: https://lore.kernel.org/r/20200908062709.11441-1-qiang.zhang@windriver.com

---
 include/linux/cpuhotplug.h |  1 +
 lib/debugobjects.c         | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index bf9181c..6f524bb 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -36,6 +36,7 @@ enum cpuhp_state {
 	CPUHP_X86_MCE_DEAD,
 	CPUHP_VIRT_NET_DEAD,
 	CPUHP_SLUB_DEAD,
+	CPUHP_DEBUG_OBJ_DEAD,
 	CPUHP_MM_WRITEBACK_DEAD,
 	CPUHP_MM_VMSTAT_DEAD,
 	CPUHP_SOFTIRQ_DEAD,
diff --git a/lib/debugobjects.c b/lib/debugobjects.c
index e2a3171..9e14ae0 100644
--- a/lib/debugobjects.c
+++ b/lib/debugobjects.c
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 #include <linux/hash.h>
 #include <linux/kmemleak.h>
+#include <linux/cpu.h>
 
 #define ODEBUG_HASH_BITS	14
 #define ODEBUG_HASH_SIZE	(1 << ODEBUG_HASH_BITS)
@@ -433,6 +434,25 @@ static void free_object(struct debug_obj *obj)
 	}
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+static int object_cpu_offline(unsigned int cpu)
+{
+	struct debug_percpu_free *percpu_pool;
+	struct hlist_node *tmp;
+	struct debug_obj *obj;
+
+	/* Remote access is safe as the CPU is dead already */
+	percpu_pool = per_cpu_ptr(&percpu_obj_pool, cpu);
+	hlist_for_each_entry_safe(obj, tmp, &percpu_pool->free_objs, node) {
+		hlist_del(&obj->node);
+		kmem_cache_free(obj_cache, obj);
+	}
+	percpu_pool->obj_free = 0;
+
+	return 0;
+}
+#endif
+
 /*
  * We run out of memory. That means we probably have tons of objects
  * allocated.
@@ -1367,6 +1387,11 @@ void __init debug_objects_mem_init(void)
 	} else
 		debug_objects_selftest();
 
+#ifdef CONFIG_HOTPLUG_CPU
+	cpuhp_setup_state_nocalls(CPUHP_DEBUG_OBJ_DEAD, "object:offline", NULL,
+					object_cpu_offline);
+#endif
+
 	/*
 	 * Increase the thresholds for allocating and freeing objects
 	 * according to the number of possible CPUs available in the system.

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-10-01 14:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-08  6:27 [PATCH v3] debugobjects: install CPU hotplug callback qiang.zhang
2020-09-08 18:23 ` Waiman Long
2020-09-10  1:48   ` 回复: " Zhang, Qiang
2020-09-10  2:50     ` Waiman Long
2020-09-16  6:00       ` 回复: " Zhang, Qiang
2020-10-01 14:40 ` [tip: core/debugobjects] debugobjects: Free per CPU pool after CPU unplug tip-bot2 for Zqiang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).