Lines Matching refs:cm

99 	rx_req = (struct ipoib_rx_buf *)&priv->cm.srq_ring[id];
101 priv->cm.rx_sge[i].addr = rx_req->mapping[i];
102 priv->cm.rx_sge[i].length = m->m_len;
105 priv->cm.rx_wr.num_sge = i;
106 priv->cm.rx_wr.wr_id = id | IPOIB_OP_CM | IPOIB_OP_RECV;
108 ret = ib_post_srq_recv(priv->cm.srq, &priv->cm.rx_wr, &bad_wr);
112 m_freem(priv->cm.srq_ring[id].mb);
113 priv->cm.srq_ring[id].mb = NULL;
154 priv->cm.max_cm_mtu, IPOIB_CM_RX_SG);
178 if (list_empty(&priv->cm.rx_flush_list) ||
179 !list_empty(&priv->cm.rx_drain_list))
186 p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list);
190 list_splice_init(&priv->cm.rx_flush_list, &priv->cm.rx_drain_list);
203 list_move(&p->list, &priv->cm.rx_flush_list);
216 .srq = priv->cm.srq,
226 attr.cap.max_recv_sge = priv->cm.num_frags;
329 if (priv->cm.nonsrq_conn_qp >= ipoib_max_conn_qp) {
335 ++priv->cm.nonsrq_conn_qp;
362 --priv->cm.nonsrq_conn_qp;
380 data.mtu = cpu_to_be32(priv->cm.max_cm_mtu);
429 &priv->cm.stale_task, IPOIB_CM_RX_DELAY);
434 list_move(&p->list, &priv->cm.passive_ids);
489 ipoib_dbg_data(priv, "cm recv completion: id %d, status: %d\n",
495 list_splice_init(&priv->cm.rx_drain_list, &priv->cm.rx_reap_list);
497 if (priv->cm.id != NULL)
499 &priv->cm.rx_reap_task);
502 ipoib_warn(priv, "cm recv completion event with wrid %d (> %d)\n",
510 rx_ring = has_srq ? priv->cm.srq_ring : p->rx_ring;
515 ipoib_dbg(priv, "cm recv error "
524 list_move(&p->list, &priv->cm.rx_reap_list);
525 queue_work(ipoib_workqueue, &priv->cm.rx_reap_task);
538 list_move(&p->list, &priv->cm.passive_ids);
579 &priv->cm.rx_wr,
580 priv->cm.rx_sge,
647 priv->cm.num_frags))) {
680 ipoib_dbg_data(priv, "cm send completion: id %d, status: %d\n",
684 ipoib_warn(priv, "cm send completion event with wrid %d (> %d)\n",
708 ipoib_dbg(priv, "failed cm send event "
715 path->cm = NULL;
721 list_move(&tx->list, &priv->cm.reap_list);
722 queue_work(ipoib_workqueue, &priv->cm.reap_task);
737 priv->cm.id = ib_create_cm_id(priv->ca, ipoib_cm_rx_handler, priv);
738 if (IS_ERR(priv->cm.id)) {
740 ret = PTR_ERR(priv->cm.id);
744 ret = ib_cm_listen(priv->cm.id, cpu_to_be64(IPOIB_CM_IETF_ID | priv->qp->qp_num), 0);
754 ib_destroy_cm_id(priv->cm.id);
756 priv->cm.id = NULL;
766 list_splice_init(&priv->cm.rx_reap_list, &list);
775 --priv->cm.nonsrq_conn_qp;
788 if (!IPOIB_CM_SUPPORTED(IF_LLADDR(priv->dev)) || !priv->cm.id)
791 ib_destroy_cm_id(priv->cm.id);
792 priv->cm.id = NULL;
794 cancel_work_sync(&priv->cm.rx_reap_task);
797 while (!list_empty(&priv->cm.passive_ids)) {
798 p = list_entry(priv->cm.passive_ids.next, typeof(*p), list);
799 list_move(&p->list, &priv->cm.rx_error_list);
811 while (!list_empty(&priv->cm.rx_error_list) ||
812 !list_empty(&priv->cm.rx_flush_list) ||
813 !list_empty(&priv->cm.rx_drain_list)) {
820 list_splice_init(&priv->cm.rx_flush_list,
821 &priv->cm.rx_reap_list);
822 list_splice_init(&priv->cm.rx_error_list,
823 &priv->cm.rx_reap_list);
824 list_splice_init(&priv->cm.rx_drain_list,
825 &priv->cm.rx_reap_list);
838 cancel_delayed_work_sync(&priv->cm.stale_task);
851 ipoib_dbg(priv, "cm rep handler\n");
924 .srq = priv->cm.srq,
926 .cap.max_send_sge = priv->cm.num_frags,
943 ipoib_dbg(priv, "cm send req\n");
946 data.mtu = cpu_to_be32(priv->cm.max_cm_mtu);
1021 ipoib_warn(priv, "failed to create tx cm id: %d\n", ret);
1033 ipoib_warn(priv, "failed to send cm req: %d\n", ret);
1134 path->cm = NULL;
1141 list_move(&tx->list, &priv->cm.reap_list);
1142 queue_work(ipoib_workqueue, &priv->cm.reap_task);
1165 ipoib_dbg(priv, "Creating cm tx\n");
1166 path->cm = tx;
1169 list_add(&tx->list, &priv->cm.start_list);
1171 queue_work(ipoib_workqueue, &priv->cm.start_task);
1180 list_move(&tx->list, &priv->cm.reap_list);
1182 queue_work(ipoib_workqueue, &priv->cm.reap_task);
1192 cm.start_task);
1201 ipoib_dbg(priv, "cm start task\n");
1204 while (!list_empty(&priv->cm.start_list)) {
1205 p = list_entry(priv->cm.start_list.next, typeof(*p), list);
1220 path->cm = NULL;
1236 cm.reap_task);
1242 while (!list_empty(&priv->cm.reap_list)) {
1243 p = list_entry(priv->cm.reap_list.next, typeof(*p), list);
1256 cm.mb_task);
1269 IF_DEQUEUE(&priv->cm.mb_queue, mb);
1302 int e = priv->cm.mb_queue.ifq_len;
1304 IF_ENQUEUE(&priv->cm.mb_queue, mb);
1306 queue_work(ipoib_workqueue, &priv->cm.mb_task);
1312 cm.rx_reap_task));
1318 cm.stale_task.work);
1323 while (!list_empty(&priv->cm.passive_ids)) {
1326 p = list_entry(priv->cm.passive_ids.prev, typeof(*p), list);
1329 list_move(&p->list, &priv->cm.rx_error_list);
1338 if (!list_empty(&priv->cm.passive_ids))
1340 &priv->cm.stale_task, IPOIB_CM_RX_DELAY);
1354 priv->cm.srq = ib_create_srq(priv->pd, &srq_init_attr);
1355 if (IS_ERR(priv->cm.srq)) {
1356 if (PTR_ERR(priv->cm.srq) != -ENOSYS)
1358 priv->ca->name, PTR_ERR(priv->cm.srq));
1359 priv->cm.srq = NULL;
1363 priv->cm.srq_ring = kzalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring, GFP_KERNEL);
1364 if (!priv->cm.srq_ring) {
1367 ib_destroy_srq(priv->cm.srq);
1368 priv->cm.srq = NULL;
1372 memset(priv->cm.srq_ring, 0, ipoib_recvq_size * sizeof *priv->cm.srq_ring);
1381 INIT_LIST_HEAD(&priv->cm.passive_ids);
1382 INIT_LIST_HEAD(&priv->cm.reap_list);
1383 INIT_LIST_HEAD(&priv->cm.start_list);
1384 INIT_LIST_HEAD(&priv->cm.rx_error_list);
1385 INIT_LIST_HEAD(&priv->cm.rx_flush_list);
1386 INIT_LIST_HEAD(&priv->cm.rx_drain_list);
1387 INIT_LIST_HEAD(&priv->cm.rx_reap_list);
1388 INIT_WORK(&priv->cm.start_task, ipoib_cm_tx_start);
1389 INIT_WORK(&priv->cm.reap_task, ipoib_cm_tx_reap);
1390 INIT_WORK(&priv->cm.mb_task, ipoib_cm_mb_reap);
1391 INIT_WORK(&priv->cm.rx_reap_task, ipoib_cm_rx_reap);
1392 INIT_DELAYED_WORK(&priv->cm.stale_task, ipoib_cm_stale_task);
1394 bzero(&priv->cm.mb_queue, sizeof(priv->cm.mb_queue));
1395 mtx_init(&priv->cm.mb_queue.ifq_mtx,
1405 priv->cm.max_cm_mtu = max_srq_sge * MJUMPAGESIZE;
1406 priv->cm.num_frags = max_srq_sge;
1408 priv->cm.max_cm_mtu, priv->cm.num_frags);
1410 priv->cm.max_cm_mtu = IPOIB_CM_MAX_MTU;
1411 priv->cm.num_frags = IPOIB_CM_RX_SG;
1414 ipoib_cm_init_rx_wr(priv, &priv->cm.rx_wr, priv->cm.rx_sge);
1418 if (!ipoib_cm_alloc_rx_mb(priv, &priv->cm.srq_ring[i])) {
1442 if (!priv->cm.srq)
1447 ret = ib_destroy_srq(priv->cm.srq);
1451 priv->cm.srq = NULL;
1452 if (!priv->cm.srq_ring)
1455 ipoib_cm_free_rx_ring(priv, priv->cm.srq_ring);
1456 priv->cm.srq_ring = NULL;
1458 mtx_destroy(&priv->cm.mb_queue.ifq_mtx);