Commit 8a1b4a0d authored by James Morse's avatar James Morse Committed by Zheng Zengkai
Browse files

drivers: base: cacheinfo: Add helper to search cacheinfo by of_node



hulk inclusion
category: feature
feature: ARM MPAM support
bugzilla: 48265
CVE: NA

--------------------------------

The MPAM ACPI table holds a PPTT-offset that describes a cache. Add a
helper cacheinfo_shared_cpu_map_search() to search the cacheinfo
structures for a cache that represents this firmware description.

The cacheinfo structures are freed and allocated over CPU online/offline,
the caller of this helper must hold the cpu-hotplug read lock while
the helper runs, and while it holds the return value.

Signed-off-by: default avatarJames Morse <james.morse@arm.com>
Link: http://www.linux-arm.org/git?p=linux-jm.git;a=patch;h=9e5b7ec7c145019f7160c56795ede536f0de5347


Signed-off-by: default avatarWang ShaoBo <bobo.shaobowang@huawei.com>
Signed-off-by: default avatarHongbo Yao <yaohongbo@huawei.com>
Reviewed-by: default avatarCheng Jian <cj.chengjian@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 624f710b
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -213,6 +213,34 @@ int __weak cache_setup_acpi(unsigned int cpu)
	return -ENOTSUPP;
}

/**
 * cacheinfo_shared_cpu_map_search() - find an instance of struct cacheinfo
 * from the provided firmware description.
 * Caller must hold cpus_read_lock() until its finished with the cacheinfo.
 *
 * Return a CPUs cache leaf described @fw_desc, or NULL.
 */
struct cacheinfo *cacheinfo_shared_cpu_map_search(void *fw_token)
{
	struct cacheinfo *iter;
	unsigned int cpu, index;
	struct cpu_cacheinfo *cpu_ci;

	for_each_online_cpu(cpu) {
		cpu_ci = get_cpu_cacheinfo(cpu);

		for (index = 0; index < cache_leaves(cpu); index++) {
			iter = cpu_ci->info_list + index;

			if (iter->fw_token == fw_token) {
				return iter;
			}
		}
	}

	return NULL;
}

unsigned int coherency_max_size;

static int cache_shared_cpu_map_setup(unsigned int cpu)
+1 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ int func(unsigned int cpu) \
}

struct cpu_cacheinfo *get_cpu_cacheinfo(unsigned int cpu);
struct cacheinfo *cacheinfo_shared_cpu_map_search(void *fw_desc);
int init_cache_level(unsigned int cpu);
int populate_cache_leaves(unsigned int cpu);
int cache_setup_acpi(unsigned int cpu);