Commit cafebf86 authored by Julian Wiedmann's avatar Julian Wiedmann Committed by Vasily Gorbik

s390/qdio: remove q->first_to_kick

q->first_to_kick is obsolete, and can be replaced by q->first_to_check.

Both cursors start off at 0. Out of the three code paths that update
first_to_check, the qdio_inspect_queue() path is irrelevant as it
doesn't even touch first_to_kick anymore.
This leaves us with the two tasklet-driven code paths. Here any update
to first_to_check is followed by a call to qdio_kick_handler(), which
advances first_to_kick by the same amount.

So the two cursors will differ only for a tiny moment. Drivers have no
way of deterministically observing this difference, and thus it doesn't
matter which of the cursors we use for reporting an error to q->handler.
Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 0623b7dd
...@@ -221,9 +221,6 @@ struct qdio_q { ...@@ -221,9 +221,6 @@ struct qdio_q {
*/ */
int first_to_check; int first_to_check;
/* beginning position for calling the program */
int first_to_kick;
/* number of buffers in use by the adapter */ /* number of buffers in use by the adapter */
atomic_t nr_buf_used; atomic_t nr_buf_used;
......
...@@ -143,7 +143,7 @@ static int qdio_do_eqbs(struct qdio_q *q, unsigned char *state, ...@@ -143,7 +143,7 @@ static int qdio_do_eqbs(struct qdio_q *q, unsigned char *state,
DBF_ERROR("%4x EQBS ERROR", SCH_NO(q)); DBF_ERROR("%4x EQBS ERROR", SCH_NO(q));
DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
q->handler(q->irq_ptr->cdev, QDIO_ERROR_GET_BUF_STATE, q->nr, q->handler(q->irq_ptr->cdev, QDIO_ERROR_GET_BUF_STATE, q->nr,
q->first_to_kick, count, q->irq_ptr->int_parm); q->first_to_check, count, q->irq_ptr->int_parm);
return 0; return 0;
} }
} }
...@@ -191,7 +191,7 @@ static int qdio_do_sqbs(struct qdio_q *q, unsigned char state, int start, ...@@ -191,7 +191,7 @@ static int qdio_do_sqbs(struct qdio_q *q, unsigned char state, int start,
DBF_ERROR("%4x SQBS ERROR", SCH_NO(q)); DBF_ERROR("%4x SQBS ERROR", SCH_NO(q));
DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
q->handler(q->irq_ptr->cdev, QDIO_ERROR_SET_BUF_STATE, q->nr, q->handler(q->irq_ptr->cdev, QDIO_ERROR_SET_BUF_STATE, q->nr,
q->first_to_kick, count, q->irq_ptr->int_parm); q->first_to_check, count, q->irq_ptr->int_parm);
return 0; return 0;
} }
} }
...@@ -622,10 +622,9 @@ static inline unsigned long qdio_aob_for_buffer(struct qdio_output_q *q, ...@@ -622,10 +622,9 @@ static inline unsigned long qdio_aob_for_buffer(struct qdio_output_q *q,
return phys_aob; return phys_aob;
} }
static void qdio_kick_handler(struct qdio_q *q, unsigned int count) static void qdio_kick_handler(struct qdio_q *q, unsigned int start,
unsigned int count)
{ {
int start = q->first_to_kick;
if (unlikely(q->irq_ptr->state != QDIO_IRQ_STATE_ACTIVE)) if (unlikely(q->irq_ptr->state != QDIO_IRQ_STATE_ACTIVE))
return; return;
...@@ -642,7 +641,6 @@ static void qdio_kick_handler(struct qdio_q *q, unsigned int count) ...@@ -642,7 +641,6 @@ static void qdio_kick_handler(struct qdio_q *q, unsigned int count)
q->irq_ptr->int_parm); q->irq_ptr->int_parm);
/* for the next time */ /* for the next time */
q->first_to_kick = add_buf(start, count);
q->qdio_error = 0; q->qdio_error = 0;
} }
...@@ -666,9 +664,9 @@ static void __qdio_inbound_processing(struct qdio_q *q) ...@@ -666,9 +664,9 @@ static void __qdio_inbound_processing(struct qdio_q *q)
if (count == 0) if (count == 0)
return; return;
qdio_kick_handler(q, start, count);
start = add_buf(start, count); start = add_buf(start, count);
q->first_to_check = start; q->first_to_check = start;
qdio_kick_handler(q, count);
if (!qdio_inbound_q_done(q, start)) { if (!qdio_inbound_q_done(q, start)) {
/* means poll time is not yet over */ /* means poll time is not yet over */
...@@ -824,7 +822,7 @@ static void __qdio_outbound_processing(struct qdio_q *q) ...@@ -824,7 +822,7 @@ static void __qdio_outbound_processing(struct qdio_q *q)
count = qdio_outbound_q_moved(q, start); count = qdio_outbound_q_moved(q, start);
if (count) { if (count) {
q->first_to_check = add_buf(start, count); q->first_to_check = add_buf(start, count);
qdio_kick_handler(q, count); qdio_kick_handler(q, start, count);
} }
if (queue_type(q) == QDIO_ZFCP_QFMT && !pci_out_supported(q->irq_ptr) && if (queue_type(q) == QDIO_ZFCP_QFMT && !pci_out_supported(q->irq_ptr) &&
...@@ -945,7 +943,6 @@ static void qdio_handle_activate_check(struct ccw_device *cdev, ...@@ -945,7 +943,6 @@ static void qdio_handle_activate_check(struct ccw_device *cdev,
{ {
struct qdio_irq *irq_ptr = cdev->private->qdio_data; struct qdio_irq *irq_ptr = cdev->private->qdio_data;
struct qdio_q *q; struct qdio_q *q;
int count;
DBF_ERROR("%4x ACT CHECK", irq_ptr->schid.sch_no); DBF_ERROR("%4x ACT CHECK", irq_ptr->schid.sch_no);
DBF_ERROR("intp :%lx", intparm); DBF_ERROR("intp :%lx", intparm);
...@@ -960,9 +957,8 @@ static void qdio_handle_activate_check(struct ccw_device *cdev, ...@@ -960,9 +957,8 @@ static void qdio_handle_activate_check(struct ccw_device *cdev,
goto no_handler; goto no_handler;
} }
count = sub_buf(q->first_to_check, q->first_to_kick);
q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE, q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE,
q->nr, q->first_to_kick, count, irq_ptr->int_parm); q->nr, q->first_to_check, 0, irq_ptr->int_parm);
no_handler: no_handler:
qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED); qdio_set_state(irq_ptr, QDIO_IRQ_STATE_STOPPED);
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment