Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1301894
| From | Parav Pandit <pandit.parav@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCHv1 4/6] IB/core: rdmacg support infrastructure APIs |
| Date | 2016-01-05 20:10 +0100 |
| Message-ID | <qNF9w-77Z-19@gated-at.bofh.it> (permalink) |
| References | <qNEZR-6P2-41@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
It defines verb RDMA resources that will be registered with
RDMA cgroup. It defines new APIs to register device with
RDMA cgroup and defines resource token table access interface.
Signed-off-by: Parav Pandit <pandit.parav@gmail.com>
---
drivers/infiniband/core/Makefile | 1 +
drivers/infiniband/core/cgroup.c | 80 +++++++++++++++++++++++++++++++++++++
drivers/infiniband/core/core_priv.h | 5 +++
include/rdma/ib_verbs.h | 13 ++++++
4 files changed, 99 insertions(+)
create mode 100644 drivers/infiniband/core/cgroup.c
diff --git a/drivers/infiniband/core/Makefile b/drivers/infiniband/core/Makefile
index d43a899..df40cee 100644
--- a/drivers/infiniband/core/Makefile
+++ b/drivers/infiniband/core/Makefile
@@ -13,6 +13,7 @@ ib_core-y := packer.o ud_header.o verbs.o sysfs.o \
roce_gid_mgmt.o
ib_core-$(CONFIG_INFINIBAND_USER_MEM) += umem.o
ib_core-$(CONFIG_INFINIBAND_ON_DEMAND_PAGING) += umem_odp.o umem_rbtree.o
+ib_core-$(CONFIG_CGROUP_RDMA) += cgroup.o
ib_mad-y := mad.o smi.o agent.o mad_rmpp.o
diff --git a/drivers/infiniband/core/cgroup.c b/drivers/infiniband/core/cgroup.c
new file mode 100644
index 0000000..8d80add
--- /dev/null
+++ b/drivers/infiniband/core/cgroup.c
@@ -0,0 +1,80 @@
+#include <linux/kernel.h>
+#include <linux/parser.h>
+#include <linux/cgroup_rdma.h>
+
+#include "core_priv.h"
+
+/**
+ * resource table definition as to be seen by the user.
+ * Need to add entries to it when more resources are
+ * added/defined at IB verb/core layer.
+ */
+static match_table_t resource_tokens = {
+ {RDMA_VERB_RESOURCE_UCTX, "uctx=%d"},
+ {RDMA_VERB_RESOURCE_AH, "ah=%d"},
+ {RDMA_VERB_RESOURCE_PD, "pd=%d"},
+ {RDMA_VERB_RESOURCE_CQ, "cq=%d"},
+ {RDMA_VERB_RESOURCE_MR, "mr=%d"},
+ {RDMA_VERB_RESOURCE_MW, "mw=%d"},
+ {RDMA_VERB_RESOURCE_SRQ, "srq=%d"},
+ {RDMA_VERB_RESOURCE_QP, "qp=%d"},
+ {RDMA_VERB_RESOURCE_FLOW, "flow=%d"},
+ {-1, NULL}
+};
+
+/**
+ * setup table pointers for RDMA cgroup to access.
+ */
+static struct rdmacg_pool_info verbs_token_info = {
+ .resource_table = resource_tokens,
+ .resource_count =
+ (sizeof(resource_tokens) / sizeof(struct match_token)) - 1,
+};
+
+static struct rdmacg_pool_info*
+ rdmacg_get_resource_pool_tokens(struct ib_device *device)
+{
+ return &verbs_token_info;
+}
+
+static struct rdmacg_resource_pool_ops verbs_pool_ops = {
+ .get_resource_pool_tokens = &rdmacg_get_resource_pool_tokens,
+};
+
+/**
+ * ib_device_register_rdmacg - register with rdma cgroup.
+ * @device: device to register to participate in resource
+ * accounting by rdma cgroup.
+ *
+ * Register with the rdma cgroup. Should be called before
+ * exposing rdma device to user space applications to avoid
+ * resource accounting leak.
+ * HCA drivers should set resource pool ops first if they wish
+ * to support hw specific resource accounting before IB core
+ * registers with rdma cgroup.
+ */
+void ib_device_register_rdmacg(struct ib_device *device)
+{
+ rdmacg_set_rpool_ops(device,
+ RDMACG_RESOURCE_POOL_VERB,
+ &verbs_pool_ops);
+ rdmacg_register_ib_device(device);
+}
+
+/**
+ * ib_device_unregister_rdmacg - unregister with rdma cgroup.
+ * @device: device to unregister.
+ *
+ * Unregister with the rdma cgroup. Should be called after
+ * all the resources are deallocated, and after a stage when any
+ * other resource allocation of user application cannot be done
+ * for this device to avoid any leak in accounting.
+ * HCA drivers should clear resource pool ops after ib stack
+ * unregisters with rdma cgroup.
+ */
+void ib_device_unregister_rdmacg(struct ib_device *device)
+{
+ rdmacg_unregister_ib_device(device);
+ rdmacg_clear_rpool_ops(device,
+ RDMACG_RESOURCE_POOL_VERB);
+}
diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h
index 5cf6eb7..29bdfe2 100644
--- a/drivers/infiniband/core/core_priv.h
+++ b/drivers/infiniband/core/core_priv.h
@@ -92,4 +92,9 @@ int ib_cache_setup_one(struct ib_device *device);
void ib_cache_cleanup_one(struct ib_device *device);
void ib_cache_release_one(struct ib_device *device);
+#ifdef CONFIG_CGROUP_RDMA
+void ib_device_register_rdmacg(struct ib_device *device);
+void ib_device_unregister_rdmacg(struct ib_device *device);
+#endif
+
#endif /* _CORE_PRIV_H */
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 1a17249..f44b884 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -96,6 +96,19 @@ enum rdma_protocol_type {
RDMA_PROTOCOL_USNIC_UDP
};
+enum rdma_resource_type {
+ RDMA_VERB_RESOURCE_UCTX,
+ RDMA_VERB_RESOURCE_AH,
+ RDMA_VERB_RESOURCE_PD,
+ RDMA_VERB_RESOURCE_CQ,
+ RDMA_VERB_RESOURCE_MR,
+ RDMA_VERB_RESOURCE_MW,
+ RDMA_VERB_RESOURCE_SRQ,
+ RDMA_VERB_RESOURCE_QP,
+ RDMA_VERB_RESOURCE_FLOW,
+ RDMA_VERB_RESOURCE_MAX,
+};
+
__attribute_const__ enum rdma_transport_type
rdma_node_get_transport(enum rdma_node_type node_type);
--
1.8.3.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:00 +0100
[PATCHv1 4/6] IB/core: rdmacg support infrastructure APIs Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:10 +0100
[PATCHv1 5/6] IB/core: use rdma cgroup for resource accounting Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:10 +0100
[PATCHv1 2/6] IB/core: Added members to support rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:10 +0100
Re: [PATCHv1 2/6] IB/core: Added members to support rdma cgroup Tejun Heo <tj@kernel.org> - 2016-01-05 23:00 +0100
Re: [PATCHv1 2/6] IB/core: Added members to support rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 00:20 +0100
Re: [PATCHv1 2/6] IB/core: Added members to support rdma cgroup Tejun Heo <tj@kernel.org> - 2016-01-07 16:10 +0100
Re: [PATCHv1 2/6] IB/core: Added members to support rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 20:50 +0100
[PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:10 +0100
Re: [PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Tejun Heo <tj@kernel.org> - 2016-01-05 23:00 +0100
Re: [PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Parav Pandit <pandit.parav@gmail.com> - 2016-01-06 23:50 +0100
Re: [PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Tejun Heo <tj@kernel.org> - 2016-01-07 00:20 +0100
Re: [PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 01:00 +0100
Re: [PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Tejun Heo <tj@kernel.org> - 2016-01-07 16:50 +0100
Re: [PATCHv1 6/6] rdmacg: Added documentation for rdma controller. Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 20:50 +0100
[PATCHv1 1/6] rdmacg: Added rdma cgroup header file Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:10 +0100
[PATCHv1 3/6] rdmacg: implements rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-05 20:10 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Tejun Heo <tj@kernel.org> - 2016-01-05 23:10 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 00:40 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Tejun Heo <tj@kernel.org> - 2016-01-07 16:30 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 21:30 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Tejun Heo <tj@kernel.org> - 2016-01-07 21:30 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 21:40 +0100
Re: [PATCHv1 3/6] rdmacg: implements rdma cgroup Tejun Heo <tj@kernel.org> - 2016-01-07 21:50 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-05 23:00 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 00:20 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 16:10 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 21:10 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 21:40 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 21:40 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 21:50 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 22:00 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 22:10 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 22:10 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 22:20 +0100
Re: [PATCHv1 0/6] rdma controller support Tejun Heo <tj@kernel.org> - 2016-01-07 22:10 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 22:10 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 21:50 +0100
Re: [PATCHv1 0/6] rdma controller support Parav Pandit <pandit.parav@gmail.com> - 2016-01-07 21:10 +0100
csiph-web