Skip to content

Commit 0dd2d74

Browse files
Fenghua YuKAGA-KOKO
authored andcommitted
x86/intel_rdt: Show bitmask of shareable resource with other executing units
CPUID.(EAX=0x10, ECX=res#):EBX[31:0] reports a bit mask for a resource. Each set bit within the length of the CBM indicates the corresponding unit of the resource allocation may be used by other entities in the platform (e.g. an integrated graphics engine or hardware units outside the processor core and have direct access to the resource). Each cleared bit within the length of the CBM indicates the corresponding allocation unit can be configured to implement a priority-based allocation scheme without interference with other hardware agents in the system. Bits outside the length of the CBM are reserved. More details on the bit mask are described in x86 Software Developer's Manual. The bitmask is shown in "info" directory for each resource. It's up to user to decide how to use the bitmask within a CBM in a partition to share or isolate a resource with other executing units. Suggested-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: Fenghua Yu <fenghua.yu@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: ravi.v.shankar@intel.com Cc: peterz@infradead.org Cc: eranian@google.com Cc: ak@linux.intel.com Cc: davidcc@google.com Cc: vikas.shivappa@linux.intel.com Link: http://lkml.kernel.org/r/20170725223904.12996-1-tony.luck@intel.com
1 parent e330268 commit 0dd2d74

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed

Documentation/x86/intel_rdt_ui.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ related to allocation:
4848
"min_cbm_bits": The minimum number of consecutive bits which
4949
must be set when writing a mask.
5050

51+
"shareable_bits": Bitmask of shareable resource with other executing
52+
entities (e.g. I/O). User can use this when
53+
setting up exclusive cache partitions. Note that
54+
some platforms support devices that have their
55+
own settings for cache use which can over-ride
56+
these bits.
57+
5158
Memory bandwitdh(MB) subdirectory contains the following files
5259
with respect to allocation:
5360

arch/x86/kernel/cpu/intel_rdt.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ static inline bool cache_alloc_hsw_probe(void)
193193
r->num_closid = 4;
194194
r->default_ctrl = max_cbm;
195195
r->cache.cbm_len = 20;
196+
r->cache.shareable_bits = 0xc0000;
196197
r->cache.min_cbm_bits = 2;
197198
r->alloc_capable = true;
198199
r->alloc_enabled = true;
@@ -260,6 +261,7 @@ static void rdt_get_cache_alloc_cfg(int idx, struct rdt_resource *r)
260261
r->num_closid = edx.split.cos_max + 1;
261262
r->cache.cbm_len = eax.split.cbm_len + 1;
262263
r->default_ctrl = BIT_MASK(eax.split.cbm_len + 1) - 1;
264+
r->cache.shareable_bits = ebx & r->default_ctrl;
263265
r->data_width = (r->cache.cbm_len + 3) / 4;
264266
r->alloc_capable = true;
265267
r->alloc_enabled = true;

arch/x86/kernel/cpu/intel_rdt.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,15 @@ struct msr_param {
227227
* @cbm_idx_offset: Offset of CBM index. CBM index is computed by:
228228
* closid * cbm_idx_multi + cbm_idx_offset
229229
* in a cache bit mask
230+
* @shareable_bits: Bitmask of shareable resource with other
231+
* executing entities
230232
*/
231233
struct rdt_cache {
232234
unsigned int cbm_len;
233235
unsigned int min_cbm_bits;
234236
unsigned int cbm_idx_mult;
235237
unsigned int cbm_idx_offset;
238+
unsigned int shareable_bits;
236239
};
237240

238241
/**

arch/x86/kernel/cpu/intel_rdt_rdtgroup.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,15 @@ static int rdt_min_cbm_bits_show(struct kernfs_open_file *of,
596596
return 0;
597597
}
598598

599+
static int rdt_shareable_bits_show(struct kernfs_open_file *of,
600+
struct seq_file *seq, void *v)
601+
{
602+
struct rdt_resource *r = of->kn->parent->priv;
603+
604+
seq_printf(seq, "%x\n", r->cache.shareable_bits);
605+
return 0;
606+
}
607+
599608
static int rdt_min_bw_show(struct kernfs_open_file *of,
600609
struct seq_file *seq, void *v)
601610
{
@@ -711,6 +720,13 @@ static struct rftype res_common_files[] = {
711720
.seq_show = rdt_min_cbm_bits_show,
712721
.fflags = RF_CTRL_INFO | RFTYPE_RES_CACHE,
713722
},
723+
{
724+
.name = "shareable_bits",
725+
.mode = 0444,
726+
.kf_ops = &rdtgroup_kf_single_ops,
727+
.seq_show = rdt_shareable_bits_show,
728+
.fflags = RF_CTRL_INFO | RFTYPE_RES_CACHE,
729+
},
714730
{
715731
.name = "min_bandwidth",
716732
.mode = 0444,

0 commit comments

Comments
 (0)