Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a64241ba authored by Jeremy Linton's avatar Jeremy Linton Committed by Greg Kroah-Hartman
Browse files

arm64: topology: Use PPTT to determine if PE is a thread



Commit 98dc19902a0b2e5348e43d6a2c39a0a7d0fc639e upstream.

ACPI 6.3 adds a thread flag to represent if a CPU/PE is
actually a thread. Given that the MPIDR_MT bit may not
represent this information consistently on homogeneous machines
we should prefer the PPTT flag if its available.

Signed-off-by: default avatarJeremy Linton <jeremy.linton@arm.com>
Reviewed-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Reviewed-by: default avatarRobert Richter <rrichter@marvell.com>
[will: made acpi_cpu_is_threaded() return 'bool']
Signed-off-by: default avatarWill Deacon <will@kernel.org>
Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent b098a4cd
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -340,17 +340,28 @@ void remove_cpu_topology(unsigned int cpu)
}

#ifdef CONFIG_ACPI
static bool __init acpi_cpu_is_threaded(int cpu)
{
	int is_threaded = acpi_pptt_cpu_is_thread(cpu);

	/*
	 * if the PPTT doesn't have thread information, assume a homogeneous
	 * machine and return the current CPU's thread state.
	 */
	if (is_threaded < 0)
		is_threaded = read_cpuid_mpidr() & MPIDR_MT_BITMASK;

	return !!is_threaded;
}

/*
 * Propagate the topology information of the processor_topology_node tree to the
 * cpu_topology array.
 */
static int __init parse_acpi_topology(void)
{
	bool is_threaded;
	int cpu, topology_id;

	is_threaded = read_cpuid_mpidr() & MPIDR_MT_BITMASK;

	for_each_possible_cpu(cpu) {
		int i, cache_id;

@@ -358,7 +369,7 @@ static int __init parse_acpi_topology(void)
		if (topology_id < 0)
			return topology_id;

		if (is_threaded) {
		if (acpi_cpu_is_threaded(cpu)) {
			cpu_topology[cpu].thread_id = topology_id;
			topology_id = find_acpi_cpu_topology(cpu, 1);
			cpu_topology[cpu].core_id   = topology_id;