forked from luck/tmp_suning_uos_patched
[S390] qdio: add eqbs/sqbs instruction counters
Add counters for the eqbs and sqbs instructions that indicate how often we issued the instructions and how often the instructions returned with less buffers than specified. Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
bbd50e172f
commit
23589d057a
@ -129,6 +129,7 @@ static int qdio_do_eqbs(struct qdio_q *q, unsigned char *state,
|
|||||||
char dbf_text[15];
|
char dbf_text[15];
|
||||||
|
|
||||||
BUG_ON(!q->irq_ptr->sch_token);
|
BUG_ON(!q->irq_ptr->sch_token);
|
||||||
|
qdio_perf_stat_inc(&perf_stats.debug_eqbs_all);
|
||||||
|
|
||||||
if (!q->is_input_q)
|
if (!q->is_input_q)
|
||||||
nr += q->irq_ptr->nr_input_qs;
|
nr += q->irq_ptr->nr_input_qs;
|
||||||
@ -139,8 +140,10 @@ static int qdio_do_eqbs(struct qdio_q *q, unsigned char *state,
|
|||||||
/* At least one buffer was processed, return and extract the remaining
|
/* At least one buffer was processed, return and extract the remaining
|
||||||
* buffers later.
|
* buffers later.
|
||||||
*/
|
*/
|
||||||
if ((ccq == 96) && (count != tmp_count))
|
if ((ccq == 96) && (count != tmp_count)) {
|
||||||
|
qdio_perf_stat_inc(&perf_stats.debug_eqbs_incomplete);
|
||||||
return (count - tmp_count);
|
return (count - tmp_count);
|
||||||
|
}
|
||||||
if (rc == 1) {
|
if (rc == 1) {
|
||||||
QDIO_DBF_TEXT5(1, trace, "eqAGAIN");
|
QDIO_DBF_TEXT5(1, trace, "eqAGAIN");
|
||||||
goto again;
|
goto again;
|
||||||
@ -179,6 +182,7 @@ static int qdio_do_sqbs(struct qdio_q *q, unsigned char state, int start,
|
|||||||
char dbf_text[15];
|
char dbf_text[15];
|
||||||
|
|
||||||
BUG_ON(!q->irq_ptr->sch_token);
|
BUG_ON(!q->irq_ptr->sch_token);
|
||||||
|
qdio_perf_stat_inc(&perf_stats.debug_sqbs_all);
|
||||||
|
|
||||||
if (!q->is_input_q)
|
if (!q->is_input_q)
|
||||||
nr += q->irq_ptr->nr_input_qs;
|
nr += q->irq_ptr->nr_input_qs;
|
||||||
@ -187,6 +191,7 @@ static int qdio_do_sqbs(struct qdio_q *q, unsigned char state, int start,
|
|||||||
rc = qdio_check_ccq(q, ccq);
|
rc = qdio_check_ccq(q, ccq);
|
||||||
if (rc == 1) {
|
if (rc == 1) {
|
||||||
QDIO_DBF_TEXT5(1, trace, "sqAGAIN");
|
QDIO_DBF_TEXT5(1, trace, "sqAGAIN");
|
||||||
|
qdio_perf_stat_inc(&perf_stats.debug_sqbs_incomplete);
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
@ -80,6 +80,12 @@ static int qdio_perf_proc_show(struct seq_file *m, void *v)
|
|||||||
(long)atomic_long_read(&perf_stats.debug_stop_polling));
|
(long)atomic_long_read(&perf_stats.debug_stop_polling));
|
||||||
seq_printf(m, "AI inbound tasklet loops after stop polling\t: %li\n",
|
seq_printf(m, "AI inbound tasklet loops after stop polling\t: %li\n",
|
||||||
(long)atomic_long_read(&perf_stats.thinint_inbound_loop2));
|
(long)atomic_long_read(&perf_stats.thinint_inbound_loop2));
|
||||||
|
seq_printf(m, "QEBSM EQBS total/incomplete\t\t\t: %li/%li\n",
|
||||||
|
(long)atomic_long_read(&perf_stats.debug_eqbs_all),
|
||||||
|
(long)atomic_long_read(&perf_stats.debug_eqbs_incomplete));
|
||||||
|
seq_printf(m, "QEBSM SQBS total/incomplete\t\t\t: %li/%li\n",
|
||||||
|
(long)atomic_long_read(&perf_stats.debug_sqbs_all),
|
||||||
|
(long)atomic_long_read(&perf_stats.debug_sqbs_incomplete));
|
||||||
seq_printf(m, "\n");
|
seq_printf(m, "\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,10 @@ struct qdio_perf_stats {
|
|||||||
/* for debugging */
|
/* for debugging */
|
||||||
atomic_long_t debug_tl_out_timer;
|
atomic_long_t debug_tl_out_timer;
|
||||||
atomic_long_t debug_stop_polling;
|
atomic_long_t debug_stop_polling;
|
||||||
|
atomic_long_t debug_eqbs_all;
|
||||||
|
atomic_long_t debug_eqbs_incomplete;
|
||||||
|
atomic_long_t debug_sqbs_all;
|
||||||
|
atomic_long_t debug_sqbs_incomplete;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct qdio_perf_stats perf_stats;
|
extern struct qdio_perf_stats perf_stats;
|
||||||
|
Loading…
Reference in New Issue
Block a user