[21/26] cgroup/misc: allow misc cgroup consumers to read the max value

Message ID 20221111183532.3676646-22-kristen@linux.intel.com
State New
Headers
Series Add Cgroup support for SGX EPC memory |

Commit Message

Kristen Carlson Accardi Nov. 11, 2022, 6:35 p.m. UTC
  The SGX driver will need to be able to read the max value per cgroup
to determine how far usage is from max. Add an api to return the
max value of the given cgroup.

Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
---
 include/linux/misc_cgroup.h |  6 ++++++
 kernel/cgroup/misc.c        | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+)
  

Comments

Tejun Heo Nov. 14, 2022, 10:33 p.m. UTC | #1
On Fri, Nov 11, 2022 at 10:35:26AM -0800, Kristen Carlson Accardi wrote:
> The SGX driver will need to be able to read the max value per cgroup
> to determine how far usage is from max. Add an api to return the
> max value of the given cgroup.

You can add these helpers in one patch and I wouldn't mind a downstream user
just reading the field directly either.

Thanks.
  

Patch

diff --git a/include/linux/misc_cgroup.h b/include/linux/misc_cgroup.h
index a9dd087132dc..c00deae4d2df 100644
--- a/include/linux/misc_cgroup.h
+++ b/include/linux/misc_cgroup.h
@@ -62,6 +62,7 @@  struct misc_cg {
 struct misc_cg *root_misc(void);
 struct misc_cg *parent_misc(struct misc_cg *cg);
 unsigned long misc_cg_read(enum misc_res_type type, struct misc_cg *cg);
+unsigned long misc_cg_max(enum misc_res_type type, struct misc_cg *cg);
 unsigned long misc_cg_res_total_usage(enum misc_res_type type);
 int misc_cg_set_capacity(enum misc_res_type type, unsigned long capacity);
 int misc_cg_try_charge(enum misc_res_type type, struct misc_cg *cg,
@@ -124,6 +125,11 @@  static inline unsigned long misc_cg_read(enum misc_res_type type, struct misc_cg
 	return 0;
 }
 
+static inline unsigned long misc_cg_max(enum misc_res_type type, struct misc_cg *cg)
+{
+	return 0;
+}
+
 static inline unsigned long misc_cg_res_total_usage(enum misc_res_type type)
 {
 	return 0;
diff --git a/kernel/cgroup/misc.c b/kernel/cgroup/misc.c
index e2c99fdc1d40..18d0bec7d609 100644
--- a/kernel/cgroup/misc.c
+++ b/kernel/cgroup/misc.c
@@ -232,6 +232,25 @@  unsigned long misc_cg_read(enum misc_res_type type, struct misc_cg *cg)
 }
 EXPORT_SYMBOL_GPL(misc_cg_read);
 
+/**
+ * misc_cg_max() - Return the max value of the misc cgroup res.
+ * @type: Type of the misc res.
+ * @cg: Misc cgroup whose max will be read
+ *
+ * Context: Any context.
+ * Return:
+ * 	The max value of the specified misc cgroup.
+ * 	If an invalid misc_res_type is given, zero will be returned.
+ */
+unsigned long misc_cg_max(enum misc_res_type type, struct misc_cg *cg)
+{
+	if (!(valid_type(type) && cg))
+		return 0;
+
+	return READ_ONCE(cg->res[type].max);
+}
+EXPORT_SYMBOL_GPL(misc_cg_max);
+
 /**
  * misc_cg_max_show() - Show the misc cgroup max limit.
  * @sf: Interface file