Lines Matching refs:cm

99 	priv->cm.rx_wr.wr_id = id | IPOIB_OP_CM | IPOIB_OP_RECV;
101 for (i = 0; i < priv->cm.num_frags; ++i)
102 priv->cm.rx_sge[i].addr = priv->cm.srq_ring[id].mapping[i];
104 ret = ib_post_srq_recv(priv->cm.srq, &priv->cm.rx_wr, NULL);
107 ipoib_cm_dma_unmap_rx(priv, priv->cm.num_frags - 1,
108 priv->cm.srq_ring[id].mapping);
109 dev_kfree_skb_any(priv->cm.srq_ring[id].skb);
110 priv->cm.srq_ring[id].skb = NULL;
217 if (list_empty(&priv->cm.rx_flush_list) ||
218 !list_empty(&priv->cm.rx_drain_list))
225 p = list_entry(priv->cm.rx_flush_list.next, typeof(*p), list);
230 list_splice_init(&priv->cm.rx_flush_list, &priv->cm.rx_drain_list);
243 list_move(&p->list, &priv->cm.rx_flush_list);
257 .srq = priv->cm.srq,
335 for (i = 0; i < priv->cm.num_frags; ++i)
339 for (i = 1; i < priv->cm.num_frags; ++i)
344 wr->num_sge = priv->cm.num_frags;
373 if (priv->cm.nonsrq_conn_qp >= ipoib_max_conn_qp) {
379 ++priv->cm.nonsrq_conn_qp;
408 --priv->cm.nonsrq_conn_qp;
481 &priv->cm.stale_task, IPOIB_CM_RX_DELAY);
486 list_move(&p->list, &priv->cm.passive_ids);
573 ipoib_dbg_data(priv, "cm recv completion: id %d, status: %d\n",
579 list_splice_init(&priv->cm.rx_drain_list, &priv->cm.rx_reap_list);
581 queue_work(priv->wq, &priv->cm.rx_reap_task);
584 ipoib_warn(priv, "cm recv completion event with wrid %d (> %d)\n",
592 rx_ring = has_srq ? priv->cm.srq_ring : p->rx_ring;
598 "cm recv error (status=%d, wrid=%d vend_err %#x)\n",
606 list_move(&p->list, &priv->cm.rx_reap_list);
608 queue_work(priv->wq, &priv->cm.rx_reap_task);
621 list_move(&p->list, &priv->cm.passive_ids);
686 &priv->cm.rx_wr,
687 priv->cm.rx_sge,
802 ipoib_dbg_data(priv, "cm send completion: id %d, status: %d\n",
806 ipoib_warn(priv, "cm send completion event with wrid %d (> %d)\n",
842 "%s: failed cm send event (status=%d, wrid=%d vend_err %#x)\n",
846 "%s: failed cm send event (status=%d, wrid=%d vend_err %#x)\n",
853 neigh->cm = NULL;
860 list_move(&tx->list, &priv->cm.reap_list);
861 queue_work(priv->wq, &priv->cm.reap_task);
880 priv->cm.id = ib_create_cm_id(priv->ca, ipoib_cm_rx_handler, dev);
881 if (IS_ERR(priv->cm.id)) {
883 ret = PTR_ERR(priv->cm.id);
887 ret = ib_cm_listen(priv->cm.id, cpu_to_be64(IPOIB_CM_IETF_ID | priv->qp->qp_num),
898 ib_destroy_cm_id(priv->cm.id);
900 priv->cm.id = NULL;
911 list_splice_init(&priv->cm.rx_reap_list, &list);
920 --priv->cm.nonsrq_conn_qp;
934 if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id)
937 ib_destroy_cm_id(priv->cm.id);
938 priv->cm.id = NULL;
941 while (!list_empty(&priv->cm.passive_ids)) {
942 p = list_entry(priv->cm.passive_ids.next, typeof(*p), list);
943 list_move(&p->list, &priv->cm.rx_error_list);
955 while (!list_empty(&priv->cm.rx_error_list) ||
956 !list_empty(&priv->cm.rx_flush_list) ||
957 !list_empty(&priv->cm.rx_drain_list)) {
964 list_splice_init(&priv->cm.rx_flush_list,
965 &priv->cm.rx_reap_list);
966 list_splice_init(&priv->cm.rx_error_list,
967 &priv->cm.rx_reap_list);
968 list_splice_init(&priv->cm.rx_drain_list,
969 &priv->cm.rx_reap_list);
982 cancel_delayed_work(&priv->cm.stale_task);
1063 .srq = priv->cm.srq,
1170 ipoib_warn(priv, "failed to create tx cm id: %d\n", ret);
1182 ipoib_warn(priv, "failed to send cm req: %d\n", ret);
1284 neigh->cm = NULL;
1291 list_move(&tx->list, &priv->cm.reap_list);
1292 queue_work(priv->wq, &priv->cm.reap_task);
1315 neigh->cm = tx;
1318 list_add(&tx->list, &priv->cm.start_list);
1320 queue_work(priv->wq, &priv->cm.start_task);
1330 list_move(&tx->list, &priv->cm.reap_list);
1331 queue_work(priv->wq, &priv->cm.reap_task);
1344 cm.start_task);
1358 while (!list_empty(&priv->cm.start_list)) {
1359 p = list_entry(priv->cm.start_list.next, typeof(*p), list);
1389 neigh->cm = NULL;
1404 cm.reap_task);
1412 while (!list_empty(&priv->cm.reap_list)) {
1413 p = list_entry(priv->cm.reap_list.next, typeof(*p), list);
1429 cm.skb_task);
1438 while ((skb = skb_dequeue(&priv->cm.skb_queue))) {
1466 int e = skb_queue_empty(&priv->cm.skb_queue);
1470 skb_queue_tail(&priv->cm.skb_queue, skb);
1472 queue_work(priv->wq, &priv->cm.skb_task);
1478 cm.rx_reap_task)->dev);
1484 cm.stale_task.work);
1489 while (!list_empty(&priv->cm.passive_ids)) {
1492 p = list_entry(priv->cm.passive_ids.prev, typeof(*p), list);
1495 list_move(&p->list, &priv->cm.rx_error_list);
1504 if (!list_empty(&priv->cm.passive_ids))
1506 &priv->cm.stale_task, IPOIB_CM_RX_DELAY);
1567 priv->cm.srq = ib_create_srq(priv->pd, &srq_init_attr);
1568 if (IS_ERR(priv->cm.srq)) {
1569 if (PTR_ERR(priv->cm.srq) != -EOPNOTSUPP)
1571 priv->ca->name, PTR_ERR(priv->cm.srq));
1572 priv->cm.srq = NULL;
1576 priv->cm.srq_ring = vzalloc(array_size(ipoib_recvq_size,
1577 sizeof(*priv->cm.srq_ring)));
1578 if (!priv->cm.srq_ring) {
1579 ib_destroy_srq(priv->cm.srq);
1580 priv->cm.srq = NULL;
1591 INIT_LIST_HEAD(&priv->cm.passive_ids);
1592 INIT_LIST_HEAD(&priv->cm.reap_list);
1593 INIT_LIST_HEAD(&priv->cm.start_list);
1594 INIT_LIST_HEAD(&priv->cm.rx_error_list);
1595 INIT_LIST_HEAD(&priv->cm.rx_flush_list);
1596 INIT_LIST_HEAD(&priv->cm.rx_drain_list);
1597 INIT_LIST_HEAD(&priv->cm.rx_reap_list);
1598 INIT_WORK(&priv->cm.start_task, ipoib_cm_tx_start);
1599 INIT_WORK(&priv->cm.reap_task, ipoib_cm_tx_reap);
1600 INIT_WORK(&priv->cm.skb_task, ipoib_cm_skb_reap);
1601 INIT_WORK(&priv->cm.rx_reap_task, ipoib_cm_rx_reap);
1602 INIT_DELAYED_WORK(&priv->cm.stale_task, ipoib_cm_stale_task);
1604 skb_queue_head_init(&priv->cm.skb_queue);
1611 priv->cm.max_cm_mtu = max_srq_sge * PAGE_SIZE - 0x10;
1612 priv->cm.num_frags = max_srq_sge;
1614 priv->cm.max_cm_mtu, priv->cm.num_frags);
1616 priv->cm.max_cm_mtu = IPOIB_CM_MTU;
1617 priv->cm.num_frags = IPOIB_CM_RX_SG;
1620 ipoib_cm_init_rx_wr(dev, &priv->cm.rx_wr, priv->cm.rx_sge);
1624 if (!ipoib_cm_alloc_rx_skb(dev, priv->cm.srq_ring, i,
1625 priv->cm.num_frags - 1,
1626 priv->cm.srq_ring[i].mapping,
1651 if (!priv->cm.srq)
1656 ib_destroy_srq(priv->cm.srq);
1657 priv->cm.srq = NULL;
1658 if (!priv->cm.srq_ring)
1661 ipoib_cm_free_rx_ring(dev, priv->cm.srq_ring);
1662 priv->cm.srq_ring = NULL;