Lines Matching refs:chanp

422 	sol_cma_chan_t	*chanp = (sol_cma_chan_t *)rdma_idp;
428 chanp->chan_ib_client_hdl = ib_client_hdl;
429 chanp->chan_iw_client_hdl = iw_client_hdl;
435 sol_cma_chan_t *chanp = (sol_cma_chan_t *)rdma_idp;
441 chanp->chan_qp_hdl = qp_hdl;
448 sol_cma_chan_t *chanp, *root_chanp;
459 chanp = (sol_cma_chan_t *)rdma_idp;
460 root_chanp = (sol_cma_chan_t *)chanp->listen_root;
464 mutex_enter(&chanp->chan_mutex);
465 chanp->chan_cmid_destroy_state |= SOL_CMA_CALLER_CMID_DESTROYED;
471 while (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_API_PROGRESS)
472 cv_wait(&chanp->chan_destroy_cv, &chanp->chan_mutex);
475 while (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_EVENT_PROGRESS)
476 cv_wait(&chanp->chan_destroy_cv, &chanp->chan_mutex);
481 if (chanp->chan_listenp && chanp->chan_listenp->listen_is_root)
490 if (is_passive || (is_root_cmid && chanp->chan_req_state !=
493 "Skipping passive %p, %x, %x", chanp->chan_listenp,
494 is_root_cmid, chanp->chan_req_state);
503 if (is_root_cmid && chanp->chan_req_cnt) {
509 &chanp->chan_req_avl_tree); req_cmid_chan &&
510 chanp->chan_req_cnt; req_cmid_chan = next_chan) {
512 &chanp->chan_req_avl_tree, req_cmid_chan);
515 avl_remove(&chanp->chan_req_avl_tree,
517 chanp->chan_req_cnt--;
518 chanp->chan_req_total_cnt--;
519 mutex_exit(&chanp->chan_mutex);
529 mutex_enter(&chanp->chan_mutex);
555 if (is_root_cmid && chanp->chan_req_total_cnt == 0) {
558 cma_set_chan_state(chanp, SOL_CMA_CHAN_DESTROY_WAIT);
559 cv_wait(&chanp->chan_destroy_cv, &chanp->chan_mutex);
561 mutex_exit(&chanp->chan_mutex);
565 mutex_enter(&chanp->chan_mutex);
580 state = cma_get_chan_state(chanp);
582 SOL_CMAID_CONNECTED(chanp)) {
587 mutex_exit(&chanp->chan_mutex);
595 mutex_enter(&chanp->chan_mutex);
596 if (root_chanp && chanp->listen_root == NULL)
597 chanp->listen_root = (struct rdma_cm_id *)root_chanp;
599 "rdma_destroy_id(chanp %p, connect %x, ps %x)",
600 chanp, chanp->chan_connect_flag, rdma_idp->ps);
601 if (SOL_CMAID_CONNECTED(chanp)) {
603 cma_set_chan_state(chanp,
605 cv_wait(&chanp->chan_destroy_cv,
606 &chanp->chan_mutex);
607 mutex_exit(&chanp->chan_mutex);
610 cma_set_chan_state(chanp,
612 mutex_exit(&chanp->chan_mutex);
619 mutex_exit(&chanp->chan_mutex);
623 SOL_CMA_CHAN_DISCONNECT && SOL_CMAID_CONNECTED(chanp)) {
629 cma_set_chan_state(chanp, SOL_CMA_CHAN_DESTROY_PENDING);
630 mutex_exit(&chanp->chan_mutex);
633 mutex_exit(&chanp->chan_mutex);
636 mutex_exit(&chanp->chan_mutex);
653 sol_cma_chan_t *chanp;
659 chanp = (sol_cma_chan_t *)idp;
664 mutex_enter(&chanp->chan_mutex);
665 ret = cma_cas_chan_state(chanp, SOL_CMA_CHAN_IDLE, SOL_CMA_CHAN_BOUND);
667 mutex_exit(&chanp->chan_mutex);
673 mutex_exit(&chanp->chan_mutex);
681 if (chanp->chan_ib_client_hdl == NULL) {
685 chanp->chan_ib_client_hdl = ofs_clnt->ibt_hdl;
687 if (chanp->chan_ib_client_hdl && rdma_ib_bind_addr(idp, addr) == 0) {
692 } else if (chanp->chan_iw_client_hdl && rdma_iw_bind_addr(idp, addr)
700 mutex_enter(&chanp->chan_mutex);
701 cma_set_chan_state(chanp, SOL_CMA_CHAN_IDLE);
702 mutex_exit(&chanp->chan_mutex);
711 sol_cma_chan_t *chanp;
716 chanp = (sol_cma_chan_t *)idp;
721 mutex_enter(&chanp->chan_mutex);
722 state = cma_get_chan_state(chanp);
726 mutex_exit(&chanp->chan_mutex);
729 if (chanp->chan_cmid_destroy_state &
732 "rdma_resolve_addr : CMID %p, destroy called", chanp);
733 mutex_exit(&chanp->chan_mutex);
736 chanp->chan_cmid_destroy_state |= SOL_CMA_CALLER_API_PROGRESS;
738 if (chanp->chan_xport_type == SOL_CMA_XPORT_NONE) {
744 mutex_exit(&chanp->chan_mutex);
750 if (chanp->chan_ib_client_hdl == NULL) {
754 chanp->chan_ib_client_hdl = ofs_clnt->ibt_hdl;
756 if (chanp->chan_ib_client_hdl && rdma_ib_resolve_addr(idp, src_addr,
761 } else if (chanp->chan_iw_client_hdl && rdma_iw_resolve_addr(idp,
780 cma_resolve_addr_callback(sol_cma_chan_t *chanp, int rc)
784 mutex_enter(&chanp->chan_mutex);
785 if (chanp->chan_cmid_destroy_state &
788 "cma_resolve_addr : CMID %p, destroy called", chanp);
789 chanp->chan_cmid_destroy_state &=
791 cv_broadcast(&chanp->chan_destroy_cv);
792 mutex_exit(&chanp->chan_mutex);
796 cma_set_chan_state(chanp, SOL_CMA_CHAN_ADDR_RESLVD);
806 chanp->chan_cmid_destroy_state |= SOL_CMA_CALLER_EVENT_PROGRESS;
807 mutex_exit(&chanp->chan_mutex);
808 cma_generate_event_sync((struct rdma_cm_id *)chanp, event, 0,
811 mutex_enter(&chanp->chan_mutex);
812 chanp->chan_cmid_destroy_state &= ~SOL_CMA_CALLER_API_PROGRESS;
813 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED)
814 cv_broadcast(&chanp->chan_destroy_cv);
815 mutex_exit(&chanp->chan_mutex);
821 sol_cma_chan_t *chanp;
824 chanp = (sol_cma_chan_t *)idp;
828 mutex_enter(&chanp->chan_mutex);
829 if (cma_cas_chan_state(chanp, SOL_CMA_CHAN_ADDR_RESLVD,
831 mutex_exit(&chanp->chan_mutex);
836 if (chanp->chan_cmid_destroy_state &
839 "rdma_resolve_route : CMID %p, destroy called", chanp);
840 mutex_exit(&chanp->chan_mutex);
843 chanp->chan_cmid_destroy_state |= SOL_CMA_CALLER_API_PROGRESS;
844 mutex_exit(&chanp->chan_mutex);
854 mutex_enter(&chanp->chan_mutex);
855 chanp->chan_cmid_destroy_state &= ~SOL_CMA_CALLER_API_PROGRESS;
856 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED)
857 cv_broadcast(&chanp->chan_destroy_cv);
858 mutex_exit(&chanp->chan_mutex);
882 sol_cma_chan_t *chanp;
886 chanp = (sol_cma_chan_t *)idp;
890 mutex_enter(&chanp->chan_mutex);
891 if (chanp->chan_xport_type == SOL_CMA_XPORT_NONE) {
892 mutex_exit(&chanp->chan_mutex);
897 if (cma_cas_chan_state(chanp, SOL_CMA_CHAN_ROUTE_RESLVD,
899 mutex_exit(&chanp->chan_mutex);
905 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB) {
908 } else if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP) {
912 mutex_exit(&chanp->chan_mutex);
924 sol_cma_chan_t *chanp;
930 chanp = (sol_cma_chan_t *)idp;
934 mutex_enter(&chanp->chan_mutex);
935 state = cma_get_chan_state(chanp);
937 mutex_exit(&chanp->chan_mutex);
940 cma_set_chan_state(chanp, SOL_CMA_CHAN_LISTEN);
942 if (chanp->chan_cmid_destroy_state &
945 "rdma_listen : CMID %p, destroy called", chanp);
946 mutex_exit(&chanp->chan_mutex);
949 chanp->chan_cmid_destroy_state |= SOL_CMA_CALLER_API_PROGRESS;
951 ASSERT(chanp->chan_listenp == NULL);
953 chanp->chan_listenp = kmem_zalloc(sizeof (sol_cma_listen_info_t),
955 init_genlist(&(CHAN_LISTEN_LIST(chanp)));
956 (chanp->chan_listenp)->listen_is_root = 1;
957 ret = cma_init_listen_root(chanp);
959 chanp->chan_listenp = NULL;
960 mutex_exit(&chanp->chan_mutex);
963 kmem_free(chanp->chan_listenp,
968 if (chanp->chan_xport_type == SOL_CMA_XPORT_NONE) {
973 } else if (chanp->chan_xport_type == SOL_CMA_XPORT_IB) {
976 } else if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP) {
981 if (genlist_empty(&(CHAN_LISTEN_LIST(chanp)))) {
982 cma_fini_listen_root(chanp);
983 kmem_free((void *)chanp->chan_listenp,
985 chanp->chan_listenp = NULL;
988 mutex_exit(&chanp->chan_mutex);
992 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED) {
993 chanp->chan_cmid_destroy_state &=
995 cv_broadcast(&chanp->chan_destroy_cv);
998 genlist_for_each(entry, &(CHAN_LISTEN_LIST(chanp))) {
1014 chanp->chan_cmid_destroy_state &= ~SOL_CMA_CALLER_API_PROGRESS;
1015 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED)
1016 cv_broadcast(&chanp->chan_destroy_cv);
1017 mutex_exit(&chanp->chan_mutex);
1027 sol_cma_chan_t *root_chanp, *chanp;
1031 chanp = (sol_cma_chan_t *)idp;
1035 mutex_enter(&chanp->chan_mutex);
1036 if (cma_cas_chan_state(chanp, SOL_CMA_CHAN_LISTEN,
1037 SOL_CMA_CHAN_ACCEPT) && cma_cas_chan_state(chanp,
1041 mutex_exit(&chanp->chan_mutex);
1044 mutex_exit(&chanp->chan_mutex);
1046 root_idp = CHAN_LISTEN_ROOT(chanp);
1059 mutex_enter(&chanp->chan_mutex);
1065 if (chanp->chan_req_state != REQ_CMID_NOTIFIED) {
1066 mutex_exit(&chanp->chan_mutex);
1069 "accept: root_idp %p chanp %p, not in REQ "
1070 "AVL tree", root_chanp, chanp);
1073 ASSERT(cma_get_req_idp(root_idp, chanp->chan_session_id));
1079 root_idp, idp, chanp->chan_qp_hdl);
1081 (void *)chanp->chan_qp_hdl, &where);
1083 chanp->chan_req_state = REQ_CMID_SERVER_NONE;
1084 mutex_exit(&chanp->chan_mutex);
1089 root_idp, idp, chanp->chan_qp_hdl);
1094 chanp->chan_req_state = REQ_CMID_ACCEPTED;
1095 mutex_exit(&chanp->chan_mutex);
1106 cma_handle_nomore_events(chanp);
1107 mutex_enter(&chanp->chan_mutex);
1108 chan_state = cma_get_chan_state(chanp);
1109 mutex_exit(&chanp->chan_mutex);
1112 cma_destroy_id((struct rdma_cm_id *)chanp);
1117 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB)
1120 if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP)
1132 mutex_enter(&chanp->chan_mutex);
1133 if (chanp->chan_req_state == REQ_CMID_ACCEPTED) {
1135 chanp->chan_qp_hdl));
1139 (void *)chanp->chan_qp_hdl, &where);
1141 chanp->chan_req_state = REQ_CMID_SERVER_NONE;
1142 mutex_exit(&chanp->chan_mutex);
1147 root_idp, idp, chanp->chan_session_id);
1151 chanp->chan_req_state = REQ_CMID_NOTIFIED;
1153 mutex_exit(&chanp->chan_mutex);
1164 sol_cma_chan_t *chanp;
1167 chanp = (sol_cma_chan_t *)idp;
1170 mutex_enter(&chanp->chan_mutex);
1171 if (cma_cas_chan_state(chanp, SOL_CMA_CHAN_ROUTE_RESLVD,
1175 mutex_exit(&chanp->chan_mutex);
1178 mutex_exit(&chanp->chan_mutex);
1189 sol_cma_chan_t *root_chanp, *chanp;
1193 chanp = (sol_cma_chan_t *)idp;
1194 root_idp = CHAN_LISTEN_ROOT(chanp);
1199 mutex_enter(&chanp->chan_mutex);
1200 if (cma_cas_chan_state(chanp, SOL_CMA_CHAN_LISTEN,
1204 mutex_exit(&chanp->chan_mutex);
1207 mutex_exit(&chanp->chan_mutex);
1218 mutex_enter(&chanp->chan_mutex);
1219 if (chanp->chan_req_state != REQ_CMID_NOTIFIED &&
1220 chanp->chan_req_state != REQ_CMID_QUEUED) {
1221 mutex_exit(&chanp->chan_mutex);
1224 "reject: root_idp %p chanp %p, not in REQ "
1225 "AVL tree", root_chanp, chanp);
1228 ASSERT(cma_get_req_idp(root_idp, chanp->chan_session_id));
1230 chanp->chan_req_state = REQ_CMID_SERVER_NONE;
1231 mutex_exit(&chanp->chan_mutex);
1235 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB)
1238 if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP)
1250 cma_handle_nomore_events(chanp);
1251 mutex_enter(&chanp->chan_mutex);
1252 chan_state = cma_get_chan_state(chanp);
1253 mutex_exit(&chanp->chan_mutex);
1256 cma_destroy_id((struct rdma_cm_id *)chanp);
1263 chanp->chan_session_id);
1265 mutex_enter(&chanp->chan_mutex);
1266 if (chanp->chan_req_state == REQ_CMID_SERVER_NONE) {
1268 (void *)chanp->chan_session_id, &where)) {
1269 mutex_exit(&chanp->chan_mutex);
1274 root_idp, idp, chanp->chan_session_id);
1279 chanp->chan_req_state = REQ_CMID_NOTIFIED;
1281 mutex_exit(&chanp->chan_mutex);
1292 sol_cma_chan_t *chanp;
1296 chanp = (sol_cma_chan_t *)idp;
1302 mutex_enter(&chanp->chan_mutex);
1303 if (!(SOL_CMAID_CONNECTED(chanp))) {
1306 mutex_exit(&chanp->chan_mutex);
1309 state = cma_get_chan_state(chanp);
1310 cma_set_chan_state(chanp, SOL_CMA_CHAN_DISCONNECT);
1311 mutex_exit(&chanp->chan_mutex);
1313 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB) {
1316 } else if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP) {
1322 mutex_enter(&chanp->chan_mutex);
1323 cma_set_chan_state(chanp, state);
1324 mutex_exit(&chanp->chan_mutex);
1336 sol_cma_chan_t *chanp;
1340 chanp = (sol_cma_chan_t *)idp;
1344 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB) {
1347 } else if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP)
1364 sol_cma_chan_t *chanp;
1369 chanp = (sol_cma_chan_t *)idp;
1374 mutex_enter(&chanp->chan_mutex);
1375 state = cma_get_chan_state(chanp);
1381 mutex_exit(&chanp->chan_mutex);
1385 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB)
1389 else if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP)
1392 mutex_exit(&chanp->chan_mutex);
1402 sol_cma_chan_t *chanp;
1406 chanp = (sol_cma_chan_t *)idp;
1410 mutex_enter(&chanp->chan_mutex);
1411 state = cma_get_chan_state(chanp);
1417 mutex_exit(&chanp->chan_mutex);
1421 if (chanp->chan_xport_type == SOL_CMA_XPORT_IB)
1425 else if (chanp->chan_xport_type == SOL_CMA_XPORT_IWARP)
1429 mutex_exit(&chanp->chan_mutex);
1441 sol_cma_chan_t *chanp;
1443 chanp = (sol_cma_chan_t *)p2;
1444 if (chanp->chan_session_id > p1)
1446 else if (chanp->chan_session_id < p1)
1455 sol_cma_chan_t *chanp;
1457 chanp = (sol_cma_chan_t *)p2;
1458 if (chanp->chan_qp_hdl > p1)
1460 else if (chanp->chan_qp_hdl < p1)
1487 cma_init_listen_root(sol_cma_chan_t *chanp)
1495 ASSERT(chanp);
1496 ASSERT(chanp->chan_listenp);
1497 chan_listenp = chanp->chan_listenp;
1500 "cma_init_listen_root(%p)", chanp);
1508 listen_sid = ibcma_init_root_sid(chanp);
1517 chanp->chan_ib_client_hdl) {
1523 (uintptr_t)chanp, NULL);
1525 ibcma_copy_srv_hdl(chanp, cma_listenp);
1534 chanp->chan_ib_client_hdl);
1542 &cma_listenp->cma_listen_chan_list, (uintptr_t)chanp, NULL);
1544 cma_listenp->cma_listen_clnt_hdl = chanp->chan_ib_client_hdl;
1547 rc = ibcma_init_root_chan(chanp, cma_listenp);
1563 cma_fini_listen_root(sol_cma_chan_t *chanp)
1568 ASSERT(chanp);
1569 ASSERT(chanp->chan_listenp);
1571 chanp);
1572 chan_listenp = chanp->chan_listenp;
1579 if (ibcma_fini_root_chan(chanp) == 0) {
1633 sol_cma_chan_t *chanp = (sol_cma_chan_t *)idp;
1644 mutex_enter(&chanp->chan_mutex);
1645 chanp->chan_cmid_destroy_state |= SOL_CMA_CALLER_EVENT_PROGRESS;
1646 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED) {
1647 mutex_exit(&chanp->chan_mutex);
1652 mutex_exit(&chanp->chan_mutex);
1692 mutex_enter(&chanp->chan_mutex);
1693 chanp->chan_cmid_destroy_state &=
1695 if (chanp->chan_cmid_destroy_state &
1697 cv_broadcast(&chanp->chan_destroy_cv);
1698 mutex_exit(&chanp->chan_mutex);
1708 sol_cma_chan_t *chanp = (sol_cma_chan_t *)idp;
1732 mutex_enter(&chanp->chan_mutex);
1733 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED) {
1734 mutex_exit(&chanp->chan_mutex);
1737 mutex_exit(&chanp->chan_mutex);
1739 root_idp = CHAN_LISTEN_ROOT(chanp);
1786 mutex_enter(&chanp->chan_mutex);
1787 ASSERT(SOL_IS_SERVER_CMID(chanp));
1788 chanp->chan_req_state = REQ_CMID_SERVER_NONE;
1789 chanp->chan_cmid_destroy_state &=
1791 if (chanp->chan_cmid_destroy_state &
1793 cv_broadcast(&chanp->chan_destroy_cv);
1794 mutex_exit(&chanp->chan_mutex);
1796 mutex_exit(&chanp->chan_mutex);
1803 cma_handle_nomore_events(chanp);
1804 mutex_enter(&chanp->chan_mutex);
1805 chan_state = cma_get_chan_state(chanp);
1806 chanp->chan_cmid_destroy_state &=
1808 if (chanp->chan_cmid_destroy_state &
1810 cv_broadcast(&chanp->chan_destroy_cv);
1811 mutex_exit(&chanp->chan_mutex);
1814 mutex_exit(&chanp->chan_mutex);
1815 cma_destroy_id((struct rdma_cm_id *)chanp);
1817 mutex_exit(&chanp->chan_mutex);
1830 cma_handle_nomore_events(chanp);
1831 mutex_enter(&chanp->chan_mutex);
1832 chan_state = cma_get_chan_state(chanp);
1833 chanp->chan_cmid_destroy_state &=
1835 if (chanp->chan_cmid_destroy_state &
1837 cv_broadcast(&chanp->chan_destroy_cv);
1838 mutex_exit(&chanp->chan_mutex);
1841 mutex_exit(&chanp->chan_mutex);
1842 cma_destroy_id((struct rdma_cm_id *)chanp);
1844 mutex_exit(&chanp->chan_mutex);
1852 mutex_enter(&chanp->chan_mutex);
1853 chan_state = cma_get_chan_state(chanp);
1854 chanp->chan_cmid_destroy_state &=
1856 if (chanp->chan_cmid_destroy_state &
1858 cv_broadcast(&chanp->chan_destroy_cv);
1859 mutex_exit(&chanp->chan_mutex);
1861 mutex_exit(&chanp->chan_mutex);
1864 mutex_exit(&chanp->chan_mutex);
1868 mutex_enter(&chanp->chan_mutex);
1869 chanp->chan_cmid_destroy_state &= ~SOL_CMA_CALLER_EVENT_PROGRESS;
1870 if (chanp->chan_cmid_destroy_state & SOL_CMA_CALLER_CMID_DESTROYED)
1871 cv_broadcast(&chanp->chan_destroy_cv);
1872 mutex_exit(&chanp->chan_mutex);
1881 sol_cma_chan_t *chanp;
1883 chanp = kmem_zalloc(sizeof (sol_cma_chan_t), KM_SLEEP);
1884 mutex_init(&chanp->chan_mutex, NULL, MUTEX_DRIVER, NULL);
1885 cv_init(&chanp->chan_destroy_cv, NULL, CV_DRIVER, NULL);
1886 rdma_idp = &(chanp->chan_rdma_cm);
1890 mutex_enter(&chanp->chan_mutex);
1891 cma_set_chan_state(chanp, SOL_CMA_CHAN_IDLE);
1892 avl_create(&chanp->chan_req_avl_tree, sol_cma_req_cmid_cmp,
1895 avl_create(&chanp->chan_acpt_avl_tree, sol_cma_cmid_cmp,
1898 mutex_exit(&chanp->chan_mutex);
1905 cma_set_chan_state(sol_cma_chan_t *chanp, cma_chan_state_t newstate)
1907 ASSERT(MUTEX_HELD(&chanp->chan_mutex));
1908 chanp->chan_state = newstate;
1912 cma_get_chan_state(sol_cma_chan_t *chanp)
1914 ASSERT(MUTEX_HELD(&chanp->chan_mutex));
1915 return (chanp->chan_state);
1920 cma_cas_chan_state(sol_cma_chan_t *chanp, cma_chan_state_t prevstate,
1925 ASSERT(MUTEX_HELD(&chanp->chan_mutex));
1926 if (chanp->chan_state != prevstate)
1929 chanp->chan_state = newstate;
1938 sol_cma_chan_t *chanp = (sol_cma_chan_t *)idp;
1941 mutex_enter(&chanp->chan_mutex);
1942 entry = remove_genlist_head(&(CHAN_LISTEN_LIST(chanp)));
1943 mutex_exit(&chanp->chan_mutex);
1976 mutex_enter(&chanp->chan_mutex);
1977 entry = remove_genlist_head(&(CHAN_LISTEN_LIST(chanp)));
1978 mutex_exit(&chanp->chan_mutex);
2010 sol_cma_chan_t *chanp = (sol_cma_chan_t *)idp;
2014 mutex_enter(&chanp->chan_mutex);
2015 acpt_nodes = avl_numnodes(&chanp->chan_acpt_avl_tree);
2016 req_nodes = avl_numnodes(&chanp->chan_req_avl_tree);
2017 state = cma_get_chan_state(chanp);
2020 idp, acpt_nodes, req_nodes, chanp->listen_root,
2021 state, chanp->chan_req_state);
2028 cma_set_chan_state(chanp, SOL_CMA_CHAN_DESTROY_PENDING);
2029 mutex_exit(&chanp->chan_mutex);
2032 cma_set_chan_state(chanp, SOL_CMA_CHAN_DESTROYING);
2033 avl_destroy(&chanp->chan_req_avl_tree);
2034 avl_destroy(&chanp->chan_acpt_avl_tree);
2036 mutex_exit(&chanp->chan_mutex);
2043 switch (chanp->chan_xport_type) {
2057 chanp->chan_xport_type);
2067 if (chanp->chan_listenp) {
2069 cma_fini_listen_root(chanp);
2070 kmem_free((void *)chanp->chan_listenp,
2072 chanp->chan_listenp = NULL;
2075 if (chanp->listen_root) {
2079 root_idp = chanp->listen_root;
2107 mutex_destroy(&chanp->chan_mutex);
2108 cv_destroy(&chanp->chan_destroy_cv);
2109 kmem_free(chanp, sizeof (sol_cma_chan_t));
2121 cma_handle_nomore_events(sol_cma_chan_t *chanp)
2128 idp = (struct rdma_cm_id *)chanp;
2129 root_idp = CHAN_LISTEN_ROOT(chanp);
2135 mutex_enter(&chanp->chan_mutex);
2136 CHAN_LISTEN_ROOT(chanp) = NULL;
2143 if (chanp->chan_req_state == REQ_CMID_ACCEPTED) {
2144 ASSERT(chanp->chan_qp_hdl);
2146 chanp->chan_qp_hdl));
2148 chanp->chan_req_state = REQ_CMID_SERVER_NONE;
2150 if (REQ_CMID_IN_REQ_AVL_TREE(chanp)) {
2151 ASSERT(chanp->chan_session_id);
2153 chanp->chan_session_id));
2155 chanp->chan_req_state = REQ_CMID_SERVER_NONE;
2161 mutex_exit(&chanp->chan_mutex);
2173 cma_init_ud_qp(sol_cma_chan_t *chanp, struct ib_qp *qp)
2179 ret = rdma_init_qp_attr(&chanp->chan_rdma_cm, &qp_attr, &qp_attr_mask);
2200 cma_init_conn_qp(sol_cma_chan_t *chanp, struct ib_qp *qp)
2206 ret = rdma_init_qp_attr(&chanp->chan_rdma_cm, &qp_attr, &qp_attr_mask);
2223 sol_cma_chan_t *chanp;
2229 chanp = (sol_cma_chan_t *)idp;
2243 ret = cma_init_ud_qp(chanp, qp);
2245 ret = cma_init_conn_qp(chanp, qp);
2253 chanp->chan_qp_num = qp->qp_num;
2254 chanp->chan_is_srq = (qp->srq != NULL);