The ABMC feature provides an option to the user to assign a hardware counter to an RMID and monitor the bandwidth as long as it is assigned. ABMC mode is enabled by default when supported. System can be one mode at a time (Legacy monitor mode or ABMC mode). Provide an interface to display the monitor mode on the system. $cat /sys/fs/resctrl/info/L3_MON/mbm_assign [abmc] legacy Signed-off-by: Babu Moger <babu.moger@xxxxxxx> --- v4: Fixed the checks for legacy and abmc mode. Default it ABMC. v3: New patch to display ABMC capability. --- Documentation/arch/x86/resctrl.rst | 10 ++++++++++ arch/x86/kernel/cpu/resctrl/monitor.c | 1 + arch/x86/kernel/cpu/resctrl/rdtgroup.c | 23 +++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/Documentation/arch/x86/resctrl.rst b/Documentation/arch/x86/resctrl.rst index 7ab8172ef208..ab3cde61a124 100644 --- a/Documentation/arch/x86/resctrl.rst +++ b/Documentation/arch/x86/resctrl.rst @@ -261,6 +261,16 @@ with the following files: Available when ABMC feature is supported. The number of ABMC counters available for configuration. +"mbm_assign": + Available when ABMC feature is supported. Reports the list of assignable + monitoring features supported. The enclosed brackets indicate which + feature is enabled. + :: + + cat /sys/fs/resctrl/info/L3_MON/mbm_assign + [abmc] + mbm_legacy + "max_threshold_occupancy": Read/write file provides the largest value (in bytes) at which a previously used LLC_occupancy diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c index e75a6146068b..b1d002e5e93d 100644 --- a/arch/x86/kernel/cpu/resctrl/monitor.c +++ b/arch/x86/kernel/cpu/resctrl/monitor.c @@ -1071,6 +1071,7 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r) if (rdt_cpu_has(X86_FEATURE_ABMC)) { r->abmc_capable = true; + resctrl_file_fflags_init("mbm_assign", RFTYPE_MON_INFO); /* * Query CPUID_Fn80000020_EBX_x05 for number of * ABMC counters diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 9148d1234ede..3071bbb7a15e 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -856,6 +856,23 @@ static int rdtgroup_num_cntrs_show(struct kernfs_open_file *of, return 0; } +static int rdtgroup_mbm_assign_show(struct kernfs_open_file *of, + struct seq_file *s, void *v) +{ + struct rdt_resource *r = of->kn->parent->priv; + struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r); + + if (hw_res->abmc_enabled) { + seq_puts(s, "[abmc]\n"); + seq_puts(s, "mbm_legacy\n"); + } else { + seq_puts(s, "abmc\n"); + seq_puts(s, "[mbm_legacy]\n"); + } + + return 0; +} + #ifdef CONFIG_PROC_CPU_RESCTRL /* @@ -1913,6 +1930,12 @@ static struct rftype res_common_files[] = { .seq_show = mbm_local_bytes_config_show, .write = mbm_local_bytes_config_write, }, + { + .name = "mbm_assign", + .mode = 0444, + .kf_ops = &rdtgroup_kf_single_ops, + .seq_show = rdtgroup_mbm_assign_show, + }, { .name = "cpus", .mode = 0644, -- 2.34.1