Commit 97b19745 authored by Vincenzo Mezzela's avatar Vincenzo Mezzela Committed by Greg Kroah-Hartman
Browse files

drivers: arch_topology: Refactor do-while loops



Refactor do-while loops to move break condition within the loop's scope.
This modification is in preparation to move the declaration of the
device_node directly within the loop and take advantage of the automatic
cleanup feature provided by the __free(device_node) attribute.

Acked-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Signed-off-by: default avatarVincenzo Mezzela <vincenzo.mezzela@gmail.com>
Link: https://lore.kernel.org/r/20240607163350.392971-2-vincenzo.mezzela@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d7d3ae44
Loading
Loading
Loading
Loading
+55 −52
Original line number Diff line number Diff line
@@ -543,7 +543,9 @@ static int __init parse_core(struct device_node *core, int package_id,
	do {
		snprintf(name, sizeof(name), "thread%d", i);
		t = of_get_child_by_name(core, name);
		if (t) {
		if (!t)
			break;

		leaf = false;
		cpu = get_cpu_for_node(t);
		if (cpu >= 0) {
@@ -557,9 +559,8 @@ static int __init parse_core(struct device_node *core, int package_id,
			return -EINVAL;
		}
		of_node_put(t);
		}
		i++;
	} while (t);
	} while (1);

	cpu = get_cpu_for_node(core);
	if (cpu >= 0) {
@@ -599,7 +600,9 @@ static int __init parse_cluster(struct device_node *cluster, int package_id,
	do {
		snprintf(name, sizeof(name), "cluster%d", i);
		c = of_get_child_by_name(cluster, name);
		if (c) {
		if (!c)
			break;

		leaf = false;
		ret = parse_cluster(c, package_id, i, depth + 1);
		if (depth > 0)
@@ -607,28 +610,27 @@ static int __init parse_cluster(struct device_node *cluster, int package_id,
		of_node_put(c);
		if (ret != 0)
			return ret;
		}
		i++;
	} while (c);
	} while (1);

	/* Now check for cores */
	i = 0;
	do {
		snprintf(name, sizeof(name), "core%d", i);
		c = of_get_child_by_name(cluster, name);
		if (c) {
		if (!c)
			break;

		has_cores = true;

		if (depth == 0) {
				pr_err("%pOF: cpu-map children should be clusters\n",
				       c);
			pr_err("%pOF: cpu-map children should be clusters\n", c);
			of_node_put(c);
			return -EINVAL;
		}

		if (leaf) {
				ret = parse_core(c, package_id, cluster_id,
						 core_id++);
			ret = parse_core(c, package_id, cluster_id, core_id++);
		} else {
			pr_err("%pOF: Non-leaf cluster with core %s\n",
			       cluster, name);
@@ -638,9 +640,8 @@ static int __init parse_cluster(struct device_node *cluster, int package_id,
		of_node_put(c);
		if (ret != 0)
			return ret;
		}
		i++;
	} while (c);
	} while (1);

	if (leaf && !has_cores)
		pr_warn("%pOF: empty cluster\n", cluster);
@@ -658,15 +659,17 @@ static int __init parse_socket(struct device_node *socket)
	do {
		snprintf(name, sizeof(name), "socket%d", package_id);
		c = of_get_child_by_name(socket, name);
		if (c) {
		if (!c)
			break;

		has_socket = true;
		ret = parse_cluster(c, package_id, -1, 0);
		of_node_put(c);
		if (ret != 0)
			return ret;
		}

		package_id++;
	} while (c);
	} while (1);

	if (!has_socket)
		ret = parse_cluster(socket, 0, -1, 0);