diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2024-10-07 18:49:58 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2024-10-15 17:30:31 +0200 |
commit | 49968cf18154d6391e84c68520149232057ca62c (patch) | |
tree | 02c7e6a8413085fe7126fe90d9988d287b5e4f7f /lib/debugobjects.c | |
parent | a2a702383e8baa22ee66ee60f1e036835a1ef42e (diff) | |
download | linux-stable-49968cf18154d6391e84c68520149232057ca62c.tar.gz linux-stable-49968cf18154d6391e84c68520149232057ca62c.tar.bz2 linux-stable-49968cf18154d6391e84c68520149232057ca62c.zip |
debugobjects: Reuse put_objects() on OOM
Reuse the helper function instead of having a open coded copy.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Zhen Lei <thunder.leizhen@huawei.com>
Link: https://lore.kernel.org/all/20241007164913.326834268@linutronix.de
Diffstat (limited to 'lib/debugobjects.c')
-rw-r--r-- | lib/debugobjects.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/lib/debugobjects.c b/lib/debugobjects.c index a3d4c54f0839..2c866d0bdd68 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -429,7 +429,6 @@ static void free_object(struct debug_obj *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_head *list) } } +#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 int cpu) } #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); + for (int i = 0; i < ODEBUG_HASH_SIZE; i++, db++) { + scoped_guard(raw_spinlock_irqsave, &db->lock) + hlist_move_list(&db->list, &freelist); - /* Now free them */ - hlist_for_each_entry_safe(obj, tmp, &freelist, node) { - hlist_del(&obj->node); - free_object(obj); - } + put_objects(&freelist); } } |