Lines Matching refs:vq
38 static Vuid_q_node *vq_alloc_node(Vuid_queue *vq);
39 static void vq_free_node(Vuid_queue *vq, Vuid_q_node *vqn);
50 vq_initialize(Vuid_queue *vq, caddr_t data, u_int bytes) in vq_initialize() argument
55 vq->top = vq->bottom = vq->free = VUID_Q_NODE_NULL; in vq_initialize()
56 vq->size = 1 + (bytes - sizeof (Vuid_q_node)) / sizeof (Vuid_q_node); in vq_initialize()
59 vq->num = vq->size; in vq_initialize()
60 for (vqn = new_vqns; vqn < new_vqns + vq->size; vqn++) in vq_initialize()
61 vq_free_node(vq, vqn); in vq_initialize()
65 vq_put(Vuid_queue *vq, Firm_event *firm_event) in vq_put() argument
70 for (vp = vq->bottom; vp; vp = vp->prev) { in vq_put()
75 Vuid_q_node *vqn = vq_alloc_node(vq); in vq_put()
90 if (vp == vq->bottom) in vq_put()
91 vq->bottom = vqn; in vq_put()
93 if (vq->top == VUID_Q_NODE_NULL) in vq_put()
94 vq->top = vqn; in vq_put()
99 return (vq_putback(vq, firm_event)); in vq_put()
103 vq_get(Vuid_queue *vq, Firm_event *firm_event) in vq_get() argument
105 Vuid_q_node *vqn = vq->top; in vq_get()
113 vq->top = vqn->next; in vq_get()
115 if (vq->top != VUID_Q_NODE_NULL) in vq_get()
116 vq->top->prev = VUID_Q_NODE_NULL; in vq_get()
118 if (vq->bottom == vqn) in vq_get()
119 vq->bottom = VUID_Q_NODE_NULL; in vq_get()
121 vq_free_node(vq, vqn); in vq_get()
126 vq_peek(Vuid_queue *vq, Firm_event *firm_event) in vq_peek() argument
128 if (vq->top == VUID_Q_NODE_NULL) in vq_peek()
130 *firm_event = vq->top->firm_event; in vq_peek()
135 vq_putback(Vuid_queue *vq, Firm_event *firm_event) in vq_putback() argument
137 Vuid_q_node *vqn = vq_alloc_node(vq); in vq_putback()
143 vqn->next = vq->top; in vq_putback()
147 if (vq->top != VUID_Q_NODE_NULL) in vq_putback()
148 vq->top->prev = vqn; in vq_putback()
150 vq->top = vqn; in vq_putback()
152 if (vq->bottom == VUID_Q_NODE_NULL) in vq_putback()
153 vq->bottom = vqn; in vq_putback()
158 vq_compress(Vuid_queue *vq, int factor) in vq_compress() argument
166 if (vq->top == VUID_Q_NODE_NULL) in vq_compress()
168 num_start = vq->num; in vq_compress()
175 tv_interval = tv_subt(vq->bottom->firm_event.time, in vq_compress()
176 vq->top->firm_event.time); in vq_compress()
177 tv_avg_diff = tv_divide(tv_interval, vq->num); in vq_compress()
180 for (base = vq->top; base; base = base->next) { in vq_compress()
228 vq_delete_node(vq, victim); in vq_compress()
234 return (num_start - vq->num); in vq_compress()
246 vq_delete_node(Vuid_queue *vq, Vuid_q_node *vqn) in vq_delete_node() argument
249 if (vqn == vq->top) { in vq_delete_node()
250 (void) vq_get(vq, FIRM_EVENT_NULL); in vq_delete_node()
256 if (vq->bottom == vqn) in vq_delete_node()
257 vq->bottom = vqn->prev; in vq_delete_node()
262 vq_free_node(vq, vqn); in vq_delete_node()
270 vq_alloc_node(Vuid_queue *vq) in vq_alloc_node() argument
274 if (vq->free == VUID_Q_NODE_NULL) in vq_alloc_node()
276 vqn = vq->free; in vq_alloc_node()
277 vq->free = vq->free->next; in vq_alloc_node()
278 vq->num++; in vq_alloc_node()
284 vq_free_node(Vuid_queue *vq, Vuid_q_node *vqn) in vq_free_node() argument
286 vqn->next = vq->free; in vq_free_node()
288 vq->free = vqn; in vq_free_node()
289 vq->num--; in vq_free_node()