Lines Matching +full:pd +full:- +full:node
2 * Copyright (c) 2005-2006,2011-2012 Intel Corporation. All rights reserved.
14 * - Redistributions of source code must retain the above
18 * - Redistributions in binary form must reproduce the above
51 struct ibv_pd *pd; member
84 static int create_message(struct cmatest_node *node) in create_message() argument
92 node->mem = malloc(message_size); in create_message()
93 if (!node->mem) { in create_message()
95 return -1; in create_message()
97 node->mr = ibv_reg_mr(node->pd, node->mem, message_size, in create_message()
99 if (!node->mr) { in create_message()
105 free(node->mem); in create_message()
106 return -1; in create_message()
109 static int init_node(struct cmatest_node *node) in init_node() argument
114 node->pd = ibv_alloc_pd(node->cma_id->verbs); in init_node()
115 if (!node->pd) { in init_node()
116 ret = -ENOMEM; in init_node()
117 printf("cmatose: unable to allocate PD\n"); in init_node()
122 node->cq[SEND_CQ_INDEX] = ibv_create_cq(node->cma_id->verbs, cqe, node, NULL, 0); in init_node()
123 node->cq[RECV_CQ_INDEX] = ibv_create_cq(node->cma_id->verbs, cqe, node, NULL, 0); in init_node()
124 if (!node->cq[SEND_CQ_INDEX] || !node->cq[RECV_CQ_INDEX]) { in init_node()
125 ret = -ENOMEM; in init_node()
135 init_qp_attr.qp_context = node; in init_node()
138 init_qp_attr.send_cq = node->cq[SEND_CQ_INDEX]; in init_node()
139 init_qp_attr.recv_cq = node->cq[RECV_CQ_INDEX]; in init_node()
140 ret = rdma_create_qp(node->cma_id, node->pd, &init_qp_attr); in init_node()
146 ret = create_message(node); in init_node()
155 static int post_recvs(struct cmatest_node *node) in post_recvs() argument
167 recv_wr.wr_id = (uintptr_t) node; in post_recvs()
170 sge.lkey = node->mr->lkey; in post_recvs()
171 sge.addr = (uintptr_t) node->mem; in post_recvs()
174 ret = ibv_post_recv(node->cma_id->qp, &recv_wr, &recv_failure); in post_recvs()
183 static int post_sends(struct cmatest_node *node) in post_sends() argument
189 if (!node->connected || !message_count) in post_sends()
197 send_wr.wr_id = (unsigned long)node; in post_sends()
200 sge.lkey = node->mr->lkey; in post_sends()
201 sge.addr = (uintptr_t) node->mem; in post_sends()
204 ret = ibv_post_send(node->cma_id->qp, &send_wr, &bad_send_wr); in post_sends()
213 test.connects_left--; in connect_error()
216 static int addr_handler(struct cmatest_node *node) in addr_handler() argument
221 ret = rdma_set_option(node->cma_id, RDMA_OPTION_ID, in addr_handler()
227 ret = rdma_resolve_route(node->cma_id, 2000); in addr_handler()
235 static int route_handler(struct cmatest_node *node) in route_handler() argument
240 ret = init_node(node); in route_handler()
244 ret = post_recvs(node); in route_handler()
252 conn_param.private_data = test.rai->ai_connect; in route_handler()
253 conn_param.private_data_len = test.rai->ai_connect_len; in route_handler()
254 ret = rdma_connect(node->cma_id, &conn_param); in route_handler()
267 struct cmatest_node *node; in connect_handler() local
271 ret = -ENOMEM; in connect_handler()
274 node = &test.nodes[test.conn_index++]; in connect_handler()
276 node->cma_id = cma_id; in connect_handler()
277 cma_id->context = node; in connect_handler()
279 ret = init_node(node); in connect_handler()
283 ret = post_recvs(node); in connect_handler()
287 ret = rdma_accept(node->cma_id, NULL); in connect_handler()
295 node->cma_id = NULL; in connect_handler()
307 switch (event->event) { in cma_handler()
309 ret = addr_handler(cma_id->context); in cma_handler()
312 ret = route_handler(cma_id->context); in cma_handler()
318 ((struct cmatest_node *) cma_id->context)->connected = 1; in cma_handler()
319 test.connects_left--; in cma_handler()
328 rdma_event_str(event->event), event->status); in cma_handler()
330 ret = event->status; in cma_handler()
334 test.disconnects_left--; in cma_handler()
345 static void destroy_node(struct cmatest_node *node) in destroy_node() argument
347 if (!node->cma_id) in destroy_node()
350 if (node->cma_id->qp) in destroy_node()
351 rdma_destroy_qp(node->cma_id); in destroy_node()
353 if (node->cq[SEND_CQ_INDEX]) in destroy_node()
354 ibv_destroy_cq(node->cq[SEND_CQ_INDEX]); in destroy_node()
356 if (node->cq[RECV_CQ_INDEX]) in destroy_node()
357 ibv_destroy_cq(node->cq[RECV_CQ_INDEX]); in destroy_node()
359 if (node->mem) { in destroy_node()
360 ibv_dereg_mr(node->mr); in destroy_node()
361 free(node->mem); in destroy_node()
364 if (node->pd) in destroy_node()
365 ibv_dealloc_pd(node->pd); in destroy_node()
368 rdma_destroy_id(node->cma_id); in destroy_node()
378 return -ENOMEM; in alloc_nodes()
394 while (--i >= 0) in alloc_nodes()
437 ret = cma_handler(event->id, event); in connect_events()
456 ret = cma_handler(event->id, event); in disconnect_events()
477 return -1; in migrate_channel()
514 ret = rdma_bind_addr(listen_id, test.rai->ai_src_addr); in run_server()
589 ret = rdma_resolve_addr(test.nodes[i].cma_id, test.rai->ai_src_addr, in run_client()
590 test.rai->ai_dst_addr, 2000); in run_client()
638 while ((op = getopt(argc, argv, "s:b:f:P:c:C:S:t:p:m")) != -1) { in main()
684 printf("\t[-s server_address]\n"); in main()
685 printf("\t[-b bind_address]\n"); in main()
686 printf("\t[-f address_format]\n"); in main()
688 printf("\t[-P port_space]\n"); in main()
690 printf("\t[-c connections]\n"); in main()
691 printf("\t[-C message_count]\n"); in main()
692 printf("\t[-S message_size]\n"); in main()
693 printf("\t[-t type_of_service]\n"); in main()
694 printf("\t[-p port_number]\n"); in main()
695 printf("\t[-m(igrate)]\n"); in main()