timers/migration: Convert "while" loops to use "for"

Both the "do while" and "while" loops in tmigr_setup_groups() eventually
mimic the behaviour of "for" loops.

Simplify accordingly.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://patch.msgid.link/20251024132536.39841-2-frederic@kernel.org
This commit is contained in:
Frederic Weisbecker
2025-10-24 15:25:31 +02:00
committed by Thomas Gleixner
parent 4138787408
commit 6c181b5667

View File

@@ -1642,22 +1642,23 @@ static void tmigr_connect_child_parent(struct tmigr_group *child,
static int tmigr_setup_groups(unsigned int cpu, unsigned int node)
{
struct tmigr_group *group, *child, **stack;
int top = 0, err = 0, i = 0;
int i, top = 0, err = 0;
struct list_head *lvllist;
stack = kcalloc(tmigr_hierarchy_levels, sizeof(*stack), GFP_KERNEL);
if (!stack)
return -ENOMEM;
do {
for (i = 0; i < tmigr_hierarchy_levels; i++) {
group = tmigr_get_group(cpu, node, i);
if (IS_ERR(group)) {
err = PTR_ERR(group);
i--;
break;
}
top = i;
stack[i++] = group;
stack[i] = group;
/*
* When booting only less CPUs of a system than CPUs are
@@ -1667,16 +1668,18 @@ static int tmigr_setup_groups(unsigned int cpu, unsigned int node)
* be different from tmigr_hierarchy_levels, contains only a
* single group.
*/
if (group->parent || list_is_singular(&tmigr_level_list[i - 1]))
if (group->parent || list_is_singular(&tmigr_level_list[i]))
break;
}
} while (i < tmigr_hierarchy_levels);
/* Assert single root without parent */
if (WARN_ON_ONCE(i >= tmigr_hierarchy_levels))
return -EINVAL;
if (WARN_ON_ONCE(!err && !group->parent && !list_is_singular(&tmigr_level_list[top])))
return -EINVAL;
/* Assert single root */
WARN_ON_ONCE(!err && !group->parent && !list_is_singular(&tmigr_level_list[top]));
while (i > 0) {
group = stack[--i];
for (; i >= 0; i--) {
group = stack[i];
if (err < 0) {
list_del(&group->list);