Lines Matching refs:cm

99 	priv->cm.rx_wr.wr_id = id | IPOIB_OP_CM | IPOIB_OP_RECV;  in ipoib_cm_post_receive_srq()
101 for (i = 0; i < priv->cm.num_frags; ++i) in ipoib_cm_post_receive_srq()
102 priv->cm.rx_sge[i].addr = priv->cm.srq_ring[id].mapping[i]; in ipoib_cm_post_receive_srq()
104 ret = ib_post_srq_recv(priv->cm.srq, &priv->cm.rx_wr, NULL); in ipoib_cm_post_receive_srq()
107 ipoib_cm_dma_unmap_rx(priv, priv->cm.num_frags - 1, in ipoib_cm_post_receive_srq()
108 priv->cm.srq_ring[id].mapping); in ipoib_cm_post_receive_srq()
109 dev_kfree_skb_any(priv->cm.srq_ring[id].skb); in ipoib_cm_post_receive_srq()
110 priv->cm.srq_ring[id].skb = NULL; in ipoib_cm_post_receive_srq()
217 if (list_empty(&priv->cm.rx_flush_list) || in ipoib_cm_start_rx_drain()
218 !list_empty(&priv->cm.rx_drain_list)) in ipoib_cm_start_rx_drain()
225 p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list); in ipoib_cm_start_rx_drain()
230 list_splice_init(&priv->cm.rx_flush_list, &priv->cm.rx_drain_list); in ipoib_cm_start_rx_drain()
243 list_move(&p->list, &priv->cm.rx_flush_list); in ipoib_cm_rx_event_handler()
257 .srq = priv->cm.srq, in ipoib_cm_create_rx_qp()
335 for (i = 0; i < priv->cm.num_frags; ++i) in ipoib_cm_init_rx_wr()
339 for (i = 1; i < priv->cm.num_frags; ++i) in ipoib_cm_init_rx_wr()
344 wr->num_sge = priv->cm.num_frags; in ipoib_cm_init_rx_wr()
373 if (priv->cm.nonsrq_conn_qp >= ipoib_max_conn_qp) { in ipoib_cm_nonsrq_init_rx()
379 ++priv->cm.nonsrq_conn_qp; in ipoib_cm_nonsrq_init_rx()
408 --priv->cm.nonsrq_conn_qp; in ipoib_cm_nonsrq_init_rx()
481 &priv->cm.stale_task, IPOIB_CM_RX_DELAY); in ipoib_cm_req_handler()
486 list_move(&p->list, &priv->cm.passive_ids); in ipoib_cm_req_handler()
579 list_splice_init(&priv->cm.rx_drain_list, &priv->cm.rx_reap_list); in ipoib_cm_handle_rx_wc()
581 queue_work(priv->wq, &priv->cm.rx_reap_task); in ipoib_cm_handle_rx_wc()
592 rx_ring = has_srq ? priv->cm.srq_ring : p->rx_ring; in ipoib_cm_handle_rx_wc()
606 list_move(&p->list, &priv->cm.rx_reap_list); in ipoib_cm_handle_rx_wc()
608 queue_work(priv->wq, &priv->cm.rx_reap_task); in ipoib_cm_handle_rx_wc()
621 list_move(&p->list, &priv->cm.passive_ids); in ipoib_cm_handle_rx_wc()
686 &priv->cm.rx_wr, in ipoib_cm_handle_rx_wc()
687 priv->cm.rx_sge, in ipoib_cm_handle_rx_wc()
851 neigh->cm = NULL; in ipoib_cm_handle_tx_wc()
858 list_move(&tx->list, &priv->cm.reap_list); in ipoib_cm_handle_tx_wc()
859 queue_work(priv->wq, &priv->cm.reap_task); in ipoib_cm_handle_tx_wc()
878 priv->cm.id = ib_create_cm_id(priv->ca, ipoib_cm_rx_handler, dev); in ipoib_cm_dev_open()
879 if (IS_ERR(priv->cm.id)) { in ipoib_cm_dev_open()
881 ret = PTR_ERR(priv->cm.id); in ipoib_cm_dev_open()
885 ret = ib_cm_listen(priv->cm.id, cpu_to_be64(IPOIB_CM_IETF_ID | priv->qp->qp_num), in ipoib_cm_dev_open()
896 ib_destroy_cm_id(priv->cm.id); in ipoib_cm_dev_open()
898 priv->cm.id = NULL; in ipoib_cm_dev_open()
909 list_splice_init(&priv->cm.rx_reap_list, &list); in ipoib_cm_free_rx_reap_list()
918 --priv->cm.nonsrq_conn_qp; in ipoib_cm_free_rx_reap_list()
932 if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id) in ipoib_cm_dev_stop()
935 ib_destroy_cm_id(priv->cm.id); in ipoib_cm_dev_stop()
936 priv->cm.id = NULL; in ipoib_cm_dev_stop()
939 while (!list_empty(&priv->cm.passive_ids)) { in ipoib_cm_dev_stop()
940 p = list_entry(priv->cm.passive_ids.next, typeof(*p), list); in ipoib_cm_dev_stop()
941 list_move(&p->list, &priv->cm.rx_error_list); in ipoib_cm_dev_stop()
953 while (!list_empty(&priv->cm.rx_error_list) || in ipoib_cm_dev_stop()
954 !list_empty(&priv->cm.rx_flush_list) || in ipoib_cm_dev_stop()
955 !list_empty(&priv->cm.rx_drain_list)) { in ipoib_cm_dev_stop()
962 list_splice_init(&priv->cm.rx_flush_list, in ipoib_cm_dev_stop()
963 &priv->cm.rx_reap_list); in ipoib_cm_dev_stop()
964 list_splice_init(&priv->cm.rx_error_list, in ipoib_cm_dev_stop()
965 &priv->cm.rx_reap_list); in ipoib_cm_dev_stop()
966 list_splice_init(&priv->cm.rx_drain_list, in ipoib_cm_dev_stop()
967 &priv->cm.rx_reap_list); in ipoib_cm_dev_stop()
980 cancel_delayed_work(&priv->cm.stale_task); in ipoib_cm_dev_stop()
1061 .srq = priv->cm.srq, in ipoib_cm_create_tx_qp()
1281 neigh->cm = NULL; in ipoib_cm_tx_handler()
1288 list_move(&tx->list, &priv->cm.reap_list); in ipoib_cm_tx_handler()
1289 queue_work(priv->wq, &priv->cm.reap_task); in ipoib_cm_tx_handler()
1312 neigh->cm = tx; in ipoib_cm_create_tx()
1315 list_add(&tx->list, &priv->cm.start_list); in ipoib_cm_create_tx()
1317 queue_work(priv->wq, &priv->cm.start_task); in ipoib_cm_create_tx()
1327 list_move(&tx->list, &priv->cm.reap_list); in ipoib_cm_destroy_tx()
1328 queue_work(priv->wq, &priv->cm.reap_task); in ipoib_cm_destroy_tx()
1341 cm.start_task); in ipoib_cm_tx_start()
1355 while (!list_empty(&priv->cm.start_list)) { in ipoib_cm_tx_start()
1356 p = list_entry(priv->cm.start_list.next, typeof(*p), list); in ipoib_cm_tx_start()
1386 neigh->cm = NULL; in ipoib_cm_tx_start()
1401 cm.reap_task); in ipoib_cm_tx_reap()
1409 while (!list_empty(&priv->cm.reap_list)) { in ipoib_cm_tx_reap()
1410 p = list_entry(priv->cm.reap_list.next, typeof(*p), list); in ipoib_cm_tx_reap()
1426 cm.skb_task); in ipoib_cm_skb_reap()
1435 while ((skb = skb_dequeue(&priv->cm.skb_queue))) { in ipoib_cm_skb_reap()
1463 int e = skb_queue_empty(&priv->cm.skb_queue); in ipoib_cm_skb_too_long()
1467 skb_queue_tail(&priv->cm.skb_queue, skb); in ipoib_cm_skb_too_long()
1469 queue_work(priv->wq, &priv->cm.skb_task); in ipoib_cm_skb_too_long()
1475 cm.rx_reap_task)->dev); in ipoib_cm_rx_reap()
1481 cm.stale_task.work); in ipoib_cm_stale_task()
1486 while (!list_empty(&priv->cm.passive_ids)) { in ipoib_cm_stale_task()
1489 p = list_entry(priv->cm.passive_ids.prev, typeof(*p), list); in ipoib_cm_stale_task()
1492 list_move(&p->list, &priv->cm.rx_error_list); in ipoib_cm_stale_task()
1501 if (!list_empty(&priv->cm.passive_ids)) in ipoib_cm_stale_task()
1503 &priv->cm.stale_task, IPOIB_CM_RX_DELAY); in ipoib_cm_stale_task()
1564 priv->cm.srq = ib_create_srq(priv->pd, &srq_init_attr); in ipoib_cm_create_srq()
1565 if (IS_ERR(priv->cm.srq)) { in ipoib_cm_create_srq()
1566 if (PTR_ERR(priv->cm.srq) != -EOPNOTSUPP) in ipoib_cm_create_srq()
1568 priv->ca->name, PTR_ERR(priv->cm.srq)); in ipoib_cm_create_srq()
1569 priv->cm.srq = NULL; in ipoib_cm_create_srq()
1573 priv->cm.srq_ring = vzalloc(array_size(ipoib_recvq_size, in ipoib_cm_create_srq()
1574 sizeof(*priv->cm.srq_ring))); in ipoib_cm_create_srq()
1575 if (!priv->cm.srq_ring) { in ipoib_cm_create_srq()
1576 ib_destroy_srq(priv->cm.srq); in ipoib_cm_create_srq()
1577 priv->cm.srq = NULL; in ipoib_cm_create_srq()
1588 INIT_LIST_HEAD(&priv->cm.passive_ids); in ipoib_cm_dev_init()
1589 INIT_LIST_HEAD(&priv->cm.reap_list); in ipoib_cm_dev_init()
1590 INIT_LIST_HEAD(&priv->cm.start_list); in ipoib_cm_dev_init()
1591 INIT_LIST_HEAD(&priv->cm.rx_error_list); in ipoib_cm_dev_init()
1592 INIT_LIST_HEAD(&priv->cm.rx_flush_list); in ipoib_cm_dev_init()
1593 INIT_LIST_HEAD(&priv->cm.rx_drain_list); in ipoib_cm_dev_init()
1594 INIT_LIST_HEAD(&priv->cm.rx_reap_list); in ipoib_cm_dev_init()
1595 INIT_WORK(&priv->cm.start_task, ipoib_cm_tx_start); in ipoib_cm_dev_init()
1596 INIT_WORK(&priv->cm.reap_task, ipoib_cm_tx_reap); in ipoib_cm_dev_init()
1597 INIT_WORK(&priv->cm.skb_task, ipoib_cm_skb_reap); in ipoib_cm_dev_init()
1598 INIT_WORK(&priv->cm.rx_reap_task, ipoib_cm_rx_reap); in ipoib_cm_dev_init()
1599 INIT_DELAYED_WORK(&priv->cm.stale_task, ipoib_cm_stale_task); in ipoib_cm_dev_init()
1601 skb_queue_head_init(&priv->cm.skb_queue); in ipoib_cm_dev_init()
1608 priv->cm.max_cm_mtu = max_srq_sge * PAGE_SIZE - 0x10; in ipoib_cm_dev_init()
1609 priv->cm.num_frags = max_srq_sge; in ipoib_cm_dev_init()
1611 priv->cm.max_cm_mtu, priv->cm.num_frags); in ipoib_cm_dev_init()
1613 priv->cm.max_cm_mtu = IPOIB_CM_MTU; in ipoib_cm_dev_init()
1614 priv->cm.num_frags = IPOIB_CM_RX_SG; in ipoib_cm_dev_init()
1617 ipoib_cm_init_rx_wr(dev, &priv->cm.rx_wr, priv->cm.rx_sge); in ipoib_cm_dev_init()
1621 if (!ipoib_cm_alloc_rx_skb(dev, priv->cm.srq_ring, i, in ipoib_cm_dev_init()
1622 priv->cm.num_frags - 1, in ipoib_cm_dev_init()
1623 priv->cm.srq_ring[i].mapping, in ipoib_cm_dev_init()
1649 if (!priv->cm.srq) in ipoib_cm_dev_cleanup()
1654 ret = ib_destroy_srq(priv->cm.srq); in ipoib_cm_dev_cleanup()
1658 priv->cm.srq = NULL; in ipoib_cm_dev_cleanup()
1659 if (!priv->cm.srq_ring) in ipoib_cm_dev_cleanup()
1662 ipoib_cm_free_rx_ring(dev, priv->cm.srq_ring); in ipoib_cm_dev_cleanup()
1663 priv->cm.srq_ring = NULL; in ipoib_cm_dev_cleanup()