The files in the info directory for MBA are as follows:

 num_closids

        The maximum number of CLOSids available for MBA

 min_bandwidth

        The minimum memory bandwidth percentage value

 bandwidth_gran

        The granularity of the bandwidth control in percent for the
        particular CPU SKU. Intermediate values entered are rounded off
        to the previous control step available. Available bandwidth
        control steps are minimum_bandwidth + N * bandwidth_gran.

 delay_linear

        When set, the OS writes a linear percentage based value to the
        control MSRs ranging from minimum_bandwidth to 100 percent.

        This value is informational and has no influence on the values
        written to the schemata files. The values written to the
        schemata are always bandwidth percentage that is requested.

Signed-off-by: Vikas Shivappa <vikas.shiva...@linux.intel.com>
---
 arch/x86/include/asm/intel_rdt.h         |  1 +
 arch/x86/kernel/cpu/intel_rdt.c          |  1 +
 arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 64 ++++++++++++++++++++++++++++++++
 3 files changed, 66 insertions(+)

diff --git a/arch/x86/include/asm/intel_rdt.h b/arch/x86/include/asm/intel_rdt.h
index e58e1d4..b42fba5 100644
--- a/arch/x86/include/asm/intel_rdt.h
+++ b/arch/x86/include/asm/intel_rdt.h
@@ -155,6 +155,7 @@ struct rdt_resource {
 };
 
 void rdt_get_cache_infofile(struct rdt_resource *r);
+void rdt_get_mba_infofile(struct rdt_resource *r);
 
 extern struct mutex rdtgroup_mutex;
 
diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
index b50cb35..fd65548 100644
--- a/arch/x86/kernel/cpu/intel_rdt.c
+++ b/arch/x86/kernel/cpu/intel_rdt.c
@@ -197,6 +197,7 @@ static bool rdt_get_mem_config(struct rdt_resource *r)
                        return false;
        }
        r->data_width = 3;
+       rdt_get_mba_infofile(r);
 
        r->capable = true;
        r->enabled = true;
diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c 
b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
index aee4a19..ce5b173 100644
--- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
+++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
@@ -518,6 +518,36 @@ static int rdt_min_cbm_bits_show(struct kernfs_open_file 
*of,
        return 0;
 }
 
+static int rdt_min_bw_show(struct kernfs_open_file *of,
+                            struct seq_file *seq, void *v)
+{
+       struct rdt_resource *r = of->kn->parent->priv;
+
+       seq_printf(seq, "%d\n", r->min_bw);
+
+       return 0;
+}
+
+static int rdt_bw_gran_show(struct kernfs_open_file *of,
+                            struct seq_file *seq, void *v)
+{
+       struct rdt_resource *r = of->kn->parent->priv;
+
+       seq_printf(seq, "%d\n", r->bw_gran);
+
+       return 0;
+}
+
+static int rdt_delay_linear_show(struct kernfs_open_file *of,
+                            struct seq_file *seq, void *v)
+{
+       struct rdt_resource *r = of->kn->parent->priv;
+
+       seq_printf(seq, "%d\n", r->delay_linear);
+
+       return 0;
+}
+
 /* rdtgroup information files for one cache resource. */
 static struct rftype res_cache_info_files[] = {
        {
@@ -540,6 +570,40 @@ static int rdt_min_cbm_bits_show(struct kernfs_open_file 
*of,
        },
 };
 
+/* rdtgroup information files for memory bandwidth. */
+static struct rftype res_mba_info_files[] = {
+       {
+               .name           = "num_closids",
+               .mode           = 0444,
+               .kf_ops         = &rdtgroup_kf_single_ops,
+               .seq_show       = rdt_num_closids_show,
+       },
+       {
+               .name           = "min_bandwidth",
+               .mode           = 0444,
+               .kf_ops         = &rdtgroup_kf_single_ops,
+               .seq_show       = rdt_min_bw_show,
+       },
+       {
+               .name           = "bandwidth_gran",
+               .mode           = 0444,
+               .kf_ops         = &rdtgroup_kf_single_ops,
+               .seq_show       = rdt_bw_gran_show,
+       },
+       {
+               .name           = "delay_linear",
+               .mode           = 0444,
+               .kf_ops         = &rdtgroup_kf_single_ops,
+               .seq_show       = rdt_delay_linear_show,
+       },
+};
+
+void rdt_get_mba_infofile(struct rdt_resource *r)
+{
+       r->info_files = res_mba_info_files;
+       r->nr_info_files = ARRAY_SIZE(res_mba_info_files);
+}
+
 void rdt_get_cache_infofile(struct rdt_resource *r)
 {
        r->info_files = res_cache_info_files;
-- 
1.9.1

Reply via email to