mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [patch 1/3] s390: V=V qdio fixes
@ 2006-02-20 12:49 Heiko Carstens
  0 siblings, 0 replies; only message in thread
From: Heiko Carstens @ 2006-02-20 12:49 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, Martin Schwidefsky, Frank Pavlic

From: Frank Pavlic <fpavlic@de.ibm.com>

Using FCP devices with V=V support, the input queue stalled when CCQ 97 had
been returned in qdio_do_eqbs. When this happen we have to reissue the eqbs
instruction.
Another bug was when V=V was enabled we checked if hardware has SIGA-sync
support. If not we returned with 0 from tiqdio_is_inbound_q_done. Thus qdio
lost initiative on FCP devices and input queue stalled. Running devices in
V=V there is no SIGA-sync support but nevertheless we have to process
tiqdio_is_inbound_q_done either.

Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
---

 drivers/s390/cio/qdio.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff -urpN linux-2.6/drivers/s390/cio/qdio.c linux-2.6-patched/drivers/s390/cio/qdio.c
--- linux-2.6/drivers/s390/cio/qdio.c	2006-02-20 10:33:01.000000000 +0100
+++ linux-2.6-patched/drivers/s390/cio/qdio.c	2006-02-20 10:33:13.000000000 +0100
@@ -165,8 +165,13 @@ qdio_do_eqbs(struct qdio_q *q, unsigned 
 	q_no = q->q_no;
 	if(!q->is_input_q)
 		q_no += irq->no_input_qs;
+again:
 	ccq = do_eqbs(irq->sch_token, state, q_no, start, cnt);
 	rc = qdio_check_ccq(q, ccq);
+	if (rc == 1) {
+		QDIO_DBF_TEXT5(1,trace,"eqAGAIN");
+		goto again;
+	}
 	if (rc < 0) {
                 QDIO_DBF_TEXT2(1,trace,"eqberr");
                 sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt, *cnt, ccq, q_no);
@@ -195,8 +200,13 @@ qdio_do_sqbs(struct qdio_q *q, unsigned 
 	q_no = q->q_no;
 	if(!q->is_input_q)
 		q_no += irq->no_input_qs;
+again:
 	ccq = do_sqbs(irq->sch_token, state, q_no, start, cnt);
 	rc = qdio_check_ccq(q, ccq);
+	if (rc == 1) {
+		QDIO_DBF_TEXT5(1,trace,"sqAGAIN");
+		goto again;
+	}
 	if (rc < 0) {
                 QDIO_DBF_TEXT3(1,trace,"sqberr");
                 sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt,*cnt,ccq,q_no);
@@ -1187,8 +1197,7 @@ tiqdio_is_inbound_q_done(struct qdio_q *
 
 	if (!no_used)
 		return 1;
-
-	if (!q->siga_sync)
+	if (!q->siga_sync && !irq->is_qebsm)
 		/* we'll check for more primed buffers in qeth_stop_polling */
 		return 0;
 	if (irq->is_qebsm) {

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2006-02-20 12:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-20 12:49 [patch 1/3] s390: V=V qdio fixes Heiko Carstens

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®