Lines Matching full:queue
2 * CAM request queue management functions.
42 static MALLOC_DEFINE(M_CAMQ, "CAM queue", "CAM queue buffers");
43 static MALLOC_DEFINE(M_CAMDEVQ, "CAM dev queue", "CAM dev queue buffers");
44 static MALLOC_DEFINE(M_CAMCCBQ, "CAM ccb queue", "CAM ccb queue buffers");
73 * obtained a camq structure. The XPT should ensure that the queue
77 camq_fini(struct camq *queue) in camq_fini() argument
79 if (queue->queue_array != NULL) { in camq_fini()
80 free(queue->queue_array, M_CAMQ); in camq_fini()
85 camq_resize(struct camq *queue, int new_size) in camq_resize() argument
89 KASSERT(new_size >= queue->entries, ("camq_resize: " in camq_resize()
90 "New queue size can't accommodate queued entries (%d < %d).", in camq_resize()
91 new_size, queue->entries)); in camq_resize()
103 if (queue->queue_array != NULL) { in camq_resize()
104 bcopy(queue->queue_array, new_array, in camq_resize()
105 (queue->entries + 1) * sizeof(cam_pinfo *)); in camq_resize()
106 free(queue->queue_array, M_CAMQ); in camq_resize()
108 queue->queue_array = new_array; in camq_resize()
109 queue->array_size = new_size; in camq_resize()
119 camq_insert(struct camq *queue, cam_pinfo *new_entry) in camq_insert() argument
122 KASSERT(queue->entries < queue->array_size, in camq_insert()
123 ("camq_insert: Attempt to insert into a full queue (%d >= %d)", in camq_insert()
124 queue->entries, queue->array_size)); in camq_insert()
125 queue->entries++; in camq_insert()
126 queue->queue_array[queue->entries] = new_entry; in camq_insert()
127 new_entry->index = queue->entries; in camq_insert()
128 if (queue->entries != 0) in camq_insert()
129 heap_up(queue->queue_array, queue->entries); in camq_insert()
139 camq_remove(struct camq *queue, int index) in camq_remove() argument
143 if (index <= 0 || index > queue->entries) in camq_remove()
145 "from queue %p of size %d", __func__, index, queue, in camq_remove()
146 queue->entries); in camq_remove()
148 removed_entry = queue->queue_array[index]; in camq_remove()
149 if (queue->entries != index) { in camq_remove()
150 queue->queue_array[index] = queue->queue_array[queue->entries]; in camq_remove()
151 queue->queue_array[index]->index = index; in camq_remove()
152 heap_down(queue->queue_array, index, queue->entries - 1); in camq_remove()
155 queue->entries--; in camq_remove()
166 camq_change_priority(struct camq *queue, int index, uint32_t new_priority) in camq_change_priority() argument
168 if (new_priority > queue->queue_array[index]->priority) { in camq_change_priority()
169 queue->queue_array[index]->priority = new_priority; in camq_change_priority()
170 heap_down(queue->queue_array, index, queue->entries); in camq_change_priority()
173 queue->queue_array[index]->priority = new_priority; in camq_change_priority()
174 heap_up(queue->queue_array, index); in camq_change_priority()
200 mtx_init(&devq->send_mtx, "CAM queue lock", NULL, MTX_DEF); in cam_devq_init()
263 if (new_size > ccbq->queue.array_size) in cam_ccbq_resize()
264 return (camq_resize(&ccbq->queue, new_size)); in cam_ccbq_resize()
273 if (camq_init(&ccbq->queue, in cam_ccbq_init()
285 camq_fini(&ccbq->queue); in cam_ccbq_fini()