Lines Matching defs:qp

467 #define	SQPUT_Q(sq, qp)							\
470 if (!(qp->q_sqflags & Q_SQQUEUED)) { \
472 ASSERT((qp->q_sqprev == NULL) && (qp->q_sqnext == NULL)); \
476 ASSERT(sq == qp->q_syncq); \
491 sq->sq_head = sq->sq_tail = qp; \
493 } else if (qp->q_spri == 0) { \
494 qp->q_sqprev = sq->sq_tail; \
495 sq->sq_tail->q_sqnext = qp; \
496 sq->sq_tail = qp; \
505 while (*qpp != NULL && qp->q_spri > (*qpp)->q_spri) { \
509 qp->q_sqnext = qnext; \
510 qp->q_sqprev = *qpp; \
512 (*qpp)->q_sqnext = qp; \
514 sq->sq_head = qp; \
517 *qpp = qp; \
519 qp->q_sqflags |= Q_SQQUEUED; \
520 qp->q_sqtstamp = ddi_get_lbolt(); \
529 #define SQRM_Q(sq, qp) \
532 ASSERT(qp->q_sqflags & Q_SQQUEUED); \
536 ASSERT(qp->q_sqnext != NULL || sq->sq_tail == qp); \
537 ASSERT(qp->q_sqprev != NULL || sq->sq_head == qp); \
539 if (qp->q_sqprev == NULL) { \
541 sq->sq_head = qp->q_sqnext; \
544 qp->q_sqprev->q_sqnext = qp->q_sqnext; \
546 if (qp->q_sqnext == NULL) { \
548 sq->sq_tail = qp->q_sqprev; \
551 qp->q_sqnext->q_sqprev = qp->q_sqprev; \
554 qp->q_sqprev = qp->q_sqnext = NULL; \
555 qp->q_sqflags &= ~Q_SQQUEUED; \
577 #define SQPUT_MP(qp, mp) \
579 ASSERT(MUTEX_HELD(QLOCK(qp))); \
580 ASSERT(qp->q_sqhead == NULL || \
581 (qp->q_sqtail != NULL && \
582 qp->q_sqtail->b_next == NULL)); \
583 qp->q_syncqmsgs++; \
584 ASSERT(qp->q_syncqmsgs != 0); /* Wraparound */ \
585 if (qp->q_sqhead == NULL) { \
586 qp->q_sqhead = qp->q_sqtail = mp; \
588 qp->q_sqtail->b_next = mp; \
589 qp->q_sqtail = mp; \
591 ASSERT(qp->q_syncqmsgs > 0); \
592 set_qfull(qp); \
688 queue_t *qp = &qip->qu_rqueue;
692 qp->q_first = NULL;
693 qp->q_link = NULL;
694 qp->q_count = 0;
695 qp->q_mblkcnt = 0;
696 qp->q_sqhead = NULL;
697 qp->q_sqtail = NULL;
698 qp->q_sqnext = NULL;
699 qp->q_sqprev = NULL;
700 qp->q_sqflags = 0;
701 qp->q_rwcnt = 0;
702 qp->q_spri = 0;
704 mutex_init(QLOCK(qp), NULL, MUTEX_DEFAULT, NULL);
705 cv_init(&qp->q_wait, NULL, CV_DEFAULT, NULL);
749 queue_t *qp = &qip->qu_rqueue;
753 ASSERT(qp->q_sqhead == NULL);
755 ASSERT(qp->q_sqnext == NULL);
757 ASSERT(qp->q_rwcnt == 0);
760 mutex_destroy(&qp->q_lock);
761 cv_destroy(&qp->q_wait);
1111 * qp is a read queue; the new queue goes in so its next
1117 qattach(queue_t *qp, dev_t *devp, int oflag, cred_t *crp, fmodsw_impl_t *fp,
1133 STREAM(rq) = STREAM(wrq) = STREAM(qp);
1190 rq->q_next = qp;
1221 qreopen(queue_t *qp, dev_t *devp, int flag, cred_t *crp)
1225 queue_t *wqp = _WR(qp);
1227 ASSERT(qp->q_flag & QREADR);
1228 entersq(qp->q_syncq, SQ_OPENCLOSE);
1231 if (error = ((*qp->q_qinfo->qi_qopen)(qp, &dummydev,
1233 leavesq(qp->q_syncq, SQ_OPENCLOSE);
1234 mutex_enter(&STREAM(qp)->sd_lock);
1235 qp->q_stream->sd_flag |= STREOPENFAIL;
1236 mutex_exit(&STREAM(qp)->sd_lock);
1239 leavesq(qp->q_syncq, SQ_OPENCLOSE);
1244 ASSERT(qprocsareon(_RD(qp)));
1256 qdetach(queue_t *qp, int clmode, int flag, cred_t *crp, boolean_t is_remove)
1258 queue_t *wqp = _WR(qp);
1259 ASSERT(STREAM(qp)->sd_flag & (STRCLOSE|STWOPEN|STRPLUMB));
1261 if (STREAM_NEEDSERVICE(STREAM(qp)))
1262 stream_runservice(STREAM(qp));
1272 entersq(qp->q_syncq, SQ_OPENCLOSE);
1274 mutex_enter(QLOCK(qp));
1275 qp->q_flag |= _QREMOVING;
1276 mutex_exit(QLOCK(qp));
1278 (*qp->q_qinfo->qi_qclose)(qp, flag, crp);
1282 ASSERT((qp->q_flag & QWCLOSE) && (wqp->q_flag & QWCLOSE));
1284 leavesq(qp->q_syncq, SQ_OPENCLOSE);
1286 disable_svc(qp);
1302 ASSERT(flush_syncq(qp->q_syncq, qp) == 0);
1304 ASSERT((qp->q_flag & QPERMOD) ||
1305 ((qp->q_syncq->sq_head == NULL) &&
1309 ASSERT(qp->q_fp != NULL || qp->q_flag & QISDRV);
1310 if (qp->q_fp != NULL)
1311 fmodsw_rele(qp->q_fp);
1314 freeq(qp);
1319 disable_svc(queue_t *qp)
1321 queue_t *wqp = _WR(qp);
1323 ASSERT(qp->q_flag & QREADR);
1324 mutex_enter(QLOCK(qp));
1325 qp->q_flag |= QWCLOSE;
1326 mutex_exit(QLOCK(qp));
1334 enable_svc(queue_t *qp)
1336 queue_t *wqp = _WR(qp);
1338 ASSERT(qp->q_flag & QREADR);
1339 mutex_enter(QLOCK(qp));
1340 qp->q_flag &= ~QWCLOSE;
1341 mutex_exit(QLOCK(qp));
1359 remove_runlist(queue_t *qp)
1361 if (qp->q_flag & QENAB && qhead != NULL) {
1367 RMQ(qp, qhead, qtail, q_link, q_chase, q_curr, removed);
1371 qp->q_flag &= ~QENAB;
1387 wait_svc(queue_t *qp)
1389 queue_t *wqp = _WR(qp);
1391 ASSERT(qp->q_flag & QREADR);
1397 remove_runlist(qp);
1411 if (!(qp->q_flag & QPERMOD)) {
1412 syncq_t *rsq = qp->q_syncq;
1424 mutex_enter(QLOCK(qp));
1425 while (qp->q_flag & (QINSERVICE|QENAB))
1426 cv_wait(&qp->q_wait, QLOCK(qp));
1427 mutex_exit(QLOCK(qp));
3275 shalloc(queue_t *qp)
3281 stp->sd_wrq = _WR(qp);
3352 queue_t *qp, *wqp;
3357 qp = &qip->qu_rqueue;
3361 qp->q_last = NULL;
3362 qp->q_next = NULL;
3363 qp->q_ptr = NULL;
3364 qp->q_flag = QUSE | QREADR;
3365 qp->q_bandp = NULL;
3366 qp->q_stream = NULL;
3367 qp->q_syncq = sq;
3368 qp->q_nband = 0;
3369 qp->q_nfsrv = NULL;
3370 qp->q_draining = 0;
3371 qp->q_syncqmsgs = 0;
3372 qp->q_spri = 0;
3373 qp->q_qtstamp = 0;
3374 qp->q_sqtstamp = 0;
3375 qp->q_fp = NULL;
3403 return (qp);
3412 freeq(queue_t *qp)
3416 queue_t *wqp = _WR(qp);
3418 ASSERT(qp->q_flag & QREADR);
3426 wait_svc(qp);
3428 (void) flush_syncq(qp->q_syncq, qp);
3430 ASSERT(qp->q_syncqmsgs == 0 && wqp->q_syncqmsgs == 0);
3439 flushq(qp, FLUSHALL);
3443 qp->q_next = wqp->q_next = NULL;
3444 ASSERT(!(qp->q_flag & QENAB));
3447 outer = qp->q_syncq->sq_outer;
3449 outer_remove(outer, qp->q_syncq);
3450 if (wqp->q_syncq != qp->q_syncq)
3456 if (qp->q_syncq != SQ(qp) && !(qp->q_flag & QPERMOD))
3457 free_syncq(qp->q_syncq);
3458 if (qp->q_syncq != wqp->q_syncq && wqp->q_syncq != SQ(qp))
3461 ASSERT((qp->q_sqflags & (Q_SQQUEUED | Q_SQDRAINING)) == 0);
3463 ASSERT(MUTEX_NOT_HELD(QLOCK(qp)));
3465 sq = SQ(qp);
3483 ASSERT(qp->q_first == NULL && wqp->q_first == NULL);
3484 ASSERT(qp->q_count == 0 && wqp->q_count == 0);
3485 ASSERT(qp->q_mblkcnt == 0 && wqp->q_mblkcnt == 0);
3487 qp->q_flag &= ~QUSE;
3491 /* ASSERT((qp->q_flag & QWANTW) == 0 && (wqp->q_flag & QWANTW) == 0); */
3493 qbp = qp->q_bandp;
3505 kmem_cache_free(queue_cache, qp);
4852 removeq(queue_t *qp)
4854 queue_t *wqp = _WR(qp);
4855 struct stdata *stp = STREAM(qp);
4859 syncq_t *sq = qp->q_syncq;
4865 "removeq:%p %p", qp, wqp);
4866 ASSERT(qp->q_flag&QREADR);
4872 if (qp->q_flag & QSYNCSTR) {
4890 mutex_enter(QLOCK(qp));
4891 while (qp->q_rwcnt > 0) {
4892 qp->q_flag |= QWANTRMQSYNC;
4893 cv_wait(&qp->q_wait, QLOCK(qp));
4895 mutex_exit(QLOCK(qp));
4913 isdriver = (qp->q_flag & QISDRV);
4915 sqlist = sqlist_build(qp, stp, STRMATED(stp));
4918 reset_nfsrv_ptr(qp, wqp);
4920 ASSERT(wqp->q_next == NULL || backq(qp)->q_next == qp);
4921 ASSERT(qp->q_next == NULL || backq(wqp)->q_next == wqp);
4923 if (wqp->q_next == qp) {
4927 backq(qp)->q_next = qp->q_next;
4928 if (qp->q_next)
4933 if (qp->q_next)
4934 set_qend(qp->q_next);
4947 if (qp->q_syncqmsgs != 0 || (qp->q_syncq->sq_flags & SQ_EVENTS))
4948 moved += propagate_syncq(qp);
4969 if (qp->q_next != NULL) {
4970 clr_qfull(qp);
4977 emptysq(qp->q_next->q_syncq);
5564 claimq(queue_t *qp)
5566 syncq_t *sq = qp->q_syncq;
5581 releaseq(queue_t *qp)
5583 syncq_t *sq = qp->q_syncq;
5617 claimstr(queue_t *qp)
5619 struct stdata *stp = STREAM(qp);
5631 releasestr(queue_t *qp)
5633 struct stdata *stp = STREAM(qp);
6175 queue_t *qp;
6203 qp = bp->b_queue;
6225 (*func)(qp, bp);
6372 queue_t *qp;
6529 for (qp = sq->sq_head;
6530 qp != NULL && (qp->q_draining ||
6531 (qp->q_sqflags & Q_SQDRAINING));
6532 qp = qp->q_sqnext)
6535 if (qp == NULL)
6548 qp->q_sqflags |= Q_SQDRAINING;
6550 mutex_enter(QLOCK(qp));
6551 qdrain_syncq(sq, qp);
6555 ASSERT(qp->q_sqflags & Q_SQDRAINING);
6556 qp->q_sqflags &= ~Q_SQDRAINING;
6558 * NOTE: After this point qp should not be used since it may be
6734 * but for sanity, we want to check this against the qp that
6935 * Remove all messages from a syncq (if qp is NULL) or remove all messages
6936 * that would be put into qp by drain_syncq.
6937 * Used when deleting the syncq (qp == NULL) or when detaching
6938 * a queue (qp != NULL).
6951 flush_syncq(syncq_t *sq, queue_t *qp)
6964 if (qp != NULL && sq->sq_evhead != NULL) {
6970 if (bp->b_queue == qp) {
6997 * - match qp if qp is set, remove it's messages
6998 * - all if qp is not set
7003 if ((qp == NULL) || (qp == q)) {
7036 * If qp was specified, we are done with it and are
7040 if ((qp != NULL) && (sq->sq_flags & SQ_WANTWAKEUP)) {
7054 if (qp != NULL) {
7092 propagate_syncq(queue_t *qp)
7106 sq = qp->q_syncq;
7115 ASSERT((qp->q_flag & QPERQ) || (sq->sq_count >= 1));
7122 if (qp->q_syncqmsgs) {
7123 isdriver = (qp->q_flag & QISDRV);
7126 nqp = qp->q_next;
7136 SQRM_Q(sq, qp);
7137 priority = MAX(qp->q_spri, priority);
7138 qp->q_spri = 0;
7139 head = qp->q_sqhead;
7140 tail = qp->q_sqtail;
7141 qp->q_sqhead = qp->q_sqtail = NULL;
7142 qp->q_syncqmsgs = 0;
7205 if (bp->b_queue == qp) {
7469 putnext_tail(syncq_t *sq, queue_t *qp, uint32_t passflags)
7474 ASSERT(MUTEX_NOT_HELD(QLOCK(qp)));
7509 "putnext_end:(%p, %p, %p) done", NULL, qp, sq);
7629 queue_t *qp;
7673 qp = _OTHERQ(prev_wq->q_next);
7674 while (qp && qp->q_nfsrv != qp) {
7675 qp->q_nfsrv = rnew;
7676 qp = backq(qp);
7691 for (qp = prev_wq;
7692 qp != NULL && qp->q_nfsrv != qp;
7693 qp = backq(qp)) {
7694 qp->q_nfsrv = wnew->q_nfsrv;