rdmacg: Added rdma cgroup controller
[linux-2.6-microblaze.git] / include / linux / cgroup_rdma.h
diff --git a/include/linux/cgroup_rdma.h b/include/linux/cgroup_rdma.h
new file mode 100644 (file)
index 0000000..e94290b
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2016 Parav Pandit <pandit.parav@gmail.com>
+ *
+ * This file is subject to the terms and conditions of version 2 of the GNU
+ * General Public License. See the file COPYING in the main directory of the
+ * Linux distribution for more details.
+ */
+
+#ifndef _CGROUP_RDMA_H
+#define _CGROUP_RDMA_H
+
+#include <linux/cgroup.h>
+
+enum rdmacg_resource_type {
+       RDMACG_RESOURCE_HCA_HANDLE,
+       RDMACG_RESOURCE_HCA_OBJECT,
+       RDMACG_RESOURCE_MAX,
+};
+
+#ifdef CONFIG_CGROUP_RDMA
+
+struct rdma_cgroup {
+       struct cgroup_subsys_state      css;
+
+       /*
+        * head to keep track of all resource pools
+        * that belongs to this cgroup.
+        */
+       struct list_head                rpools;
+};
+
+struct rdmacg_device {
+       struct list_head        dev_node;
+       struct list_head        rpools;
+       char                    *name;
+};
+
+/*
+ * APIs for RDMA/IB stack to publish when a device wants to
+ * participate in resource accounting
+ */
+int rdmacg_register_device(struct rdmacg_device *device);
+void rdmacg_unregister_device(struct rdmacg_device *device);
+
+/* APIs for RDMA/IB stack to charge/uncharge pool specific resources */
+int rdmacg_try_charge(struct rdma_cgroup **rdmacg,
+                     struct rdmacg_device *device,
+                     enum rdmacg_resource_type index);
+void rdmacg_uncharge(struct rdma_cgroup *cg,
+                    struct rdmacg_device *device,
+                    enum rdmacg_resource_type index);
+#endif /* CONFIG_CGROUP_RDMA */
+#endif /* _CGROUP_RDMA_H */