diff options
author | Reinette Chatre <reinette.chatre@intel.com> | 2018-09-15 17:58:21 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2018-09-18 17:38:05 -0400 |
commit | c793da8e4c62d2c002a79c47f44efead450cbcae (patch) | |
tree | 1b8fd80feb2d6b6ccf770a0a2573cdf17655068a | |
parent | f968dc119a159a95628a20de2a2dcc913d0a82d7 (diff) |
x86/intel_rdt: Global closid helper to support future fixes
The number of CLOSIDs supported by a system is the minimum number of
CLOSIDs supported by any of its resources. Care should be taken when
iterating over the CLOSIDs of a resource since it may be that the number
of CLOSIDs supported on the system is less than the number of CLOSIDs
supported by the resource.
Introduce a helper function that can be used to query the number of
CLOSIDs that is supported by all resources, irrespective of how many
CLOSIDs are supported by a particular resource.
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: "H Peter Anvin" <hpa@zytor.com>
Cc: "Tony Luck" <tony.luck@intel.com>
Cc: "Xiaochen Shen" <xiaochen.shen@intel.com>
Cc: "Chen Yu" <yu.c.chen@intel.com>
Link: https://lkml.kernel.org/r/1537048707-76280-4-git-send-email-fenghua.yu@intel.com
-rw-r--r-- | arch/x86/kernel/cpu/intel_rdt.h | 1 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/intel_rdt.h b/arch/x86/kernel/cpu/intel_rdt.h index 78266c798280..285eb3ec4200 100644 --- a/arch/x86/kernel/cpu/intel_rdt.h +++ b/arch/x86/kernel/cpu/intel_rdt.h | |||
@@ -544,6 +544,7 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp); | |||
544 | void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp); | 544 | void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp); |
545 | struct rdt_domain *get_domain_from_cpu(int cpu, struct rdt_resource *r); | 545 | struct rdt_domain *get_domain_from_cpu(int cpu, struct rdt_resource *r); |
546 | int update_domains(struct rdt_resource *r, int closid); | 546 | int update_domains(struct rdt_resource *r, int closid); |
547 | int closids_supported(void); | ||
547 | void closid_free(int closid); | 548 | void closid_free(int closid); |
548 | int alloc_rmid(void); | 549 | int alloc_rmid(void); |
549 | void free_rmid(u32 rmid); | 550 | void free_rmid(u32 rmid); |
diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c index 32e8bbdf2400..b372923eb209 100644 --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | |||
@@ -97,6 +97,12 @@ void rdt_last_cmd_printf(const char *fmt, ...) | |||
97 | * limited as the number of resources grows. | 97 | * limited as the number of resources grows. |
98 | */ | 98 | */ |
99 | static int closid_free_map; | 99 | static int closid_free_map; |
100 | static int closid_free_map_len; | ||
101 | |||
102 | int closids_supported(void) | ||
103 | { | ||
104 | return closid_free_map_len; | ||
105 | } | ||
100 | 106 | ||
101 | static void closid_init(void) | 107 | static void closid_init(void) |
102 | { | 108 | { |
@@ -111,6 +117,7 @@ static void closid_init(void) | |||
111 | 117 | ||
112 | /* CLOSID 0 is always reserved for the default group */ | 118 | /* CLOSID 0 is always reserved for the default group */ |
113 | closid_free_map &= ~1; | 119 | closid_free_map &= ~1; |
120 | closid_free_map_len = rdt_min_closid; | ||
114 | } | 121 | } |
115 | 122 | ||
116 | static int closid_alloc(void) | 123 | static int closid_alloc(void) |