]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
x86/intel_rdt: Introduce pseudo-locked region
authorReinette Chatre <reinette.chatre@intel.com>
Fri, 22 Jun 2018 22:42:15 +0000 (15:42 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 23 Jun 2018 11:03:47 +0000 (13:03 +0200)
A pseudo-locked region is introduced representing an instance of a
pseudo-locked cache region. Each cache instance (domain) can support one
pseudo-locked region. Similarly a resource group can be used for one
pseudo-locked region.

Include a pointer to a pseudo-locked region from the domain and resource
group structures.

Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: fenghua.yu@intel.com
Cc: tony.luck@intel.com
Cc: vikas.shivappa@linux.intel.com
Cc: gavin.hindman@intel.com
Cc: jithu.joseph@intel.com
Cc: dave.hansen@intel.com
Cc: hpa@zytor.com
Link: https://lkml.kernel.org/r/9f69eb159051067703bcbc714de62e69874d5dee.1529706536.git.reinette.chatre@intel.com
arch/x86/kernel/cpu/intel_rdt.h

index 8d56776a3bd2c272f5b5687217ba543288dc5a7d..f3dcbcd03dfae42e578fbef766b4d77bc85519b3 100644 (file)
@@ -122,6 +122,20 @@ struct mongroup {
        u32                     rmid;
 };
 
+/**
+ * struct pseudo_lock_region - pseudo-lock region information
+ * @r:                 RDT resource to which this pseudo-locked region
+ *                     belongs
+ * @d:                 RDT domain to which this pseudo-locked region
+ *                     belongs
+ * @cbm:               bitmask of the pseudo-locked region
+ */
+struct pseudo_lock_region {
+       struct rdt_resource     *r;
+       struct rdt_domain       *d;
+       u32                     cbm;
+};
+
 /**
  * struct rdtgroup - store rdtgroup's data in resctrl file system.
  * @kn:                                kernfs node
@@ -135,17 +149,19 @@ struct mongroup {
  *                             monitor only or ctrl_mon group
  * @mon:                       mongroup related data
  * @mode:                      mode of resource group
+ * @plr:                       pseudo-locked region
  */
 struct rdtgroup {
-       struct kernfs_node      *kn;
-       struct list_head        rdtgroup_list;
-       u32                     closid;
-       struct cpumask          cpu_mask;
-       int                     flags;
-       atomic_t                waitcount;
-       enum rdt_group_type     type;
-       struct mongroup         mon;
-       enum rdtgrp_mode        mode;
+       struct kernfs_node              *kn;
+       struct list_head                rdtgroup_list;
+       u32                             closid;
+       struct cpumask                  cpu_mask;
+       int                             flags;
+       atomic_t                        waitcount;
+       enum rdt_group_type             type;
+       struct mongroup                 mon;
+       enum rdtgrp_mode                mode;
+       struct pseudo_lock_region       *plr;
 };
 
 /* rdtgroup.flags */
@@ -246,22 +262,24 @@ struct mbm_state {
  * @mbps_val:  When mba_sc is enabled, this holds the bandwidth in MBps
  * @new_ctrl:  new ctrl value to be loaded
  * @have_new_ctrl: did user provide new_ctrl for this domain
+ * @plr:       pseudo-locked region (if any) associated with domain
  */
 struct rdt_domain {
-       struct list_head        list;
-       int                     id;
-       struct cpumask          cpu_mask;
-       unsigned long           *rmid_busy_llc;
-       struct mbm_state        *mbm_total;
-       struct mbm_state        *mbm_local;
-       struct delayed_work     mbm_over;
-       struct delayed_work     cqm_limbo;
-       int                     mbm_work_cpu;
-       int                     cqm_work_cpu;
-       u32                     *ctrl_val;
-       u32                     *mbps_val;
-       u32                     new_ctrl;
-       bool                    have_new_ctrl;
+       struct list_head                list;
+       int                             id;
+       struct cpumask                  cpu_mask;
+       unsigned long                   *rmid_busy_llc;
+       struct mbm_state                *mbm_total;
+       struct mbm_state                *mbm_local;
+       struct delayed_work             mbm_over;
+       struct delayed_work             cqm_limbo;
+       int                             mbm_work_cpu;
+       int                             cqm_work_cpu;
+       u32                             *ctrl_val;
+       u32                             *mbps_val;
+       u32                             new_ctrl;
+       bool                            have_new_ctrl;
+       struct pseudo_lock_region       *plr;
 };
 
 /**