mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-08 15:04:45 +00:00
cacheinfo: Add function to get cacheinfo for a given CPU and cache level
Resctrl open codes a search for information about a given cache level in a couple of places (and more are on the way). Provide a new inline function get_cpu_cacheinfo_level() in <linux/cacheinfo.h> to do the search and return a pointer to the cacheinfo structure. Add lockdep_assert_cpus_held() to enforce the comment that cpuhp lock must be held. Simplify the existing get_cpu_cacheinfo_id() by using this new function to do the search. Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Reinette Chatre <reinette.chatre@intel.com> Link: https://lore.kernel.org/r/20240610003927.341707-4-tony.luck@intel.com
This commit is contained in:
parent
ddefcfdeb5
commit
685cb16740
@ -3,6 +3,7 @@
|
||||
#define _LINUX_CACHEINFO_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/cpuhplock.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/smp.h>
|
||||
|
||||
@ -112,24 +113,38 @@ int acpi_get_cache_info(unsigned int cpu,
|
||||
|
||||
const struct attribute_group *cache_get_priv_group(struct cacheinfo *this_leaf);
|
||||
|
||||
/*
|
||||
* Get the cacheinfo structure for the cache associated with @cpu at
|
||||
* level @level.
|
||||
* cpuhp lock must be held.
|
||||
*/
|
||||
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];
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
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 cpu_cacheinfo *ci = get_cpu_cacheinfo(cpu);
|
||||
int i;
|
||||
struct cacheinfo *ci = get_cpu_cacheinfo_level(cpu, level);
|
||||
|
||||
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 -1;
|
||||
return ci ? ci->id : -1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
|
Loading…
Reference in New Issue
Block a user