aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/cma.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/core/cma.c')
-rw-r--r--drivers/infiniband/core/cma.c83
1 files changed, 0 insertions, 83 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 81bded0d37d1..e15546ae4d0f 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -4616,85 +4616,6 @@ static void cma_remove_one(struct ib_device *device, void *client_data)
4616 kfree(cma_dev); 4616 kfree(cma_dev);
4617} 4617}
4618 4618
4619static int cma_get_id_stats(struct sk_buff *skb, struct netlink_callback *cb)
4620{
4621 struct nlmsghdr *nlh;
4622 struct rdma_cm_id_stats *id_stats;
4623 struct rdma_id_private *id_priv;
4624 struct rdma_cm_id *id = NULL;
4625 struct cma_device *cma_dev;
4626 int i_dev = 0, i_id = 0;
4627
4628 /*
4629 * We export all of the IDs as a sequence of messages. Each
4630 * ID gets its own netlink message.
4631 */
4632 mutex_lock(&lock);
4633
4634 list_for_each_entry(cma_dev, &dev_list, list) {
4635 if (i_dev < cb->args[0]) {
4636 i_dev++;
4637 continue;
4638 }
4639
4640 i_id = 0;
4641 list_for_each_entry(id_priv, &cma_dev->id_list, list) {
4642 if (i_id < cb->args[1]) {
4643 i_id++;
4644 continue;
4645 }
4646
4647 id_stats = ibnl_put_msg(skb, &nlh, cb->nlh->nlmsg_seq,
4648 sizeof *id_stats, RDMA_NL_RDMA_CM,
4649 RDMA_NL_RDMA_CM_ID_STATS,
4650 NLM_F_MULTI);
4651 if (!id_stats)
4652 goto out;
4653
4654 memset(id_stats, 0, sizeof *id_stats);
4655 id = &id_priv->id;
4656 id_stats->node_type = id->route.addr.dev_addr.dev_type;
4657 id_stats->port_num = id->port_num;
4658 id_stats->bound_dev_if =
4659 id->route.addr.dev_addr.bound_dev_if;
4660
4661 if (ibnl_put_attr(skb, nlh,
4662 rdma_addr_size(cma_src_addr(id_priv)),
4663 cma_src_addr(id_priv),
4664 RDMA_NL_RDMA_CM_ATTR_SRC_ADDR))
4665 goto out;
4666 if (ibnl_put_attr(skb, nlh,
4667 rdma_addr_size(cma_dst_addr(id_priv)),
4668 cma_dst_addr(id_priv),
4669 RDMA_NL_RDMA_CM_ATTR_DST_ADDR))
4670 goto out;
4671
4672 id_stats->pid = task_pid_vnr(id_priv->res.task);
4673 id_stats->port_space = id->ps;
4674 id_stats->cm_state = id_priv->state;
4675 id_stats->qp_num = id_priv->qp_num;
4676 id_stats->qp_type = id->qp_type;
4677
4678 i_id++;
4679 nlmsg_end(skb, nlh);
4680 }
4681
4682 cb->args[1] = 0;
4683 i_dev++;
4684 }
4685
4686out:
4687 mutex_unlock(&lock);
4688 cb->args[0] = i_dev;
4689 cb->args[1] = i_id;
4690
4691 return skb->len;
4692}
4693
4694static const struct rdma_nl_cbs cma_cb_table[RDMA_NL_RDMA_CM_NUM_OPS] = {
4695 [RDMA_NL_RDMA_CM_ID_STATS] = { .dump = cma_get_id_stats},
4696};
4697
4698static int cma_init_net(struct net *net) 4619static int cma_init_net(struct net *net)
4699{ 4620{
4700 struct cma_pernet *pernet = cma_pernet(net); 4621 struct cma_pernet *pernet = cma_pernet(net);
@@ -4743,7 +4664,6 @@ static int __init cma_init(void)
4743 if (ret) 4664 if (ret)
4744 goto err; 4665 goto err;
4745 4666
4746 rdma_nl_register(RDMA_NL_RDMA_CM, cma_cb_table);
4747 cma_configfs_init(); 4667 cma_configfs_init();
4748 4668
4749 return 0; 4669 return 0;
@@ -4759,7 +4679,6 @@ err_wq:
4759static void __exit cma_cleanup(void) 4679static void __exit cma_cleanup(void)
4760{ 4680{
4761 cma_configfs_exit(); 4681 cma_configfs_exit();
4762 rdma_nl_unregister(RDMA_NL_RDMA_CM);
4763 ib_unregister_client(&cma_client); 4682 ib_unregister_client(&cma_client);
4764 unregister_netdevice_notifier(&cma_nb); 4683 unregister_netdevice_notifier(&cma_nb);
4765 ib_sa_unregister_client(&sa_client); 4684 ib_sa_unregister_client(&sa_client);
@@ -4767,7 +4686,5 @@ static void __exit cma_cleanup(void)
4767 destroy_workqueue(cma_wq); 4686 destroy_workqueue(cma_wq);
4768} 4687}
4769 4688
4770MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_RDMA_CM, 1);
4771
4772module_init(cma_init); 4689module_init(cma_init);
4773module_exit(cma_cleanup); 4690module_exit(cma_cleanup);