diff options
Diffstat (limited to 'include/linux/cacheinfo.h')
| -rw-r--r-- | include/linux/cacheinfo.h | 25 | 
1 files changed, 20 insertions, 5 deletions
diff --git a/include/linux/cacheinfo.h b/include/linux/cacheinfo.h index 2cb15fe4fe12..3dde175f4108 100644 --- a/include/linux/cacheinfo.h +++ b/include/linux/cacheinfo.h @@ -3,6 +3,7 @@  #define _LINUX_CACHEINFO_H  #include <linux/bitops.h> +#include <linux/cpuhplock.h>  #include <linux/cpumask.h>  #include <linux/smp.h> @@ -113,23 +114,37 @@ int acpi_get_cache_info(unsigned int cpu,  const struct attribute_group *cache_get_priv_group(struct cacheinfo *this_leaf);  /* - * Get the id of the cache associated with @cpu at level @level. + * Get the cacheinfo structure for the cache associated with @cpu at + * level @level.   * cpuhp lock must be held.   */ -static inline int get_cpu_cacheinfo_id(int cpu, int level) +static inline struct cacheinfo *get_cpu_cacheinfo_level(int cpu, int level)  {  	struct cpu_cacheinfo *ci = get_cpu_cacheinfo(cpu);  	int i; +	lockdep_assert_cpus_held(); +  	for (i = 0; i < ci->num_leaves; i++) {  		if (ci->info_list[i].level == level) {  			if (ci->info_list[i].attributes & CACHE_ID) -				return ci->info_list[i].id; -			return -1; +				return &ci->info_list[i]; +			return NULL;  		}  	} -	return -1; +	return NULL; +} + +/* + * Get the id of the cache associated with @cpu at level @level. + * cpuhp lock must be held. + */ +static inline int get_cpu_cacheinfo_id(int cpu, int level) +{ +	struct cacheinfo *ci = get_cpu_cacheinfo_level(cpu, level); + +	return ci ? ci->id : -1;  }  #ifdef CONFIG_ARM64  |