Lines Matching refs:q

124 	zev_queue_t *q;  in zev_update_blockflag()  local
133 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_update_blockflag()
134 if (!q) in zev_update_blockflag()
136 if (q->zq_flags & ZEV_FL_BLOCK_WHILE_QUEUE_FULL) { in zev_update_blockflag()
164 zev_queue_t *q; in zev_queue_trim() local
172 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_queue_trim()
173 if (q == NULL) in zev_queue_trim()
175 if (!q->zq_oldest) in zev_queue_trim()
177 if (oldest_message > q->zq_oldest->seq) in zev_queue_trim()
178 oldest_message = q->zq_oldest->seq; in zev_queue_trim()
202 zev_queue_hold(zev_queue_t *q) in zev_queue_hold() argument
204 q->zq_refcnt++; in zev_queue_hold()
209 zev_queue_release(zev_queue_t *q) in zev_queue_release() argument
211 q->zq_refcnt--; in zev_queue_release()
212 if (q->zq_refcnt > 0) in zev_queue_release()
215 ASSERT(q->zq_busy == B_FALSE); in zev_queue_release()
218 if ((q->zq_flags & ZEV_FL_PERSISTENT) != 0) in zev_queue_release()
222 zev_queues[q->zq_minor_number - ZEV_MINOR_MIN] = NULL; in zev_queue_release()
227 cv_destroy(&q->zq_condvar); in zev_queue_release()
228 ddi_remove_minor_node(q->zq_dip, q->zq_name); in zev_queue_release()
229 devfs_clean(ddi_root_node() ? ddi_root_node() : q->zq_dip, in zev_queue_release()
231 ddi_soft_state_free(statep, q->zq_minor_number); in zev_queue_release()
244 zev_queue_t *q; in zev_queue_new() local
288 q = ddi_get_soft_state(statep, minor); in zev_queue_new()
289 memset(q, 0, sizeof(*q)); in zev_queue_new()
290 strncpy(q->zq_name, name, ZEV_MAX_QUEUE_NAME_LEN); in zev_queue_new()
291 q->zq_name[ZEV_MAX_QUEUE_NAME_LEN] = '\0'; in zev_queue_new()
292 q->zq_max_queue_len = max_queue_len; in zev_queue_new()
293 q->zq_wakeup_threshold = ZEV_DEFAULT_POLL_WAKEUP_QUEUE_LEN; in zev_queue_new()
294 q->zq_flags = flags; in zev_queue_new()
295 q->zq_refcnt = 1; in zev_queue_new()
296 q->zq_dip = dip; in zev_queue_new()
297 q->zq_minor_number = minor; in zev_queue_new()
298 cv_init(&q->zq_condvar, NULL, CV_DRIVER, NULL); in zev_queue_new()
305 if (!strcmp(q->zq_name, zev_queues[i-ZEV_MINOR_MIN]->zq_name)) { in zev_queue_new()
316 zev_queues[minor - ZEV_MINOR_MIN] = q; in zev_queue_new()
320 if (!(q->zq_flags & ZEV_FL_INITIALLY_EMPTY)) { in zev_queue_new()
321 q->zq_oldest = zev_queue_tail; in zev_queue_new()
323 while ((msg) && (q->zq_queue_len < q->zq_max_queue_len)) { in zev_queue_new()
324 q->zq_queue_len += msg->size; in zev_queue_new()
325 q->zq_queue_messages++; in zev_queue_new()
326 q->zq_oldest = msg; in zev_queue_new()
347 *queue = q; in zev_queue_new()
363 zev_queue_t *q; in zev_poll_wakeup() local
379 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_poll_wakeup()
380 if (q == NULL) in zev_poll_wakeup()
382 if (!q->zq_busy) in zev_poll_wakeup()
384 if (!q->zq_queue_len) in zev_poll_wakeup()
387 (q->zq_queue_len > q->zq_wakeup_threshold)) { in zev_poll_wakeup()
388 zev_queue_hold(q); in zev_poll_wakeup()
390 pollwakeup(&q->zq_pollhead, POLLIN); in zev_poll_wakeup()
392 zev_queue_release(q); in zev_poll_wakeup()
550 zev_queue_t *q; in zev_queue_message() local
606 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_queue_message()
607 if (!q) in zev_queue_message()
609 if ((q->zq_flags & in zev_queue_message()
612 if (q->zq_queue_len && in zev_queue_message()
613 q->zq_queue_len > q->zq_max_queue_len) { in zev_queue_message()
624 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_queue_message()
625 if (!q) in zev_queue_message()
628 while (q->zq_queue_len && in zev_queue_message()
629 q->zq_queue_len > q->zq_max_queue_len) { in zev_queue_message()
630 m = q->zq_oldest; in zev_queue_message()
633 q->zq_events_discarded++; in zev_queue_message()
634 q->zq_bytes_discarded += m->size; in zev_queue_message()
635 q->zq_oldest = m->next; in zev_queue_message()
636 q->zq_queue_len -= m->size; in zev_queue_message()
637 q->zq_queue_messages--; in zev_queue_message()
660 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_queue_message()
661 if (!q) in zev_queue_message()
664 zev_queue_hold(q); in zev_queue_message()
667 while (q->zq_max_queue_len && in zev_queue_message()
668 q->zq_queue_len > q->zq_max_queue_len) { in zev_queue_message()
670 if (q->zq_flags & ZEV_FL_BLOCK_WHILE_QUEUE_FULL) { in zev_queue_message()
675 while (q->zq_queue_len > q->zq_max_queue_len) { in zev_queue_message()
676 m = q->zq_oldest; in zev_queue_message()
679 q->zq_events_discarded++; in zev_queue_message()
680 q->zq_bytes_discarded += m->size; in zev_queue_message()
681 q->zq_oldest = m->next; in zev_queue_message()
682 q->zq_queue_len -= m->size; in zev_queue_message()
683 q->zq_queue_messages--; in zev_queue_message()
689 q->zq_queue_len += msg->size; in zev_queue_message()
690 q->zq_queue_messages++; in zev_queue_message()
691 q->zq_bytes_total += msg->size; in zev_queue_message()
692 q->zq_events_total++; in zev_queue_message()
693 if (q->zq_oldest == NULL) in zev_queue_message()
694 q->zq_oldest = msg; in zev_queue_message()
696 zev_update_statistics(op, &q->zq_statistics); in zev_queue_message()
698 if (q->zq_queue_len > q->zq_wakeup_threshold) in zev_queue_message()
700 if (q->zq_queue_len == msg->size) /* queue was empty */ in zev_queue_message()
701 cv_broadcast(&q->zq_condvar); in zev_queue_message()
703 zev_queue_release(q); in zev_queue_message()
761 zev_queue_t *q; in zev_find_queue() local
783 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_find_queue()
784 if (!q) in zev_find_queue()
786 if (!strcmp(q->zq_name, namebuf)) { in zev_find_queue()
787 zev_queue_hold(q); in zev_find_queue()
789 *out = q; in zev_find_queue()
801 zev_queue_t *q; in zev_ioc_get_queue_statistics() local
807 ret = zev_find_queue(&q, req_q, &gs.zev_queue_name); in zev_ioc_get_queue_statistics()
814 memcpy(&gs.zev_statistics, &q->zq_statistics,sizeof(gs.zev_statistics)); in zev_ioc_get_queue_statistics()
815 gs.zev_statistics.zev_queue_len = q->zq_queue_len; in zev_ioc_get_queue_statistics()
816 gs.zev_statistics.zev_bytes_read = q->zq_bytes_read; in zev_ioc_get_queue_statistics()
817 gs.zev_statistics.zev_bytes_discarded = q->zq_bytes_discarded; in zev_ioc_get_queue_statistics()
818 gs.zev_statistics.zev_max_queue_len = q->zq_max_queue_len; in zev_ioc_get_queue_statistics()
819 gs.zev_statistics.zev_cnt_discarded_events = q->zq_events_discarded; in zev_ioc_get_queue_statistics()
820 gs.zev_statistics.zev_cnt_total_events = q->zq_events_total; in zev_ioc_get_queue_statistics()
821 zev_queue_release(q); in zev_ioc_get_queue_statistics()
833 zev_queue_t *q; in zev_ioc_set_queue_properties() local
845 ret = zev_find_queue(&q, req_q, &qp.zev_queue_name); in zev_ioc_set_queue_properties()
856 q->zq_flags = qp.zev_flags; in zev_ioc_set_queue_properties()
865 old_max = q->zq_max_queue_len; in zev_ioc_set_queue_properties()
866 q->zq_max_queue_len = qp.zev_max_queue_len; in zev_ioc_set_queue_properties()
867 if (q->zq_max_queue_len < old_max) in zev_ioc_set_queue_properties()
869 if (q->zq_max_queue_len > old_max) in zev_ioc_set_queue_properties()
872 if ((qp.zev_poll_wakeup_threshold < q->zq_wakeup_threshold) && in zev_ioc_set_queue_properties()
873 (qp.zev_poll_wakeup_threshold <= q->zq_queue_len)) in zev_ioc_set_queue_properties()
874 pollwakeup(&q->zq_pollhead, POLLIN); in zev_ioc_set_queue_properties()
875 q->zq_wakeup_threshold = qp.zev_poll_wakeup_threshold; in zev_ioc_set_queue_properties()
877 zev_queue_release(q); in zev_ioc_set_queue_properties()
886 zev_queue_t *q; in zev_ioc_get_queue_properties() local
892 ret = zev_find_queue(&q, req_q, &qp.zev_queue_name); in zev_ioc_get_queue_properties()
897 qp.zev_max_queue_len = q->zq_max_queue_len; in zev_ioc_get_queue_properties()
898 qp.zev_flags = q->zq_flags; in zev_ioc_get_queue_properties()
899 qp.zev_poll_wakeup_threshold = q->zq_wakeup_threshold; in zev_ioc_get_queue_properties()
900 zev_queue_release(q); in zev_ioc_get_queue_properties()
934 zev_queue_t *q; in zev_ioc_remove_queue() local
950 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_ioc_remove_queue()
951 if (!q) in zev_ioc_remove_queue()
953 if (!strcmp(q->zq_name, name)) { in zev_ioc_remove_queue()
963 if (q->zq_busy) { in zev_ioc_remove_queue()
971 q->zq_flags = 0; in zev_ioc_remove_queue()
972 if (q->zq_to_be_removed == B_FALSE) { in zev_ioc_remove_queue()
973 q->zq_to_be_removed = B_TRUE; in zev_ioc_remove_queue()
974 zev_queue_release(q); in zev_ioc_remove_queue()
1003 zev_queue_t *q; in zev_ioc_get_queue_list() local
1011 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_ioc_get_queue_list()
1012 if (!q) in zev_ioc_get_queue_list()
1015 q->zq_name, ZEV_MAX_QUEUE_NAME_LEN); in zev_ioc_get_queue_list()
1016 gql.zev_queue_name[count].zev_namelen = strlen(q->zq_name); in zev_ioc_get_queue_list()
1032 zev_queue_t *q; in zev_ioc_set_max_queue_len() local
1043 q = zev_queues[i - ZEV_MINOR_MIN]; in zev_ioc_set_max_queue_len()
1044 if (!q) in zev_ioc_set_max_queue_len()
1046 if (q->zq_max_queue_len <= in zev_ioc_set_max_queue_len()
1049 q->zq_max_queue_len = zev_statistics.zev_max_queue_len; in zev_ioc_set_max_queue_len()
1213 zev_queue_t *q; in zev_chpoll() local
1220 if ((q = ddi_get_soft_state(statep, minor)) == NULL) { in zev_chpoll()
1226 if (q->zq_oldest) in zev_chpoll()
1231 *phpp = &q->zq_pollhead; in zev_chpoll()
1248 zev_queue_t *q; in zev_read() local
1255 q = ddi_get_soft_state(statep, minor); in zev_read()
1256 if (q == NULL) { in zev_read()
1261 msg = q->zq_oldest; in zev_read()
1272 if (cv_wait_sig(&q->zq_condvar, &zev_mutex) == 0) { in zev_read()
1277 msg = q->zq_oldest; in zev_read()
1292 q->zq_oldest = msg->next; in zev_read()
1293 q->zq_bytes_read += msg->size; in zev_read()
1294 q->zq_queue_len -= msg->size; in zev_read()
1295 q->zq_queue_messages--; in zev_read()
1297 msg = q->zq_oldest; in zev_read()
1310 zev_queue_t *q; in zev_close() local
1317 if ((q = ddi_get_soft_state(statep, minor)) == NULL) { in zev_close()
1321 if (q->zq_busy != B_TRUE) { in zev_close()
1325 q->zq_busy = B_FALSE; in zev_close()
1326 if ((q->zq_flags & ZEV_FL_PERSISTENT) == 0) in zev_close()
1327 zev_queue_release(q); in zev_close()
1336 zev_queue_t *q; in zev_open() local
1348 if ((q = ddi_get_soft_state(statep, in zev_open()
1359 ret = zev_queue_new(&q, q->zq_dip, zq_name, 0, in zev_open()
1365 q->zq_busy = B_TRUE; in zev_open()
1366 *devp = makedevice(getmajor(*devp), q->zq_minor_number); in zev_open()
1370 if ((q = ddi_get_soft_state(statep, minor)) == NULL) { in zev_open()
1376 q->zq_busy = B_TRUE; in zev_open()
1380 if (q->zq_busy == B_TRUE) { in zev_open()
1384 q->zq_busy = B_TRUE; /* can only be opened exclusively */ in zev_open()
1414 zev_queue_t *q; in zev_free_instance() local
1438 q = ddi_get_soft_state(statep, ZEV_CONTROL_DEVICE_MINOR); in zev_free_instance()
1439 if (q) { in zev_free_instance()
1446 q = zev_queues[i- ZEV_MINOR_MIN]; in zev_free_instance()
1447 if (!q) in zev_free_instance()
1449 ASSERT(q->zq_refcnt == 1); in zev_free_instance()
1450 zev_queue_release(q); in zev_free_instance()
1463 zev_queue_t *q; in zev_detach() local
1483 q = ddi_get_soft_state(statep, ZEV_CONTROL_DEVICE_MINOR); in zev_detach()
1484 if (q == NULL) { in zev_detach()
1488 if (q->zq_busy) { in zev_detach()
1532 zev_queue_t *q; in zev_attach() local
1561 q = ddi_get_soft_state(statep, ZEV_CONTROL_DEVICE_MINOR); in zev_attach()
1562 q->zq_dip = dip; in zev_attach()
1563 q->zq_refcnt = 1; in zev_attach()
1564 q->zq_busy = B_FALSE; in zev_attach()
1565 q->zq_minor_number = ZEV_CONTROL_DEVICE_MINOR; in zev_attach()
1566 q->zq_flags = ZEV_FL_PERSISTENT; in zev_attach()
1567 strcpy(q->zq_name, ZEV_CONTROL_DEVICE_NAME); in zev_attach()
1586 error = zev_queue_new(&q, dip, in zev_attach()
1631 zev_queue_t *q; in zev_getinfo() local
1636 q = ddi_get_soft_state(statep, minor); in zev_getinfo()
1637 if (q == NULL) { in zev_getinfo()
1645 *resultp = q->zq_dip; in zev_getinfo()
1648 *resultp = (void *)(uintptr_t)ddi_get_instance(q->zq_dip); in zev_getinfo()