Lines Matching refs:sp
191 stage_info_t *sp = wp->stage;
192 boolean_t is_producer = (sp->stagenum == 0);
215 DBG("Starting %s %d, stage: %d\n", sp->name, wp->setnum, sp->stagenum);
246 pthread_mutex_lock(&sp->input->mtx);
248 if (sp->work_todo == 0) {
249 pthread_mutex_unlock(&sp->input->mtx);
252 workp = TAILQ_FIRST(&(sp->input->queue));
256 sp->name, wp->setnum, sp->stagenum, sp->work_todo);
257 sp->input->waiters++;
258 pthread_cond_wait(&sp->input->cnd, &sp->input->mtx);
259 sp->input->waiters--;
261 TAILQ_REMOVE(&(sp->input->queue), workp, link);
262 iteration = sp->work_todo--;
263 pthread_mutex_unlock(&sp->input->mtx);
276 sp->name, wp->setnum, sp->stagenum, iteration, workp, workp->data);
279 (void) sp->fn(workp->data, workp->isize);
285 pthread_mutex_lock(&sp->output->mtx);
286 TAILQ_INSERT_TAIL(&(sp->output->queue), workp, link);
287 if (sp->output->waiters) {
289 sp->name, wp->setnum, sp->stagenum, iteration);
290 pthread_cond_signal(&sp->output->cnd);
292 pthread_mutex_unlock(&sp->output->mtx);
297 pthread_cond_broadcast(&sp->output->cnd);
299 DBG("Ending %s[%d,%d]\n", sp->name, wp->setnum, sp->stagenum);
320 stage_info_t *sp;
400 sp = &stage_info[i];
401 sp->stagenum = i;
402 pthread_mutex_init(&sp->bufq.mtx, NULL);
403 pthread_cond_init(&sp->bufq.cnd, NULL);
404 TAILQ_INIT(&sp->bufq.queue);
405 sp->bufq.waiters = 0;
407 sp->fn = producer_fnp;
408 sp->name = "producer";
410 sp->fn = consumer_fnp;
411 sp->name = "consumer";
413 sp->input = &sp->bufq;
414 sp->output = &stage_info[(i + 1) % stages].bufq;