Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dcc49d46 authored by Ursula Braun's avatar Ursula Braun Committed by Martin Schwidefsky
Browse files

[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: default avatarUrsula Braun <braunu@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 5851fadc
Loading
Loading
Loading
Loading
+18 −8
Original line number Original line Diff line number Diff line
@@ -211,7 +211,9 @@ again:
	}
	}
	if (rc < 0) {
	if (rc < 0) {
		QDIO_DBF_TEXT3(1,trace,"sqberr");
		QDIO_DBF_TEXT3(1,trace,"sqberr");
                sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt,*cnt,ccq,q_no);
		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);
		QDIO_DBF_TEXT3(1,trace,dbf_text);
		q->handler(q->cdev,QDIO_STATUS_ACTIVATE_CHECK_CONDITION|
		q->handler(q->cdev,QDIO_STATUS_ACTIVATE_CHECK_CONDITION|
				QDIO_STATUS_LOOK_FOR_ERROR,
				QDIO_STATUS_LOOK_FOR_ERROR,
@@ -1250,7 +1252,6 @@ qdio_is_inbound_q_done(struct qdio_q *q)
	if (!no_used) {
	if (!no_used) {
		QDIO_DBF_TEXT4(0,trace,"inqisdnA");
		QDIO_DBF_TEXT4(0,trace,"inqisdnA");
		QDIO_DBF_HEX4(0,trace,&q,sizeof(void*));
		QDIO_DBF_HEX4(0,trace,&q,sizeof(void*));
		QDIO_DBF_TEXT4(0,trace,dbf_text);
		return 1;
		return 1;
	}
	}
	if (irq->is_qebsm) {
	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)
			unsigned int count, struct qdio_buffer *buffers)
{
{
	struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
	struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
	int tmp = 0;

	qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1);
	qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1);
	if (irq->is_qebsm) {
	if (irq->is_qebsm) {
		while (count)
		while (count) {
			set_slsb(q, &qidx, SLSB_CU_INPUT_EMPTY, &count);
			tmp = set_slsb(q, &qidx, SLSB_CU_INPUT_EMPTY, &count);
			if (!tmp)
				return;
		}
		return;
		return;
	}
	}
	for (;;) {
	for (;;) {
@@ -3390,11 +3396,15 @@ qdio_do_qdio_fill_output(struct qdio_q *q, unsigned int qidx,
			 unsigned int count, struct qdio_buffer *buffers)
			 unsigned int count, struct qdio_buffer *buffers)
{
{
	struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
	struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
	int tmp = 0;


	qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1);
	qidx &= (QDIO_MAX_BUFFERS_PER_Q - 1);
	if (irq->is_qebsm) {
	if (irq->is_qebsm) {
		while (count)
		while (count) {
			set_slsb(q, &qidx, SLSB_CU_OUTPUT_PRIMED, &count);
			tmp = set_slsb(q, &qidx, SLSB_CU_OUTPUT_PRIMED, &count);
			if (!tmp)
				return;
		}
		return;
		return;
	}
	}