Re: [patch 06/25] debugobjects: Reuse put_objects() on OOM
From: Leizhen (ThunderTown)
Date: Wed Oct 09 2024 - 22:39:01 EST
On 2024/10/8 0:49, Thomas Gleixner wrote:
> Reuse the helper function instead of having a open coded copy.
Reviewed-by: Zhen Lei <thunder.leizhen@xxxxxxxxxx>
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> ---
> lib/debugobjects.c | 26 +++++++-------------------
> 1 file changed, 7 insertions(+), 19 deletions(-)
>
> --- a/lib/debugobjects.c
> +++ b/lib/debugobjects.c
> @@ -429,7 +429,6 @@ static void free_object(struct debug_obj
> }
> }
>
> -#ifdef CONFIG_HOTPLUG_CPU
> static void put_objects(struct hlist_head *list)
> {
> struct hlist_node *tmp;
> @@ -445,6 +444,7 @@ static void put_objects(struct hlist_hea
> }
> }
>
> +#ifdef CONFIG_HOTPLUG_CPU
> static int object_cpu_offline(unsigned int cpu)
> {
> /* Remote access is safe as the CPU is dead already */
> @@ -456,31 +456,19 @@ static int object_cpu_offline(unsigned i
> }
> #endif
>
> -/*
> - * We run out of memory. That means we probably have tons of objects
> - * allocated.
> - */
> +/* Out of memory. Free all objects from hash */
> static void debug_objects_oom(void)
> {
> struct debug_bucket *db = obj_hash;
> - struct hlist_node *tmp;
> HLIST_HEAD(freelist);
> - struct debug_obj *obj;
> - unsigned long flags;
> - int i;
>
> pr_warn("Out of memory. ODEBUG disabled\n");
>
> - for (i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
> - raw_spin_lock_irqsave(&db->lock, flags);
> - hlist_move_list(&db->list, &freelist);
> - raw_spin_unlock_irqrestore(&db->lock, flags);
> -
> - /* Now free them */
> - hlist_for_each_entry_safe(obj, tmp, &freelist, node) {
> - hlist_del(&obj->node);
> - free_object(obj);
> - }
> + for (int i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
> + scoped_guard(raw_spinlock_irqsave, &db->lock)
> + hlist_move_list(&db->list, &freelist);
> +
> + put_objects(&freelist);
> }
> }
>
>
> .
>
--
Regards,
Zhen Lei