From: Yury Norov Date: Tue, 28 Jan 2025 16:46:30 +0000 (-0500) Subject: objpool: rework objpool_pop() X-Git-Tag: v6.15-rc1~222^2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d81603b32cde95e5262c84004081b2e3cb4f23ed;p=thirdparty%2Flinux.git objpool: rework objpool_pop() The function has to track number of iterations to prevent an infinite loop. for_each_cpu_wrap() macro takes care of it, which simplifies user code. Signed-off-by: Yury Norov --- diff --git a/include/linux/objpool.h b/include/linux/objpool.h index cb1758eaa2d38..b713a1fe7521b 100644 --- a/include/linux/objpool.h +++ b/include/linux/objpool.h @@ -170,17 +170,16 @@ static inline void *objpool_pop(struct objpool_head *pool) { void *obj = NULL; unsigned long flags; - int i, cpu; + int start, cpu; /* disable local irq to avoid preemption & interruption */ raw_local_irq_save(flags); - cpu = raw_smp_processor_id(); - for (i = 0; i < pool->nr_possible_cpus; i++) { + start = raw_smp_processor_id(); + for_each_possible_cpu_wrap(cpu, start) { obj = __objpool_try_get_slot(pool, cpu); if (obj) break; - cpu = cpumask_next_wrap(cpu, cpu_possible_mask, -1, 1); } raw_local_irq_restore(flags);