mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
s390/qeth: fix packing buffer statistics
There's two spots in qeth_send_packet() where we don't accurately account for transmitted packing buffers in qeth's performance statistics: 1) when flushing the current buffer due to insufficient size, and the next buffer is not EMPTY, we need to account for that flushed buffer. 2) when synchronizing with the TX completion code, we reset flush_count and thus forget to account for any previously flushed buffers. Reported-by: Nils Hoppmann <niho@de.ibm.com> Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2063a5f52a
commit
3cdc8a2529
@ -4103,7 +4103,8 @@ int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
|
||||
flush_count);
|
||||
atomic_set(&queue->state,
|
||||
QETH_OUT_Q_UNLOCKED);
|
||||
return -EBUSY;
|
||||
rc = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4122,19 +4123,21 @@ int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
|
||||
* In that case we will enter this loop
|
||||
*/
|
||||
while (atomic_dec_return(&queue->state)) {
|
||||
flush_count = 0;
|
||||
start_index = queue->next_buf_to_fill;
|
||||
/* check if we can go back to non-packing state */
|
||||
flush_count += qeth_switch_to_nonpacking_if_needed(queue);
|
||||
tmp = qeth_switch_to_nonpacking_if_needed(queue);
|
||||
/*
|
||||
* check if we need to flush a packing buffer to get a pci
|
||||
* flag out on the queue
|
||||
*/
|
||||
if (!flush_count && !atomic_read(&queue->set_pci_flags_count))
|
||||
flush_count += qeth_prep_flush_pack_buffer(queue);
|
||||
if (flush_count)
|
||||
qeth_flush_buffers(queue, start_index, flush_count);
|
||||
if (!tmp && !atomic_read(&queue->set_pci_flags_count))
|
||||
tmp = qeth_prep_flush_pack_buffer(queue);
|
||||
if (tmp) {
|
||||
qeth_flush_buffers(queue, start_index, tmp);
|
||||
flush_count += tmp;
|
||||
}
|
||||
}
|
||||
out:
|
||||
/* at this point the queue is UNLOCKED again */
|
||||
if (queue->card->options.performance_stats && do_pack)
|
||||
queue->card->perf_stats.bufs_sent_pack += flush_count;
|
||||
|
Loading…
Reference in New Issue
Block a user