Lines Matching refs:q

1857 getq(queue_t *q)
1862 bp = getq_noenab(q, 0);
1870 if (band == 0 && (q->q_flag & (QWANTW|QWANTWSYNC)) == 0)
1873 qbackenable(q, band);
1926 getq_noenab(queue_t *q, ssize_t rbytes)
1935 freezer = STREAM(q)->sd_freezer;
1937 ASSERT(frozenstr(q));
1938 ASSERT(MUTEX_HELD(QLOCK(q)));
1940 mutex_enter(QLOCK(q));
1942 if ((bp = q->q_first) == 0) {
1943 q->q_flag |= QWANTR;
1952 (q->q_count > rbytes)) {
2030 q->q_last = mp2;
2033 q->q_first = mp2;
2035 if ((q->q_first = bp->b_next) == NULL)
2036 q->q_last = NULL;
2038 q->q_first->b_prev = NULL;
2049 if ((q->q_first = bp->b_next) == NULL)
2050 q->q_last = NULL;
2052 q->q_first->b_prev = NULL;
2055 q->q_count -= bytecnt;
2056 q->q_mblkcnt -= mblkcnt;
2057 if (q->q_mblkcnt == 0 || ((q->q_count < q->q_hiwat) &&
2058 (q->q_mblkcnt < q->q_hiwat))) {
2059 q->q_flag &= ~QFULL;
2064 ASSERT(bp->b_band <= q->q_nband);
2065 ASSERT(q->q_bandp != NULL);
2066 ASSERT(MUTEX_HELD(QLOCK(q)));
2067 qbp = q->q_bandp;
2085 q->q_flag &= ~QWANTR;
2090 mutex_exit(QLOCK(q));
2092 STR_FTEVENT_MSG(bp, q, FTEV_GETQ, NULL);
2108 qbackenable(queue_t *q, uchar_t band)
2114 ASSERT(q);
2115 ASSERT((q->q_flag & QREADR) || MUTEX_NOT_HELD(&STREAM(q)->sd_lock));
2125 if (band == 0 && (q->q_flag & (QWANTW|QWANTWSYNC)) == 0)
2129 freezer = STREAM(q)->sd_freezer;
2131 ASSERT(frozenstr(q));
2132 ASSERT(MUTEX_HELD(QLOCK(q)));
2134 mutex_enter(QLOCK(q));
2137 if (q->q_lowat == 0 || (q->q_count < q->q_lowat &&
2138 q->q_mblkcnt < q->q_lowat)) {
2139 backenab = q->q_flag & (QWANTW|QWANTWSYNC);
2144 ASSERT((unsigned)band <= q->q_nband);
2145 ASSERT(q->q_bandp != NULL);
2147 qbp = q->q_bandp;
2160 mutex_exit(QLOCK(q));
2166 q->q_flag &= ~QWANTWSYNC;
2171 q->q_flag &= ~QWANTW;
2176 mutex_exit(QLOCK(q));
2179 strwakeq(q, QWANTWSYNC);
2181 backenable(q, band);
2193 rmvq(queue_t *q, mblk_t *mp)
2197 rmvq_noenab(q, mp);
2198 if (curthread != STREAM(q)->sd_freezer && MUTEX_HELD(QLOCK(q))) {
2203 mutex_exit(QLOCK(q));
2204 qbackenable(q, mp->b_band);
2205 mutex_enter(QLOCK(q));
2207 qbackenable(q, mp->b_band);
2216 rmvq_noenab(queue_t *q, mblk_t *mp)
2223 freezer = STREAM(q)->sd_freezer;
2225 ASSERT(frozenstr(q));
2226 ASSERT(MUTEX_HELD(QLOCK(q)));
2227 } else if (MUTEX_HELD(QLOCK(q))) {
2231 mutex_enter(QLOCK(q));
2233 ASSERT(mp->b_band <= q->q_nband);
2235 ASSERT(q->q_bandp != NULL);
2236 qbp = q->q_bandp;
2260 q->q_first = mp->b_next;
2264 q->q_last = mp->b_prev;
2272 q->q_count -= bytecnt;
2273 q->q_mblkcnt -= mblkcnt;
2274 if (q->q_mblkcnt == 0 || ((q->q_count < q->q_hiwat) &&
2275 (q->q_mblkcnt < q->q_hiwat))) {
2276 q->q_flag &= ~QFULL;
2287 mutex_exit(QLOCK(q));
2289 STR_FTEVENT_MSG(mp, q, FTEV_RMVQ, NULL);
2307 flushq_common(queue_t *q, int flag, int pcproto_flag)
2315 if (q->q_first == NULL)
2318 mutex_enter(QLOCK(q));
2319 mp = q->q_first;
2320 q->q_first = NULL;
2321 q->q_last = NULL;
2322 q->q_count = 0;
2323 q->q_mblkcnt = 0;
2324 for (qbp = q->q_bandp; qbp; qbp = qbp->qb_next) {
2331 q->q_flag &= ~QFULL;
2332 mutex_exit(QLOCK(q));
2337 STR_FTEVENT_MBLK(mp, q, FTEV_FLUSHQ, NULL);
2340 (void) putq(q, mp);
2344 (void) putq(q, mp);
2348 mutex_enter(QLOCK(q));
2349 for (qbp = q->q_bandp; qbp; qbp = qbp->qb_next) {
2361 ASSERT(bpri == (unsigned char)(q->q_nband + 1));
2362 if ((q->q_flag & QWANTW) &&
2363 (((q->q_count < q->q_lowat) &&
2364 (q->q_mblkcnt < q->q_lowat)) || q->q_lowat == 0)) {
2365 q->q_flag &= ~QWANTW;
2376 mutex_exit(QLOCK(q));
2377 for (bpri = q->q_nband; bpri != 0; bpri--)
2379 backenable(q, bpri);
2381 backenable(q, 0);
2383 mutex_exit(QLOCK(q));
2392 flushq(queue_t *q, int flag)
2394 flushq_common(q, flag, 0);
2411 flushband(queue_t *q, unsigned char pri, int flag)
2420 if (pri > q->q_nband) {
2423 mutex_enter(QLOCK(q));
2425 mp = q->q_first;
2426 q->q_first = NULL;
2427 q->q_last = NULL;
2428 q->q_count = 0;
2429 q->q_mblkcnt = 0;
2430 for (qbp = q->q_bandp; qbp; qbp = qbp->qb_next) {
2437 q->q_flag &= ~QFULL;
2438 mutex_exit(QLOCK(q));
2447 (void) putq(q, mp);
2450 mutex_enter(QLOCK(q));
2451 if ((q->q_flag & QWANTW) &&
2452 (((q->q_count < q->q_lowat) &&
2453 (q->q_mblkcnt < q->q_lowat)) || q->q_lowat == 0)) {
2454 q->q_flag &= ~QWANTW;
2455 mutex_exit(QLOCK(q));
2457 backenable(q, pri);
2459 mutex_exit(QLOCK(q));
2464 ASSERT(MUTEX_HELD(QLOCK(q)));
2465 qbp = q->q_bandp;
2470 mutex_exit(QLOCK(q));
2483 rmvq_noenab(q, mp);
2489 mutex_exit(QLOCK(q));
2496 qbackenable(q, pri);
2506 canput(queue_t *q)
2508 TRACE_1(TR_FAC_STREAMS_FR, TR_CANPUT_IN, "canput:%p", q);
2511 ASSERT(STRMATED(q->q_stream) || STREAM(q) == STREAM(q->q_nfsrv));
2514 q = q->q_nfsrv;
2516 if (!(q->q_flag & QFULL)) {
2517 TRACE_2(TR_FAC_STREAMS_FR, TR_CANPUT_OUT, "canput:%p %d", q, 1);
2520 mutex_enter(QLOCK(q));
2521 if (q->q_flag & QFULL) {
2522 q->q_flag |= QWANTW;
2523 mutex_exit(QLOCK(q));
2524 TRACE_2(TR_FAC_STREAMS_FR, TR_CANPUT_OUT, "canput:%p %d", q, 0);
2527 mutex_exit(QLOCK(q));
2528 TRACE_2(TR_FAC_STREAMS_FR, TR_CANPUT_OUT, "canput:%p %d", q, 1);
2539 bcanput(queue_t *q, unsigned char pri)
2543 TRACE_2(TR_FAC_STREAMS_FR, TR_BCANPUT_IN, "bcanput:%p %p", q, pri);
2544 if (!q)
2548 q = q->q_nfsrv;
2550 mutex_enter(QLOCK(q));
2552 if (q->q_flag & QFULL) {
2553 q->q_flag |= QWANTW;
2554 mutex_exit(QLOCK(q));
2556 "bcanput:%p %X %d", q, pri, 0);
2560 if (pri > q->q_nband) {
2564 mutex_exit(QLOCK(q));
2566 "bcanput:%p %X %d", q, pri, 1);
2569 qbp = q->q_bandp;
2574 mutex_exit(QLOCK(q));
2576 "bcanput:%p %X %d", q, pri, 0);
2580 mutex_exit(QLOCK(q));
2582 "bcanput:%p %X %d", q, pri, 1);
2604 putq(queue_t *q, mblk_t *bp)
2612 freezer = STREAM(q)->sd_freezer;
2614 ASSERT(frozenstr(q));
2615 ASSERT(MUTEX_HELD(QLOCK(q)));
2617 mutex_enter(QLOCK(q));
2630 if (bp->b_band > q->q_nband) {
2642 qbpp = &q->q_bandp;
2645 while (bp->b_band > q->q_nband) {
2648 mutex_exit(QLOCK(q));
2651 (*qbpp)->qb_hiwat = q->q_hiwat;
2652 (*qbpp)->qb_lowat = q->q_lowat;
2653 q->q_nband++;
2657 ASSERT(MUTEX_HELD(QLOCK(q)));
2658 qbp = q->q_bandp;
2671 if (!q->q_first) {
2674 q->q_first = bp;
2675 q->q_last = bp;
2686 tmp = q->q_last;
2691 q->q_last = bp;
2693 tmp = q->q_first;
2705 q->q_first = bp;
2719 q->q_last = bp;
2723 tmp = q->q_last;
2733 q->q_last = bp;
2735 tmp = q->q_first;
2749 q->q_first = bp;
2768 q->q_count += bytecnt;
2769 q->q_mblkcnt += mblkcnt;
2770 if ((q->q_count >= q->q_hiwat) ||
2771 (q->q_mblkcnt >= q->q_hiwat)) {
2772 q->q_flag |= QFULL;
2776 STR_FTEVENT_MSG(bp, q, FTEV_PUTQ, NULL);
2779 (canenable(q) && (q->q_flag & QWANTR || bp->b_band)))
2780 qenable_locked(q);
2781 ASSERT(MUTEX_HELD(QLOCK(q)));
2783 mutex_exit(QLOCK(q));
2793 putbq(queue_t *q, mblk_t *bp)
2801 ASSERT(q && bp);
2803 freezer = STREAM(q)->sd_freezer;
2805 ASSERT(frozenstr(q));
2806 ASSERT(MUTEX_HELD(QLOCK(q)));
2808 mutex_enter(QLOCK(q));
2821 if (bp->b_band > q->q_nband) {
2822 qbpp = &q->q_bandp;
2825 while (bp->b_band > q->q_nband) {
2828 mutex_exit(QLOCK(q));
2831 (*qbpp)->qb_hiwat = q->q_hiwat;
2832 (*qbpp)->qb_lowat = q->q_lowat;
2833 q->q_nband++;
2837 qbp = q->q_bandp;
2847 tmp = q->q_first;
2853 q->q_last = bp;
2854 q->q_first = bp;
2872 q->q_first = bp;
2875 tmp = q->q_last;
2885 q->q_last = bp;
2887 tmp = q->q_first;
2901 q->q_first = bp;
2913 tmp = q->q_last;
2918 q->q_last = bp;
2920 tmp = q->q_first;
2934 q->q_first = bp;
2950 q->q_count += bytecnt;
2951 q->q_mblkcnt += mblkcnt;
2952 if ((q->q_count >= q->q_hiwat) ||
2953 (q->q_mblkcnt >= q->q_hiwat)) {
2954 q->q_flag |= QFULL;
2958 STR_FTEVENT_MSG(bp, q, FTEV_PUTBQ, NULL);
2960 if ((mcls > QNORM) || (canenable(q) && (q->q_flag & QWANTR)))
2961 qenable_locked(q);
2962 ASSERT(MUTEX_HELD(QLOCK(q)));
2964 mutex_exit(QLOCK(q));
2984 insq(queue_t *q, mblk_t *emp, mblk_t *mp)
2992 freezer = STREAM(q)->sd_freezer;
2994 ASSERT(frozenstr(q));
2995 ASSERT(MUTEX_HELD(QLOCK(q)));
2996 } else if (MUTEX_HELD(QLOCK(q))) {
3000 mutex_enter(QLOCK(q));
3016 tmp = q->q_last;
3021 "on q %p", (void *)q);
3023 mutex_exit(QLOCK(q));
3032 if (mp->b_band > q->q_nband) {
3033 qbpp = &q->q_bandp;
3036 while (mp->b_band > q->q_nband) {
3039 mutex_exit(QLOCK(q));
3042 (*qbpp)->qb_hiwat = q->q_hiwat;
3043 (*qbpp)->qb_lowat = q->q_lowat;
3044 q->q_nband++;
3048 qbp = q->q_bandp;
3058 q->q_first = mp;
3061 if ((mp->b_prev = q->q_last) != NULL)
3062 q->q_last->b_next = mp;
3064 q->q_first = mp;
3065 q->q_last = mp;
3090 q->q_count += bytecnt;
3091 q->q_mblkcnt += mblkcnt;
3092 if ((q->q_count >= q->q_hiwat) ||
3093 (q->q_mblkcnt >= q->q_hiwat)) {
3094 q->q_flag |= QFULL;
3098 STR_FTEVENT_MSG(mp, q, FTEV_INSQ, NULL);
3100 if (canenable(q) && (q->q_flag & QWANTR))
3101 qenable_locked(q);
3103 ASSERT(MUTEX_HELD(QLOCK(q)));
3105 mutex_exit(QLOCK(q));
3114 putctl(queue_t *q, int type)
3123 put(q, bp);
3132 putctl1(queue_t *q, int type, int param)
3142 put(q, bp);
3148 putnextctl1(queue_t *q, int type, int param)
3159 putnext(q, bp);
3165 putnextctl(queue_t *q, int type)
3174 putnext(q, bp);
3183 backq(queue_t *q)
3185 q = _OTHERQ(q);
3186 if (q->q_next) {
3187 q = q->q_next;
3188 return (_OTHERQ(q));
3198 qreply(queue_t *q, mblk_t *bp)
3200 ASSERT(q && bp);
3202 putnext(_OTHERQ(q), bp);
3227 qenable(queue_t *q)
3229 mutex_enter(QLOCK(q));
3230 qenable_locked(q);
3231 mutex_exit(QLOCK(q));
3254 noenable(queue_t *q)
3256 mutex_enter(QLOCK(q));
3257 q->q_flag |= QNOENB;
3258 mutex_exit(QLOCK(q));
3262 enableok(queue_t *q)
3264 mutex_enter(QLOCK(q));
3265 q->q_flag &= ~QNOENB;
3266 mutex_exit(QLOCK(q));
3273 strqset(queue_t *q, qfields_t what, unsigned char pri, intptr_t val)
3280 freezer = STREAM(q)->sd_freezer;
3282 ASSERT(frozenstr(q));
3283 ASSERT(MUTEX_HELD(QLOCK(q)));
3285 mutex_enter(QLOCK(q));
3295 if (pri > q->q_nband) {
3296 qbpp = &q->q_bandp;
3299 while (pri > q->q_nband) {
3304 (*qbpp)->qb_hiwat = q->q_hiwat;
3305 (*qbpp)->qb_lowat = q->q_lowat;
3306 q->q_nband++;
3310 qbp = q->q_bandp;
3321 q->q_hiwat = (size_t)val;
3328 q->q_lowat = (size_t)val;
3335 q->q_maxpsz = (ssize_t)val;
3343 wrq = STREAM(q)->sd_wrq;
3344 if (q != wrq->q_next)
3352 mutex_exit(QLOCK(q));
3361 if (STREAM(q)->sd_vnode->v_type == VFIFO)
3367 STREAM(q)->sd_qn_maxpsz = val;
3370 mutex_enter(QLOCK(q));
3378 q->q_minpsz = (ssize_t)val;
3386 wrq = STREAM(q)->sd_wrq;
3387 if (q != wrq->q_next)
3395 mutex_exit(QLOCK(q));
3398 STREAM(q)->sd_qn_minpsz = (ssize_t)val;
3402 mutex_enter(QLOCK(q));
3410 q->q_struiot = (ushort_t)val;
3426 mutex_exit(QLOCK(q));
3434 strqget(queue_t *q, qfields_t what, unsigned char pri, void *valp)
3440 freezer = STREAM(q)->sd_freezer;
3442 ASSERT(frozenstr(q));
3443 ASSERT(MUTEX_HELD(QLOCK(q)));
3445 mutex_enter(QLOCK(q));
3454 if (pri > q->q_nband) {
3455 qbpp = &q->q_bandp;
3458 while (pri > q->q_nband) {
3463 (*qbpp)->qb_hiwat = q->q_hiwat;
3464 (*qbpp)->qb_lowat = q->q_lowat;
3465 q->q_nband++;
3469 qbp = q->q_bandp;
3479 *(size_t *)valp = q->q_hiwat;
3486 *(size_t *)valp = q->q_lowat;
3493 *(ssize_t *)valp = q->q_maxpsz;
3500 *(ssize_t *)valp = q->q_minpsz;
3507 *(size_t *)valp = q->q_count;
3514 *(mblk_t **)valp = q->q_first;
3521 *(mblk_t **)valp = q->q_last;
3528 *(uint_t *)valp = q->q_flag;
3535 *(short *)valp = q->q_struiot;
3544 mutex_exit(QLOCK(q));
3557 strwakeq(queue_t *q, int flag)
3559 stdata_t *stp = STREAM(q);
3565 ASSERT(!(q->q_flag & QREADR));
3614 struioget(queue_t *q, mblk_t *mp, struiod_t *dp, int noblock)
3616 stdata_t *stp = STREAM(q);
4044 isuioq(queue_t *q)
4046 if (q->q_flag & QREADR)
4047 return (STREAM(q)->sd_struiordq == q);
4049 return (STREAM(q)->sd_struiowrq == q);
4062 create_syncq_putlocks(queue_t *q)
4064 syncq_t *sq = q->q_syncq;
4102 q = _OTHERQ(q);
4103 if (!(q->q_flag & QPERQ)) {
4104 ASSERT(sq == q->q_syncq);
4107 ASSERT(q->q_syncq != NULL);
4108 ASSERT(sq != q->q_syncq);
4109 sq = q->q_syncq;
4116 * syncq of q. If stream argument is not 0 create per cpu stream_putlocks for
4117 * the stream of q and per cpu sq_putlocks/sq_putcounts for all syncq's
4118 * starting from q and down to the driver.
4127 * into the perimeter of q for example because its perimeter is per module
4131 * that the stream of q is a very contended global system stream
4132 * (e.g. NFS/UDP) and the part of the stream from q to the driver is
4140 create_putlocks(queue_t *q, int stream)
4143 struct stdata *stp = STREAM(q);
4145 q = _WR(q);
4180 while (_SAMESTR(q)) {
4181 create_syncq_putlocks(q);
4184 q = q->q_next;
4186 ASSERT(q != NULL);
4187 create_syncq_putlocks(q);