Lines Matching refs:conn

120 		struct netbuf *d_svcaddr, CONN **conn);
270 static rdma_stat rib_disconnect(CONN *conn);
273 static rdma_stat rib_registermem(CONN *conn, caddr_t adsp, caddr_t buf,
275 static rdma_stat rib_deregistermem(CONN *conn, caddr_t buf,
281 static rdma_stat rib_registermemsync(CONN *conn, caddr_t adsp, caddr_t buf,
284 static rdma_stat rib_deregistermemsync(CONN *conn, caddr_t buf,
286 static rdma_stat rib_syncmem(CONN *conn, RIB_SYNCMEM_HANDLE shandle,
289 static rdma_stat rib_reg_buf_alloc(CONN *conn, rdma_buf_t *rdbuf);
291 static void rib_reg_buf_free(CONN *conn, rdma_buf_t *rdbuf);
294 static void rib_rbuf_free(CONN *conn, int ptype, void *buf);
296 static rdma_stat rib_send(CONN *conn, struct clist *cl, uint32_t msgid);
297 static rdma_stat rib_send_resp(CONN *conn, struct clist *cl, uint32_t msgid);
298 static rdma_stat rib_post_resp(CONN *conn, struct clist *cl, uint32_t msgid);
299 static rdma_stat rib_post_resp_remove(CONN *conn, uint32_t msgid);
300 static rdma_stat rib_post_recv(CONN *conn, struct clist *cl);
301 static rdma_stat rib_recv(CONN *conn, struct clist **clp, uint32_t msgid);
302 static rdma_stat rib_read(CONN *conn, struct clist *cl, int wait);
303 static rdma_stat rib_write(CONN *conn, struct clist *cl, int wait);
307 static rdma_stat rib_conn_release(CONN *conn);
312 static rib_lrc_entry_t *rib_get_cache_buf(CONN *conn, uint32_t len);
313 static void rib_free_cache_buf(CONN *conn, rib_lrc_entry_t *buf);
322 static rdma_stat rib_conn_release_locked(CONN *conn);
1009 CONN *conn;
1032 conn = qptoc(qp);
1061 mutex_enter(&conn->c_lock);
1062 if (conn->c_state != C_DISCONN_PEND)
1063 conn->c_state = C_ERROR_CONN;
1064 mutex_exit(&conn->c_lock);
1103 CONN *conn;
1125 conn = qptoc(qp);
1136 * conn_release or conn timeout.
1139 mutex_enter(&conn->c_lock);
1140 if (conn->c_state != C_DISCONN_PEND)
1141 conn->c_state = C_ERROR_CONN;
1142 mutex_exit(&conn->c_lock);
1205 CONN *conn = qptoc(qp);
1230 mutex_enter(&conn->c_lock);
1231 if (conn->c_state != C_DISCONN_PEND)
1232 conn->c_state = C_ERROR_CONN;
1233 mutex_exit(&conn->c_lock);
1234 rib_rbuf_free(conn, RECV_BUFFER,
1276 CONN *conn = qptoc(qp);
1282 rib_rbuf_free(conn, RECV_BUFFER,
1285 CONN *conn = qptoc(qp);
1300 mutex_enter(&conn->c_lock);
1301 if (conn->c_state != C_DISCONN_PEND)
1302 conn->c_state = C_ERROR_CONN;
1303 mutex_exit(&conn->c_lock);
1304 rib_rbuf_free(conn, RECV_BUFFER,
1322 CONN *conn;
1340 conn = qptoc(qp);
1362 rib_rbuf_free(conn, RECV_BUFFER,
1376 rib_rbuf_free(conn, RECV_BUFFER,
1386 rib_rbuf_free(conn, RECV_BUFFER,
1401 mutex_enter(&conn->c_lock);
1403 (conn->c_state == C_CONNECTED)) {
1404 conn->c_ref++;
1405 mutex_exit(&conn->c_lock);
1417 rdp->conn = conn;
1434 mutex_exit(&conn->c_lock);
1436 rib_rbuf_free(conn, RECV_BUFFER,
1440 rib_rbuf_free(conn, RECV_BUFFER,
1546 CONN *conn;
1549 status = rib_connect(&saddr, raddr, addr_type, &rpt, &conn);
1554 (void) rib_conn_release(conn);
1568 CONN *conn;
1575 conn = qptoc(kqp);
1582 conn->c_raddr.buf = kmem_alloc(raddr->len, KM_SLEEP);
1583 bcopy(raddr->buf, conn->c_raddr.buf, raddr->len);
1584 conn->c_raddr.len = conn->c_raddr.maxlen = raddr->len;
1718 CONN *conn;
1743 conn = qptoc(qp);
1744 mutex_enter(&conn->c_lock);
1745 if (conn->c_state == C_DISCONN_PEND) {
1746 mutex_exit(&conn->c_lock);
1750 conn->c_state = C_ERROR_CONN;
1753 * Free the conn if c_ref is down to 0 already
1755 if (conn->c_ref == 0) {
1757 * Remove from list and free conn
1759 conn->c_state = C_DISCONN_PEND;
1760 mutex_exit(&conn->c_lock);
1763 (void) rib_disconnect_channel(conn,
1768 * conn will be freed when c_ref goes to 0.
1772 conn->c_flags |= C_CLOSE_NOTNEEDED;
1773 mutex_exit(&conn->c_lock);
1800 ibt_rc_returns_t ret_args; /* conn reject info */
2021 rib_disconnect_channel(CONN *conn, rib_conn_list_t *conn_list)
2023 rib_qp_t *qp = ctoqp(conn);
2026 mutex_enter(&conn->c_lock);
2027 if (conn->c_timeout != NULL) {
2028 mutex_exit(&conn->c_lock);
2029 (void) untimeout(conn->c_timeout);
2030 mutex_enter(&conn->c_lock);
2033 while (conn->c_flags & C_CLOSE_PENDING) {
2034 cv_wait(&conn->c_cv, &conn->c_lock);
2036 mutex_exit(&conn->c_lock);
2043 (void) rib_rm_conn(conn, conn_list);
2081 cv_destroy(&conn->c_cv);
2082 mutex_destroy(&conn->c_lock);
2084 if (conn->c_raddr.buf != NULL) {
2085 kmem_free(conn->c_raddr.buf, conn->c_raddr.len);
2087 if (conn->c_laddr.buf != NULL) {
2088 kmem_free(conn->c_laddr.buf, conn->c_laddr.len);
2090 if (conn->c_netid != NULL) {
2091 kmem_free(conn->c_netid, (strlen(conn->c_netid) + 1));
2093 if (conn->c_addrmask.buf != NULL) {
2094 kmem_free(conn->c_addrmask.buf, conn->c_addrmask.len);
2305 rib_send_and_wait(CONN *conn, struct clist *cl, uint32_t msgid,
2318 qp = ctoqp(conn);
2362 mutex_enter(&conn->c_lock);
2363 if (conn->c_state == C_CONNECTED) {
2366 if (conn->c_state != C_CONNECTED ||
2368 if (conn->c_state != C_DISCONN_PEND)
2369 conn->c_state = C_ERROR_CONN;
2370 mutex_exit(&conn->c_lock);
2373 rib_rbuf_free(conn, SEND_BUFFER,
2382 mutex_exit(&conn->c_lock);
2404 rib_send(CONN *conn, struct clist *cl, uint32_t msgid)
2410 ret = rib_send_and_wait(conn, cl, msgid, 1, 1, &wd);
2420 rib_send_resp(CONN *conn, struct clist *cl, uint32_t msgid)
2426 rib_qp_t *qp = ctoqp(conn);
2432 ret = rib_send_and_wait(conn, cl, msgid, 1, 0, wid);
2475 rib_clnt_post(CONN* conn, struct clist *cl, uint32_t msgid)
2477 rib_qp_t *qp = ctoqp(conn);
2527 mutex_enter(&conn->c_lock);
2529 if (conn->c_state == C_CONNECTED) {
2533 if (conn->c_state != C_CONNECTED ||
2535 if (conn->c_state != C_DISCONN_PEND)
2536 conn->c_state = C_ERROR_CONN;
2537 mutex_exit(&conn->c_lock);
2548 mutex_exit(&conn->c_lock);
2553 rib_rbuf_free(conn, RECV_BUFFER,
2561 rib_svc_post(CONN* conn, struct clist *cl)
2563 rib_qp_t *qp = ctoqp(conn);
2583 rib_rbuf_free(conn, RECV_BUFFER,
2596 mutex_enter(&conn->c_lock);
2597 if (conn->c_state == C_CONNECTED) {
2600 if (conn->c_state != C_CONNECTED ||
2602 if (conn->c_state != C_DISCONN_PEND)
2603 conn->c_state = C_ERROR_CONN;
2604 mutex_exit(&conn->c_lock);
2605 rib_rbuf_free(conn, RECV_BUFFER,
2611 mutex_exit(&conn->c_lock);
2618 rib_post_resp(CONN* conn, struct clist *cl, uint32_t msgid)
2620 return (rib_clnt_post(conn, cl, msgid));
2625 rib_post_resp_remove(CONN* conn, uint32_t msgid)
2627 rib_qp_t *qp = ctoqp(conn);
2634 rib_rbuf_free(conn, RECV_BUFFER,
2648 rib_post_recv(CONN *conn, struct clist *cl)
2650 rib_qp_t *qp = ctoqp(conn);
2652 if (rib_svc_post(conn, cl) == RDMA_SUCCESS) {
2663 * posted earlier by rib_post_resp(conn, cl, msgid).
2666 rib_recv(CONN *conn, struct clist **clp, uint32_t msgid)
2671 rib_qp_t *qp = ctoqp(conn);
2724 rib_rbuf_free(conn, RECV_BUFFER,
2749 rib_write(CONN *conn, struct clist *cl, int wait)
2757 rib_qp_t *qp = ctoqp(conn);
2799 mutex_enter(&conn->c_lock);
2800 if (conn->c_state == C_CONNECTED) {
2804 if (conn->c_state != C_CONNECTED ||
2806 if (conn->c_state != C_DISCONN_PEND)
2807 conn->c_state = C_ERROR_CONN;
2808 mutex_exit(&conn->c_lock);
2816 mutex_exit(&conn->c_lock);
2841 rib_read(CONN *conn, struct clist *cl, int wait)
2849 rib_qp_t *qp = ctoqp(conn);
2889 mutex_enter(&conn->c_lock);
2890 if (conn->c_state == C_CONNECTED) {
2893 if (conn->c_state != C_CONNECTED ||
2895 if (conn->c_state != C_DISCONN_PEND)
2896 conn->c_state = C_ERROR_CONN;
2897 mutex_exit(&conn->c_lock);
2905 mutex_exit(&conn->c_lock);
2943 CONN *conn;
2995 conn = qptoc(qp);
2999 buf = rib_rbuf_alloc(conn, &rdbuf);
3008 (void) rib_disconnect_channel(conn, NULL);
3018 status = rib_post_recv(conn, &cl);
3027 (void) rib_disconnect_channel(conn, NULL);
3031 (void) rib_add_connlist(conn, &hca->srv_conn_list);
3055 conn->c_netid = kmem_zalloc(strlen(RIBNETID_TCP) + 1,
3057 (void) strcpy(conn->c_netid, RIBNETID_TCP);
3059 conn->c_raddr.maxlen =
3060 conn->c_raddr.len = sin_size;
3061 conn->c_raddr.buf = kmem_zalloc(sin_size, KM_SLEEP);
3063 s = (struct sockaddr_in *)conn->c_raddr.buf;
3068 conn->c_laddr.maxlen =
3069 conn->c_laddr.len = sin_size;
3070 conn->c_laddr.buf = kmem_zalloc(sin_size, KM_SLEEP);
3072 s = (struct sockaddr_in *)conn->c_laddr.buf;
3077 conn->c_addrmask.maxlen = conn->c_addrmask.len =
3079 conn->c_addrmask.buf =
3080 kmem_zalloc(conn->c_addrmask.len, KM_SLEEP);
3082 conn->c_addrmask.buf)->sin_addr.s_addr =
3085 conn->c_addrmask.buf)->sin_family =
3091 conn->c_netid = kmem_zalloc(strlen(RIBNETID_TCP6) + 1,
3093 (void) strcpy(conn->c_netid, RIBNETID_TCP6);
3095 conn->c_raddr.maxlen =
3096 conn->c_raddr.len = sin6_size;
3097 conn->c_raddr.buf = kmem_zalloc(sin6_size, KM_SLEEP);
3099 s6 = (struct sockaddr_in6 *)conn->c_raddr.buf;
3105 conn->c_laddr.maxlen =
3106 conn->c_laddr.len = sin6_size;
3107 conn->c_laddr.buf = kmem_zalloc(sin6_size, KM_SLEEP);
3109 s6 = (struct sockaddr_in6 *)conn->c_laddr.buf;
3115 conn->c_addrmask.maxlen = conn->c_addrmask.len =
3117 conn->c_addrmask.buf =
3118 kmem_zalloc(conn->c_addrmask.len, KM_SLEEP);
3120 conn->c_addrmask.buf)->sin6_addr, (uchar_t)~0,
3123 conn->c_addrmask.buf)->sin6_family =
3135 CONN *conn;
3159 conn = qptoc(qp);
3160 mutex_enter(&conn->c_lock);
3161 if (conn->c_state == C_DISCONN_PEND) {
3162 mutex_exit(&conn->c_lock);
3165 conn->c_state = C_ERROR_CONN;
3168 * Free the conn if c_ref goes down to 0
3170 if (conn->c_ref == 0) {
3172 * Remove from list and free conn
3174 conn->c_state = C_DISCONN_PEND;
3175 mutex_exit(&conn->c_lock);
3176 (void) rib_disconnect_channel(conn,
3180 * conn will be freed when c_ref goes to 0.
3184 conn->c_flags |= C_CLOSE_NOTNEEDED;
3185 mutex_exit(&conn->c_lock);
3658 rib_registermem(CONN *conn, caddr_t adsp, caddr_t buf, uint_t buflen,
3664 rib_hca_t *hca = (ctoqp(conn))->hca;
3713 rib_registermemsync(CONN *conn, caddr_t adsp, caddr_t buf, uint_t buflen,
3720 rib_hca_t *hca = (ctoqp(conn))->hca;
3766 rib_deregistermem(CONN *conn, caddr_t buf, struct mrc buf_handle)
3768 rib_hca_t *hca = (ctoqp(conn))->hca;
3782 rib_deregistermemsync(CONN *conn, caddr_t buf, struct mrc buf_handle,
3791 (void) rib_deregistermem(conn, buf, buf_handle);
3798 rib_syncmem(CONN *conn, RIB_SYNCMEM_HANDLE shandle, caddr_t buf,
3802 rib_hca_t *hca = (ctoqp(conn))->hca;
4025 rib_reg_buf_alloc(CONN *conn, rdma_buf_t *rdbuf)
4030 rlep = rib_get_cache_buf(conn, rdbuf->len);
4037 rdbuf->addr = rib_rbuf_alloc(conn, rdbuf);
4059 rib_rbuf_alloc(CONN *conn, rdma_buf_t *rdbuf)
4061 rib_qp_t *qp = ctoqp(conn);
4119 rib_reg_buf_free(CONN *conn, rdma_buf_t *rdbuf)
4123 rib_free_cache_buf(conn, (rib_lrc_entry_t *)rdbuf->rb_private);
4127 rib_rbuf_free(conn, rdbuf->type, rdbuf->addr);
4131 rib_rbuf_free(CONN *conn, int ptype, void *buf)
4133 rib_qp_t *qp = ctoqp(conn);
4202 int addr_type, void *handle, CONN **conn)
4207 status = rib_connect(s_svcaddr, d_svcaddr, addr_type, &rpt, conn);
4215 * it will be returned in conn, otherwise conn will be set to NULL.
4220 struct netbuf *d_svcaddr, CONN **conn)
4225 *conn = NULL;
4267 * Our connection. Give up conn list lock
4272 cn->c_ref++; /* sharing a conn */
4274 *conn = cn;
4279 * Hold a reference to this conn before
4298 *conn = cn;
4311 *conn = NULL;
4335 int addr_type, rpcib_ping_t *rpt, CONN **conn)
4349 d_svcaddr, conn);
4424 * Add to conn list.
4461 *conn = cn;
4474 CONN *conn = (CONN *)rarg;
4475 rib_qp_t *qp = ctoqp(conn);
4477 mutex_enter(&conn->c_lock);
4478 if (!(conn->c_flags & C_CLOSE_NOTNEEDED)) {
4480 conn->c_flags |= (C_CLOSE_NOTNEEDED | C_CLOSE_PENDING);
4485 if (conn->c_state == C_CONNECTED) {
4486 conn->c_state = C_ERROR_CONN;
4488 mutex_exit(&conn->c_lock);
4490 rib_close_a_channel(conn);
4492 mutex_enter(&conn->c_lock);
4493 conn->c_flags &= ~C_CLOSE_PENDING;
4496 mutex_exit(&conn->c_lock);
4499 (void) rib_disconnect_channel(conn,
4502 (void) rib_disconnect_channel(conn,
4510 CONN *conn = (CONN *)carg;
4511 rib_hca_t *hca = ctoqp(conn)->hca;
4514 mutex_enter(&conn->c_lock);
4515 if ((conn->c_ref > 0) ||
4516 (conn->c_state == C_DISCONN_PEND)) {
4517 conn->c_timeout = NULL;
4518 mutex_exit(&conn->c_lock);
4522 idle_time = (gethrestime_sec() - conn->c_last_used);
4525 (conn->c_state != C_ERROR_CONN)) {
4528 * Extend the conn life. Unless the conn is
4531 conn->c_timeout = timeout(rib_conn_timeout_call, conn,
4533 mutex_exit(&conn->c_lock);
4538 (void *)conn, DDI_NOSLEEP);
4546 conn->c_timeout = timeout(rib_conn_timeout_call, conn,
4548 mutex_exit(&conn->c_lock);
4552 conn->c_state = C_DISCONN_PEND;
4553 mutex_exit(&conn->c_lock);
4557 rib_conn_release(CONN *conn)
4559 mutex_enter(&conn->c_lock);
4560 return (rib_conn_release_locked(conn));
4564 * Expects conn->c_lock to be held on entry.
4568 rib_conn_release_locked(CONN *conn)
4570 conn->c_ref--;
4572 conn->c_last_used = gethrestime_sec();
4573 if (conn->c_ref > 0) {
4574 mutex_exit(&conn->c_lock);
4579 * If a conn is C_ERROR_CONN, close the channel.
4581 if (conn->c_ref == 0 && conn->c_state == C_ERROR_CONN) {
4582 conn->c_state = C_DISCONN_PEND;
4583 mutex_exit(&conn->c_lock);
4584 rib_conn_close((void *)conn);
4589 * c_ref == 0, set a timeout for conn release
4592 if (conn->c_timeout == NULL) {
4593 conn->c_timeout = timeout(rib_conn_timeout_call, conn,
4597 mutex_exit(&conn->c_lock);
4680 * Expects conn->c_lock to be held by the caller.
4684 rib_close_a_channel(CONN *conn)
4687 qp = ctoqp(conn);
4710 CONN *conn, *tmp;
4713 conn = connlist->conn_hd;
4714 while (conn != NULL) {
4715 mutex_enter(&conn->c_lock);
4716 tmp = conn->c_next;
4717 if (!(conn->c_flags & C_CLOSE_NOTNEEDED)) {
4719 if (conn->c_state == C_CONN_PEND) {
4720 conn->c_flags |= C_CLOSE_PENDING;
4724 conn->c_flags |= (C_CLOSE_NOTNEEDED | C_CLOSE_PENDING);
4729 if (conn->c_state == C_CONNECTED)
4730 conn->c_state = C_ERROR_CONN;
4731 mutex_exit(&conn->c_lock);
4733 rib_close_a_channel(conn);
4735 mutex_enter(&conn->c_lock);
4736 conn->c_flags &= ~C_CLOSE_PENDING;
4738 cv_signal(&conn->c_cv);
4741 mutex_exit(&conn->c_lock);
4742 conn = tmp;
4753 CONN *conn;
4757 conn = connlist->conn_hd;
4758 while (conn != NULL) {
4759 mutex_enter(&conn->c_lock);
4767 if (conn->c_ref == 0 &&
4768 conn->c_state != C_DISCONN_PEND) {
4772 conn->c_state = C_DISCONN_PEND;
4773 mutex_exit(&conn->c_lock);
4775 (void) rib_disconnect_channel(conn, connlist);
4779 * conn disconnect already scheduled or will
4782 mutex_exit(&conn->c_lock);
4784 conn = conn->c_next;
5039 rib_get_cache_buf(CONN *conn, uint32_t len)
5042 rib_hca_t *hca = (ctoqp(conn))->hca;
5152 rib_free_cache_buf(CONN *conn, rib_lrc_entry_t *reg_buf)
5156 rib_hca_t *hca = (ctoqp(conn))->hca;