Lines Matching refs:cm

99 	rx_req = (struct ipoib_rx_buf *)&priv->cm.srq_ring[id];  in ipoib_cm_post_receive_srq()
101 priv->cm.rx_sge[i].addr = rx_req->mapping[i]; in ipoib_cm_post_receive_srq()
102 priv->cm.rx_sge[i].length = m->m_len; in ipoib_cm_post_receive_srq()
105 priv->cm.rx_wr.num_sge = i; in ipoib_cm_post_receive_srq()
106 priv->cm.rx_wr.wr_id = id | IPOIB_OP_CM | IPOIB_OP_RECV; in ipoib_cm_post_receive_srq()
108 ret = ib_post_srq_recv(priv->cm.srq, &priv->cm.rx_wr, &bad_wr); in ipoib_cm_post_receive_srq()
112 m_freem(priv->cm.srq_ring[id].mb); in ipoib_cm_post_receive_srq()
113 priv->cm.srq_ring[id].mb = NULL; in ipoib_cm_post_receive_srq()
154 sizeof(struct ipoib_pseudoheader), priv->cm.max_cm_mtu, IPOIB_CM_RX_SG); in ipoib_cm_alloc_rx_mb()
178 if (list_empty(&priv->cm.rx_flush_list) || in ipoib_cm_start_rx_drain()
179 !list_empty(&priv->cm.rx_drain_list)) in ipoib_cm_start_rx_drain()
186 p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list); in ipoib_cm_start_rx_drain()
190 list_splice_init(&priv->cm.rx_flush_list, &priv->cm.rx_drain_list); in ipoib_cm_start_rx_drain()
203 list_move(&p->list, &priv->cm.rx_flush_list); in ipoib_cm_rx_event_handler()
216 .srq = priv->cm.srq, in ipoib_cm_create_rx_qp()
226 attr.cap.max_recv_sge = priv->cm.num_frags; in ipoib_cm_create_rx_qp()
329 if (priv->cm.nonsrq_conn_qp >= ipoib_max_conn_qp) { in ipoib_cm_nonsrq_init_rx()
335 ++priv->cm.nonsrq_conn_qp; in ipoib_cm_nonsrq_init_rx()
362 --priv->cm.nonsrq_conn_qp; in ipoib_cm_nonsrq_init_rx()
380 data.mtu = cpu_to_be32(priv->cm.max_cm_mtu); in ipoib_cm_send_rep()
429 &priv->cm.stale_task, IPOIB_CM_RX_DELAY); in ipoib_cm_req_handler()
434 list_move(&p->list, &priv->cm.passive_ids); in ipoib_cm_req_handler()
492 list_splice_init(&priv->cm.rx_drain_list, &priv->cm.rx_reap_list); in ipoib_cm_handle_rx_wc()
494 if (priv->cm.id != NULL) in ipoib_cm_handle_rx_wc()
496 &priv->cm.rx_reap_task); in ipoib_cm_handle_rx_wc()
507 rx_ring = has_srq ? priv->cm.srq_ring : p->rx_ring; in ipoib_cm_handle_rx_wc()
521 list_move(&p->list, &priv->cm.rx_reap_list); in ipoib_cm_handle_rx_wc()
522 queue_work(ipoib_workqueue, &priv->cm.rx_reap_task); in ipoib_cm_handle_rx_wc()
535 list_move(&p->list, &priv->cm.passive_ids); in ipoib_cm_handle_rx_wc()
584 &priv->cm.rx_wr, in ipoib_cm_handle_rx_wc()
585 priv->cm.rx_sge, in ipoib_cm_handle_rx_wc()
651 priv->cm.num_frags))) { in ipoib_cm_send()
719 path->cm = NULL; in ipoib_cm_handle_tx_wc()
725 list_move(&tx->list, &priv->cm.reap_list); in ipoib_cm_handle_tx_wc()
726 queue_work(ipoib_workqueue, &priv->cm.reap_task); in ipoib_cm_handle_tx_wc()
741 priv->cm.id = ib_create_cm_id(priv->ca, ipoib_cm_rx_handler, priv); in ipoib_cm_dev_open()
742 if (IS_ERR(priv->cm.id)) { in ipoib_cm_dev_open()
744 ret = PTR_ERR(priv->cm.id); in ipoib_cm_dev_open()
748 ret = ib_cm_listen(priv->cm.id, cpu_to_be64(IPOIB_CM_IETF_ID | priv->qp->qp_num), 0); in ipoib_cm_dev_open()
758 ib_destroy_cm_id(priv->cm.id); in ipoib_cm_dev_open()
760 priv->cm.id = NULL; in ipoib_cm_dev_open()
770 list_splice_init(&priv->cm.rx_reap_list, &list); in ipoib_cm_free_rx_reap_list()
779 --priv->cm.nonsrq_conn_qp; in ipoib_cm_free_rx_reap_list()
792 if (!IPOIB_CM_SUPPORTED(if_getlladdr(priv->dev)) || !priv->cm.id) in ipoib_cm_dev_stop()
795 ib_destroy_cm_id(priv->cm.id); in ipoib_cm_dev_stop()
796 priv->cm.id = NULL; in ipoib_cm_dev_stop()
798 cancel_work_sync(&priv->cm.rx_reap_task); in ipoib_cm_dev_stop()
801 while (!list_empty(&priv->cm.passive_ids)) { in ipoib_cm_dev_stop()
802 p = list_entry(priv->cm.passive_ids.next, typeof(*p), list); in ipoib_cm_dev_stop()
803 list_move(&p->list, &priv->cm.rx_error_list); in ipoib_cm_dev_stop()
815 while (!list_empty(&priv->cm.rx_error_list) || in ipoib_cm_dev_stop()
816 !list_empty(&priv->cm.rx_flush_list) || in ipoib_cm_dev_stop()
817 !list_empty(&priv->cm.rx_drain_list)) { in ipoib_cm_dev_stop()
824 list_splice_init(&priv->cm.rx_flush_list, in ipoib_cm_dev_stop()
825 &priv->cm.rx_reap_list); in ipoib_cm_dev_stop()
826 list_splice_init(&priv->cm.rx_error_list, in ipoib_cm_dev_stop()
827 &priv->cm.rx_reap_list); in ipoib_cm_dev_stop()
828 list_splice_init(&priv->cm.rx_drain_list, in ipoib_cm_dev_stop()
829 &priv->cm.rx_reap_list); in ipoib_cm_dev_stop()
842 cancel_delayed_work_sync(&priv->cm.stale_task); in ipoib_cm_dev_stop()
931 .srq = priv->cm.srq, in ipoib_cm_create_tx_qp()
933 .cap.max_send_sge = priv->cm.num_frags, in ipoib_cm_create_tx_qp()
953 data.mtu = cpu_to_be32(priv->cm.max_cm_mtu); in ipoib_cm_send_req()
1141 path->cm = NULL; in ipoib_cm_tx_handler()
1148 list_move(&tx->list, &priv->cm.reap_list); in ipoib_cm_tx_handler()
1149 queue_work(ipoib_workqueue, &priv->cm.reap_task); in ipoib_cm_tx_handler()
1173 path->cm = tx; in ipoib_cm_create_tx()
1176 list_add(&tx->list, &priv->cm.start_list); in ipoib_cm_create_tx()
1178 queue_work(ipoib_workqueue, &priv->cm.start_task); in ipoib_cm_create_tx()
1187 list_move(&tx->list, &priv->cm.reap_list); in ipoib_cm_destroy_tx()
1189 queue_work(ipoib_workqueue, &priv->cm.reap_task); in ipoib_cm_destroy_tx()
1199 cm.start_task); in ipoib_cm_tx_start()
1211 while (!list_empty(&priv->cm.start_list)) { in ipoib_cm_tx_start()
1212 p = list_entry(priv->cm.start_list.next, typeof(*p), list); in ipoib_cm_tx_start()
1227 path->cm = NULL; in ipoib_cm_tx_start()
1243 cm.reap_task); in ipoib_cm_tx_reap()
1249 while (!list_empty(&priv->cm.reap_list)) { in ipoib_cm_tx_reap()
1250 p = list_entry(priv->cm.reap_list.next, typeof(*p), list); in ipoib_cm_tx_reap()
1263 cm.mb_task); in ipoib_cm_mb_reap()
1276 IF_DEQUEUE(&priv->cm.mb_queue, mb); in ipoib_cm_mb_reap()
1309 int e = priv->cm.mb_queue.ifq_len; in ipoib_cm_mb_too_long()
1311 IF_ENQUEUE(&priv->cm.mb_queue, mb); in ipoib_cm_mb_too_long()
1313 queue_work(ipoib_workqueue, &priv->cm.mb_task); in ipoib_cm_mb_too_long()
1319 cm.rx_reap_task)); in ipoib_cm_rx_reap()
1325 cm.stale_task.work); in ipoib_cm_stale_task()
1330 while (!list_empty(&priv->cm.passive_ids)) { in ipoib_cm_stale_task()
1333 p = list_entry(priv->cm.passive_ids.prev, typeof(*p), list); in ipoib_cm_stale_task()
1336 list_move(&p->list, &priv->cm.rx_error_list); in ipoib_cm_stale_task()
1345 if (!list_empty(&priv->cm.passive_ids)) in ipoib_cm_stale_task()
1347 &priv->cm.stale_task, IPOIB_CM_RX_DELAY); in ipoib_cm_stale_task()
1361 priv->cm.srq = ib_create_srq(priv->pd, &srq_init_attr); in ipoib_cm_create_srq()
1362 if (IS_ERR(priv->cm.srq)) { in ipoib_cm_create_srq()
1363 if (PTR_ERR(priv->cm.srq) != -ENOSYS) in ipoib_cm_create_srq()
1365 priv->ca->name, PTR_ERR(priv->cm.srq)); in ipoib_cm_create_srq()
1366 priv->cm.srq = NULL; in ipoib_cm_create_srq()
1370 priv->cm.srq_ring = kzalloc(ipoib_recvq_size * sizeof *priv->cm.srq_ring, GFP_KERNEL); in ipoib_cm_create_srq()
1371 if (!priv->cm.srq_ring) { in ipoib_cm_create_srq()
1374 ib_destroy_srq(priv->cm.srq); in ipoib_cm_create_srq()
1375 priv->cm.srq = NULL; in ipoib_cm_create_srq()
1379 memset(priv->cm.srq_ring, 0, ipoib_recvq_size * sizeof *priv->cm.srq_ring); in ipoib_cm_create_srq()
1388 INIT_LIST_HEAD(&priv->cm.passive_ids); in ipoib_cm_dev_init()
1389 INIT_LIST_HEAD(&priv->cm.reap_list); in ipoib_cm_dev_init()
1390 INIT_LIST_HEAD(&priv->cm.start_list); in ipoib_cm_dev_init()
1391 INIT_LIST_HEAD(&priv->cm.rx_error_list); in ipoib_cm_dev_init()
1392 INIT_LIST_HEAD(&priv->cm.rx_flush_list); in ipoib_cm_dev_init()
1393 INIT_LIST_HEAD(&priv->cm.rx_drain_list); in ipoib_cm_dev_init()
1394 INIT_LIST_HEAD(&priv->cm.rx_reap_list); in ipoib_cm_dev_init()
1395 INIT_WORK(&priv->cm.start_task, ipoib_cm_tx_start); in ipoib_cm_dev_init()
1396 INIT_WORK(&priv->cm.reap_task, ipoib_cm_tx_reap); in ipoib_cm_dev_init()
1397 INIT_WORK(&priv->cm.mb_task, ipoib_cm_mb_reap); in ipoib_cm_dev_init()
1398 INIT_WORK(&priv->cm.rx_reap_task, ipoib_cm_rx_reap); in ipoib_cm_dev_init()
1399 INIT_DELAYED_WORK(&priv->cm.stale_task, ipoib_cm_stale_task); in ipoib_cm_dev_init()
1401 bzero(&priv->cm.mb_queue, sizeof(priv->cm.mb_queue)); in ipoib_cm_dev_init()
1402 mtx_init(&priv->cm.mb_queue.ifq_mtx, in ipoib_cm_dev_init()
1412 priv->cm.max_cm_mtu = max_srq_sge * MJUMPAGESIZE; in ipoib_cm_dev_init()
1413 priv->cm.num_frags = max_srq_sge; in ipoib_cm_dev_init()
1415 priv->cm.max_cm_mtu, priv->cm.num_frags); in ipoib_cm_dev_init()
1417 priv->cm.max_cm_mtu = IPOIB_CM_MAX_MTU; in ipoib_cm_dev_init()
1418 priv->cm.num_frags = IPOIB_CM_RX_SG; in ipoib_cm_dev_init()
1421 ipoib_cm_init_rx_wr(priv, &priv->cm.rx_wr, priv->cm.rx_sge); in ipoib_cm_dev_init()
1425 if (!ipoib_cm_alloc_rx_mb(priv, &priv->cm.srq_ring[i])) { in ipoib_cm_dev_init()
1449 if (!priv->cm.srq) in ipoib_cm_dev_cleanup()
1454 ret = ib_destroy_srq(priv->cm.srq); in ipoib_cm_dev_cleanup()
1458 priv->cm.srq = NULL; in ipoib_cm_dev_cleanup()
1459 if (!priv->cm.srq_ring) in ipoib_cm_dev_cleanup()
1462 ipoib_cm_free_rx_ring(priv, priv->cm.srq_ring); in ipoib_cm_dev_cleanup()
1463 priv->cm.srq_ring = NULL; in ipoib_cm_dev_cleanup()
1465 mtx_destroy(&priv->cm.mb_queue.ifq_mtx); in ipoib_cm_dev_cleanup()