Lines Matching defs:mir
988 #define MIR_SVC_QUIESCED(mir) \
989 (mir->mir_ref_cnt == 0 && mir->mir_inrservice == 0)
1043 mir_timer_stop(mir_t *mir)
1047 ASSERT(MUTEX_HELD(&mir->mir_mutex));
1058 while (mir->mir_timer_call)
1059 cv_wait(&mir->mir_timer_cv, &mir->mir_mutex);
1060 mir->mir_timer_call = B_TRUE;
1062 if ((tid = mir->mir_timer_id) != 0) {
1063 mir->mir_timer_id = 0;
1064 mutex_exit(&mir->mir_mutex);
1066 mutex_enter(&mir->mir_mutex);
1068 mir->mir_timer_call = B_FALSE;
1069 cv_broadcast(&mir->mir_timer_cv);
1073 mir_timer_start(queue_t *q, mir_t *mir, clock_t intrvl)
1077 ASSERT(MUTEX_HELD(&mir->mir_mutex));
1079 while (mir->mir_timer_call)
1080 cv_wait(&mir->mir_timer_cv, &mir->mir_mutex);
1081 mir->mir_timer_call = B_TRUE;
1083 if ((tid = mir->mir_timer_id) != 0) {
1084 mutex_exit(&mir->mir_mutex);
1086 mutex_enter(&mir->mir_mutex);
1089 if (!mir->mir_closing) {
1090 mir->mir_timer_id = timeout(mir_timer, q,
1093 mir->mir_timer_call = B_FALSE;
1094 cv_broadcast(&mir->mir_timer_cv);
1123 mir_t *mir = q->q_ptr;
1128 ASSERT(MUTEX_NOT_HELD(&mir->mir_mutex));
1129 mutex_enter(&mir->mir_mutex);
1130 if ((mp = mir->mir_head_mp) != NULL) {
1131 mir->mir_head_mp = NULL;
1132 mir->mir_tail_mp = NULL;
1139 mir->mir_closing = B_TRUE;
1140 mir_timer_stop(mir);
1142 if (mir->mir_type == RPC_SERVER) {
1149 mir_svc_start_close(WR(q), mir);
1151 while ((!MIR_SVC_QUIESCED(mir)) || mir->mir_inwservice == 1) {
1153 if (mir->mir_ref_cnt && !mir->mir_inrservice &&
1158 mutex_exit(&mir->mir_mutex);
1161 mutex_enter(&mir->mir_mutex);
1171 if (mir->mir_inwservice == 1)
1174 cv_wait(&mir->mir_condvar, &mir->mir_mutex);
1177 mutex_exit(&mir->mir_mutex);
1183 mutex_exit(&mir->mir_mutex);
1187 mutex_destroy(&mir->mir_mutex);
1188 cv_destroy(&mir->mir_condvar);
1189 cv_destroy(&mir->mir_timer_cv);
1190 kmem_free(mir, sizeof (mir_t));
1200 mir_svc_idle_stop(queue_t *q, mir_t *mir)
1202 ASSERT(MUTEX_HELD(&mir->mir_mutex));
1204 ASSERT(mir->mir_type == RPC_SERVER);
1207 mir_timer_stop(mir);
1217 mir_svc_idle_start(queue_t *q, mir_t *mir)
1219 ASSERT(MUTEX_HELD(&mir->mir_mutex));
1221 ASSERT(mir->mir_type == RPC_SERVER);
1227 if (mir->mir_closing) {
1237 if (mir->mir_inwservice == 0)
1238 cv_signal(&mir->mir_condvar);
1242 mir->mir_ordrel_pending ? "ordrel" : "normal");
1249 mir_timer_start(q, mir, mir->mir_ordrel_pending ?
1250 svc_ordrel_timeout : mir->mir_idle_timeout);
1258 mir_t *mir;
1273 /* Allocate a zero'ed out mir structure for this stream. */
1274 mir = kmem_zalloc(sizeof (mir_t), KM_SLEEP);
1292 mir->mir_hold_inbound = 1;
1302 mir->mir_frag_len = -(int32_t)sizeof (uint32_t);
1304 mir->mir_zoneid = rpc_zoneid();
1305 mutex_init(&mir->mir_mutex, NULL, MUTEX_DEFAULT, NULL);
1306 cv_init(&mir->mir_condvar, NULL, CV_DRIVER, NULL);
1307 cv_init(&mir->mir_timer_cv, NULL, CV_DRIVER, NULL);
1309 q->q_ptr = (char *)mir;
1310 WR(q)->q_ptr = (char *)mir;
1335 mir_t *mir = q->q_ptr;
1338 ASSERT(mir != NULL);
1347 if (mir->mir_type == 0) {
1352 ASSERT(MUTEX_NOT_HELD(&mir->mir_mutex));
1403 mutex_enter(&mir->mir_mutex);
1408 if (mir->mir_svc_no_more_msgs) {
1409 ASSERT(mir->mir_type == RPC_SERVER);
1410 mutex_exit(&mir->mir_mutex);
1416 frag_len = mir->mir_frag_len;
1417 frag_header = mir->mir_frag_header;
1418 head_mp = mir->mir_head_mp;
1419 tail_mp = mir->mir_tail_mp;
1493 mir->mir_frag_header = 0;
1494 mir->mir_frag_len = -(int32_t)sizeof (uint32_t);
1495 mir->mir_head_mp = NULL;
1496 mir->mir_tail_mp = NULL;
1497 mir_disconnect(q, mir); /* drops mir_mutex */
1536 switch (mir->mir_type) {
1538 if (clnt_dispatch_notify(head_mp, mir->mir_zoneid)) {
1543 mir->mir_clntreq = 1;
1544 mir->mir_use_timestamp = ddi_get_lbolt();
1555 if (!mir->mir_hold_inbound) {
1556 if (mir->mir_krpc_cell) {
1571 if (mir->mir_ref_cnt++ == 0)
1575 mir->mir_inrservice = B_TRUE;
1594 mir->mir_inrservice = B_TRUE;
1599 mir->mir_type);
1614 if (head_mp != NULL && mir->mir_setup_complete &&
1618 /* Save our local copies back in the mir structure. */
1619 mir->mir_frag_header = frag_header;
1620 mir->mir_frag_len = frag_len;
1621 mir->mir_head_mp = head_mp;
1622 mir->mir_tail_mp = tail_mp;
1638 mir_svc_idle_stop(WR(q), mir);
1640 mutex_exit(&mir->mir_mutex);
1646 mir_t *mir = (mir_t *)q->q_ptr;
1650 ASSERT(MUTEX_NOT_HELD(&mir->mir_mutex));
1653 switch (mir->mir_type) {
1661 mutex_enter(&mir->mir_mutex);
1662 if (mir->mir_head_mp) {
1663 freemsg(mir->mir_head_mp);
1664 mir->mir_head_mp = (mblk_t *)0;
1665 mir->mir_tail_mp = (mblk_t *)0;
1673 mir->mir_idle_timeout = clnt_idle_timeout;
1674 mir_clnt_idle_stop(WR(q), mir);
1691 mir_clnt_idle_start(WR(q), mir);
1692 mutex_exit(&mir->mir_mutex);
1760 mutex_enter(&mir->mir_mutex);
1761 mir_svc_idle_stop(WR(q), mir);
1768 mir->mir_listen_stream = 1;
1769 mutex_exit(&mir->mir_mutex);
1784 if (mir->mir_listen_stream)
1787 mutex_enter(&mir->mir_mutex);
1793 mir_svc_start_close(WR(q), mir);
1799 if (MIR_SVC_QUIESCED(mir)) {
1800 mutex_exit(&mir->mir_mutex);
1816 if (mir->mir_svc_pend_mp) {
1823 freemsg(mir->mir_svc_pend_mp);
1824 mir->mir_svc_pend_mp = mp;
1833 mir->mir_svc_pend_mp = mp;
1835 mutex_exit(&mir->mir_mutex);
1860 mir_t *mir;
1864 mir = (mir_t *)q->q_ptr;
1865 mutex_enter(&mir->mir_mutex);
1868 switch (mir->mir_type) {
1870 if (mir->mir_ref_cnt == 0)
1871 mir->mir_hold_inbound = 0;
1872 if (mir->mir_hold_inbound)
1876 if (mir->mir_krpc_cell &&
1877 (mir->mir_svc_no_more_msgs == 0)) {
1887 if (mir->mir_ref_cnt++ == 0)
1898 if (mir->mir_krpc_cell == NULL)
1907 RPCLOG(1, "mir_rsrv: unexpected mir_type %d\n", mir->mir_type);
1910 MIR_CLEAR_INRSRV(mir);
1912 mutex_exit(&mir->mir_mutex);
1927 mir_svc_idle_stop(WR(q), mir);
1933 MIR_CLEAR_INRSRV(mir);
1935 if (mir->mir_type == RPC_SERVER && MIR_SVC_QUIESCED(mir)) {
1936 cmp = mir->mir_svc_pend_mp;
1937 mir->mir_svc_pend_mp = NULL;
1940 mutex_exit(&mir->mir_mutex);
1951 mutex_exit(&mir->mir_mutex);
1965 mir_t *mir = (mir_t *)q->q_ptr;
1966 ASSERT(MUTEX_NOT_HELD(&mir->mir_mutex));
1995 mir_svc_start_close(queue_t *wq, mir_t *mir)
1997 ASSERT(MUTEX_HELD(&mir->mir_mutex));
1999 ASSERT(mir->mir_type == RPC_SERVER);
2004 mir->mir_svc_no_more_msgs = 1;
2012 mir->mir_hold_inbound = 0;
2029 mir_t *mir = (mir_t *)wq->q_ptr;
2039 mutex_enter(&mir->mir_mutex);
2044 if ((mir->mir_ref_cnt == 1) && (mir->mir_inrservice == 0)) {
2045 cmp = mir->mir_svc_pend_mp;
2046 mir->mir_svc_pend_mp = NULL;
2054 mutex_exit(&mir->mir_mutex);
2058 mutex_enter(&mir->mir_mutex);
2064 if (mir->mir_ref_cnt == 1 && mir->mir_inrservice == 0) {
2069 mir_svc_idle_start(wq, mir);
2072 mir->mir_ref_cnt--;
2073 ASSERT(mir->mir_ref_cnt >= 0);
2079 if ((mir->mir_ref_cnt == 0) && mir->mir_closing)
2080 cv_signal(&mir->mir_condvar);
2082 mutex_exit(&mir->mir_mutex);
2092 mir_t *mir = (mir_t *)wq->q_ptr;
2100 mir->mir_setup_complete = 1;
2108 mir_clnt_idle_stop(queue_t *wq, mir_t *mir)
2110 ASSERT(MUTEX_HELD(&mir->mir_mutex));
2112 ASSERT(mir->mir_type == RPC_CLIENT);
2114 mir_timer_stop(mir);
2121 mir_clnt_idle_start(queue_t *wq, mir_t *mir)
2123 ASSERT(MUTEX_HELD(&mir->mir_mutex));
2125 ASSERT(mir->mir_type == RPC_CLIENT);
2127 mir_timer_start(wq, mir, mir->mir_idle_timeout);
2137 mir_t *mir = (mir_t *)wq->q_ptr;
2140 ASSERT(MUTEX_NOT_HELD(&mir->mir_mutex));
2141 mutex_enter(&mir->mir_mutex);
2142 mir_clnt_idle_stop(wq, mir);
2143 mutex_exit(&mir->mir_mutex);
2153 mir_t *mir = (mir_t *)wq->q_ptr;
2157 mutex_enter(&mir->mir_mutex);
2165 if (mir->mir_timer_call) {
2166 mutex_exit(&mir->mir_mutex);
2169 mir->mir_timer_id = 0;
2171 switch (mir->mir_type) {
2195 if (mir->mir_clntreq > 0 && mir->mir_use_timestamp +
2196 MSEC_TO_TICK(mir->mir_idle_timeout) - now >= 0) {
2199 tout = mir->mir_idle_timeout -
2200 TICK_TO_MSEC(now - mir->mir_use_timestamp);
2206 TICK_TO_MSEC(mir->mir_use_timestamp),
2207 mir->mir_idle_timeout, tout);
2209 mir->mir_clntreq = 0;
2210 mir_timer_start(wq, mir, tout);
2211 mutex_exit(&mir->mir_mutex);
2223 mir->mir_idle_timeout = clnt_idle_timeout;
2224 mir_clnt_idle_start(wq, mir);
2226 mutex_exit(&mir->mir_mutex);
2254 if (!MIR_SVC_QUIESCED(mir)) {
2255 mutex_exit(&mir->mir_mutex);
2259 notify = !mir->mir_inrservice;
2260 mutex_exit(&mir->mir_mutex);
2274 mir->mir_type);
2275 mutex_exit(&mir->mir_mutex);
2288 mir_t *mir = (mir_t *)q->q_ptr;
2291 if (!mir) {
2301 if (mir->mir_ordrel_pending == 1) {
2331 mutex_enter(&mir->mir_mutex);
2332 if (mir->mir_type == RPC_CLIENT) {
2337 mir->mir_clntreq = 1;
2338 mir->mir_use_timestamp = ddi_get_lbolt();
2346 if (!mir->mir_inwservice && MIR_WCANPUTNEXT(mir, q)) {
2347 mutex_exit(&mir->mir_mutex);
2356 switch (mir->mir_type) {
2368 mutex_exit(&mir->mir_mutex);
2381 mir->mir_hold_inbound = 1;
2384 RPCLOG(1, "mir_wput: unexpected mir_type %d\n", mir->mir_type);
2387 mir->mir_inwservice = 1;
2389 mutex_exit(&mir->mir_mutex);
2395 mir_t *mir = (mir_t *)q->q_ptr;
2400 ASSERT(MUTEX_NOT_HELD(&mir->mir_mutex));
2406 mutex_enter(&mir->mir_mutex);
2407 if (mir->mir_type != 0 &&
2408 mir->mir_type != iocp->ioc_cmd) {
2410 mutex_exit(&mir->mir_mutex);
2418 mir->mir_type = iocp->ioc_cmd;
2425 mir->mir_hold_inbound = 0;
2426 mir->mir_max_msg_sizep = &clnt_max_msg_size;
2432 mir->mir_idle_timeout = clnt_idle_timeout;
2433 mir_clnt_idle_start(q, mir);
2434 mutex_exit(&mir->mir_mutex);
2440 mutex_enter(&mir->mir_mutex);
2441 if (mir->mir_type != 0 &&
2442 mir->mir_type != iocp->ioc_cmd)
2453 mir->mir_type = iocp->ioc_cmd;
2454 mir->mir_max_msg_sizep = &svc_max_msg_size;
2464 mir->mir_idle_timeout = svc_idle_timeout;
2467 mir_svc_idle_start(q, mir);
2468 mutex_exit(&mir->mir_mutex);
2479 if (mir->mir_type == RPC_CLIENT) {
2500 mutex_enter(&mir->mir_mutex);
2501 if (mir->mir_type != RPC_SERVER) {
2511 mir->mir_inwservice = 1;
2513 mutex_exit(&mir->mir_mutex);
2527 mir_svc_start_close(q, mir);
2533 if (mir->mir_ordrel_pending) {
2535 mutex_exit(&mir->mir_mutex);
2552 if (!MIR_SVC_QUIESCED(mir) ||
2553 mir->mir_inwservice == 1) {
2554 mir->mir_inwservice = 1;
2560 mutex_exit(&mir->mir_mutex);
2568 mir->mir_ordrel_pending = 1;
2574 mir_svc_idle_start(q, mir);
2575 mutex_exit(&mir->mir_mutex);
2583 mutex_enter(&mir->mir_mutex);
2584 if (mir->mir_head_mp != NULL) {
2585 freemsg(mir->mir_head_mp);
2586 mir->mir_head_mp = NULL;
2587 mir->mir_tail_mp = NULL;
2589 mir->mir_frag_len = -(int32_t)sizeof (uint32_t);
2594 mir->mir_idle_timeout = clnt_idle_timeout;
2595 mir_clnt_idle_stop(q, mir);
2596 mir_clnt_idle_start(q, mir);
2597 mutex_exit(&mir->mir_mutex);
2615 if (mir->mir_type == RPC_CLIENT &&
2633 mutex_enter(&mir->mir_mutex);
2634 if (mir->mir_inwservice == 0 && MIR_WCANPUTNEXT(mir, q)) {
2635 mutex_exit(&mir->mir_mutex);
2638 mir->mir_inwservice = 1;
2639 mir->mir_inwflushdata = flush_in_svc;
2641 mutex_exit(&mir->mir_mutex);
2653 mir_t *mir;
2656 mir = (mir_t *)q->q_ptr;
2657 mutex_enter(&mir->mir_mutex);
2659 flushdata = mir->mir_inwflushdata;
2660 mir->mir_inwflushdata = 0;
2668 if (flushdata || mir->mir_ordrel_pending == 1) {
2677 if (!MIR_WCANPUTNEXT(mir, q)) {
2679 mutex_exit(&mir->mir_mutex);
2686 mutex_exit(&mir->mir_mutex);
2688 mutex_enter(&mir->mir_mutex);
2697 if (mir->mir_type != RPC_SERVER ||
2700 mutex_exit(&mir->mir_mutex);
2702 mutex_enter(&mir->mir_mutex);
2706 if (mir->mir_ordrel_pending == 1) {
2720 mir->mir_ordrel_pending = 1;
2729 mutex_exit(&mir->mir_mutex);
2731 mutex_enter(&mir->mir_mutex);
2740 mir->mir_inwservice = 0;
2742 if (mir->mir_type != RPC_SERVER) {
2743 mutex_exit(&mir->mir_mutex);
2753 if (MIR_SVC_QUIESCED(mir) && !(mir->mir_listen_stream)) {
2755 "because mir slot is idle\n", (void *)q);
2756 mir_svc_idle_start(q, mir);
2763 if (mir->mir_hold_inbound) {
2764 mir->mir_hold_inbound = 0;
2767 mutex_exit(&mir->mir_mutex);
2771 mir_disconnect(queue_t *q, mir_t *mir)
2773 ASSERT(MUTEX_HELD(&mir->mir_mutex));
2775 switch (mir->mir_type) {
2783 mir->mir_idle_timeout = clnt_idle_timeout;
2784 mir_clnt_idle_start(WR(q), mir);
2785 mutex_exit(&mir->mir_mutex);
2798 mir->mir_svc_no_more_msgs = 1;
2799 mir_svc_idle_stop(WR(q), mir);
2800 mutex_exit(&mir->mir_mutex);
2808 mutex_exit(&mir->mir_mutex);
2820 mir_t *mir = q->q_ptr;
2824 if (mir->mir_max_msg_sizep != NULL)
2825 maxsize = *mir->mir_max_msg_sizep;
2831 mir->mir_head_mp = NULL;
2832 mir->mir_tail_mp = NULL;
2833 mir->mir_frag_header = 0;
2834 mir->mir_frag_len = -(int32_t)sizeof (uint32_t);
2835 if (mir->mir_type != RPC_SERVER || mir->mir_setup_complete) {
2839 (mir->mir_type == RPC_CLIENT) ? "server" :
2840 (mir->mir_type == RPC_SERVER) ? "client" :
2844 mir_disconnect(q, mir);