[S390] cio: qdio slsb setup

Make sure set_slsb problems are handled correctly in
qdio_do_qdio_fill_input() and qdio_do_qdio_fill_output.

Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Ursula Braun 2007-03-19 13:18:12 +01:00 committed by Martin Schwidefsky
parent 5851fadce8
commit dcc49d460c

View File

@ -210,9 +210,11 @@ again:
goto again;
}
if (rc < 0) {
QDIO_DBF_TEXT3(1,trace,"sqberr");
sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt,*cnt,ccq,q_no);
QDIO_DBF_TEXT3(1,trace,dbf_text);
QDIO_DBF_TEXT3(1,trace,"sqberr");
sprintf(dbf_text,"%2x,%2x",tmp_cnt,*cnt);
QDIO_DBF_TEXT3(1,trace,dbf_text);
sprintf(dbf_text,"%d,%d",ccq,q_no);
QDIO_DBF_TEXT3(1,trace,dbf_text);
q->handler(q->cdev,QDIO_STATUS_ACTIVATE_CHECK_CONDITION|
QDIO_STATUS_LOOK_FOR_ERROR,
0, 0, 0, -1, -1, q->int_parm);
@ -1250,7 +1252,6 @@ qdio_is_inbound_q_done(struct qdio_q *q)
if (!no_used) {
QDIO_DBF_TEXT4(0,trace,"inqisdnA");
QDIO_DBF_HEX4(0,trace,&q,sizeof(void*));
QDIO_DBF_TEXT4(0,trace,dbf_text);
return 1;
}
if (irq->is_qebsm) {
@ -3371,10 +3372,15 @@ qdio_do_qdio_fill_input(struct qdio_q *q, unsigned int qidx,
unsigned int count, struct qdio_buffer *buffers)
{
struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
int tmp = 0;
qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1);
if (irq->is_qebsm) {
while (count)
set_slsb(q, &qidx, SLSB_CU_INPUT_EMPTY, &count);
while (count) {
tmp = set_slsb(q, &qidx, SLSB_CU_INPUT_EMPTY, &count);
if (!tmp)
return;
}
return;
}
for (;;) {
@ -3390,11 +3396,15 @@ qdio_do_qdio_fill_output(struct qdio_q *q, unsigned int qidx,
unsigned int count, struct qdio_buffer *buffers)
{
struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
int tmp = 0;
qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1);
if (irq->is_qebsm) {
while (count)
set_slsb(q, &qidx, SLSB_CU_OUTPUT_PRIMED, &count);
while (count) {
tmp = set_slsb(q, &qidx, SLSB_CU_OUTPUT_PRIMED, &count);
if (!tmp)
return;
}
return;
}