- /* Put buffer back to list of empty buffers */
- page = request->sclp_req.sccb;
- spin_lock_irqsave(&sclp_vt220_lock, flags);
- /* Move request from outqueue to empty queue */
- list_del(&request->list);
- sclp_vt220_outqueue_count--;
- list_add_tail((struct list_head *) page, &sclp_vt220_empty);
- /* Check if there is a pending buffer on the out queue. */
- next = NULL;
- if (!list_empty(&sclp_vt220_outqueue))
- next = list_entry(sclp_vt220_outqueue.next,
- struct sclp_vt220_request, list);
- spin_unlock_irqrestore(&sclp_vt220_lock, flags);
- if (next != NULL)
- __sclp_vt220_emit(next);
- else if (sclp_vt220_flush_later)
+ do {
+ /* Put buffer back to list of empty buffers */
+ page = request->sclp_req.sccb;
+ spin_lock_irqsave(&sclp_vt220_lock, flags);
+ /* Move request from outqueue to empty queue */
+ list_del(&request->list);
+ sclp_vt220_outqueue_count--;
+ list_add_tail((struct list_head *) page, &sclp_vt220_empty);
+ /* Check if there is a pending buffer on the out queue. */
+ request = NULL;
+ if (!list_empty(&sclp_vt220_outqueue))
+ request = list_entry(sclp_vt220_outqueue.next,
+ struct sclp_vt220_request, list);
+ spin_unlock_irqrestore(&sclp_vt220_lock, flags);
+ } while (request && __sclp_vt220_emit(request));
+ if (request == NULL && sclp_vt220_flush_later)