Lines Matching refs:hca
99 rib_hca_t *hca; member
119 static int rib_find_hca_connection(rib_hca_t *hca, struct netbuf *s_svcaddr,
277 static rdma_stat rib_registermem_via_hca(rib_hca_t *hca, caddr_t adsp,
279 static rdma_stat rib_deregistermem_via_hca(rib_hca_t *hca, caddr_t buf,
314 static void rib_destroy_cache(rib_hca_t *hca);
371 static rib_bufpool_t *rib_rbufpool_create(rib_hca_t *hca, int ptype, int num);
505 rib_hca_t *hca, *hcap; in rpcib_free_hca_list() local
508 hca = rib_stat->hcas_list; in rpcib_free_hca_list()
511 while (hca != NULL) { in rpcib_free_hca_list()
512 rw_enter(&hca->state_lock, RW_WRITER); in rpcib_free_hca_list()
513 hcap = hca; in rpcib_free_hca_list()
514 hca = hca->next; in rpcib_free_hca_list()
710 static void rib_rbufpool_destroy(rib_hca_t *hca, int ptype);
722 rib_create_cq(rib_hca_t *hca, uint32_t cq_size, ibt_cq_handler_t cq_handler, in rib_create_cq() argument
732 cq->rib_hca = hca; in rib_create_cq()
736 status = ibt_alloc_cq(hca->hca_hdl, &cq_attr, &cq->rib_cq_hdl, in rib_create_cq()
744 ibt_set_cq_handler(cq->rib_cq_hdl, cq_handler, hca); in rib_create_cq()
778 rib_hca_t *hca = ribstat->hcas_list; in rpcib_find_hca() local
780 while (hca && hca->hca_guid != guid) in rpcib_find_hca()
781 hca = hca->next; in rpcib_find_hca()
783 return (hca); in rpcib_find_hca()
789 rib_hca_t *hca; in rpcib_open_hcas() local
815 hca = kmem_zalloc(sizeof (rib_hca_t), KM_SLEEP); in rpcib_open_hcas()
818 hca_guids[i], &hca->hca_hdl); in rpcib_open_hcas()
820 kmem_free(hca, sizeof (rib_hca_t)); in rpcib_open_hcas()
823 hca->hca_guid = hca_guids[i]; in rpcib_open_hcas()
824 hca->ibt_clnt_hdl = ribstat->ibt_clnt_hdl; in rpcib_open_hcas()
825 hca->state = HCA_INITED; in rpcib_open_hcas()
830 ibt_status = ibt_query_hca(hca->hca_hdl, &hca->hca_attrs); in rpcib_open_hcas()
841 ibt_status = ibt_alloc_pd(hca->hca_hdl, pd_flags, &hca->pd_hdl); in rpcib_open_hcas()
849 ibt_status = ibt_query_hca_ports(hca->hca_hdl, in rpcib_open_hcas()
850 0, &pinfop, &hca->hca_nports, &size); in rpcib_open_hcas()
854 hca->hca_ports = pinfop; in rpcib_open_hcas()
855 hca->hca_pinfosz = size; in rpcib_open_hcas()
865 status = rib_create_cq(hca, cq_size, rib_svc_rcq_handler, in rpcib_open_hcas()
866 &hca->svc_rcq); in rpcib_open_hcas()
871 status = rib_create_cq(hca, cq_size, rib_svc_scq_handler, in rpcib_open_hcas()
872 &hca->svc_scq); in rpcib_open_hcas()
877 status = rib_create_cq(hca, cq_size, rib_clnt_rcq_handler, in rpcib_open_hcas()
878 &hca->clnt_rcq); in rpcib_open_hcas()
883 status = rib_create_cq(hca, cq_size, rib_clnt_scq_handler, in rpcib_open_hcas()
884 &hca->clnt_scq); in rpcib_open_hcas()
893 hca->recv_pool = rib_rbufpool_create(hca, in rpcib_open_hcas()
895 if (hca->recv_pool == NULL) { in rpcib_open_hcas()
899 hca->send_pool = rib_rbufpool_create(hca, in rpcib_open_hcas()
901 if (hca->send_pool == NULL) { in rpcib_open_hcas()
902 rib_rbufpool_destroy(hca, RECV_BUFFER); in rpcib_open_hcas()
906 if (hca->server_side_cache == NULL) { in rpcib_open_hcas()
909 (long long unsigned int) hca->hca_guid); in rpcib_open_hcas()
910 hca->server_side_cache = kmem_cache_create( in rpcib_open_hcas()
916 hca, NULL, 0); in rpcib_open_hcas()
919 avl_create(&hca->avl_tree, in rpcib_open_hcas()
925 rw_init(&hca->bound_services_lock, NULL, RW_DRIVER, in rpcib_open_hcas()
926 hca->iblock); in rpcib_open_hcas()
927 rw_init(&hca->state_lock, NULL, RW_DRIVER, hca->iblock); in rpcib_open_hcas()
928 rw_init(&hca->avl_rw_lock, in rpcib_open_hcas()
929 NULL, RW_DRIVER, hca->iblock); in rpcib_open_hcas()
930 mutex_init(&hca->cache_allocation_lock, in rpcib_open_hcas()
932 hca->avl_init = TRUE; in rpcib_open_hcas()
950 if (hca->cleanup_helper == NULL) { in rpcib_open_hcas()
951 char tq_name[sizeof (hca->hca_guid) * 2 + 1]; in rpcib_open_hcas()
954 (unsigned long long int) hca->hca_guid); in rpcib_open_hcas()
955 hca->cleanup_helper = ddi_taskq_create(NULL, in rpcib_open_hcas()
959 mutex_init(&hca->cb_lock, NULL, MUTEX_DRIVER, hca->iblock); in rpcib_open_hcas()
960 cv_init(&hca->cb_cv, NULL, CV_DRIVER, NULL); in rpcib_open_hcas()
961 rw_init(&hca->cl_conn_list.conn_lock, NULL, RW_DRIVER, in rpcib_open_hcas()
962 hca->iblock); in rpcib_open_hcas()
963 rw_init(&hca->srv_conn_list.conn_lock, NULL, RW_DRIVER, in rpcib_open_hcas()
964 hca->iblock); in rpcib_open_hcas()
965 mutex_init(&hca->inuse_lock, NULL, MUTEX_DRIVER, hca->iblock); in rpcib_open_hcas()
966 hca->inuse = TRUE; in rpcib_open_hcas()
968 hca->next = ribstat->hcas_list; in rpcib_open_hcas()
969 ribstat->hcas_list = hca; in rpcib_open_hcas()
971 ibt_free_portinfo(hca->hca_ports, hca->hca_pinfosz); in rpcib_open_hcas()
975 ibt_free_portinfo(hca->hca_ports, hca->hca_pinfosz); in rpcib_open_hcas()
977 (void) ibt_free_pd(hca->hca_hdl, hca->pd_hdl); in rpcib_open_hcas()
979 (void) ibt_close_hca(hca->hca_hdl); in rpcib_open_hcas()
980 kmem_free(hca, sizeof (rib_hca_t)); in rpcib_open_hcas()
1552 *handle = (void *)rpt.hca; in rib_reachable()
1565 rib_clnt_create_chan(rib_hca_t *hca, struct netbuf *raddr, rib_qp_t **qp) in rib_clnt_create_chan() argument
1576 kqp->hca = hca; in rib_clnt_create_chan()
1590 mutex_init(&kqp->posted_rbufs_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_clnt_create_chan()
1592 mutex_init(&kqp->send_rbufs_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_clnt_create_chan()
1593 mutex_init(&kqp->replylist_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_clnt_create_chan()
1594 mutex_init(&kqp->rdlist_lock, NULL, MUTEX_DEFAULT, hca->iblock); in rib_clnt_create_chan()
1595 mutex_init(&kqp->cb_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_clnt_create_chan()
1597 mutex_init(&kqp->rdmaconn.c_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_clnt_create_chan()
1614 rib_svc_create_chan(rib_hca_t *hca, caddr_t q, uint8_t port, rib_qp_t **qp) in rib_svc_create_chan() argument
1625 kqp->hca = hca; in rib_svc_create_chan()
1634 qp_attr.rc_scq = hca->svc_scq->rib_cq_hdl; in rib_svc_create_chan()
1635 qp_attr.rc_rcq = hca->svc_rcq->rib_cq_hdl; in rib_svc_create_chan()
1636 qp_attr.rc_pd = hca->pd_hdl; in rib_svc_create_chan()
1646 rw_enter(&hca->state_lock, RW_READER); in rib_svc_create_chan()
1647 if (hca->state != HCA_DETACHED) { in rib_svc_create_chan()
1648 ibt_status = ibt_alloc_rc_channel(hca->hca_hdl, in rib_svc_create_chan()
1652 rw_exit(&hca->state_lock); in rib_svc_create_chan()
1655 rw_exit(&hca->state_lock); in rib_svc_create_chan()
1669 mutex_init(&kqp->replylist_lock, NULL, MUTEX_DEFAULT, hca->iblock); in rib_svc_create_chan()
1670 mutex_init(&kqp->posted_rbufs_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_svc_create_chan()
1672 mutex_init(&kqp->send_rbufs_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_svc_create_chan()
1673 mutex_init(&kqp->rdlist_lock, NULL, MUTEX_DEFAULT, hca->iblock); in rib_svc_create_chan()
1674 mutex_init(&kqp->cb_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_svc_create_chan()
1676 mutex_init(&kqp->rdmaconn.c_lock, NULL, MUTEX_DRIVER, hca->iblock); in rib_svc_create_chan()
1709 rib_hca_t *hca; in rib_clnt_cm_handler() local
1711 hca = (rib_hca_t *)clnt_hdl; in rib_clnt_cm_handler()
1761 rw_enter(&hca->state_lock, RW_READER); in rib_clnt_cm_handler()
1762 if (hca->state != HCA_DETACHED) in rib_clnt_cm_handler()
1764 &hca->cl_conn_list); in rib_clnt_cm_handler()
1765 rw_exit(&hca->state_lock); in rib_clnt_cm_handler()
1794 rib_conn_to_srv(rib_hca_t *hca, rib_qp_t *qp, rpcib_ping_t *rptp) in rib_conn_to_srv() argument
1842 qp_attr.rc_scq = hca->clnt_scq->rib_cq_hdl; in rib_conn_to_srv()
1843 qp_attr.rc_rcq = hca->clnt_rcq->rib_cq_hdl; in rib_conn_to_srv()
1844 qp_attr.rc_pd = hca->pd_hdl; in rib_conn_to_srv()
1857 chan_args.oc_cm_clnt_private = (void *)hca; in rib_conn_to_srv()
1866 rw_enter(&hca->state_lock, RW_READER); in rib_conn_to_srv()
1867 if (hca->state != HCA_DETACHED) { in rib_conn_to_srv()
1868 ibt_status = ibt_alloc_rc_channel(hca->hca_hdl, in rib_conn_to_srv()
1873 rw_exit(&hca->state_lock); in rib_conn_to_srv()
1876 rw_exit(&hca->state_lock); in rib_conn_to_srv()
1930 rib_hca_t *hca; in rib_ping_srv() local
1959 for (hca = rib_stat->hcas_list; hca; hca = hca->next) { in rib_ping_srv()
1960 rw_enter(&hca->state_lock, RW_READER); in rib_ping_srv()
1961 if (hca->state == HCA_DETACHED) { in rib_ping_srv()
1962 rw_exit(&hca->state_lock); in rib_ping_srv()
1967 ipattr.ipa_hca_guid = hca->hca_guid; in rib_ping_srv()
1987 rptp->path.pi_hca_guid == hca->hca_guid) { in rib_ping_srv()
1988 rptp->hca = hca; in rib_ping_srv()
1989 rw_exit(&hca->state_lock); in rib_ping_srv()
2004 rw_exit(&hca->state_lock); in rib_ping_srv()
2024 rib_hca_t *hca; in rib_disconnect_channel() local
2041 hca = qp->hca; in rib_disconnect_channel()
2113 rw_enter(&hca->state_lock, RW_READER); in rib_disconnect_channel()
2114 if (hca->state == HCA_DETACHED) { in rib_disconnect_channel()
2115 rw_enter(&hca->srv_conn_list.conn_lock, RW_READER); in rib_disconnect_channel()
2116 if (hca->srv_conn_list.conn_hd == NULL) { in rib_disconnect_channel()
2117 rw_enter(&hca->cl_conn_list.conn_lock, in rib_disconnect_channel()
2120 if (hca->cl_conn_list.conn_hd == NULL) { in rib_disconnect_channel()
2121 mutex_enter(&hca->inuse_lock); in rib_disconnect_channel()
2122 hca->inuse = FALSE; in rib_disconnect_channel()
2123 cv_signal(&hca->cb_cv); in rib_disconnect_channel()
2124 mutex_exit(&hca->inuse_lock); in rib_disconnect_channel()
2126 rw_exit(&hca->cl_conn_list.conn_lock); in rib_disconnect_channel()
2128 rw_exit(&hca->srv_conn_list.conn_lock); in rib_disconnect_channel()
2130 rw_exit(&hca->state_lock); in rib_disconnect_channel()
2937 rib_hca_t *hca; in rib_srv_cm_handler() local
2954 hca = (rib_hca_t *)any; in rib_srv_cm_handler()
2980 status = rib_svc_create_chan(hca, (caddr_t)q, in rib_srv_cm_handler()
3031 (void) rib_add_connlist(conn, &hca->srv_conn_list); in rib_srv_cm_handler()
3036 rw_enter(&hca->state_lock, RW_READER); in rib_srv_cm_handler()
3037 if (hca->state == HCA_DETACHED) { in rib_srv_cm_handler()
3038 rw_exit(&hca->state_lock); in rib_srv_cm_handler()
3041 rw_exit(&hca->state_lock); in rib_srv_cm_handler()
3177 &hca->srv_conn_list); in rib_srv_cm_handler()
3229 rib_register_service(rib_hca_t *hca, int service_type, in rib_register_service() argument
3245 rw_enter(&hca->state_lock, RW_READER); in rib_register_service()
3246 if (hca->state != HCA_DETACHED) { in rib_register_service()
3247 ibt_status = ibt_query_hca_ports(hca->hca_hdl, 0, &port_infop, in rib_register_service()
3249 rw_exit(&hca->state_lock); in rib_register_service()
3251 rw_exit(&hca->state_lock); in rib_register_service()
3301 ibt_status = ibt_register_service(hca->ibt_clnt_hdl, in rib_register_service()
3344 rw_enter(&hca->bound_services_lock, RW_READER); in rib_register_service()
3346 for (hca_srv = hca->bound_services; hca_srv; in rib_register_service()
3354 rw_exit(&hca->bound_services_lock); in rib_register_service()
3371 gid, NULL, hca, &sbp); in rib_register_service()
3381 rw_enter(&hca->bound_services_lock, in rib_register_service()
3383 hca_srv->next = hca->bound_services; in rib_register_service()
3384 hca->bound_services = hca_srv; in rib_register_service()
3385 rw_exit(&hca->bound_services_lock); in rib_register_service()
3417 rib_hca_t *hca; in rib_listen() local
3435 for (hca = rib_stat->hcas_list; hca; hca = hca->next) { in rib_listen()
3439 rw_enter(&hca->state_lock, RW_READER); in rib_listen()
3440 if (hca->state != HCA_INITED) { in rib_listen()
3441 rw_exit(&hca->state_lock); in rib_listen()
3444 rw_exit(&hca->state_lock); in rib_listen()
3452 status = rib_register_service(hca, NFS, in rib_listen()
3480 rib_hca_t *hca; in rib_listen_stop() local
3496 for (hca = rib_stat->hcas_list; hca; hca = hca->next) { in rib_listen_stop()
3500 rw_enter(&hca->state_lock, RW_READER); in rib_listen_stop()
3501 if (hca->state == HCA_DETACHED) { in rib_listen_stop()
3502 rw_exit(&hca->state_lock); in rib_listen_stop()
3505 rib_close_channels(&hca->srv_conn_list); in rib_listen_stop()
3506 rib_stop_services(hca); in rib_listen_stop()
3507 rw_exit(&hca->state_lock); in rib_listen_stop()
3527 rib_stop_services(rib_hca_t *hca) in rib_stop_services() argument
3536 rw_enter(&hca->bound_services_lock, RW_READER); in rib_stop_services()
3537 srv_list = hca->bound_services; in rib_stop_services()
3538 hca->bound_services = NULL; in rib_stop_services()
3539 rw_exit(&hca->bound_services_lock); in rib_stop_services()
3664 rib_hca_t *hca = (ctoqp(conn))->hca; in rib_registermem() local
3669 status = rib_reg_mem(hca, adsp, buf, buflen, 0, &mr_hdl, &mr_desc); in rib_registermem()
3683 rib_reg_mem(rib_hca_t *hca, caddr_t adsp, caddr_t buf, uint_t size, in rib_reg_mem() argument
3696 rw_enter(&hca->state_lock, RW_READER); in rib_reg_mem()
3697 if (hca->state != HCA_DETACHED) { in rib_reg_mem()
3698 ibt_status = ibt_register_mr(hca->hca_hdl, hca->pd_hdl, in rib_reg_mem()
3700 rw_exit(&hca->state_lock); in rib_reg_mem()
3702 rw_exit(&hca->state_lock); in rib_reg_mem()
3720 rib_hca_t *hca = (ctoqp(conn))->hca; in rib_registermemsync() local
3743 status = rib_reg_mem(hca, adsp, buf, buflen, 0, &mr_hdl, &mr_desc); in rib_registermemsync()
3768 rib_hca_t *hca = (ctoqp(conn))->hca; in rib_deregistermem() local
3775 (void) ibt_deregister_mr(hca->hca_hdl, in rib_deregistermem()
3802 rib_hca_t *hca = (ctoqp(conn))->hca; in rib_syncmem() local
3815 rw_enter(&hca->state_lock, RW_READER); in rib_syncmem()
3816 if (hca->state != HCA_DETACHED) { in rib_syncmem()
3817 status = ibt_sync_mr(hca->hca_hdl, &mr_segment, 1); in rib_syncmem()
3818 rw_exit(&hca->state_lock); in rib_syncmem()
3820 rw_exit(&hca->state_lock); in rib_syncmem()
3848 rib_rbufpool_create(rib_hca_t *hca, int ptype, int num) in rib_rbufpool_create() argument
3862 mutex_init(&bp->buflock, NULL, MUTEX_DRIVER, hca->iblock); in rib_rbufpool_create()
3888 rw_enter(&hca->state_lock, RW_READER); in rib_rbufpool_create()
3890 if (hca->state == HCA_DETACHED) { in rib_rbufpool_create()
3891 rw_exit(&hca->state_lock); in rib_rbufpool_create()
3900 ibt_status = ibt_register_mr(hca->hca_hdl, in rib_rbufpool_create()
3901 hca->pd_hdl, &mem_attr, in rib_rbufpool_create()
3906 (void) ibt_deregister_mr(hca->hca_hdl, in rib_rbufpool_create()
3909 rw_exit(&hca->state_lock); in rib_rbufpool_create()
3913 rw_exit(&hca->state_lock); in rib_rbufpool_create()
3939 rib_rbufpool_deregister(rib_hca_t *hca, int ptype) in rib_rbufpool_deregister() argument
3950 rbp = hca->send_pool; in rib_rbufpool_deregister()
3953 rbp = hca->recv_pool; in rib_rbufpool_deregister()
3967 (void) ibt_deregister_mr(hca->hca_hdl, rbp->mr_hdl[i]); in rib_rbufpool_deregister()
3972 rib_rbufpool_free(rib_hca_t *hca, int ptype) in rib_rbufpool_free() argument
3983 rbp = hca->send_pool; in rib_rbufpool_free()
3986 rbp = hca->recv_pool; in rib_rbufpool_free()
4012 rib_rbufpool_destroy(rib_hca_t *hca, int ptype) in rib_rbufpool_destroy() argument
4017 rib_rbufpool_deregister(hca, ptype); in rib_rbufpool_destroy()
4018 rib_rbufpool_free(hca, ptype); in rib_rbufpool_destroy()
4062 rib_hca_t *hca = qp->hca; in rib_rbuf_alloc() local
4074 rbp = hca->send_pool; in rib_rbuf_alloc()
4077 rbp = hca->recv_pool; in rib_rbuf_alloc()
4134 rib_hca_t *hca = qp->hca; in rib_rbuf_free() local
4143 rbp = hca->send_pool; in rib_rbuf_free()
4146 rbp = hca->recv_pool; in rib_rbuf_free()
4219 rib_find_hca_connection(rib_hca_t *hca, struct netbuf *s_svcaddr, in rib_find_hca_connection() argument
4227 rw_enter(&hca->cl_conn_list.conn_lock, RW_READER); in rib_find_hca_connection()
4228 cn = hca->cl_conn_list.conn_hd; in rib_find_hca_connection()
4241 rw_exit(&hca->cl_conn_list.conn_lock); in rib_find_hca_connection()
4270 rw_exit(&hca->cl_conn_list.conn_lock); in rib_find_hca_connection()
4310 rw_exit(&hca->cl_conn_list.conn_lock); in rib_find_hca_connection()
4339 rib_hca_t *hca; in rib_connect() local
4345 for (hca = rib_stat->hcas_list; hca; hca = hca->next) { in rib_connect()
4346 rw_enter(&hca->state_lock, RW_READER); in rib_connect()
4347 if (hca->state != HCA_DETACHED) { in rib_connect()
4348 status = rib_find_hca_connection(hca, s_svcaddr, in rib_connect()
4350 rw_exit(&hca->state_lock); in rib_connect()
4356 rw_exit(&hca->state_lock); in rib_connect()
4369 hca = rpt->hca; in rib_connect()
4384 if (rib_clnt_create_chan(hca, d_svcaddr, &qp) != RDMA_SUCCESS) { in rib_connect()
4433 (void) rib_add_connlist(cn, &hca->cl_conn_list); in rib_connect()
4434 status = rib_conn_to_srv(hca, qp, rpt); in rib_connect()
4500 &qp->hca->srv_conn_list); in rib_conn_close()
4503 &qp->hca->cl_conn_list); in rib_conn_close()
4511 rib_hca_t *hca = ctoqp(conn)->hca; in rib_conn_timeout_call() local
4537 error = ddi_taskq_dispatch(hca->cleanup_helper, rib_conn_close, in rib_conn_timeout_call()
4799 rib_free_hca(rib_hca_t *hca) in rib_free_hca() argument
4801 (void) ibt_free_cq(hca->clnt_rcq->rib_cq_hdl); in rib_free_hca()
4802 (void) ibt_free_cq(hca->clnt_scq->rib_cq_hdl); in rib_free_hca()
4803 (void) ibt_free_cq(hca->svc_rcq->rib_cq_hdl); in rib_free_hca()
4804 (void) ibt_free_cq(hca->svc_scq->rib_cq_hdl); in rib_free_hca()
4806 kmem_free(hca->clnt_rcq, sizeof (rib_cq_t)); in rib_free_hca()
4807 kmem_free(hca->clnt_scq, sizeof (rib_cq_t)); in rib_free_hca()
4808 kmem_free(hca->svc_rcq, sizeof (rib_cq_t)); in rib_free_hca()
4809 kmem_free(hca->svc_scq, sizeof (rib_cq_t)); in rib_free_hca()
4811 rib_rbufpool_destroy(hca, RECV_BUFFER); in rib_free_hca()
4812 rib_rbufpool_destroy(hca, SEND_BUFFER); in rib_free_hca()
4813 rib_destroy_cache(hca); in rib_free_hca()
4816 (void) ibt_free_pd(hca->hca_hdl, hca->pd_hdl); in rib_free_hca()
4817 (void) ibt_close_hca(hca->hca_hdl); in rib_free_hca()
4818 hca->hca_hdl = NULL; in rib_free_hca()
4823 rib_stop_hca_services(rib_hca_t *hca) in rib_stop_hca_services() argument
4825 rib_stop_services(hca); in rib_stop_hca_services()
4826 rib_close_channels(&hca->cl_conn_list); in rib_stop_hca_services()
4827 rib_close_channels(&hca->srv_conn_list); in rib_stop_hca_services()
4829 rib_purge_connlist(&hca->cl_conn_list); in rib_stop_hca_services()
4830 rib_purge_connlist(&hca->srv_conn_list); in rib_stop_hca_services()
4838 rw_enter(&hca->srv_conn_list.conn_lock, RW_READER); in rib_stop_hca_services()
4839 rw_enter(&hca->cl_conn_list.conn_lock, RW_READER); in rib_stop_hca_services()
4840 if (hca->srv_conn_list.conn_hd == NULL && in rib_stop_hca_services()
4841 hca->cl_conn_list.conn_hd == NULL) { in rib_stop_hca_services()
4846 rib_free_hca(hca); in rib_stop_hca_services()
4848 rw_exit(&hca->cl_conn_list.conn_lock); in rib_stop_hca_services()
4849 rw_exit(&hca->srv_conn_list.conn_lock); in rib_stop_hca_services()
4851 if (hca->hca_hdl != NULL) { in rib_stop_hca_services()
4852 mutex_enter(&hca->inuse_lock); in rib_stop_hca_services()
4853 while (hca->inuse) in rib_stop_hca_services()
4854 cv_wait(&hca->cb_cv, &hca->inuse_lock); in rib_stop_hca_services()
4855 mutex_exit(&hca->inuse_lock); in rib_stop_hca_services()
4857 rib_free_hca(hca); in rib_stop_hca_services()
4859 rw_destroy(&hca->bound_services_lock); in rib_stop_hca_services()
4861 if (hca->cleanup_helper != NULL) { in rib_stop_hca_services()
4862 ddi_taskq_destroy(hca->cleanup_helper); in rib_stop_hca_services()
4863 hca->cleanup_helper = NULL; in rib_stop_hca_services()
4873 rib_hca_t *hca = NULL; in rib_detach_hca() local
4878 hca = *hcap; in rib_detach_hca()
4879 rw_enter(&hca->state_lock, RW_WRITER); in rib_detach_hca()
4880 if (hca->hca_hdl == hca_hdl) { in rib_detach_hca()
4885 hca->state = HCA_DETACHED; in rib_detach_hca()
4886 *hcap = hca->next; in rib_detach_hca()
4889 rw_exit(&hca->state_lock); in rib_detach_hca()
4892 rw_exit(&hca->state_lock); in rib_detach_hca()
4896 if (hca == NULL) in rib_detach_hca()
4898 ASSERT(hca->hca_hdl == hca_hdl); in rib_detach_hca()
4911 rib_stop_hca_services(hca); in rib_detach_hca()
4913 kmem_free(hca, sizeof (*hca)); in rib_detach_hca()
4921 rib_hca_t *hca = (rib_hca_t *)argp; in rib_server_side_cache_reclaim() local
4923 rw_enter(&hca->avl_rw_lock, RW_WRITER); in rib_server_side_cache_reclaim()
4924 rcas = avl_first(&hca->avl_tree); in rib_server_side_cache_reclaim()
4926 avl_remove(&hca->avl_tree, rcas); in rib_server_side_cache_reclaim()
4934 (void) rib_deregistermem_via_hca(hca, in rib_server_side_cache_reclaim()
4937 hca->cache_allocation -= rb->lrc_len; in rib_server_side_cache_reclaim()
4942 kmem_cache_free(hca->server_side_cache, rcas); in rib_server_side_cache_reclaim()
4943 rcas = avl_first(&hca->avl_tree); in rib_server_side_cache_reclaim()
4945 avl_remove(&hca->avl_tree, rcas); in rib_server_side_cache_reclaim()
4947 rw_exit(&hca->avl_rw_lock); in rib_server_side_cache_reclaim()
4955 rib_hca_t *hca = (rib_hca_t *)argp; in rib_server_side_cache_cleanup() local
4957 mutex_enter(&hca->cache_allocation_lock); in rib_server_side_cache_cleanup()
4958 if (hca->cache_allocation < cache_limit) { in rib_server_side_cache_cleanup()
4959 mutex_exit(&hca->cache_allocation_lock); in rib_server_side_cache_cleanup()
4962 mutex_exit(&hca->cache_allocation_lock); in rib_server_side_cache_cleanup()
4964 rw_enter(&hca->avl_rw_lock, RW_WRITER); in rib_server_side_cache_cleanup()
4965 rcas = avl_last(&hca->avl_tree); in rib_server_side_cache_cleanup()
4967 avl_remove(&hca->avl_tree, rcas); in rib_server_side_cache_cleanup()
4975 (void) rib_deregistermem_via_hca(hca, in rib_server_side_cache_cleanup()
4978 hca->cache_allocation -= rb->lrc_len; in rib_server_side_cache_cleanup()
4984 if (hca->server_side_cache) { in rib_server_side_cache_cleanup()
4985 kmem_cache_free(hca->server_side_cache, rcas); in rib_server_side_cache_cleanup()
4988 if (hca->cache_allocation < cache_limit) { in rib_server_side_cache_cleanup()
4989 rw_exit(&hca->avl_rw_lock); in rib_server_side_cache_cleanup()
4993 rcas = avl_last(&hca->avl_tree); in rib_server_side_cache_cleanup()
4995 avl_remove(&hca->avl_tree, rcas); in rib_server_side_cache_cleanup()
4997 rw_exit(&hca->avl_rw_lock); in rib_server_side_cache_cleanup()
5013 rib_destroy_cache(rib_hca_t *hca) in rib_destroy_cache() argument
5015 if (hca->avl_init) { in rib_destroy_cache()
5016 rib_server_side_cache_reclaim((void *)hca); in rib_destroy_cache()
5017 if (hca->server_side_cache) { in rib_destroy_cache()
5018 kmem_cache_destroy(hca->server_side_cache); in rib_destroy_cache()
5019 hca->server_side_cache = NULL; in rib_destroy_cache()
5021 avl_destroy(&hca->avl_tree); in rib_destroy_cache()
5022 mutex_destroy(&hca->cache_allocation_lock); in rib_destroy_cache()
5023 rw_destroy(&hca->avl_rw_lock); in rib_destroy_cache()
5025 hca->avl_init = FALSE; in rib_destroy_cache()
5029 rib_force_cleanup(void *hca) in rib_force_cleanup() argument
5031 if (((rib_hca_t *)hca)->cleanup_helper != NULL) in rib_force_cleanup()
5033 ((rib_hca_t *)hca)->cleanup_helper, in rib_force_cleanup()
5035 (void *)hca, DDI_NOSLEEP); in rib_force_cleanup()
5042 rib_hca_t *hca = (ctoqp(conn))->hca; in rib_get_cache_buf() local
5047 if (!hca->avl_init) in rib_get_cache_buf()
5052 rw_enter(&hca->avl_rw_lock, RW_READER); in rib_get_cache_buf()
5054 mutex_enter(&hca->cache_allocation_lock); in rib_get_cache_buf()
5055 c_alloc = hca->cache_allocation; in rib_get_cache_buf()
5056 mutex_exit(&hca->cache_allocation_lock); in rib_get_cache_buf()
5058 if ((rcas = (cache_avl_struct_t *)avl_find(&hca->avl_tree, &cas, in rib_get_cache_buf()
5062 rib_force_cleanup((void *)hca); in rib_get_cache_buf()
5063 rw_exit(&hca->avl_rw_lock); in rib_get_cache_buf()
5064 mutex_enter(&hca->cache_allocation_lock); in rib_get_cache_buf()
5065 hca->cache_misses_above_the_limit ++; in rib_get_cache_buf()
5066 mutex_exit(&hca->cache_allocation_lock); in rib_get_cache_buf()
5072 rw_exit(&hca->avl_rw_lock); in rib_get_cache_buf()
5073 rw_enter(&hca->avl_rw_lock, RW_WRITER); in rib_get_cache_buf()
5076 if ((rcas = (cache_avl_struct_t *)avl_find(&hca->avl_tree, in rib_get_cache_buf()
5080 kmem_cache_alloc(hca->server_side_cache, KM_SLEEP); in rib_get_cache_buf()
5088 avl_insert(&hca->avl_tree, rcas, where); in rib_get_cache_buf()
5099 rw_exit(&hca->avl_rw_lock); in rib_get_cache_buf()
5101 mutex_enter(&hca->cache_allocation_lock); in rib_get_cache_buf()
5102 hca->cache_hits++; in rib_get_cache_buf()
5103 hca->cache_allocation -= len; in rib_get_cache_buf()
5104 mutex_exit(&hca->cache_allocation_lock); in rib_get_cache_buf()
5109 rib_force_cleanup((void *)hca); in rib_get_cache_buf()
5110 rw_exit(&hca->avl_rw_lock); in rib_get_cache_buf()
5112 mutex_enter(&hca->cache_allocation_lock); in rib_get_cache_buf()
5113 hca->cache_misses_above_the_limit++; in rib_get_cache_buf()
5114 mutex_exit(&hca->cache_allocation_lock); in rib_get_cache_buf()
5118 rw_exit(&hca->avl_rw_lock); in rib_get_cache_buf()
5119 mutex_enter(&hca->cache_allocation_lock); in rib_get_cache_buf()
5120 hca->cache_misses++; in rib_get_cache_buf()
5121 mutex_exit(&hca->cache_allocation_lock); in rib_get_cache_buf()
5156 rib_hca_t *hca = (ctoqp(conn))->hca; in rib_free_cache_buf() local
5158 if (!hca->avl_init) in rib_free_cache_buf()
5162 rw_enter(&hca->avl_rw_lock, RW_READER); in rib_free_cache_buf()
5164 avl_find(&hca->avl_tree, &cas, &where)) == NULL) { in rib_free_cache_buf()
5165 rw_exit(&hca->avl_rw_lock); in rib_free_cache_buf()
5173 rw_exit(&hca->avl_rw_lock); in rib_free_cache_buf()
5174 mutex_enter(&hca->cache_allocation_lock); in rib_free_cache_buf()
5175 hca->cache_allocation += cas.len; in rib_free_cache_buf()
5176 mutex_exit(&hca->cache_allocation_lock); in rib_free_cache_buf()
5184 (void) rib_deregistermem_via_hca(hca, in rib_free_cache_buf()
5191 rib_registermem_via_hca(rib_hca_t *hca, caddr_t adsp, caddr_t buf, in rib_registermem_via_hca() argument
5202 status = rib_reg_mem(hca, adsp, buf, buflen, 0, &mr_hdl, &mr_desc); in rib_registermem_via_hca()
5217 rib_deregistermemsync_via_hca(rib_hca_t *hca, caddr_t buf, in rib_deregistermemsync_via_hca() argument
5221 (void) rib_deregistermem_via_hca(hca, buf, buf_handle); in rib_deregistermemsync_via_hca()
5227 rib_deregistermem_via_hca(rib_hca_t *hca, caddr_t buf, struct mrc buf_handle) in rib_deregistermem_via_hca() argument
5230 (void) ibt_deregister_mr(hca->hca_hdl, in rib_deregistermem_via_hca()
5380 rib_hca_t *hca; in rpcib_cache_kstat_update() local
5389 for (hca = rib_stat->hcas_list; hca; hca = hca->next) { in rpcib_cache_kstat_update()
5391 (uint64_t)hca->cache_allocation; in rpcib_cache_kstat_update()
5393 (uint64_t)hca->cache_hits; in rpcib_cache_kstat_update()
5395 (uint64_t)hca->cache_misses; in rpcib_cache_kstat_update()
5397 (uint64_t)hca->cache_misses_above_the_limit; in rpcib_cache_kstat_update()